diff options
1859 files changed, 63914 insertions, 44275 deletions
@@ -6,25 +6,35 @@ Andreas Haas <liu.gam3@gmail.com> Andreas Haas <liu.gam3@gmail.com> <hinsbart@gmail.com> Andreas Haas <liu.gam3@gmail.com> <hinsbart@users.noreply.github.com> Andreas Haas <liu.gam3@gmail.com> <entenflugstuhl@gmail.com> +Anish Bhobe <anishbhobe@hotmail.com> +Anutrix <numaanzaheerahmed@yahoo.com> +Aren Villanueva <arenvillanueva@yomogi-soft.com> <aren@displaysweet.com> Ariel Manzur <ariel@godotengine.org> Ariel Manzur <ariel@godotengine.org> <punto@godotengine.org> Ariel Manzur <ariel@godotengine.org> <ariel@okamstudio.com> Ariel Manzur <ariel@godotengine.org> <punto@Ariels-Mac-mini.local> Ariel Manzur <ariel@godotengine.org> <punto@Ariels-Mac-mini-2.local> Bastiaan Olij <mux213@gmail.com> +Benjamin <mafortion.benjamin@gmail.com> Bernhard Liebl <Bernhard.Liebl@gmx.org> <poke1024@gmx.de> Bernhard Liebl <Bernhard.Liebl@gmx.org> <poke1024@gmx.org> +Chaosus <chaosus89@gmail.com> Chris Bradfield <chris@kidscancode.org> <cb@scribe.net> Clay John <claynjohn@gmail.com> Clay John <claynjohn@gmail.com> <clayjohn@shaw.ca> Dana Olson <dana@shineuponthee.com> <adolson@gmail.com> Daniel J. Ramirez <djrmuv@gmail.com> +Fabian <supagu@gmail.com> Ferenc Arn <tagcup@yahoo.com> Ferenc Arn <tagcup@yahoo.com> <tagcup@users.noreply.github.com> Geequlim <geequlim@gmail.com> Gilles Roudiere <gilles.roudiere@gmail.com> Gilles Roudiere <gilles.roudiere@gmail.com> <gilles.roudiere@laas.fr> Guilherme Felipe <guilhermefelipecgs@gmail.com> +Hanif Bin Ariffin <hanif.ariffin.4326@gmail.com> +Hein-Pieter van Braam-Stewart <hp@tmm.cx> +Hubert Jarosz <marqin.pl@gmail.com> +Hubert Jarosz <marqin.pl@gmail.com> <marqin.pl+git@gmail.com> Hugo Locurcio <hugo.locurcio@hugo.pro> <hugo.l@openmailbox.org> Hugo Locurcio <hugo.locurcio@hugo.pro> <Calinou@users.noreply.github.com> Hugo Locurcio <hugo.locurcio@hugo.pro> Calinou <calinou@opmbx.org> @@ -36,34 +46,62 @@ J08nY <johny@neuromancer.sk> <jancar.jj@gmail.com> J08nY <johny@neuromancer.sk> <J08nY@users.noreply.github.com> Jakub Grzesik <kubecz3k@gmail.com> Jérôme Gully <jerome.gully0@gmail.com> +JFonS <joan.fonssanchez@gmail.com> Juan Linietsky <reduzio@gmail.com> Juan Linietsky <reduzio@gmail.com> <juan@godotengine.org> Juan Linietsky <reduzio@gmail.com> <juan@okamstudio.com> Juan Linietsky <reduzio@gmail.com> <reduz@Juans-MBP.fibertel.com.ar> Juan Linietsky <reduzio@gmail.com> <red@kyoko> Julian Murgia <the.straton@gmail.com> +Kanabenki <lucien.menassol@gmail.com> <18357657+Kanabenki@users.noreply.github.com> Kelly Thomas <kelly.thomas@hotmail.com.au> +K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com> Leon Krause <lk@leonkrause.com> <eska@eska.me> Leon Krause <lk@leonkrause.com> <eska014@users.noreply.github.com> Marcelo Fernandez <marcelofg55@gmail.com> Marcin Zawiejski <dragmz@gmail.com> Mariano Javier Suligoy <marianognu.easyrpg@gmail.com> Mario Schlack <m4r10.5ch14ck@gmail.com> +marxin <mliska@suse.cz> +marynate <mary.w.nate@gmail.com> <marynate@github.com> Max Hilbrunner <m.hilbrunner@gmail.com> Max Hilbrunner <m.hilbrunner@gmail.com> <mhilbrunner@users.noreply.github.com> +Michael Alexsander Silva Dias <michaelalexsander@protonmail.com> +Nathan Lovato <nathan@gdquest.com> Nathan Warden <nathan@nathanwarden.com> <nathanwardenlee@icloud.com> +Nils ANDRÉ-CHANG <nils@nilsand.re> +Nils ANDRÉ-CHANG <nils@nilsand.re> <nils.andre.chang@gmail.com> Nuno Donato <nunodonato@gmail.com> <n.donato@estrelasustentavel.pt> Pedro J. Estébanez <pedrojrulez@gmail.com> <RandomShaper@users.noreply.github.com> Paul Batty <p_batty@hotmail.co.uk> Paul Batty <p_batty@hotmail.co.uk> <Paulb23@users.noreply.github.com> +Pawel Kowal <pkowal1982@gmail.com> <pawel.kowal@javart.eu> 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> +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> +RaphaelHunter <raphael10241024@gmail.com> +RaphaelHunter <raphael10241024@gmail.com> <Raphael10241024@gmail.com> +RaphaelHunter <raphael10241024@gmail.com> <raphael20141024@gmail.com> Rémi Verschelde <rverschelde@gmail.com> <remi@verschelde.fr> +Rhody Lugo <rhodylugo@gmail.com> <rhodylugo@me.com> +Robin Hübner <profan@prfn.se> <robinhubner@gmail.com> +romulox_x <romulox_x@yahoo.com> Ruslan Mustakov <r.mustakov@gmail.com> <ruslan.mustakov@xored.com> Saracen <SaracenOne@gmail.com> +sheepandshepherd <sheepandshepherd@hotmail.com> <sheepandshepherd@users.noreply.github.com> +Swarnim Arun <swarnimarun11@gmail.com> Theo Hallenius <redsymbzone@hotmail.com> Thomas Herzog <therzog@mail.de> Thomas Herzog <therzog@mail.de> <thomas.herzog@mail.com> Thomas Herzog <therzog@mail.de> <thomas.herzog@simedis.com> +Twarit <wtwarit@gmail.com> +V.VamsiKrishna <vk@bsb.in> <vamsikrishna.v@gmail.com> +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> Zher Huei Lee <lee.zh.92@gmail.com> diff --git a/.travis.yml b/.travis.yml index a763fa5376..8a6f80002b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,7 @@ stages: env: global: - - SCONS_CACHE=$HOME/.scons_cache + - SCONS_CACHE=$HOME/.scons_cache/$TRAVIS_BRANCH - SCONS_CACHE_LIMIT=1024 - OPTIONS="debug_symbols=no verbose=yes progress=no builtin_libpng=yes" - secure: "uch9QszCgsl1qVbuzY41P7S2hWL2IiNFV4SbAYRCdi0oJ9MIu+pVyrQdpf3+jG4rH6j4Rffl+sN17Zz4dIDDioFL1JwqyCqyCyswR8uACC0Rr8gr4Mi3+HIRbv+2s2P4cIQq41JM8FJe84k9jLEMGCGh69w+ibCWoWs74CokYVA=" @@ -71,10 +71,14 @@ matrix: env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="warnings=extra werror=yes" os: linux compiler: clang + addons: + apt: + packages: + - openjdk-8-jdk - name: macOS editor (debug, Clang) stage: build - env: PLATFORM=osx TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-clang + env: PLATFORM=osx TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-clang EXTRA_ARGS="warnings=extra werror=yes" os: osx compiler: clang @@ -116,14 +120,14 @@ before_install: install: - pip install --user scons; - if [ "$TRAVIS_OS_NAME" = "linux" ] && [ "$PLATFORM" = "android" ]; then + export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64; + export PATH=/usr/lib/jvm/java-8-openjdk-amd64/jre/bin:${PATH}; + java -version; misc/travis/android-tools-linux.sh; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH=${PATH}:/Users/travis/Library/Python/2.7/bin; fi - - if [ "$TRAVIS_OS_NAME" = "osx" ] && [ "$PLATFORM" = "android" ]; then - misc/travis/android-tools-osx.sh; - fi before_script: - if [ "$PLATFORM" = "android" ]; then diff --git a/AUTHORS.md b/AUTHORS.md index 523f253228..c5981306c4 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -41,11 +41,12 @@ name is available. Ariel Manzur (punto-) Bastiaan Olij (BastiaanOlij) Ben Brookshire (sheepandshepherd) - Benjamin (Nallebeorn) + Benjamin Larsson (Nallebeorn) Bernard Liebl (poke1024) BÅ‚ażej SzczygieÅ‚ (zaps166) Bojidar Marinov (bojidar-bg) bruvzg + Cameron Reikes (creikey) Camille Mohr-Daurat (pouleyKetchoupp) Carl Olsson (not-surt) Carter Anderson (cart) @@ -54,10 +55,11 @@ name is available. Dana Olson (adolson) Daniel J. Ramirez (djrm) Daniel Rakos (aqnuep) + David Sichma (DavidSichma) Dharkael (lupoDharkael) Dmitry Koteroff (Krakean) DualMatrix - Emmanuel Barroga (sparkart) + Emmanuel Barroga (codecustard) Emmanuel Leblond (touilleMan) Eric Lasota (elasota) est31 @@ -70,8 +72,8 @@ name is available. Gerrit Großkopf (Grosskopf) Gilles Roudiere (groud) Guilherme Felipe de C. G. da Silva (guilhermefelipecgs) - Hanif A (hbina) - Hein-Pieter van Braam (hpvb) + Hanif Bin Ariffin (hbina) + Hein-Pieter van Braam-Stewart (hpvb) Hiroshi Ogawa (hi-ogawa) homer666 Hubert Jarosz (Marqin) @@ -109,14 +111,17 @@ name is available. Max Hilbrunner (mhilbrunner) merumelu Michael Alexsander Silva Dias (YeldhamDev) + MichiRecRoom (LikeLakers2) mrezai Nathan Warden (NathanWarden) + Nils André-Chang (NilsIrl) Nuno Donato (nunodonato) Ovnuniarchos Pascal Richter (ShyRed) Patrick (firefly2442) Paul Batty (Paulb23) Paul Joannon (paulloz) + Paul Trojahn (ptrojahn) Pawel Kowal (pkowal1982) Pedro J. Estébanez (RandomShaper) Pieter-Jan Briers (PJB3005) @@ -125,10 +130,12 @@ name is available. RafaÅ‚ Mikrut (qarmin) Ralf Hölzemer (rollenrolm) Ramesh Ravone (RameshRavone) + raphael10241024 Ray Koopa (RayKoopa) Rémi Verschelde (akien-mga) Rhody Lugo (rraallvv) Roberto F. Arroyo (robfram) + Robin Hübner (profan) romulox-x Ruslan Mustakov (endragor) Saniko (sanikoyes) @@ -136,11 +143,13 @@ name is available. SaracenOne sersoong Simon Wenner (swenner) + Swarnim Arun (minraws) Theo Hallenius (TheoXD) Thomas Herzog (karroffel) Timo (toger5) Timo Schwarzer (timoschwarzer) Tomasz Chabora (KoBeWi) + Twarit Waikar (IronicallySerious) Vinzenz Feenstra (vinzenz) 박한얼 (volzhs) V. Vamsi Krishna (vkbsb) @@ -149,7 +158,6 @@ name is available. Wilson E. Alvarez (Rubonnek) Xavier Cho (mysticfall) yg2f (SuperUserNameMan) - Yuri Roubinski (Chaosus) + Yuri Roubinsky (Chaosus) Zher Huei Lee (leezh) ZuBsPaCe - Дмитрий Сальников (DmitriySalnikov) diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 94e182e47e..f86b8563ef 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -298,12 +298,6 @@ Comment: SMAZ Copyright: 2006-2009, Salvatore Sanfilippo License: BSD-3-clause -Files: ./thirdparty/misc/stb_truetype.h - ./thirdparty/misc/stb_vorbis.c -Comment: stb libraries -Copyright: 2007-2019, Sean Barrett -License: public-domain - Files: ./thirdparty/misc/triangulator.cpp ./thirdparty/misc/triangulator.h Comment: PolyPartition @@ -13,10 +13,13 @@ 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 @@ -26,9 +29,9 @@ generous deed immortalized in the next stable release of Godot Engine. Anandarup Mallik Andrew Dunai Brandon Lamb - Christian Chipont - Christian Uldall Pedersen + Christopher Montesano Christoph Woinke + Darkhan Baimyrza Denis Malyavin Edward Flick Gamechuck @@ -38,33 +41,37 @@ generous deed immortalized in the next stable release of Godot Engine. Hein-Pieter van Braam Jacob McKenney Javary Co. + Jeffery Chiu Jeppe Zapp + John Benard (Linuxydable) Justin Arnold Justo Delgado Baudà Kyle Szklenski Leonard Meagher + Mariano Suligoy Matthieu Huvé Maxim Karsten Mike King Nathan Warden Neal Gompa (Conan Kudo) - Patrick Aarstad + ScottMakesGames Slobodan Milnovic Stephan Lanfermann Steve + Tristan Pemble VilliHaukka - Xananax - Zashi ## Gold donors Andrei cheese65536 - Daniel Hartmann Dave David Gehrig + David Snopek Ed Morley Florian Krick + Florian Rämisch + GiulianoB Jakub Grzesik K9Kraken Manuele Finocchiaro @@ -72,30 +79,31 @@ generous deed immortalized in the next stable release of Godot Engine. Retro Village Ronan Zeegers Sofox + Taylor Ritenour Zaven Muradyan + _ Alexander Trey Saunders Asher Glick Austen McRae + Bernhard Werner beVR Brian van der Stel - Cameron MacNair Carlo Cabanilla Daniel James David Giardi - David Snopek Default Name - Edward E Florian Breisch + Gamejunkey Gero - GiulianoB Javier Roman Jay Horton - Jonathan Turner + Joel Höglund Jon Woodward Jose Fernando Alexandre Karl Werf - Kommentgames + Klavdij Voncina + Lex Steers Luke Maciej Pendolski Matthew Hillier @@ -107,11 +115,11 @@ generous deed immortalized in the next stable release of Godot Engine. Scott Wadden Sergey Shawn Yu - Svenne Krap + The Architect thechris Tom Langwaldt tukon - William Wold + Unseen Domains Alex Khayrullin Branwyn Tylwyth @@ -121,25 +129,20 @@ generous deed immortalized in the next stable release of Godot Engine. Conrad Curry Craig Smith Darrian Little - Dean Harmon - Ian Richard Kunert Ivan Trombley + Jakub Dering Joan Fons Joshua Flores Krzysztof Jankowski Lord Bloodhound - Lucas Ferreira Franca Nathan Lundquist - Nicklas Breum Pascal Grüter Petr Malac Rami Reneator + Rob Robert Willes - Robin Arys Ronnie Ashlock - ScottMakesGames - Tad C Johnson Thomas Bjarnelöf Vincent Henderson Wojciech Chojnacki @@ -148,12 +151,14 @@ generous deed immortalized in the next stable release of Godot Engine. Adam Neumann Alexander J Maynard Alexey Dyadchenko + Andreas Funke André Frélicot andres eduardo lopez Andrew Bowen - Asdf + aoshiwik Ben Botwin Carlos de Sousa Marques + Chase Taranto Chris Petrich Christian Leth Jeppesen Christoph Schröder @@ -161,10 +166,10 @@ generous deed immortalized in the next stable release of Godot Engine. D Daniel Eichler David White - Eric - Eric Churches Eric Monson + Erik Hatfield Eugenio Hugo Salgüero Jáñez + Fain flesk gavlig GGGames.org @@ -173,15 +178,16 @@ generous deed immortalized in the next stable release of Godot Engine. Hysteria Idzard Kwadijk Jared White + Jeremy Sims + Jerry Ling Joe Flood Jose Malheiro Joshua Lesperance Juan T Chen + Juan Velandia Juraj Móza Kasper Jeppesen kinfox - Klaus The. - Klavdij Voncina Maarten Elings Marcelo Dornbusch Lopes Markus Fehr @@ -190,8 +196,7 @@ generous deed immortalized in the next stable release of Godot Engine. Marvin Matt Eunson Max Bulai - Max R.R. Collada - M H + MuffinManKen Nick Nikitin Oliver Dick Patrick Ting @@ -200,12 +205,18 @@ generous deed immortalized in the next stable release of Godot Engine. Pete Goodwin pl Ranoller + Robert Larnach + Robin Arys + Rocknight Studios Romildo Franco + Ryan Samuel Judd Scott Pilet spilldata Stoned Xander + TheLevelOfDetail . Thomas Krampl + Thomas Kurz Tobias Bocanegra Urho Zie Weaver @@ -213,43 +224,46 @@ generous deed immortalized in the next stable release of Godot Engine. ## Silver donors 1D_Inc - Abby Jones Abraham Haskins + Adam Adam Brunnmeier Adam Carr + Adam Long Adam Nakonieczny + Adam N Webber Adam Smeltzer Adisibio Adrian Demetrescu - Aggelos Arnaoutis Agustinus Arya Aidan O'Flannagain + Aki Mimoto Albin Jonasson Svärdsby Alder Stefano Alessandro Senese - Alexander Koppe + Alexandre Alex Davies-Moore Allen Schade Andreas Evers Andreas Krampitz - Andreas Lundmark - Andreas Schüle André Simões Andrés RodrÃguez + Andrew Thomas Andrzej Skalski + Angelos Arnaoutis Anthony Bongiovanni Anthony Staunton Anton Kurkin - Antony K. Jones AP Condomines Arda Erol + Arseniy M Arthur S. Muszynski + Atilla Kiran Aubrey Falconer Avencherus B A Balázs Batári - Beliar Benedikt + Ben G Ben Phelan Ben Vercammen Bernd Jänichen @@ -257,32 +271,32 @@ generous deed immortalized in the next stable release of Godot Engine. Blair Allen Bobby CC Wong Bryan Stevenson - Caleb Dumitry + Carl van der Geest Carwyn Edwards + Casey M. Chris Brown Chris Chapin Christian Baune + Christian Chipont Christian Winter Christoffer Sundbom Christopher Schmitt Clay Heaton - Cobaltum Collin Shooltz - Dag Sundin Söderström - Dan H. Bentsen Daniel Johnson + Daniel Kimblad DanielMaximiano Daniel Pontillo Daniel Reed - Daniel Tebbutt - David Bullock - David Cravens David May David Rapisarda David Woodard Dominic Cooney Dominik Wetzel + Donn Eddy Donovan Hutcheon + Dragontrapper + Dr Ewan Murray Duobix Eduardo Teixeira Edward Herbert @@ -290,14 +304,16 @@ 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 Felix Kollmann - fengjiongmax Flaredown + Florian Richer FuDiggity G3Dev sà rl Gadzhi Kharkharov @@ -306,6 +322,7 @@ generous deed immortalized in the next stable release of Godot Engine. George Marques gmmath Greg Olson + GREGORY C FEIN Greg P Greyson Richey Guldoman @@ -314,48 +331,50 @@ generous deed immortalized in the next stable release of Godot Engine. Hiroshi Naruo Hunter Jones Hylpher - ialex32x 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 + Joao Senerchia Joe Alden Joel Fivat Joel Setterberg - Johannes Eichler Johannes Wuensch Jomei Jackson Jonas Rudlang Jonas Yamazaki Jonathan G - Jonathan Nieto Jonathon Jon Bonazza Jon Sully Jose Aleman Jose Andrés Mejias Rojas + Jose C. Rubio Joseph Catrambone - Josh 'Cheeseness' Bush Juanfran - Juan Negrier - Juan Velandia Judd - Jueast Julian Murgia + JungleRobba Justin Spedding Kaiser Bald0 Kamuna Kauzig KC Chan Keedong Park + Keith Bradner + Kevin McPhillips kickmaniac Kiyohiro Kawamura (kyorohiro) Kjetil Haugland @@ -376,26 +395,27 @@ generous deed immortalized in the next stable release of Godot Engine. Malik Ahmed Malik Nejer Marcus Richter - Markus Lohaus Markus Michael Egger + Martin Candela Martin Holas Martin LiÅ¡ka - Matt Edwards Matthew Little + Matti Pohjanvirta + Maxime Blade Maxwell medecau + Melissa Mears + M H mhilbrunner Michael Dürwald Michael Gringauz Michael Haney Michael Labbe Mikael Olsson - Mikayla Hutchinson + Mikayla Mike Birkhead - Mike Cunningham Mitchell J. Wagner MoM - MuffinManKen Nathan Fish Natrim nee @@ -410,43 +430,43 @@ generous deed immortalized in the next stable release of Godot Engine. Nima Farid Nithin Jino NZ + Oleg Reva Olivier Omar Delarosa - omzee Oscar Norlander - Pafka Pan Ip - Pat LaBine - Patrick Forringer Patrick Nafarrete Paul Gieske Paul Mason PaweÅ‚ Kowal + Penguin + Petrus Prinsloo Philip Cohoe Pierre-Igor Berthet Pitsanu Tongprasin Point08 Poryg Rafa Laguna - Rafal Wyszomirski + rainerLinux Raphael Leroux Remi Rampin Rémi Verschelde Rezgi Ricardo Alcantara + Richard Diss + Richard Ivánek + Richard Patching Robert Farr (Larington) Robert Hernandez - Robert Larnach Rodrigo Loli Roger Smith Roland RzÄ…sa Roman Tinkov Ronan Jouchet - Ryan - Ryan Brooks Ryan Groom Ryan Hentz - Saad Khoudmi + Sam.C + Sam Edson Samuele Zolfanelli Sanka.X Sasori Olkof @@ -459,24 +479,23 @@ generous deed immortalized in the next stable release of Godot Engine. Simon Ledam Simon Wenner SK + smbe19 Sootstone - Taylor Fahlman + Svenne Krap + tezuvholovdr thomas - Thomas Bell + Thomas Bechtold Thomas Kelly - Thomas Kurz tiansheng li Tim Drumheller - Tim Gudex Timothy B. MacDonald + TJRHTK Tobbun Tom Fulp Tom Glenn - Tom Larrow Torsten Crass Travis O'Brien Trent Skinner - Triptych Troy Bonneau Tryggve Sollid Turgut Temucin @@ -487,7 +506,6 @@ generous deed immortalized in the next stable release of Godot Engine. Vigilant Watch Vincent Cloutier waka nya - Walter Byers Wayne Haak werner mendizabal Wiley Thompson diff --git a/SConstruct b/SConstruct index 128c5b0e92..cdbb47faea 100644 --- a/SConstruct +++ b/SConstruct @@ -189,7 +189,7 @@ Help(opts.GenerateHelpText(env_base)) # generate help # add default include paths -env_base.Prepend(CPPPATH=['#', '#editor']) +env_base.Prepend(CPPPATH=['#']) # configure ENV for platform env_base.platform_exporters = platform_exporters diff --git a/core/SCsub b/core/SCsub index ed9a0a231d..755c5c65c6 100644 --- a/core/SCsub +++ b/core/SCsub @@ -80,6 +80,8 @@ if env['builtin_zlib']: env_thirdparty.Prepend(CPPPATH=[thirdparty_zlib_dir]) # Needs to be available in main env too env.Prepend(CPPPATH=[thirdparty_zlib_dir]) + if (env['target'] == 'debug'): + env_thirdparty.Append(CPPDEFINES=['ZLIB_DEBUG']) env_thirdparty.add_source_files(env.core_sources, thirdparty_zlib_sources) @@ -118,6 +120,8 @@ if env['builtin_zstd']: "compress/zstd_ldm.c", "compress/zstd_opt.c", "compress/zstdmt_compress.c", + "compress/zstd_compress_literals.c", + "compress/zstd_compress_sequences.c", "decompress/huf_decompress.c", "decompress/zstd_ddict.c", "decompress/zstd_decompress_block.c", diff --git a/core/array.cpp b/core/array.cpp index 108d9f7386..fd507f46c3 100644 --- a/core/array.cpp +++ b/core/array.cpp @@ -222,6 +222,66 @@ Array Array::duplicate(bool p_deep) const { return new_arr; } + +int Array::_fix_slice_index(int p_index, int p_arr_len, int p_top_mod) { + p_index = CLAMP(p_index, -p_arr_len, p_arr_len + p_top_mod); + if (p_index < 0) { + p_index = (p_index % p_arr_len + p_arr_len) % p_arr_len; // positive modulo + } + return p_index; +} + +int Array::_clamp_index(int p_index) const { + return CLAMP(p_index, -size() + 1, size() - 1); +} + +#define ARRAY_GET_DEEP(idx, is_deep) is_deep ? get(idx).duplicate(is_deep) : get(idx) + +Array Array::slice(int p_begin, int p_end, int p_step, bool p_deep) const { // like python, but inclusive on upper bound + Array new_arr; + + if (empty()) // Don't try to slice empty arrays. + return new_arr; + + p_begin = Array::_fix_slice_index(p_begin, size(), -1); // can't start out of range + p_end = Array::_fix_slice_index(p_end, size(), 0); + + int x = p_begin; + int new_arr_i = 0; + + ERR_FAIL_COND_V(p_step == 0, new_arr); + if (Array::_clamp_index(p_begin) == Array::_clamp_index(p_end)) { // don't include element twice + new_arr.resize(1); + // new_arr[0] = 1; + new_arr[0] = ARRAY_GET_DEEP(Array::_clamp_index(p_begin), p_deep); + return new_arr; + } else { + int element_count = ceil((int)MAX(0, (p_end - p_begin) / p_step)) + 1; + if (element_count == 1) { // delta going in wrong direction to reach end + new_arr.resize(0); + return new_arr; + } + new_arr.resize(element_count); + } + + // if going backwards, have to have a different terminating condition + if (p_step < 0) { + while (x >= p_end) { + new_arr[new_arr_i] = ARRAY_GET_DEEP(Array::_clamp_index(x), p_deep); + x += p_step; + new_arr_i += 1; + } + } else if (p_step > 0) { + while (x <= p_end) { + new_arr[new_arr_i] = ARRAY_GET_DEEP(Array::_clamp_index(x), p_deep); + x += p_step; + new_arr_i += 1; + } + } + + return new_arr; +} + struct _ArrayVariantSort { _FORCE_INLINE_ bool operator()(const Variant &p_l, const Variant &p_r) const { diff --git a/core/array.h b/core/array.h index d4e937a486..7a754d53ea 100644 --- a/core/array.h +++ b/core/array.h @@ -44,6 +44,9 @@ class Array { void _ref(const Array &p_from) const; void _unref() const; + int _clamp_index(int p_index) const; + static int _fix_slice_index(int p_index, int p_arr_len, int p_top_mod); + public: Variant &operator[](int p_idx); const Variant &operator[](int p_idx) const; @@ -91,6 +94,8 @@ public: Array duplicate(bool p_deep = false) const; + Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false) const; + Variant min() const; Variant max() const; diff --git a/core/bind/core_bind.cpp b/core/bind/core_bind.cpp index 5161f8bab2..c539f912aa 100644 --- a/core/bind/core_bind.cpp +++ b/core/bind/core_bind.cpp @@ -145,13 +145,13 @@ _ResourceLoader::_ResourceLoader() { } Error _ResourceSaver::save(const String &p_path, const RES &p_resource, SaverFlags p_flags) { - ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, "Can't save empty resource to path: " + String(p_path) + "."); + ERR_FAIL_COND_V_MSG(p_resource.is_null(), ERR_INVALID_PARAMETER, "Can't save empty resource to path '" + String(p_path) + "'."); return ResourceSaver::save(p_path, p_resource, p_flags); } PoolVector<String> _ResourceSaver::get_recognized_extensions(const RES &p_resource) { - ERR_FAIL_COND_V(p_resource.is_null(), PoolVector<String>()); + ERR_FAIL_COND_V_MSG(p_resource.is_null(), PoolVector<String>(), "It's not a reference to a valid Resource object."); List<String> exts; ResourceSaver::get_recognized_extensions(p_resource, &exts); PoolVector<String> ret; @@ -481,15 +481,18 @@ Error _OS::shell_open(String p_uri) { int _OS::execute(const String &p_path, const Vector<String> &p_arguments, bool p_blocking, Array p_output, bool p_read_stderr) { OS::ProcessID pid = -2; + int exitcode = 0; List<String> args; for (int i = 0; i < p_arguments.size(); i++) args.push_back(p_arguments[i]); String pipe; - Error err = OS::get_singleton()->execute(p_path, args, p_blocking, &pid, &pipe, NULL, p_read_stderr); + Error err = OS::get_singleton()->execute(p_path, args, p_blocking, &pid, &pipe, &exitcode, p_read_stderr); p_output.clear(); p_output.push_back(pipe); if (err != OK) return -1; + else if (p_blocking) + return exitcode; else return pid; } @@ -755,7 +758,7 @@ int64_t _OS::get_unix_time_from_datetime(Dictionary datetime) const { ERR_FAIL_COND_V_MSG(month > 12 || month == 0, 0, "Invalid month value of: " + itos(month) + "."); // Do this check after month is tested as valid - ERR_FAIL_COND_V_MSG(day > MONTH_DAYS_TABLE[LEAPYEAR(year)][month - 1] || day == 0, 0, "Invalid day value of: " + itos(day) + " which is larger than " + itos(MONTH_DAYS_TABLE[LEAPYEAR(year)][month - 1]) + " or 0."); + ERR_FAIL_COND_V_MSG(day > MONTH_DAYS_TABLE[LEAPYEAR(year)][month - 1] || day == 0, 0, "Invalid day value of '" + itos(day) + "' which is larger than '" + itos(MONTH_DAYS_TABLE[LEAPYEAR(year)][month - 1]) + "' or 0."); // Calculate all the seconds from months past in this year uint64_t SECONDS_FROM_MONTHS_PAST_THIS_YEAR = DAYS_PAST_THIS_YEAR_TABLE[LEAPYEAR(year)][month - 1] * SECONDS_PER_DAY; @@ -1133,6 +1136,16 @@ bool _OS::request_permission(const String &p_name) { return OS::get_singleton()->request_permission(p_name); } +bool _OS::request_permissions() { + + return OS::get_singleton()->request_permissions(); +} + +Vector<String> _OS::get_granted_permissions() const { + + return OS::get_singleton()->get_granted_permissions(); +} + _OS *_OS::singleton = NULL; void _OS::_bind_methods() { @@ -1316,6 +1329,8 @@ void _OS::_bind_methods() { ClassDB::bind_method(D_METHOD("get_power_percent_left"), &_OS::get_power_percent_left); ClassDB::bind_method(D_METHOD("request_permission", "name"), &_OS::request_permission); + ClassDB::bind_method(D_METHOD("request_permissions"), &_OS::request_permissions); + ClassDB::bind_method(D_METHOD("get_granted_permissions"), &_OS::get_granted_permissions); ADD_PROPERTY(PropertyInfo(Variant::STRING, "clipboard"), "set_clipboard", "get_clipboard"); ADD_PROPERTY(PropertyInfo(Variant::INT, "current_screen"), "set_current_screen", "get_current_screen"); @@ -1866,92 +1881,92 @@ bool _File::is_open() const { } String _File::get_path() const { - ERR_FAIL_COND_V(!f, ""); + ERR_FAIL_COND_V_MSG(!f, "", "File must be opened before use."); return f->get_path(); } String _File::get_path_absolute() const { - ERR_FAIL_COND_V(!f, ""); + ERR_FAIL_COND_V_MSG(!f, "", "File must be opened before use."); return f->get_path_absolute(); } void _File::seek(int64_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->seek(p_position); } void _File::seek_end(int64_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->seek_end(p_position); } int64_t _File::get_position() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_position(); } int64_t _File::get_len() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_len(); } bool _File::eof_reached() const { - ERR_FAIL_COND_V(!f, false); + ERR_FAIL_COND_V_MSG(!f, false, "File must be opened before use."); return f->eof_reached(); } uint8_t _File::get_8() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_8(); } uint16_t _File::get_16() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_16(); } uint32_t _File::get_32() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_32(); } uint64_t _File::get_64() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_64(); } float _File::get_float() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_float(); } double _File::get_double() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_double(); } real_t _File::get_real() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); return f->get_real(); } PoolVector<uint8_t> _File::get_buffer(int p_length) const { PoolVector<uint8_t> data; - ERR_FAIL_COND_V(!f, data); + ERR_FAIL_COND_V_MSG(!f, data, "File must be opened before use."); - ERR_FAIL_COND_V(p_length < 0, data); + ERR_FAIL_COND_V_MSG(p_length < 0, data, "Length of buffer cannot be smaller than 0."); if (p_length == 0) return data; Error err = data.resize(p_length); - ERR_FAIL_COND_V(err != OK, data); + ERR_FAIL_COND_V_MSG(err != OK, data, "Can't resize data to " + itos(p_length) + " elements."); PoolVector<uint8_t>::Write w = data.write(); int len = f->get_buffer(&w[0], p_length); @@ -1967,7 +1982,7 @@ PoolVector<uint8_t> _File::get_buffer(int p_length) const { String _File::get_as_text() const { - ERR_FAIL_COND_V(!f, String()); + ERR_FAIL_COND_V_MSG(!f, String(), "File must be opened before use."); String text; size_t original_pos = f->get_position(); @@ -1997,12 +2012,12 @@ String _File::get_sha256(const String &p_path) const { String _File::get_line() const { - ERR_FAIL_COND_V(!f, String()); + ERR_FAIL_COND_V_MSG(!f, String(), "File must be opened before use."); return f->get_line(); } Vector<String> _File::get_csv_line(const String &p_delim) const { - ERR_FAIL_COND_V(!f, Vector<String>()); + ERR_FAIL_COND_V_MSG(!f, Vector<String>(), "File must be opened before use."); return f->get_csv_line(p_delim); } @@ -2031,83 +2046,83 @@ Error _File::get_error() const { void _File::store_8(uint8_t p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_8(p_dest); } void _File::store_16(uint16_t p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_16(p_dest); } void _File::store_32(uint32_t p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_32(p_dest); } void _File::store_64(uint64_t p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_64(p_dest); } void _File::store_float(float p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_float(p_dest); } void _File::store_double(double p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_double(p_dest); } void _File::store_real(real_t p_real) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_real(p_real); } void _File::store_string(const String &p_string) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_string(p_string); } void _File::store_pascal_string(const String &p_string) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_pascal_string(p_string); }; String _File::get_pascal_string() { - ERR_FAIL_COND_V(!f, ""); + ERR_FAIL_COND_V_MSG(!f, "", "File must be opened before use."); return f->get_pascal_string(); }; void _File::store_line(const String &p_string) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_line(p_string); } void _File::store_csv_line(const Vector<String> &p_values, const String &p_delim) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); f->store_csv_line(p_values, p_delim); } void _File::store_buffer(const PoolVector<uint8_t> &p_buffer) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); int len = p_buffer.size(); if (len == 0) @@ -2125,17 +2140,17 @@ bool _File::file_exists(const String &p_name) const { void _File::store_var(const Variant &p_var, bool p_full_objects) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); int len; Error err = encode_variant(p_var, NULL, len, p_full_objects); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Error when trying to encode Variant."); PoolVector<uint8_t> buff; buff.resize(len); PoolVector<uint8_t>::Write w = buff.write(); err = encode_variant(p_var, &w[0], len, p_full_objects); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Error when trying to encode Variant."); w.release(); store_32(len); @@ -2144,7 +2159,7 @@ void _File::store_var(const Variant &p_var, bool p_full_objects) { Variant _File::get_var(bool p_allow_objects) const { - ERR_FAIL_COND_V(!f, Variant()); + ERR_FAIL_COND_V_MSG(!f, Variant(), "File must be opened before use."); uint32_t len = get_32(); PoolVector<uint8_t> buff = get_buffer(len); ERR_FAIL_COND_V((uint32_t)buff.size() != len, Variant()); @@ -2153,7 +2168,7 @@ Variant _File::get_var(bool p_allow_objects) const { Variant v; Error err = decode_variant(v, &r[0], len, NULL, p_allow_objects); - ERR_FAIL_COND_V(err != OK, Variant()); + ERR_FAIL_COND_V_MSG(err != OK, Variant(), "Error when trying to encode Variant."); return v; } @@ -2258,7 +2273,7 @@ Error _Directory::open(const String &p_path) { Error _Directory::list_dir_begin(bool p_skip_navigational, bool p_skip_hidden) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); _list_skip_navigational = p_skip_navigational; _list_skip_hidden = p_skip_hidden; @@ -2268,7 +2283,7 @@ Error _Directory::list_dir_begin(bool p_skip_navigational, bool p_skip_hidden) { String _Directory::get_next() { - ERR_FAIL_COND_V(!d, ""); + ERR_FAIL_COND_V_MSG(!d, "", "Directory must be opened before use."); String next = d->get_next(); while (next != "" && ((_list_skip_navigational && (next == "." || next == "..")) || (_list_skip_hidden && d->current_is_hidden()))) { @@ -2279,44 +2294,44 @@ String _Directory::get_next() { } bool _Directory::current_is_dir() const { - ERR_FAIL_COND_V(!d, false); + ERR_FAIL_COND_V_MSG(!d, false, "Directory must be opened before use."); return d->current_is_dir(); } void _Directory::list_dir_end() { - ERR_FAIL_COND(!d); + ERR_FAIL_COND_MSG(!d, "Directory must be opened before use."); d->list_dir_end(); } int _Directory::get_drive_count() { - ERR_FAIL_COND_V(!d, 0); + ERR_FAIL_COND_V_MSG(!d, 0, "Directory must be opened before use."); return d->get_drive_count(); } String _Directory::get_drive(int p_drive) { - ERR_FAIL_COND_V(!d, ""); + ERR_FAIL_COND_V_MSG(!d, "", "Directory must be opened before use."); return d->get_drive(p_drive); } int _Directory::get_current_drive() { - ERR_FAIL_COND_V(!d, 0); + ERR_FAIL_COND_V_MSG(!d, 0, "Directory must be opened before use."); return d->get_current_drive(); } Error _Directory::change_dir(String p_dir) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); return d->change_dir(p_dir); } String _Directory::get_current_dir() { - ERR_FAIL_COND_V(!d, ""); + ERR_FAIL_COND_V_MSG(!d, "", "Directory must be opened before use."); return d->get_current_dir(); } Error _Directory::make_dir(String p_dir) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); if (!p_dir.is_rel_path()) { DirAccess *d = DirAccess::create_for_path(p_dir); Error err = d->make_dir(p_dir); @@ -2327,7 +2342,7 @@ Error _Directory::make_dir(String p_dir) { } Error _Directory::make_dir_recursive(String p_dir) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); if (!p_dir.is_rel_path()) { DirAccess *d = DirAccess::create_for_path(p_dir); Error err = d->make_dir_recursive(p_dir); @@ -2339,7 +2354,7 @@ Error _Directory::make_dir_recursive(String p_dir) { bool _Directory::file_exists(String p_file) { - ERR_FAIL_COND_V(!d, false); + ERR_FAIL_COND_V_MSG(!d, false, "Directory must be opened before use."); if (!p_file.is_rel_path()) { return FileAccess::exists(p_file); @@ -2349,7 +2364,7 @@ bool _Directory::file_exists(String p_file) { } bool _Directory::dir_exists(String p_dir) { - ERR_FAIL_COND_V(!d, false); + ERR_FAIL_COND_V_MSG(!d, false, "Directory must be opened before use."); if (!p_dir.is_rel_path()) { DirAccess *d = DirAccess::create_for_path(p_dir); @@ -2364,18 +2379,18 @@ bool _Directory::dir_exists(String p_dir) { int _Directory::get_space_left() { - ERR_FAIL_COND_V(!d, 0); + ERR_FAIL_COND_V_MSG(!d, 0, "Directory must be opened before use."); return d->get_space_left() / 1024 * 1024; //return value in megabytes, given binding is int } Error _Directory::copy(String p_from, String p_to) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); return d->copy(p_from, p_to); } Error _Directory::rename(String p_from, String p_to) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); if (!p_from.is_rel_path()) { DirAccess *d = DirAccess::create_for_path(p_from); Error err = d->rename(p_from, p_to); @@ -2387,7 +2402,7 @@ Error _Directory::rename(String p_from, String p_to) { } Error _Directory::remove(String p_name) { - ERR_FAIL_COND_V(!d, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!d, ERR_UNCONFIGURED, "Directory must be opened before use."); if (!p_name.is_rel_path()) { DirAccess *d = DirAccess::create_for_path(p_name); Error err = d->remove(p_name); @@ -2442,14 +2457,14 @@ String _Marshalls::variant_to_base64(const Variant &p_var, bool p_full_objects) int len; Error err = encode_variant(p_var, NULL, len, p_full_objects); - ERR_FAIL_COND_V(err != OK, ""); + ERR_FAIL_COND_V_MSG(err != OK, "", "Error when trying to encode Variant."); PoolVector<uint8_t> buff; buff.resize(len); PoolVector<uint8_t>::Write w = buff.write(); err = encode_variant(p_var, &w[0], len, p_full_objects); - ERR_FAIL_COND_V(err != OK, ""); + ERR_FAIL_COND_V_MSG(err != OK, "", "Error when trying to encode Variant."); String ret = CryptoCore::b64_encode_str(&w[0], len); ERR_FAIL_COND_V(ret == "", ret); @@ -2471,7 +2486,7 @@ Variant _Marshalls::base64_to_variant(const String &p_str, bool p_allow_objects) Variant v; Error err = decode_variant(v, &w[0], len, NULL, p_allow_objects); - ERR_FAIL_COND_V(err != OK, Variant()); + ERR_FAIL_COND_V_MSG(err != OK, Variant(), "Error when trying to decode Variant."); return v; }; @@ -2638,13 +2653,13 @@ void _Thread::_start_func(void *ud) { } } - ERR_FAIL_MSG("Could not call function '" + t->target_method.operator String() + "'' starting thread ID: " + t->get_id() + " Reason: " + reason + "."); + ERR_FAIL_MSG("Could not call function '" + t->target_method.operator String() + "' to start thread " + t->get_id() + ": " + reason + "."); } } Error _Thread::start(Object *p_instance, const StringName &p_method, const Variant &p_userdata, Priority p_priority) { - ERR_FAIL_COND_V(active, ERR_ALREADY_IN_USE); + ERR_FAIL_COND_V_MSG(active, ERR_ALREADY_IN_USE, "Thread already started."); ERR_FAIL_COND_V(!p_instance, ERR_INVALID_PARAMETER); ERR_FAIL_COND_V(p_method == StringName(), ERR_INVALID_PARAMETER); ERR_FAIL_INDEX_V(p_priority, PRIORITY_MAX, ERR_INVALID_PARAMETER); @@ -2685,8 +2700,8 @@ bool _Thread::is_active() const { } Variant _Thread::wait_to_finish() { - ERR_FAIL_COND_V(!thread, Variant()); - ERR_FAIL_COND_V(!active, Variant()); + ERR_FAIL_COND_V_MSG(!thread, Variant(), "Thread must exist to wait for its completion."); + ERR_FAIL_COND_V_MSG(!active, Variant(), "Thread must be active to wait for its completion."); Thread::wait_to_finish(thread); Variant r = ret; active = false; @@ -3150,6 +3165,9 @@ Ref<JSONParseResult> _JSON::parse(const String &p_json) { result->error = JSON::parse(p_json, result->result, result->error_string, result->error_line); + if (result->error != OK) { + ERR_PRINTS(vformat("Error parsing JSON at line %s: %s", result->error_line, result->error_string)); + } return result; } diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h index 693b85710a..1a4fd1d5cb 100644 --- a/core/bind/core_bind.h +++ b/core/bind/core_bind.h @@ -349,6 +349,8 @@ public: bool has_feature(const String &p_feature) const; bool request_permission(const String &p_name); + bool request_permissions(); + Vector<String> get_granted_permissions() const; static _OS *get_singleton() { return singleton; } diff --git a/core/class_db.cpp b/core/class_db.cpp index 3ad59bc309..f52937bdca 100644 --- a/core/class_db.cpp +++ b/core/class_db.cpp @@ -340,7 +340,7 @@ StringName ClassDB::get_parent_class(const StringName &p_class) { OBJTYPE_RLOCK; ClassInfo *ti = classes.getptr(p_class); - ERR_FAIL_COND_V(!ti, StringName()); + ERR_FAIL_COND_V_MSG(!ti, StringName(), "Cannot get class '" + String(p_class) + "'."); return ti->inherits; } @@ -350,7 +350,7 @@ ClassDB::APIType ClassDB::get_api_type(const StringName &p_class) { ClassInfo *ti = classes.getptr(p_class); - ERR_FAIL_COND_V(!ti, API_NONE); + ERR_FAIL_COND_V_MSG(!ti, API_NONE, "Cannot get class '" + String(p_class) + "'."); return ti->api; } @@ -375,7 +375,7 @@ uint64_t ClassDB::get_api_hash(APIType p_api) { for (List<StringName>::Element *E = names.front(); E; E = E->next()) { ClassInfo *t = classes.getptr(E->get()); - ERR_FAIL_COND_V(!t, 0); + ERR_FAIL_COND_V_MSG(!t, 0, "Cannot get class '" + String(E->get()) + "'."); if (t->api != p_api || !t->exposed) continue; hash = hash_djb2_one_64(t->name.hash(), hash); @@ -528,8 +528,8 @@ Object *ClassDB::instance(const StringName &p_class) { ti = classes.getptr(compat_classes[p_class]); } } - ERR_FAIL_COND_V(!ti, NULL); - ERR_FAIL_COND_V(ti->disabled, NULL); + ERR_FAIL_COND_V_MSG(!ti, NULL, "Cannot get class '" + String(p_class) + "'."); + ERR_FAIL_COND_V_MSG(ti->disabled, NULL, "Class '" + String(p_class) + "' is disabled."); ERR_FAIL_COND_V(!ti->creation_func, NULL); } #ifdef TOOLS_ENABLED @@ -545,7 +545,7 @@ bool ClassDB::can_instance(const StringName &p_class) { OBJTYPE_RLOCK; ClassInfo *ti = classes.getptr(p_class); - ERR_FAIL_COND_V(!ti, false); + ERR_FAIL_COND_V_MSG(!ti, false, "Cannot get class '" + String(p_class) + "'."); #ifdef TOOLS_ENABLED if (ti->api == API_EDITOR && !Engine::get_singleton()->is_editor_hint()) { return false; @@ -560,7 +560,7 @@ void ClassDB::_add_class2(const StringName &p_class, const StringName &p_inherit const StringName &name = p_class; - ERR_FAIL_COND(classes.has(name)); + ERR_FAIL_COND_MSG(classes.has(name), "Class '" + String(p_class) + "' already exists."); classes[name] = ClassInfo(); ClassInfo &ti = classes[name]; @@ -836,7 +836,7 @@ void ClassDB::add_signal(StringName p_class, const MethodInfo &p_signal) { #ifdef DEBUG_METHODS_ENABLED ClassInfo *check = type; while (check) { - ERR_FAIL_COND_MSG(check->signal_map.has(sname), "Type " + String(p_class) + " already has signal: " + String(sname) + "."); + ERR_FAIL_COND_MSG(check->signal_map.has(sname), "Class '" + String(p_class) + "' already has signal '" + String(sname) + "'."); check = check->inherits_ptr; } #endif @@ -922,10 +922,10 @@ void ClassDB::add_property(StringName p_class, const PropertyInfo &p_pinfo, cons mb_set = get_method(p_class, p_setter); #ifdef DEBUG_METHODS_ENABLED - ERR_FAIL_COND_MSG(!mb_set, "Invalid setter: " + p_class + "::" + p_setter + " for property: " + p_pinfo.name + "."); + ERR_FAIL_COND_MSG(!mb_set, "Invalid setter '" + p_class + "::" + p_setter + "' for property '" + p_pinfo.name + "'."); int exp_args = 1 + (p_index >= 0 ? 1 : 0); - ERR_FAIL_COND_MSG(mb_set->get_argument_count() != exp_args, "Invalid function for setter: " + p_class + "::" + p_setter + " for property: " + p_pinfo.name + "."); + ERR_FAIL_COND_MSG(mb_set->get_argument_count() != exp_args, "Invalid function for setter '" + p_class + "::" + p_setter + " for property '" + p_pinfo.name + "'."); #endif } @@ -935,15 +935,15 @@ void ClassDB::add_property(StringName p_class, const PropertyInfo &p_pinfo, cons mb_get = get_method(p_class, p_getter); #ifdef DEBUG_METHODS_ENABLED - ERR_FAIL_COND_MSG(!mb_get, "Invalid getter: " + p_class + "::" + p_getter + " for property: " + p_pinfo.name + "."); + ERR_FAIL_COND_MSG(!mb_get, "Invalid getter '" + p_class + "::" + p_getter + "' for property '" + p_pinfo.name + "'."); int exp_args = 0 + (p_index >= 0 ? 1 : 0); - ERR_FAIL_COND_MSG(mb_get->get_argument_count() != exp_args, "Invalid function for getter: " + p_class + "::" + p_getter + " for property: " + p_pinfo.name + "."); + ERR_FAIL_COND_MSG(mb_get->get_argument_count() != exp_args, "Invalid function for getter '" + p_class + "::" + p_getter + "' for property: '" + p_pinfo.name + "'."); #endif } #ifdef DEBUG_METHODS_ENABLED - ERR_FAIL_COND_MSG(type->property_setget.has(p_pinfo.name), "Object " + p_class + " already has property: " + p_pinfo.name + "."); + ERR_FAIL_COND_MSG(type->property_setget.has(p_pinfo.name), "Object '" + p_class + "' already has property '" + p_pinfo.name + "'."); #endif OBJTYPE_WLOCK @@ -1228,20 +1228,20 @@ MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, const c ClassInfo *type = classes.getptr(instance_type); if (!type) { memdelete(p_bind); - ERR_FAIL_V_MSG(NULL, "Couldn't bind method '" + mdname + "' for instance: " + instance_type + "."); + ERR_FAIL_V_MSG(NULL, "Couldn't bind method '" + mdname + "' for instance '" + instance_type + "'."); } if (type->method_map.has(mdname)) { memdelete(p_bind); // overloading not supported - ERR_FAIL_V_MSG(NULL, "Method already bound: " + instance_type + "::" + mdname + "."); + ERR_FAIL_V_MSG(NULL, "Method already bound '" + instance_type + "::" + mdname + "'."); } #ifdef DEBUG_METHODS_ENABLED if (method_name.args.size() > p_bind->get_argument_count()) { memdelete(p_bind); - ERR_FAIL_V_MSG(NULL, "Method definition provides more arguments than the method actually has: " + instance_type + "::" + mdname + "."); + ERR_FAIL_V_MSG(NULL, "Method definition provides more arguments than the method actually has '" + instance_type + "::" + mdname + "'."); } p_bind->set_argument_names(method_name.args); @@ -1265,7 +1265,7 @@ MethodBind *ClassDB::bind_methodfi(uint32_t p_flags, MethodBind *p_bind, const c } void ClassDB::add_virtual_method(const StringName &p_class, const MethodInfo &p_method, bool p_virtual) { - ERR_FAIL_COND(!classes.has(p_class)); + ERR_FAIL_COND_MSG(!classes.has(p_class), "Request for nonexistent class '" + p_class + "'."); OBJTYPE_WLOCK; @@ -1280,7 +1280,7 @@ void ClassDB::add_virtual_method(const StringName &p_class, const MethodInfo &p_ void ClassDB::get_virtual_methods(const StringName &p_class, List<MethodInfo> *p_methods, bool p_no_inheritance) { - ERR_FAIL_COND(!classes.has(p_class)); + ERR_FAIL_COND_MSG(!classes.has(p_class), "Request for nonexistent class '" + p_class + "'."); #ifdef DEBUG_METHODS_ENABLED @@ -1304,7 +1304,7 @@ void ClassDB::set_class_enabled(StringName p_class, bool p_enable) { OBJTYPE_WLOCK; - ERR_FAIL_COND(!classes.has(p_class)); + ERR_FAIL_COND_MSG(!classes.has(p_class), "Request for nonexistent class '" + p_class + "'."); classes[p_class].disabled = !p_enable; } @@ -1319,7 +1319,7 @@ bool ClassDB::is_class_enabled(StringName p_class) { } } - ERR_FAIL_COND_V(!ti, false); + ERR_FAIL_COND_V_MSG(!ti, false, "Cannot get class '" + String(p_class) + "'."); return !ti->disabled; } @@ -1328,7 +1328,7 @@ bool ClassDB::is_class_exposed(StringName p_class) { OBJTYPE_RLOCK; ClassInfo *ti = classes.getptr(p_class); - ERR_FAIL_COND_V(!ti, false); + ERR_FAIL_COND_V_MSG(!ti, false, "Cannot get class '" + String(p_class) + "'."); return ti->exposed; } diff --git a/core/color.cpp b/core/color.cpp index a54a3115cc..a6ad50b745 100644 --- a/core/color.cpp +++ b/core/color.cpp @@ -214,6 +214,11 @@ void Color::set_hsv(float p_h, float p_s, float p_v, float p_alpha) { } } +bool Color::is_equal_approx(const Color &p_color) const { + + return Math::is_equal_approx(r, p_color.r) && Math::is_equal_approx(g, p_color.g) && Math::is_equal_approx(b, p_color.b) && Math::is_equal_approx(a, p_color.a); +} + void Color::invert() { r = 1.0 - r; diff --git a/core/color.h b/core/color.h index 8fb78d1ced..b34a82ef19 100644 --- a/core/color.h +++ b/core/color.h @@ -86,6 +86,8 @@ struct Color { void operator/=(const Color &p_color); void operator/=(const real_t &rvalue); + bool is_equal_approx(const Color &p_color) const; + void invert(); void contrast(); Color inverted() const; diff --git a/core/compressed_translation.cpp b/core/compressed_translation.cpp index f102721470..d927b74897 100644 --- a/core/compressed_translation.cpp +++ b/core/compressed_translation.cpp @@ -136,6 +136,8 @@ void PHashTranslation::generate(const Ref<Translation> &p_from) { bucket_table_size += 2 + b.size() * 4; } + ERR_FAIL_COND(bucket_table_size == 0); + hash_table.resize(size); bucket_table.resize(bucket_table_size); diff --git a/core/cowdata.h b/core/cowdata.h index 3e40ad0f4b..c92e20920c 100644 --- a/core/cowdata.h +++ b/core/cowdata.h @@ -33,6 +33,7 @@ #include <string.h> +#include "core/error_macros.h" #include "core/os/memory.h" #include "core/safe_refcount.h" diff --git a/core/crypto/crypto.cpp b/core/crypto/crypto.cpp index 925a01b36a..83a25da901 100644 --- a/core/crypto/crypto.cpp +++ b/core/crypto/crypto.cpp @@ -149,7 +149,7 @@ Error ResourceFormatSaverCrypto::save(const String &p_path, const RES &p_resourc } else { ERR_FAIL_V(ERR_INVALID_PARAMETER); } - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot save Crypto resource to file '" + p_path + "'."); return OK; } diff --git a/core/crypto/hashing_context.cpp b/core/crypto/hashing_context.cpp index bdccb258dd..b5aa0ddc18 100644 --- a/core/crypto/hashing_context.cpp +++ b/core/crypto/hashing_context.cpp @@ -50,6 +50,7 @@ Error HashingContext::start(HashType p_type) { Error HashingContext::update(PoolByteArray p_chunk) { ERR_FAIL_COND_V(ctx == NULL, ERR_UNCONFIGURED); size_t len = p_chunk.size(); + ERR_FAIL_COND_V(len == 0, FAILED); PoolByteArray::Read r = p_chunk.read(); switch (type) { case HASH_MD5: @@ -103,7 +104,7 @@ void HashingContext::_create_ctx(HashType p_type) { } void HashingContext::_delete_ctx() { - return; + switch (type) { case HASH_MD5: memdelete((CryptoCore::MD5Context *)ctx); diff --git a/core/dictionary.cpp b/core/dictionary.cpp index 5e4dfb9a5a..0d9945991e 100644 --- a/core/dictionary.cpp +++ b/core/dictionary.cpp @@ -192,13 +192,9 @@ uint32_t Dictionary::hash() const { uint32_t h = hash_djb2_one_32(Variant::DICTIONARY); - List<Variant> keys; - get_key_list(&keys); - - for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { - - h = hash_djb2_one_32(E->get().hash(), h); - h = hash_djb2_one_32(operator[](E->get()).hash(), h); + for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { + h = hash_djb2_one_32(E.key().hash(), h); + h = hash_djb2_one_32(E.value().hash(), h); } return h; @@ -207,10 +203,11 @@ uint32_t Dictionary::hash() const { Array Dictionary::keys() const { Array varr; - varr.resize(size()); if (_p->variant_map.empty()) return varr; + varr.resize(size()); + int i = 0; for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { varr[i] = E.key(); @@ -223,10 +220,11 @@ Array Dictionary::keys() const { Array Dictionary::values() const { Array varr; - varr.resize(size()); if (_p->variant_map.empty()) return varr; + varr.resize(size()); + int i = 0; for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { varr[i] = E.get(); @@ -255,11 +253,8 @@ Dictionary Dictionary::duplicate(bool p_deep) const { Dictionary n; - List<Variant> keys; - get_key_list(&keys); - - for (List<Variant>::Element *E = keys.front(); E; E = E->next()) { - n[E->get()] = p_deep ? operator[](E->get()).duplicate(p_deep) : operator[](E->get()); + for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) { + n[E.key()] = p_deep ? E.value().duplicate(true) : E.value(); } return n; diff --git a/core/engine.cpp b/core/engine.cpp index 937439faaf..b9dc057257 100644 --- a/core/engine.cpp +++ b/core/engine.cpp @@ -38,7 +38,7 @@ void Engine::set_iterations_per_second(int p_ips) { - ERR_FAIL_COND(p_ips <= 0); + ERR_FAIL_COND_MSG(p_ips <= 0, "Engine iterations per second must be greater than 0."); ips = p_ips; } int Engine::get_iterations_per_second() const { diff --git a/core/error_macros.cpp b/core/error_macros.cpp index 0e8e4a9bb4..eda6b9cbbb 100644 --- a/core/error_macros.cpp +++ b/core/error_macros.cpp @@ -31,6 +31,7 @@ #include "error_macros.h" #include "core/io/logger.h" +#include "core/ustring.h" #include "os/os.h" bool _err_error_exists = false; @@ -42,6 +43,11 @@ void _err_set_last_error(const char *p_err) { OS::get_singleton()->set_last_error(p_err); } +void _err_set_last_error(const String &p_err) { + + _err_set_last_error(p_err.utf8().get_data()); +} + void _err_clear_last_error() { OS::get_singleton()->clear_last_error(); @@ -99,6 +105,10 @@ void _err_print_error(const char *p_function, const char *p_file, int p_line, co } } +void _err_print_error(const char *p_function, const char *p_file, int p_line, const String &p_error, ErrorHandlerType p_type) { + _err_print_error(p_function, p_file, p_line, p_error.utf8().get_data(), p_type); +} + void _err_print_index_error(const char *p_function, const char *p_file, int p_line, int64_t p_index, int64_t p_size, const char *p_index_str, const char *p_size_str, bool fatal) { String fstr(fatal ? "FATAL: " : ""); diff --git a/core/error_macros.h b/core/error_macros.h index 65802de9d2..d4b69ff40d 100644 --- a/core/error_macros.h +++ b/core/error_macros.h @@ -55,8 +55,10 @@ enum ErrorHandlerType { ERR_HANDLER_SHADER, }; +class String; typedef void (*ErrorHandlerFunc)(void *, const char *, const char *, int p_line, const char *, const char *, ErrorHandlerType p_type); void _err_set_last_error(const char *p_err); +void _err_set_last_error(const String &p_err); void _err_clear_last_error(); struct ErrorHandlerList { @@ -77,6 +79,7 @@ void add_error_handler(ErrorHandlerList *p_handler); void remove_error_handler(ErrorHandlerList *p_handler); void _err_print_error(const char *p_function, const char *p_file, int p_line, const char *p_error, ErrorHandlerType p_type = ERR_HANDLER_ERROR); +void _err_print_error(const char *p_function, const char *p_file, int p_line, const String &p_error, ErrorHandlerType p_type = ERR_HANDLER_ERROR); void _err_print_index_error(const char *p_function, const char *p_file, int p_line, int64_t p_index, int64_t p_size, const char *p_index_str, const char *p_size_str, bool fatal = false); #ifndef _STR @@ -98,10 +101,10 @@ extern bool _err_error_exists; _err_set_last_error(m_reason); \ _err_error_exists = true; \ } -#define ERR_EXPLAIN(m_string) \ - { \ - _err_set_last_error(String(m_string).utf8().get_data()); \ - _err_error_exists = true; \ +#define ERR_EXPLAIN(m_string) \ + { \ + _err_set_last_error(m_string); \ + _err_error_exists = true; \ } #else @@ -430,10 +433,10 @@ extern bool _err_error_exists; _err_error_exists = false; \ } -#define ERR_PRINTS(m_string) \ - { \ - _err_print_error(FUNCTION_STR, __FILE__, __LINE__, String(m_string).utf8().get_data()); \ - _err_error_exists = false; \ +#define ERR_PRINTS(m_string) \ + { \ + _err_print_error(FUNCTION_STR, __FILE__, __LINE__, m_string); \ + _err_error_exists = false; \ } #define ERR_PRINT_ONCE(m_string) \ @@ -455,10 +458,10 @@ extern bool _err_error_exists; _err_error_exists = false; \ } -#define WARN_PRINTS(m_string) \ - { \ - _err_print_error(FUNCTION_STR, __FILE__, __LINE__, String(m_string).utf8().get_data(), ERR_HANDLER_WARNING); \ - _err_error_exists = false; \ +#define WARN_PRINTS(m_string) \ + { \ + _err_print_error(FUNCTION_STR, __FILE__, __LINE__, m_string, ERR_HANDLER_WARNING); \ + _err_error_exists = false; \ } #define WARN_PRINT_ONCE(m_string) \ diff --git a/core/hash_map.h b/core/hash_map.h index 81ddc376d0..edc67e7806 100644 --- a/core/hash_map.h +++ b/core/hash_map.h @@ -112,7 +112,7 @@ private: void erase_hash_table() { - ERR_FAIL_COND(elements); + ERR_FAIL_COND_MSG(elements, "Cannot erase hash table if there are still elements inside."); memdelete_arr(hash_table); hash_table = 0; @@ -210,6 +210,7 @@ private: e->next = hash_table[index]; e->hash = hash; e->pair.key = p_key; + e->pair.data = TData(); hash_table[index] = e; elements++; diff --git a/core/image.cpp b/core/image.cpp index 900efb0eb0..74706535b3 100644 --- a/core/image.cpp +++ b/core/image.cpp @@ -885,10 +885,10 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { bool mipmap_aware = p_interpolation == INTERPOLATE_TRILINEAR /* || p_interpolation == INTERPOLATE_TRICUBIC */; - ERR_FAIL_COND(p_width <= 0); - ERR_FAIL_COND(p_height <= 0); - ERR_FAIL_COND(p_width > MAX_WIDTH); - ERR_FAIL_COND(p_height > MAX_HEIGHT); + ERR_FAIL_COND_MSG(p_width <= 0, "Image width must be greater than 0."); + ERR_FAIL_COND_MSG(p_height <= 0, "Image height must be greater than 0."); + ERR_FAIL_COND_MSG(p_width > MAX_WIDTH, "Image width cannot be greater than " + itos(MAX_WIDTH) + "."); + ERR_FAIL_COND_MSG(p_height > MAX_HEIGHT, "Image height cannot be greater than " + itos(MAX_HEIGHT) + "."); if (p_width == width && p_height == height) return; @@ -1096,12 +1096,12 @@ void Image::crop_from_point(int p_x, int p_y, int p_width, int p_height) { ERR_FAIL_COND_MSG(!_can_modify(format), "Cannot crop in compressed or custom image formats."); - ERR_FAIL_COND(p_x < 0); - ERR_FAIL_COND(p_y < 0); - ERR_FAIL_COND(p_width <= 0); - ERR_FAIL_COND(p_height <= 0); - ERR_FAIL_COND(p_x + p_width > MAX_WIDTH); - ERR_FAIL_COND(p_y + p_height > MAX_HEIGHT); + ERR_FAIL_COND_MSG(p_x < 0, "Start x position cannot be smaller than 0."); + ERR_FAIL_COND_MSG(p_y < 0, "Start y position cannot be smaller than 0."); + ERR_FAIL_COND_MSG(p_width <= 0, "Width of image must be greater than 0."); + ERR_FAIL_COND_MSG(p_height <= 0, "Height of image must be greater than 0."); + ERR_FAIL_COND_MSG(p_x + p_width > MAX_WIDTH, "End x position cannot be greater than " + itos(MAX_WIDTH) + "."); + ERR_FAIL_COND_MSG(p_y + p_height > MAX_HEIGHT, "End y position cannot be greater than " + itos(MAX_HEIGHT) + "."); /* to save memory, cropping should be done in-place, however, since this function will most likely either not be used much, or in critical areas, for now it won't, because @@ -1284,8 +1284,8 @@ static void _generate_po2_mipmap(const Component *p_src, Component *p_dst, uint3 Component *dst_ptr = &p_dst[i * dst_w * CC]; uint32_t count = dst_w; - while (count--) { - + while (count) { + count--; for (int j = 0; j < CC; j++) { average_func(dst_ptr[j], rup_ptr[j], rup_ptr[j + right_step], rdown_ptr[j], rdown_ptr[j + right_step]); } @@ -1322,6 +1322,8 @@ void Image::expand_x2_hq2x() { PoolVector<uint8_t>::Read r = data.read(); PoolVector<uint8_t>::Write w = dest.write(); + ERR_FAIL_COND(!r.ptr()); + hq2x_resize((const uint32_t *)r.ptr(), width, height, (uint32_t *)w.ptr()); } @@ -1373,6 +1375,7 @@ void Image::shrink_x2() { int ps = get_format_pixel_size(format); new_img.resize((width / 2) * (height / 2) * ps); ERR_FAIL_COND(new_img.size() == 0); + ERR_FAIL_COND(data.size() == 0); { PoolVector<uint8_t>::Write w = new_img.write(); @@ -2055,7 +2058,7 @@ Ref<Image> Image::get_rect(const Rect2 &p_area) const { void Image::blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest) { - ERR_FAIL_COND(p_src.is_null()); + ERR_FAIL_COND_MSG(p_src.is_null(), "It's not a reference to a valid Image object."); int dsize = data.size(); int srcdsize = p_src->data.size(); ERR_FAIL_COND(dsize == 0); @@ -2105,16 +2108,16 @@ void Image::blit_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Po void Image::blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Point2 &p_dest) { - ERR_FAIL_COND(p_src.is_null()); - ERR_FAIL_COND(p_mask.is_null()); + ERR_FAIL_COND_MSG(p_src.is_null(), "It's not a reference to a valid Image object."); + ERR_FAIL_COND_MSG(p_mask.is_null(), "It's not a reference to a valid Image object."); int dsize = data.size(); int srcdsize = p_src->data.size(); int maskdsize = p_mask->data.size(); ERR_FAIL_COND(dsize == 0); ERR_FAIL_COND(srcdsize == 0); ERR_FAIL_COND(maskdsize == 0); - ERR_FAIL_COND(p_src->width != p_mask->width); - ERR_FAIL_COND(p_src->height != p_mask->height); + ERR_FAIL_COND_MSG(p_src->width != p_mask->width, "Source image width is different from mask width."); + ERR_FAIL_COND_MSG(p_src->height != p_mask->height, "Source image height is different from mask height."); ERR_FAIL_COND(format != p_src->format); Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); @@ -2168,7 +2171,7 @@ void Image::blit_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, co void Image::blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const Point2 &p_dest) { - ERR_FAIL_COND(p_src.is_null()); + ERR_FAIL_COND_MSG(p_src.is_null(), "It's not a reference to a valid Image object."); int dsize = data.size(); int srcdsize = p_src->data.size(); ERR_FAIL_COND(dsize == 0); @@ -2218,16 +2221,16 @@ void Image::blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const P void Image::blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, const Rect2 &p_src_rect, const Point2 &p_dest) { - ERR_FAIL_COND(p_src.is_null()); - ERR_FAIL_COND(p_mask.is_null()); + ERR_FAIL_COND_MSG(p_src.is_null(), "It's not a reference to a valid Image object."); + ERR_FAIL_COND_MSG(p_mask.is_null(), "It's not a reference to a valid Image object."); int dsize = data.size(); int srcdsize = p_src->data.size(); int maskdsize = p_mask->data.size(); ERR_FAIL_COND(dsize == 0); ERR_FAIL_COND(srcdsize == 0); ERR_FAIL_COND(maskdsize == 0); - ERR_FAIL_COND(p_src->width != p_mask->width); - ERR_FAIL_COND(p_src->height != p_mask->height); + ERR_FAIL_COND_MSG(p_src->width != p_mask->width, "Source image width is different from mask width."); + ERR_FAIL_COND_MSG(p_src->height != p_mask->height, "Source image height is different from mask height."); ERR_FAIL_COND(format != p_src->format); Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); @@ -2895,6 +2898,8 @@ void Image::bumpmap_to_normalmap(float bump_scale) { PoolVector<uint8_t>::Read rp = data.read(); PoolVector<uint8_t>::Write wp = result_image.write(); + ERR_FAIL_COND(!rp.ptr()); + unsigned char *write_ptr = wp.ptr(); float *read_ptr = (float *)rp.ptr(); @@ -2930,7 +2935,7 @@ void Image::srgb_to_linear() { if (data.size() == 0) return; - static const uint8_t srgb2lin[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 22, 22, 23, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 47, 48, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 92, 93, 94, 95, 97, 98, 99, 101, 102, 103, 105, 106, 107, 109, 110, 112, 113, 114, 116, 117, 119, 120, 122, 123, 125, 126, 128, 129, 131, 132, 134, 135, 137, 139, 140, 142, 144, 145, 147, 148, 150, 152, 153, 155, 157, 159, 160, 162, 164, 166, 167, 169, 171, 173, 175, 176, 178, 180, 182, 184, 186, 188, 190, 192, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 218, 220, 222, 224, 226, 228, 230, 232, 235, 237, 239, 241, 243, 245, 248, 250, 252 }; + static const uint8_t srgb2lin[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 22, 22, 23, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 30, 31, 31, 32, 33, 33, 34, 35, 36, 36, 37, 38, 38, 39, 40, 41, 42, 42, 43, 44, 45, 46, 47, 47, 48, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 92, 93, 94, 95, 97, 98, 99, 101, 102, 103, 105, 106, 107, 109, 110, 112, 113, 114, 116, 117, 119, 120, 122, 123, 125, 126, 128, 129, 131, 132, 134, 135, 137, 139, 140, 142, 144, 145, 147, 148, 150, 152, 153, 155, 157, 159, 160, 162, 164, 166, 167, 169, 171, 173, 175, 176, 178, 180, 182, 184, 186, 188, 190, 192, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 218, 220, 222, 224, 226, 228, 230, 232, 235, 237, 239, 241, 243, 245, 248, 250, 252, 255 }; ERR_FAIL_COND(format != FORMAT_RGB8 && format != FORMAT_RGBA8); diff --git a/core/image.h b/core/image.h index f29a30cda0..94ee8a2c33 100644 --- a/core/image.h +++ b/core/image.h @@ -356,7 +356,7 @@ public: void set_pixel(int p_x, int p_y, const Color &p_color); void copy_internals_from(const Ref<Image> &p_image) { - ERR_FAIL_COND(p_image.is_null()); + ERR_FAIL_COND_MSG(p_image.is_null(), "It's not a reference to a valid Image object."); format = p_image->format; width = p_image->width; height = p_image->height; diff --git a/core/input_map.cpp b/core/input_map.cpp index 2a8ac435fe..05c75febf2 100644 --- a/core/input_map.cpp +++ b/core/input_map.cpp @@ -56,7 +56,7 @@ void InputMap::_bind_methods() { void InputMap::add_action(const StringName &p_action, float p_deadzone) { - ERR_FAIL_COND(input_map.has(p_action)); + ERR_FAIL_COND_MSG(input_map.has(p_action), "InputMap already has action '" + String(p_action) + "'."); input_map[p_action] = Action(); static int last_id = 1; input_map[p_action].id = last_id; @@ -66,7 +66,7 @@ void InputMap::add_action(const StringName &p_action, float p_deadzone) { void InputMap::erase_action(const StringName &p_action) { - ERR_FAIL_COND(!input_map.has(p_action)); + ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'."); input_map.erase(p_action); } @@ -126,15 +126,15 @@ bool InputMap::has_action(const StringName &p_action) const { void InputMap::action_set_deadzone(const StringName &p_action, float p_deadzone) { - ERR_FAIL_COND(!input_map.has(p_action)); + ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'."); input_map[p_action].deadzone = p_deadzone; } void InputMap::action_add_event(const StringName &p_action, const Ref<InputEvent> &p_event) { - ERR_FAIL_COND(p_event.is_null()); - ERR_FAIL_COND(!input_map.has(p_action)); + ERR_FAIL_COND_MSG(p_event.is_null(), "It's not a reference to a valid InputEvent object."); + ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'."); if (_find_event(input_map[p_action], p_event)) return; //already gots @@ -143,13 +143,13 @@ void InputMap::action_add_event(const StringName &p_action, const Ref<InputEvent bool InputMap::action_has_event(const StringName &p_action, const Ref<InputEvent> &p_event) { - ERR_FAIL_COND_V(!input_map.has(p_action), false); + ERR_FAIL_COND_V_MSG(!input_map.has(p_action), false, "Request for nonexistent InputMap action '" + String(p_action) + "'."); return (_find_event(input_map[p_action], p_event) != NULL); } void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEvent> &p_event) { - ERR_FAIL_COND(!input_map.has(p_action)); + ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'."); List<Ref<InputEvent> >::Element *E = _find_event(input_map[p_action], p_event); if (E) @@ -158,7 +158,7 @@ void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEve void InputMap::action_erase_events(const StringName &p_action) { - ERR_FAIL_COND(!input_map.has(p_action)); + ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'."); input_map[p_action].inputs.clear(); } @@ -192,7 +192,7 @@ bool InputMap::event_is_action(const Ref<InputEvent> &p_event, const StringName bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool *p_pressed, float *p_strength) const { Map<StringName, Action>::Element *E = input_map.find(p_action); - ERR_FAIL_COND_V_MSG(!E, false, "Request for nonexistent InputMap action: " + String(p_action) + "."); + ERR_FAIL_COND_V_MSG(!E, false, "Request for nonexistent InputMap action '" + String(p_action) + "'."); Ref<InputEventAction> input_event_action = p_event; if (input_event_action.is_valid()) { @@ -333,6 +333,6 @@ void InputMap::load_default() { InputMap::InputMap() { - ERR_FAIL_COND(singleton); + ERR_FAIL_COND_MSG(singleton, "Singleton in InputMap already exist."); singleton = this; } diff --git a/core/io/config_file.cpp b/core/io/config_file.cpp index 9063e028be..5684c82d1c 100644 --- a/core/io/config_file.cpp +++ b/core/io/config_file.cpp @@ -111,7 +111,7 @@ void ConfigFile::get_sections(List<String> *r_sections) const { } void ConfigFile::get_section_keys(const String &p_section, List<String> *r_keys) const { - ERR_FAIL_COND(!values.has(p_section)); + ERR_FAIL_COND_MSG(!values.has(p_section), "Cannont get keys from nonexistent section '" + p_section + "'."); for (OrderedHashMap<String, Variant>::ConstElement E = values[p_section].front(); E; E = E.next()) { r_keys->push_back(E.key()); @@ -123,6 +123,13 @@ void ConfigFile::erase_section(const String &p_section) { values.erase(p_section); } +void ConfigFile::erase_section_key(const String &p_section, const String &p_key) { + + ERR_FAIL_COND_MSG(!values.has(p_section), "Cannot erase key from nonexistent section '" + p_section + "'."); + + values[p_section].erase(p_key); +} + Error ConfigFile::save(const String &p_path) { Error err; @@ -293,6 +300,7 @@ void ConfigFile::_bind_methods() { ClassDB::bind_method(D_METHOD("get_section_keys", "section"), &ConfigFile::_get_section_keys); ClassDB::bind_method(D_METHOD("erase_section", "section"), &ConfigFile::erase_section); + ClassDB::bind_method(D_METHOD("erase_section_key", "section", "key"), &ConfigFile::erase_section_key); ClassDB::bind_method(D_METHOD("load", "path"), &ConfigFile::load); ClassDB::bind_method(D_METHOD("save", "path"), &ConfigFile::save); diff --git a/core/io/config_file.h b/core/io/config_file.h index 3ab6fef868..d927779f9c 100644 --- a/core/io/config_file.h +++ b/core/io/config_file.h @@ -60,6 +60,7 @@ public: void get_section_keys(const String &p_section, List<String> *r_keys) const; void erase_section(const String &p_section); + void erase_section_key(const String &p_section, const String &p_key); Error save(const String &p_path); Error load(const String &p_path); diff --git a/core/io/file_access_compressed.cpp b/core/io/file_access_compressed.cpp index 102cd9cf6c..a52c6f79c9 100644 --- a/core/io/file_access_compressed.cpp +++ b/core/io/file_access_compressed.cpp @@ -195,7 +195,7 @@ bool FileAccessCompressed::is_open() const { void FileAccessCompressed::seek(size_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); if (writing) { ERR_FAIL_COND(p_position > write_max); @@ -227,7 +227,7 @@ void FileAccessCompressed::seek(size_t p_position) { void FileAccessCompressed::seek_end(int64_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); if (writing) { seek(write_max + p_position); @@ -238,7 +238,7 @@ void FileAccessCompressed::seek_end(int64_t p_position) { } size_t FileAccessCompressed::get_position() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); if (writing) { return write_pos; @@ -249,7 +249,7 @@ size_t FileAccessCompressed::get_position() const { } size_t FileAccessCompressed::get_len() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); if (writing) { return write_max; @@ -260,7 +260,7 @@ size_t FileAccessCompressed::get_len() const { bool FileAccessCompressed::eof_reached() const { - ERR_FAIL_COND_V(!f, false); + ERR_FAIL_COND_V_MSG(!f, false, "File must be opened before use."); if (writing) { return false; } else { @@ -270,8 +270,8 @@ bool FileAccessCompressed::eof_reached() const { uint8_t FileAccessCompressed::get_8() const { - ERR_FAIL_COND_V(writing, 0); - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); + ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); if (at_end) { read_eof = true; @@ -301,8 +301,8 @@ uint8_t FileAccessCompressed::get_8() const { } int FileAccessCompressed::get_buffer(uint8_t *p_dst, int p_length) const { - ERR_FAIL_COND_V(writing, 0); - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); + ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); if (at_end) { read_eof = true; @@ -342,16 +342,16 @@ Error FileAccessCompressed::get_error() const { } void FileAccessCompressed::flush() { - ERR_FAIL_COND(!f); - ERR_FAIL_COND(!writing); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); + ERR_FAIL_COND_MSG(!writing, "File has not been opened in read mode."); // compressed files keep data in memory till close() } void FileAccessCompressed::store_8(uint8_t p_dest) { - ERR_FAIL_COND(!f); - ERR_FAIL_COND(!writing); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); + ERR_FAIL_COND_MSG(!writing, "File has not been opened in read mode."); WRITE_FIT(1); write_ptr[write_pos++] = p_dest; diff --git a/core/io/file_access_encrypted.cpp b/core/io/file_access_encrypted.cpp index 77decc107d..c2e4e0f575 100644 --- a/core/io/file_access_encrypted.cpp +++ b/core/io/file_access_encrypted.cpp @@ -41,7 +41,7 @@ Error FileAccessEncrypted::open_and_parse(FileAccess *p_base, const Vector<uint8_t> &p_key, Mode p_mode) { - ERR_FAIL_COND_V(file != NULL, ERR_ALREADY_IN_USE); + ERR_FAIL_COND_V_MSG(file != NULL, ERR_ALREADY_IN_USE, "Can't open file while another file from path '" + file->get_path_absolute() + "' is open."); ERR_FAIL_COND_V(p_key.size() != 32, ERR_INVALID_PARAMETER); pos = 0; @@ -176,6 +176,22 @@ bool FileAccessEncrypted::is_open() const { return file != NULL; } +String FileAccessEncrypted::get_path() const { + + if (file) + return file->get_path(); + else + return ""; +} + +String FileAccessEncrypted::get_path_absolute() const { + + if (file) + return file->get_path_absolute(); + else + return ""; +} + void FileAccessEncrypted::seek(size_t p_position) { if (p_position > (size_t)data.size()) @@ -205,7 +221,7 @@ bool FileAccessEncrypted::eof_reached() const { uint8_t FileAccessEncrypted::get_8() const { - ERR_FAIL_COND_V(writing, 0); + ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); if (pos >= data.size()) { eofed = true; return 0; @@ -217,7 +233,7 @@ uint8_t FileAccessEncrypted::get_8() const { } int FileAccessEncrypted::get_buffer(uint8_t *p_dst, int p_length) const { - ERR_FAIL_COND_V(writing, 0); + ERR_FAIL_COND_V_MSG(writing, 0, "File has not been opened in read mode."); int to_copy = MIN(p_length, data.size() - pos); for (int i = 0; i < to_copy; i++) { @@ -239,7 +255,7 @@ Error FileAccessEncrypted::get_error() const { void FileAccessEncrypted::store_buffer(const uint8_t *p_src, int p_length) { - ERR_FAIL_COND(!writing); + ERR_FAIL_COND_MSG(!writing, "File has not been opened in read mode."); if (pos < data.size()) { @@ -259,14 +275,14 @@ void FileAccessEncrypted::store_buffer(const uint8_t *p_src, int p_length) { } void FileAccessEncrypted::flush() { - ERR_FAIL_COND(!writing); + ERR_FAIL_COND_MSG(!writing, "File has not been opened in read mode."); // encrypted files keep data in memory till close() } void FileAccessEncrypted::store_8(uint8_t p_dest) { - ERR_FAIL_COND(!writing); + ERR_FAIL_COND_MSG(!writing, "File has not been opened in read mode."); if (pos < data.size()) { data.write[pos] = p_dest; diff --git a/core/io/file_access_encrypted.h b/core/io/file_access_encrypted.h index d779a150ac..c3be0f7de8 100644 --- a/core/io/file_access_encrypted.h +++ b/core/io/file_access_encrypted.h @@ -60,6 +60,9 @@ public: virtual void close(); ///< close a file virtual bool is_open() const; ///< true when file is open + virtual String get_path() const; /// returns the path for the current open file + virtual String get_path_absolute() const; /// returns the absolute path for the current open file + virtual void seek(size_t p_position); ///< seek to a given position virtual void seek_end(int64_t p_position = 0); ///< seek from the end of file virtual size_t get_position() const; ///< get position in the file diff --git a/core/io/file_access_memory.cpp b/core/io/file_access_memory.cpp index fbcf5b8021..c0acd36751 100644 --- a/core/io/file_access_memory.cpp +++ b/core/io/file_access_memory.cpp @@ -90,7 +90,7 @@ Error FileAccessMemory::_open(const String &p_path, int p_mode_flags) { //name = DirAccess::normalize_path(name); Map<String, Vector<uint8_t> >::Element *E = files->find(name); - ERR_FAIL_COND_V(!E, ERR_FILE_NOT_FOUND); + ERR_FAIL_COND_V_MSG(!E, ERR_FILE_NOT_FOUND, "Can't find file '" + p_path + "'."); data = E->get().ptrw(); length = E->get().size(); diff --git a/core/io/file_access_network.cpp b/core/io/file_access_network.cpp index d1c7f5c334..e653a924ba 100644 --- a/core/io/file_access_network.cpp +++ b/core/io/file_access_network.cpp @@ -195,7 +195,7 @@ Error FileAccessNetworkClient::connect(const String &p_host, int p_port, const S DEBUG_PRINT("IP: " + String(ip) + " port " + itos(p_port)); Error err = client->connect_to_host(ip, p_port); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot connect to host with IP: " + String(ip) + " and port: " + itos(p_port)); while (client->get_status() == StreamPeerTCP::STATUS_CONNECTING) { //DEBUG_PRINT("trying to connect...."); OS::get_singleton()->delay_usec(1000); @@ -339,7 +339,7 @@ bool FileAccessNetwork::is_open() const { void FileAccessNetwork::seek(size_t p_position) { - ERR_FAIL_COND(!opened); + ERR_FAIL_COND_MSG(!opened, "File must be opened before use."); eof_flag = p_position > total_size; if (p_position >= total_size) { @@ -355,18 +355,18 @@ void FileAccessNetwork::seek_end(int64_t p_position) { } size_t FileAccessNetwork::get_position() const { - ERR_FAIL_COND_V(!opened, 0); + ERR_FAIL_COND_V_MSG(!opened, 0, "File must be opened before use."); return pos; } size_t FileAccessNetwork::get_len() const { - ERR_FAIL_COND_V(!opened, 0); + ERR_FAIL_COND_V_MSG(!opened, 0, "File must be opened before use."); return total_size; } bool FileAccessNetwork::eof_reached() const { - ERR_FAIL_COND_V(!opened, false); + ERR_FAIL_COND_V_MSG(!opened, false, "File must be opened before use."); return eof_flag; } diff --git a/core/io/file_access_pack.cpp b/core/io/file_access_pack.cpp index d49d36c2b9..34d3eb5344 100644 --- a/core/io/file_access_pack.cpp +++ b/core/io/file_access_pack.cpp @@ -36,11 +36,11 @@ #define PACK_VERSION 1 -Error PackedData::add_pack(const String &p_path) { +Error PackedData::add_pack(const String &p_path, bool p_replace_files) { for (int i = 0; i < sources.size(); i++) { - if (sources[i]->try_open_pack(p_path)) { + if (sources[i]->try_open_pack(p_path, p_replace_files)) { return OK; }; @@ -49,7 +49,7 @@ Error PackedData::add_pack(const String &p_path) { return ERR_FILE_UNRECOGNIZED; }; -void PackedData::add_path(const String &pkg_path, const String &path, uint64_t ofs, uint64_t size, const uint8_t *p_md5, PackSource *p_src) { +void PackedData::add_path(const String &pkg_path, const String &path, uint64_t ofs, uint64_t size, const uint8_t *p_md5, PackSource *p_src, bool p_replace_files) { PathMD5 pmd5(path.md5_buffer()); //printf("adding path %ls, %lli, %lli\n", path.c_str(), pmd5.a, pmd5.b); @@ -64,7 +64,8 @@ void PackedData::add_path(const String &pkg_path, const String &path, uint64_t o pf.md5[i] = p_md5[i]; pf.src = p_src; - files[pmd5] = pf; + if (!exists || p_replace_files) + files[pmd5] = pf; if (!exists) { //search for dir @@ -133,7 +134,7 @@ PackedData::~PackedData() { ////////////////////////////////////////////////////////////////// -bool PackedSourcePCK::try_open_pack(const String &p_path) { +bool PackedSourcePCK::try_open_pack(const String &p_path, bool p_replace_files) { FileAccess *f = FileAccess::open(p_path, FileAccess::READ); if (!f) @@ -150,6 +151,7 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { magic = f->get_32(); if (magic != 0x43504447) { + f->close(); memdelete(f); return false; } @@ -161,6 +163,7 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { magic = f->get_32(); if (magic != 0x43504447) { + f->close(); memdelete(f); return false; } @@ -171,8 +174,16 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { uint32_t ver_minor = f->get_32(); f->get_32(); // ver_rev - ERR_FAIL_COND_V_MSG(version != PACK_VERSION, false, "Pack version unsupported: " + itos(version) + "."); - ERR_FAIL_COND_V_MSG(ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR), false, "Pack created with a newer version of the engine: " + itos(ver_major) + "." + itos(ver_minor) + "."); + if (version != PACK_VERSION) { + f->close(); + memdelete(f); + ERR_FAIL_V_MSG(false, "Pack version unsupported: " + itos(version) + "."); + } + if (ver_major > VERSION_MAJOR || (ver_major == VERSION_MAJOR && ver_minor > VERSION_MINOR)) { + f->close(); + memdelete(f); + ERR_FAIL_V_MSG(false, "Pack created with a newer version of the engine: " + itos(ver_major) + "." + itos(ver_minor) + "."); + } for (int i = 0; i < 16; i++) { //reserved @@ -196,9 +207,11 @@ bool PackedSourcePCK::try_open_pack(const String &p_path) { uint64_t size = f->get_64(); uint8_t md5[16]; f->get_buffer(md5, 16); - PackedData::get_singleton()->add_path(p_path, path, ofs, size, md5, this); + PackedData::get_singleton()->add_path(p_path, path, ofs, size, md5, this, p_replace_files); }; + f->close(); + memdelete(f); return true; }; @@ -321,7 +334,7 @@ FileAccessPack::FileAccessPack(const String &p_path, const PackedData::PackedFil pf(p_file), f(FileAccess::open(pf.pack, FileAccess::READ)) { - ERR_FAIL_COND_MSG(!f, "Can't open pack-referenced file: " + String(pf.pack) + "."); + ERR_FAIL_COND_MSG(!f, "Can't open pack-referenced file '" + String(pf.pack) + "'."); f->seek(pf.offset); pos = 0; diff --git a/core/io/file_access_pack.h b/core/io/file_access_pack.h index a21dd7d22d..8c34069f3a 100644 --- a/core/io/file_access_pack.h +++ b/core/io/file_access_pack.h @@ -102,13 +102,13 @@ private: public: void add_pack_source(PackSource *p_source); - void add_path(const String &pkg_path, const String &path, uint64_t ofs, uint64_t size, const uint8_t *p_md5, PackSource *p_src); // for PackSource + void add_path(const String &pkg_path, const String &path, uint64_t ofs, uint64_t size, const uint8_t *p_md5, PackSource *p_src, bool p_replace_files); // for PackSource void set_disabled(bool p_disabled) { disabled = p_disabled; } _FORCE_INLINE_ bool is_disabled() const { return disabled; } static PackedData *get_singleton() { return singleton; } - Error add_pack(const String &p_path); + Error add_pack(const String &p_path, bool p_replace_files); _FORCE_INLINE_ FileAccess *try_open_path(const String &p_path); _FORCE_INLINE_ bool has_path(const String &p_path); @@ -120,7 +120,7 @@ public: class PackSource { public: - virtual bool try_open_pack(const String &p_path) = 0; + virtual bool try_open_pack(const String &p_path, bool p_replace_files) = 0; virtual FileAccess *get_file(const String &p_path, PackedData::PackedFile *p_file) = 0; virtual ~PackSource() {} }; @@ -128,7 +128,7 @@ public: class PackedSourcePCK : public PackSource { public: - virtual bool try_open_pack(const String &p_path); + virtual bool try_open_pack(const String &p_path, bool p_replace_files); virtual FileAccess *get_file(const String &p_path, PackedData::PackedFile *p_file); }; diff --git a/core/io/file_access_zip.cpp b/core/io/file_access_zip.cpp index be28c9a877..3187f3bab6 100644 --- a/core/io/file_access_zip.cpp +++ b/core/io/file_access_zip.cpp @@ -117,7 +117,7 @@ static void godot_free(voidpf opaque, voidpf address) { void ZipArchive::close_handle(unzFile p_file) const { - ERR_FAIL_COND(!p_file); + ERR_FAIL_COND_MSG(!p_file, "Cannot close a file if none is open."); FileAccess *f = (FileAccess *)unzGetOpaque(p_file); unzCloseCurrentFile(p_file); unzClose(p_file); @@ -126,11 +126,11 @@ void ZipArchive::close_handle(unzFile p_file) const { unzFile ZipArchive::get_file_handle(String p_file) const { - ERR_FAIL_COND_V(!file_exists(p_file), NULL); + ERR_FAIL_COND_V_MSG(!file_exists(p_file), NULL, "File '" + p_file + " doesn't exist."); File file = files[p_file]; FileAccess *f = FileAccess::open(packages[file.package].filename, FileAccess::READ); - ERR_FAIL_COND_V(!f, NULL); + ERR_FAIL_COND_V_MSG(!f, NULL, "Cannot open file '" + packages[file.package].filename + "'."); zlib_filefunc_def io; zeromem(&io, sizeof(io)); @@ -160,7 +160,7 @@ unzFile ZipArchive::get_file_handle(String p_file) const { return pkg; } -bool ZipArchive::try_open_pack(const String &p_path) { +bool ZipArchive::try_open_pack(const String &p_path, bool p_replace_files) { //printf("opening zip pack %ls, %i, %i\n", p_name.c_str(), p_name.extension().nocasecmp_to("zip"), p_name.extension().nocasecmp_to("pcz")); if (p_path.get_extension().nocasecmp_to("zip") != 0 && p_path.get_extension().nocasecmp_to("pcz") != 0) @@ -194,7 +194,7 @@ bool ZipArchive::try_open_pack(const String &p_path) { packages.push_back(pkg); int pkg_num = packages.size() - 1; - for (unsigned int i = 0; i < gi.number_entry; i++) { + for (uint64_t i = 0; i < gi.number_entry; i++) { char filename_inzip[256]; @@ -210,7 +210,7 @@ bool ZipArchive::try_open_pack(const String &p_path) { files[fname] = f; uint8_t md5[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - PackedData::get_singleton()->add_path(p_path, fname, 1, 0, md5, this); + PackedData::get_singleton()->add_path(p_path, fname, 1, 0, md5, this, p_replace_files); //printf("packed data add path %ls, %ls\n", p_name.c_str(), fname.c_str()); if ((i + 1) < gi.number_entry) { diff --git a/core/io/file_access_zip.h b/core/io/file_access_zip.h index 217176c0af..cdd50f9eb3 100644 --- a/core/io/file_access_zip.h +++ b/core/io/file_access_zip.h @@ -74,7 +74,7 @@ public: bool file_exists(String p_name) const; - virtual bool try_open_pack(const String &p_path); + virtual bool try_open_pack(const String &p_path, bool p_replace_files); FileAccess *get_file(const String &p_path, PackedData::PackedFile *p_file); static ZipArchive *get_singleton(); diff --git a/core/io/image_loader.cpp b/core/io/image_loader.cpp index a759e615c7..095c2abb54 100644 --- a/core/io/image_loader.cpp +++ b/core/io/image_loader.cpp @@ -46,14 +46,14 @@ bool ImageFormatLoader::recognize(const String &p_extension) const { } Error ImageLoader::load_image(String p_file, Ref<Image> p_image, FileAccess *p_custom, bool p_force_linear, float p_scale) { - ERR_FAIL_COND_V(p_image.is_null(), ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(p_image.is_null(), ERR_INVALID_PARAMETER, "It's not a reference to a valid Image object."); FileAccess *f = p_custom; if (!f) { Error err; f = FileAccess::open(p_file, FileAccess::READ, &err); if (!f) { - ERR_PRINTS("Error opening file: " + p_file); + ERR_PRINTS("Error opening file '" + p_file + "'."); return err; } } diff --git a/core/io/ip.cpp b/core/io/ip.cpp index 3d87131b51..f1b6570799 100644 --- a/core/io/ip.cpp +++ b/core/io/ip.cpp @@ -305,7 +305,7 @@ IP *(*IP::_create)() = NULL; IP *IP::create() { - ERR_FAIL_COND_V(singleton, NULL); + ERR_FAIL_COND_V_MSG(singleton, NULL, "IP singleton already exist."); ERR_FAIL_COND_V(!_create, NULL); return _create(); } diff --git a/core/io/ip_address.cpp b/core/io/ip_address.cpp index df4be9b9fd..0980027f42 100644 --- a/core/io/ip_address.cpp +++ b/core/io/ip_address.cpp @@ -181,7 +181,7 @@ bool IP_Address::is_ipv4() const { } const uint8_t *IP_Address::get_ipv4() const { - ERR_FAIL_COND_V(!is_ipv4(), &(field8[12])); // Not the correct IPv4 (it's an IPv6), but we don't want to return a null pointer risking an engine crash. + ERR_FAIL_COND_V_MSG(!is_ipv4(), &(field8[12]), "IPv4 requested, but current IP is IPv6."); // Not the correct IPv4 (it's an IPv6), but we don't want to return a null pointer risking an engine crash. return &(field8[12]); } diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp index b386feb14c..2ae542bca7 100644 --- a/core/io/marshalls.cpp +++ b/core/io/marshalls.cpp @@ -478,7 +478,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int int used; Error err = decode_variant(key, buf, len, &used, p_allow_objects); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; len -= used; @@ -487,7 +487,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int } err = decode_variant(value, buf, len, &used, p_allow_objects); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; len -= used; @@ -522,7 +522,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int int used = 0; Variant v; Error err = decode_variant(v, buf, len, &used, p_allow_objects); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; len -= used; varr.push_back(v); diff --git a/core/io/multiplayer_api.cpp b/core/io/multiplayer_api.cpp index ed6905c9a6..1426dbbd4d 100644 --- a/core/io/multiplayer_api.cpp +++ b/core/io/multiplayer_api.cpp @@ -602,7 +602,16 @@ void MultiplayerAPI::_add_peer(int p_id) { void MultiplayerAPI::_del_peer(int p_id) { connected_peers.erase(p_id); - path_get_cache.erase(p_id); // I no longer need your cache, sorry. + // Cleanup get cache. + path_get_cache.erase(p_id); + // Cleanup sent cache. + // Some refactoring is needed to make this faster and do paths GC. + List<NodePath> keys; + path_send_cache.get_key_list(&keys); + for (List<NodePath>::Element *E = keys.front(); E; E = E->next()) { + PathSentCache *psc = path_send_cache.getptr(E->get()); + psc->confirmed_peers.erase(p_id); + } emit_signal("network_peer_disconnected", p_id); } @@ -917,8 +926,7 @@ int MultiplayerAPI::_get_bandwidth_usage(const Vector<BandwidthFrame> &p_buffer, i = (i + p_buffer.size() - 1) % p_buffer.size(); } - ERR_EXPLAIN("Reached the end of the bandwidth profiler buffer, values might be inaccurate."); - ERR_FAIL_COND_V(i == p_pointer, total_bandwidth); + ERR_FAIL_COND_V_MSG(i == p_pointer, total_bandwidth, "Reached the end of the bandwidth profiler buffer, values might be inaccurate."); return total_bandwidth; } diff --git a/core/io/packet_peer.cpp b/core/io/packet_peer.cpp index 1c792c43d1..821a04ebad 100644 --- a/core/io/packet_peer.cpp +++ b/core/io/packet_peer.cpp @@ -101,9 +101,9 @@ Error PacketPeer::put_var(const Variant &p_packet, bool p_full_objects) { return OK; uint8_t *buf = (uint8_t *)alloca(len); - ERR_FAIL_COND_V(!buf, ERR_OUT_OF_MEMORY); + ERR_FAIL_COND_V_MSG(!buf, ERR_OUT_OF_MEMORY, "Out of memory."); err = encode_variant(p_packet, buf, len, p_full_objects || allow_object_decoding); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to encode Variant."); return put_packet(buf, len); } @@ -150,7 +150,7 @@ void PacketPeer::_bind_methods() { void PacketPeerStream::_set_stream_peer(REF p_peer) { - ERR_FAIL_COND(p_peer.is_null()); + ERR_FAIL_COND_MSG(p_peer.is_null(), "It's not a reference to a valid Resource object."); set_stream_peer(p_peer); } diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp index 1c89bc6268..443f390bb7 100644 --- a/core/io/pck_packer.cpp +++ b/core/io/pck_packer.cpp @@ -107,7 +107,7 @@ Error PCKPacker::add_file(const String &p_file, const String &p_src) { Error PCKPacker::flush(bool p_verbose) { - ERR_FAIL_COND_V(!file, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!file, ERR_INVALID_PARAMETER, "File must be opened before use."); // write the index diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp index 0ad2479b05..e91dd579b5 100644 --- a/core/io/resource_format_binary.cpp +++ b/core/io/resource_format_binary.cpp @@ -378,10 +378,10 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) { for (uint32_t i = 0; i < len; i++) { Variant key; Error err = parse_variant(key); - ERR_FAIL_COND_V(err, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V_MSG(err, ERR_FILE_CORRUPT, "Error when trying to parse Variant."); Variant value; err = parse_variant(value); - ERR_FAIL_COND_V(err, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V_MSG(err, ERR_FILE_CORRUPT, "Error when trying to parse Variant."); d[key] = value; } r_v = d; @@ -395,7 +395,7 @@ Error ResourceInteractiveLoaderBinary::parse_variant(Variant &r_v) { for (uint32_t i = 0; i < len; i++) { Variant val; Error err = parse_variant(val); - ERR_FAIL_COND_V(err, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V_MSG(err, ERR_FILE_CORRUPT, "Error when trying to parse Variant."); a[i] = val; } r_v = a; @@ -983,7 +983,7 @@ Ref<ResourceInteractiveLoader> ResourceFormatLoaderBinary::load_interactive(cons Error err; FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, Ref<ResourceInteractiveLoader>()); + ERR_FAIL_COND_V_MSG(err != OK, Ref<ResourceInteractiveLoader>(), "Cannot open file '" + p_path + "'."); Ref<ResourceInteractiveLoaderBinary> ria = memnew(ResourceInteractiveLoaderBinary); String path = p_original_path != "" ? p_original_path : p_path; @@ -1032,7 +1032,7 @@ bool ResourceFormatLoaderBinary::handles_type(const String &p_type) const { void ResourceFormatLoaderBinary::get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types) { FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "Cannot open file '" + p_path + "'."); Ref<ResourceInteractiveLoaderBinary> ria = memnew(ResourceInteractiveLoaderBinary); ria->local_path = ProjectSettings::get_singleton()->localize_path(p_path); @@ -1046,7 +1046,7 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons //Error error=OK; FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot open file '" + p_path + "'."); FileAccess *fw = NULL; //=FileAccess::open(p_path+".depren"); @@ -1066,7 +1066,7 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons if (err) { memdelete(fac); memdelete(facw); - ERR_FAIL_COND_V(err, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V_MSG(err, ERR_FILE_CORRUPT, "Cannot create file '" + p_path + ".depren'."); } fw = facw; @@ -1076,13 +1076,13 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons //error=ERR_FILE_UNRECOGNIZED; memdelete(f); - ERR_FAIL_V_MSG(ERR_FILE_UNRECOGNIZED, "Unrecognized binary resource file: " + local_path + "."); + ERR_FAIL_V_MSG(ERR_FILE_UNRECOGNIZED, "Unrecognized binary resource file '" + local_path + "'."); } else { fw = FileAccess::open(p_path + ".depren", FileAccess::WRITE); if (!fw) { memdelete(f); } - ERR_FAIL_COND_V(!fw, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!fw, ERR_CANT_CREATE, "Cannot create file '" + p_path + ".depren'."); uint8_t magic[4] = { 'R', 'S', 'R', 'C' }; fw->store_buffer(magic, 4); @@ -1113,12 +1113,12 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons memdelete(da); //use the old approach - WARN_PRINTS("This file is old, so it can't refactor dependencies, opening and resaving: " + p_path + "."); + WARN_PRINTS("This file is old, so it can't refactor dependencies, opening and resaving '" + p_path + "'."); Error err; f = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, ERR_FILE_CANT_OPEN); + ERR_FAIL_COND_V_MSG(err != OK, ERR_FILE_CANT_OPEN, "Cannot open file '" + p_path + "'."); Ref<ResourceInteractiveLoaderBinary> ria = memnew(ResourceInteractiveLoaderBinary); ria->local_path = ProjectSettings::get_singleton()->localize_path(p_path); @@ -1751,7 +1751,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p f = FileAccess::open(p_path, FileAccess::WRITE, &err); } - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot create file '" + p_path + "'."); relative_paths = p_flags & ResourceSaver::FLAG_RELATIVE_PATHS; skip_editor = p_flags & ResourceSaver::FLAG_OMIT_EDITOR_PROPERTIES; diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp index 9e954890bc..f3eba44973 100644 --- a/core/io/resource_loader.cpp +++ b/core/io/resource_loader.cpp @@ -205,7 +205,7 @@ RES ResourceFormatLoader::load(const String &p_path, const String &p_original_pa if (r_error) *r_error = err; - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Failed to load resource '" + p_path + "'."); } } diff --git a/core/io/resource_saver.cpp b/core/io/resource_saver.cpp index a9ad62afe6..7aa8732366 100644 --- a/core/io/resource_saver.cpp +++ b/core/io/resource_saver.cpp @@ -158,7 +158,7 @@ void ResourceSaver::get_recognized_extensions(const RES &p_resource, List<String void ResourceSaver::add_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver, bool p_at_front) { - ERR_FAIL_COND(p_format_saver.is_null()); + ERR_FAIL_COND_MSG(p_format_saver.is_null(), "It's not a reference to a valid ResourceFormatSaver object."); ERR_FAIL_COND(saver_count >= MAX_SAVERS); if (p_at_front) { @@ -174,7 +174,7 @@ void ResourceSaver::add_resource_format_saver(Ref<ResourceFormatSaver> p_format_ void ResourceSaver::remove_resource_format_saver(Ref<ResourceFormatSaver> p_format_saver) { - ERR_FAIL_COND(p_format_saver.is_null()); + ERR_FAIL_COND_MSG(p_format_saver.is_null(), "It's not a reference to a valid ResourceFormatSaver object."); // Find saver int i = 0; diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp index 84b8554d54..f19e055b64 100644 --- a/core/io/stream_peer.cpp +++ b/core/io/stream_peer.cpp @@ -370,7 +370,7 @@ Variant StreamPeer::get_var(bool p_allow_objects) { Variant ret; err = decode_variant(ret, var.ptr(), len, NULL, p_allow_objects); - ERR_FAIL_COND_V(err != OK, Variant()); + ERR_FAIL_COND_V_MSG(err != OK, Variant(), "Error when trying to decode Variant."); return ret; } diff --git a/core/io/stream_peer_tcp.cpp b/core/io/stream_peer_tcp.cpp index 310bb12bc0..b9c5896b24 100644 --- a/core/io/stream_peer_tcp.cpp +++ b/core/io/stream_peer_tcp.cpp @@ -248,16 +248,7 @@ void StreamPeerTCP::set_no_delay(bool p_enabled) { bool StreamPeerTCP::is_connected_to_host() const { - if (status == STATUS_NONE || status == STATUS_ERROR) { - - return false; - } - - if (status != STATUS_CONNECTED) { - return true; - } - - return _sock.is_valid() && _sock->is_open(); + return _sock.is_valid() && _sock->is_open() && (status == STATUS_CONNECTED || status == STATUS_CONNECTING); } StreamPeerTCP::Status StreamPeerTCP::get_status() { diff --git a/core/io/translation_loader_po.cpp b/core/io/translation_loader_po.cpp index e8e71c10ca..9b6888ac21 100644 --- a/core/io/translation_loader_po.cpp +++ b/core/io/translation_loader_po.cpp @@ -182,7 +182,7 @@ RES TranslationLoaderPO::load(const String &p_path, const String &p_original_pat *r_error = ERR_CANT_OPEN; FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, RES()); + ERR_FAIL_COND_V_MSG(!f, RES(), "Cannot open file '" + p_path + "'."); return load_translation(f, r_error); } diff --git a/core/io/xml_parser.cpp b/core/io/xml_parser.cpp index 9487947365..575c78734f 100644 --- a/core/io/xml_parser.cpp +++ b/core/io/xml_parser.cpp @@ -484,7 +484,7 @@ Error XMLParser::open(const String &p_path) { Error err; FileAccess *file = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot open file '" + p_path + "'."); length = file->get_len(); ERR_FAIL_COND_V(length < 1, ERR_FILE_CORRUPT); diff --git a/core/list.h b/core/list.h index d1b528562d..c46888e01c 100644 --- a/core/list.h +++ b/core/list.h @@ -31,6 +31,7 @@ #ifndef GLOBALS_LIST_H #define GLOBALS_LIST_H +#include "core/error_macros.h" #include "core/os/memory.h" #include "core/sort_array.h" diff --git a/core/map.h b/core/map.h index c87ee42e1b..77e73d70cb 100644 --- a/core/map.h +++ b/core/map.h @@ -31,6 +31,7 @@ #ifndef MAP_H #define MAP_H +#include "core/error_macros.h" #include "core/set.h" // based on the very nice implementation of rb-trees by: diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp index 60b7326c29..810e290922 100644 --- a/core/math/a_star.cpp +++ b/core/math/a_star.cpp @@ -164,23 +164,23 @@ void AStar::connect_points(int p_id, int p_with_id, bool bidirectional) { } Segment s(p_id, p_with_id); - if (s.from == p_id) { - s.from_point = a; - s.to_point = b; - } else { - s.from_point = b; - s.to_point = a; + if (bidirectional) s.direction = Segment::BIDIRECTIONAL; + + Set<Segment>::Element *element = segments.find(s); + if (element != NULL) { + s.direction |= element->get().direction; + if (s.direction == Segment::BIDIRECTIONAL) { + // Both are neighbours of each other now + a->unlinked_neighbours.remove(b->id); + b->unlinked_neighbours.remove(a->id); + } + segments.erase(element); } segments.insert(s); } -void AStar::disconnect_points(int p_id, int p_with_id) { - - Segment s(p_id, p_with_id); - ERR_FAIL_COND(!segments.has(s)); - - segments.erase(s); +void AStar::disconnect_points(int p_id, int p_with_id, bool bidirectional) { Point *a; bool a_exists = points.lookup(p_id, a); @@ -190,10 +190,33 @@ void AStar::disconnect_points(int p_id, int p_with_id) { bool b_exists = points.lookup(p_with_id, b); CRASH_COND(!b_exists); - a->neighbours.remove(b->id); - a->unlinked_neighbours.remove(b->id); - b->neighbours.remove(a->id); - b->unlinked_neighbours.remove(a->id); + Segment s(p_id, p_with_id); + int remove_direction = bidirectional ? (int)Segment::BIDIRECTIONAL : s.direction; + + Set<Segment>::Element *element = segments.find(s); + if (element != NULL) { + // s is the new segment + // Erase the directions to be removed + s.direction = (element->get().direction & ~remove_direction); + + a->neighbours.remove(b->id); + if (bidirectional) { + b->neighbours.remove(a->id); + if (element->get().direction != Segment::BIDIRECTIONAL) { + a->unlinked_neighbours.remove(b->id); + b->unlinked_neighbours.remove(a->id); + } + } else { + if (s.direction == Segment::NONE) + b->unlinked_neighbours.remove(a->id); + else + a->unlinked_neighbours.set(b->id, b); + } + + segments.erase(element); + if (s.direction != Segment::NONE) + segments.insert(s); + } } bool AStar::has_point(int p_id) const { @@ -227,10 +250,13 @@ PoolVector<int> AStar::get_point_connections(int p_id) { return point_list; } -bool AStar::are_points_connected(int p_id, int p_with_id) const { +bool AStar::are_points_connected(int p_id, int p_with_id, bool bidirectional) const { Segment s(p_id, p_with_id); - return segments.has(s); + const Set<Segment>::Element *element = segments.find(s); + + return element != NULL && + (bidirectional || (element->get().direction & s.direction) == s.direction); } void AStar::clear() { @@ -257,14 +283,14 @@ void AStar::reserve_space(int p_num_nodes) { points.reserve(p_num_nodes); } -int AStar::get_closest_point(const Vector3 &p_point) const { +int AStar::get_closest_point(const Vector3 &p_point, bool p_include_disabled) const { int closest_id = -1; real_t closest_dist = 1e20; for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) { - if (!(*it.value)->enabled) continue; // Disabled points should not be considered. + if (!p_include_disabled && !(*it.value)->enabled) continue; // Disabled points should not be considered. real_t d = p_point.distance_squared_to((*it.value)->pos); if (closest_id < 0 || d < closest_dist) { @@ -284,13 +310,17 @@ Vector3 AStar::get_closest_position_in_segment(const Vector3 &p_point) const { for (const Set<Segment>::Element *E = segments.front(); E; E = E->next()) { - if (!(E->get().from_point->enabled && E->get().to_point->enabled)) { + Point *from_point = nullptr, *to_point = nullptr; + points.lookup(E->get().u, from_point); + points.lookup(E->get().v, to_point); + + if (!(from_point->enabled && to_point->enabled)) { continue; } Vector3 segment[2] = { - E->get().from_point->pos, - E->get().to_point->pos, + from_point->pos, + to_point->pos, }; Vector3 p = Geometry::get_closest_point_to_segment(p_point, segment); @@ -532,15 +562,15 @@ void AStar::_bind_methods() { ClassDB::bind_method(D_METHOD("is_point_disabled", "id"), &AStar::is_point_disabled); ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar::connect_points, DEFVAL(true)); - ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id"), &AStar::disconnect_points); - ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id"), &AStar::are_points_connected); + ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id", "bidirectional"), &AStar::disconnect_points, DEFVAL(true)); + ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id", "bidirectional"), &AStar::are_points_connected, DEFVAL(true)); ClassDB::bind_method(D_METHOD("get_point_count"), &AStar::get_point_count); ClassDB::bind_method(D_METHOD("get_point_capacity"), &AStar::get_point_capacity); ClassDB::bind_method(D_METHOD("reserve_space", "num_nodes"), &AStar::reserve_space); ClassDB::bind_method(D_METHOD("clear"), &AStar::clear); - ClassDB::bind_method(D_METHOD("get_closest_point", "to_position"), &AStar::get_closest_point); + ClassDB::bind_method(D_METHOD("get_closest_point", "to_position", "include_disabled"), &AStar::get_closest_point, DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_closest_position_in_segment", "to_position"), &AStar::get_closest_position_in_segment); ClassDB::bind_method(D_METHOD("get_point_path", "from_id", "to_id"), &AStar::get_point_path); @@ -638,8 +668,8 @@ void AStar2D::reserve_space(int p_num_nodes) { astar.reserve_space(p_num_nodes); } -int AStar2D::get_closest_point(const Vector2 &p_point) const { - return astar.get_closest_point(Vector3(p_point.x, p_point.y, 0)); +int AStar2D::get_closest_point(const Vector2 &p_point, bool p_include_disabled) const { + return astar.get_closest_point(Vector3(p_point.x, p_point.y, 0), p_include_disabled); } Vector2 AStar2D::get_closest_position_in_segment(const Vector2 &p_point) const { @@ -693,7 +723,7 @@ void AStar2D::_bind_methods() { ClassDB::bind_method(D_METHOD("reserve_space", "num_nodes"), &AStar2D::reserve_space); ClassDB::bind_method(D_METHOD("clear"), &AStar2D::clear); - ClassDB::bind_method(D_METHOD("get_closest_point", "to_position"), &AStar2D::get_closest_point); + ClassDB::bind_method(D_METHOD("get_closest_point", "to_position", "include_disabled"), &AStar2D::get_closest_point, DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_closest_position_in_segment", "to_position"), &AStar2D::get_closest_position_in_segment); ClassDB::bind_method(D_METHOD("get_point_path", "from_id", "to_id"), &AStar2D::get_point_path); diff --git a/core/math/a_star.h b/core/math/a_star.h index ec2a06f07f..8ff62e646b 100644 --- a/core/math/a_star.h +++ b/core/math/a_star.h @@ -81,24 +81,35 @@ class AStar : public Reference { struct Segment { union { struct { - int32_t from; - int32_t to; + int32_t u; + int32_t v; }; uint64_t key; }; - Point *from_point; - Point *to_point; + enum { + NONE = 0, + FORWARD = 1, + BACKWARD = 2, + BIDIRECTIONAL = FORWARD | BACKWARD + }; + unsigned char direction; bool operator<(const Segment &p_s) const { return key < p_s.key; } - Segment() { key = 0; } + Segment() { + key = 0; + direction = NONE; + } Segment(int p_from, int p_to) { - if (p_from > p_to) { - SWAP(p_from, p_to); + if (p_from < p_to) { + u = p_from; + v = p_to; + direction = FORWARD; + } else { + u = p_to; + v = p_from; + direction = BACKWARD; } - - from = p_from; - to = p_to; } }; @@ -133,15 +144,15 @@ public: bool is_point_disabled(int p_id) const; void connect_points(int p_id, int p_with_id, bool bidirectional = true); - void disconnect_points(int p_id, int p_with_id); - bool are_points_connected(int p_id, int p_with_id) const; + void disconnect_points(int p_id, int p_with_id, bool bidirectional = true); + bool are_points_connected(int p_id, int p_with_id, bool bidirectional = true) const; int get_point_count() const; int get_point_capacity() const; void reserve_space(int p_num_nodes); void clear(); - int get_closest_point(const Vector3 &p_point) const; + int get_closest_point(const Vector3 &p_point, bool p_include_disabled = false) const; Vector3 get_closest_position_in_segment(const Vector3 &p_point) const; PoolVector<Vector3> get_point_path(int p_from_id, int p_to_id); @@ -183,7 +194,7 @@ public: void reserve_space(int p_num_nodes); void clear(); - int get_closest_point(const Vector2 &p_point) const; + int get_closest_point(const Vector2 &p_point, bool p_include_disabled = false) const; Vector2 get_closest_position_in_segment(const Vector2 &p_point) const; PoolVector<Vector2> get_point_path(int p_from_id, int p_to_id); diff --git a/core/math/aabb.cpp b/core/math/aabb.cpp index a4eb1fe2a5..27da061274 100644 --- a/core/math/aabb.cpp +++ b/core/math/aabb.cpp @@ -69,6 +69,11 @@ void AABB::merge_with(const AABB &p_aabb) { size = max - min; } +bool AABB::is_equal_approx(const AABB &p_aabb) const { + + return position.is_equal_approx(p_aabb.position) && size.is_equal_approx(p_aabb.size); +} + AABB AABB::intersection(const AABB &p_aabb) const { Vector3 src_min = position; diff --git a/core/math/aabb.h b/core/math/aabb.h index 52e5ed3626..c3ce33c6f4 100644 --- a/core/math/aabb.h +++ b/core/math/aabb.h @@ -64,6 +64,7 @@ public: bool operator==(const AABB &p_rval) const; bool operator!=(const AABB &p_rval) const; + bool is_equal_approx(const AABB &p_aabb) const; _FORCE_INLINE_ bool intersects(const AABB &p_aabb) const; /// Both AABBs overlap _FORCE_INLINE_ bool intersects_inclusive(const AABB &p_aabb) const; /// Both AABBs (or their faces) overlap _FORCE_INLINE_ bool encloses(const AABB &p_aabb) const; /// p_aabb is completely inside this diff --git a/core/math/basis.cpp b/core/math/basis.cpp index 2985959113..d77501c0f6 100644 --- a/core/math/basis.cpp +++ b/core/math/basis.cpp @@ -106,17 +106,17 @@ Basis Basis::orthonormalized() const { } bool Basis::is_orthogonal() const { - Basis id; + Basis identity; Basis m = (*this) * transposed(); - return is_equal_approx(id, m); + return m.is_equal_approx(identity); } bool Basis::is_diagonal() const { return ( - Math::is_equal_approx(elements[0][1], 0) && Math::is_equal_approx(elements[0][2], 0) && - Math::is_equal_approx(elements[1][0], 0) && Math::is_equal_approx(elements[1][2], 0) && - Math::is_equal_approx(elements[2][0], 0) && Math::is_equal_approx(elements[2][1], 0)); + Math::is_zero_approx(elements[0][1]) && Math::is_zero_approx(elements[0][2]) && + Math::is_zero_approx(elements[1][0]) && Math::is_zero_approx(elements[1][2]) && + Math::is_zero_approx(elements[2][0]) && Math::is_zero_approx(elements[2][1])); } bool Basis::is_rotation() const { @@ -557,16 +557,9 @@ void Basis::set_euler_yxz(const Vector3 &p_euler) { *this = ymat * xmat * zmat; } -bool Basis::is_equal_approx(const Basis &a, const Basis &b, real_t p_epsilon) const { +bool Basis::is_equal_approx(const Basis &p_basis) const { - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (!Math::is_equal_approx(a.elements[i][j], b.elements[i][j], p_epsilon)) - return false; - } - } - - return true; + return elements[0].is_equal_approx(p_basis.elements[0]) && elements[1].is_equal_approx(p_basis.elements[1]) && elements[2].is_equal_approx(p_basis.elements[2]); } bool Basis::is_equal_approx_ratio(const Basis &a, const Basis &b, real_t p_epsilon) const { @@ -807,7 +800,7 @@ void Basis::set_quat(const Quat &p_quat) { void Basis::set_axis_angle(const Vector3 &p_axis, real_t p_phi) { // Rotation matrix from axis and angle, see https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_angle #ifdef MATH_CHECKS - ERR_FAIL_COND(!p_axis.is_normalized()); + ERR_FAIL_COND_MSG(!p_axis.is_normalized(), "Axis must be normalized."); #endif Vector3 axis_sq(p_axis.x * p_axis.x, p_axis.y * p_axis.y, p_axis.z * p_axis.z); real_t cosine = Math::cos(p_phi); diff --git a/core/math/basis.h b/core/math/basis.h index 053effda69..9b2e38b3d3 100644 --- a/core/math/basis.h +++ b/core/math/basis.h @@ -28,13 +28,11 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -// Circular dependency between Vector3 and Basis :/ -#include "core/math/vector3.h" - #ifndef BASIS_H #define BASIS_H #include "core/math/quat.h" +#include "core/math/vector3.h" class Basis { public: @@ -129,7 +127,9 @@ public: return elements[0][2] * v[0] + elements[1][2] * v[1] + elements[2][2] * v[2]; } - bool is_equal_approx(const Basis &a, const Basis &b, real_t p_epsilon = CMP_EPSILON) const; + bool is_equal_approx(const Basis &p_basis) const; + // TODO: Break compatibility in 4.0 by getting rid of this so that it's only an instance method. See also TODO in variant_call.cpp + bool is_equal_approx(const Basis &a, const Basis &b) const { return a.is_equal_approx(b); } bool is_equal_approx_ratio(const Basis &a, const Basis &b, real_t p_epsilon = UNIT_EPSILON) const; bool operator==(const Basis &p_matrix) const; diff --git a/core/math/bsp_tree.cpp b/core/math/bsp_tree.cpp index cfa698282e..ece293d036 100644 --- a/core/math/bsp_tree.cpp +++ b/core/math/bsp_tree.cpp @@ -364,7 +364,7 @@ static int _bsp_create_node(const Face3 *p_faces, const Vector<int> &p_indices, const Face3 &f = p_faces[indices[i]]; /* - if (f.get_plane().is_almost_like(divisor_plane)) + if (f.get_plane().is_equal_approx(divisor_plane)) continue; */ @@ -412,7 +412,7 @@ static int _bsp_create_node(const Face3 *p_faces, const Vector<int> &p_indices, for (int i = 0; i < p_planes.size(); i++) { - if (p_planes[i].is_almost_like(divisor_plane)) { + if (p_planes[i].is_equal_approx(divisor_plane)) { divisor_plane_idx = i; break; } diff --git a/core/math/delaunay.h b/core/math/delaunay.h index 3f8013a3e6..89a34de082 100644 --- a/core/math/delaunay.h +++ b/core/math/delaunay.h @@ -80,11 +80,11 @@ public: } static bool edge_compare(const Vector<Vector2> &p_vertices, const Edge &p_a, const Edge &p_b) { - if (p_vertices[p_a.edge[0]] == p_vertices[p_b.edge[0]] && p_vertices[p_a.edge[1]] == p_vertices[p_b.edge[1]]) { + if (p_vertices[p_a.edge[0]].is_equal_approx(p_vertices[p_b.edge[0]]) && p_vertices[p_a.edge[1]].is_equal_approx(p_vertices[p_b.edge[1]])) { return true; } - if (p_vertices[p_a.edge[0]] == p_vertices[p_b.edge[1]] && p_vertices[p_a.edge[1]] == p_vertices[p_b.edge[0]]) { + if (p_vertices[p_a.edge[0]].is_equal_approx(p_vertices[p_b.edge[1]]) && p_vertices[p_a.edge[1]].is_equal_approx(p_vertices[p_b.edge[0]])) { return true; } diff --git a/core/math/disjoint_set.cpp b/core/math/disjoint_set.cpp new file mode 100644 index 0000000000..c9d47aa0ae --- /dev/null +++ b/core/math/disjoint_set.cpp @@ -0,0 +1,31 @@ +/*************************************************************************/ +/* disjoint_set.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 "disjoint_set.h" diff --git a/core/math/disjoint_set.h b/core/math/disjoint_set.h new file mode 100644 index 0000000000..c9b3d0b65d --- /dev/null +++ b/core/math/disjoint_set.h @@ -0,0 +1,155 @@ +/*************************************************************************/ +/* disjoint_set.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 DISJOINT_SET_H +#define DISJOINT_SET_H + +#include "core/map.h" +#include "core/vector.h" + +/** + @author Marios Staikopoulos <marios@staik.net> +*/ + +/* This DisjointSet class uses Find with path compression and Union by rank */ +template <typename T, class C = Comparator<T>, class AL = DefaultAllocator> +class DisjointSet { + + struct Element { + T object; + Element *parent = nullptr; + int rank = 0; + }; + + typedef Map<T, Element *, C, AL> MapT; + + MapT elements; + + Element *get_parent(Element *element); + + _FORCE_INLINE_ Element *insert_or_get(T object); + +public: + ~DisjointSet(); + + _FORCE_INLINE_ void insert(T object) { (void)insert_or_get(object); } + + void create_union(T a, T b); + + void get_representatives(Vector<T> &out_roots); + + void get_members(Vector<T> &out_members, T representative); +}; + +/* FUNCTIONS */ + +template <typename T, class C, class AL> +DisjointSet<T, C, AL>::~DisjointSet() { + for (typename MapT::Element *itr = elements.front(); itr != nullptr; itr = itr->next()) { + memdelete_allocator<Element, AL>(itr->value()); + } +} + +template <typename T, class C, class AL> +typename DisjointSet<T, C, AL>::Element *DisjointSet<T, C, AL>::get_parent(Element *element) { + if (element->parent != element) { + element->parent = get_parent(element->parent); + } + + return element->parent; +} + +template <typename T, class C, class AL> +typename DisjointSet<T, C, AL>::Element *DisjointSet<T, C, AL>::insert_or_get(T object) { + typename MapT::Element *itr = elements.find(object); + if (itr != nullptr) { + return itr->value(); + } + + Element *new_element = memnew_allocator(Element, AL); + new_element->object = object; + new_element->parent = new_element; + elements.insert(object, new_element); + + return new_element; +} + +template <typename T, class C, class AL> +void DisjointSet<T, C, AL>::create_union(T a, T b) { + + Element *x = insert_or_get(a); + Element *y = insert_or_get(b); + + Element *x_root = get_parent(x); + Element *y_root = get_parent(y); + + // Already in the same set + if (x_root == y_root) + return; + + // Not in the same set, merge + if (x_root->rank < y_root->rank) { + SWAP(x_root, y_root); + } + + // Merge y_root into x_root + y_root->parent = x_root; + if (x_root->rank == y_root->rank) { + ++x_root->rank; + } +} + +template <typename T, class C, class AL> +void DisjointSet<T, C, AL>::get_representatives(Vector<T> &out_representatives) { + for (typename MapT::Element *itr = elements.front(); itr != nullptr; itr = itr->next()) { + Element *element = itr->value(); + if (element->parent == element) { + out_representatives.push_back(element->object); + } + } +} + +template <typename T, class C, class AL> +void DisjointSet<T, C, AL>::get_members(Vector<T> &out_members, T representative) { + typename MapT::Element *rep_itr = elements.find(representative); + ERR_FAIL_COND(rep_itr == nullptr); + + Element *rep_element = rep_itr->value(); + ERR_FAIL_COND(rep_element->parent != rep_element); + + for (typename MapT::Element *itr = elements.front(); itr != nullptr; itr = itr->next()) { + Element *parent = get_parent(itr->value()); + if (parent == rep_element) { + out_members.push_back(itr->key()); + } + } +} + +#endif diff --git a/core/math/geometry.cpp b/core/math/geometry.cpp index f37db90929..e0ead8446f 100644 --- a/core/math/geometry.cpp +++ b/core/math/geometry.cpp @@ -241,10 +241,7 @@ PoolVector<PoolVector<Face3> > Geometry::separate_objects(PoolVector<Face3> p_ar bool error = _connect_faces(_fcptr, len, -1); - if (error) { - - ERR_FAIL_COND_V(error, PoolVector<PoolVector<Face3> >()); // Invalid geometry. - } + ERR_FAIL_COND_V_MSG(error, PoolVector<PoolVector<Face3> >(), "Invalid geometry."); // Group connected faces in separate objects. @@ -715,7 +712,7 @@ Vector<Vector<Vector2> > Geometry::decompose_polygon_in_convex(Vector<Point2> po decomp.write[idx].resize(tp.GetNumPoints()); - for (int i = 0; i < tp.GetNumPoints(); i++) { + for (int64_t i = 0; i < tp.GetNumPoints(); i++) { decomp.write[idx].write[i] = tp.GetPoint(i); } diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp index f04e40cb6c..50fcdb2c13 100644 --- a/core/math/math_funcs.cpp +++ b/core/math/math_funcs.cpp @@ -30,6 +30,8 @@ #include "math_funcs.h" +#include "core/error_macros.h" + RandomPCG Math::default_rand(RandomPCG::DEFAULT_SEED, RandomPCG::DEFAULT_INC); #define PHI 0x9e3779b9 diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h index 9078abea68..a94b27fcc5 100644 --- a/core/math/math_funcs.h +++ b/core/math/math_funcs.h @@ -472,7 +472,7 @@ public: return p_step != 0 ? Math::stepify(p_target - p_offset, p_step) + p_offset : p_target; } - static _ALWAYS_INLINE_ float snap_scalar_seperation(float p_offset, float p_step, float p_target, float p_separation) { + static _ALWAYS_INLINE_ float snap_scalar_separation(float p_offset, float p_step, float p_target, float p_separation) { if (p_step != 0) { float a = Math::stepify(p_target - p_offset, p_step + p_separation) + p_offset; float b = a; diff --git a/core/math/plane.cpp b/core/math/plane.cpp index b01853c4ac..d55957cd0a 100644 --- a/core/math/plane.cpp +++ b/core/math/plane.cpp @@ -32,9 +32,6 @@ #include "core/math/math_funcs.h" -#define _PLANE_EQ_DOT_EPSILON 0.999 -#define _PLANE_EQ_D_EPSILON 0.0001 - void Plane::set_normal(const Vector3 &p_normal) { normal = p_normal; @@ -91,7 +88,7 @@ bool Plane::intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r real_t denom = vec3_cross(normal0, normal1).dot(normal2); - if (ABS(denom) <= CMP_EPSILON) + if (Math::is_zero_approx(denom)) return false; if (r_result) { @@ -156,9 +153,9 @@ bool Plane::intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vec /* misc */ -bool Plane::is_almost_like(const Plane &p_plane) const { +bool Plane::is_equal_approx(const Plane &p_plane) const { - return (normal.dot(p_plane.normal) > _PLANE_EQ_DOT_EPSILON && Math::absd(d - p_plane.d) < _PLANE_EQ_D_EPSILON); + return normal.is_equal_approx(p_plane.normal) && Math::is_equal_approx(d, p_plane.d); } Plane::operator String() const { diff --git a/core/math/plane.h b/core/math/plane.h index ec817edd2c..9abf24fbba 100644 --- a/core/math/plane.h +++ b/core/math/plane.h @@ -68,7 +68,7 @@ public: /* misc */ Plane operator-() const { return Plane(-normal, -d); } - bool is_almost_like(const Plane &p_plane) const; + bool is_equal_approx(const Plane &p_plane) const; _FORCE_INLINE_ bool operator==(const Plane &p_plane) const; _FORCE_INLINE_ bool operator!=(const Plane &p_plane) const; @@ -125,12 +125,12 @@ Plane::Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_ bool Plane::operator==(const Plane &p_plane) const { - return normal == p_plane.normal && Math::is_equal_approx(d, p_plane.d); + return normal == p_plane.normal && d == p_plane.d; } bool Plane::operator!=(const Plane &p_plane) const { - return normal != p_plane.normal || !Math::is_equal_approx(d, p_plane.d); + return normal != p_plane.normal || d != p_plane.d; } #endif // PLANE_H diff --git a/core/math/quat.cpp b/core/math/quat.cpp index 1a67be7384..a4f91844b9 100644 --- a/core/math/quat.cpp +++ b/core/math/quat.cpp @@ -121,6 +121,11 @@ Quat Quat::operator*(const Quat &q) const { return r; } +bool Quat::is_equal_approx(const Quat &p_quat) const { + + return Math::is_equal_approx(x, p_quat.x) && Math::is_equal_approx(y, p_quat.y) && Math::is_equal_approx(z, p_quat.z) && Math::is_equal_approx(w, p_quat.w); +} + real_t Quat::length() const { return Math::sqrt(length_squared()); diff --git a/core/math/quat.h b/core/math/quat.h index 3d6602e466..27885f4152 100644 --- a/core/math/quat.h +++ b/core/math/quat.h @@ -43,6 +43,7 @@ public: real_t x, y, z, w; _FORCE_INLINE_ real_t length_squared() const; + bool is_equal_approx(const Quat &p_quat) const; real_t length() const; void normalize(); Quat normalized() const; diff --git a/core/math/quick_hull.cpp b/core/math/quick_hull.cpp index fc2eb1454d..f71f00afd6 100644 --- a/core/math/quick_hull.cpp +++ b/core/math/quick_hull.cpp @@ -401,7 +401,7 @@ Error QuickHull::build(const Vector<Vector3> &p_points, Geometry::MeshData &r_me ERR_CONTINUE(O == E); ERR_CONTINUE(O == NULL); - if (O->get().plane.is_almost_like(f.plane)) { + if (O->get().plane.is_equal_approx(f.plane)) { //merge and delete edge and contiguous face, while repointing edges (uuugh!) int ois = O->get().indices.size(); int merged = 0; diff --git a/core/math/rect2.cpp b/core/math/rect2.cpp index fea128afbd..e31776672e 100644 --- a/core/math/rect2.cpp +++ b/core/math/rect2.cpp @@ -30,6 +30,11 @@ #include "core/math/transform_2d.h" // Includes rect2.h but Rect2 needs Transform2D +bool Rect2::is_equal_approx(const Rect2 &p_rect) const { + + return position.is_equal_approx(p_rect.position) && size.is_equal_approx(p_rect.size); +} + bool Rect2::intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_pos, Point2 *r_normal) const { real_t min = 0, max = 1; diff --git a/core/math/rect2.h b/core/math/rect2.h index d636aa223f..71221ffb1b 100644 --- a/core/math/rect2.h +++ b/core/math/rect2.h @@ -99,8 +99,8 @@ struct Rect2 { inline bool encloses(const Rect2 &p_rect) const { return (p_rect.position.x >= position.x) && (p_rect.position.y >= position.y) && - ((p_rect.position.x + p_rect.size.x) < (position.x + size.x)) && - ((p_rect.position.y + p_rect.size.y) < (position.y + size.y)); + ((p_rect.position.x + p_rect.size.x) <= (position.x + size.x)) && + ((p_rect.position.y + p_rect.size.y) <= (position.y + size.y)); } _FORCE_INLINE_ bool has_no_area() const { @@ -153,6 +153,7 @@ struct Rect2 { return true; } + bool is_equal_approx(const Rect2 &p_rect) const; bool operator==(const Rect2 &p_rect) const { return position == p_rect.position && size == p_rect.size; } bool operator!=(const Rect2 &p_rect) const { return position != p_rect.position || size != p_rect.size; } diff --git a/core/math/transform.cpp b/core/math/transform.cpp index 4056975da8..5dcc6ab9f0 100644 --- a/core/math/transform.cpp +++ b/core/math/transform.cpp @@ -182,6 +182,11 @@ Transform Transform::orthonormalized() const { return _copy; } +bool Transform::is_equal_approx(const Transform &p_transform) const { + + return basis.is_equal_approx(p_transform.basis) && origin.is_equal_approx(p_transform.origin); +} + bool Transform::operator==(const Transform &p_transform) const { return (basis == p_transform.basis && origin == p_transform.origin); diff --git a/core/math/transform.h b/core/math/transform.h index 90e2b07583..da65a183cf 100644 --- a/core/math/transform.h +++ b/core/math/transform.h @@ -70,6 +70,7 @@ public: void orthonormalize(); Transform orthonormalized() const; + bool is_equal_approx(const Transform &p_transform) const; bool operator==(const Transform &p_transform) const; bool operator!=(const Transform &p_transform) const; diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp index 1d0387bd45..a1c0814637 100644 --- a/core/math/transform_2d.cpp +++ b/core/math/transform_2d.cpp @@ -147,6 +147,7 @@ void Transform2D::orthonormalize() { elements[0] = x; elements[1] = y; } + Transform2D Transform2D::orthonormalized() const { Transform2D on = *this; @@ -154,6 +155,11 @@ Transform2D Transform2D::orthonormalized() const { return on; } +bool Transform2D::is_equal_approx(const Transform2D &p_transform) const { + + return elements[0].is_equal_approx(p_transform.elements[0]) && elements[1].is_equal_approx(p_transform.elements[1]) && elements[2].is_equal_approx(p_transform.elements[2]); +} + bool Transform2D::operator==(const Transform2D &p_transform) const { for (int i = 0; i < 3; i++) { diff --git a/core/math/transform_2d.h b/core/math/transform_2d.h index e8b44ab197..0ec39a1765 100644 --- a/core/math/transform_2d.h +++ b/core/math/transform_2d.h @@ -96,6 +96,7 @@ struct Transform2D { void orthonormalize(); Transform2D orthonormalized() const; + bool is_equal_approx(const Transform2D &p_transform) const; bool operator==(const Transform2D &p_transform) const; bool operator!=(const Transform2D &p_transform) const; diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp index 972bccc0ac..fbedeb8eb2 100644 --- a/core/math/vector2.cpp +++ b/core/math/vector2.cpp @@ -203,6 +203,10 @@ Vector2 Vector2::reflect(const Vector2 &p_normal) const { return 2.0 * p_normal * this->dot(p_normal) - *this; } +bool Vector2::is_equal_approx(const Vector2 &p_v) const { + return Math::is_equal_approx(x, p_v.x) && Math::is_equal_approx(y, p_v.y); +} + /* Vector2i */ Vector2i Vector2i::operator+(const Vector2i &p_v) const { diff --git a/core/math/vector2.h b/core/math/vector2.h index 1a73831891..7fcaadab00 100644 --- a/core/math/vector2.h +++ b/core/math/vector2.h @@ -92,6 +92,8 @@ struct Vector2 { Vector2 bounce(const Vector2 &p_normal) const; Vector2 reflect(const Vector2 &p_normal) const; + bool is_equal_approx(const Vector2 &p_v) const; + Vector2 operator+(const Vector2 &p_v) const; void operator+=(const Vector2 &p_v); Vector2 operator-(const Vector2 &p_v) const; @@ -221,11 +223,11 @@ _FORCE_INLINE_ Vector2 Vector2::operator-() const { _FORCE_INLINE_ bool Vector2::operator==(const Vector2 &p_vec2) const { - return Math::is_equal_approx(x, p_vec2.x) && Math::is_equal_approx(y, p_vec2.y); + return x == p_vec2.x && y == p_vec2.y; } _FORCE_INLINE_ bool Vector2::operator!=(const Vector2 &p_vec2) const { - return !Math::is_equal_approx(x, p_vec2.x) || !Math::is_equal_approx(y, p_vec2.y); + return x != p_vec2.x || y != p_vec2.y; } Vector2 Vector2::linear_interpolate(const Vector2 &p_b, real_t p_t) const { diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp index 73927821cf..e3211c8fb1 100644 --- a/core/math/vector3.cpp +++ b/core/math/vector3.cpp @@ -134,6 +134,26 @@ Vector3 Vector3::move_toward(const Vector3 &p_to, const real_t p_delta) const { return len <= p_delta || len < CMP_EPSILON ? p_to : v + vd / len * p_delta; } +Basis Vector3::outer(const Vector3 &p_b) const { + + Vector3 row0(x * p_b.x, x * p_b.y, x * p_b.z); + Vector3 row1(y * p_b.x, y * p_b.y, y * p_b.z); + Vector3 row2(z * p_b.x, z * p_b.y, z * p_b.z); + + return Basis(row0, row1, row2); +} + +Basis Vector3::to_diagonal_matrix() const { + return Basis(x, 0, 0, + 0, y, 0, + 0, 0, z); +} + +bool Vector3::is_equal_approx(const Vector3 &p_v) const { + + return Math::is_equal_approx(x, p_v.x) && Math::is_equal_approx(y, p_v.y) && Math::is_equal_approx(z, p_v.z); +} + Vector3::operator String() const { return (rtos(x) + ", " + rtos(y) + ", " + rtos(z)); diff --git a/core/math/vector3.h b/core/math/vector3.h index c68b075613..43fa09ffac 100644 --- a/core/math/vector3.h +++ b/core/math/vector3.h @@ -96,8 +96,8 @@ struct Vector3 { _FORCE_INLINE_ Vector3 cross(const Vector3 &p_b) const; _FORCE_INLINE_ real_t dot(const Vector3 &p_b) const; - _FORCE_INLINE_ Basis outer(const Vector3 &p_b) const; - _FORCE_INLINE_ Basis to_diagonal_matrix() const; + Basis outer(const Vector3 &p_b) const; + Basis to_diagonal_matrix() const; _FORCE_INLINE_ Vector3 abs() const; _FORCE_INLINE_ Vector3 floor() const; @@ -119,6 +119,8 @@ struct Vector3 { _FORCE_INLINE_ Vector3 bounce(const Vector3 &p_normal) const; _FORCE_INLINE_ Vector3 reflect(const Vector3 &p_normal) const; + bool is_equal_approx(const Vector3 &p_v) const; + /* Operators */ _FORCE_INLINE_ Vector3 &operator+=(const Vector3 &p_v); @@ -154,9 +156,6 @@ struct Vector3 { _FORCE_INLINE_ Vector3() { x = y = z = 0; } }; -// Should be included after class definition, otherwise we get circular refs -#include "core/math/basis.h" - Vector3 Vector3::cross(const Vector3 &p_b) const { Vector3 ret( @@ -172,21 +171,6 @@ real_t Vector3::dot(const Vector3 &p_b) const { return x * p_b.x + y * p_b.y + z * p_b.z; } -Basis Vector3::outer(const Vector3 &p_b) const { - - Vector3 row0(x * p_b.x, x * p_b.y, x * p_b.z); - Vector3 row1(y * p_b.x, y * p_b.y, y * p_b.z); - Vector3 row2(z * p_b.x, z * p_b.y, z * p_b.z); - - return Basis(row0, row1, row2); -} - -Basis Vector3::to_diagonal_matrix() const { - return Basis(x, 0, 0, - 0, y, 0, - 0, 0, z); -} - Vector3 Vector3::abs() const { return Vector3(Math::abs(x), Math::abs(y), Math::abs(z)); @@ -348,11 +332,12 @@ Vector3 Vector3::operator-() const { bool Vector3::operator==(const Vector3 &p_v) const { - return (Math::is_equal_approx(x, p_v.x) && Math::is_equal_approx(y, p_v.y) && Math::is_equal_approx(z, p_v.z)); + return x == p_v.x && y == p_v.y && z == p_v.z; } bool Vector3::operator!=(const Vector3 &p_v) const { - return (!Math::is_equal_approx(x, p_v.x) || !Math::is_equal_approx(y, p_v.y) || !Math::is_equal_approx(z, p_v.z)); + + return x != p_v.x || y != p_v.y || z != p_v.z; } bool Vector3::operator<(const Vector3 &p_v) const { diff --git a/core/message_queue.cpp b/core/message_queue.cpp index 390989ac91..a76b5167b6 100644 --- a/core/message_queue.cpp +++ b/core/message_queue.cpp @@ -340,7 +340,7 @@ bool MessageQueue::is_flushing() const { MessageQueue::MessageQueue() { - ERR_FAIL_COND(singleton != NULL); + ERR_FAIL_COND_MSG(singleton != NULL, "MessageQueue singleton already exist."); singleton = this; flushing = false; diff --git a/core/node_path.cpp b/core/node_path.cpp index 8244785d84..970ed100fe 100644 --- a/core/node_path.cpp +++ b/core/node_path.cpp @@ -269,7 +269,7 @@ NodePath NodePath::rel_path_to(const NodePath &p_np) const { NodePath NodePath::get_as_property_path() const { - if (!data->path.size()) { + if (!data || !data->path.size()) { return *this; } else { Vector<StringName> new_path = data->subpath; @@ -375,7 +375,7 @@ NodePath::NodePath(const String &p_path) { if (str == "") { if (path[i] == 0) continue; // Allow end-of-path : - ERR_FAIL_MSG("Invalid NodePath: " + p_path + "."); + ERR_FAIL_MSG("Invalid NodePath '" + p_path + "'."); } subpath.push_back(str); diff --git a/core/oa_hash_map.h b/core/oa_hash_map.h index 5ea6d8b0d4..1a466e57f4 100644 --- a/core/oa_hash_map.h +++ b/core/oa_hash_map.h @@ -37,10 +37,11 @@ #include "core/os/memory.h" /** - * A HashMap implementation that uses open addressing with robinhood hashing. - * Robinhood hashing swaps out entries that have a smaller probing distance + * A HashMap implementation that uses open addressing with Robin Hood hashing. + * Robin Hood hashing swaps out entries that have a smaller probing distance * than the to-be-inserted entry, that evens out the average probing distance - * and enables faster lookups. + * and enables faster lookups. Backward shift deletion is employed to further + * improve the performance and to avoid infinite loops in rare cases. * * The entries are stored inplace, so huge keys or values might fill cache lines * a lot faster. @@ -60,25 +61,20 @@ private: uint32_t num_elements; static const uint32_t EMPTY_HASH = 0; - static const uint32_t DELETED_HASH_BIT = 1 << 31; _FORCE_INLINE_ uint32_t _hash(const TKey &p_key) const { uint32_t hash = Hasher::hash(p_key); if (hash == EMPTY_HASH) { hash = EMPTY_HASH + 1; - } else if (hash & DELETED_HASH_BIT) { - hash &= ~DELETED_HASH_BIT; } return hash; } _FORCE_INLINE_ uint32_t _get_probe_length(uint32_t p_pos, uint32_t p_hash) const { - p_hash = p_hash & ~DELETED_HASH_BIT; // we don't care if it was deleted or not - uint32_t original_pos = p_hash % capacity; - return (p_pos - original_pos) % capacity; + return (p_pos - original_pos + capacity) % capacity; } _FORCE_INLINE_ void _construct(uint32_t p_pos, uint32_t p_hash, const TKey &p_key, const TValue &p_value) { @@ -132,14 +128,6 @@ private: // not an empty slot, let's check the probing length of the existing one uint32_t existing_probe_len = _get_probe_length(pos, hashes[pos]); if (existing_probe_len < distance) { - - if (hashes[pos] & DELETED_HASH_BIT) { - // we found a place where we can fit in! - _construct(pos, hash, key, value); - - return; - } - SWAP(hash, hashes[pos]); SWAP(key, keys[pos]); SWAP(value, values[pos]); @@ -173,9 +161,6 @@ private: if (old_hashes[i] == EMPTY_HASH) { continue; } - if (old_hashes[i] & DELETED_HASH_BIT) { - continue; - } _insert_with_hash(old_hashes[i], old_keys[i], old_values[i]); } @@ -205,10 +190,6 @@ public: continue; } - if (hashes[i] & DELETED_HASH_BIT) { - continue; - } - hashes[i] = EMPTY_HASH; values[i].~TValue(); keys[i].~TKey(); @@ -219,7 +200,7 @@ public: void insert(const TKey &p_key, const TValue &p_value) { - if ((float)num_elements / (float)capacity > 0.9) { + if (num_elements + 1 > 0.9 * capacity) { _resize_and_rehash(); } @@ -272,9 +253,20 @@ public: return; } - hashes[pos] |= DELETED_HASH_BIT; + uint32_t next_pos = (pos + 1) % capacity; + while (hashes[next_pos] != EMPTY_HASH && + _get_probe_length(next_pos, hashes[next_pos]) != 0) { + SWAP(hashes[next_pos], hashes[pos]); + SWAP(keys[next_pos], keys[pos]); + SWAP(values[next_pos], values[pos]); + pos = next_pos; + next_pos = (pos + 1) % capacity; + } + + hashes[pos] = EMPTY_HASH; values[pos].~TValue(); keys[pos].~TKey(); + num_elements--; } @@ -326,9 +318,6 @@ public: if (hashes[i] == EMPTY_HASH) { continue; } - if (hashes[i] & DELETED_HASH_BIT) { - continue; - } it.valid = true; it.key = &keys[i]; diff --git a/core/object.cpp b/core/object.cpp index 62bfa31480..ed3ae4f25d 100644 --- a/core/object.cpp +++ b/core/object.cpp @@ -436,7 +436,7 @@ void Object::set(const StringName &p_name, const Variant &p_value, bool *r_valid } else if (p_name == CoreStringNames::get_singleton()->_meta) { //set_meta(p_name,p_value); - metadata = p_value; + metadata = p_value.duplicate(); if (r_valid) *r_valid = true; return; @@ -1100,9 +1100,9 @@ void Object::get_meta_list(List<String> *p_list) const { void Object::add_user_signal(const MethodInfo &p_signal) { - ERR_FAIL_COND(p_signal.name == ""); - ERR_FAIL_COND(ClassDB::has_signal(get_class_name(), p_signal.name)); - ERR_FAIL_COND(signal_map.has(p_signal.name)); + ERR_FAIL_COND_MSG(p_signal.name == "", "Signal name cannot be empty."); + ERR_FAIL_COND_MSG(ClassDB::has_signal(get_class_name(), p_signal.name), "User signal's name conflicts with a built-in signal of '" + get_class_name() + "'."); + ERR_FAIL_COND_MSG(signal_map.has(p_signal.name), "Trying to add already existing signal '" + p_signal.name + "'."); Signal s; s.user = p_signal; signal_map[p_signal.name] = s; diff --git a/core/os/dir_access.cpp b/core/os/dir_access.cpp index b444f0ae1e..e7496055ec 100644 --- a/core/os/dir_access.cpp +++ b/core/os/dir_access.cpp @@ -244,7 +244,7 @@ DirAccess *DirAccess::open(const String &p_path, Error *r_error) { DirAccess *da = create_for_path(p_path); - ERR_FAIL_COND_V(!da, NULL); + ERR_FAIL_COND_V_MSG(!da, NULL, "Cannot create DirAccess for path '" + p_path + "'."); Error err = da->change_dir(p_path); if (r_error) *r_error = err; @@ -384,39 +384,36 @@ Error DirAccess::_copy_dir(DirAccess *p_target_da, String p_to, int p_chmod_flag String target_dir = p_to + rel_path; if (!p_target_da->dir_exists(target_dir)) { Error err = p_target_da->make_dir(target_dir); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot create directory '" + target_dir + "'."); } Error err = change_dir(E->get()); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot change current directory to '" + E->get() + "'."); + err = _copy_dir(p_target_da, p_to + rel_path + "/", p_chmod_flags); if (err) { change_dir(".."); - ERR_PRINT("Failed to copy recursively"); - return err; + ERR_FAIL_V_MSG(err, "Failed to copy recursively."); } err = change_dir(".."); - if (err) { - ERR_PRINT("Failed to go back"); - return err; - } + ERR_FAIL_COND_V_MSG(err != OK, err, "Failed to go back."); } return OK; } Error DirAccess::copy_dir(String p_from, String p_to, int p_chmod_flags) { - ERR_FAIL_COND_V(!dir_exists(p_from), ERR_FILE_NOT_FOUND); + ERR_FAIL_COND_V_MSG(!dir_exists(p_from), ERR_FILE_NOT_FOUND, "Source directory doesn't exist."); DirAccess *target_da = DirAccess::create_for_path(p_to); - ERR_FAIL_COND_V(!target_da, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!target_da, ERR_CANT_CREATE, "Cannot create DirAccess for path '" + p_to + "'."); if (!target_da->dir_exists(p_to)) { Error err = target_da->make_dir_recursive(p_to); if (err) { memdelete(target_da); } - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot create directory '" + p_to + "'."); } if (!p_to.ends_with("/")) { diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp index 9a8315a3bb..738e597730 100644 --- a/core/os/file_access.cpp +++ b/core/os/file_access.cpp @@ -498,7 +498,7 @@ uint64_t FileAccess::get_modified_time(const String &p_file) { return 0; FileAccess *fa = create_for_path(p_file); - ERR_FAIL_COND_V(!fa, 0); + ERR_FAIL_COND_V_MSG(!fa, 0, "Cannot create FileAccess for path '" + p_file + "'."); uint64_t mt = fa->_get_modified_time(p_file); memdelete(fa); @@ -511,7 +511,7 @@ uint32_t FileAccess::get_unix_permissions(const String &p_file) { return 0; FileAccess *fa = create_for_path(p_file); - ERR_FAIL_COND_V(!fa, 0); + ERR_FAIL_COND_V_MSG(!fa, 0, "Cannot create FileAccess for path '" + p_file + "'."); uint32_t mt = fa->_get_unix_permissions(p_file); memdelete(fa); @@ -521,7 +521,7 @@ uint32_t FileAccess::get_unix_permissions(const String &p_file) { Error FileAccess::set_unix_permissions(const String &p_file, uint32_t p_permissions) { FileAccess *fa = create_for_path(p_file); - ERR_FAIL_COND_V(!fa, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!fa, ERR_CANT_CREATE, "Cannot create FileAccess for path '" + p_file + "'."); Error err = fa->_set_unix_permissions(p_file, p_permissions); memdelete(fa); @@ -599,7 +599,7 @@ Vector<uint8_t> FileAccess::get_file_as_array(const String &p_path, Error *r_err if (r_error) { // if error requested, do not throw error return Vector<uint8_t>(); } - ERR_FAIL_V_MSG(Vector<uint8_t>(), "Can't open file from path: " + String(p_path) + "."); + ERR_FAIL_V_MSG(Vector<uint8_t>(), "Can't open file from path '" + String(p_path) + "'."); } Vector<uint8_t> data; data.resize(f->get_len()); @@ -619,7 +619,7 @@ String FileAccess::get_file_as_string(const String &p_path, Error *r_error) { if (r_error) { return String(); } - ERR_FAIL_V_MSG(String(), "Can't get file as string from path: " + String(p_path) + "."); + ERR_FAIL_V_MSG(String(), "Can't get file as string from path '" + String(p_path) + "'."); } String ret; diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp index 30fca0c155..381ba9d010 100644 --- a/core/os/input_event.cpp +++ b/core/os/input_event.cpp @@ -557,10 +557,31 @@ InputEventMouseButton::InputEventMouseButton() { //////////////////////////////////////////// +void InputEventMouseMotion::set_tilt(const Vector2 &p_tilt) { + + tilt = p_tilt; +} + +Vector2 InputEventMouseMotion::get_tilt() const { + + return tilt; +} + +void InputEventMouseMotion::set_pressure(float p_pressure) { + + pressure = p_pressure; +} + +float InputEventMouseMotion::get_pressure() const { + + return pressure; +} + void InputEventMouseMotion::set_relative(const Vector2 &p_relative) { relative = p_relative; } + Vector2 InputEventMouseMotion::get_relative() const { return relative; @@ -570,6 +591,7 @@ void InputEventMouseMotion::set_speed(const Vector2 &p_speed) { speed = p_speed; } + Vector2 InputEventMouseMotion::get_speed() const { return speed; @@ -590,6 +612,8 @@ Ref<InputEvent> InputEventMouseMotion::xformed_by(const Transform2D &p_xform, co mm->set_modifiers_from_event(this); mm->set_position(l); + mm->set_pressure(get_pressure()); + mm->set_tilt(get_tilt()); mm->set_global_position(g); mm->set_button_mask(get_button_mask()); @@ -665,17 +689,27 @@ bool InputEventMouseMotion::accumulate(const Ref<InputEvent> &p_event) { void InputEventMouseMotion::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_tilt", "tilt"), &InputEventMouseMotion::set_tilt); + ClassDB::bind_method(D_METHOD("get_tilt"), &InputEventMouseMotion::get_tilt); + + ClassDB::bind_method(D_METHOD("set_pressure", "pressure"), &InputEventMouseMotion::set_pressure); + ClassDB::bind_method(D_METHOD("get_pressure"), &InputEventMouseMotion::get_pressure); + ClassDB::bind_method(D_METHOD("set_relative", "relative"), &InputEventMouseMotion::set_relative); ClassDB::bind_method(D_METHOD("get_relative"), &InputEventMouseMotion::get_relative); ClassDB::bind_method(D_METHOD("set_speed", "speed"), &InputEventMouseMotion::set_speed); ClassDB::bind_method(D_METHOD("get_speed"), &InputEventMouseMotion::get_speed); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "tilt"), "set_tilt", "get_tilt"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "pressure"), "set_pressure", "get_pressure"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "relative"), "set_relative", "get_relative"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "speed"), "set_speed", "get_speed"); } InputEventMouseMotion::InputEventMouseMotion() { + + pressure = 0; } //////////////////////////////////////// diff --git a/core/os/input_event.h b/core/os/input_event.h index 28658e3865..14649502ee 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -351,6 +351,9 @@ public: class InputEventMouseMotion : public InputEventMouse { GDCLASS(InputEventMouseMotion, InputEventMouse); + + Vector2 tilt; + float pressure; Vector2 relative; Vector2 speed; @@ -358,6 +361,12 @@ protected: static void _bind_methods(); public: + void set_tilt(const Vector2 &p_tilt); + Vector2 get_tilt() const; + + void set_pressure(float p_pressure); + float get_pressure() const; + void set_relative(const Vector2 &p_relative); Vector2 get_relative() const; diff --git a/core/os/main_loop.cpp b/core/os/main_loop.cpp index eca3b2a7f4..146a301995 100644 --- a/core/os/main_loop.cpp +++ b/core/os/main_loop.cpp @@ -63,6 +63,10 @@ void MainLoop::_bind_methods() { BIND_CONSTANT(NOTIFICATION_WM_ABOUT); BIND_CONSTANT(NOTIFICATION_CRASH); BIND_CONSTANT(NOTIFICATION_OS_IME_UPDATE); + BIND_CONSTANT(NOTIFICATION_APP_RESUMED); + BIND_CONSTANT(NOTIFICATION_APP_PAUSED); + + ADD_SIGNAL(MethodInfo("on_request_permissions_result", PropertyInfo(Variant::STRING, "permission"), PropertyInfo(Variant::BOOL, "granted"))); }; void MainLoop::set_init_script(const Ref<Script> &p_init_script) { diff --git a/core/os/main_loop.h b/core/os/main_loop.h index 54e61fd2fa..aca920efcb 100644 --- a/core/os/main_loop.h +++ b/core/os/main_loop.h @@ -60,6 +60,8 @@ public: NOTIFICATION_WM_ABOUT = 1011, NOTIFICATION_CRASH = 1012, NOTIFICATION_OS_IME_UPDATE = 1013, + NOTIFICATION_APP_RESUMED = 1014, + NOTIFICATION_APP_PAUSED = 1015, }; virtual void input_event(const Ref<InputEvent> &p_event); diff --git a/core/os/memory.h b/core/os/memory.h index 8778cb63ad..a68a359546 100644 --- a/core/os/memory.h +++ b/core/os/memory.h @@ -31,6 +31,7 @@ #ifndef MEMORY_H #define MEMORY_H +#include "core/error_macros.h" #include "core/safe_refcount.h" #include <stddef.h> diff --git a/core/os/os.cpp b/core/os/os.cpp index 7531900480..b44487b908 100644 --- a/core/os/os.cpp +++ b/core/os/os.cpp @@ -722,7 +722,7 @@ int OS::get_audio_driver_count() const { const char *OS::get_audio_driver_name(int p_driver) const { AudioDriver *driver = AudioDriverManager::get_driver(p_driver); - ERR_FAIL_COND_V(!driver, ""); + ERR_FAIL_COND_V_MSG(!driver, "", "Cannot get audio driver at index '" + itos(p_driver) + "'."); return AudioDriverManager::get_driver(p_driver)->get_name(); } diff --git a/core/os/os.h b/core/os/os.h index 9b46b43081..b5224c4f63 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -530,6 +530,8 @@ public: List<String> get_restart_on_exit_arguments() const; virtual bool request_permission(const String &p_name) { return true; } + virtual bool request_permissions() { return true; } + virtual Vector<String> get_granted_permissions() const { return Vector<String>(); } virtual void process_and_drop_events() {} OS(); diff --git a/core/packed_data_container.cpp b/core/packed_data_container.cpp index 54bf12b314..7afaf7f0f1 100644 --- a/core/packed_data_container.cpp +++ b/core/packed_data_container.cpp @@ -119,7 +119,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b if (rerr != OK) { err = true; - ERR_FAIL_COND_V(err != OK, Variant()); + ERR_FAIL_COND_V_MSG(err != OK, Variant(), "Error when trying to decode Variant."); } return v; } @@ -137,6 +137,7 @@ uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const { int PackedDataContainer::_size(uint32_t p_ofs) const { PoolVector<uint8_t>::Read rd = data.read(); + ERR_FAIL_COND_V(!rd.ptr(), 0); const uint8_t *r = &rd[p_ofs]; uint32_t type = decode_uint32(r); diff --git a/core/pool_vector.h b/core/pool_vector.h index 957a72483c..a698e72e18 100644 --- a/core/pool_vector.h +++ b/core/pool_vector.h @@ -385,6 +385,7 @@ public: } inline int size() const; + inline bool empty() const; T get(int p_index) const; void set(int p_index, const T &p_val); void push_back(const T &p_val); @@ -475,6 +476,12 @@ int PoolVector<T>::size() const { } template <class T> +bool PoolVector<T>::empty() const { + + return alloc ? alloc->size == 0 : true; +} + +template <class T> T PoolVector<T>::get(int p_index) const { return operator[](p_index); @@ -508,7 +515,7 @@ T PoolVector<T>::operator[](int p_index) const { template <class T> Error PoolVector<T>::resize(int p_size) { - ERR_FAIL_COND_V(p_size < 0, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(p_size < 0, ERR_INVALID_PARAMETER, "Size of PoolVector cannot be negative."); if (alloc == NULL) { @@ -536,7 +543,7 @@ Error PoolVector<T>::resize(int p_size) { } else { - ERR_FAIL_COND_V(alloc->lock > 0, ERR_LOCKED); //can't resize if locked! + ERR_FAIL_COND_V_MSG(alloc->lock > 0, ERR_LOCKED, "Can't resize PoolVector if locked."); //can't resize if locked! } size_t new_size = sizeof(T) * p_size; diff --git a/core/project_settings.cpp b/core/project_settings.cpp index ec2c5ecbb3..7704c7b377 100644 --- a/core/project_settings.cpp +++ b/core/project_settings.cpp @@ -107,18 +107,18 @@ String ProjectSettings::localize_path(const String &p_path) const { if (plocal == "") { return ""; }; - return plocal + path.substr(sep, path.size() - sep); + return plocal + path.substr((sep + 1), path.size() - (sep + 1)); }; } void ProjectSettings::set_initial_value(const String &p_name, const Variant &p_value) { - ERR_FAIL_COND(!props.has(p_name)); + ERR_FAIL_COND_MSG(!props.has(p_name), "Request for nonexistent project setting: " + p_name + "."); props[p_name].initial = p_value; } void ProjectSettings::set_restart_if_changed(const String &p_name, bool p_restart) { - ERR_FAIL_COND(!props.has(p_name)); + ERR_FAIL_COND_MSG(!props.has(p_name), "Request for nonexistent project setting: " + p_name + "."); props[p_name].restart_if_changed = p_restart; } @@ -264,12 +264,12 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const { } } -bool ProjectSettings::_load_resource_pack(const String &p_pack) { +bool ProjectSettings::_load_resource_pack(const String &p_pack, bool p_replace_files) { if (PackedData::get_singleton()->is_disabled()) return false; - bool ok = PackedData::get_singleton()->add_pack(p_pack) == OK; + bool ok = PackedData::get_singleton()->add_pack(p_pack, p_replace_files) == OK; if (!ok) return false; @@ -336,7 +336,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b if (p_main_pack != "") { bool ok = _load_resource_pack(p_main_pack); - ERR_FAIL_COND_V(!ok, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!ok, ERR_CANT_OPEN, "Cannot open resource pack '" + p_main_pack + "'."); Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary"); if (err == OK) { @@ -421,7 +421,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b // or, if requested (`p_upwards`) in parent directories. DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - ERR_FAIL_COND_V(!d, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!d, ERR_CANT_CREATE, "Cannot create DirAccess for path '" + p_path + "'."); d->change_dir(p_path); String current_dir = d->get_current_dir(); @@ -609,19 +609,19 @@ Error ProjectSettings::_load_settings_text_or_binary(const String &p_text_path, int ProjectSettings::get_order(const String &p_name) const { - ERR_FAIL_COND_V(!props.has(p_name), -1); + ERR_FAIL_COND_V_MSG(!props.has(p_name), -1, "Request for nonexistent project setting: " + p_name + "."); return props[p_name].order; } void ProjectSettings::set_order(const String &p_name, int p_order) { - ERR_FAIL_COND(!props.has(p_name)); + ERR_FAIL_COND_MSG(!props.has(p_name), "Request for nonexistent project setting: " + p_name + "."); props[p_name].order = p_order; } void ProjectSettings::set_builtin_order(const String &p_name) { - ERR_FAIL_COND(!props.has(p_name)); + ERR_FAIL_COND_MSG(!props.has(p_name), "Request for nonexistent project setting: " + p_name + "."); if (props[p_name].order >= NO_BUILTIN_ORDER_BASE) { props[p_name].order = last_builtin_order++; } @@ -629,7 +629,7 @@ void ProjectSettings::set_builtin_order(const String &p_name) { void ProjectSettings::clear(const String &p_name) { - ERR_FAIL_COND(!props.has(p_name)); + ERR_FAIL_COND_MSG(!props.has(p_name), "Request for nonexistent project setting: " + p_name + "."); props.erase(p_name); } @@ -706,7 +706,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str err = encode_variant(value, NULL, len, true); if (err != OK) memdelete(file); - ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA); + ERR_FAIL_COND_V_MSG(err != OK, ERR_INVALID_DATA, "Error when trying to encode Variant."); Vector<uint8_t> buff; buff.resize(len); @@ -714,7 +714,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str err = encode_variant(value, buff.ptrw(), len, true); if (err != OK) memdelete(file); - ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA); + ERR_FAIL_COND_V_MSG(err != OK, ERR_INVALID_DATA, "Error when trying to encode Variant."); file->store_32(len); file->store_buffer(buff.ptr(), buff.size()); } @@ -787,7 +787,7 @@ Error ProjectSettings::_save_custom_bnd(const String &p_file) { // add other par Error ProjectSettings::save_custom(const String &p_path, const CustomMap &p_custom, const Vector<String> &p_custom_features, bool p_merge_with_current) { - ERR_FAIL_COND_V(p_path == "", ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(p_path == "", ERR_INVALID_PARAMETER, "Project settings save path cannot be empty."); Set<_VCSort> vclist; @@ -979,7 +979,7 @@ void ProjectSettings::_bind_methods() { ClassDB::bind_method(D_METHOD("localize_path", "path"), &ProjectSettings::localize_path); ClassDB::bind_method(D_METHOD("globalize_path", "path"), &ProjectSettings::globalize_path); ClassDB::bind_method(D_METHOD("save"), &ProjectSettings::save); - ClassDB::bind_method(D_METHOD("load_resource_pack", "pack"), &ProjectSettings::_load_resource_pack); + ClassDB::bind_method(D_METHOD("load_resource_pack", "pack", "replace_files"), &ProjectSettings::_load_resource_pack, DEFVAL(true)); ClassDB::bind_method(D_METHOD("property_can_revert", "name"), &ProjectSettings::property_can_revert); ClassDB::bind_method(D_METHOD("property_get_revert", "name"), &ProjectSettings::property_get_revert); diff --git a/core/project_settings.h b/core/project_settings.h index a8deab028c..b32470361b 100644 --- a/core/project_settings.h +++ b/core/project_settings.h @@ -104,7 +104,7 @@ protected: void _convert_to_last_version(int p_from_version); - bool _load_resource_pack(const String &p_pack); + bool _load_resource_pack(const String &p_pack, bool p_replace_files = true); void _add_property_info_bind(const Dictionary &p_info); diff --git a/core/ref_ptr.cpp b/core/ref_ptr.cpp index 961f143e5c..6da73ca41a 100644 --- a/core/ref_ptr.cpp +++ b/core/ref_ptr.cpp @@ -49,6 +49,14 @@ bool RefPtr::operator==(const RefPtr &p_other) const { return *ref == *ref_other; } +bool RefPtr::operator!=(const RefPtr &p_other) const { + + Ref<Reference> *ref = reinterpret_cast<Ref<Reference> *>(&data[0]); + Ref<Reference> *ref_other = reinterpret_cast<Ref<Reference> *>(const_cast<char *>(&p_other.data[0])); + + return *ref != *ref_other; +} + RefPtr::RefPtr(const RefPtr &p_other) { memnew_placement(&data[0], Ref<Reference>); diff --git a/core/ref_ptr.h b/core/ref_ptr.h index f745ababa1..320cf35609 100644 --- a/core/ref_ptr.h +++ b/core/ref_ptr.h @@ -50,6 +50,7 @@ public: bool is_null() const; void operator=(const RefPtr &p_other); bool operator==(const RefPtr &p_other) const; + bool operator!=(const RefPtr &p_other) const; RID get_rid() const; void unref(); _FORCE_INLINE_ void *get_data() const { return data; } diff --git a/core/reference.cpp b/core/reference.cpp index 1984af9a34..92bbdacd5d 100644 --- a/core/reference.cpp +++ b/core/reference.cpp @@ -36,12 +36,7 @@ bool Reference::init_ref() { if (reference()) { - // this may fail in the scenario of two threads assigning the pointer for the FIRST TIME - // at the same time, which is never likely to happen (would be crazy to do) - // so don't do it. - - if (refcount_init.get() > 0) { - refcount_init.unref(); + if (!is_referenced() && refcount_init.unref()) { unreference(); // first referencing is already 1, so compensate for the ref above } @@ -64,9 +59,11 @@ int Reference::reference_get_count() const { } bool Reference::reference() { - bool success = refcount.ref(); - if (success && refcount.get() <= 2 /* higher is not relevant */) { + uint32_t rc_val = refcount.refval(); + bool success = rc_val != 0; + + if (success && rc_val <= 2 /* higher is not relevant */) { if (get_script_instance()) { get_script_instance()->refcount_incremented(); } @@ -84,9 +81,10 @@ bool Reference::reference() { bool Reference::unreference() { - bool die = refcount.unref(); + uint32_t rc_val = refcount.unrefval(); + bool die = rc_val == 0; - if (refcount.get() <= 1 /* higher is not relevant */) { + if (rc_val <= 1 /* higher is not relevant */) { if (get_script_instance()) { bool script_ret = get_script_instance()->refcount_decremented(); die = die && script_ret; diff --git a/core/reference.h b/core/reference.h index 20ee22ddfc..b8d00a94ad 100644 --- a/core/reference.h +++ b/core/reference.h @@ -47,7 +47,7 @@ protected: static void _bind_methods(); public: - _FORCE_INLINE_ bool is_referenced() const { return refcount_init.get() < 1; } + _FORCE_INLINE_ bool is_referenced() const { return refcount_init.get() != 1; } bool init_ref(); bool reference(); // returns false if refcount is at zero and didn't get increased bool unreference(); diff --git a/core/resource.cpp b/core/resource.cpp index 5a5efa4644..e0a40b6f3c 100644 --- a/core/resource.cpp +++ b/core/resource.cpp @@ -75,7 +75,7 @@ void Resource::set_path(const String &p_path, bool p_take_over) { bool exists = ResourceCache::resources.has(p_path); ResourceCache::lock->read_unlock(); - ERR_FAIL_COND_MSG(exists, "Another resource is loaded from path: " + p_path + " (possible cyclic resource inclusion)."); + ERR_FAIL_COND_MSG(exists, "Another resource is loaded from path '" + p_path + "' (possible cyclic resource inclusion)."); } } path_cache = p_path; @@ -365,17 +365,38 @@ bool Resource::is_translation_remapped() const { //helps keep IDs same number when loading/saving scenes. -1 clears ID and it Returns -1 when no id stored void Resource::set_id_for_path(const String &p_path, int p_id) { if (p_id == -1) { - id_for_path.erase(p_path); + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->write_lock(); + } + ResourceCache::resource_path_cache[p_path].erase(get_path()); + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->write_unlock(); + } } else { - id_for_path[p_path] = p_id; + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->write_lock(); + } + ResourceCache::resource_path_cache[p_path][get_path()] = p_id; + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->write_unlock(); + } } } int Resource::get_id_for_path(const String &p_path) const { - - if (id_for_path.has(p_path)) { - return id_for_path[p_path]; + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->read_lock(); + } + if (ResourceCache::resource_path_cache[p_path].has(get_path())) { + int result = ResourceCache::resource_path_cache[p_path][get_path()]; + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->read_unlock(); + } + return result; } else { + if (ResourceCache::path_cache_lock) { + ResourceCache::path_cache_lock->read_unlock(); + } return -1; } } @@ -430,12 +451,21 @@ Resource::~Resource() { } HashMap<String, Resource *> ResourceCache::resources; +#ifdef TOOLS_ENABLED +HashMap<String, HashMap<String, int> > ResourceCache::resource_path_cache; +#endif RWLock *ResourceCache::lock = NULL; +#ifdef TOOLS_ENABLED +RWLock *ResourceCache::path_cache_lock = NULL; +#endif void ResourceCache::setup() { lock = RWLock::create(); +#ifdef TOOLS_ENABLED + path_cache_lock = RWLock::create(); +#endif } void ResourceCache::clear() { @@ -509,7 +539,7 @@ void ResourceCache::dump(const char *p_file, bool p_short) { FileAccess *f = NULL; if (p_file) { f = FileAccess::open(p_file, FileAccess::WRITE); - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "Cannot create file at path '" + String(p_file) + "'."); } const String *K = NULL; diff --git a/core/resource.h b/core/resource.h index 038b4f6278..3e1fe07137 100644 --- a/core/resource.h +++ b/core/resource.h @@ -84,9 +84,7 @@ protected: void _set_path(const String &p_path); void _take_over_path(const String &p_path); -#ifdef TOOLS_ENABLED - Map<String, int> id_for_path; -#endif + public: static Node *(*_get_local_scene_func)(); //used by editor @@ -152,6 +150,10 @@ class ResourceCache { friend class ResourceLoader; //need the lock static RWLock *lock; static HashMap<String, Resource *> resources; +#ifdef TOOLS_ENABLED + static HashMap<String, HashMap<String, int> > resource_path_cache; // each tscn has a set of resource paths and IDs + static RWLock *path_cache_lock; +#endif // TOOLS_ENABLED friend void unregister_core_types(); static void clear(); friend void register_core_types(); diff --git a/core/safe_refcount.h b/core/safe_refcount.h index 54f540b0c7..47161eed57 100644 --- a/core/safe_refcount.h +++ b/core/safe_refcount.h @@ -177,12 +177,12 @@ struct SafeRefCount { public: // destroy() is called when weak_count_ drops to zero. - _ALWAYS_INLINE_ bool ref() { //true on success + _ALWAYS_INLINE_ bool ref() { // true on success return atomic_conditional_increment(&count) != 0; } - _ALWAYS_INLINE_ uint32_t refval() { //true on success + _ALWAYS_INLINE_ uint32_t refval() { // none-zero on success return atomic_conditional_increment(&count); } @@ -192,6 +192,11 @@ public: return atomic_decrement(&count) == 0; } + _ALWAYS_INLINE_ uint32_t unrefval() { // 0 if must be disposed of + + return atomic_decrement(&count); + } + _ALWAYS_INLINE_ uint32_t get() const { // nothrow return count; diff --git a/core/script_language.cpp b/core/script_language.cpp index ee8589d76a..cbe4681eca 100644 --- a/core/script_language.cpp +++ b/core/script_language.cpp @@ -114,7 +114,7 @@ void Script::_bind_methods() { ClassDB::bind_method(D_METHOD("get_script_method_list"), &Script::_get_script_method_list); ClassDB::bind_method(D_METHOD("get_script_signal_list"), &Script::_get_script_signal_list); ClassDB::bind_method(D_METHOD("get_script_constant_map"), &Script::_get_script_constant_map); - ClassDB::bind_method(D_METHOD("get_property_default_value"), &Script::_get_property_default_value); + ClassDB::bind_method(D_METHOD("get_property_default_value", "property"), &Script::_get_property_default_value); ClassDB::bind_method(D_METHOD("is_tool"), &Script::is_tool); @@ -218,6 +218,7 @@ void ScriptServer::global_classes_clear() { } void ScriptServer::add_global_class(const StringName &p_class, const StringName &p_base, const StringName &p_language, const String &p_path) { + ERR_FAIL_COND_MSG(p_class == p_base || (global_classes.has(p_base) && get_global_class_native_base(p_base) == p_class), "Cyclic inheritance in script class."); GlobalScriptClass g; g.language = p_language; g.path = p_path; diff --git a/core/self_list.h b/core/self_list.h index 314d440977..07abcd1d53 100644 --- a/core/self_list.h +++ b/core/self_list.h @@ -31,6 +31,7 @@ #ifndef SELF_LIST_H #define SELF_LIST_H +#include "core/error_macros.h" #include "core/typedefs.h" template <class T> diff --git a/core/sort_array.h b/core/sort_array.h index 8660ee3333..d330e0c647 100644 --- a/core/sort_array.h +++ b/core/sort_array.h @@ -31,6 +31,7 @@ #ifndef SORT_ARRAY_H #define SORT_ARRAY_H +#include "core/error_macros.h" #include "core/typedefs.h" #define ERR_BAD_COMPARE(cond) \ diff --git a/core/string_builder.cpp b/core/string_builder.cpp index 35526e0d70..22eed70f8b 100644 --- a/core/string_builder.cpp +++ b/core/string_builder.cpp @@ -34,6 +34,9 @@ StringBuilder &StringBuilder::append(const String &p_string) { + if (p_string == String()) + return *this; + strings.push_back(p_string); appended_strings.push_back(-1); diff --git a/core/translation.cpp b/core/translation.cpp index a0902d71fc..4a1ac26433 100644 --- a/core/translation.cpp +++ b/core/translation.cpp @@ -986,6 +986,7 @@ Array TranslationServer::get_loaded_locales() const { for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) { const Ref<Translation> &t = E->get(); + ERR_FAIL_COND_V(t.is_null(), Array()); String l = t->get_locale(); locales.push_back(l); @@ -1057,6 +1058,7 @@ StringName TranslationServer::translate(const StringName &p_message) const { for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) { const Ref<Translation> &t = E->get(); + ERR_FAIL_COND_V(t.is_null(), StringName("")); String l = t->get_locale(); if (lptr[0] != l[0] || lptr[1] != l[1]) continue; // Language code does not match. @@ -1085,6 +1087,7 @@ StringName TranslationServer::translate(const StringName &p_message) const { for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) { const Ref<Translation> &t = E->get(); + ERR_FAIL_COND_V(t.is_null(), StringName("")); String l = t->get_locale(); if (fptr[0] != l[0] || fptr[1] != l[1]) continue; // Language code does not match. diff --git a/core/typedefs.h b/core/typedefs.h index 660139b90a..767a97ac38 100644 --- a/core/typedefs.h +++ b/core/typedefs.h @@ -108,7 +108,6 @@ T *_nullptr() { #include "core/int_types.h" #include "core/error_list.h" -#include "core/error_macros.h" /** Generic ABS function, for math uses please use Math::abs */ diff --git a/core/ustring.cpp b/core/ustring.cpp index fb4bd6d802..7ee2fee312 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -2147,13 +2147,13 @@ int64_t String::to_int(const CharType *p_str, int p_len) { if (c >= '0' && c <= '9') { - if (integer > INT32_MAX / 10) { + if (integer > INT64_MAX / 10) { String number(""); str = p_str; while (*str && str != limit) { number += *(str++); } - ERR_FAIL_V_MSG(sign == 1 ? INT32_MAX : INT32_MIN, "Cannot represent " + number + " as integer, provided value is " + (sign == 1 ? "too big." : "too small.")); + ERR_FAIL_V_MSG(sign == 1 ? INT64_MAX : INT64_MIN, "Cannot represent " + number + " as integer, provided value is " + (sign == 1 ? "too big." : "too small.")); } integer *= 10; integer += c - '0'; @@ -3049,6 +3049,22 @@ String String::replacen(const String &p_key, const String &p_with) const { return new_string; } +String String::repeat(int p_count) const { + + ERR_FAIL_COND_V_MSG(p_count < 0, "", "Parameter count should be a positive number."); + + String new_string; + const CharType *src = this->c_str(); + + new_string.resize(length() * p_count + 1); + + for (int i = 0; i < p_count; i++) + for (int j = 0; j < length(); j++) + new_string[i * length() + j] = src[j]; + + return new_string; +} + String String::left(int p_pos) const { if (p_pos <= 0) @@ -3272,9 +3288,7 @@ String String::simplify_path() const { static int _humanize_digits(int p_num) { - if (p_num < 10) - return 2; - else if (p_num < 100) + if (p_num < 100) return 2; else if (p_num < 1024) return 1; @@ -3282,21 +3296,29 @@ static int _humanize_digits(int p_num) { return 0; } -String String::humanize_size(size_t p_size) { +String String::humanize_size(uint64_t p_size) { uint64_t _div = 1; - static const char *prefix[] = { " B", " KiB", " MiB", " GiB", " TiB", " PiB", " EiB", "" }; + Vector<String> prefixes; + prefixes.push_back(RTR("B")); + prefixes.push_back(RTR("KiB")); + prefixes.push_back(RTR("MiB")); + prefixes.push_back(RTR("GiB")); + prefixes.push_back(RTR("TiB")); + prefixes.push_back(RTR("PiB")); + prefixes.push_back(RTR("EiB")); + int prefix_idx = 0; - while (p_size > (_div * 1024) && prefix[prefix_idx][0]) { + while (prefix_idx < prefixes.size() && p_size > (_div * 1024)) { _div *= 1024; prefix_idx++; } - int digits = prefix_idx > 0 ? _humanize_digits(p_size / _div) : 0; - double divisor = prefix_idx > 0 ? _div : 1; + const int digits = prefix_idx > 0 ? _humanize_digits(p_size / _div) : 0; + const double divisor = prefix_idx > 0 ? _div : 1; - return String::num(p_size / divisor).pad_decimals(digits) + RTR(prefix[prefix_idx]); + return String::num(p_size / divisor).pad_decimals(digits) + " " + prefixes[prefix_idx]; } bool String::is_abs_path() const { @@ -4036,6 +4058,11 @@ String itos(int64_t p_val) { return String::num_int64(p_val); } +String uitos(uint64_t p_val) { + + return String::num_uint64(p_val); +} + String rtos(double p_val) { return String::num(p_val); diff --git a/core/ustring.h b/core/ustring.h index bbd0bcceb5..dfc5044942 100644 --- a/core/ustring.h +++ b/core/ustring.h @@ -223,6 +223,7 @@ public: String replace(const String &p_key, const String &p_with) const; String replace(const char *p_key, const char *p_with) const; String replacen(const String &p_key, const String &p_with) const; + String repeat(int p_count) const; String insert(int p_at_pos, const String &p_string) const; String pad_decimals(int p_digits) const; String pad_zeros(int p_digits) const; @@ -321,7 +322,7 @@ public: String path_to_file(const String &p_path) const; String get_base_dir() const; String get_file() const; - static String humanize_size(size_t p_size); + static String humanize_size(uint64_t p_size); String simplify_path() const; String xml_escape(bool p_escape_quotes = false) const; @@ -368,6 +369,7 @@ String operator+(const char *p_chr, const String &p_str); String operator+(CharType p_chr, const String &p_str); String itos(int64_t p_val); +String uitos(uint64_t p_val); String rtos(double p_val); String rtoss(double p_val); //scientific version diff --git a/core/variant.cpp b/core/variant.cpp index e7d0e58367..e0cc6685f4 100644 --- a/core/variant.cpp +++ b/core/variant.cpp @@ -910,7 +910,15 @@ bool Variant::is_one() const { void Variant::reference(const Variant &p_variant) { - clear(); + switch (type) { + case NIL: + case BOOL: + case INT: + case REAL: + break; + default: + clear(); + } type = p_variant.type; @@ -3291,7 +3299,7 @@ String vformat(const String &p_text, const Variant &p1, const Variant &p2, const bool error = false; String fmt = p_text.sprintf(args, &error); - ERR_FAIL_COND_V(error, String()); + ERR_FAIL_COND_V_MSG(error, String(), fmt); return fmt; } diff --git a/core/variant_call.cpp b/core/variant_call.cpp index 5e3876d6a4..6e593a308d 100644 --- a/core/variant_call.cpp +++ b/core/variant_call.cpp @@ -256,6 +256,7 @@ struct _VariantCall { VCALL_LOCALMEM2R(String, format); VCALL_LOCALMEM2R(String, replace); VCALL_LOCALMEM2R(String, replacen); + VCALL_LOCALMEM1R(String, repeat); VCALL_LOCALMEM2R(String, insert); VCALL_LOCALMEM0R(String, capitalize); VCALL_LOCALMEM3R(String, split); @@ -283,6 +284,7 @@ struct _VariantCall { VCALL_LOCALMEM0R(String, sha1_buffer); VCALL_LOCALMEM0R(String, sha256_buffer); VCALL_LOCALMEM0R(String, empty); + VCALL_LOCALMEM1R(String, humanize_size); VCALL_LOCALMEM0R(String, is_abs_path); VCALL_LOCALMEM0R(String, is_rel_path); VCALL_LOCALMEM0R(String, get_base_dir); @@ -314,6 +316,10 @@ struct _VariantCall { static void _call_String_to_ascii(Variant &r_ret, Variant &p_self, const Variant **p_args) { String *s = reinterpret_cast<String *>(p_self._data._mem); + if (s->empty()) { + r_ret = PoolByteArray(); + return; + } CharString charstr = s->ascii(); PoolByteArray retval; @@ -329,6 +335,10 @@ struct _VariantCall { static void _call_String_to_utf8(Variant &r_ret, Variant &p_self, const Variant **p_args) { String *s = reinterpret_cast<String *>(p_self._data._mem); + if (s->empty()) { + r_ret = PoolByteArray(); + return; + } CharString charstr = s->utf8(); PoolByteArray retval; @@ -341,12 +351,13 @@ struct _VariantCall { r_ret = retval; } - VCALL_LOCALMEM0R(Vector2, normalized); + VCALL_LOCALMEM1R(Vector2, distance_to); + VCALL_LOCALMEM1R(Vector2, distance_squared_to); VCALL_LOCALMEM0R(Vector2, length); VCALL_LOCALMEM0R(Vector2, length_squared); + VCALL_LOCALMEM0R(Vector2, normalized); VCALL_LOCALMEM0R(Vector2, is_normalized); - VCALL_LOCALMEM1R(Vector2, distance_to); - VCALL_LOCALMEM1R(Vector2, distance_squared_to); + VCALL_LOCALMEM1R(Vector2, is_equal_approx); VCALL_LOCALMEM1R(Vector2, posmod); VCALL_LOCALMEM1R(Vector2, posmodv); VCALL_LOCALMEM1R(Vector2, project); @@ -375,24 +386,28 @@ struct _VariantCall { VCALL_LOCALMEM0R(Vector2, sign); VCALL_LOCALMEM0R(Rect2, get_area); + VCALL_LOCALMEM0R(Rect2, has_no_area); + VCALL_LOCALMEM1R(Rect2, has_point); + VCALL_LOCALMEM1R(Rect2, is_equal_approx); VCALL_LOCALMEM1R(Rect2, intersects); VCALL_LOCALMEM1R(Rect2, encloses); - VCALL_LOCALMEM0R(Rect2, has_no_area); VCALL_LOCALMEM1R(Rect2, clip); VCALL_LOCALMEM1R(Rect2, merge); - VCALL_LOCALMEM1R(Rect2, has_point); + VCALL_LOCALMEM1R(Rect2, expand); VCALL_LOCALMEM1R(Rect2, grow); VCALL_LOCALMEM2R(Rect2, grow_margin); VCALL_LOCALMEM4R(Rect2, grow_individual); - VCALL_LOCALMEM1R(Rect2, expand); VCALL_LOCALMEM0R(Rect2, abs); VCALL_LOCALMEM0R(Vector3, min_axis); VCALL_LOCALMEM0R(Vector3, max_axis); + VCALL_LOCALMEM1R(Vector3, distance_to); + VCALL_LOCALMEM1R(Vector3, distance_squared_to); VCALL_LOCALMEM0R(Vector3, length); VCALL_LOCALMEM0R(Vector3, length_squared); - VCALL_LOCALMEM0R(Vector3, is_normalized); VCALL_LOCALMEM0R(Vector3, normalized); + VCALL_LOCALMEM0R(Vector3, is_normalized); + VCALL_LOCALMEM1R(Vector3, is_equal_approx); VCALL_LOCALMEM0R(Vector3, inverse); VCALL_LOCALMEM1R(Vector3, snapped); VCALL_LOCALMEM2R(Vector3, rotated); @@ -408,8 +423,6 @@ struct _VariantCall { VCALL_LOCALMEM0R(Vector3, floor); VCALL_LOCALMEM0R(Vector3, ceil); VCALL_LOCALMEM0R(Vector3, round); - VCALL_LOCALMEM1R(Vector3, distance_to); - VCALL_LOCALMEM1R(Vector3, distance_squared_to); VCALL_LOCALMEM1R(Vector3, posmod); VCALL_LOCALMEM1R(Vector3, posmodv); VCALL_LOCALMEM1R(Vector3, project); @@ -423,6 +436,7 @@ struct _VariantCall { VCALL_LOCALMEM0R(Plane, normalized); VCALL_LOCALMEM0R(Plane, center); VCALL_LOCALMEM0R(Plane, get_any_point); + VCALL_LOCALMEM1R(Plane, is_equal_approx); VCALL_LOCALMEM1R(Plane, is_point_over); VCALL_LOCALMEM1R(Plane, distance_to); VCALL_LOCALMEM2R(Plane, has_point); @@ -457,6 +471,7 @@ struct _VariantCall { VCALL_LOCALMEM0R(Quat, length_squared); VCALL_LOCALMEM0R(Quat, normalized); VCALL_LOCALMEM0R(Quat, is_normalized); + VCALL_LOCALMEM1R(Quat, is_equal_approx); VCALL_LOCALMEM0R(Quat, inverse); VCALL_LOCALMEM1R(Quat, dot); VCALL_LOCALMEM1R(Quat, xform); @@ -482,6 +497,7 @@ struct _VariantCall { VCALL_LOCALMEM1R(Color, darkened); VCALL_LOCALMEM1R(Color, to_html); VCALL_LOCALMEM4R(Color, from_hsv); + VCALL_LOCALMEM1R(Color, is_equal_approx); VCALL_LOCALMEM0R(RID, get_id); @@ -534,6 +550,7 @@ struct _VariantCall { VCALL_LOCALMEM2R(Array, bsearch); VCALL_LOCALMEM4R(Array, bsearch_custom); VCALL_LOCALMEM1R(Array, duplicate); + VCALL_LOCALMEM4R(Array, slice); VCALL_LOCALMEM0(Array, invert); VCALL_LOCALMEM0R(Array, max); VCALL_LOCALMEM0R(Array, min); @@ -542,7 +559,7 @@ struct _VariantCall { PoolByteArray *ba = reinterpret_cast<PoolByteArray *>(p_self._data._mem); String s; - if (ba->size() >= 0) { + if (ba->size() > 0) { PoolByteArray::Read r = ba->read(); CharString cs; cs.resize(ba->size() + 1); @@ -558,7 +575,7 @@ struct _VariantCall { PoolByteArray *ba = reinterpret_cast<PoolByteArray *>(p_self._data._mem); String s; - if (ba->size() >= 0) { + if (ba->size() > 0) { PoolByteArray::Read r = ba->read(); s.parse_utf8((const char *)r.ptr(), ba->size()); } @@ -569,14 +586,15 @@ struct _VariantCall { PoolByteArray *ba = reinterpret_cast<PoolByteArray *>(p_self._data._mem); PoolByteArray compressed; - Compression::Mode mode = (Compression::Mode)(int)(*p_args[0]); + if (ba->size() > 0) { + Compression::Mode mode = (Compression::Mode)(int)(*p_args[0]); - compressed.resize(Compression::get_max_compressed_buffer_size(ba->size(), mode)); - int result = Compression::compress(compressed.write().ptr(), ba->read().ptr(), ba->size(), mode); - - result = result >= 0 ? result : 0; - compressed.resize(result); + compressed.resize(Compression::get_max_compressed_buffer_size(ba->size(), mode)); + int result = Compression::compress(compressed.write().ptr(), ba->read().ptr(), ba->size(), mode); + result = result >= 0 ? result : 0; + compressed.resize(result); + } r_ret = compressed; } @@ -588,9 +606,9 @@ struct _VariantCall { int buffer_size = (int)(*p_args[0]); - if (buffer_size < 0) { + if (buffer_size <= 0) { r_ret = decompressed; - ERR_FAIL_MSG("Decompression buffer size is less than zero."); + ERR_FAIL_MSG("Decompression buffer size must be greater than zero."); } decompressed.resize(buffer_size); @@ -604,12 +622,17 @@ struct _VariantCall { static void _call_PoolByteArray_hex_encode(Variant &r_ret, Variant &p_self, const Variant **p_args) { PoolByteArray *ba = reinterpret_cast<PoolByteArray *>(p_self._data._mem); + if (ba->size() == 0) { + r_ret = String(); + return; + } PoolByteArray::Read r = ba->read(); String s = String::hex_encode_buffer(&r[0], ba->size()); r_ret = s; } VCALL_LOCALMEM0R(PoolByteArray, size); + VCALL_LOCALMEM0R(PoolByteArray, empty); VCALL_LOCALMEM2(PoolByteArray, set); VCALL_LOCALMEM1R(PoolByteArray, get); VCALL_LOCALMEM1(PoolByteArray, push_back); @@ -622,6 +645,7 @@ struct _VariantCall { VCALL_LOCALMEM2R(PoolByteArray, subarray); VCALL_LOCALMEM0R(PoolIntArray, size); + VCALL_LOCALMEM0R(PoolIntArray, empty); VCALL_LOCALMEM2(PoolIntArray, set); VCALL_LOCALMEM1R(PoolIntArray, get); VCALL_LOCALMEM1(PoolIntArray, push_back); @@ -633,6 +657,7 @@ struct _VariantCall { VCALL_LOCALMEM0(PoolIntArray, invert); VCALL_LOCALMEM0R(PoolRealArray, size); + VCALL_LOCALMEM0R(PoolRealArray, empty); VCALL_LOCALMEM2(PoolRealArray, set); VCALL_LOCALMEM1R(PoolRealArray, get); VCALL_LOCALMEM1(PoolRealArray, push_back); @@ -644,6 +669,7 @@ struct _VariantCall { VCALL_LOCALMEM0(PoolRealArray, invert); VCALL_LOCALMEM0R(PoolStringArray, size); + VCALL_LOCALMEM0R(PoolStringArray, empty); VCALL_LOCALMEM2(PoolStringArray, set); VCALL_LOCALMEM1R(PoolStringArray, get); VCALL_LOCALMEM1(PoolStringArray, push_back); @@ -656,6 +682,7 @@ struct _VariantCall { VCALL_LOCALMEM1R(PoolStringArray, join); VCALL_LOCALMEM0R(PoolVector2Array, size); + VCALL_LOCALMEM0R(PoolVector2Array, empty); VCALL_LOCALMEM2(PoolVector2Array, set); VCALL_LOCALMEM1R(PoolVector2Array, get); VCALL_LOCALMEM1(PoolVector2Array, push_back); @@ -667,6 +694,7 @@ struct _VariantCall { VCALL_LOCALMEM0(PoolVector2Array, invert); VCALL_LOCALMEM0R(PoolVector3Array, size); + VCALL_LOCALMEM0R(PoolVector3Array, empty); VCALL_LOCALMEM2(PoolVector3Array, set); VCALL_LOCALMEM1R(PoolVector3Array, get); VCALL_LOCALMEM1(PoolVector3Array, push_back); @@ -678,6 +706,7 @@ struct _VariantCall { VCALL_LOCALMEM0(PoolVector3Array, invert); VCALL_LOCALMEM0R(PoolColorArray, size); + VCALL_LOCALMEM0R(PoolColorArray, empty); VCALL_LOCALMEM2(PoolColorArray, set); VCALL_LOCALMEM1R(PoolColorArray, get); VCALL_LOCALMEM1(PoolColorArray, push_back); @@ -716,13 +745,16 @@ struct _VariantCall { VCALL_PTR0R(AABB, get_area); VCALL_PTR0R(AABB, has_no_area); VCALL_PTR0R(AABB, has_no_surface); + VCALL_PTR1R(AABB, has_point); + VCALL_PTR1R(AABB, is_equal_approx); VCALL_PTR1R(AABB, intersects); VCALL_PTR1R(AABB, encloses); - VCALL_PTR1R(AABB, merge); - VCALL_PTR1R(AABB, intersection); VCALL_PTR1R(AABB, intersects_plane); VCALL_PTR2R(AABB, intersects_segment); - VCALL_PTR1R(AABB, has_point); + VCALL_PTR1R(AABB, intersection); + VCALL_PTR1R(AABB, merge); + VCALL_PTR1R(AABB, expand); + VCALL_PTR1R(AABB, grow); VCALL_PTR1R(AABB, get_support); VCALL_PTR0R(AABB, get_longest_axis); VCALL_PTR0R(AABB, get_longest_axis_index); @@ -730,8 +762,6 @@ struct _VariantCall { VCALL_PTR0R(AABB, get_shortest_axis); VCALL_PTR0R(AABB, get_shortest_axis_index); VCALL_PTR0R(AABB, get_shortest_axis_size); - VCALL_PTR1R(AABB, expand); - VCALL_PTR1R(AABB, grow); VCALL_PTR1R(AABB, get_endpoint); VCALL_PTR0R(Transform2D, inverse); @@ -744,6 +774,7 @@ struct _VariantCall { VCALL_PTR1R(Transform2D, scaled); VCALL_PTR1R(Transform2D, translated); VCALL_PTR2R(Transform2D, interpolate_with); + VCALL_PTR1R(Transform2D, is_equal_approx); static void _call_Transform2D_xform(Variant &r_ret, Variant &p_self, const Variant **p_args) { @@ -800,7 +831,7 @@ struct _VariantCall { VCALL_PTR0R(Basis, get_orthogonal_index); VCALL_PTR0R(Basis, orthonormalized); VCALL_PTR2R(Basis, slerp); - VCALL_PTR2R(Basis, is_equal_approx); + VCALL_PTR2R(Basis, is_equal_approx); // TODO: Break compatibility in 4.0 to change this to an instance method (a.is_equal_approx(b) as VCALL_PTR1R) for consistency. VCALL_PTR0R(Basis, get_rotation_quat); VCALL_PTR0R(Transform, inverse); @@ -811,6 +842,7 @@ struct _VariantCall { VCALL_PTR0R(Transform, orthonormalized); VCALL_PTR2R(Transform, looking_at); VCALL_PTR2R(Transform, interpolate_with); + VCALL_PTR1R(Transform, is_equal_approx); static void _call_Transform_xform(Variant &r_ret, Variant &p_self, const Variant **p_args) { @@ -1529,6 +1561,7 @@ void register_variant_methods() { ADDFUNC2R(STRING, STRING, String, format, NIL, "values", STRING, "placeholder", varray("{_}")); ADDFUNC2R(STRING, STRING, String, replace, STRING, "what", STRING, "forwhat", varray()); ADDFUNC2R(STRING, STRING, String, replacen, STRING, "what", STRING, "forwhat", varray()); + ADDFUNC1R(STRING, STRING, String, repeat, INT, "count", varray()); ADDFUNC2R(STRING, STRING, String, insert, INT, "position", STRING, "what", varray()); ADDFUNC0R(STRING, STRING, String, capitalize, varray()); ADDFUNC3R(STRING, POOL_STRING_ARRAY, String, split, STRING, "delimiter", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0)); @@ -1558,6 +1591,7 @@ void register_variant_methods() { ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, sha1_buffer, varray()); ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, sha256_buffer, varray()); ADDFUNC0R(STRING, BOOL, String, empty, varray()); + ADDFUNC1R(STRING, STRING, String, humanize_size, INT, "size", varray()); ADDFUNC0R(STRING, BOOL, String, is_abs_path, varray()); ADDFUNC0R(STRING, BOOL, String, is_rel_path, varray()); ADDFUNC0R(STRING, STRING, String, get_base_dir, varray()); @@ -1589,19 +1623,20 @@ void register_variant_methods() { ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, to_ascii, varray()); ADDFUNC0R(STRING, POOL_BYTE_ARRAY, String, to_utf8, varray()); - ADDFUNC0R(VECTOR2, VECTOR2, Vector2, normalized, varray()); - ADDFUNC0R(VECTOR2, REAL, Vector2, length, varray()); ADDFUNC0R(VECTOR2, REAL, Vector2, angle, varray()); - ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray()); - ADDFUNC0R(VECTOR2, BOOL, Vector2, is_normalized, varray()); + ADDFUNC1R(VECTOR2, REAL, Vector2, angle_to, VECTOR2, "to", varray()); + ADDFUNC1R(VECTOR2, REAL, Vector2, angle_to_point, VECTOR2, "to", varray()); ADDFUNC1R(VECTOR2, VECTOR2, Vector2, direction_to, VECTOR2, "b", varray()); ADDFUNC1R(VECTOR2, REAL, Vector2, distance_to, VECTOR2, "to", varray()); ADDFUNC1R(VECTOR2, REAL, Vector2, distance_squared_to, VECTOR2, "to", varray()); + ADDFUNC0R(VECTOR2, REAL, Vector2, length, varray()); + ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray()); + ADDFUNC0R(VECTOR2, VECTOR2, Vector2, normalized, varray()); + ADDFUNC0R(VECTOR2, BOOL, Vector2, is_normalized, varray()); + ADDFUNC1R(VECTOR2, BOOL, Vector2, is_equal_approx, VECTOR2, "v", varray()); ADDFUNC1R(VECTOR2, VECTOR2, Vector2, posmod, REAL, "mod", varray()); ADDFUNC1R(VECTOR2, VECTOR2, Vector2, posmodv, VECTOR2, "modv", varray()); ADDFUNC1R(VECTOR2, VECTOR2, Vector2, project, VECTOR2, "b", varray()); - ADDFUNC1R(VECTOR2, REAL, Vector2, angle_to, VECTOR2, "to", varray()); - ADDFUNC1R(VECTOR2, REAL, Vector2, angle_to_point, VECTOR2, "to", varray()); ADDFUNC2R(VECTOR2, VECTOR2, Vector2, linear_interpolate, VECTOR2, "b", REAL, "t", varray()); ADDFUNC2R(VECTOR2, VECTOR2, Vector2, slerp, VECTOR2, "b", REAL, "t", varray()); ADDFUNC4R(VECTOR2, VECTOR2, Vector2, cubic_interpolate, VECTOR2, "b", VECTOR2, "pre_a", VECTOR2, "post_b", REAL, "t", varray()); @@ -1623,31 +1658,36 @@ void register_variant_methods() { ADDFUNC0R(VECTOR2, VECTOR2, Vector2, sign, varray()); ADDFUNC0R(RECT2, REAL, Rect2, get_area, varray()); + ADDFUNC0R(RECT2, BOOL, Rect2, has_no_area, varray()); + ADDFUNC1R(RECT2, BOOL, Rect2, has_point, VECTOR2, "point", varray()); + ADDFUNC1R(RECT2, BOOL, Rect2, is_equal_approx, RECT2, "rect", varray()); ADDFUNC1R(RECT2, BOOL, Rect2, intersects, RECT2, "b", varray()); ADDFUNC1R(RECT2, BOOL, Rect2, encloses, RECT2, "b", varray()); - ADDFUNC0R(RECT2, BOOL, Rect2, has_no_area, varray()); ADDFUNC1R(RECT2, RECT2, Rect2, clip, RECT2, "b", varray()); ADDFUNC1R(RECT2, RECT2, Rect2, merge, RECT2, "b", varray()); - ADDFUNC1R(RECT2, BOOL, Rect2, has_point, VECTOR2, "point", varray()); + ADDFUNC1R(RECT2, RECT2, Rect2, expand, VECTOR2, "to", varray()); ADDFUNC1R(RECT2, RECT2, Rect2, grow, REAL, "by", varray()); ADDFUNC2R(RECT2, RECT2, Rect2, grow_margin, INT, "margin", REAL, "by", varray()); ADDFUNC4R(RECT2, RECT2, Rect2, grow_individual, REAL, "left", REAL, "top", REAL, "right", REAL, " bottom", varray()); - ADDFUNC1R(RECT2, RECT2, Rect2, expand, VECTOR2, "to", varray()); ADDFUNC0R(RECT2, RECT2, Rect2, abs, varray()); ADDFUNC0R(VECTOR3, INT, Vector3, min_axis, varray()); ADDFUNC0R(VECTOR3, INT, Vector3, max_axis, varray()); + ADDFUNC1R(VECTOR3, REAL, Vector3, angle_to, VECTOR3, "to", varray()); + ADDFUNC1R(VECTOR3, VECTOR3, Vector3, direction_to, VECTOR3, "b", varray()); + ADDFUNC1R(VECTOR3, REAL, Vector3, distance_to, VECTOR3, "b", varray()); + ADDFUNC1R(VECTOR3, REAL, Vector3, distance_squared_to, VECTOR3, "b", varray()); ADDFUNC0R(VECTOR3, REAL, Vector3, length, varray()); ADDFUNC0R(VECTOR3, REAL, Vector3, length_squared, varray()); - ADDFUNC0R(VECTOR3, BOOL, Vector3, is_normalized, varray()); ADDFUNC0R(VECTOR3, VECTOR3, Vector3, normalized, varray()); + ADDFUNC0R(VECTOR3, BOOL, Vector3, is_normalized, varray()); + ADDFUNC1R(VECTOR3, BOOL, Vector3, is_equal_approx, VECTOR3, "v", varray()); ADDFUNC0R(VECTOR3, VECTOR3, Vector3, inverse, varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, snapped, VECTOR3, "by", varray()); ADDFUNC2R(VECTOR3, VECTOR3, Vector3, rotated, VECTOR3, "axis", REAL, "phi", varray()); ADDFUNC2R(VECTOR3, VECTOR3, Vector3, linear_interpolate, VECTOR3, "b", REAL, "t", varray()); ADDFUNC2R(VECTOR3, VECTOR3, Vector3, slerp, VECTOR3, "b", REAL, "t", varray()); ADDFUNC4R(VECTOR3, VECTOR3, Vector3, cubic_interpolate, VECTOR3, "b", VECTOR3, "pre_a", VECTOR3, "post_b", REAL, "t", varray()); - ADDFUNC1R(VECTOR3, VECTOR3, Vector3, direction_to, VECTOR3, "b", varray()); ADDFUNC2R(VECTOR3, VECTOR3, Vector3, move_toward, VECTOR3, "to", REAL, "delta", varray()); ADDFUNC1R(VECTOR3, REAL, Vector3, dot, VECTOR3, "b", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, cross, VECTOR3, "b", varray()); @@ -1657,12 +1697,9 @@ void register_variant_methods() { ADDFUNC0R(VECTOR3, VECTOR3, Vector3, floor, varray()); ADDFUNC0R(VECTOR3, VECTOR3, Vector3, ceil, varray()); ADDFUNC0R(VECTOR3, VECTOR3, Vector3, round, varray()); - ADDFUNC1R(VECTOR3, REAL, Vector3, distance_to, VECTOR3, "b", varray()); - ADDFUNC1R(VECTOR3, REAL, Vector3, distance_squared_to, VECTOR3, "b", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, posmod, REAL, "mod", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, posmodv, VECTOR3, "modv", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, project, VECTOR3, "b", varray()); - ADDFUNC1R(VECTOR3, REAL, Vector3, angle_to, VECTOR3, "to", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, slide, VECTOR3, "n", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, bounce, VECTOR3, "n", varray()); ADDFUNC1R(VECTOR3, VECTOR3, Vector3, reflect, VECTOR3, "n", varray()); @@ -1671,6 +1708,7 @@ void register_variant_methods() { ADDFUNC0R(PLANE, PLANE, Plane, normalized, varray()); ADDFUNC0R(PLANE, VECTOR3, Plane, center, varray()); ADDFUNC0R(PLANE, VECTOR3, Plane, get_any_point, varray()); + ADDFUNC1R(PLANE, BOOL, Plane, is_equal_approx, PLANE, "plane", varray()); ADDFUNC1R(PLANE, BOOL, Plane, is_point_over, VECTOR3, "point", varray()); ADDFUNC1R(PLANE, REAL, Plane, distance_to, VECTOR3, "point", varray()); ADDFUNC2R(PLANE, BOOL, Plane, has_point, VECTOR3, "point", REAL, "epsilon", varray(CMP_EPSILON)); @@ -1683,6 +1721,7 @@ void register_variant_methods() { ADDFUNC0R(QUAT, REAL, Quat, length_squared, varray()); ADDFUNC0R(QUAT, QUAT, Quat, normalized, varray()); ADDFUNC0R(QUAT, BOOL, Quat, is_normalized, varray()); + ADDFUNC1R(QUAT, BOOL, Quat, is_equal_approx, QUAT, "quat", varray()); ADDFUNC0R(QUAT, QUAT, Quat, inverse, varray()); ADDFUNC1R(QUAT, REAL, Quat, dot, QUAT, "b", varray()); ADDFUNC1R(QUAT, VECTOR3, Quat, xform, VECTOR3, "v", varray()); @@ -1708,6 +1747,7 @@ void register_variant_methods() { ADDFUNC1R(COLOR, COLOR, Color, darkened, REAL, "amount", varray()); ADDFUNC1R(COLOR, STRING, Color, to_html, BOOL, "with_alpha", varray(true)); ADDFUNC4R(COLOR, COLOR, Color, from_hsv, REAL, "h", REAL, "s", REAL, "v", REAL, "a", varray(1.0)); + ADDFUNC1R(COLOR, BOOL, Color, is_equal_approx, COLOR, "color", varray()); ADDFUNC0R(_RID, INT, RID, get_id, varray()); @@ -1759,10 +1799,12 @@ void register_variant_methods() { ADDFUNC4R(ARRAY, INT, Array, bsearch_custom, NIL, "value", OBJECT, "obj", STRING, "func", BOOL, "before", varray(true)); ADDFUNC0NC(ARRAY, NIL, Array, invert, varray()); ADDFUNC1R(ARRAY, ARRAY, Array, duplicate, BOOL, "deep", varray(false)); + ADDFUNC4R(ARRAY, ARRAY, Array, slice, INT, "begin", INT, "end", INT, "step", BOOL, "deep", varray(1, false)); ADDFUNC0R(ARRAY, NIL, Array, max, varray()); ADDFUNC0R(ARRAY, NIL, Array, min, varray()); ADDFUNC0R(POOL_BYTE_ARRAY, INT, PoolByteArray, size, varray()); + ADDFUNC0R(POOL_BYTE_ARRAY, BOOL, PoolByteArray, empty, varray()); ADDFUNC2(POOL_BYTE_ARRAY, NIL, PoolByteArray, set, INT, "idx", INT, "byte", varray()); ADDFUNC1(POOL_BYTE_ARRAY, NIL, PoolByteArray, push_back, INT, "byte", varray()); ADDFUNC1(POOL_BYTE_ARRAY, NIL, PoolByteArray, append, INT, "byte", varray()); @@ -1780,6 +1822,7 @@ void register_variant_methods() { ADDFUNC2R(POOL_BYTE_ARRAY, POOL_BYTE_ARRAY, PoolByteArray, decompress, INT, "buffer_size", INT, "compression_mode", varray(0)); ADDFUNC0R(POOL_INT_ARRAY, INT, PoolIntArray, size, varray()); + ADDFUNC0R(POOL_INT_ARRAY, BOOL, PoolIntArray, empty, varray()); ADDFUNC2(POOL_INT_ARRAY, NIL, PoolIntArray, set, INT, "idx", INT, "integer", varray()); ADDFUNC1(POOL_INT_ARRAY, NIL, PoolIntArray, push_back, INT, "integer", varray()); ADDFUNC1(POOL_INT_ARRAY, NIL, PoolIntArray, append, INT, "integer", varray()); @@ -1790,6 +1833,7 @@ void register_variant_methods() { ADDFUNC0(POOL_INT_ARRAY, NIL, PoolIntArray, invert, varray()); ADDFUNC0R(POOL_REAL_ARRAY, INT, PoolRealArray, size, varray()); + ADDFUNC0R(POOL_REAL_ARRAY, BOOL, PoolRealArray, empty, varray()); ADDFUNC2(POOL_REAL_ARRAY, NIL, PoolRealArray, set, INT, "idx", REAL, "value", varray()); ADDFUNC1(POOL_REAL_ARRAY, NIL, PoolRealArray, push_back, REAL, "value", varray()); ADDFUNC1(POOL_REAL_ARRAY, NIL, PoolRealArray, append, REAL, "value", varray()); @@ -1800,6 +1844,7 @@ void register_variant_methods() { ADDFUNC0(POOL_REAL_ARRAY, NIL, PoolRealArray, invert, varray()); ADDFUNC0R(POOL_STRING_ARRAY, INT, PoolStringArray, size, varray()); + ADDFUNC0R(POOL_STRING_ARRAY, BOOL, PoolStringArray, empty, varray()); ADDFUNC2(POOL_STRING_ARRAY, NIL, PoolStringArray, set, INT, "idx", STRING, "string", varray()); ADDFUNC1(POOL_STRING_ARRAY, NIL, PoolStringArray, push_back, STRING, "string", varray()); ADDFUNC1(POOL_STRING_ARRAY, NIL, PoolStringArray, append, STRING, "string", varray()); @@ -1811,6 +1856,7 @@ void register_variant_methods() { ADDFUNC1(POOL_STRING_ARRAY, STRING, PoolStringArray, join, STRING, "delimiter", varray()); ADDFUNC0R(POOL_VECTOR2_ARRAY, INT, PoolVector2Array, size, varray()); + ADDFUNC0R(POOL_VECTOR2_ARRAY, BOOL, PoolVector2Array, empty, varray()); ADDFUNC2(POOL_VECTOR2_ARRAY, NIL, PoolVector2Array, set, INT, "idx", VECTOR2, "vector2", varray()); ADDFUNC1(POOL_VECTOR2_ARRAY, NIL, PoolVector2Array, push_back, VECTOR2, "vector2", varray()); ADDFUNC1(POOL_VECTOR2_ARRAY, NIL, PoolVector2Array, append, VECTOR2, "vector2", varray()); @@ -1821,6 +1867,7 @@ void register_variant_methods() { ADDFUNC0(POOL_VECTOR2_ARRAY, NIL, PoolVector2Array, invert, varray()); ADDFUNC0R(POOL_VECTOR3_ARRAY, INT, PoolVector3Array, size, varray()); + ADDFUNC0R(POOL_VECTOR3_ARRAY, BOOL, PoolVector3Array, empty, varray()); ADDFUNC2(POOL_VECTOR3_ARRAY, NIL, PoolVector3Array, set, INT, "idx", VECTOR3, "vector3", varray()); ADDFUNC1(POOL_VECTOR3_ARRAY, NIL, PoolVector3Array, push_back, VECTOR3, "vector3", varray()); ADDFUNC1(POOL_VECTOR3_ARRAY, NIL, PoolVector3Array, append, VECTOR3, "vector3", varray()); @@ -1831,6 +1878,7 @@ void register_variant_methods() { ADDFUNC0(POOL_VECTOR3_ARRAY, NIL, PoolVector3Array, invert, varray()); ADDFUNC0R(POOL_COLOR_ARRAY, INT, PoolColorArray, size, varray()); + ADDFUNC0R(POOL_COLOR_ARRAY, BOOL, PoolColorArray, empty, varray()); ADDFUNC2(POOL_COLOR_ARRAY, NIL, PoolColorArray, set, INT, "idx", COLOR, "color", varray()); ADDFUNC1(POOL_COLOR_ARRAY, NIL, PoolColorArray, push_back, COLOR, "color", varray()); ADDFUNC1(POOL_COLOR_ARRAY, NIL, PoolColorArray, append, COLOR, "color", varray()); @@ -1845,13 +1893,16 @@ void register_variant_methods() { ADDFUNC0R(AABB, REAL, AABB, get_area, varray()); ADDFUNC0R(AABB, BOOL, AABB, has_no_area, varray()); ADDFUNC0R(AABB, BOOL, AABB, has_no_surface, varray()); + ADDFUNC1R(AABB, BOOL, AABB, has_point, VECTOR3, "point", varray()); + ADDFUNC1R(AABB, BOOL, AABB, is_equal_approx, AABB, "aabb", varray()); ADDFUNC1R(AABB, BOOL, AABB, intersects, AABB, "with", varray()); ADDFUNC1R(AABB, BOOL, AABB, encloses, AABB, "with", varray()); - ADDFUNC1R(AABB, AABB, AABB, merge, AABB, "with", varray()); - ADDFUNC1R(AABB, AABB, AABB, intersection, AABB, "with", varray()); ADDFUNC1R(AABB, BOOL, AABB, intersects_plane, PLANE, "plane", varray()); ADDFUNC2R(AABB, BOOL, AABB, intersects_segment, VECTOR3, "from", VECTOR3, "to", varray()); - ADDFUNC1R(AABB, BOOL, AABB, has_point, VECTOR3, "point", varray()); + ADDFUNC1R(AABB, AABB, AABB, intersection, AABB, "with", varray()); + ADDFUNC1R(AABB, AABB, AABB, merge, AABB, "with", varray()); + ADDFUNC1R(AABB, AABB, AABB, expand, VECTOR3, "to_point", varray()); + ADDFUNC1R(AABB, AABB, AABB, grow, REAL, "by", varray()); ADDFUNC1R(AABB, VECTOR3, AABB, get_support, VECTOR3, "dir", varray()); ADDFUNC0R(AABB, VECTOR3, AABB, get_longest_axis, varray()); ADDFUNC0R(AABB, INT, AABB, get_longest_axis_index, varray()); @@ -1859,8 +1910,6 @@ void register_variant_methods() { ADDFUNC0R(AABB, VECTOR3, AABB, get_shortest_axis, varray()); ADDFUNC0R(AABB, INT, AABB, get_shortest_axis_index, varray()); ADDFUNC0R(AABB, REAL, AABB, get_shortest_axis_size, varray()); - ADDFUNC1R(AABB, AABB, AABB, expand, VECTOR3, "to_point", varray()); - ADDFUNC1R(AABB, AABB, AABB, grow, REAL, "by", varray()); ADDFUNC1R(AABB, VECTOR3, AABB, get_endpoint, INT, "idx", varray()); ADDFUNC0R(TRANSFORM2D, TRANSFORM2D, Transform2D, inverse, varray()); @@ -1877,6 +1926,7 @@ void register_variant_methods() { ADDFUNC1R(TRANSFORM2D, VECTOR2, Transform2D, basis_xform, VECTOR2, "v", varray()); ADDFUNC1R(TRANSFORM2D, VECTOR2, Transform2D, basis_xform_inv, VECTOR2, "v", varray()); ADDFUNC2R(TRANSFORM2D, TRANSFORM2D, Transform2D, interpolate_with, TRANSFORM2D, "transform", REAL, "weight", varray()); + ADDFUNC1R(TRANSFORM2D, BOOL, Transform2D, is_equal_approx, TRANSFORM2D, "transform", varray()); ADDFUNC0R(BASIS, BASIS, Basis, inverse, varray()); ADDFUNC0R(BASIS, BASIS, Basis, transposed, varray()); @@ -1893,7 +1943,7 @@ void register_variant_methods() { ADDFUNC1R(BASIS, VECTOR3, Basis, xform_inv, VECTOR3, "v", varray()); ADDFUNC0R(BASIS, INT, Basis, get_orthogonal_index, varray()); ADDFUNC2R(BASIS, BASIS, Basis, slerp, BASIS, "b", REAL, "t", varray()); - ADDFUNC2R(BASIS, BOOL, Basis, is_equal_approx, BASIS, "b", REAL, "epsilon", varray(CMP_EPSILON)); + ADDFUNC2R(BASIS, BOOL, Basis, is_equal_approx, BASIS, "b", REAL, "epsilon", varray(CMP_EPSILON)); // TODO: Replace in 4.0, see other TODO. ADDFUNC0R(BASIS, QUAT, Basis, get_rotation_quat, varray()); ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, inverse, varray()); @@ -1904,6 +1954,7 @@ void register_variant_methods() { ADDFUNC1R(TRANSFORM, TRANSFORM, Transform, translated, VECTOR3, "ofs", varray()); ADDFUNC2R(TRANSFORM, TRANSFORM, Transform, looking_at, VECTOR3, "target", VECTOR3, "up", varray()); ADDFUNC2R(TRANSFORM, TRANSFORM, Transform, interpolate_with, TRANSFORM, "transform", REAL, "weight", varray()); + ADDFUNC1R(TRANSFORM, BOOL, Transform, is_equal_approx, TRANSFORM, "transform", varray()); ADDFUNC1R(TRANSFORM, NIL, Transform, xform, NIL, "v", varray()); ADDFUNC1R(TRANSFORM, NIL, Transform, xform_inv, NIL, "v", varray()); diff --git a/core/variant_parser.cpp b/core/variant_parser.cpp index 07212ec669..fe2c981c3c 100644 --- a/core/variant_parser.cpp +++ b/core/variant_parser.cpp @@ -1522,7 +1522,7 @@ Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r return err; if (tk.type != TK_STRING) { r_err_str = "Error reading quoted string"; - return err; + return ERR_INVALID_DATA; } what = tk.value; diff --git a/core/vmap.h b/core/vmap.h index fde9723d71..ed66b46993 100644 --- a/core/vmap.h +++ b/core/vmap.h @@ -196,8 +196,7 @@ public: int pos = _find_exact(p_key); if (pos < 0) { - V val; - pos = insert(p_key, val); + pos = insert(p_key, V()); } return _cowdata.get_m(pos).value; diff --git a/doc/classes/AStar.xml b/doc/classes/AStar.xml index 9ca09371dd..6304bd34f6 100644 --- a/doc/classes/AStar.xml +++ b/doc/classes/AStar.xml @@ -1,11 +1,23 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="AStar" inherits="Reference" category="Core" version="3.2"> <brief_description> - AStar class representation that uses 3d-vectors as edges. + An implementation of A* to find shortest paths among connected points in space. </brief_description> <description> - A* (A star) is a computer algorithm that is widely used in pathfinding and graph traversal, the process of plotting an efficiently directed path between multiple points. It enjoys widespread use due to its performance and accuracy. Godot's A* implementation make use of vectors as points. - You must add points manually with [method add_point] and create segments manually with [method connect_points]. So you can test if there is a path between two points with the [method are_points_connected] function, get the list of existing ids in the found path with [method get_id_path], or the points list with [method get_point_path]. + A* (A star) is a computer algorithm that is widely used in pathfinding and graph traversal, the process of plotting short paths among vertices (points), passing through a given set of edges (segments). It enjoys widespread use due to its performance and accuracy. Godot's A* implementation uses points in three-dimensional space and Euclidean distances by default. + You must add points manually with [method add_point] and create segments manually with [method connect_points]. Then you can test if there is a path between two points with the [method are_points_connected] function, get a path containing indices by [method get_id_path], or one containing actual coordinates with [method get_point_path]. + It is also possible to use non-Euclidean distances. To do so, create a class that extends [code]AStar[/code] and override methods [method _compute_cost] and [method _estimate_cost]. Both take two indices and return a length, as is shown in the following example. + [codeblock] + class MyAStar: + extends AStar + + func _compute_cost(u, v): + return abs(u - v) + + func _estimate_cost(u, v): + return min(0, abs(u - v) - 1) + [/codeblock] + [method _estimate_cost] should return a lower bound of the distance, i.e. [code]_estimate_cost(u, v) <= _compute_cost(u, v)[/code]. This serves as a hint to the algorithm because the custom [code]_compute_cost[/code] might be computation-heavy. If this is not the case, make [method _estimate_cost] return the same value as [method _compute_cost] to provide the algorithm with the most accurate information. </description> <tutorials> </tutorials> @@ -19,6 +31,7 @@ </argument> <description> Called when computing the cost between two connected points. + Note that this function is hidden in the default [code]AStar[/code] class. </description> </method> <method name="_estimate_cost" qualifiers="virtual"> @@ -30,6 +43,7 @@ </argument> <description> Called when estimating the cost between a point and the path's ending point. + Note that this function is hidden in the default [code]AStar[/code] class. </description> </method> <method name="add_point"> @@ -57,8 +71,10 @@ </argument> <argument index="1" name="to_id" type="int"> </argument> + <argument index="2" name="bidirectional" type="bool" default="true"> + </argument> <description> - Returns whether there is a connection/segment between the given points. + Returns whether the two given points are directly connected by a segment. If [code]bidirectional[/code] is [code]false[/code], returns whether movement from [code]id[/code] to [code]to_id[/code] is possible through this segment. </description> </method> <method name="clear"> @@ -94,8 +110,10 @@ </argument> <argument index="1" name="to_id" type="int"> </argument> + <argument index="2" name="bidirectional" type="bool" default="true"> + </argument> <description> - Deletes the segment between the given points. + Deletes the segment between the given points. If [code]bidirectional[/code] is [code]false[/code], only movement from [code]id[/code] to [code]to_id[/code] is prevented, and a unidirectional segment possibly remains. </description> </method> <method name="get_available_point_id" qualifiers="const"> @@ -110,8 +128,10 @@ </return> <argument index="0" name="to_position" type="Vector3"> </argument> + <argument index="1" name="include_disabled" type="bool" default="false"> + </argument> <description> - Returns the ID of the closest point to [code]to_position[/code]. Returns -1 if there are no points in the points pool. + Returns the ID of the closest point to [code]to_position[/code], optionally taking disabled points into account. Returns -1 if there are no points in the points pool. </description> </method> <method name="get_closest_position_in_segment" qualifiers="const"> diff --git a/doc/classes/AStar2D.xml b/doc/classes/AStar2D.xml index 0eff2bd560..3002e3c351 100644 --- a/doc/classes/AStar2D.xml +++ b/doc/classes/AStar2D.xml @@ -87,8 +87,10 @@ </return> <argument index="0" name="to_position" type="Vector2"> </argument> + <argument index="1" name="include_disabled" type="bool" default="false"> + </argument> <description> - Returns the ID of the closest point to [code]to_position[/code]. Returns -1 if there are no points in the points pool. + Returns the ID of the closest point to [code]to_position[/code], optionally taking disabled points into account. Returns -1 if there are no points in the points pool. </description> </method> <method name="get_closest_position_in_segment" qualifiers="const"> diff --git a/doc/classes/AcceptDialog.xml b/doc/classes/AcceptDialog.xml index 980adb4fca..8acaaa4819 100644 --- a/doc/classes/AcceptDialog.xml +++ b/doc/classes/AcceptDialog.xml @@ -67,6 +67,7 @@ <member name="dialog_text" type="String" setter="set_text" getter="get_text" default=""""> The text displayed by the dialog. </member> + <member name="window_title" type="String" setter="set_title" getter="get_title" override="true" default=""Alert!"" /> </members> <signals> <signal name="confirmed"> diff --git a/doc/classes/AnimatedTexture.xml b/doc/classes/AnimatedTexture.xml index 7e32db1bb8..5c43ce4d74 100644 --- a/doc/classes/AnimatedTexture.xml +++ b/doc/classes/AnimatedTexture.xml @@ -6,7 +6,7 @@ <description> [AnimatedTexture] is a resource format for frame-based animations, where multiple textures can be chained automatically with a predefined delay for each frame. Unlike [AnimationPlayer] or [AnimatedSprite], it isn't a [Node], but has the advantage of being usable anywhere a [Texture] resource can be used, e.g. in a [TileSet]. The playback of the animation is controlled by the [member fps] property as well as each frame's optional delay (see [method set_frame_delay]). The animation loops, i.e. it will restart at frame 0 automatically after playing the last frame. - [AnimatedTexture] currently requires all frame textures to have the same size, otherwise the bigger ones will be cropped to match the smallest one. + [AnimatedTexture] currently requires all frame textures to have the same size, otherwise the bigger ones will be cropped to match the smallest one. Also, it doesn't support [AtlasTexture]. Each frame needs to be separate image. </description> <tutorials> </tutorials> @@ -61,6 +61,7 @@ </method> </methods> <members> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> <member name="fps" type="float" setter="set_fps" getter="get_fps" default="4.0"> Animation speed in frames per second. This value defines the default time interval between two frames of the animation, and thus the overall duration of the animation loop based on the [member frames] property. A value of 0 means no predefined number of frames per second, the animation will play according to each frame's frame delay (see [method set_frame_delay]). For example, an animation with 8 frames, no frame delay and a [code]fps[/code] value of 2 will run for 4 seconds, with each frame lasting 0.5 seconds. diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml index bc64cfbb19..97da8c9980 100644 --- a/doc/classes/Animation.xml +++ b/doc/classes/Animation.xml @@ -34,7 +34,7 @@ <method name="animation_track_get_key_animation" qualifiers="const"> <return type="String"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -44,7 +44,7 @@ <method name="animation_track_insert_key"> <return type="int"> </return> - <argument index="0" name="track" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -56,7 +56,7 @@ <method name="animation_track_set_key_animation"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -68,7 +68,7 @@ <method name="audio_track_get_key_end_offset" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -78,7 +78,7 @@ <method name="audio_track_get_key_start_offset" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -88,7 +88,7 @@ <method name="audio_track_get_key_stream" qualifiers="const"> <return type="Resource"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -98,7 +98,7 @@ <method name="audio_track_insert_key"> <return type="int"> </return> - <argument index="0" name="track" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -114,7 +114,7 @@ <method name="audio_track_set_key_end_offset"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -126,7 +126,7 @@ <method name="audio_track_set_key_start_offset"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -138,7 +138,7 @@ <method name="audio_track_set_key_stream"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -150,7 +150,7 @@ <method name="bezier_track_get_key_in_handle" qualifiers="const"> <return type="Vector2"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -160,7 +160,7 @@ <method name="bezier_track_get_key_out_handle" qualifiers="const"> <return type="Vector2"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -170,7 +170,7 @@ <method name="bezier_track_get_key_value" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -180,7 +180,7 @@ <method name="bezier_track_insert_key"> <return type="int"> </return> - <argument index="0" name="track" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -196,7 +196,7 @@ <method name="bezier_track_interpolate" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="track" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -206,7 +206,7 @@ <method name="bezier_track_set_key_in_handle"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -218,7 +218,7 @@ <method name="bezier_track_set_key_out_handle"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -230,7 +230,7 @@ <method name="bezier_track_set_key_value"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -249,7 +249,7 @@ <method name="copy_track"> <return type="void"> </return> - <argument index="0" name="track" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="to_animation" type="Animation"> </argument> @@ -276,7 +276,7 @@ <method name="method_track_get_key_indices" qualifiers="const"> <return type="PoolIntArray"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time_sec" type="float"> </argument> @@ -289,7 +289,7 @@ <method name="method_track_get_name" qualifiers="const"> <return type="String"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -300,7 +300,7 @@ <method name="method_track_get_params" qualifiers="const"> <return type="Array"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -311,7 +311,7 @@ <method name="remove_track"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Removes a track by specifying the track index. @@ -320,7 +320,7 @@ <method name="track_find_key" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -333,7 +333,7 @@ <method name="track_get_interpolation_loop_wrap" qualifiers="const"> <return type="bool"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns [code]true[/code] if the track at [code]idx[/code] wraps the interpolation loop. New tracks wrap the interpolation loop by default. @@ -342,7 +342,7 @@ <method name="track_get_interpolation_type" qualifiers="const"> <return type="int" enum="Animation.InterpolationType"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns the interpolation type of a given track. @@ -351,7 +351,7 @@ <method name="track_get_key_count" qualifiers="const"> <return type="int"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns the amount of keys in a given track. @@ -360,7 +360,7 @@ <method name="track_get_key_time" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -371,7 +371,7 @@ <method name="track_get_key_transition" qualifiers="const"> <return type="float"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -382,7 +382,7 @@ <method name="track_get_key_value" qualifiers="const"> <return type="Variant"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -393,7 +393,7 @@ <method name="track_get_path" qualifiers="const"> <return type="NodePath"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Gets the path of a track. For more information on the path format, see [method track_set_path]. @@ -402,7 +402,7 @@ <method name="track_get_type" qualifiers="const"> <return type="int" enum="Animation.TrackType"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Gets the type of a track. @@ -411,7 +411,7 @@ <method name="track_insert_key"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -426,7 +426,7 @@ <method name="track_is_enabled" qualifiers="const"> <return type="bool"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns [code]true[/code] if the track at index [code]idx[/code] is enabled. @@ -435,7 +435,7 @@ <method name="track_is_imported" qualifiers="const"> <return type="bool"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns [code]true[/code] if the given track is imported. Else, return [code]false[/code]. @@ -444,7 +444,7 @@ <method name="track_move_down"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Moves a track down. @@ -453,7 +453,7 @@ <method name="track_move_to"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="to_idx" type="int"> </argument> @@ -464,7 +464,7 @@ <method name="track_move_up"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Moves a track up. @@ -473,7 +473,7 @@ <method name="track_remove_key"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -484,7 +484,7 @@ <method name="track_remove_key_at_position"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="position" type="float"> </argument> @@ -495,7 +495,7 @@ <method name="track_set_enabled"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="enabled" type="bool"> </argument> @@ -506,7 +506,7 @@ <method name="track_set_imported"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="imported" type="bool"> </argument> @@ -517,7 +517,7 @@ <method name="track_set_interpolation_loop_wrap"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="interpolation" type="bool"> </argument> @@ -528,7 +528,7 @@ <method name="track_set_interpolation_type"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="interpolation" type="int" enum="Animation.InterpolationType"> </argument> @@ -539,7 +539,7 @@ <method name="track_set_key_time"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -552,7 +552,7 @@ <method name="track_set_key_transition"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key_idx" type="int"> </argument> @@ -565,7 +565,7 @@ <method name="track_set_key_value"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="key" type="int"> </argument> @@ -578,7 +578,7 @@ <method name="track_set_path"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="path" type="NodePath"> </argument> @@ -590,7 +590,7 @@ <method name="track_swap"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="with_idx" type="int"> </argument> @@ -601,7 +601,7 @@ <method name="transform_track_insert_key"> <return type="int"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time" type="float"> </argument> @@ -618,7 +618,7 @@ <method name="transform_track_interpolate" qualifiers="const"> <return type="Array"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time_sec" type="float"> </argument> @@ -629,7 +629,7 @@ <method name="value_track_get_key_indices" qualifiers="const"> <return type="PoolIntArray"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="time_sec" type="float"> </argument> @@ -642,7 +642,7 @@ <method name="value_track_get_update_mode" qualifiers="const"> <return type="int" enum="Animation.UpdateMode"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <description> Returns the update mode of a value track. @@ -651,7 +651,7 @@ <method name="value_track_set_update_mode"> <return type="void"> </return> - <argument index="0" name="idx" type="int"> + <argument index="0" name="track_idx" type="int"> </argument> <argument index="1" name="mode" type="int" enum="Animation.UpdateMode"> </argument> diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml index 7d5d8a2db1..b4288bbfaa 100644 --- a/doc/classes/AnimationNode.xml +++ b/doc/classes/AnimationNode.xml @@ -73,7 +73,7 @@ <argument index="6" name="optimize" type="bool" default="true"> </argument> <description> - Blend another animaiton node (in case this node contains children animation nodes). This function is only useful if you inherit from [AnimationRootNode] instead, else editors will not display your node for addition. + Blend another animation node (in case this node contains children animation nodes). This function is only useful if you inherit from [AnimationRootNode] instead, else editors will not display your node for addition. </description> </method> <method name="get_caption" qualifiers="virtual"> diff --git a/doc/classes/AnimationNodeBlendSpace2D.xml b/doc/classes/AnimationNodeBlendSpace2D.xml index c71a06d931..d8ea7fea5b 100644 --- a/doc/classes/AnimationNodeBlendSpace2D.xml +++ b/doc/classes/AnimationNodeBlendSpace2D.xml @@ -125,7 +125,7 @@ </methods> <members> <member name="auto_triangles" type="bool" setter="set_auto_triangles" getter="get_auto_triangles" default="true"> - If true, the blend space is triangulated automatically. The mesh updates every time you add or remove points with [method add_blend_point] and [method remove_blend_point]. + If [code]true[/code], the blend space is triangulated automatically. The mesh updates every time you add or remove points with [method add_blend_point] and [method remove_blend_point]. </member> <member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="AnimationNodeBlendSpace2D.BlendMode" default="0"> Controls the interpolation between animations. See [enum BlendMode] constants. diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml index ab9652fcd8..09cd369bc4 100644 --- a/doc/classes/AnimationNodeStateMachinePlayback.xml +++ b/doc/classes/AnimationNodeStateMachinePlayback.xml @@ -60,6 +60,9 @@ </description> </method> </methods> + <members> + <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml index e510603281..60d04649a8 100644 --- a/doc/classes/AnimationPlayer.xml +++ b/doc/classes/AnimationPlayer.xml @@ -5,6 +5,7 @@ </brief_description> <description> An animation player is used for general-purpose playback of [Animation] resources. It contains a dictionary of animations (referenced by name) and custom blend times between their transitions. Additionally, animations can be played and blended in different channels. + Updating the target properties of animations occurs at process time. </description> <tutorials> <link>https://docs.godotengine.org/en/latest/getting_started/step_by_step/animations.html</link> @@ -28,7 +29,7 @@ <argument index="0" name="delta" type="float"> </argument> <description> - Shifts position in the animation timeline. Delta is the time in seconds to shift. Events between the current frame and [code]delta[/code] are handled. + Shifts position in the animation timeline and immediately updates the animation. [code]delta[/code] is the time in seconds to shift. Events between the current frame and [code]delta[/code] are handled. </description> </method> <method name="animation_get_next" qualifiers="const"> @@ -71,7 +72,7 @@ <argument index="0" name="animation" type="Animation"> </argument> <description> - Returns the name of [code]animation[/code] or empty string if not found. + Returns the name of [code]animation[/code] or an empty string if not found. </description> </method> <method name="get_animation" qualifiers="const"> @@ -112,6 +113,7 @@ <return type="PoolStringArray"> </return> <description> + Returns a list of the animation names that are currently queued to play. </description> </method> <method name="has_animation" qualifiers="const"> @@ -144,6 +146,7 @@ <description> Plays the animation with key [code]name[/code]. Custom speed and blend times can be set. If [code]custom_speed[/code] is negative and [code]from_end[/code] is [code]true[/code], the animation will play backwards. If the animation has been paused by [method stop], it will be resumed. Calling [method play] without arguments will also resume the animation. + [b]Note:[/b] The animation will be updated the next time the AnimationPlayer is processed. If other variables are updated at the same time this is called, they may be updated too early. To perform the update immediately, call [code]advance(0)[/code]. </description> </method> <method name="play_backwards"> @@ -156,6 +159,7 @@ <description> Plays the animation with key [code]name[/code] in reverse. If the animation has been paused by [code]stop(true)[/code], it will be resumed backwards. Calling [code]play_backwards()[/code] without arguments will also resume the animation backwards. + [b]Note:[/b] This is the same as [code]play[/code] in regards to process/update behavior. </description> </method> <method name="queue"> @@ -284,6 +288,7 @@ </signal> <signal name="caches_cleared"> <description> + Notifies when the caches have been cleared, either automatically, or manually via [method clear_caches]. </description> </signal> </signals> diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml index e1cb9056da..9a5870c73d 100644 --- a/doc/classes/Area2D.xml +++ b/doc/classes/Area2D.xml @@ -7,6 +7,7 @@ 2D area that detects [CollisionObject2D] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping). </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html</link> </tutorials> <methods> <method name="get_collision_layer_bit" qualifiers="const"> diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml index 130908b842..e09c1f4b08 100644 --- a/doc/classes/Array.xml +++ b/doc/classes/Array.xml @@ -304,6 +304,21 @@ Returns the number of elements in the array. </description> </method> + <method name="slice"> + <return type="Array"> + </return> + <argument index="0" name="begin" type="int"> + </argument> + <argument index="1" name="end" type="int"> + </argument> + <argument index="2" name="step" type="int" default="1"> + </argument> + <argument index="3" name="deep" type="bool" default="False"> + </argument> + <description> + Duplicates the subset described in the function and returns it in an array, deeply copying the array if [code]deep[/code] is [code]true[/code]. Lower and upper index are inclusive, with the [code]step[/code] describing the change between indices while slicing. + </description> + </method> <method name="sort"> <description> Sorts the array. diff --git a/doc/classes/AtlasTexture.xml b/doc/classes/AtlasTexture.xml index 5b0a06a7fb..db6ac1bc6d 100644 --- a/doc/classes/AtlasTexture.xml +++ b/doc/classes/AtlasTexture.xml @@ -4,8 +4,7 @@ Packs multiple small textures in a single, bigger one. Helps to optimize video memory costs and render calls. </brief_description> <description> - [Texture] resource aimed at managing big textures files that pack multiple smaller textures. Consists of a [Texture], a margin that defines the border width, - and a region that defines the actual area of the AtlasTexture. + [Texture] resource aimed at managing big textures files that pack multiple smaller textures. Consists of a [Texture], a margin that defines the border width, and a region that defines the actual area of the AtlasTexture. </description> <tutorials> </tutorials> @@ -18,6 +17,7 @@ <member name="filter_clip" type="bool" setter="set_filter_clip" getter="has_filter_clip" default="false"> If [code]true[/code], clips the area outside of the region to avoid bleeding of the surrounding texture pixels. </member> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> <member name="margin" type="Rect2" setter="set_margin" getter="get_margin" default="Rect2( 0, 0, 0, 0 )"> The margin around the region. The [Rect2]'s [member Rect2.size] parameter ("w" and "h" in the editor) resizes the texture so it fits within the margin. </member> diff --git a/doc/classes/BackBufferCopy.xml b/doc/classes/BackBufferCopy.xml index 9bb32e0444..945af0c701 100644 --- a/doc/classes/BackBufferCopy.xml +++ b/doc/classes/BackBufferCopy.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="BackBufferCopy" inherits="Node2D" category="Core" version="3.2"> <brief_description> - Copies a region of the screen (or the whole screen) to a buffer so it can be accessed with [code]SCREEN_TEXTURE[/code] in the [code]texture()[/code] function. + Copies a region of the screen (or the whole screen) to a buffer so it can be accessed in your shader scripts through the [code]texture(SCREEN_TEXTURE, ...)[/code] function. </brief_description> <description> - Node for back-buffering the currently-displayed screen. The region defined in the BackBufferCopy node is bufferized with the content of the screen it covers, or the entire screen according to the copy mode set. Use [code]SCREEN_TEXTURE[/code] in the [code]texture()[/code] function to access the buffer. + Node for back-buffering the currently-displayed screen. The region defined in the BackBufferCopy node is bufferized with the content of the screen it covers, or the entire screen according to the copy mode set. Use the [code]texture(SCREEN_TEXTURE, ...)[/code] function in your shader scripts to access the buffer. </description> <tutorials> </tutorials> diff --git a/doc/classes/BaseButton.xml b/doc/classes/BaseButton.xml index 9d1c80d3be..b4f4b21afd 100644 --- a/doc/classes/BaseButton.xml +++ b/doc/classes/BaseButton.xml @@ -54,6 +54,7 @@ <member name="enabled_focus_mode" type="int" setter="set_enabled_focus_mode" getter="get_enabled_focus_mode" enum="Control.FocusMode" default="2"> Focus access mode to use when switching between enabled/disabled (see [member Control.focus_mode] and [member disabled]). </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="group" type="ButtonGroup" setter="set_button_group" getter="get_button_group"> [ButtonGroup] associated to the button. </member> diff --git a/doc/classes/BoxContainer.xml b/doc/classes/BoxContainer.xml index 77db8b74db..ae0a20b8f6 100644 --- a/doc/classes/BoxContainer.xml +++ b/doc/classes/BoxContainer.xml @@ -23,6 +23,7 @@ <member name="alignment" type="int" setter="set_alignment" getter="get_alignment" enum="BoxContainer.AlignMode" default="0"> The alignment of the container's children (must be one of [constant ALIGN_BEGIN], [constant ALIGN_CENTER] or [constant ALIGN_END]). </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="1" /> </members> <constants> <constant name="ALIGN_BEGIN" value="0" enum="AlignMode"> diff --git a/doc/classes/ButtonGroup.xml b/doc/classes/ButtonGroup.xml index cd2a8d7307..2c1f3163e0 100644 --- a/doc/classes/ButtonGroup.xml +++ b/doc/classes/ButtonGroup.xml @@ -25,6 +25,9 @@ </description> </method> </methods> + <members> + <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/Camera2D.xml b/doc/classes/Camera2D.xml index 16fb483249..6f1627e296 100644 --- a/doc/classes/Camera2D.xml +++ b/doc/classes/Camera2D.xml @@ -51,6 +51,7 @@ <argument index="0" name="margin" type="int" enum="Margin"> </argument> <description> + Returns the specified margin. See also [member drag_margin_bottom], [member drag_margin_top], [member drag_margin_left], and [member drag_margin_right]. </description> </method> <method name="get_limit" qualifiers="const"> @@ -59,6 +60,7 @@ <argument index="0" name="margin" type="int" enum="Margin"> </argument> <description> + Returns the specified camera limit. See also [member limit_bottom], [member limit_top], [member limit_left], and [member limit_right]. </description> </method> <method name="make_current"> @@ -84,6 +86,7 @@ <argument index="1" name="drag_margin" type="float"> </argument> <description> + Sets the specified margin. See also [member drag_margin_bottom], [member drag_margin_top], [member drag_margin_left], and [member drag_margin_right]. </description> </method> <method name="set_limit"> @@ -94,6 +97,7 @@ <argument index="1" name="limit" type="int"> </argument> <description> + Sets the specified camera limit. See also [member limit_bottom], [member limit_top], [member limit_left], and [member limit_right]. </description> </method> </methods> @@ -154,13 +158,14 @@ </member> <member name="offset_h" type="float" setter="set_h_offset" getter="get_h_offset" default="0.0"> The horizontal offset of the camera, relative to the drag margins. - [b]Note:[/b] Offset H is used only to force offset relative to margins. It's not updated in any way if drag margins are enabled and can be used to set inital offset. + [b]Note:[/b] Offset H is used only to force offset relative to margins. It's not updated in any way if drag margins are enabled and can be used to set initial offset. </member> <member name="offset_v" type="float" setter="set_v_offset" getter="get_v_offset" default="0.0"> The vertical offset of the camera, relative to the drag margins. [b]Note:[/b] Used the same as [member offset_h]. </member> <member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="Camera2D.Camera2DProcessMode" default="1"> + The camera's process callback. See [enum Camera2DProcessMode]. </member> <member name="rotating" type="bool" setter="set_rotating" getter="is_rotating" default="false"> If [code]true[/code], the camera rotates with the target. @@ -183,8 +188,10 @@ The camera's position takes into account vertical/horizontal offsets and the screen size. </constant> <constant name="CAMERA2D_PROCESS_PHYSICS" value="0" enum="Camera2DProcessMode"> + The camera updates with the [code]_physics_process[/code] callback. </constant> <constant name="CAMERA2D_PROCESS_IDLE" value="1" enum="Camera2DProcessMode"> + The camera updates with the [code]_process[/code] callback. </constant> </constants> </class> diff --git a/doc/classes/CameraFeed.xml b/doc/classes/CameraFeed.xml index 6d7757f9f5..f490faf369 100644 --- a/doc/classes/CameraFeed.xml +++ b/doc/classes/CameraFeed.xml @@ -14,28 +14,30 @@ <return type="int"> </return> <description> - Gets the unique ID for this feed. + Returns the unique ID for this feed. </description> </method> <method name="get_name" qualifiers="const"> <return type="String"> </return> <description> - Gets the camera's name. + Returns the camera's name. </description> </method> <method name="get_position" qualifiers="const"> <return type="int" enum="CameraFeed.FeedPosition"> </return> <description> - Position of camera on the device. + Returns the position of camera on the device. </description> </method> </methods> <members> <member name="feed_is_active" type="bool" setter="set_active" getter="is_active" default="false"> + If [code]true[/code], the feed is active. </member> <member name="feed_transform" type="Transform2D" setter="set_transform" getter="get_transform" default="Transform2D( 1, 0, 0, -1, 0, 1 )"> + The transform applied to the camera's image. </member> </members> <constants> diff --git a/doc/classes/CameraTexture.xml b/doc/classes/CameraTexture.xml index 15da46885f..e2bff76998 100644 --- a/doc/classes/CameraTexture.xml +++ b/doc/classes/CameraTexture.xml @@ -17,6 +17,7 @@ <member name="camera_is_active" type="bool" setter="set_camera_active" getter="get_camera_active" default="false"> Convenience property that gives access to the active property of the [CameraFeed]. </member> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> <member name="which_feed" type="int" setter="set_which_feed" getter="get_which_feed" enum="CameraServer.FeedImage" default="0"> Which image within the [CameraFeed] we want access to, important if the camera image is split in a Y and CbCr component. </member> diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml index 87b8f5c83d..8372d15324 100644 --- a/doc/classes/CanvasItem.xml +++ b/doc/classes/CanvasItem.xml @@ -22,6 +22,28 @@ Called (if exists) to draw the canvas item. </description> </method> + <method name="draw_arc"> + <return type="void"> + </return> + <argument index="0" name="center" type="Vector2"> + </argument> + <argument index="1" name="radius" type="float"> + </argument> + <argument index="2" name="start_angle" type="float"> + </argument> + <argument index="3" name="end_angle" type="float"> + </argument> + <argument index="4" name="point_count" type="int"> + </argument> + <argument index="5" name="color" type="Color"> + </argument> + <argument index="6" name="width" type="float" default="1.0"> + </argument> + <argument index="7" name="antialiased" type="bool" default="false"> + </argument> + <description> + </description> + </method> <method name="draw_char"> <return type="float"> </return> @@ -341,6 +363,7 @@ <return type="void"> </return> <description> + Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations. </description> </method> <method name="get_canvas" qualifiers="const"> diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml new file mode 100644 index 0000000000..e03229abe1 --- /dev/null +++ b/doc/classes/CharFXTransform.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="CharFXTransform" inherits="Reference" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + <method name="get_value_or"> + <return type="Variant"> + </return> + <argument index="0" name="key" type="String"> + </argument> + <argument index="1" name="default_value" type="Variant"> + </argument> + <description> + </description> + </method> + </methods> + <members> + <member name="absolute_index" type="int" setter="set_absolute_index" getter="get_absolute_index" default="0"> + </member> + <member name="character" type="int" setter="set_character" getter="get_character" default="0"> + </member> + <member name="color" type="Color" setter="set_color" getter="get_color" default="Color( 0, 0, 0, 1 )"> + </member> + <member name="elapsed_time" type="float" setter="set_elapsed_time" getter="get_elapsed_time" default="0.0"> + </member> + <member name="env" type="Dictionary" setter="set_environment" getter="get_environment" default="{}"> + </member> + <member name="offset" type="Vector2" setter="set_offset" getter="get_offset" default="Vector2( 0, 0 )"> + </member> + <member name="relative_index" type="int" setter="set_relative_index" getter="get_relative_index" default="0"> + </member> + <member name="visible" type="bool" setter="set_visibility" getter="is_visible" default="true"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/CheckBox.xml b/doc/classes/CheckBox.xml index 93c42a85a3..97ef4dbe95 100644 --- a/doc/classes/CheckBox.xml +++ b/doc/classes/CheckBox.xml @@ -10,6 +10,10 @@ </tutorials> <methods> </methods> + <members> + <member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" /> + <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> + </members> <constants> </constants> <theme_items> diff --git a/doc/classes/CheckButton.xml b/doc/classes/CheckButton.xml index 4744894fc1..5b867b6a3a 100644 --- a/doc/classes/CheckButton.xml +++ b/doc/classes/CheckButton.xml @@ -10,6 +10,10 @@ </tutorials> <methods> </methods> + <members> + <member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" /> + <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> + </members> <constants> </constants> <theme_items> diff --git a/doc/classes/ClippedCamera.xml b/doc/classes/ClippedCamera.xml index f6a2a3bc11..9eda79bbae 100644 --- a/doc/classes/ClippedCamera.xml +++ b/doc/classes/ClippedCamera.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ClippedCamera" inherits="Camera" category="Core" version="3.2"> <brief_description> + A [Camera] that includes collision. </brief_description> <description> + This node extends [Camera] to add collisions with [Area] and/or [PhysicsBody] nodes. The camera cannot move through colliding objects. </description> <tutorials> </tutorials> @@ -13,6 +15,7 @@ <argument index="0" name="node" type="Object"> </argument> <description> + Adds a collision exception so the camera does not collide with the specified node. </description> </method> <method name="add_exception_rid"> @@ -21,18 +24,21 @@ <argument index="0" name="rid" type="RID"> </argument> <description> + Adds a collision exception so the camera does not collide with the specified [RID]. </description> </method> <method name="clear_exceptions"> <return type="void"> </return> <description> + Removes all collision exceptions. </description> </method> <method name="get_clip_offset" qualifiers="const"> <return type="float"> </return> <description> + Returns the distance the camera has been offset due to a collision. </description> </method> <method name="get_collision_mask_bit" qualifiers="const"> @@ -41,6 +47,8 @@ <argument index="0" name="bit" type="int"> </argument> <description> + Returns [code]true[/code] if the specified bit index is on. + [b]Note:[/b] Bit indices range from 0-19. </description> </method> <method name="remove_exception"> @@ -49,6 +57,7 @@ <argument index="0" name="node" type="Object"> </argument> <description> + Removes a collision exception with the specified node. </description> </method> <method name="remove_exception_rid"> @@ -57,6 +66,7 @@ <argument index="0" name="rid" type="RID"> </argument> <description> + Removes a collision exception with the specified [RID]. </description> </method> <method name="set_collision_mask_bit"> @@ -67,25 +77,34 @@ <argument index="1" name="value" type="bool"> </argument> <description> + Sets the specified bit index to the [code]value[/code]. + [b]Note:[/b] Bit indices range from 0-19. </description> </method> </methods> <members> <member name="clip_to_areas" type="bool" setter="set_clip_to_areas" getter="is_clip_to_areas_enabled" default="false"> + If [code]true[/code], the camera stops on contact with [Area]s. </member> <member name="clip_to_bodies" type="bool" setter="set_clip_to_bodies" getter="is_clip_to_bodies_enabled" default="true"> + If [code]true[/code], the camera stops on contact with [PhysicsBody]s. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> + The camera's collision mask. Only objects in at least one collision layer matching the mask will be detected. </member> <member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.0"> + The camera's collision margin. The camera can't get closer than this distance to a colliding object. </member> <member name="process_mode" type="int" setter="set_process_mode" getter="get_process_mode" enum="ClippedCamera.ProcessMode" default="0"> + The camera's process callback. See [enum ProcessMode]. </member> </members> <constants> <constant name="CLIP_PROCESS_PHYSICS" value="0" enum="ProcessMode"> + The camera updates with the [code]_physics_process[/code] callback. </constant> <constant name="CLIP_PROCESS_IDLE" value="1" enum="ProcessMode"> + The camera updates with the [code]_process[/code] callback. </constant> </constants> </class> diff --git a/doc/classes/ColorPicker.xml b/doc/classes/ColorPicker.xml index b62eb443d9..07ce76fdb2 100644 --- a/doc/classes/ColorPicker.xml +++ b/doc/classes/ColorPicker.xml @@ -51,8 +51,10 @@ [b]Note:[/b] Cannot be enabled if raw mode is on. </member> <member name="presets_enabled" type="bool" setter="set_presets_enabled" getter="are_presets_enabled" default="true"> + If [code]true[/code], the "add preset" button is enabled. </member> <member name="presets_visible" type="bool" setter="set_presets_visible" getter="are_presets_visible" default="true"> + If [code]true[/code], saved color presets are visible. </member> <member name="raw_mode" type="bool" setter="set_raw_mode" getter="is_raw_mode" default="false"> If [code]true[/code], allows the color R, G, B component values to go beyond 1.0, which can be used for certain special operations that require it (like tinting without darkening or rendering sprites in HDR). @@ -97,6 +99,8 @@ </theme_item> <theme_item name="margin" type="int" default="4"> </theme_item> + <theme_item name="overbright_indicator" type="Texture"> + </theme_item> <theme_item name="preset_bg" type="Texture"> </theme_item> <theme_item name="screen_picker" type="Texture"> diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml index 7aeae61ebf..e8c78fb6bf 100644 --- a/doc/classes/ColorPickerButton.xml +++ b/doc/classes/ColorPickerButton.xml @@ -31,6 +31,7 @@ <member name="edit_alpha" type="bool" setter="set_edit_alpha" getter="is_editing_alpha" default="true"> If [code]true[/code], the alpha channel in the displayed [ColorPicker] will be visible. </member> + <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> </members> <signals> <signal name="color_changed"> @@ -40,6 +41,10 @@ Emitted when the color changes. </description> </signal> + <signal name="picker_created"> + <description> + </description> + </signal> <signal name="popup_closed"> <description> </description> diff --git a/doc/classes/ConfigFile.xml b/doc/classes/ConfigFile.xml index 775ad4c922..56f54e4434 100644 --- a/doc/classes/ConfigFile.xml +++ b/doc/classes/ConfigFile.xml @@ -39,6 +39,16 @@ Deletes the specified section along with all the key-value pairs inside. </description> </method> + <method name="erase_section_key"> + <return type="void"> + </return> + <argument index="0" name="section" type="String"> + </argument> + <argument index="1" name="key" type="String"> + </argument> + <description> + </description> + </method> <method name="get_section_keys" qualifiers="const"> <return type="PoolStringArray"> </return> diff --git a/doc/classes/ConfirmationDialog.xml b/doc/classes/ConfirmationDialog.xml index 6124bc29b0..8a8d1ed9e8 100644 --- a/doc/classes/ConfirmationDialog.xml +++ b/doc/classes/ConfirmationDialog.xml @@ -17,6 +17,10 @@ </description> </method> </methods> + <members> + <member name="rect_min_size" type="Vector2" setter="set_custom_minimum_size" getter="get_custom_minimum_size" override="true" default="Vector2( 200, 70 )" /> + <member name="window_title" type="String" setter="set_title" getter="get_title" override="true" default=""Please Confirm..."" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml index 1eeef92ccc..75d5a72fb1 100644 --- a/doc/classes/Control.xml +++ b/doc/classes/Control.xml @@ -22,7 +22,7 @@ </return> <description> Virtual method to be implemented by the user. Returns whether [method _gui_input] should not be called for children controls outside this control's rectangle. Input will be clipped to the Rect of this [Control]. Similar to [member rect_clip_content], but doesn't affect visibility. - If not overriden, defaults to [code]false[/code]. + If not overridden, defaults to [code]false[/code]. </description> </method> <method name="_get_minimum_size" qualifiers="virtual"> @@ -30,7 +30,7 @@ </return> <description> Virtual method to be implemented by the user. Returns the minimum size for this control. Alternative to [member rect_min_size] for controlling minimum size via code. The actual minimum size will be the max value of these two (in each axis separately). - If not overriden, defaults to [constant Vector2.ZERO]. + If not overridden, defaults to [constant Vector2.ZERO]. </description> </method> <method name="_gui_input" qualifiers="virtual"> @@ -62,7 +62,7 @@ </argument> <description> Virtual method to be implemented by the user. Returns a [Control] node that should be used as a tooltip instead of the default one. Use [code]for_text[/code] parameter to determine what text the tooltip should contain (likely the contents of [member hint_tooltip]). - The returned node must be of type [Control] or Control-derieved. It can have child nodes of any type. It is freed when the tooltip disappears, so make sure you always provide a new instance, not e.g. a node from scene. When null or non-Control node is returned, the default tooltip will be used instead. + The returned node must be of type [Control] or Control-derieved. It can have child nodes of any type. It is freed when the tooltip disappears, so make sure you always provide a new instance, not e.g. a node from scene. When [code]null[/code] or non-Control node is returned, the default tooltip will be used instead. [b]Note:[/b] The tooltip is shrunk to minimal size. If you want to ensure it's fully visible, you might want to set its [member rect_min_size] to some non-zero value. Example of usage with custom-constructed node: [codeblock] @@ -395,7 +395,7 @@ <return type="void"> </return> <description> - Creates an [InputEventMouseButton] that attempts to click the control. If the event is received, the control aquires focus. + Creates an [InputEventMouseButton] that attempts to click the control. If the event is received, the control acquires focus. [codeblock] func _process(delta): grab_click_focus() #when clicking another Control node, this node will be clicked instead @@ -503,7 +503,7 @@ </argument> <description> Virtual method to be implemented by the user. Returns whether the given [code]point[/code] is inside this control. - If not overriden, default behavior is checking if the point is within control's Rect. + If not overridden, default behavior is checking if the point is within control's Rect. [b]Node:[/b] If you want to check if a point is inside the control, you can use [code]get_rect().has_point(point)[/code]. </description> </method> @@ -564,7 +564,7 @@ <description> Sets the anchor identified by [code]margin[/code] constant from [enum Margin] enum to value [code]anchor[/code]. A setter method for [member anchor_bottom], [member anchor_left], [member anchor_right] and [member anchor_top]. If [code]keep_margin[/code] is [code]true[/code], margins aren't updated after this operation. - If [code]push_opposite_anchor[/code] is [code]true[/code] and the opposite anchor overlaps this anchor, the opposite one will have its value overriden. For example, when setting left anchor to 1 and the right anchor has value of 0.5, the right anchor will also get value of 1. If [code]push_opposite_anchor[/code] was [code]false[/code], the left anchor would get value 0.5. + If [code]push_opposite_anchor[/code] is [code]true[/code] and the opposite anchor overlaps this anchor, the opposite one will have its value overridden. For example, when setting left anchor to 1 and the right anchor has value of 0.5, the right anchor will also get value of 1. If [code]push_opposite_anchor[/code] was [code]false[/code], the left anchor would get value 0.5. </description> </method> <method name="set_anchor_and_margin"> @@ -652,7 +652,18 @@ <argument index="0" name="control" type="Control"> </argument> <description> - Shows the given control at the mouse pointer. A good time to call this method is in [method get_drag_data]. + Shows the given control at the mouse pointer. A good time to call this method is in [method get_drag_data]. The control must not be in the scene tree. + [codeblock] + export (Color, RGBA) var color = Color(1, 0, 0, 1) + + func get_drag_data(position): + # Use a control that is not in the tree + var cpb = ColorPickerButton.new() + cpb.color = color + cpb.rect_size = Vector2(50, 50) + set_drag_preview(cpb) + return color + [/codeblock] </description> </method> <method name="set_end"> diff --git a/doc/classes/Crypto.xml b/doc/classes/Crypto.xml index bb852f5fff..bce7895973 100644 --- a/doc/classes/Crypto.xml +++ b/doc/classes/Crypto.xml @@ -1,8 +1,27 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Crypto" inherits="Reference" category="Core" version="3.2"> <brief_description> + Access to advanced cryptographic functionalities. </brief_description> <description> + The Crypto class allows you to access some more advanced cryptographic functionalities in Godot. + For now, this includes generating cryptographically secure random bytes, and RSA keys and self-signed X509 certificates generation. More functionalities are planned for future releases. + [codeblock] + extends Node + + var crypto = Crypto.new() + var key = CryptoKey.new() + var cert = X509Certificate.new() + + func _ready(): + # Generate new RSA key. + key = crypto.generate_rsa(4096) + # Generate new self-signed certificate with the given key. + cert = crypto.generate_self_signed_certificate(key, "CN=mydomain.com,O=My Game Company,C=IT") + # Save key and certificate in the user folder. + key.save("user://generated.key") + cert.save("user://generated.crt") + [/codeblock] </description> <tutorials> </tutorials> @@ -13,6 +32,7 @@ <argument index="0" name="size" type="int"> </argument> <description> + Generates a [PoolByteArray] of cryptographically secure random bytes with given [code]size[/code]. </description> </method> <method name="generate_rsa"> @@ -21,6 +41,7 @@ <argument index="0" name="size" type="int"> </argument> <description> + Generates an RSA [CryptoKey] that can be used for creating self-signed certificates and passed to [method StreamPeerSSL.accept_stream]. </description> </method> <method name="generate_self_signed_certificate"> @@ -35,6 +56,15 @@ <argument index="3" name="not_after" type="String" default=""20340101000000""> </argument> <description> + Generates a self-signed [X509Certificate] from the given [CryptoKey] and [code]issuer_name[/code]. The certificate validity will be defined by [code]not_before[/code] and [code]not_after[/code] (first valid date and last valid date). The [code]issuer_name[/code] must contain at least "CN=" (common name, i.e. the domain name), "O=" (organization, i.e. your company name), "C=" (country, i.e. 2 lettered ISO-3166 code of the country the organization is based in). + A small example to generate an RSA key and a X509 self-signed certificate. + [codeblock] + var crypto = Crypto.new() + # Generate 4096 bits RSA key. + var key = crypto.generate_rsa(4096) + # Generate self-signed certificate using the given key. + var cert = crypto.generate_self_signed_certificate(key, "CN=example.com,O=A Game Company,C=IT") + [/codeblock] </description> </method> </methods> diff --git a/doc/classes/CryptoKey.xml b/doc/classes/CryptoKey.xml index d3cd485a5f..8c825c9e1c 100644 --- a/doc/classes/CryptoKey.xml +++ b/doc/classes/CryptoKey.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="CryptoKey" inherits="Resource" category="Core" version="3.2"> <brief_description> + A cryptographic key (RSA). </brief_description> <description> + The CryptoKey class represents a cryptographic key. Keys can be loaded and saved like any other [Resource]. + They can be used to generate a self-signed [X509Certificate] via [method Crypto.generate_self_signed_certificate] and as private key in [method StreamPeerSSL.accept_stream] along with the appropriate certificate. </description> <tutorials> </tutorials> @@ -13,6 +16,7 @@ <argument index="0" name="path" type="String"> </argument> <description> + Loads a key from [code]path[/code] ("*.key" file). </description> </method> <method name="save"> @@ -21,6 +25,7 @@ <argument index="0" name="path" type="String"> </argument> <description> + Saves a key to the given [code]path[/code] (should be a "*.key" file). </description> </method> </methods> diff --git a/doc/classes/DirectionalLight.xml b/doc/classes/DirectionalLight.xml index 687e7519b2..502256ae63 100644 --- a/doc/classes/DirectionalLight.xml +++ b/doc/classes/DirectionalLight.xml @@ -39,6 +39,7 @@ <member name="directional_shadow_split_3" type="float" setter="set_param" getter="get_param" default="0.5"> The distance from shadow split 2 to split 3. Relative to [member directional_shadow_max_distance]. Only used when [member directional_shadow_mode] is [code]SHADOW_PARALLEL_4_SPLITS[/code]. </member> + <member name="shadow_bias" type="float" setter="set_param" getter="get_param" override="true" default="0.1" /> </members> <constants> <constant name="SHADOW_ORTHOGONAL" value="0" enum="ShadowMode"> diff --git a/doc/classes/EditorFeatureProfile.xml b/doc/classes/EditorFeatureProfile.xml index 21da9fd454..92622cc25d 100644 --- a/doc/classes/EditorFeatureProfile.xml +++ b/doc/classes/EditorFeatureProfile.xml @@ -36,7 +36,7 @@ </return> <argument index="0" name="class_name" type="String"> </argument> - <argument index="1" name="arg1" type="String"> + <argument index="1" name="property" type="String"> </argument> <description> </description> @@ -92,7 +92,7 @@ </argument> <argument index="1" name="property" type="String"> </argument> - <argument index="2" name="arg2" type="bool"> + <argument index="2" name="disable" type="bool"> </argument> <description> </description> diff --git a/doc/classes/EditorFileDialog.xml b/doc/classes/EditorFileDialog.xml index c9f55afbaf..6b1215949a 100644 --- a/doc/classes/EditorFileDialog.xml +++ b/doc/classes/EditorFileDialog.xml @@ -52,6 +52,7 @@ <member name="current_path" type="String" setter="set_current_path" getter="get_current_path" default=""res://""> The file system path in the address bar. </member> + <member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok" override="true" default="false" /> <member name="disable_overwrite_warning" type="bool" setter="set_disable_overwrite_warning" getter="is_overwrite_warning_disabled" default="false"> If [code]true[/code], the [EditorFileDialog] will not warn the user before overwriting files. </member> @@ -61,9 +62,11 @@ <member name="mode" type="int" setter="set_mode" getter="get_mode" enum="EditorFileDialog.Mode" default="4"> The purpose of the [EditorFileDialog], which defines the allowed behaviors. </member> + <member name="resizable" type="bool" setter="set_resizable" getter="get_resizable" override="true" default="true" /> <member name="show_hidden_files" type="bool" setter="set_show_hidden_files" getter="is_showing_hidden_files" default="false"> If [code]true[/code], hidden files and directories will be visible in the [EditorFileDialog]. </member> + <member name="window_title" type="String" setter="set_title" getter="get_title" override="true" default=""Save a File"" /> </members> <signals> <signal name="dir_selected"> diff --git a/doc/classes/EditorInspector.xml b/doc/classes/EditorInspector.xml index cf14183099..450d2bf64c 100644 --- a/doc/classes/EditorInspector.xml +++ b/doc/classes/EditorInspector.xml @@ -14,6 +14,9 @@ </description> </method> </methods> + <members> + <member name="scroll_horizontal_enabled" type="bool" setter="set_enable_h_scroll" getter="is_h_scroll_enabled" override="true" default="false" /> + </members> <signals> <signal name="object_id_selected"> <argument index="0" name="id" type="int"> diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml index cab5af3985..a713e06585 100644 --- a/doc/classes/EditorInspectorPlugin.xml +++ b/doc/classes/EditorInspectorPlugin.xml @@ -6,7 +6,7 @@ <description> This plugins allows adding custom property editors to [EditorInspector]. Plugins are registered via [method EditorPlugin.add_inspector_plugin]. - When an object is edited, the [method can_handle] function is called and must return true if the object type is supported. + When an object is edited, the [method can_handle] function is called and must return [code]true[/code] if the object type is supported. If supported, the function [method parse_begin] will be called, allowing to place custom controls at the beginning of the class. Subsequently, the [method parse_category] and [method parse_property] are called for every category and property. They offer the ability to add custom controls to the inspector too. Finally [method parse_end] will be called. @@ -54,7 +54,7 @@ <argument index="0" name="object" type="Object"> </argument> <description> - Returns true if this object can be handled by this plugin. + Returns [code]true[/code] if this object can be handled by this plugin. </description> </method> <method name="parse_begin" qualifiers="virtual"> diff --git a/doc/classes/EditorInterface.xml b/doc/classes/EditorInterface.xml index 4f7a6d89a9..20ae0f3391 100644 --- a/doc/classes/EditorInterface.xml +++ b/doc/classes/EditorInterface.xml @@ -25,6 +25,12 @@ Returns the main container of Godot editor's window. You can use it, for example, to retrieve the size of the container and place your controls accordingly. </description> </method> + <method name="get_current_path" qualifiers="const"> + <return type="String"> + </return> + <description> + </description> + </method> <method name="get_edited_scene_root"> <return type="Node"> </return> diff --git a/doc/classes/EditorSpatialGizmo.xml b/doc/classes/EditorSpatialGizmo.xml index 03a274e23e..22e4a21757 100644 --- a/doc/classes/EditorSpatialGizmo.xml +++ b/doc/classes/EditorSpatialGizmo.xml @@ -62,7 +62,7 @@ </argument> <argument index="1" name="billboard" type="bool" default="false"> </argument> - <argument index="2" name="skeleton" type="RID"> + <argument index="2" name="skeleton" type="SkinReference" default="null"> </argument> <argument index="3" name="material" type="Material" default="null"> </argument> diff --git a/doc/classes/EditorSpinSlider.xml b/doc/classes/EditorSpinSlider.xml new file mode 100644 index 0000000000..bf01ebfe82 --- /dev/null +++ b/doc/classes/EditorSpinSlider.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="EditorSpinSlider" inherits="Range" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="flat" type="bool" setter="set_flat" getter="is_flat" default="false"> + </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> + <member name="label" type="String" setter="set_label" getter="get_label" default=""""> + </member> + <member name="read_only" type="bool" setter="set_read_only" getter="is_read_only" default="false"> + </member> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/EditorVCSInterface.xml b/doc/classes/EditorVCSInterface.xml index 2f58e6d54e..f67c1c9eb5 100644 --- a/doc/classes/EditorVCSInterface.xml +++ b/doc/classes/EditorVCSInterface.xml @@ -38,7 +38,7 @@ <return type="bool"> </return> <description> - Returns [code]true[/code] if the VCS addon has been intialized, else returns [code]false[/code]. + Returns [code]true[/code] if the VCS addon has been initialized, else returns [code]false[/code]. </description> </method> <method name="get_modified_files_data"> @@ -65,7 +65,7 @@ <return type="String"> </return> <description> - Return the name of the VCS if the VCS has been intialized, else return an empty string. + Return the name of the VCS if the VCS has been initialized, else return an empty string. </description> </method> <method name="initialize"> diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml index 9a943aba51..2b44eb81b1 100644 --- a/doc/classes/Environment.xml +++ b/doc/classes/Environment.xml @@ -177,6 +177,7 @@ Enables fog's light transmission. If enabled, lets reflections light to be transmitted by the fog. </member> <member name="glow_bicubic_upscale" type="bool" setter="set_glow_bicubic_upscale" getter="is_glow_bicubic_upscale_enabled" default="false"> + Smooths out blockiness created by sampling higher levels. </member> <member name="glow_blend_mode" type="int" setter="set_glow_blend_mode" getter="get_glow_blend_mode" enum="Environment.GlowBlendMode" default="2"> Glow blending mode. @@ -193,10 +194,10 @@ Bleed scale of the HDR glow. </member> <member name="glow_hdr_threshold" type="float" setter="set_glow_hdr_bleed_threshold" getter="get_glow_hdr_bleed_threshold" default="1.0"> - Bleed threshold of the HDR glow. + Bleed threshold of the HDR glow. In GLES2, this needs to be below 1.0 in order for glow to be visible, a default value of 0.9 works well. </member> <member name="glow_intensity" type="float" setter="set_glow_intensity" getter="get_glow_intensity" default="0.8"> - Glow intensity. + Glow intensity. In GLES2, this should be increased to 1.5 by default to compensate for not using HDR. </member> <member name="glow_levels/1" type="bool" setter="set_glow_level" getter="is_glow_level_enabled" default="false"> First level of glow (most local). @@ -220,7 +221,7 @@ Seventh level of glow (most global). </member> <member name="glow_strength" type="float" setter="set_glow_strength" getter="get_glow_strength" default="1.0"> - Glow strength. + Glow strength. In GLES2, this should be increased to 1.3 by default to compensate for not using HDR. </member> <member name="ss_reflections_depth_tolerance" type="float" setter="set_ssr_depth_tolerance" getter="get_ssr_depth_tolerance" default="0.2"> </member> diff --git a/doc/classes/FileDialog.xml b/doc/classes/FileDialog.xml index 4f1e8cc309..d8f4ca21c8 100644 --- a/doc/classes/FileDialog.xml +++ b/doc/classes/FileDialog.xml @@ -67,6 +67,7 @@ <member name="current_path" type="String" setter="set_current_path" getter="get_current_path" default=""res://""> The currently selected file path of the file dialog. </member> + <member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok" override="true" default="false" /> <member name="filters" type="PoolStringArray" setter="set_filters" getter="get_filters" default="PoolStringArray( )"> The available file type filters. For example, this shows only [code].png[/code] and [code].gd[/code] files: [code]set_filters(PoolStringArray(["*.png ; PNG Images","*.gd ; GDScript Files"]))[/code]. </member> @@ -79,6 +80,7 @@ <member name="show_hidden_files" type="bool" setter="set_show_hidden_files" getter="is_showing_hidden_files" default="false"> If [code]true[/code], the dialog will show hidden files. </member> + <member name="window_title" type="String" setter="set_title" getter="get_title" override="true" default=""Save a File"" /> </members> <signals> <signal name="dir_selected"> diff --git a/doc/classes/Font.xml b/doc/classes/Font.xml index 6ec1545bc7..f7de79913c 100644 --- a/doc/classes/Font.xml +++ b/doc/classes/Font.xml @@ -82,7 +82,7 @@ </return> <argument index="0" name="string" type="String"> </argument> - <argument index="1" name="p_width" type="float"> + <argument index="1" name="width" type="float"> </argument> <description> </description> diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml index 3cc40b7cef..80e9b152ef 100644 --- a/doc/classes/GraphEdit.xml +++ b/doc/classes/GraphEdit.xml @@ -171,6 +171,8 @@ </method> </methods> <members> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> + <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" /> <member name="right_disconnects" type="bool" setter="set_right_disconnects" getter="is_right_disconnects_enabled" default="false"> If [code]true[/code], enables disconnection of existing connections in the GraphEdit by dragging the right end. </member> diff --git a/doc/classes/GridContainer.xml b/doc/classes/GridContainer.xml index 08832c08b4..e8c764f412 100644 --- a/doc/classes/GridContainer.xml +++ b/doc/classes/GridContainer.xml @@ -4,7 +4,8 @@ Grid container used to arrange elements in a grid like layout. </brief_description> <description> - Grid container will arrange its children in a grid like structure, the grid columns are specified using the [member columns] property and the number of rows will be equal to the number of children in the container divided by the number of columns. For example, if the container has 5 children, and 2 columns, there will be 3 rows in the container. Notice that grid layout will preserve the columns and rows for every size of the container. + Grid container will arrange its children in a grid like structure, the grid columns are specified using the [member columns] property and the number of rows will be equal to the number of children in the container divided by the number of columns. For example, if the container has 5 children, and 2 columns, there will be 3 rows in the container. + Notice that grid layout will preserve the columns and rows for every size of the container, and that empty columns will be expanded automatically. </description> <tutorials> </tutorials> @@ -14,6 +15,7 @@ <member name="columns" type="int" setter="set_columns" getter="get_columns" default="1"> The number of columns in the [GridContainer]. If modified, [GridContainer] reorders its children to accommodate the new layout. </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="1" /> </members> <constants> </constants> diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml index c91ddccaa4..52e4b94051 100644 --- a/doc/classes/HTTPClient.xml +++ b/doc/classes/HTTPClient.xml @@ -44,6 +44,7 @@ </return> <description> Returns the response's body length. + [b]Note:[/b] Some Web servers may not send a body length. In this case, the value returned will be [code]-1[/code]. If using chunked transfer encoding, the body length will also be [code]-1[/code]. </description> </method> <method name="get_response_code" qualifiers="const"> @@ -69,7 +70,7 @@ [codeblock] { "content-length": 12, - "Content-Type": "application/json; charset=UTF-8", + "Content-Type": "application/json; charset=UTF-8", } [/codeblock] </description> @@ -175,7 +176,7 @@ <argument index="0" name="bytes" type="int"> </argument> <description> - Sets the size of the buffer used and maximum bytes to read per iteration. see [method read_response_body_chunk] + Sets the size of the buffer used and maximum bytes to read per iteration. See [method read_response_body_chunk]. </description> </method> </methods> diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml index 53ee0b6132..3a73d44a01 100644 --- a/doc/classes/HTTPRequest.xml +++ b/doc/classes/HTTPRequest.xml @@ -23,6 +23,7 @@ </return> <description> Returns the response body length. + [b]Note:[/b] Some Web servers may not send a body length. In this case, the value returned will be [code]-1[/code]. If using chunked transfer encoding, the body length will also be [code]-1[/code]. </description> </method> <method name="get_downloaded_bytes" qualifiers="const"> diff --git a/doc/classes/HashingContext.xml b/doc/classes/HashingContext.xml index 552a74eba4..802b186ef3 100644 --- a/doc/classes/HashingContext.xml +++ b/doc/classes/HashingContext.xml @@ -1,8 +1,32 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="HashingContext" inherits="Reference" category="Core" version="3.2"> <brief_description> + Context to compute cryptographic hashes over multiple iterations. </brief_description> <description> + The HashingContext class provides an interface for computing cryptographic hashes over multiple iterations. This is useful for example when computing hashes of big files (so you don't have to load them all in memory), network streams, and data streams in general (so you don't have to hold buffers). + The [enum HashType] enum shows the supported hashing algorithms. + [codeblock] + const CHUNK_SIZE = 1024 + + func hash_file(path): + var ctx = HashingContext.new() + var file = File.new() + # Start a SHA-256 context. + ctx.start(HashingContext.HASH_SHA256) + # Check that file exists. + if not file.file_exists(path): + return + # Open the file to hash. + file.open(path, File.READ) + # Update the context after reading each chunk. + while not file.eof_reached(): + ctx.update(file.get_buffer(CHUNK_SIZE)) + # Get the computed hash. + var res = ctx.finish() + # Print the result as hex string and array. + printt(res.hex_encode(), Array(res)) + [/codeblock] </description> <tutorials> </tutorials> @@ -11,6 +35,7 @@ <return type="PoolByteArray"> </return> <description> + Closes the current context, and return the computed hash. </description> </method> <method name="start"> @@ -19,6 +44,7 @@ <argument index="0" name="type" type="int" enum="HashingContext.HashType"> </argument> <description> + Starts a new hash computation of the given [code]type[/code] (e.g. [constant HASH_SHA256] to start computation of a SHA-256). </description> </method> <method name="update"> @@ -27,15 +53,19 @@ <argument index="0" name="chunk" type="PoolByteArray"> </argument> <description> + Updates the computation with the given [code]chunk[/code] of data. </description> </method> </methods> <constants> <constant name="HASH_MD5" value="0" enum="HashType"> + Hashing algorithm: MD5. </constant> <constant name="HASH_SHA1" value="1" enum="HashType"> + Hashing algorithm: SHA-1. </constant> <constant name="HASH_SHA256" value="2" enum="HashType"> + Hashing algorithm: SHA-256. </constant> </constants> </class> diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml index 10be66feb8..d37ab64cb3 100644 --- a/doc/classes/Image.xml +++ b/doc/classes/Image.xml @@ -252,7 +252,7 @@ <argument index="1" name="y" type="int"> </argument> <description> - Returns the color of the pixel at [code](x, y)[/code] if the image is locked. If the image is unlocked it always returns a [Color] with the value [code](0, 0, 0, 1.0)[/code]. + Returns the color of the pixel at [code](x, y)[/code] if the image is locked. If the image is unlocked, it always returns a [Color] with the value [code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but two integer arguments instead of a Vector2 argument. </description> </method> <method name="get_pixelv" qualifiers="const"> @@ -261,6 +261,7 @@ <argument index="0" name="src" type="Vector2"> </argument> <description> + Returns the color of the pixel at [code]src[/code] if the image is locked. If the image is unlocked, it always returns a [Color] with the value [code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a Vector2 argument instead of two integer arguments. </description> </method> <method name="get_rect" qualifiers="const"> @@ -414,7 +415,7 @@ <argument index="1" name="grayscale" type="bool" default="false"> </argument> <description> - Saves the image as an EXR file to [code]path[/code]. If grayscale is true and the image has only one channel, it will be saved explicitely as monochrome rather than one red channel. This function will return [constant ERR_UNAVAILABLE] if Godot was compiled without the TinyEXR module. + Saves the image as an EXR file to [code]path[/code]. If grayscale is [code]true[/code] and the image has only one channel, it will be saved explicitly as monochrome rather than one red channel. This function will return [constant ERR_UNAVAILABLE] if Godot was compiled without the TinyEXR module. </description> </method> <method name="save_png" qualifiers="const"> @@ -455,6 +456,15 @@ <argument index="1" name="color" type="Color"> </argument> <description> + Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is locked. Note that the [code]dst[/code] values must be integers. Example: + [codeblock] + var img = Image.new() + img.create(img_width, img_height, false, Image.FORMAT_RGBA8) + img.lock() + img.set_pixelv(Vector2(x, y), color) # Works + img.unlock() + img.set_pixelv(Vector2(x, y), color) # Does not have an effect + [/codeblock] </description> </method> <method name="shrink_x2"> diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml index 0a09b96ba7..03bf739760 100644 --- a/doc/classes/ImageTexture.xml +++ b/doc/classes/ImageTexture.xml @@ -72,6 +72,7 @@ </method> </methods> <members> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="7" /> <member name="lossy_quality" type="float" setter="set_lossy_storage_quality" getter="get_lossy_storage_quality" default="0.7"> The storage quality for [constant STORAGE_COMPRESS_LOSSY]. </member> diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml index 5fd5e8c3c0..6d4adfad51 100644 --- a/doc/classes/Input.xml +++ b/doc/classes/Input.xml @@ -71,6 +71,7 @@ <return type="int" enum="Input.CursorShape"> </return> <description> + Returns the currently assigned cursor shape (see [enum CursorShape]). </description> </method> <method name="get_gravity" qualifiers="const"> @@ -223,7 +224,7 @@ <argument index="0" name="action" type="String"> </argument> <description> - Returns [code]true[/code] if you are pressing the action event. Note that if an action has multiple buttons asigned and more than one of them is pressed, releasing one button will release the action, even if some other button assigned to this action is still pressed. + Returns [code]true[/code] if you are pressing the action event. Note that if an action has multiple buttons assigned and more than one of them is pressed, releasing one button will release the action, even if some other button assigned to this action is still pressed. </description> </method> <method name="is_joy_button_pressed" qualifiers="const"> @@ -316,6 +317,8 @@ Sets a custom mouse cursor image, which is only visible inside the game window. The hotspot can also be specified. Passing [code]null[/code] to the image parameter resets to the system cursor. See enum [code]CURSOR_*[/code] for the list of shapes. [code]image[/code]'s size must be lower than 256×256. [code]hotspot[/code] must be within [code]image[/code]'s size. + [b]Note:[/b] [AnimatedTexture]s aren't supported as custom mouse cursors. If using an [AnimatedTexture], only the first frame will be displayed. + [b]Note:[/b] Only images imported with the [b]Lossless[/b], [b]Lossy[/b] or [b]Uncompressed[/b] compression modes are supported. The [b]Video RAM[/b] compression mode can't be used for custom cursors. </description> </method> <method name="set_default_cursor_shape"> diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml index fab4cc0fb9..cb89a746bf 100644 --- a/doc/classes/InputEventMouseMotion.xml +++ b/doc/classes/InputEventMouseMotion.xml @@ -4,7 +4,7 @@ Input event type for mouse motion events. </brief_description> <description> - Contains mouse motion information. Supports relative, absolute positions and speed. See [method Node._input]. + Contains mouse and pen motion information. Supports relative, absolute positions and speed. See [method Node._input]. </description> <tutorials> <link>https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link> @@ -18,6 +18,12 @@ <member name="speed" type="Vector2" setter="set_speed" getter="get_speed" default="Vector2( 0, 0 )"> The mouse speed in pixels per second. </member> + <member name="pressure" type="float" setter="set_pressure" getter="get_pressure"> + Represents the pressure the user puts on the pen. Ranges from [code]0.0[/code] to [code]1.0[/code]. + </member> + <member name="tilt" type="Vector2" setter="set_tilt" getter="get_tilt"> + Represents the angles of tilt of the pen. Positive X-coordinate value indicates a tilt to the right. Positive Y-coordinate value indicates a tilt toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both axes. + </member> </members> <constants> </constants> diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml index 8515d1063d..c82d6a27c0 100644 --- a/doc/classes/ItemList.xml +++ b/doc/classes/ItemList.xml @@ -414,6 +414,7 @@ <member name="fixed_icon_size" type="Vector2" setter="set_fixed_icon_size" getter="get_fixed_icon_size" default="Vector2( 0, 0 )"> Sets the default icon size in pixels. </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="icon_mode" type="int" setter="set_icon_mode" getter="get_icon_mode" enum="ItemList.IconMode" default="1"> Sets the default position of the icon to either [constant ICON_MODE_LEFT] or [constant ICON_MODE_TOP]. </member> @@ -425,6 +426,7 @@ </member> <member name="max_text_lines" type="int" setter="set_max_text_lines" getter="get_max_text_lines" default="1"> </member> + <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" /> <member name="same_column_width" type="bool" setter="set_same_column_width" getter="is_same_column_width" default="false"> If set to [code]true[/code], all columns will have the same width specified by [member fixed_column_width]. </member> diff --git a/doc/classes/JSONRPC.xml b/doc/classes/JSONRPC.xml index 921161afb4..10d9e5943e 100644 --- a/doc/classes/JSONRPC.xml +++ b/doc/classes/JSONRPC.xml @@ -81,15 +81,15 @@ </method> </methods> <constants> - <constant name="ParseError" value="-32700" enum="ErrorCode"> + <constant name="PARSE_ERROR" value="-32700" enum="ErrorCode"> </constant> - <constant name="InvalidRequest" value="-32600" enum="ErrorCode"> + <constant name="INVALID_REQUEST" value="-32600" enum="ErrorCode"> </constant> - <constant name="MethodNotFound" value="-32601" enum="ErrorCode"> + <constant name="METHOD_NOT_FOUND" value="-32601" enum="ErrorCode"> </constant> - <constant name="InvalidParams" value="-32602" enum="ErrorCode"> + <constant name="INVALID_PARAMS" value="-32602" enum="ErrorCode"> </constant> - <constant name="InternalError" value="-32603" enum="ErrorCode"> + <constant name="INTERNAL_ERROR" value="-32603" enum="ErrorCode"> </constant> </constants> </class> diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml index 72e640adb6..4d1584e9de 100644 --- a/doc/classes/Label.xml +++ b/doc/classes/Label.xml @@ -55,9 +55,11 @@ <member name="max_lines_visible" type="int" setter="set_max_lines_visible" getter="get_max_lines_visible" default="-1"> Limits the lines of text the node shows on screen. </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="2" /> <member name="percent_visible" type="float" setter="set_percent_visible" getter="get_percent_visible" default="1.0"> Limits the count of visible characters. If you set [code]percent_visible[/code] to 50, only up to half of the text's characters will display on screen. Useful to animate the text in a dialog box. </member> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="4" /> <member name="text" type="String" setter="set_text" getter="get_text" default=""""> The text to display on screen. </member> diff --git a/doc/classes/LargeTexture.xml b/doc/classes/LargeTexture.xml index b4267f55f0..4dbda34a46 100644 --- a/doc/classes/LargeTexture.xml +++ b/doc/classes/LargeTexture.xml @@ -85,6 +85,9 @@ </description> </method> </methods> + <members> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/LineEdit.xml b/doc/classes/LineEdit.xml index d90a290fdc..de216563d3 100644 --- a/doc/classes/LineEdit.xml +++ b/doc/classes/LineEdit.xml @@ -107,24 +107,30 @@ <member name="expand_to_text_length" type="bool" setter="set_expand_to_text_length" getter="get_expand_to_text_length" default="false"> If [code]true[/code], the [LineEdit] width will increase to stay longer than the [member text]. It will [b]not[/b] compress if the [member text] is shortened. </member> - <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" enum="Control.FocusMode" default="2"> - Defines how the [LineEdit] can grab focus (Keyboard and mouse, only keyboard, or none). See [enum Control.FocusMode] for details. - </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="max_length" type="int" setter="set_max_length" getter="get_max_length" default="0"> Maximum amount of characters that can be entered inside the [LineEdit]. If [code]0[/code], there is no limit. </member> + <member name="mouse_default_cursor_shape" type="int" setter="set_default_cursor_shape" getter="get_default_cursor_shape" override="true" enum="Control.CursorShape" default="1" /> <member name="placeholder_alpha" type="float" setter="set_placeholder_alpha" getter="get_placeholder_alpha" default="0.6"> Opacity of the [member placeholder_text]. From [code]0[/code] to [code]1[/code]. </member> <member name="placeholder_text" type="String" setter="set_placeholder" getter="get_placeholder" default=""""> Text shown when the [LineEdit] is empty. It is [b]not[/b] the [LineEdit]'s default value (see [member text]). </member> + <member name="right_icon" type="Texture" setter="set_right_icon" getter="get_right_icon"> + Sets the icon that will appear in the right end of the [LineEdit] if there's no [member text], or always, if [member clear_button_enabled] is set to [code]false[/code]. + </member> <member name="secret" type="bool" setter="set_secret" getter="is_secret" default="false"> If [code]true[/code], every character is replaced with the secret character (see [member secret_character]). </member> <member name="secret_character" type="String" setter="set_secret_character" getter="get_secret_character" default=""*""> The character to use to mask secret input (defaults to "*"). Only a single character can be used as the secret character. </member> + <member name="selecting_enabled" type="bool" setter="set_selecting_enabled" getter="is_selecting_enabled" default="true"> + </member> + <member name="shortcut_keys_enabled" type="bool" setter="set_shortcut_keys_enabled" getter="is_shortcut_keys_enabled" default="true"> + </member> <member name="text" type="String" setter="set_text" getter="get_text" default=""""> String value of the [LineEdit]. </member> diff --git a/doc/classes/LinkButton.xml b/doc/classes/LinkButton.xml index 3e6b5e8c1a..af4c255b92 100644 --- a/doc/classes/LinkButton.xml +++ b/doc/classes/LinkButton.xml @@ -11,6 +11,9 @@ <methods> </methods> <members> + <member name="enabled_focus_mode" type="int" setter="set_enabled_focus_mode" getter="get_enabled_focus_mode" override="true" enum="Control.FocusMode" default="0" /> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="0" /> + <member name="mouse_default_cursor_shape" type="int" setter="set_default_cursor_shape" getter="get_default_cursor_shape" override="true" enum="Control.CursorShape" default="2" /> <member name="text" type="String" setter="set_text" getter="get_text" default=""""> </member> <member name="underline" type="int" setter="set_underline_mode" getter="get_underline_mode" enum="LinkButton.UnderlineMode" default="0"> diff --git a/doc/classes/MainLoop.xml b/doc/classes/MainLoop.xml index 181a99590a..9457800825 100644 --- a/doc/classes/MainLoop.xml +++ b/doc/classes/MainLoop.xml @@ -15,29 +15,29 @@ var quit = false func _initialize(): - print("Initialized:") - print(" Starting time: %s" % str(time_elapsed)) + print("Initialized:") + print(" Starting time: %s" % str(time_elapsed)) func _idle(delta): - time_elapsed += delta - # Return true to end the main loop - return quit + time_elapsed += delta + # Return true to end the main loop. + return quit func _input_event(event): - # Record keys - if event is InputEventKey and event.pressed and !event.echo: - keys_typed.append(OS.get_scancode_string(event.scancode)) - # Quit on Escape press - if event.scancode == KEY_ESCAPE: - quit = true - # Quit on any mouse click - if event is InputEventMouseButton: - quit = true + # Record keys. + if event is InputEventKey and event.pressed and !event.echo: + keys_typed.append(OS.get_scancode_string(event.scancode)) + # Quit on Escape press. + if event.scancode == KEY_ESCAPE: + quit = true + # Quit on any mouse click. + if event is InputEventMouseButton: + quit = true func _finalize(): - print("Finalized:") - print(" End time: %s" % str(time_elapsed)) - print(" Keys typed: %s" % var2str(keys_typed)) + print("Finalized:") + print(" End time: %s" % str(time_elapsed)) + print(" Keys typed: %s" % var2str(keys_typed)) [/codeblock] </description> <tutorials> @@ -167,6 +167,17 @@ </description> </method> </methods> + <signals> + <signal name="on_request_permissions_result"> + <argument index="0" name="permission" type="String"> + </argument> + <argument index="1" name="granted" type="bool"> + </argument> + <description> + Emitted when an user responds to permission request. + </description> + </signal> + </signals> <constants> <constant name="NOTIFICATION_WM_MOUSE_ENTER" value="1002"> Notification received from the OS when the mouse enters the game window. @@ -215,5 +226,13 @@ Notification received from the OS when an update of the Input Method Engine occurs (e.g. change of IME cursor position or composition string). Specific to the macOS platform. </constant> + <constant name="NOTIFICATION_APP_RESUMED" value="1014"> + Notification received from the OS when the app is resumed. + Specific to the Android platform. + </constant> + <constant name="NOTIFICATION_APP_PAUSED" value="1015"> + Notification received from the OS when the app is paused. + Specific to the Android platform. + </constant> </constants> </class> diff --git a/doc/classes/MenuButton.xml b/doc/classes/MenuButton.xml index 40d2160baa..52fb4b9ca1 100644 --- a/doc/classes/MenuButton.xml +++ b/doc/classes/MenuButton.xml @@ -26,9 +26,14 @@ </method> </methods> <members> + <member name="action_mode" type="int" setter="set_action_mode" getter="get_action_mode" override="true" enum="BaseButton.ActionMode" default="0" /> + <member name="enabled_focus_mode" type="int" setter="set_enabled_focus_mode" getter="get_enabled_focus_mode" override="true" enum="Control.FocusMode" default="0" /> + <member name="flat" type="bool" setter="set_flat" getter="is_flat" override="true" default="true" /> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="0" /> <member name="switch_on_hover" type="bool" setter="set_switch_on_hover" getter="is_switch_on_hover" default="false"> If [code]true[/code], when the cursor hovers above another MenuButton within the same parent which also has [code]switch_on_hover[/code] enabled, it will close the current MenuButton and open the other one. </member> + <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> </members> <signals> <signal name="about_to_show"> diff --git a/doc/classes/MeshInstance.xml b/doc/classes/MeshInstance.xml index c577635c98..a4d2bb4295 100644 --- a/doc/classes/MeshInstance.xml +++ b/doc/classes/MeshInstance.xml @@ -65,6 +65,8 @@ <member name="skeleton" type="NodePath" setter="set_skeleton_path" getter="get_skeleton_path" default="NodePath("..")"> [NodePath] to the [Skeleton] associated with the instance. </member> + <member name="skin" type="Skin" setter="set_skin" getter="get_skin"> + </member> </members> <constants> </constants> diff --git a/doc/classes/MeshLibrary.xml b/doc/classes/MeshLibrary.xml index 041d1fa80d..44dc4f334f 100644 --- a/doc/classes/MeshLibrary.xml +++ b/doc/classes/MeshLibrary.xml @@ -4,7 +4,7 @@ Library of meshes. </brief_description> <description> - Library of meshes. Contains a list of [Mesh] resources, each with name and ID. This resource is used in [GridMap]. + A library of meshes. Contains a list of [Mesh] resources, each with a name and ID. This resource is used in [GridMap]. </description> <tutorials> </tutorials> @@ -13,7 +13,7 @@ <return type="void"> </return> <description> - Clear the library. + Clears the library. </description> </method> <method name="create_item"> @@ -22,7 +22,7 @@ <argument index="0" name="id" type="int"> </argument> <description> - Create a new item in the library, supplied an id. + Create a new item in the library, supplied as an ID. </description> </method> <method name="find_item_by_name" qualifiers="const"> @@ -80,6 +80,8 @@ <argument index="0" name="id" type="int"> </argument> <description> + Returns a generated item preview (a 3D rendering in isometric perspective). + [b]Note:[/b] Since item previews are only generated in an editor context, this function will return an empty [Texture] in a running project. </description> </method> <method name="get_item_shapes" qualifiers="const"> @@ -94,7 +96,7 @@ <return type="int"> </return> <description> - Gets an unused id for a new item. + Gets an unused ID for a new item. </description> </method> <method name="remove_item"> @@ -114,7 +116,7 @@ <argument index="1" name="mesh" type="Mesh"> </argument> <description> - Sets the mesh of the item. + Sets the item's mesh. </description> </method> <method name="set_item_name"> @@ -125,7 +127,7 @@ <argument index="1" name="name" type="String"> </argument> <description> - Sets the name of the item. + Sets the item's name. </description> </method> <method name="set_item_navmesh"> diff --git a/doc/classes/MeshTexture.xml b/doc/classes/MeshTexture.xml index f8e02d1851..2c94014879 100644 --- a/doc/classes/MeshTexture.xml +++ b/doc/classes/MeshTexture.xml @@ -14,6 +14,7 @@ <member name="base_texture" type="Texture" setter="set_base_texture" getter="get_base_texture"> Sets the base texture that the Mesh will use to draw. </member> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> <member name="image_size" type="Vector2" setter="set_image_size" getter="get_image_size" default="Vector2( 0, 0 )"> Sets the size of the image, needed for reference. </member> diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml index 793696321b..8a294425e6 100644 --- a/doc/classes/Mutex.xml +++ b/doc/classes/Mutex.xml @@ -7,6 +7,7 @@ A synchronization mutex (mutual exclusion). This is used to synchronize multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees that only one thread can ever acquire the lock at a time. A mutex can be used to protect a critical section; however, be careful to avoid deadlocks. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/threads/using_multiple_threads.html</link> </tutorials> <methods> <method name="lock"> diff --git a/doc/classes/NavigationMesh.xml b/doc/classes/NavigationMesh.xml index f6c7a7d1b5..6528704bb5 100644 --- a/doc/classes/NavigationMesh.xml +++ b/doc/classes/NavigationMesh.xml @@ -107,6 +107,10 @@ </member> <member name="geometry/parsed_geometry_type" type="int" setter="set_parsed_geometry_type" getter="get_parsed_geometry_type" default="0"> </member> + <member name="geometry/source_geometry_mode" type="int" setter="set_source_geometry_mode" getter="get_source_geometry_mode" default="0"> + </member> + <member name="geometry/source_group_name" type="String" setter="set_source_group_name" getter="get_source_group_name"> + </member> <member name="polygon/verts_per_poly" type="float" setter="set_verts_per_poly" getter="get_verts_per_poly" default="6.0"> </member> <member name="region/merge_size" type="float" setter="set_region_merge_size" getter="get_region_merge_size" default="20.0"> diff --git a/doc/classes/NinePatchRect.xml b/doc/classes/NinePatchRect.xml index f191b08d96..221a3c22c1 100644 --- a/doc/classes/NinePatchRect.xml +++ b/doc/classes/NinePatchRect.xml @@ -38,6 +38,7 @@ <member name="draw_center" type="bool" setter="set_draw_center" getter="is_draw_center_enabled" default="true"> If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's borders. </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="2" /> <member name="patch_margin_bottom" type="int" setter="set_patch_margin" getter="get_patch_margin" default="0"> The height of the 9-slice's bottom row. A margin of 16 means the 9-slice's bottom corners and side will have a height of 16 pixels. You can set all 4 margin values individually to create panels with non-uniform borders. </member> @@ -51,7 +52,7 @@ The height of the 9-slice's top row. </member> <member name="region_rect" type="Rect2" setter="set_region_rect" getter="get_region_rect" default="Rect2( 0, 0, 0, 0 )"> - Rectangular region of the texture to sample from. If you're working with an atlas, use this property to define the area the 9-slice should use. All other properties are relative to this one. + Rectangular region of the texture to sample from. If you're working with an atlas, use this property to define the area the 9-slice should use. All other properties are relative to this one. If the rect is empty, NinePatchRect will use the whole texture. </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> The node's texture resource. diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml index 097fa1f6e5..1f685aab81 100644 --- a/doc/classes/Node.xml +++ b/doc/classes/Node.xml @@ -40,8 +40,9 @@ <return type="String"> </return> <description> - The string returned from this method is displayed as a warning in the "Scene Dock" if the script that overrides it is a [code]tool[/code] script. + The string returned from this method is displayed as a warning in the Scene Dock if the script that overrides it is a [code]tool[/code] script. Returning an empty string produces no warning. + Call [method update_configuration_warning] when the warning needs to be updated for this node. </description> </method> <method name="_input" qualifiers="virtual"> @@ -171,6 +172,7 @@ <description> Duplicates the node, returning a new node. You can fine-tune the behavior using the [code]flags[/code] (see [enum DuplicateFlags]). + [b]Note:[/b] It will not work properly if the node contains a script with constructor arguments (i.e. needs to supply arguments to [method Object._init] method). In that case, the node will be duplicated without a script. </description> </method> <method name="find_node" qualifiers="const"> @@ -817,6 +819,14 @@ Sets whether this is an instance load placeholder. See [InstancePlaceholder]. </description> </method> + <method name="update_configuration_warning"> + <return type="void"> + </return> + <description> + Updates the warning displayed for this node in the Scene Dock. + Use [method _get_configuration_warning] to setup the warning message to display. + </description> + </method> </methods> <members> <member name="custom_multiplayer" type="MultiplayerAPI" setter="set_custom_multiplayer" getter="get_custom_multiplayer"> @@ -962,6 +972,14 @@ Notification received from the OS when an update of the Input Method Engine occurs (e.g. change of IME cursor position or composition string). Specific to the macOS platform. </constant> + <constant name="NOTIFICATION_APP_RESUMED" value="1014"> + Notification received from the OS when the app is resumed. + Specific to the Android platform. + </constant> + <constant name="NOTIFICATION_APP_PAUSED" value="1015"> + Notification received from the OS when the app is paused. + Specific to the Android platform. + </constant> <constant name="PAUSE_MODE_INHERIT" value="0" enum="PauseMode"> Inherits pause mode from the node's parent. For the root node, it is equivalent to [constant PAUSE_MODE_STOP]. Default. </constant> diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml index abdbfa09f7..29c4680685 100644 --- a/doc/classes/Node2D.xml +++ b/doc/classes/Node2D.xml @@ -52,7 +52,7 @@ <argument index="0" name="point" type="Vector2"> </argument> <description> - Rotates the node so it points towards the [code]point[/code]. + Rotates the node so it points towards the [code]point[/code], which is expected to use global coordinates. </description> </method> <method name="move_local_x"> diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index 938777a36b..5aeeb61647 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -105,11 +105,11 @@ This method has slightly different behavior based on whether the [code]blocking[/code] mode is enabled. If [code]blocking[/code] is [code]true[/code], the Godot thread will pause its execution while waiting for the process to terminate. The shell output of the process will be written to the [code]output[/code] array as a single string. When the process terminates, the Godot thread will resume execution. If [code]blocking[/code] is [code]false[/code], the Godot thread will continue while the new process runs. It is not possible to retrieve the shell output in non-blocking mode, so [code]output[/code] will be empty. - The return value also depends on the blocking mode. When blocking, the method will return -2 (no process ID information is available in blocking mode). When non-blocking, the method returns a process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process forking (non-blocking) or opening (blocking) fails, the method will return [code]-1[/code]. + The return value also depends on the blocking mode. When blocking, the method will return an exit code of the process. When non-blocking, the method returns a process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process forking (non-blocking) or opening (blocking) fails, the method will return [code]-1[/code] or another exit code. Example of blocking mode and retrieving the shell output: [codeblock] var output = [] - OS.execute("ls", ["-l", "/tmp"], true, output) + var exit_code = OS.execute("ls", ["-l", "/tmp"], true, output) [/codeblock] Example of non-blocking mode, running another instance of the project and storing its process ID: [codeblock] @@ -157,6 +157,8 @@ <return type="PoolStringArray"> </return> <description> + Returns an array of MIDI device names. + The returned array will be empty if the system MIDI driver has not previously been initialised with [method open_midi_inputs]. </description> </method> <method name="get_current_video_driver" qualifiers="const"> @@ -217,6 +219,13 @@ Returns the path to the current engine executable. </description> </method> + <method name="get_granted_permissions" qualifiers="const"> + <return type="PoolStringArray"> + </return> + <description> + With this function you can get the list of dangerous permissions that have been granted to the Android application. + </description> + </method> <method name="get_ime_selection" qualifiers="const"> <return type="Vector2"> </return> @@ -326,7 +335,7 @@ <argument index="0" name="screen" type="int" default="-1"> </argument> <description> - Returns the dots per inch density of the specified screen. + Returns the dots per inch density of the specified screen. If [code]screen[/code] is [/code]-1[/code] (the default value), the current screen will be used. On Android devices, the actual screen densities are grouped into six generalized densities: [codeblock] ldpi - 120 dpi @@ -344,7 +353,7 @@ <argument index="0" name="screen" type="int" default="-1"> </argument> <description> - Returns the position of the specified screen by index. If no screen index is provided, the current screen will be used. + Returns the position of the specified screen by index. If [code]screen[/code] is [/code]-1[/code] (the default value), the current screen will be used. </description> </method> <method name="get_screen_size" qualifiers="const"> @@ -353,7 +362,7 @@ <argument index="0" name="screen" type="int" default="-1"> </argument> <description> - Returns the dimensions in pixels of the specified screen. + Returns the dimensions in pixels of the specified screen. If [code]screen[/code] is [/code]-1[/code] (the default value), the current screen will be used. </description> </method> <method name="get_splash_tick_msec" qualifiers="const"> @@ -692,6 +701,7 @@ <return type="void"> </return> <description> + Initialises the singleton for the system MIDI driver. </description> </method> <method name="print_all_resources"> @@ -744,6 +754,13 @@ At the moment this function is only used by [code]AudioDriverOpenSL[/code] to request permission for [code]RECORD_AUDIO[/code] on Android. </description> </method> + <method name="request_permissions"> + <return type="bool"> + </return> + <description> + With this function you can request dangerous permissions since normal permissions are automatically granted at install time in Android application. + </description> + </method> <method name="set_icon"> <return type="void"> </return> @@ -820,6 +837,7 @@ </argument> <description> Sets the window title to the specified string. + [b]Note:[/b] This should be used sporadically. Don't set this every frame, as that will negatively affect performance on some window managers. </description> </method> <method name="shell_open"> @@ -828,9 +846,10 @@ <argument index="0" name="uri" type="String"> </argument> <description> - Requests the OS to open a resource with the most appropriate program. For example. - [code]OS.shell_open("C:\\Users\name\Downloads")[/code] on Windows opens the file explorer at the downloads folders of the user. - [code]OS.shell_open("https://godotengine.org")[/code] opens the default web browser on the official Godot website. + Requests the OS to open a resource with the most appropriate program. For example: + - [code]OS.shell_open("C:\\Users\name\Downloads")[/code] on Windows opens the file explorer at the user's Downloads folder. + - [code]OS.shell_open("https://godotengine.org")[/code] opens the default web browser on the official Godot website. + - [code]OS.shell_open("mailto:example@example.com")[/code] opens the default email client with the "To" field set to [code]example@example.com[/code]. See [url=https://blog.escapecreative.com/customizing-mailto-links/]Customizing [code]mailto:[/code] Links[/url] for a list of fields that can be added. </description> </method> <method name="show_virtual_keyboard"> diff --git a/doc/classes/OptionButton.xml b/doc/classes/OptionButton.xml index 0c2566e845..b3f1359e69 100644 --- a/doc/classes/OptionButton.xml +++ b/doc/classes/OptionButton.xml @@ -197,8 +197,11 @@ </method> </methods> <members> + <member name="action_mode" type="int" setter="set_action_mode" getter="get_action_mode" override="true" enum="BaseButton.ActionMode" default="0" /> + <member name="align" type="int" setter="set_text_align" getter="get_text_align" override="true" enum="Button.TextAlign" default="0" /> <member name="selected" type="int" setter="_select_int" getter="get_selected" default="-1"> </member> + <member name="toggle_mode" type="bool" setter="set_toggle_mode" getter="is_toggle_mode" override="true" default="true" /> </members> <signals> <signal name="item_focused"> diff --git a/doc/classes/ParallaxBackground.xml b/doc/classes/ParallaxBackground.xml index 2778707577..d4f3462016 100644 --- a/doc/classes/ParallaxBackground.xml +++ b/doc/classes/ParallaxBackground.xml @@ -11,6 +11,7 @@ <methods> </methods> <members> + <member name="layer" type="int" setter="set_layer" getter="get_layer" override="true" default="-100" /> <member name="scroll_base_offset" type="Vector2" setter="set_scroll_base_offset" getter="get_scroll_base_offset" default="Vector2( 0, 0 )"> The base position offset for all [ParallaxLayer] children. </member> diff --git a/doc/classes/Particles.xml b/doc/classes/Particles.xml index fb74c5a3d4..7bfea8bce4 100644 --- a/doc/classes/Particles.xml +++ b/doc/classes/Particles.xml @@ -24,6 +24,7 @@ <argument index="0" name="pass" type="int"> </argument> <description> + Returns the [Mesh] that is drawn at index [code]pass[/code]. </description> </method> <method name="restart"> @@ -41,6 +42,7 @@ <argument index="1" name="mesh" type="Mesh"> </argument> <description> + Sets the [Mesh] that is drawn at index [code]pass[/code]. </description> </method> </methods> diff --git a/doc/classes/Path2D.xml b/doc/classes/Path2D.xml index b49a3d928d..7b37f8e40d 100644 --- a/doc/classes/Path2D.xml +++ b/doc/classes/Path2D.xml @@ -15,6 +15,7 @@ <member name="curve" type="Curve2D" setter="set_curve" getter="get_curve"> A [Curve2D] describing the path. </member> + <member name="self_modulate" type="Color" setter="set_self_modulate" getter="get_self_modulate" override="true" default="Color( 0.5, 0.6, 1, 0.7 )" /> </members> <constants> </constants> diff --git a/doc/classes/Physics2DServer.xml b/doc/classes/Physics2DServer.xml index ba00438ea1..a139fa4664 100644 --- a/doc/classes/Physics2DServer.xml +++ b/doc/classes/Physics2DServer.xml @@ -822,7 +822,7 @@ <argument index="5" name="result" type="Physics2DTestMotionResult" default="null"> </argument> <description> - Returns whether a body can move from a given point in a given direction. Apart from the boolean return value, a [Physics2DTestMotionResult] can be passed to return additional information in. + Returns [code]true[/code] if a collision would result from moving in the given direction from a given point in space. Margin increases the size of the shapes involved in the collision detection. [Physics2DTestMotionResult] can be passed to return additional information in. </description> </method> <method name="capsule_shape_create"> diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml index 076131357b..4fe7c329bd 100644 --- a/doc/classes/PhysicsBody2D.xml +++ b/doc/classes/PhysicsBody2D.xml @@ -85,6 +85,7 @@ <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> The physics layers this area scans for collisions. </member> + <member name="input_pickable" type="bool" setter="set_pickable" getter="is_pickable" override="true" default="false" /> <member name="layers" type="int" setter="_set_layers" getter="_get_layers"> Both [member collision_layer] and [member collision_mask]. Returns [member collision_layer] when accessed. Updates [member collision_layer] and [member collision_mask] when modified. </member> diff --git a/doc/classes/PoolByteArray.xml b/doc/classes/PoolByteArray.xml index 21bf078017..867f042cd2 100644 --- a/doc/classes/PoolByteArray.xml +++ b/doc/classes/PoolByteArray.xml @@ -53,6 +53,13 @@ Returns a new [PoolByteArray] with the data decompressed. Set [code]buffer_size[/code] to the size of the uncompressed data. Set the compression mode using one of [enum File.CompressionMode]'s constants. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="get_string_from_ascii"> <return type="String"> </return> diff --git a/doc/classes/PoolColorArray.xml b/doc/classes/PoolColorArray.xml index a1fb868ef5..34cfa0ab53 100644 --- a/doc/classes/PoolColorArray.xml +++ b/doc/classes/PoolColorArray.xml @@ -33,6 +33,13 @@ Appends a [PoolColorArray] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/PoolIntArray.xml b/doc/classes/PoolIntArray.xml index 28a28b2bba..25e1e718f7 100644 --- a/doc/classes/PoolIntArray.xml +++ b/doc/classes/PoolIntArray.xml @@ -34,6 +34,13 @@ Appends a [PoolIntArray] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/PoolRealArray.xml b/doc/classes/PoolRealArray.xml index 7eaec82338..e8afe46640 100644 --- a/doc/classes/PoolRealArray.xml +++ b/doc/classes/PoolRealArray.xml @@ -33,6 +33,13 @@ Appends a [PoolRealArray] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/PoolStringArray.xml b/doc/classes/PoolStringArray.xml index a408a18b19..f41a3c7a68 100644 --- a/doc/classes/PoolStringArray.xml +++ b/doc/classes/PoolStringArray.xml @@ -33,6 +33,13 @@ Appends a [PoolStringArray] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/PoolVector2Array.xml b/doc/classes/PoolVector2Array.xml index 623247e639..321846d08b 100644 --- a/doc/classes/PoolVector2Array.xml +++ b/doc/classes/PoolVector2Array.xml @@ -33,6 +33,13 @@ Appends a [PoolVector2Array] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/PoolVector3Array.xml b/doc/classes/PoolVector3Array.xml index adc28b46cb..c82bd62a11 100644 --- a/doc/classes/PoolVector3Array.xml +++ b/doc/classes/PoolVector3Array.xml @@ -33,6 +33,13 @@ Appends a [PoolVector3Array] at the end of this array. </description> </method> + <method name="empty"> + <return type="bool"> + </return> + <description> + Returns [code]true[/code] if the array is empty. + </description> + </method> <method name="insert"> <return type="int"> </return> diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml index fb8168c344..2357ee2469 100644 --- a/doc/classes/Popup.xml +++ b/doc/classes/Popup.xml @@ -68,6 +68,7 @@ <member name="popup_exclusive" type="bool" setter="set_exclusive" getter="is_exclusive" default="false"> If [code]true[/code], the popup will not be hidden when a click event occurs outside of it, or when it receives the [code]ui_cancel[/code] action event. </member> + <member name="visible" type="bool" setter="set_visible" getter="is_visible" override="true" default="false" /> </members> <signals> <signal name="about_to_show"> diff --git a/doc/classes/PopupDialog.xml b/doc/classes/PopupDialog.xml index d85f568abf..939453b977 100644 --- a/doc/classes/PopupDialog.xml +++ b/doc/classes/PopupDialog.xml @@ -12,4 +12,9 @@ </methods> <constants> </constants> + <theme_items> + <theme_item name="panel" type="StyleBox"> + Sets a custom [StyleBox] for the panel of the [PopupDialog]. + </theme_item> + </theme_items> </class> diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml index 3d6693da15..bdb6ca84ee 100644 --- a/doc/classes/PopupMenu.xml +++ b/doc/classes/PopupMenu.xml @@ -89,6 +89,36 @@ An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators. </description> </method> + <method name="add_icon_radio_check_item"> + <return type="void"> + </return> + <argument index="0" name="texture" type="Texture"> + </argument> + <argument index="1" name="label" type="String"> + </argument> + <argument index="2" name="id" type="int" default="-1"> + </argument> + <argument index="3" name="accel" type="int" default="0"> + </argument> + <description> + Same as [method add_icon_check_item], but uses a radio check button. + </description> + </method> + <method name="add_icon_radio_check_shortcut"> + <return type="void"> + </return> + <argument index="0" name="texture" type="Texture"> + </argument> + <argument index="1" name="shortcut" type="ShortCut"> + </argument> + <argument index="2" name="id" type="int" default="-1"> + </argument> + <argument index="3" name="global" type="bool" default="false"> + </argument> + <description> + Same as [method add_icon_check_shortcut], but uses a radio check button. + </description> + </method> <method name="add_icon_shortcut"> <return type="void"> </return> @@ -119,6 +149,25 @@ An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators. </description> </method> + <method name="add_multistate_item"> + <return type="void"> + </return> + <argument index="0" name="label" type="String"> + </argument> + <argument index="1" name="max_states" type="int"> + </argument> + <argument index="2" name="default_state" type="int" default="0"> + </argument> + <argument index="3" name="id" type="int" default="-1"> + </argument> + <argument index="4" name="accel" type="int" default="0"> + </argument> + <description> + Adds a new multistate item with text [code]label[/code]. + Contrarily to normal binary items, multistate items can have more than two states, as defined by [code]max_states[/code]. Each press or activate of the item will increase the state by one. The default value is defined by [code]default_state[/code]. + An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators. + </description> + </method> <method name="add_radio_check_item"> <return type="void"> </return> @@ -129,7 +178,7 @@ <argument index="2" name="accel" type="int" default="0"> </argument> <description> - Adds a new radio button with text [code]label[/code]. + Adds a new radio check button with text [code]label[/code]. An [code]id[/code] can optionally be provided, as well as an accelerator ([code]accel[/code]). If no [code]id[/code] is provided, one will be created from the index. If no [code]accel[/code] is provided then the default [code]0[/code] will be assigned to it. See [method get_item_accelerator] for more info on accelerators. [b]Note:[/b] Checkable items just display a checkmark, but don't have any built-in checking behavior and must be checked/unchecked manually. See [method set_item_checked] for more info on how to control it. </description> @@ -233,7 +282,7 @@ <argument index="0" name="id" type="int"> </argument> <description> - Returns the index of the item containing the specified [code]id[/code]. Index is automatically assigned to each item by the engine. Index can not be set manualy. + Returns the index of the item containing the specified [code]id[/code]. Index is automatically assigned to each item by the engine. Index can not be set manually. </description> </method> <method name="get_item_metadata" qualifiers="const"> @@ -395,7 +444,7 @@ <argument index="1" name="enable" type="bool"> </argument> <description> - Sets the type of the item at the specified index [code]idx[/code] to radio button. If false, sets the type of the item to plain text. + Sets the type of the item at the specified index [code]idx[/code] to radio button. If [code]false[/code], sets the type of the item to plain text. </description> </method> <method name="set_item_as_separator"> @@ -553,6 +602,7 @@ <member name="allow_search" type="bool" setter="set_allow_search" getter="get_allow_search" default="false"> If [code]true[/code], allows to navigate [PopupMenu] with letter keys. </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="hide_on_checkable_item_selection" type="bool" setter="set_hide_on_checkable_item_selection" getter="is_hide_on_checkable_item_selection" default="true"> If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button is selected. </member> diff --git a/doc/classes/ProgressBar.xml b/doc/classes/ProgressBar.xml index 96d377fd5e..d489fd8bca 100644 --- a/doc/classes/ProgressBar.xml +++ b/doc/classes/ProgressBar.xml @@ -14,6 +14,8 @@ <member name="percent_visible" type="bool" setter="set_percent_visible" getter="is_percent_visible" default="true"> If [code]true[/code], the fill percentage is displayed on the bar. </member> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="0" /> + <member name="step" type="float" setter="set_step" getter="get_step" override="true" default="0.01" /> </members> <constants> </constants> diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml index 86b874d8ee..ec7cf14571 100644 --- a/doc/classes/ProjectSettings.xml +++ b/doc/classes/ProjectSettings.xml @@ -5,6 +5,8 @@ </brief_description> <description> Contains global variables accessible from everywhere. Use [method get_setting], [method set_setting] or [method has_setting] to access them. Variables stored in [code]project.godot[/code] are also loaded into ProjectSettings, making this object very useful for reading custom game configuration options. + When naming a Project Settings property, use the full path to the setting including the category. For example, [code]"application/config/name"[/code] for the project name. Category and property names can be viewed in the Project Settings dialog. + [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. </description> <tutorials> </tutorials> @@ -55,6 +57,11 @@ <argument index="0" name="name" type="String"> </argument> <description> + Returns the value of a setting. + [b]Example:[/b] + [codeblock] + print(ProjectSettings.get_setting("application/config/name")) + [/codeblock] </description> </method> <method name="globalize_path" qualifiers="const"> @@ -80,9 +87,11 @@ </return> <argument index="0" name="pack" type="String"> </argument> + <argument index="1" name="replace_files" type="bool" default="true"> + </argument> <description> Loads the contents of the .pck or .zip file specified by [code]pack[/code] into the resource filesystem ([code]res://[/code]). Returns [code]true[/code] on success. - [b]Note:[/b] If a file from [code]pack[/code] shares the same path as a file already in the resource filesystem, any attempts to load that file will use the file from [code]pack[/code]. + [b]Note:[/b] If a file from [code]pack[/code] shares the same path as a file already in the resource filesystem, any attempts to load that file will use the file from [code]pack[/code] unless [code]replace_files[/code] is set to [code]false[/code]. </description> </method> <method name="localize_path" qualifiers="const"> @@ -136,6 +145,7 @@ <argument index="1" name="value" type="Variant"> </argument> <description> + Sets the specified property's initial value. This is the value the property reverts to. </description> </method> <method name="set_order"> @@ -157,6 +167,11 @@ <argument index="1" name="value" type="Variant"> </argument> <description> + Sets the value of a setting. + [b]Example:[/b] + [codeblock] + ProjectSettings.set_setting("application/config/name", "Example") + [/codeblock] </description> </method> </methods> @@ -193,6 +208,7 @@ </member> <member name="application/config/project_settings_override" type="String" setter="" getter="" default=""""> Specifies a file to override project settings. For example: [code]user://custom_settings.cfg[/code]. + [b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/code] will still be read to override the project settings (see this class' description at the top). </member> <member name="application/config/use_custom_user_dir" type="bool" setter="" getter="" default="false"> If [code]true[/code], the project will save user data to its own user directory (see [member application/config/custom_user_dir_name]). This setting is only effective on desktop platforms. A name must be set in the [member application/config/custom_user_dir_name] setting for this to take effect. If [code]false[/code], the project will save user data to [code](OS user data directory)/Godot/app_userdata/(project name)[/code]. @@ -395,26 +411,23 @@ Sets the window to full screen when it starts. </member> <member name="display/window/size/height" type="int" setter="" getter="" default="600"> - Sets the main window height. On desktop, this is the default window size. Stretch mode settings use this also as a reference when enabled. + Sets the game's main viewport height. On desktop platforms, this is the default window size. Stretch mode settings also use this as a reference when enabled. </member> <member name="display/window/size/resizable" type="bool" setter="" getter="" default="true"> Allows the window to be resizable by default. </member> <member name="display/window/size/test_height" type="int" setter="" getter="" default="0"> - If greater than zero, uses a different height for the window when running from the editor. The main use for this is to test with stretch modes. + If greater than zero, overrides the window height when running the game. Useful for testing stretch modes. </member> <member name="display/window/size/test_width" type="int" setter="" getter="" default="0"> - If greater than zero, uses a different width for the window when running from the editor. The main use for this is to test with stretch modes. + If greater than zero, overrides the window width when running the game. Useful for testing stretch modes. </member> <member name="display/window/size/width" type="int" setter="" getter="" default="1024"> - Sets the main window width. On desktop platforms, this is the default window size. Stretch mode settings use this also as a reference when enabled. + Sets the game's main viewport width. On desktop platforms, this is the default window size. Stretch mode settings also use this as a reference when enabled. </member> <member name="display/window/vsync/use_vsync" type="bool" setter="" getter="" default="true"> If [code]true[/code], enables vertical synchronization. This eliminates tearing that may appear in moving scenes, at the cost of higher input latency and stuttering at lower framerates. If [code]false[/code], vertical synchronization will be disabled, however, many platforms will enforce it regardless (such as mobile platforms and HTML5). </member> - <member name="editor/active" type="bool" setter="" getter="" default="false"> - Internal editor setting, don't touch. - </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" )"> @@ -722,7 +735,7 @@ Fix to improve physics jitter, specially on monitors where refresh rate is different than the physics FPS. </member> <member name="rendering/environment/default_clear_color" type="Color" setter="" getter="" default="Color( 0.3, 0.3, 0.3, 1 )"> - Default background clear color. Overriddable per [Viewport] using its [Environment]. See [member Environment.background_mode] and [member Environment.background_color] in particular. To change this default color programmatically, use [method VisualServer.set_default_clear_color]. + Default background clear color. Overridable per [Viewport] using its [Environment]. See [member Environment.background_mode] and [member Environment.background_color] in particular. To change this default color programmatically, use [method VisualServer.set_default_clear_color]. </member> <member name="rendering/limits/buffers/blend_shape_max_buffer_size_kb" type="int" setter="" getter="" default="4096"> Max buffer size for blend shapes. Any blend shape bigger than this will not work. @@ -762,7 +775,7 @@ If [code]true[/code], performs a previous depth pass before rendering materials. This increases performance in scenes with high overdraw, when complex materials and lighting are used. </member> <member name="rendering/quality/directional_shadow/size" type="int" setter="" getter="" default="4096"> - The directional shadow's size in pixels. Higher values will result in sharper shadows, at the cost of performance. + The directional shadow's size in pixels. Higher values will result in sharper shadows, at the cost of performance. The value will be rounded up to the nearest power of 2. </member> <member name="rendering/quality/directional_shadow/size.mobile" type="int" setter="" getter="" default="2048"> </member> diff --git a/doc/classes/ProxyTexture.xml b/doc/classes/ProxyTexture.xml index a36f670c42..36c65f1096 100644 --- a/doc/classes/ProxyTexture.xml +++ b/doc/classes/ProxyTexture.xml @@ -11,6 +11,7 @@ <members> <member name="base" type="Texture" setter="set_base" getter="get_base"> </member> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> </members> <constants> </constants> diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml index 68b9110b50..0a1cf962c8 100644 --- a/doc/classes/ReflectionProbe.xml +++ b/doc/classes/ReflectionProbe.xml @@ -1,8 +1,10 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="ReflectionProbe" inherits="VisualInstance" category="Core" version="3.2"> <brief_description> + Captures its surroundings to create reflections. </brief_description> <description> + Capture its surroundings as a dual parabolid image, and stores versions of it with increasing levels of blur to simulate different material roughnesses. </description> <tutorials> <link>https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link> @@ -11,14 +13,17 @@ </methods> <members> <member name="box_projection" type="bool" setter="set_enable_box_projection" getter="is_box_projection_enabled" default="false"> + If [code]true[/code], enables box projection. This makes reflections look more correct in rectangle-shaped rooms by offsetting the reflection center depending on the camera's location. </member> <member name="cull_mask" type="int" setter="set_cull_mask" getter="get_cull_mask" default="1048575"> </member> <member name="enable_shadows" type="bool" setter="set_enable_shadows" getter="are_shadows_enabled" default="false"> + If [code]true[/code], computes shadows in the reflection probe. This makes the reflection probe slower to render; you may want to disable this if using the [constant UPDATE_ALWAYS] [member update_mode]. </member> <member name="extents" type="Vector3" setter="set_extents" getter="get_extents" default="Vector3( 1, 1, 1 )"> </member> <member name="intensity" type="float" setter="set_intensity" getter="get_intensity" default="1.0"> + Defines the reflection intensity. </member> <member name="interior_ambient_color" type="Color" setter="set_interior_ambient" getter="get_interior_ambient" default="Color( 0, 0, 0, 1 )"> </member> diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml new file mode 100644 index 0000000000..5c3ffd9cff --- /dev/null +++ b/doc/classes/RichTextEffect.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="RichTextEffect" inherits="Resource" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + <method name="_process_custom_fx" qualifiers="virtual"> + <return type="bool"> + </return> + <argument index="0" name="char_fx" type="CharFXTransform"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml index 81f5f44866..2962391b99 100644 --- a/doc/classes/RichTextLabel.xml +++ b/doc/classes/RichTextLabel.xml @@ -16,8 +16,13 @@ </return> <argument index="0" name="image" type="Texture"> </argument> + <argument index="1" name="width" type="int" default="0"> + </argument> + <argument index="2" name="height" type="int" default="0"> + </argument> <description> - Adds an image's opening and closing tags to the tag stack. + Adds an image's opening and closing tags to the tag stack, optionally providing a [code]width[/code] and [code]height[/code] to resize the image. + If [code]width[/code] or [code]height[/code] is set to 0, the image size will be adjusted in order to keep the original aspect ratio. </description> </method> <method name="add_text"> @@ -80,6 +85,14 @@ Returns the number of visible lines. </description> </method> + <method name="install_effect"> + <return type="void"> + </return> + <argument index="0" name="effect" type="Variant"> + </argument> + <description> + </description> + </method> <method name="newline"> <return type="void"> </return> @@ -96,6 +109,14 @@ The assignment version of [method append_bbcode]. Clears the tag stack and inserts the new content. Returns [constant OK] if parses [code]bbcode[/code] successfully. </description> </method> + <method name="parse_expressions_for_values"> + <return type="Dictionary"> + </return> + <argument index="0" name="expressions" type="PoolStringArray"> + </argument> + <description> + </description> + </method> <method name="pop"> <return type="void"> </return> @@ -112,6 +133,18 @@ Adds an [code][align][/code] tag based on the given [code]align[/code] value. See [enum Align] for possible values. </description> </method> + <method name="push_bold"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="push_bold_italics"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="push_cell"> <return type="void"> </return> @@ -146,6 +179,12 @@ Adds an [code][indent][/code] tag to the tag stack. Multiplies "level" by current tab_size to determine new margin length. </description> </method> + <method name="push_italics"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="push_list"> <return type="void"> </return> @@ -164,6 +203,18 @@ Adds a [code][meta][/code] tag to the tag stack. Similar to the BBCode [code][url=something]{text}[/url][/code], but supports non-[String] metadata types. </description> </method> + <method name="push_mono"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="push_normal"> + <return type="void"> + </return> + <description> + </description> + </method> <method name="push_strikethrough"> <return type="void"> </return> @@ -228,6 +279,8 @@ <member name="bbcode_text" type="String" setter="set_bbcode" getter="get_bbcode" default=""""> The label's text in BBCode format. Is not representative of manual modifications to the internal tag stack. Erases changes made by other methods when edited. </member> + <member name="custom_effects" type="Array" setter="set_effects" getter="get_effects" default="[ ]"> + </member> <member name="meta_underlined" type="bool" setter="set_meta_underline" getter="is_meta_underlined" default="true"> If [code]true[/code], the label underlines meta tags such as [code][url]{text}[/url][/code]. </member> @@ -237,6 +290,7 @@ <member name="percent_visible" type="float" setter="set_percent_visible" getter="get_percent_visible" default="1.0"> The text's visibility, as a [float] between 0.0 and 1.0. </member> + <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" /> <member name="scroll_active" type="bool" setter="set_scroll_active" getter="is_scroll_active" default="true"> If [code]true[/code], the scrollbar is visible. Does not block scrolling completely. See [method scroll_to_line]. </member> @@ -319,7 +373,19 @@ </constant> <constant name="ITEM_TABLE" value="11" enum="ItemType"> </constant> - <constant name="ITEM_META" value="12" enum="ItemType"> + <constant name="ITEM_FADE" value="12" enum="ItemType"> + </constant> + <constant name="ITEM_SHAKE" value="13" enum="ItemType"> + </constant> + <constant name="ITEM_WAVE" value="14" enum="ItemType"> + </constant> + <constant name="ITEM_TORNADO" value="15" enum="ItemType"> + </constant> + <constant name="ITEM_RAINBOW" value="16" enum="ItemType"> + </constant> + <constant name="ITEM_CUSTOMFX" value="18" enum="ItemType"> + </constant> + <constant name="ITEM_META" value="17" enum="ItemType"> </constant> </constants> <theme_items> diff --git a/doc/classes/RigidBody.xml b/doc/classes/RigidBody.xml index 4378fc3ffe..624b576f4d 100644 --- a/doc/classes/RigidBody.xml +++ b/doc/classes/RigidBody.xml @@ -88,6 +88,7 @@ <argument index="0" name="axis" type="int" enum="PhysicsServer.BodyAxis"> </argument> <description> + Returns [code]true[/code] if the specified linear or rotational axis is locked. </description> </method> <method name="get_colliding_bodies" qualifiers="const"> @@ -106,6 +107,7 @@ <argument index="1" name="lock" type="bool"> </argument> <description> + Locks the specified linear or rotational axis. </description> </method> <method name="set_axis_velocity"> @@ -183,6 +185,8 @@ The body mode. See [enum Mode] for possible values. </member> <member name="physics_material_override" type="PhysicsMaterial" setter="set_physics_material_override" getter="get_physics_material_override"> + The physics material override for the body. + If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> <member name="sleeping" type="bool" setter="set_sleeping" getter="is_sleeping" default="false"> If [code]true[/code], the body is sleeping and will not calculate forces until woken up by a collision or the [code]apply_impulse[/code] method. diff --git a/doc/classes/RigidBody2D.xml b/doc/classes/RigidBody2D.xml index 32a1634f77..c960ef5aee 100644 --- a/doc/classes/RigidBody2D.xml +++ b/doc/classes/RigidBody2D.xml @@ -169,6 +169,8 @@ The body's mode. See [enum Mode] for possible values. </member> <member name="physics_material_override" type="PhysicsMaterial" setter="set_physics_material_override" getter="get_physics_material_override"> + The physics material override for the body. + If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> <member name="sleeping" type="bool" setter="set_sleeping" getter="is_sleeping" default="false"> If [code]true[/code], the body is sleeping and will not calculate forces until woken up by a collision or by using [method apply_impulse] or [method add_force]. diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml index ed43f83f05..bd81a48ff5 100644 --- a/doc/classes/SceneTree.xml +++ b/doc/classes/SceneTree.xml @@ -69,9 +69,9 @@ Commonly used to create a one-shot delay timer as in the following example: [codeblock] func some_function(): - print("start") - yield(get_tree().create_timer(1.0), "timeout") - print("end") + print("start") + yield(get_tree().create_timer(1.0), "timeout") + print("end") [/codeblock] </description> </method> diff --git a/doc/classes/SceneTreeTimer.xml b/doc/classes/SceneTreeTimer.xml index a33f875be2..5678833752 100644 --- a/doc/classes/SceneTreeTimer.xml +++ b/doc/classes/SceneTreeTimer.xml @@ -8,9 +8,9 @@ As opposed to [Timer], it does not require the instantiation of a node. Commonly used to create a one-shot delay timer as in the following example: [codeblock] func some_function(): - print("start") - yield(get_tree().create_timer(1.0), "timeout") - print("end") + print("Timer started.") + yield(get_tree().create_timer(1.0), "timeout") + print("Timer ended.") [/codeblock] </description> <tutorials> diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml index fca73e3ea7..e8a88acdb5 100644 --- a/doc/classes/Script.xml +++ b/doc/classes/Script.xml @@ -32,6 +32,38 @@ Returns the script's base type. </description> </method> + <method name="get_property_default_value"> + <return type="Variant"> + </return> + <argument index="0" name="property" type="String"> + </argument> + <description> + </description> + </method> + <method name="get_script_constant_map"> + <return type="Dictionary"> + </return> + <description> + </description> + </method> + <method name="get_script_method_list"> + <return type="Array"> + </return> + <description> + </description> + </method> + <method name="get_script_property_list"> + <return type="Array"> + </return> + <description> + </description> + </method> + <method name="get_script_signal_list"> + <return type="Array"> + </return> + <description> + </description> + </method> <method name="has_script_signal" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/ScriptCreateDialog.xml b/doc/classes/ScriptCreateDialog.xml index def2fa944a..3d0fa9a0d5 100644 --- a/doc/classes/ScriptCreateDialog.xml +++ b/doc/classes/ScriptCreateDialog.xml @@ -29,6 +29,13 @@ </description> </method> </methods> + <members> + <member name="dialog_hide_on_ok" type="bool" setter="set_hide_on_ok" getter="get_hide_on_ok" override="true" default="false" /> + <member name="margin_bottom" type="float" setter="set_margin" getter="get_margin" override="true" default="232.0" /> + <member name="margin_right" type="float" setter="set_margin" getter="get_margin" override="true" default="361.0" /> + <member name="rect_size" type="Vector2" setter="_set_size" getter="get_size" override="true" default="Vector2( 361, 232 )" /> + <member name="window_title" type="String" setter="set_title" getter="get_title" override="true" default=""Attach Node Script"" /> + </members> <signals> <signal name="script_created"> <argument index="0" name="script" type="Script"> diff --git a/doc/classes/ScrollBar.xml b/doc/classes/ScrollBar.xml index 29bc85cc56..ea30b9d48c 100644 --- a/doc/classes/ScrollBar.xml +++ b/doc/classes/ScrollBar.xml @@ -13,6 +13,8 @@ <members> <member name="custom_step" type="float" setter="set_custom_step" getter="get_custom_step" default="-1.0"> </member> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="0" /> + <member name="step" type="float" setter="set_step" getter="get_step" override="true" default="0.0" /> </members> <signals> <signal name="scrolling"> diff --git a/doc/classes/ScrollContainer.xml b/doc/classes/ScrollContainer.xml index 59e8d566cf..5218b65886 100644 --- a/doc/classes/ScrollContainer.xml +++ b/doc/classes/ScrollContainer.xml @@ -23,6 +23,7 @@ </method> </methods> <members> + <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" /> <member name="scroll_deadzone" type="int" setter="set_deadzone" getter="get_deadzone" default="0"> </member> <member name="scroll_horizontal" type="int" setter="set_h_scroll" getter="get_h_scroll" default="0"> diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml index 7aee5c2951..74970be8b4 100644 --- a/doc/classes/Semaphore.xml +++ b/doc/classes/Semaphore.xml @@ -7,6 +7,7 @@ A synchronization semaphore which can be used to synchronize multiple [Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. For a binary version, see [Mutex]. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/threads/using_multiple_threads.html</link> </tutorials> <methods> <method name="post"> diff --git a/doc/classes/Skeleton.xml b/doc/classes/Skeleton.xml index b1e71ee924..7cd95390e6 100644 --- a/doc/classes/Skeleton.xml +++ b/doc/classes/Skeleton.xml @@ -4,7 +4,7 @@ Skeleton for characters and animated objects. </brief_description> <description> - Skeleton provides a hierarchical interface for managing bones, including pose, rest and animation (see [Animation]). Skeleton will support rag doll dynamics in the future. + Skeleton provides a hierarchical interface for managing bones, including pose, rest and animation (see [Animation]). It can also use ragdoll physics. The overall transform of a bone with respect to the skeleton is determined by the following hierarchical order: rest pose, custom pose and pose. Note that "global pose" below refers to the overall transform of the bone with respect to skeleton, so it not the actual global/world transform of the bone. </description> @@ -109,15 +109,6 @@ Returns the rest transform for a bone [code]bone_idx[/code]. </description> </method> - <method name="get_bone_transform" qualifiers="const"> - <return type="Transform"> - </return> - <argument index="0" name="bone_idx" type="int"> - </argument> - <description> - Returns the combination of custom pose and pose. The returned transform is in skeleton's reference frame. - </description> - </method> <method name="get_bound_child_nodes_to_bone" qualifiers="const"> <return type="Array"> </return> @@ -171,6 +162,14 @@ <description> </description> </method> + <method name="register_skin"> + <return type="SkinReference"> + </return> + <argument index="0" name="skin" type="Skin"> + </argument> + <description> + </description> + </method> <method name="set_bone_custom_pose"> <return type="void"> </return> @@ -191,22 +190,16 @@ <description> </description> </method> - <method name="set_bone_global_pose"> + <method name="set_bone_global_pose_override"> <return type="void"> </return> <argument index="0" name="bone_idx" type="int"> </argument> <argument index="1" name="pose" type="Transform"> </argument> - <description> - </description> - </method> - <method name="set_bone_ignore_animation"> - <return type="void"> - </return> - <argument index="0" name="bone" type="int"> + <argument index="2" name="amount" type="float"> </argument> - <argument index="1" name="ignore" type="bool"> + <argument index="3" name="persistent" type="bool" default="false"> </argument> <description> </description> @@ -265,10 +258,6 @@ </description> </method> </methods> - <members> - <member name="bones_in_world_transform" type="bool" setter="set_use_bones_in_world_transform" getter="is_using_bones_in_world_transform" default="false"> - </member> - </members> <constants> <constant name="NOTIFICATION_UPDATE_SKELETON" value="50"> </constant> diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml index 064a7266bd..886e8244a2 100644 --- a/doc/classes/Skeleton2D.xml +++ b/doc/classes/Skeleton2D.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="Skeleton2D" inherits="Node2D" category="Core" version="3.2"> <brief_description> + Skeleton for 2D characters and animated objects. </brief_description> <description> </description> @@ -20,6 +21,7 @@ <return type="int"> </return> <description> + Returns the amount of bones in the skeleton. </description> </method> <method name="get_skeleton" qualifiers="const"> diff --git a/doc/classes/Skin.xml b/doc/classes/Skin.xml new file mode 100644 index 0000000000..174febc883 --- /dev/null +++ b/doc/classes/Skin.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="Skin" inherits="Resource" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + <method name="add_bind"> + <return type="void"> + </return> + <argument index="0" name="bone" type="int"> + </argument> + <argument index="1" name="pose" type="Transform"> + </argument> + <description> + </description> + </method> + <method name="clear_binds"> + <return type="void"> + </return> + <description> + </description> + </method> + <method name="get_bind_bone" qualifiers="const"> + <return type="int"> + </return> + <argument index="0" name="bind_index" type="int"> + </argument> + <description> + </description> + </method> + <method name="get_bind_count" qualifiers="const"> + <return type="int"> + </return> + <description> + </description> + </method> + <method name="get_bind_pose" qualifiers="const"> + <return type="Transform"> + </return> + <argument index="0" name="bind_index" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_bind_bone"> + <return type="void"> + </return> + <argument index="0" name="bind_index" type="int"> + </argument> + <argument index="1" name="bone" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_bind_count"> + <return type="void"> + </return> + <argument index="0" name="bind_count" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_bind_pose"> + <return type="void"> + </return> + <argument index="0" name="bind_index" type="int"> + </argument> + <argument index="1" name="pose" type="Transform"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/SkinReference.xml b/doc/classes/SkinReference.xml new file mode 100644 index 0000000000..c12957654f --- /dev/null +++ b/doc/classes/SkinReference.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="SkinReference" inherits="Reference" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + <method name="get_skeleton" qualifiers="const"> + <return type="RID"> + </return> + <description> + </description> + </method> + <method name="get_skin" qualifiers="const"> + <return type="Skin"> + </return> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/doc/classes/Slider.xml b/doc/classes/Slider.xml index 24ddb95c96..14176da44f 100644 --- a/doc/classes/Slider.xml +++ b/doc/classes/Slider.xml @@ -14,11 +14,11 @@ <member name="editable" type="bool" setter="set_editable" getter="is_editable" default="true"> If [code]true[/code], the slider can be interacted with. If [code]false[/code], the value can be changed only by code. </member> - <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" enum="Control.FocusMode" default="2"> - </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="scrollable" type="bool" setter="set_scrollable" getter="is_scrollable" default="true"> If [code]true[/code], the value can be changed using the mouse wheel. </member> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="0" /> <member name="tick_count" type="int" setter="set_ticks" getter="get_ticks" default="0"> Number of ticks displayed on the slider, including border ticks. Ticks are uniformly-distributed value markers. </member> diff --git a/doc/classes/SoftBody.xml b/doc/classes/SoftBody.xml index 5cde31fa59..93f02c0e01 100644 --- a/doc/classes/SoftBody.xml +++ b/doc/classes/SoftBody.xml @@ -7,6 +7,7 @@ A deformable physics body. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html</link> </tutorials> <methods> <method name="add_collision_exception_with"> @@ -43,12 +44,6 @@ Returns an individual bit on the collision mask. </description> </method> - <method name="is_ray_pickable" qualifiers="const"> - <return type="bool"> - </return> - <description> - </description> - </method> <method name="remove_collision_exception_with"> <return type="void"> </return> @@ -80,25 +75,20 @@ Sets individual bits on the collision mask. Use this if you only need to change one layer's value. </description> </method> - <method name="set_ray_pickable"> - <return type="void"> - </return> - <argument index="0" name="ray_pickable" type="bool"> - </argument> - <description> - </description> - </method> </methods> <members> + <member name="ray_pickable" type="bool" setter="set_ray_pickable" getter="is_ray_pickable" default="false"> + If [code]true[/code], the [SoftBody] will respond to [RayCast]s. + </member> <member name="areaAngular_stiffness" type="float" setter="set_areaAngular_stiffness" getter="get_areaAngular_stiffness" default="0.5"> </member> <member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1"> - The physics layers this area is in. + The physics layers this SoftBody is in. Collidable objects can exist in any of 32 different layers. These layers work like a tagging system, and are not visual. A collidable can use these layers to select with which objects it can collide, using the collision_mask property. A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. </member> <member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1"> - The physics layers this area scans for collisions. + The physics layers this SoftBody scans for collisions. </member> <member name="damping_coefficient" type="float" setter="set_damping_coefficient" getter="get_damping_coefficient" default="0.01"> </member> @@ -107,6 +97,7 @@ <member name="linear_stiffness" type="float" setter="set_linear_stiffness" getter="get_linear_stiffness" default="0.5"> </member> <member name="parent_collision_ignore" type="NodePath" setter="set_parent_collision_ignore" getter="get_parent_collision_ignore" default="NodePath("")"> + [NodePath] to a [CollisionObject] this SoftBody should avoid clipping. </member> <member name="pose_matching_coefficient" type="float" setter="set_pose_matching_coefficient" getter="get_pose_matching_coefficient" default="0.0"> </member> @@ -116,6 +107,7 @@ Increasing this value will improve the resulting simulation, but can affect performance. Use with care. </member> <member name="total_mass" type="float" setter="set_total_mass" getter="get_total_mass" default="1.0"> + The SoftBody's mass. </member> <member name="volume_stiffness" type="float" setter="set_volume_stiffness" getter="get_volume_stiffness" default="0.5"> </member> diff --git a/doc/classes/Spatial.xml b/doc/classes/Spatial.xml index 09a5bf3b8f..0309e73eec 100644 --- a/doc/classes/Spatial.xml +++ b/doc/classes/Spatial.xml @@ -15,6 +15,7 @@ <return type="void"> </return> <description> + Forces the transform to update. Transform changes in physics are not instant for performance reasons. Transforms are accumulated and then set. Use this if you need an up-to-date transform when doing physics operations. </description> </method> <method name="get_parent_spatial" qualifiers="const"> @@ -48,6 +49,7 @@ <argument index="0" name="scale" type="Vector3"> </argument> <description> + Scales the global (world) transformation by the given [Vector3] scale factors. </description> </method> <method name="global_translate"> @@ -77,6 +79,7 @@ <return type="bool"> </return> <description> + Returns whether this node uses a scale of [code](1, 1, 1)[/code] or its local transformation scale. </description> </method> <method name="is_set_as_toplevel" qualifiers="const"> @@ -206,6 +209,7 @@ <argument index="0" name="disable" type="bool"> </argument> <description> + Sets whether the node uses a scale of [code](1, 1, 1)[/code] or its local transformation scale. Changes to the local transformation scale are preserved. </description> </method> <method name="set_identity"> diff --git a/doc/classes/StaticBody.xml b/doc/classes/StaticBody.xml index a9709d00df..f8840ddc14 100644 --- a/doc/classes/StaticBody.xml +++ b/doc/classes/StaticBody.xml @@ -28,6 +28,8 @@ Deprecated, use [member PhysicsMaterial.friction] instead via [member physics_material_override]. </member> <member name="physics_material_override" type="PhysicsMaterial" setter="set_physics_material_override" getter="get_physics_material_override"> + The physics material override for the body. + If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> </members> <constants> diff --git a/doc/classes/StaticBody2D.xml b/doc/classes/StaticBody2D.xml index 4a7f71b667..34276ec535 100644 --- a/doc/classes/StaticBody2D.xml +++ b/doc/classes/StaticBody2D.xml @@ -27,6 +27,8 @@ Deprecated, use [member PhysicsMaterial.friction] instead via [member physics_material_override]. </member> <member name="physics_material_override" type="PhysicsMaterial" setter="set_physics_material_override" getter="get_physics_material_override"> + The physics material override for the body. + If a material is assigned to this property, it will be used instead of any other physics material, such as an inherited one. </member> </members> <constants> diff --git a/doc/classes/StreamPeer.xml b/doc/classes/StreamPeer.xml index 678c587f8d..2a1919071a 100644 --- a/doc/classes/StreamPeer.xml +++ b/doc/classes/StreamPeer.xml @@ -211,6 +211,10 @@ </argument> <description> Puts a zero-terminated ASCII string into the stream prepended by a 32-bit unsigned integer representing its size. + Note: To put an ASCII string without prepending its size, you can use [method put_data]: + [codeblock] + put_data("Hello world".to_ascii()) + [/codeblock] </description> </method> <method name="put_u16"> @@ -256,6 +260,10 @@ </argument> <description> Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits unsigned integer representing its size. + Note: To put an UTF-8 string without prepending its size, you can use [method put_data]: + [codeblock] + put_data("Hello world".to_utf8()) + [/codeblock] </description> </method> <method name="put_var"> diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml index c960a794e2..b34d8d1b25 100644 --- a/doc/classes/StreamPeerSSL.xml +++ b/doc/classes/StreamPeerSSL.xml @@ -4,7 +4,7 @@ SSL stream peer. </brief_description> <description> - SSL stream peer. This object can be used to connect to SSL servers. + SSL stream peer. This object can be used to connect to an SSL server or accept a single SSL client connection. </description> <tutorials> <link>https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link> @@ -22,6 +22,7 @@ <argument index="3" name="chain" type="X509Certificate" default="null"> </argument> <description> + Accepts a peer connection as a server using the given [code]private_key[/code] and providing the given [code]certificate[/code] to the client. You can pass the optional [code]chain[/code] parameter to provide additional CA chain information along with the certificate. </description> </method> <method name="connect_to_stream"> diff --git a/doc/classes/StreamTexture.xml b/doc/classes/StreamTexture.xml index 9c7adea079..9cc3511b68 100644 --- a/doc/classes/StreamTexture.xml +++ b/doc/classes/StreamTexture.xml @@ -19,6 +19,7 @@ </method> </methods> <members> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> <member name="load_path" type="String" setter="load" getter="get_load_path" default=""""> The StreamTexture's file path to a [code].stex[/code] file. </member> diff --git a/doc/classes/String.xml b/doc/classes/String.xml index f6ec85c87d..e0a4a24299 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -437,6 +437,20 @@ [/codeblock] </description> </method> + <method name="humanize_size"> + <return type="String"> + </return> + <argument index="0" name="size" type="int"> + </argument> + <description> + Converts [code]size[/code] represented as number of bytes to human-readable format using internationalized set of data size units, namely: B, KiB, MiB, GiB, TiB, PiB, EiB. Note that the next smallest unit is picked automatically to hold at most 1024 units. + [codeblock] + var bytes = 133790307 + var size = String.humanize_size(bytes) + print(size) # prints "127.5 MiB" + [/codeblock] + </description> + </method> <method name="insert"> <return type="String"> </return> @@ -445,7 +459,7 @@ <argument index="1" name="what" type="String"> </argument> <description> - Inserts a substring at a given position. + Returns a copy of the string with the substring [code]what[/code] inserted at the given position. </description> </method> <method name="is_abs_path"> @@ -655,6 +669,15 @@ If the string is a path, this concatenates [code]file[/code] at the end of the string as a subpath. E.g. [code]"this/is".plus_file("path") == "this/is/path"[/code]. </description> </method> + <method name="repeat"> + <return type="String"> + </return> + <argument index="0" name="count" type="int"> + </argument> + <description> + Returns original string repeated a number of times. The number of repetitions is given by the argument. + </description> + </method> <method name="replace"> <return type="String"> </return> diff --git a/doc/classes/SurfaceTool.xml b/doc/classes/SurfaceTool.xml index 153d88f1af..7cfd8c6919 100644 --- a/doc/classes/SurfaceTool.xml +++ b/doc/classes/SurfaceTool.xml @@ -167,6 +167,7 @@ </argument> <description> Returns a constructed [ArrayMesh] from current information passed in. If an existing [ArrayMesh] is passed in as an argument, will add an extra surface to the existing [ArrayMesh]. + Default flag is [constant Mesh.ARRAY_COMPRESS_DEFAULT]. See [code]Mesh.ARRAY_COMPRESS_*[/code] constants for other flags. </description> </method> <method name="commit_to_arrays"> diff --git a/doc/classes/TabContainer.xml b/doc/classes/TabContainer.xml index 22b009a15a..1b9f38fc54 100644 --- a/doc/classes/TabContainer.xml +++ b/doc/classes/TabContainer.xml @@ -149,6 +149,8 @@ <member name="tabs_visible" type="bool" setter="set_tabs_visible" getter="are_tabs_visible" default="true"> If [code]true[/code], tabs are visible. If [code]false[/code], tabs' content and titles are hidden. </member> + <member name="use_hidden_tabs_for_min_size" type="bool" setter="set_use_hidden_tabs_for_min_size" getter="get_use_hidden_tabs_for_min_size" default="false"> + </member> </members> <signals> <signal name="pre_popup_pressed"> diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml index fb5f20361b..e883341107 100644 --- a/doc/classes/TextEdit.xml +++ b/doc/classes/TextEdit.xml @@ -54,7 +54,7 @@ <return type="void"> </return> <description> - Clears all the syntax coloring information. + Clears all custom syntax coloring information previously added with [method add_color_region] or [method add_keyword_color]. </description> </method> <method name="clear_undo_history"> @@ -94,7 +94,7 @@ </argument> <description> Moves the cursor at the specified [code]column[/code] index. - If [code]adjust_viewport[/code] is set to true, the viewport will center at the cursor position after the move occurs. + If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport will center at the cursor position after the move occurs. </description> </method> <method name="cursor_set_line"> @@ -110,8 +110,8 @@ </argument> <description> Moves the cursor at the specified [code]line[/code] index. - If [code]adjust_viewport[/code] is set to true, the viewport will center at the cursor position after the move occurs. - If [code]can_be_hidden[/code] is set to true, the specified [code]line[/code] can be hidden using [method set_line_as_hidden]. + If [code]adjust_viewport[/code] is set to [code]true[/code], the viewport will center at the cursor position after the move occurs. + If [code]can_be_hidden[/code] is set to [code]true[/code], the specified [code]line[/code] can be hidden using [method set_line_as_hidden]. </description> </method> <method name="cut"> @@ -310,7 +310,15 @@ <argument index="3" name="from_column" type="int"> </argument> <description> - Perform a search inside the text. Search flags can be specified in the[code]SEARCH_*[/code] enum. + Perform a search inside the text. Search flags can be specified in the [code]SEARCH_*[/code] enum. + Returns an empty [code]PoolIntArray[/code] if no result was found. Otherwise, the result line and column can be accessed at indices specified in the [code]SEARCH_RESULT_*[/code] enum, e.g: + [codeblock] + var result = search(key, flags, line, column) + if result.size() > 0: + # result found + var res_line = result[TextEdit.SEARCH_RESULT_LINE] + var res_column = result[TextEdit.SEARCH_RESULT_COLUMN] + [/codeblock] </description> </method> <method name="select"> @@ -406,6 +414,7 @@ <member name="draw_tabs" type="bool" setter="set_draw_tabs" getter="is_drawing_tabs" default="false"> If [code]true[/code], the "tab" character will have a visible representation. </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="fold_gutter" type="bool" setter="set_draw_fold_gutter" getter="is_drawing_fold_gutter" default="false"> If [code]true[/code], the fold gutter is visible. This enables folding groups of indented lines. </member> @@ -422,11 +431,16 @@ </member> <member name="minimap_width" type="int" setter="set_minimap_width" getter="get_minimap_width" default="80"> </member> + <member name="mouse_default_cursor_shape" type="int" setter="set_default_cursor_shape" getter="get_default_cursor_shape" override="true" enum="Control.CursorShape" default="1" /> <member name="override_selected_font_color" type="bool" setter="set_override_selected_font_color" getter="is_overriding_selected_font_color" default="false"> </member> <member name="readonly" type="bool" setter="set_readonly" getter="is_readonly" default="false"> If [code]true[/code], read-only mode is enabled. Existing text cannot be modified and new text cannot be added. </member> + <member name="selecting_enabled" type="bool" setter="set_selecting_enabled" getter="is_selecting_enabled" default="true"> + </member> + <member name="shortcut_keys_enabled" type="bool" setter="set_shortcut_keys_enabled" getter="is_shortcut_keys_enabled" default="true"> + </member> <member name="show_line_numbers" type="bool" setter="set_show_line_numbers" getter="is_show_line_numbers_enabled" default="false"> If [code]true[/code], line numbers are displayed to the left of the text. </member> @@ -498,6 +512,12 @@ <constant name="SEARCH_BACKWARDS" value="4" enum="SearchFlags"> Search from end to beginning. </constant> + <constant name="SEARCH_RESULT_COLUMN" value="0" enum="SearchResult"> + Used to access the result column from [member search]. + </constant> + <constant name="SEARCH_RESULT_LINE" value="1" enum="SearchResult"> + Used to access the result line from [member search]. + </constant> <constant name="MENU_CUT" value="0" enum="MenuItems"> Cuts (Copies and clears) the selected text. </constant> @@ -524,7 +544,7 @@ </constant> </constants> <theme_items> - <theme_item name="background_color" type="Color" default="Color( 0, 0, 0, 1 )"> + <theme_item name="background_color" type="Color" default="Color( 0, 0, 0, 0 )"> Sets the background [Color] of this [TextEdit]. [member syntax_highlighting] has to be enabled. </theme_item> <theme_item name="bookmark_color" type="Color" default="Color( 0.08, 0.49, 0.98, 1 )"> diff --git a/doc/classes/Texture3D.xml b/doc/classes/Texture3D.xml index 30724eed50..c11a48137f 100644 --- a/doc/classes/Texture3D.xml +++ b/doc/classes/Texture3D.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="data" type="Dictionary" setter="_set_data" getter="_get_data" override="true" default="{"depth": 0,"flags": 4,"format": 37,"height": 0,"layers": [ ],"width": 0}" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/TextureProgress.xml b/doc/classes/TextureProgress.xml index 4f8ea6438b..479ab865ba 100644 --- a/doc/classes/TextureProgress.xml +++ b/doc/classes/TextureProgress.xml @@ -32,8 +32,9 @@ <member name="fill_mode" type="int" setter="set_fill_mode" getter="get_fill_mode" default="0"> The fill direction. See [enum FillMode] for possible values. </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="1" /> <member name="nine_patch_stretch" type="bool" setter="set_nine_patch_stretch" getter="get_nine_patch_stretch" default="false"> - If [code]true[/code], Godot treats the bar's textures like in [NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like [member stretch_margin_bottom] to set up the nine patch's 3×3 grid. + If [code]true[/code], Godot treats the bar's textures like in [NinePatchRect]. Use the [code]stretch_margin_*[/code] properties like [member stretch_margin_bottom] to set up the nine patch's 3×3 grid. When using a radial [member fill_mode], this setting will enable stretching. </member> <member name="radial_center_offset" type="Vector2" setter="set_radial_center_offset" getter="get_radial_center_offset" default="Vector2( 0, 0 )"> Offsets [member texture_progress] if [member fill_mode] is [constant FILL_CLOCKWISE] or [constant FILL_COUNTER_CLOCKWISE]. diff --git a/doc/classes/TextureRect.xml b/doc/classes/TextureRect.xml index be46459b21..997a686e82 100644 --- a/doc/classes/TextureRect.xml +++ b/doc/classes/TextureRect.xml @@ -20,6 +20,7 @@ <member name="flip_v" type="bool" setter="set_flip_v" getter="is_flipped_v" default="false"> If [code]true[/code], texture is flipped vertically. </member> + <member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" override="true" enum="Control.MouseFilter" default="1" /> <member name="stretch_mode" type="int" setter="set_stretch_mode" getter="get_stretch_mode" enum="TextureRect.StretchMode" default="0"> Controls the texture's behavior when resizing the node's bounding rectangle. See [enum StretchMode]. </member> diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml index e4db9243ef..dd12c5af23 100644 --- a/doc/classes/Theme.xml +++ b/doc/classes/Theme.xml @@ -15,6 +15,7 @@ <return type="void"> </return> <description> + Clears all values on the theme. </description> </method> <method name="clear_color"> @@ -85,6 +86,7 @@ <argument index="0" name="other" type="Theme"> </argument> <description> + Sets the Theme's values to a copy of a given theme. </description> </method> <method name="get_color" qualifiers="const"> diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml index 8f96ab0aed..25e40d4c1f 100644 --- a/doc/classes/Thread.xml +++ b/doc/classes/Thread.xml @@ -7,6 +7,7 @@ A unit of execution in a process. Can run methods on [Object]s simultaneously. The use of synchronization via [Mutex] or [Semaphore] is advised if working with shared objects. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/threads/using_multiple_threads.html</link> </tutorials> <methods> <method name="get_id" qualifiers="const"> diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml index efb7a0d900..7376f624cb 100644 --- a/doc/classes/TileMap.xml +++ b/doc/classes/TileMap.xml @@ -43,6 +43,7 @@ <argument index="1" name="y" type="int"> </argument> <description> + Returns the coordinate of the autotile variation in the tileset. Returns a zero vector if the cell doesn't have autotiling. </description> </method> <method name="get_cellv" qualifiers="const"> @@ -255,8 +256,9 @@ </methods> <members> <member name="cell_clip_uv" type="bool" setter="set_clip_uv" getter="get_clip_uv" default="false"> + If [code]true[/code], the cell's UVs will be clipped. </member> - <member name="cell_custom_transform" type="Transform2D" setter="set_custom_transform" getter="get_custom_transform" default="Transform2D( 1, 0, 0, 1, 0, 0 )"> + <member name="cell_custom_transform" type="Transform2D" setter="set_custom_transform" getter="get_custom_transform" default="Transform2D( 64, 0, 0, 64, 0, 0 )"> The custom [Transform2D] to be applied to the TileMap's cells. </member> <member name="cell_half_offset" type="int" setter="set_half_offset" getter="get_half_offset" enum="TileMap.HalfOffset" default="2"> @@ -294,6 +296,7 @@ If [code]true[/code], TileMap collisions will be handled as a kinematic body. If [code]false[/code], collisions will be handled as static body. </member> <member name="collision_use_parent" type="bool" setter="set_collision_use_parent" getter="get_collision_use_parent" default="false"> + If [code]true[/code], this tilemap's collision shape will be added to the collision shape of the parent. The parent has to be a [CollisionObject2D]. </member> <member name="compatibility_mode" type="bool" setter="set_compatibility_mode" getter="is_compatibility_mode_enabled" default="false"> If [code]true[/code], the compatibility with the tilemaps made in Godot 3.1 or earlier is maintained (textures move when the tile origin changes and rotate if the texture size is not homogeneous). This mode presents problems when doing [code]flip_h[/code], [code]flip_v[/code] and [code]transpose[/code] tile operations on non-homogeneous isometric tiles (e.g. 2:1), in which the texture could not coincide with the collision, thus it is not recommended for isometric or non-square tiles. diff --git a/doc/classes/ToolButton.xml b/doc/classes/ToolButton.xml index f617c2a94f..d5edbe3972 100644 --- a/doc/classes/ToolButton.xml +++ b/doc/classes/ToolButton.xml @@ -14,6 +14,9 @@ </tutorials> <methods> </methods> + <members> + <member name="flat" type="bool" setter="set_flat" getter="is_flat" override="true" default="true" /> + </members> <constants> </constants> <theme_items> diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml index 51d56c758e..e0c8d0b0e8 100644 --- a/doc/classes/Tree.xml +++ b/doc/classes/Tree.xml @@ -231,12 +231,14 @@ <member name="drop_mode_flags" type="int" setter="set_drop_mode_flags" getter="get_drop_mode_flags" default="0"> The drop mode as an OR combination of flags. See [code]DROP_MODE_*[/code] constants. Once dropping is done, reverts to [constant DROP_MODE_DISABLED]. Setting this during [method Control.can_drop_data] is recommended. </member> + <member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" override="true" enum="Control.FocusMode" default="2" /> <member name="hide_folding" type="bool" setter="set_hide_folding" getter="is_folding_hidden" default="false"> If [code]true[/code], the folding arrow is hidden. </member> <member name="hide_root" type="bool" setter="set_hide_root" getter="is_root_hidden" default="false"> If [code]true[/code], the tree's root is hidden. </member> + <member name="rect_clip_content" type="bool" setter="set_clip_contents" getter="is_clipping_contents" override="true" default="true" /> <member name="select_mode" type="int" setter="set_select_mode" getter="get_select_mode" enum="Tree.SelectMode" default="0"> Allows single or multiple selection. See the [code]SELECT_*[/code] constants. </member> @@ -403,8 +405,6 @@ </theme_item> <theme_item name="guide_color" type="Color" default="Color( 0, 0, 0, 0.1 )"> </theme_item> - <theme_item name="guide_width" type="int" default="2"> - </theme_item> <theme_item name="hseparation" type="int" default="4"> </theme_item> <theme_item name="item_margin" type="int" default="12"> diff --git a/doc/classes/TreeItem.xml b/doc/classes/TreeItem.xml index 04deae6bf5..c77388e5f4 100644 --- a/doc/classes/TreeItem.xml +++ b/doc/classes/TreeItem.xml @@ -26,6 +26,15 @@ Adds a button with [Texture] [code]button[/code] at column [code]column[/code]. The [code]button_idx[/code] index is used to identify the button when calling other methods. If not specified, the next available index is used, which may be retrieved by calling [method get_button_count] immediately after this method. Optionally, the button can be [code]disabled[/code] and have a [code]tooltip[/code]. </description> </method> + <method name="call_recursive" qualifiers="vararg"> + <return type="Variant"> + </return> + <argument index="0" name="method" type="String"> + </argument> + <description> + Calls the [code]method[/code] on the actual TreeItem and its children recursively. Pass parameters as a comma separated list. + </description> + </method> <method name="clear_custom_bg_color"> <return type="void"> </return> @@ -84,6 +93,17 @@ Returns the number of buttons in column [code]column[/code]. May be used to get the most recently added button's index, if no index was specified. </description> </method> + <method name="get_button_tooltip" qualifiers="const"> + <return type="String"> + </return> + <argument index="0" name="column" type="int"> + </argument> + <argument index="1" name="button_idx" type="int"> + </argument> + <description> + Returns the tooltip string for the button at index [code]button_idx[/code] in column [code]column[/code]. + </description> + </method> <method name="get_cell_mode" qualifiers="const"> <return type="int" enum="TreeItem.TreeCellMode"> </return> @@ -109,6 +129,15 @@ Returns the custom background color of column [code]column[/code]. </description> </method> + <method name="get_custom_color" qualifiers="const"> + <return type="Color"> + </return> + <argument index="0" name="column" type="int"> + </argument> + <description> + Returns the custom color of column [code]column[/code]. + </description> + </method> <method name="get_expand_right" qualifiers="const"> <return type="bool"> </return> diff --git a/doc/classes/VScrollBar.xml b/doc/classes/VScrollBar.xml index 0f46654bc2..4c06195d5c 100644 --- a/doc/classes/VScrollBar.xml +++ b/doc/classes/VScrollBar.xml @@ -9,6 +9,10 @@ </tutorials> <methods> </methods> + <members> + <member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" /> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" /> + </members> <constants> </constants> <theme_items> diff --git a/doc/classes/VSlider.xml b/doc/classes/VSlider.xml index 550bd16074..fc62e5c892 100644 --- a/doc/classes/VSlider.xml +++ b/doc/classes/VSlider.xml @@ -10,6 +10,10 @@ </tutorials> <methods> </methods> + <members> + <member name="size_flags_horizontal" type="int" setter="set_h_size_flags" getter="get_h_size_flags" override="true" default="0" /> + <member name="size_flags_vertical" type="int" setter="set_v_size_flags" getter="get_v_size_flags" override="true" default="1" /> + </members> <constants> </constants> <theme_items> diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml index 522e131b45..28c3bc8e85 100644 --- a/doc/classes/Variant.xml +++ b/doc/classes/Variant.xml @@ -4,7 +4,37 @@ The most important data type in Godot. </brief_description> <description> + In computer programming, a Variant class is a class that is designed to store a variety of other types. Dynamic programming languages like PHP, Lua, JavaScript and GDScript like to use them to store variables' data on the backend. With these Variants, properties are able to change value types freely. + [codeblock] + var foo = 2 # foo is dynamically an integer + foo = "Now foo is a string!" + foo = Reference.new() # foo is an Object + var bar: int = 2 # bar is a statically typed integer. + # bar = "Uh oh! I can't make static variables become a different type!" + [/codeblock] + Godot tracks all scripting API variables within Variants. Without even realizing it, you use Variants all the time. When a particular language enforces its own rules for keeping data typed, then that language is applying its own custom logic over the base Variant scripting API. + - GDScript automatically wrap values in them. It keeps all data in plain Variants by default and then optionally enforces custom static typing rules on variable types. + - VisualScript tracks properties inside Variants as well, but it also uses static typing. The GUI interface enforces that properties have a particular type that doesn't change over time. + - C# is statically typed, but uses the Mono [code]object[/code] type in place of Godot's Variant class when it needs to represent a dynamic value. [code]object[/code] is the Mono runtime's equivalent of the same concept. + - The statically-typed language NativeScript C++ does not define a built-in Variant-like class. Godot's GDNative bindings provide their own godot::Variant class for users; Any point at which the C++ code starts interacting with the Godot runtime is a place where you might have to start wrapping data inside Variant objects. + The global [member @GDScript.typeof] function returns the enumerated value of the Variant type stored in the current variable. These correspond to [code]TYPE_*[/code] constants in the [@GlobalScope] docs. + [codeblock] + var foo = 2 + match typeof(foo): + TYPE_NIL: + print("foo is null!") + TYPE_INTEGER: + print("foo is an integer!") + TYPE_OBJECT: + # Note that Objects are their own special category. + # To get the name of the underlying Object type, you need the `get_class()` method. + print("foo is a(n) %s" % foo.get_class()) # inject the class name into a formatted string. + # Note also that there is not yet any way to get a script's `class_name` string easily. + # To fetch that value, you need to dig deeply into a hidden ProjectSettings setting: an Array of Dictionaries called "_global_script_classes". + # Open your project.godot file to see it up close. + [/codeblock] A Variant takes up only 20 bytes and can store almost any engine datatype inside of it. Variants are rarely used to hold information for long periods of time. Instead, they are used mainly for communication, editing, serialization and moving data around. + Godot has specifically invested in making its Variant class as flexible as possible; so much so that it is used for a multitude of operations to facilitate communication between all of Godot's systems. A Variant: - Can store almost any datatype. - Can perform operations between many variants. GDScript uses Variant as its atomic/native datatype. @@ -16,10 +46,11 @@ - Can be serialized to text and use it for printing values and editable settings. - Can work as an exported property, so the editor can edit it universally. - Can be used for dictionaries, arrays, parsers, etc. - [b]Containers ([Array] and [Dictionary]):[/b] Both are implemented using variants. A [Dictionary] can match any datatype used as key to any other datatype. An [Array] just holds an array of Variants. Of course, a Variant can also hold a [Dictionary] and an [Array] inside, making it even more flexible. + [b]Containers (Array and Dictionary):[/b] Both are implemented using variants. A [Dictionary] can match any datatype used as key to any other datatype. An [Array] just holds an array of Variants. Of course, a Variant can also hold a [Dictionary] and an [Array] inside, making it even more flexible. Modifications to a container will modify all references to it. A [Mutex] should be created to lock it if multi-threaded access is desired. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link> </tutorials> <methods> </methods> diff --git a/doc/classes/VehicleBody.xml b/doc/classes/VehicleBody.xml index 956144b54c..1803d4e197 100644 --- a/doc/classes/VehicleBody.xml +++ b/doc/classes/VehicleBody.xml @@ -20,9 +20,11 @@ [b]Note:[/b] The simulation does not take the effect of gears into account, you will need to add logic for this if you wish to simulate gears. A negative value will result in the vehicle reversing. </member> + <member name="mass" type="float" setter="set_mass" getter="get_mass" override="true" default="40.0" /> <member name="steering" type="float" setter="set_steering" getter="get_steering" default="0.0"> The steering angle for the vehicle. Setting this to a non-zero value will result in the vehicle turning when it's moving. Wheels that have [member VehicleWheel.use_as_steering] set to [code]true[/code] will automatically be rotated. </member> + <member name="weight" type="float" setter="set_weight" getter="get_weight" override="true" default="392.0" /> </members> <constants> </constants> diff --git a/doc/classes/VideoPlayer.xml b/doc/classes/VideoPlayer.xml index 18a85d496f..804489f7f1 100644 --- a/doc/classes/VideoPlayer.xml +++ b/doc/classes/VideoPlayer.xml @@ -16,7 +16,7 @@ Returns the video stream's name. </description> </method> - <method name="get_video_texture"> + <method name="get_video_texture" qualifiers="const"> <return type="Texture"> </return> <description> @@ -65,6 +65,7 @@ If [code]true[/code], the video is paused. </member> <member name="stream" type="VideoStream" setter="set_stream" getter="get_stream"> + The assigned video stream. See description for supported formats. </member> <member name="stream_position" type="float" setter="set_stream_position" getter="get_stream_position"> The current position of the stream, in seconds. diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml index 117c4835eb..9bc46881f9 100644 --- a/doc/classes/Viewport.xml +++ b/doc/classes/Viewport.xml @@ -281,7 +281,8 @@ The subdivision amount of fourth quadrant on shadow atlas. </member> <member name="shadow_atlas_size" type="int" setter="set_shadow_atlas_size" getter="get_shadow_atlas_size" default="0"> - The resolution of shadow atlas. Both width and height is equal to one value. + The shadow atlas' resolution (used for omni and spot lights). The value will be rounded up to the nearest power of 2. + [b]Note:[/b] If this is set to 0, shadows won't be visible. Since user-created viewports default to a value of 0, this value must be set above 0 manually. </member> <member name="size" type="Vector2" setter="set_size" getter="get_size" default="Vector2( 0, 0 )"> The width and height of viewport. diff --git a/doc/classes/ViewportTexture.xml b/doc/classes/ViewportTexture.xml index 5b9eb6a8cb..f4994699a3 100644 --- a/doc/classes/ViewportTexture.xml +++ b/doc/classes/ViewportTexture.xml @@ -12,6 +12,8 @@ <methods> </methods> <members> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="0" /> + <member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" override="true" default="true" /> <member name="viewport_path" type="NodePath" setter="set_viewport_path_in_scene" getter="get_viewport_path_in_scene" default="NodePath("")"> The path to the [Viewport] node to display. This is relative to the scene root, not to the node which uses the texture. </member> diff --git a/doc/classes/VisibilityEnabler2D.xml b/doc/classes/VisibilityEnabler2D.xml index 0f25c00489..96f6a42cdf 100644 --- a/doc/classes/VisibilityEnabler2D.xml +++ b/doc/classes/VisibilityEnabler2D.xml @@ -4,7 +4,7 @@ Enables certain nodes only when visible. </brief_description> <description> - The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and other nodes when they are not visible. It will only affect other nodes within the same scene as the VisibilityEnabler2D itself. + The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and other nodes when they are not visible. It will only affect nodes with the same root node as the VisibilityEnabler2D, and the root node itself. </description> <tutorials> </tutorials> diff --git a/doc/classes/VisualServer.xml b/doc/classes/VisualServer.xml index 5e054ce7ce..b95b970816 100644 --- a/doc/classes/VisualServer.xml +++ b/doc/classes/VisualServer.xml @@ -189,13 +189,13 @@ </argument> <argument index="1" name="mesh" type="RID"> </argument> - <argument index="2" name="texture" type="Transform2D"> + <argument index="2" name="transform" type="Transform2D" default="Transform2D( 1, 0, 0, 1, 0, 0 )"> </argument> - <argument index="3" name="normal_map" type="Color"> + <argument index="3" name="modulate" type="Color" default="Color( 1, 1, 1, 1 )"> </argument> - <argument index="4" name="arg4" type="RID"> + <argument index="4" name="texture" type="RID"> </argument> - <argument index="5" name="arg5" type="RID"> + <argument index="5" name="normal_map" type="RID"> </argument> <description> </description> @@ -3855,7 +3855,7 @@ <argument index="1" name="size" type="int"> </argument> <description> - Sets the size of the shadow atlas's images. + Sets the size of the shadow atlas's images (used for omni and spot lights). The value will be rounded up to the nearest power of 2. </description> </method> <method name="viewport_set_size"> diff --git a/doc/classes/VisualShader.xml b/doc/classes/VisualShader.xml index 4bd3de4fc8..15216948e4 100644 --- a/doc/classes/VisualShader.xml +++ b/doc/classes/VisualShader.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="VisualShader" inherits="Shader" category="Core" version="3.2"> <brief_description> + A custom shader program with a visual editor. </brief_description> <description> + This class allows you to define a custom shader program that can be used for various materials to render objects. + The visual shader editor creates the shader. </description> <tutorials> </tutorials> @@ -145,12 +148,6 @@ <description> </description> </method> - <method name="rebuild"> - <return type="void"> - </return> - <description> - </description> - </method> <method name="remove_node"> <return type="void"> </return> @@ -183,6 +180,7 @@ </method> </methods> <members> + <member name="code" type="String" setter="set_code" getter="get_code" override="true" default=""shader_type spatial;void vertex() {// Output:0}void fragment() {// Output:0}void light() {// Output:0}"" /> <member name="graph_offset" type="Vector2" setter="set_graph_offset" getter="get_graph_offset" default="Vector2( 0, 0 )"> </member> </members> diff --git a/doc/classes/VisualShaderNode.xml b/doc/classes/VisualShaderNode.xml index 3e80349b13..9b0c6b2604 100644 --- a/doc/classes/VisualShaderNode.xml +++ b/doc/classes/VisualShaderNode.xml @@ -51,8 +51,11 @@ <constant name="PORT_TYPE_TRANSFORM" value="3" enum="PortType"> Transform type. Translated to [code]mat4[/code] type in shader code. </constant> - <constant name="PORT_TYPE_ICON_COLOR" value="4" enum="PortType"> - Color type. Can be used for return icon type in members dialog (see [method VisualShaderNodeCustom._get_return_icon_type]) - do not use it in other cases! + <constant name="PORT_TYPE_SAMPLER" value="4" enum="PortType"> + Sampler type. Translated to reference of sampler uniform in shader code. Can only be used for input ports in non-uniform nodes. + </constant> + <constant name="PORT_TYPE_MAX" value="5" enum="PortType"> + Represents the size of the [enum PortType] enum. </constant> </constants> </class> diff --git a/doc/classes/VisualShaderNodeBooleanConstant.xml b/doc/classes/VisualShaderNodeBooleanConstant.xml index b46905cfea..2490dbbcc0 100644 --- a/doc/classes/VisualShaderNodeBooleanConstant.xml +++ b/doc/classes/VisualShaderNodeBooleanConstant.xml @@ -11,6 +11,7 @@ <members> <member name="constant" type="bool" setter="set_constant" getter="get_constant" default="false"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> </members> <constants> </constants> diff --git a/doc/classes/VisualShaderNodeColorConstant.xml b/doc/classes/VisualShaderNodeColorConstant.xml index 282966a9ca..f58d1d8e76 100644 --- a/doc/classes/VisualShaderNodeColorConstant.xml +++ b/doc/classes/VisualShaderNodeColorConstant.xml @@ -11,6 +11,7 @@ <members> <member name="constant" type="Color" setter="set_constant" getter="get_constant" default="Color( 1, 1, 1, 1 )"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> </members> <constants> </constants> diff --git a/doc/classes/VisualShaderNodeColorOp.xml b/doc/classes/VisualShaderNodeColorOp.xml index 77c5361f4d..9997e9c83c 100644 --- a/doc/classes/VisualShaderNodeColorOp.xml +++ b/doc/classes/VisualShaderNodeColorOp.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeColorOp.Operator" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeCompare.xml b/doc/classes/VisualShaderNodeCompare.xml index 7edad5294d..b1106998e9 100644 --- a/doc/classes/VisualShaderNodeCompare.xml +++ b/doc/classes/VisualShaderNodeCompare.xml @@ -11,6 +11,7 @@ <members> <member name="condition" type="int" setter="set_condition" getter="get_condition" enum="VisualShaderNodeCompare.Condition" default="0"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, 1e-05 ]" /> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeCompare.Function" default="0"> </member> <member name="type" type="int" setter="set_comparsion_type" getter="get_comparsion_type" enum="VisualShaderNodeCompare.ComparsionType" default="0"> diff --git a/doc/classes/VisualShaderNodeCubeMap.xml b/doc/classes/VisualShaderNodeCubeMap.xml index b695297f07..29ebe95086 100644 --- a/doc/classes/VisualShaderNodeCubeMap.xml +++ b/doc/classes/VisualShaderNodeCubeMap.xml @@ -11,10 +11,17 @@ <members> <member name="cube_map" type="CubeMap" setter="set_cube_map" getter="get_cube_map"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> + <member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeCubeMap.Source" default="0"> + </member> <member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="VisualShaderNodeCubeMap.TextureType" default="0"> </member> </members> <constants> + <constant name="SOURCE_TEXTURE" value="0" enum="Source"> + </constant> + <constant name="SOURCE_PORT" value="1" 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/VisualShaderNodeCubeMapUniform.xml b/doc/classes/VisualShaderNodeCubeMapUniform.xml index b06fc97b14..c6b3db5a9d 100644 --- a/doc/classes/VisualShaderNodeCubeMapUniform.xml +++ b/doc/classes/VisualShaderNodeCubeMapUniform.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" ?> -<class name="VisualShaderNodeCubeMapUniform" inherits="VisualShaderNode" category="Core" version="3.2"> +<class name="VisualShaderNodeCubeMapUniform" inherits="VisualShaderNodeTextureUniform" category="Core" version="3.2"> <brief_description> </brief_description> <description> diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml index 9e58abae97..5219dcb77b 100644 --- a/doc/classes/VisualShaderNodeCustom.xml +++ b/doc/classes/VisualShaderNodeCustom.xml @@ -144,6 +144,9 @@ </description> </method> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeDeterminant.xml b/doc/classes/VisualShaderNodeDeterminant.xml index a86db216c4..4ea7e5ed6e 100644 --- a/doc/classes/VisualShaderNodeDeterminant.xml +++ b/doc/classes/VisualShaderNodeDeterminant.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeDotProduct.xml b/doc/classes/VisualShaderNodeDotProduct.xml index f07827db29..4c2bae39a1 100644 --- a/doc/classes/VisualShaderNodeDotProduct.xml +++ b/doc/classes/VisualShaderNodeDotProduct.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeExpression.xml b/doc/classes/VisualShaderNodeExpression.xml index ddb85d7e43..9727b8698b 100644 --- a/doc/classes/VisualShaderNodeExpression.xml +++ b/doc/classes/VisualShaderNodeExpression.xml @@ -15,6 +15,7 @@ </method> </methods> <members> + <member name="editable" type="bool" setter="set_editable" getter="is_editable" override="true" default="true" /> <member name="expression" type="String" setter="set_expression" getter="get_expression" default=""""> </member> </members> diff --git a/doc/classes/VisualShaderNodeFaceForward.xml b/doc/classes/VisualShaderNodeFaceForward.xml index ea8589e6cb..9c755cc6de 100644 --- a/doc/classes/VisualShaderNodeFaceForward.xml +++ b/doc/classes/VisualShaderNodeFaceForward.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeFresnel.xml b/doc/classes/VisualShaderNodeFresnel.xml index 2484a44fcd..f79ae04abf 100644 --- a/doc/classes/VisualShaderNodeFresnel.xml +++ b/doc/classes/VisualShaderNodeFresnel.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, false, 3, 1.0 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeGlobalExpression.xml b/doc/classes/VisualShaderNodeGlobalExpression.xml index 3c5a26bf47..f008c639cf 100644 --- a/doc/classes/VisualShaderNodeGlobalExpression.xml +++ b/doc/classes/VisualShaderNodeGlobalExpression.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="editable" type="bool" setter="set_editable" getter="is_editable" override="true" default="false" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeGroupBase.xml b/doc/classes/VisualShaderNodeGroupBase.xml index d32a63d605..511a56b7a6 100644 --- a/doc/classes/VisualShaderNodeGroupBase.xml +++ b/doc/classes/VisualShaderNodeGroupBase.xml @@ -146,9 +146,9 @@ <method name="set_input_port_name"> <return type="void"> </return> - <argument index="0" name="arg0" type="int"> + <argument index="0" name="id" type="int"> </argument> - <argument index="1" name="arg1" type="String"> + <argument index="1" name="name" type="String"> </argument> <description> </description> @@ -156,9 +156,9 @@ <method name="set_input_port_type"> <return type="void"> </return> - <argument index="0" name="arg0" type="int"> + <argument index="0" name="id" type="int"> </argument> - <argument index="1" name="arg1" type="int"> + <argument index="1" name="type" type="int"> </argument> <description> </description> @@ -174,9 +174,9 @@ <method name="set_output_port_name"> <return type="void"> </return> - <argument index="0" name="arg0" type="int"> + <argument index="0" name="id" type="int"> </argument> - <argument index="1" name="arg1" type="String"> + <argument index="1" name="name" type="String"> </argument> <description> </description> @@ -184,9 +184,9 @@ <method name="set_output_port_type"> <return type="void"> </return> - <argument index="0" name="arg0" type="int"> + <argument index="0" name="id" type="int"> </argument> - <argument index="1" name="arg1" type="int"> + <argument index="1" name="type" type="int"> </argument> <description> </description> @@ -209,6 +209,7 @@ </method> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> <member name="editable" type="bool" setter="set_editable" getter="is_editable" default="false"> </member> </members> diff --git a/doc/classes/VisualShaderNodeIf.xml b/doc/classes/VisualShaderNodeIf.xml index 374a1e379a..6900cdf81b 100644 --- a/doc/classes/VisualShaderNodeIf.xml +++ b/doc/classes/VisualShaderNodeIf.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, 1e-05, 3, Vector3( 0, 0, 0 ), 4, Vector3( 0, 0, 0 ), 5, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml index 25fd2ec8d8..302c8dff71 100644 --- a/doc/classes/VisualShaderNodeInput.xml +++ b/doc/classes/VisualShaderNodeInput.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> <member name="input_name" type="String" setter="set_input_name" getter="get_input_name" default=""[None]""> </member> </members> diff --git a/doc/classes/VisualShaderNodeIs.xml b/doc/classes/VisualShaderNodeIs.xml index 8db64b7cde..c221e60b75 100644 --- a/doc/classes/VisualShaderNodeIs.xml +++ b/doc/classes/VisualShaderNodeIs.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0 ]" /> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeIs.Function" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeOuterProduct.xml b/doc/classes/VisualShaderNodeOuterProduct.xml index 3debde0634..6111084b44 100644 --- a/doc/classes/VisualShaderNodeOuterProduct.xml +++ b/doc/classes/VisualShaderNodeOuterProduct.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeScalarClamp.xml b/doc/classes/VisualShaderNodeScalarClamp.xml index 4c5309d1e7..927aeb01ce 100644 --- a/doc/classes/VisualShaderNodeScalarClamp.xml +++ b/doc/classes/VisualShaderNodeScalarClamp.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, 1.0 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeScalarConstant.xml b/doc/classes/VisualShaderNodeScalarConstant.xml index 0af09e74e3..c4ac65aa48 100644 --- a/doc/classes/VisualShaderNodeScalarConstant.xml +++ b/doc/classes/VisualShaderNodeScalarConstant.xml @@ -11,6 +11,7 @@ <members> <member name="constant" type="float" setter="set_constant" getter="get_constant" default="0.0"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> </members> <constants> </constants> diff --git a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml index 09e2d2fa72..795054637e 100644 --- a/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml +++ b/doc/classes/VisualShaderNodeScalarDerivativeFunc.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0 ]" /> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarDerivativeFunc.Function" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeScalarFunc.xml b/doc/classes/VisualShaderNodeScalarFunc.xml index ef52086d6e..81ccf8aeb6 100644 --- a/doc/classes/VisualShaderNodeScalarFunc.xml +++ b/doc/classes/VisualShaderNodeScalarFunc.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0 ]" /> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeScalarFunc.Function" default="13"> </member> </members> diff --git a/doc/classes/VisualShaderNodeScalarInterp.xml b/doc/classes/VisualShaderNodeScalarInterp.xml index 9d01e20b8d..7e40304b04 100644 --- a/doc/classes/VisualShaderNodeScalarInterp.xml +++ b/doc/classes/VisualShaderNodeScalarInterp.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 1.0, 2, 0.5 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeScalarOp.xml b/doc/classes/VisualShaderNodeScalarOp.xml index 0aa692c228..3ff56bffaa 100644 --- a/doc/classes/VisualShaderNodeScalarOp.xml +++ b/doc/classes/VisualShaderNodeScalarOp.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0 ]" /> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeScalarOp.Operator" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeScalarSmoothStep.xml b/doc/classes/VisualShaderNodeScalarSmoothStep.xml index 737c535659..e71bb16f6f 100644 --- a/doc/classes/VisualShaderNodeScalarSmoothStep.xml +++ b/doc/classes/VisualShaderNodeScalarSmoothStep.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, 0.0 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeScalarSwitch.xml b/doc/classes/VisualShaderNodeScalarSwitch.xml new file mode 100644 index 0000000000..2828f42b47 --- /dev/null +++ b/doc/classes/VisualShaderNodeScalarSwitch.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="VisualShaderNodeScalarSwitch" inherits="VisualShaderNodeSwitch" category="Core" version="3.2"> + <brief_description> + </brief_description> + <description> + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, false, 1, 1.0, 2, 0.0 ]" /> + </members> + <constants> + </constants> +</class> diff --git a/doc/classes/VisualShaderNodeSwitch.xml b/doc/classes/VisualShaderNodeSwitch.xml index 930d914035..704ac08adb 100644 --- a/doc/classes/VisualShaderNodeSwitch.xml +++ b/doc/classes/VisualShaderNodeSwitch.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, false, 1, Vector3( 1, 1, 1 ), 2, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeTexture.xml b/doc/classes/VisualShaderNodeTexture.xml index f3bade9303..a94b798745 100644 --- a/doc/classes/VisualShaderNodeTexture.xml +++ b/doc/classes/VisualShaderNodeTexture.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> <member name="source" type="int" setter="set_source" getter="get_source" enum="VisualShaderNodeTexture.Source" default="0"> </member> <member name="texture" type="Texture" setter="set_texture" getter="get_texture"> diff --git a/doc/classes/VisualShaderNodeTransformCompose.xml b/doc/classes/VisualShaderNodeTransformCompose.xml index 0939eb393d..0c44e6b3c5 100644 --- a/doc/classes/VisualShaderNodeTransformCompose.xml +++ b/doc/classes/VisualShaderNodeTransformCompose.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, Vector3( 0, 0, 0 ), 3, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformConstant.xml b/doc/classes/VisualShaderNodeTransformConstant.xml index b184a3d337..737961f8ec 100644 --- a/doc/classes/VisualShaderNodeTransformConstant.xml +++ b/doc/classes/VisualShaderNodeTransformConstant.xml @@ -11,6 +11,7 @@ <members> <member name="constant" type="Transform" setter="set_constant" getter="get_constant" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> </members> <constants> </constants> diff --git a/doc/classes/VisualShaderNodeTransformDecompose.xml b/doc/classes/VisualShaderNodeTransformDecompose.xml index d986e6b7a8..911d2e953a 100644 --- a/doc/classes/VisualShaderNodeTransformDecompose.xml +++ b/doc/classes/VisualShaderNodeTransformDecompose.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeTransformFunc.xml b/doc/classes/VisualShaderNodeTransformFunc.xml index 7fb17b1a79..53b7c9f1ab 100644 --- a/doc/classes/VisualShaderNodeTransformFunc.xml +++ b/doc/classes/VisualShaderNodeTransformFunc.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) ]" /> <member name="function" type="int" setter="set_function" getter="get_function" enum="VisualShaderNodeTransformFunc.Function" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeTransformMult.xml b/doc/classes/VisualShaderNodeTransformMult.xml index 0406050025..f5368b3b1c 100644 --- a/doc/classes/VisualShaderNodeTransformMult.xml +++ b/doc/classes/VisualShaderNodeTransformMult.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ), 1, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) ]" /> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformMult.Operator" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeTransformVecMult.xml b/doc/classes/VisualShaderNodeTransformVecMult.xml index 881d0cf3cf..9ab9c08562 100644 --- a/doc/classes/VisualShaderNodeTransformVecMult.xml +++ b/doc/classes/VisualShaderNodeTransformVecMult.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeTransformVecMult.Operator" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeUniform.xml b/doc/classes/VisualShaderNodeUniform.xml index 6835a30baa..05539294a0 100644 --- a/doc/classes/VisualShaderNodeUniform.xml +++ b/doc/classes/VisualShaderNodeUniform.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> <member name="uniform_name" type="String" setter="set_uniform_name" getter="get_uniform_name" default=""""> </member> </members> diff --git a/doc/classes/VisualShaderNodeVec3Constant.xml b/doc/classes/VisualShaderNodeVec3Constant.xml index b17f56e1f8..06e033cd9d 100644 --- a/doc/classes/VisualShaderNodeVec3Constant.xml +++ b/doc/classes/VisualShaderNodeVec3Constant.xml @@ -11,6 +11,7 @@ <members> <member name="constant" type="Vector3" setter="set_constant" getter="get_constant" default="Vector3( 0, 0, 0 )"> </member> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ ]" /> </members> <constants> </constants> diff --git a/doc/classes/VisualShaderNodeVectorClamp.xml b/doc/classes/VisualShaderNodeVectorClamp.xml index a5d1e94e2f..8b9a0cacff 100644 --- a/doc/classes/VisualShaderNodeVectorClamp.xml +++ b/doc/classes/VisualShaderNodeVectorClamp.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, Vector3( 1, 1, 1 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorCompose.xml b/doc/classes/VisualShaderNodeVectorCompose.xml index b7f650c82e..11eb4d2778 100644 --- a/doc/classes/VisualShaderNodeVectorCompose.xml +++ b/doc/classes/VisualShaderNodeVectorCompose.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, 0.0 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorDistance.xml b/doc/classes/VisualShaderNodeVectorDistance.xml index f7c9acecf7..3b7f743864 100644 --- a/doc/classes/VisualShaderNodeVectorDistance.xml +++ b/doc/classes/VisualShaderNodeVectorDistance.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorInterp.xml b/doc/classes/VisualShaderNodeVectorInterp.xml index 2a398c653d..7aa525cd0e 100644 --- a/doc/classes/VisualShaderNodeVectorInterp.xml +++ b/doc/classes/VisualShaderNodeVectorInterp.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 1, 1, 1 ), 2, Vector3( 0.5, 0.5, 0.5 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorOp.xml b/doc/classes/VisualShaderNodeVectorOp.xml index 0ec49a3845..d237ee56b0 100644 --- a/doc/classes/VisualShaderNodeVectorOp.xml +++ b/doc/classes/VisualShaderNodeVectorOp.xml @@ -9,6 +9,7 @@ <methods> </methods> <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ) ]" /> <member name="operator" type="int" setter="set_operator" getter="get_operator" enum="VisualShaderNodeVectorOp.Operator" default="0"> </member> </members> diff --git a/doc/classes/VisualShaderNodeVectorRefract.xml b/doc/classes/VisualShaderNodeVectorRefract.xml index 4df072040a..453c2bf02f 100644 --- a/doc/classes/VisualShaderNodeVectorRefract.xml +++ b/doc/classes/VisualShaderNodeVectorRefract.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, 0.0 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorScalarMix.xml b/doc/classes/VisualShaderNodeVectorScalarMix.xml index d83c2e7d44..4ab396a14b 100644 --- a/doc/classes/VisualShaderNodeVectorScalarMix.xml +++ b/doc/classes/VisualShaderNodeVectorScalarMix.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 1, 1, 1 ), 2, 0.5 ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml b/doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml index 4334eee7c1..2aeb8c1b53 100644 --- a/doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml +++ b/doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, 0.0, 2, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorScalarStep.xml b/doc/classes/VisualShaderNodeVectorScalarStep.xml index ad8cac059b..c448404b7f 100644 --- a/doc/classes/VisualShaderNodeVectorScalarStep.xml +++ b/doc/classes/VisualShaderNodeVectorScalarStep.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, 0.0, 1, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/VisualShaderNodeVectorSmoothStep.xml b/doc/classes/VisualShaderNodeVectorSmoothStep.xml index 59acff7d05..bb80832c3c 100644 --- a/doc/classes/VisualShaderNodeVectorSmoothStep.xml +++ b/doc/classes/VisualShaderNodeVectorSmoothStep.xml @@ -8,6 +8,9 @@ </tutorials> <methods> </methods> + <members> + <member name="default_input_values" type="Array" setter="_set_default_input_values" getter="_get_default_input_values" override="true" default="[ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0, 0, 0 ), 2, Vector3( 0, 0, 0 ) ]" /> + </members> <constants> </constants> </class> diff --git a/doc/classes/X509Certificate.xml b/doc/classes/X509Certificate.xml index 013f768843..50e9e4e0d4 100644 --- a/doc/classes/X509Certificate.xml +++ b/doc/classes/X509Certificate.xml @@ -1,8 +1,11 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="X509Certificate" inherits="Resource" category="Core" version="3.2"> <brief_description> + An X509 certificate (e.g. for SSL). </brief_description> <description> + The X509Certificate class represents an X509 certificate. Certificates can be loaded and saved like any other [Resource]. + They can be used as the server certificate in [method StreamPeerSSL.accept_stream] (along with the proper [CryptoKey]), and to specify the only certificate that should be accepted when connecting to an SSL server via [method StreamPeerSSL.connect_to_stream]. </description> <tutorials> </tutorials> @@ -13,6 +16,7 @@ <argument index="0" name="path" type="String"> </argument> <description> + Loads a certificate from [code]path[/code] ("*.crt" file). </description> </method> <method name="save"> @@ -21,6 +25,7 @@ <argument index="0" name="path" type="String"> </argument> <description> + Saves a certificate to the given [code]path[/code] (should be a "*.crt" file). </description> </method> </methods> diff --git a/doc/tools/doc_status.py b/doc/tools/doc_status.py index 974ac2d05c..6e34cffc05 100644 --- a/doc/tools/doc_status.py +++ b/doc/tools/doc_status.py @@ -259,7 +259,8 @@ class ClassStatus: status.progresses[tag.tag].increment(len(descr.text.strip()) > 0) elif tag.tag in ['constants', 'members']: for sub_tag in list(tag): - status.progresses[tag.tag].increment(len(sub_tag.text.strip()) > 0) + if not sub_tag.text is None: + status.progresses[tag.tag].increment(len(sub_tag.text.strip()) > 0) elif tag.tag in ['tutorials']: pass # Ignore those tags for now diff --git a/doc/tools/makerst.py b/doc/tools/makerst.py index b42ae3ce01..ef38299680 100755 --- a/doc/tools/makerst.py +++ b/doc/tools/makerst.py @@ -37,13 +37,14 @@ class TypeName: class PropertyDef: - def __init__(self, name, type_name, setter, getter, text, default_value): # type: (str, TypeName, Optional[str], Optional[str], Optional[str], Optional[str]) -> None + def __init__(self, name, type_name, setter, getter, text, default_value, overridden): # type: (str, TypeName, Optional[str], Optional[str], Optional[str], Optional[str], Optional[bool]) -> None self.name = name self.type_name = type_name self.setter = setter self.getter = getter self.text = text self.default_value = default_value + self.overridden = overridden class ParameterDef: def __init__(self, name, type_name, default_value): # type: (str, TypeName, Optional[str]) -> None @@ -147,8 +148,9 @@ class State: setter = property.get("setter") or None # Use or None so '' gets turned into None. getter = property.get("getter") or None default_value = property.get("default") or None + overridden = property.get("override") or False - property_def = PropertyDef(property_name, type_name, setter, getter, property.text, default_value) + property_def = PropertyDef(property_name, type_name, setter, getter, property.text, default_value, overridden) class_def.properties[property_name] = property_def methods = class_root.find("methods") @@ -401,12 +403,15 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S # Properties overview if len(class_def.properties) > 0: f.write(make_heading('Properties', '-')) - ml = [] # type: List[Tuple[str, str]] + ml = [] # type: List[Tuple[str, str, str]] for property_def in class_def.properties.values(): type_rst = property_def.type_name.to_rst(state) - ref = ":ref:`{0}<class_{1}_property_{0}>`".format(property_def.name, class_name) default = property_def.default_value - ml.append((type_rst, ref, default)) + if property_def.overridden: + ml.append((type_rst, property_def.name, "**O:** " + default)) + else: + ref = ":ref:`{0}<class_{1}_property_{0}>`".format(property_def.name, class_name) + ml.append((type_rst, ref, default)) format_table(f, ml, True) # Methods overview @@ -430,21 +435,30 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S # Signals if len(class_def.signals) > 0: f.write(make_heading('Signals', '-')) + index = 0 + for signal in class_def.signals.values(): - #f.write(".. _class_{}_{}:\n\n".format(class_name, signal.name)) + if index != 0: + f.write('----\n\n') + f.write(".. _class_{}_signal_{}:\n\n".format(class_name, signal.name)) _, signature = make_method_signature(class_def, signal, False, state) f.write("- {}\n\n".format(signature)) - if signal.description is None or signal.description.strip() == '': - continue - f.write(rstize_text(signal.description.strip(), state)) - f.write("\n\n") + if signal.description is not None and signal.description.strip() != '': + f.write(rstize_text(signal.description.strip(), state) + '\n\n') + + index += 1 # Enums if len(class_def.enums) > 0: f.write(make_heading('Enumerations', '-')) + index = 0 + for e in class_def.enums.values(): + if index != 0: + f.write('----\n\n') + f.write(".. _enum_{}_{}:\n\n".format(class_name, e.name)) # Sphinx seems to divide the bullet list into individual <ul> tags if we weave the labels into it. # As such I'll put them all above the list. Won't be perfect but better than making the list visually broken. @@ -458,8 +472,11 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S f.write("- **{}** = **{}**".format(value.name, value.value)) if value.text is not None and value.text.strip() != '': f.write(' --- ' + rstize_text(value.text.strip(), state)) + f.write('\n\n') + index += 1 + # Constants if len(class_def.constants) > 0: f.write(make_heading('Constants', '-')) @@ -472,6 +489,7 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S f.write("- **{}** = **{}**".format(constant.name, constant.value)) if constant.text is not None and constant.text.strip() != '': f.write(' --- ' + rstize_text(constant.text.strip(), state)) + f.write('\n\n') # Class description @@ -487,10 +505,17 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S f.write("- " + make_url(link) + "\n\n") # Property descriptions - if len(class_def.properties) > 0: + if any(not p.overridden for p in class_def.properties.values()) > 0: f.write(make_heading('Property Descriptions', '-')) + index = 0 + for property_def in class_def.properties.values(): - #f.write(".. _class_{}_{}:\n\n".format(class_name, property_def.name)) + if property_def.overridden: + continue + + if index != 0: + f.write('----\n\n') + f.write(".. _class_{}_property_{}:\n\n".format(class_name, property_def.name)) f.write('- {} **{}**\n\n'.format(property_def.type_name.to_rst(state), property_def.name)) @@ -506,24 +531,30 @@ def make_rst_class(class_def, state, dry_run, output_dir): # type: (ClassDef, S format_table(f, info) if property_def.text is not None and property_def.text.strip() != '': - f.write(rstize_text(property_def.text.strip(), state)) - f.write('\n\n') + f.write(rstize_text(property_def.text.strip(), state) + '\n\n') + + index += 1 # Method descriptions if len(class_def.methods) > 0: f.write(make_heading('Method Descriptions', '-')) + index = 0 + for method_list in class_def.methods.values(): for i, m in enumerate(method_list): + if index != 0: + f.write('----\n\n') + if i == 0: - #f.write(".. _class_{}_{}:\n\n".format(class_name, m.name)) f.write(".. _class_{}_method_{}:\n\n".format(class_name, m.name)) + ret_type, signature = make_method_signature(class_def, m, False, state) f.write("- {} {}\n\n".format(ret_type, signature)) - if m.description is None or m.description.strip() == '': - continue - f.write(rstize_text(m.description.strip(), state)) - f.write("\n\n") + if m.description is not None and m.description.strip() != '': + f.write(rstize_text(m.description.strip(), state) + '\n\n') + + index += 1 def make_class_list(class_list, columns): # type: (List[str], int) -> None @@ -600,8 +631,10 @@ def rstize_text(text, state): # type: (str, State) -> str break pre_text = text[:pos] + indent_level = 0 while text[pos + 1] == '\t': pos += 1 + indent_level += 1 post_text = text[pos + 1:] # Handle codeblocks @@ -625,6 +658,9 @@ def rstize_text(text, state): # type: (str, State) -> str while code_pos + to_skip + 1 < len(code_text) and code_text[code_pos + to_skip + 1] == '\t': to_skip += 1 + if to_skip > indent_level: + print_error("Four spaces should be used for indentation within [codeblock], file: {}".format(state.current_class), state) + if len(code_text[code_pos + to_skip + 1:]) == 0: code_text = code_text[:code_pos] + "\n" code_pos += 1 @@ -884,7 +920,7 @@ def rstize_text(text, state): # type: (str, State) -> str def format_table(f, data, remove_empty_columns=False): # type: (TextIO, Iterable[Tuple[str, ...]]) -> None if len(data) == 0: return - + column_sizes = [0] * len(data[0]) for row in data: for i, text in enumerate(row): @@ -899,7 +935,7 @@ def format_table(f, data, remove_empty_columns=False): # type: (TextIO, Iterabl sep += "+" + "-" * (size + 2) sep += "+\n" f.write(sep) - + for row in data: row_text = "|" for i, text in enumerate(row): diff --git a/drivers/alsa/audio_driver_alsa.cpp b/drivers/alsa/audio_driver_alsa.cpp index 0611d7d4e0..42899c0f76 100644 --- a/drivers/alsa/audio_driver_alsa.cpp +++ b/drivers/alsa/audio_driver_alsa.cpp @@ -171,14 +171,14 @@ void AudioDriverALSA::thread_func(void *p_udata) { ad->start_counting_ticks(); if (!ad->active) { - for (unsigned int i = 0; i < ad->period_size * ad->channels; i++) { + for (uint64_t i = 0; i < ad->period_size * ad->channels; i++) { ad->samples_out.write[i] = 0; } } else { ad->audio_server_process(ad->period_size, ad->samples_in.ptrw()); - for (unsigned int i = 0; i < ad->period_size * ad->channels; i++) { + for (uint64_t i = 0; i < ad->period_size * ad->channels; i++) { ad->samples_out.write[i] = ad->samples_in[i] >> 16; } } diff --git a/drivers/coreaudio/audio_driver_coreaudio.cpp b/drivers/coreaudio/audio_driver_coreaudio.cpp index 3b06c47244..9081fccd3a 100644 --- a/drivers/coreaudio/audio_driver_coreaudio.cpp +++ b/drivers/coreaudio/audio_driver_coreaudio.cpp @@ -186,15 +186,15 @@ OSStatus AudioDriverCoreAudio::output_callback(void *inRefCon, for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { AudioBuffer *abuf = &ioData->mBuffers[i]; - int frames_left = inNumberFrames; + unsigned int frames_left = inNumberFrames; int16_t *out = (int16_t *)abuf->mData; while (frames_left) { - int frames = MIN(frames_left, ad->buffer_frames); + unsigned int frames = MIN(frames_left, ad->buffer_frames); ad->audio_server_process(frames, ad->samples_in.ptrw()); - for (int j = 0; j < frames * ad->channels; j++) { + for (unsigned int j = 0; j < frames * ad->channels; j++) { out[j] = ad->samples_in[j] >> 16; } @@ -231,7 +231,7 @@ OSStatus AudioDriverCoreAudio::input_callback(void *inRefCon, OSStatus result = AudioUnitRender(ad->input_unit, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, &bufferList); if (result == noErr) { - for (int i = 0; i < inNumberFrames * ad->capture_channels; i++) { + for (unsigned int i = 0; i < inNumberFrames * ad->capture_channels; i++) { int32_t sample = ad->input_buf[i] << 16; ad->capture_buffer_write(sample); diff --git a/drivers/coremidi/midi_driver_coremidi.cpp b/drivers/coremidi/midi_driver_coremidi.cpp index 7a92ac0702..28665b5190 100644 --- a/drivers/coremidi/midi_driver_coremidi.cpp +++ b/drivers/coremidi/midi_driver_coremidi.cpp @@ -39,7 +39,7 @@ void MIDIDriverCoreMidi::read(const MIDIPacketList *packet_list, void *read_proc_ref_con, void *src_conn_ref_con) { MIDIPacket *packet = const_cast<MIDIPacket *>(packet_list->packet); - for (int i = 0; i < packet_list->numPackets; i++) { + for (UInt32 i = 0; i < packet_list->numPackets; i++) { receive_input_packet(packet->timeStamp, packet->data, packet->length); packet = MIDIPacketNext(packet); } diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h index 3deaef09e7..8d5cf2ebea 100644 --- a/drivers/dummy/rasterizer_dummy.h +++ b/drivers/dummy/rasterizer_dummy.h @@ -181,8 +181,8 @@ public: DummyTexture *t = texture_owner.get(p_texture); ERR_FAIL_COND(!t); + ERR_FAIL_COND_MSG(p_image.is_null(), "It's not a reference to a valid Image object."); ERR_FAIL_COND(t->format != p_image->get_format()); - ERR_FAIL_COND(p_image.is_null()); ERR_FAIL_COND(src_w <= 0 || src_h <= 0); ERR_FAIL_COND(src_x < 0 || src_y < 0 || src_x + src_w > p_image->get_width() || src_y + src_h > p_image->get_height()); ERR_FAIL_COND(dst_x < 0 || dst_y < 0 || dst_x + src_w > t->width || dst_y + src_h > t->height); diff --git a/drivers/gles2/rasterizer_canvas_gles2.cpp b/drivers/gles2/rasterizer_canvas_gles2.cpp index 6be48a4c58..16e5e92abd 100644 --- a/drivers/gles2/rasterizer_canvas_gles2.cpp +++ b/drivers/gles2/rasterizer_canvas_gles2.cpp @@ -494,8 +494,10 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur if (line->width <= 1) { Vector2 verts[2] = { - Vector2(line->from.x, line->from.y), - Vector2(line->to.x, line->to.y) + // Offset the line slightly to make sure we always draw the pixel at the from coordinate. + // Without this, corners of rectangles might be missing a pixel. (See diamond exit rule and #32657) + Vector2(Math::floor(line->from.x) + 0.5, Math::floor(line->from.y) + 0.5), + Vector2(Math::floor(line->to.x) + 0.5, Math::floor(line->to.y) + 0.5) }; #ifdef GLES_OVER_GL @@ -761,6 +763,14 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur source.size.y = tex->height; } + float screen_scale = 1.0; + + if (source.size.x != 0 && source.size.y != 0) { + + screen_scale = MIN(np->rect.size.x / source.size.x, np->rect.size.y / source.size.y); + screen_scale = MIN(1.0, screen_scale); + } + // prepare vertex buffer // this buffer contains [ POS POS UV UV ] * @@ -777,13 +787,13 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur buffer[(0 * 4 * 4) + 2] = source.position.x * texpixel_size.x; buffer[(0 * 4 * 4) + 3] = source.position.y * texpixel_size.y; - buffer[(0 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT]; + buffer[(0 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT] * screen_scale; buffer[(0 * 4 * 4) + 5] = np->rect.position.y; buffer[(0 * 4 * 4) + 6] = (source.position.x + np->margin[MARGIN_LEFT]) * texpixel_size.x; buffer[(0 * 4 * 4) + 7] = source.position.y * texpixel_size.y; - buffer[(0 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT]; + buffer[(0 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT] * screen_scale; buffer[(0 * 4 * 4) + 9] = np->rect.position.y; buffer[(0 * 4 * 4) + 10] = (source.position.x + source.size.x - np->margin[MARGIN_RIGHT]) * texpixel_size.x; @@ -798,25 +808,25 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur // second row buffer[(1 * 4 * 4) + 0] = np->rect.position.x; - buffer[(1 * 4 * 4) + 1] = np->rect.position.y + np->margin[MARGIN_TOP]; + buffer[(1 * 4 * 4) + 1] = np->rect.position.y + np->margin[MARGIN_TOP] * screen_scale; buffer[(1 * 4 * 4) + 2] = source.position.x * texpixel_size.x; buffer[(1 * 4 * 4) + 3] = (source.position.y + np->margin[MARGIN_TOP]) * texpixel_size.y; - buffer[(1 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT]; - buffer[(1 * 4 * 4) + 5] = np->rect.position.y + np->margin[MARGIN_TOP]; + buffer[(1 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT] * screen_scale; + buffer[(1 * 4 * 4) + 5] = np->rect.position.y + np->margin[MARGIN_TOP] * screen_scale; buffer[(1 * 4 * 4) + 6] = (source.position.x + np->margin[MARGIN_LEFT]) * texpixel_size.x; buffer[(1 * 4 * 4) + 7] = (source.position.y + np->margin[MARGIN_TOP]) * texpixel_size.y; - buffer[(1 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT]; - buffer[(1 * 4 * 4) + 9] = np->rect.position.y + np->margin[MARGIN_TOP]; + buffer[(1 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT] * screen_scale; + buffer[(1 * 4 * 4) + 9] = np->rect.position.y + np->margin[MARGIN_TOP] * screen_scale; buffer[(1 * 4 * 4) + 10] = (source.position.x + source.size.x - np->margin[MARGIN_RIGHT]) * texpixel_size.x; buffer[(1 * 4 * 4) + 11] = (source.position.y + np->margin[MARGIN_TOP]) * texpixel_size.y; buffer[(1 * 4 * 4) + 12] = np->rect.position.x + np->rect.size.x; - buffer[(1 * 4 * 4) + 13] = np->rect.position.y + np->margin[MARGIN_TOP]; + buffer[(1 * 4 * 4) + 13] = np->rect.position.y + np->margin[MARGIN_TOP] * screen_scale; buffer[(1 * 4 * 4) + 14] = (source.position.x + source.size.x) * texpixel_size.x; buffer[(1 * 4 * 4) + 15] = (source.position.y + np->margin[MARGIN_TOP]) * texpixel_size.y; @@ -824,25 +834,25 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur // third row buffer[(2 * 4 * 4) + 0] = np->rect.position.x; - buffer[(2 * 4 * 4) + 1] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM]; + buffer[(2 * 4 * 4) + 1] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM] * screen_scale; buffer[(2 * 4 * 4) + 2] = source.position.x * texpixel_size.x; buffer[(2 * 4 * 4) + 3] = (source.position.y + source.size.y - np->margin[MARGIN_BOTTOM]) * texpixel_size.y; - buffer[(2 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT]; - buffer[(2 * 4 * 4) + 5] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM]; + buffer[(2 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT] * screen_scale; + buffer[(2 * 4 * 4) + 5] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM] * screen_scale; buffer[(2 * 4 * 4) + 6] = (source.position.x + np->margin[MARGIN_LEFT]) * texpixel_size.x; buffer[(2 * 4 * 4) + 7] = (source.position.y + source.size.y - np->margin[MARGIN_BOTTOM]) * texpixel_size.y; - buffer[(2 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT]; - buffer[(2 * 4 * 4) + 9] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM]; + buffer[(2 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT] * screen_scale; + buffer[(2 * 4 * 4) + 9] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM] * screen_scale; buffer[(2 * 4 * 4) + 10] = (source.position.x + source.size.x - np->margin[MARGIN_RIGHT]) * texpixel_size.x; buffer[(2 * 4 * 4) + 11] = (source.position.y + source.size.y - np->margin[MARGIN_BOTTOM]) * texpixel_size.y; buffer[(2 * 4 * 4) + 12] = np->rect.position.x + np->rect.size.x; - buffer[(2 * 4 * 4) + 13] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM]; + buffer[(2 * 4 * 4) + 13] = np->rect.position.y + np->rect.size.y - np->margin[MARGIN_BOTTOM] * screen_scale; buffer[(2 * 4 * 4) + 14] = (source.position.x + source.size.x) * texpixel_size.x; buffer[(2 * 4 * 4) + 15] = (source.position.y + source.size.y - np->margin[MARGIN_BOTTOM]) * texpixel_size.y; @@ -855,13 +865,13 @@ void RasterizerCanvasGLES2::_canvas_item_render_commands(Item *p_item, Item *cur buffer[(3 * 4 * 4) + 2] = source.position.x * texpixel_size.x; buffer[(3 * 4 * 4) + 3] = (source.position.y + source.size.y) * texpixel_size.y; - buffer[(3 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT]; + buffer[(3 * 4 * 4) + 4] = np->rect.position.x + np->margin[MARGIN_LEFT] * screen_scale; buffer[(3 * 4 * 4) + 5] = np->rect.position.y + np->rect.size.y; buffer[(3 * 4 * 4) + 6] = (source.position.x + np->margin[MARGIN_LEFT]) * texpixel_size.x; buffer[(3 * 4 * 4) + 7] = (source.position.y + source.size.y) * texpixel_size.y; - buffer[(3 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT]; + buffer[(3 * 4 * 4) + 8] = np->rect.position.x + np->rect.size.x - np->margin[MARGIN_RIGHT] * screen_scale; buffer[(3 * 4 * 4) + 9] = np->rect.position.y + np->rect.size.y; buffer[(3 * 4 * 4) + 10] = (source.position.x + source.size.x - np->margin[MARGIN_RIGHT]) * texpixel_size.x; diff --git a/drivers/gles2/rasterizer_scene_gles2.cpp b/drivers/gles2/rasterizer_scene_gles2.cpp index cc414c26af..f712219a64 100644 --- a/drivers/gles2/rasterizer_scene_gles2.cpp +++ b/drivers/gles2/rasterizer_scene_gles2.cpp @@ -131,7 +131,7 @@ void RasterizerSceneGLES2::shadow_atlas_set_size(RID p_atlas, int p_size) { //maximum compatibility, renderbuffer and RGBA shadow glGenRenderbuffers(1, &shadow_atlas->depth); - glBindRenderbuffer(GL_RENDERBUFFER, directional_shadow.depth); + glBindRenderbuffer(GL_RENDERBUFFER, shadow_atlas->depth); glRenderbufferStorage(GL_RENDERBUFFER, storage->config.depth_internalformat, shadow_atlas->size, shadow_atlas->size); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, shadow_atlas->depth); @@ -778,18 +778,44 @@ void RasterizerSceneGLES2::environment_set_camera_feed_id(RID p_env, int p_camer } void RasterizerSceneGLES2::environment_set_dof_blur_far(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->dof_blur_far_enabled = p_enable; + env->dof_blur_far_distance = p_distance; + env->dof_blur_far_transition = p_transition; + env->dof_blur_far_amount = p_amount; + env->dof_blur_far_quality = p_quality; } void RasterizerSceneGLES2::environment_set_dof_blur_near(RID p_env, bool p_enable, float p_distance, float p_transition, float p_amount, VS::EnvironmentDOFBlurQuality p_quality) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->dof_blur_near_enabled = p_enable; + env->dof_blur_near_distance = p_distance; + env->dof_blur_near_transition = p_transition; + env->dof_blur_near_amount = p_amount; + env->dof_blur_near_quality = p_quality; } void RasterizerSceneGLES2::environment_set_glow(RID p_env, bool p_enable, int p_level_flags, float p_intensity, float p_strength, float p_bloom_threshold, VS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap, bool p_bicubic_upscale) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->glow_enabled = p_enable; + env->glow_levels = p_level_flags; + env->glow_intensity = p_intensity; + env->glow_strength = p_strength; + env->glow_bloom = p_bloom_threshold; + env->glow_blend_mode = p_blend_mode; + env->glow_hdr_bleed_threshold = p_hdr_bleed_threshold; + env->glow_hdr_bleed_scale = p_hdr_bleed_scale; + env->glow_hdr_luminance_cap = p_hdr_luminance_cap; + env->glow_bicubic_upscale = p_bicubic_upscale; } void RasterizerSceneGLES2::environment_set_fog(RID p_env, bool p_enable, float p_begin, float p_end, RID p_gradient_texture) { @@ -813,8 +839,15 @@ void RasterizerSceneGLES2::environment_set_tonemap(RID p_env, VS::EnvironmentTon } void RasterizerSceneGLES2::environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, RID p_ramp) { + Environment *env = environment_owner.getornull(p_env); ERR_FAIL_COND(!env); + + env->adjustments_enabled = p_enable; + env->adjustments_brightness = p_brightness; + env->adjustments_contrast = p_contrast; + env->adjustments_saturation = p_saturation; + env->color_correction = p_ramp; } void RasterizerSceneGLES2::environment_set_fog(RID p_env, bool p_enable, const Color &p_color, const Color &p_sun_color, float p_sun_amount) { @@ -1174,10 +1207,10 @@ void RasterizerSceneGLES2::_add_geometry_with_material(RasterizerStorageGLES2::G } } -void RasterizerSceneGLES2::_copy_texture_to_front_buffer(GLuint p_texture) { +void RasterizerSceneGLES2::_copy_texture_to_buffer(GLuint p_texture, GLuint p_buffer) { //copy to front buffer - glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->fbo); + glBindFramebuffer(GL_FRAMEBUFFER, p_buffer); glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); @@ -1432,11 +1465,11 @@ void RasterizerSceneGLES2::_setup_geometry(RenderList::Element *p_element, Raste } } - bool clear_skeleton_buffer = !storage->config.float_texture_supported; + bool clear_skeleton_buffer = storage->config.use_skeleton_software; if (p_skeleton) { - if (storage->config.float_texture_supported) { + if (!storage->config.use_skeleton_software) { //use float texture workflow glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 1); glBindTexture(GL_TEXTURE_2D, p_skeleton->tex_id); @@ -2452,7 +2485,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, if (skeleton) { state.scene_shader.set_conditional(SceneShaderGLES2::USE_SKELETON, true); - state.scene_shader.set_conditional(SceneShaderGLES2::USE_SKELETON_SOFTWARE, !storage->config.float_texture_supported); + state.scene_shader.set_conditional(SceneShaderGLES2::USE_SKELETON_SOFTWARE, storage->config.use_skeleton_software); } else { state.scene_shader.set_conditional(SceneShaderGLES2::USE_SKELETON, false); state.scene_shader.set_conditional(SceneShaderGLES2::USE_SKELETON_SOFTWARE, false); @@ -2570,12 +2603,6 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements, state.scene_shader.set_uniform(SceneShaderGLES2::WORLD_TRANSFORM, e->instance->transform); - if (skeleton) { - state.scene_shader.set_uniform(SceneShaderGLES2::SKELETON_IN_WORLD_COORDS, skeleton->use_world_transform); - state.scene_shader.set_uniform(SceneShaderGLES2::SKELETON_TRANSFORM, skeleton->world_transform); - state.scene_shader.set_uniform(SceneShaderGLES2::SKELETON_TRANSFORM_INVERSE, skeleton->world_transform_inverse); - } - if (use_lightmap_capture) { //this is per instance, must be set always if present glUniform4fv(state.scene_shader.get_uniform_location(SceneShaderGLES2::LIGHTMAP_CAPTURES), 12, (const GLfloat *)e->instance->lightmap_capture_data.ptr()); state.scene_shader.set_uniform(SceneShaderGLES2::LIGHTMAP_CAPTURE_SKY, false); @@ -2716,6 +2743,445 @@ void RasterizerSceneGLES2::_draw_sky(RasterizerStorageGLES2::Sky *p_sky, const C storage->shaders.copy.set_conditional(CopyShaderGLES2::USE_CUBEMAP, false); } +void RasterizerSceneGLES2::_post_process(Environment *env, const CameraMatrix &p_cam_projection) { + + //copy to front buffer + + glDepthMask(GL_FALSE); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glDisable(GL_BLEND); + glDepthFunc(GL_LEQUAL); + glColorMask(1, 1, 1, 1); + + //no post process on small, transparent or render targets without an env + bool use_post_process = env && !storage->frame.current_rt->flags[RasterizerStorage::RENDER_TARGET_TRANSPARENT]; + use_post_process = use_post_process && storage->frame.current_rt->width >= 4 && storage->frame.current_rt->height >= 4; + use_post_process = use_post_process && storage->frame.current_rt->mip_maps_allocated; + + if (env) { + use_post_process = use_post_process && (env->adjustments_enabled || env->glow_enabled || env->dof_blur_far_enabled || env->dof_blur_near_enabled); + } + + GLuint next_buffer; + + if (use_post_process) { + next_buffer = storage->frame.current_rt->mip_maps[0].sizes[0].fbo; + } else { + // set next_buffer to front buffer so multisample blit can happen if needed + next_buffer = storage->frame.current_rt->fbo; + } + + // If using multisample buffer, resolve to post_process_effect buffer or to front buffer + if (storage->frame.current_rt && storage->frame.current_rt->multisample_active) { +#ifdef GLES_OVER_GL + + glBindFramebuffer(GL_READ_FRAMEBUFFER, storage->frame.current_rt->multisample_fbo); + glReadBuffer(GL_COLOR_ATTACHMENT0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, next_buffer); + glBlitFramebuffer(0, 0, storage->frame.current_rt->width, storage->frame.current_rt->height, 0, 0, storage->frame.current_rt->width, storage->frame.current_rt->height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); + + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); +#elif IPHONE_ENABLED + + glBindFramebuffer(GL_READ_FRAMEBUFFER, storage->frame.current_rt->multisample_fbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, next_buffer); + glResolveMultisampleFramebufferAPPLE(); + + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); +#elif ANDROID_ENABLED + + // In GLES2 Android Blit is not available, so just copy color texture manually + _copy_texture_to_buffer(storage->frame.current_rt->multisample_color, next_buffer); +#endif + } else if (use_post_process) { + _copy_texture_to_buffer(storage->frame.current_rt->color, storage->frame.current_rt->mip_maps[0].sizes[0].fbo); + } + + if (!use_post_process) { + return; + } + + // Order of operation + //1) DOF Blur (first blur, then copy to buffer applying the blur) //only on desktop + //2) Bloom (Glow) //only on desktop + //3) Adjustments + + // DOF Blur + + if (env->dof_blur_far_enabled) { + + int vp_h = storage->frame.current_rt->height; + int vp_w = storage->frame.current_rt->width; + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::USE_ORTHOGONAL_PROJECTION, p_cam_projection.is_orthogonal()); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_FAR_BLUR, true); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_LOW, env->dof_blur_far_quality == VS::ENV_DOF_BLUR_QUALITY_LOW); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_MEDIUM, env->dof_blur_far_quality == VS::ENV_DOF_BLUR_QUALITY_MEDIUM); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_HIGH, env->dof_blur_far_quality == VS::ENV_DOF_BLUR_QUALITY_HIGH); + + state.effect_blur_shader.bind(); + int qsteps[3] = { 4, 10, 20 }; + + float radius = (env->dof_blur_far_amount * env->dof_blur_far_amount) / qsteps[env->dof_blur_far_quality]; + + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_BEGIN, env->dof_blur_far_distance); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_END, env->dof_blur_far_distance + env->dof_blur_far_transition); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_DIR, Vector2(1, 0)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_RADIUS, radius); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_NEAR, p_cam_projection.get_z_near()); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_FAR, p_cam_projection.get_z_far()); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->depth); + + glActiveTexture(GL_TEXTURE0); + + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[0].color); + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->fbo); //copy to front first + + storage->_copy_screen(); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->color); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_DIR, Vector2(0, 1)); + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->mip_maps[0].sizes[0].fbo); // copy to base level + storage->_copy_screen(); + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_FAR_BLUR, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_LOW, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_MEDIUM, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_HIGH, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::USE_ORTHOGONAL_PROJECTION, false); + } + + if (env->dof_blur_near_enabled) { + + //convert texture to RGBA format if not already + if (!storage->frame.current_rt->used_dof_blur_near) { + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->color); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, storage->frame.current_rt->width, storage->frame.current_rt->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + } + + int vp_h = storage->frame.current_rt->height; + int vp_w = storage->frame.current_rt->width; + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::USE_ORTHOGONAL_PROJECTION, p_cam_projection.is_orthogonal()); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_NEAR_BLUR, true); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_NEAR_FIRST_TAP, true); + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_LOW, env->dof_blur_near_quality == VS::ENV_DOF_BLUR_QUALITY_LOW); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_MEDIUM, env->dof_blur_near_quality == VS::ENV_DOF_BLUR_QUALITY_MEDIUM); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_HIGH, env->dof_blur_near_quality == VS::ENV_DOF_BLUR_QUALITY_HIGH); + + state.effect_blur_shader.bind(); + int qsteps[3] = { 4, 10, 20 }; + + float radius = (env->dof_blur_near_amount * env->dof_blur_near_amount) / qsteps[env->dof_blur_near_quality]; + + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_BEGIN, env->dof_blur_near_distance); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_END, env->dof_blur_near_distance - env->dof_blur_near_transition); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_DIR, Vector2(1, 0)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_RADIUS, radius); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_NEAR, p_cam_projection.get_z_near()); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_FAR, p_cam_projection.get_z_far()); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->depth); + + glActiveTexture(GL_TEXTURE0); + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[0].color); + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->fbo); //copy to front first + + storage->_copy_screen(); + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_NEAR_FIRST_TAP, false); + state.effect_blur_shader.bind(); + + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_BEGIN, env->dof_blur_near_distance); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_END, env->dof_blur_near_distance - env->dof_blur_near_transition); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_DIR, Vector2(0, 1)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::DOF_RADIUS, radius); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_NEAR, p_cam_projection.get_z_near()); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::CAMERA_Z_FAR, p_cam_projection.get_z_far()); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->color); + + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->mip_maps[0].sizes[0].fbo); // copy to base level + + glEnable(GL_BLEND); + glBlendEquation(GL_FUNC_ADD); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + storage->_copy_screen(); + + glDisable(GL_BLEND); + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_NEAR_BLUR, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_NEAR_FIRST_TAP, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_LOW, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_MEDIUM, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::DOF_QUALITY_HIGH, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::USE_ORTHOGONAL_PROJECTION, false); + storage->frame.current_rt->used_dof_blur_near = true; + } + + if (env->dof_blur_near_enabled || env->dof_blur_far_enabled) { + //these needed to disable filtering, reenamble + glActiveTexture(GL_TEXTURE0); + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[0].color); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + } + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } + + //glow + + int max_glow_level = -1; + int glow_mask = 0; + + if (env->glow_enabled) { + + for (int i = 0; i < VS::MAX_GLOW_LEVELS; i++) { + if (env->glow_levels & (1 << i)) { + + if (i >= storage->frame.current_rt->mip_maps[1].sizes.size()) { + max_glow_level = storage->frame.current_rt->mip_maps[1].sizes.size() - 1; + glow_mask |= 1 << max_glow_level; + + } else { + max_glow_level = i; + glow_mask |= (1 << i); + } + } + } + + for (int i = 0; i < (max_glow_level + 1); i++) { + + int vp_w = storage->frame.current_rt->mip_maps[1].sizes[i].width; + int vp_h = storage->frame.current_rt->mip_maps[1].sizes[i].height; + glViewport(0, 0, vp_w, vp_h); + //horizontal pass + if (i == 0) { + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_FIRST_PASS, true); + } + + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_GAUSSIAN_HORIZONTAL, true); + state.effect_blur_shader.bind(); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::LOD, storage->frame.current_rt->mip_maps[0].color ? float(i) : 0.0); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::GLOW_STRENGTH, env->glow_strength); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::LUMINANCE_CAP, env->glow_hdr_luminance_cap); + + glActiveTexture(GL_TEXTURE0); + + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[i].color); + } + + if (i == 0) { + + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::GLOW_BLOOM, env->glow_bloom); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::GLOW_HDR_THRESHOLD, env->glow_hdr_bleed_threshold); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::GLOW_HDR_SCALE, env->glow_hdr_bleed_scale); + } + + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->mip_maps[1].sizes[i].fbo); + storage->_copy_screen(); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_GAUSSIAN_HORIZONTAL, false); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_FIRST_PASS, false); + + //vertical pass + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_GAUSSIAN_VERTICAL, true); + state.effect_blur_shader.bind(); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::PIXEL_SIZE, Vector2(1.0 / vp_w, 1.0 / vp_h)); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::LOD, storage->frame.current_rt->mip_maps[0].color ? float(i) : 0.0); + state.effect_blur_shader.set_uniform(EffectBlurShaderGLES2::GLOW_STRENGTH, env->glow_strength); + glActiveTexture(GL_TEXTURE0); + + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[1].color); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[1].sizes[i].color); + } + + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->mip_maps[0].sizes[i + 1].fbo); //next level, since mipmaps[0] starts one level bigger + storage->_copy_screen(); + state.effect_blur_shader.set_conditional(EffectBlurShaderGLES2::GLOW_GAUSSIAN_VERTICAL, false); + } + + glViewport(0, 0, storage->frame.current_rt->width, storage->frame.current_rt->height); + } + + if (storage->frame.current_rt->external.fbo != 0) { + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->external.fbo); + } else { + glBindFramebuffer(GL_FRAMEBUFFER, storage->frame.current_rt->fbo); + } + + glActiveTexture(GL_TEXTURE0); + if (storage->frame.current_rt->mip_maps[0].color) { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + } else { + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[0].color); + } + + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_FILTER_BICUBIC, env->glow_bicubic_upscale); + + if (max_glow_level >= 0) { + if (storage->frame.current_rt->mip_maps[0].color) { + for (int i = 0; i < (max_glow_level + 1); i++) { + + if (glow_mask & (1 << i)) { + if (i == 0) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL1, true); + } + if (i == 1) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL2, true); + } + if (i == 2) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL3, true); + } + if (i == 3) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL4, true); + } + if (i == 4) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL5, true); + } + if (i == 5) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL6, true); + } + if (i == 6) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL7, true); + } + } + } + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].color); + } else { + + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_MULTI_TEXTURE_GLOW, true); + int active_glow_level = 0; + for (int i = 0; i < (max_glow_level + 1); i++) { + + if (glow_mask & (1 << i)) { + active_glow_level++; + glActiveTexture(GL_TEXTURE0 + active_glow_level); + glBindTexture(GL_TEXTURE_2D, storage->frame.current_rt->mip_maps[0].sizes[i + 1].color); + if (active_glow_level == 1) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL1, true); + } + if (active_glow_level == 2) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL2, true); + } + if (active_glow_level == 3) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL3, true); + } + if (active_glow_level == 4) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL4, true); + } + if (active_glow_level == 5) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL5, true); + } + if (active_glow_level == 6) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL6, true); + } + if (active_glow_level == 7) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL7, true); + } + } + } + } + + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_SCREEN, env->glow_blend_mode == VS::GLOW_BLEND_MODE_SCREEN); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_SOFTLIGHT, env->glow_blend_mode == VS::GLOW_BLEND_MODE_SOFTLIGHT); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_REPLACE, env->glow_blend_mode == VS::GLOW_BLEND_MODE_REPLACE); + } + + //Adjustments + if (env->adjustments_enabled) { + + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_BCS, true); + RasterizerStorageGLES2::Texture *tex = storage->texture_owner.getornull(env->color_correction); + if (tex) { + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_COLOR_CORRECTION, true); + glActiveTexture(GL_TEXTURE2); + glBindTexture(tex->target, tex->tex_id); + } + } + + state.tonemap_shader.bind(); + + if (max_glow_level >= 0) { + + state.tonemap_shader.set_uniform(TonemapShaderGLES2::GLOW_INTENSITY, env->glow_intensity); + int ss[2] = { + storage->frame.current_rt->width, + storage->frame.current_rt->height, + }; + glUniform2iv(state.tonemap_shader.get_uniform(TonemapShaderGLES2::GLOW_TEXTURE_SIZE), 1, ss); + } + + if (env->adjustments_enabled) { + + state.tonemap_shader.set_uniform(TonemapShaderGLES2::BCS, Vector3(env->adjustments_brightness, env->adjustments_contrast, env->adjustments_saturation)); + } + + storage->_copy_screen(); + + //turn off everything used + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL1, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL2, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL3, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL4, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL5, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL6, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_LEVEL7, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_REPLACE, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_SCREEN, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_SOFTLIGHT, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_GLOW_FILTER_BICUBIC, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_MULTI_TEXTURE_GLOW, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_BCS, false); + state.tonemap_shader.set_conditional(TonemapShaderGLES2::USE_COLOR_CORRECTION, false); +} + void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID *p_light_cull_result, int p_light_cull_count, RID *p_reflection_probe_cull_result, int p_reflection_probe_cull_count, RID p_environment, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass) { Transform cam_transform = p_cam_transform; @@ -2831,6 +3297,12 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const reflection_probe_count = 0; } + if (env && env->bg_mode == VS::ENV_BG_CANVAS) { + // If using canvas background, copy 2d to screen copy texture + // TODO: When GLES2 renders to current_rt->mip_maps[], this copy will no longer be needed + _copy_texture_to_buffer(storage->frame.current_rt->color, storage->frame.current_rt->copy_screen_effect.fbo); + } + // render list stuff render_list.clear(); @@ -2967,8 +3439,11 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const clear_color = Color(0.0, 1.0, 0.0, 1.0); } } break; + case VS::ENV_BG_CANVAS: { + // use screen copy as background + _copy_texture_to_buffer(storage->frame.current_rt->copy_screen_effect.color, current_fb); + } break; default: { - // FIXME: implement other background modes } break; } } @@ -3016,7 +3491,7 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const #elif ANDROID_ENABLED // In GLES2 AndroidBlit is not available, so just copy color texture manually - _copy_texture_to_front_buffer(storage->frame.current_rt->multisample_color); + _copy_texture_to_buffer(storage->frame.current_rt->multisample_color, storage->frame.current_rt->fbo); #endif } @@ -3037,33 +3512,14 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const _render_render_list(&render_list.elements[render_list.max_elements - render_list.alpha_element_count], render_list.alpha_element_count, cam_transform, p_cam_projection, p_shadow_atlas, env, env_radiance_tex, 0.0, 0.0, reverse_cull, true, false); - glDisable(GL_DEPTH_TEST); - - if (storage->frame.current_rt && storage->frame.current_rt->multisample_active) { -#ifdef GLES_OVER_GL - - glBindFramebuffer(GL_READ_FRAMEBUFFER, storage->frame.current_rt->multisample_fbo); - glReadBuffer(GL_COLOR_ATTACHMENT0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, storage->frame.current_rt->fbo); - glBlitFramebuffer(0, 0, storage->frame.current_rt->width, storage->frame.current_rt->height, 0, 0, storage->frame.current_rt->width, storage->frame.current_rt->height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); - - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); -#elif IPHONE_ENABLED - - glBindFramebuffer(GL_READ_FRAMEBUFFER, storage->frame.current_rt->multisample_fbo); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, storage->frame.current_rt->fbo); - glResolveMultisampleFramebufferAPPLE(); - - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); -#elif ANDROID_ENABLED - - // In GLES2 Android Blit is not available, so just copy color texture manually - _copy_texture_to_front_buffer(storage->frame.current_rt->multisample_color); -#endif + if (p_reflection_probe.is_valid()) { + // Rendering to a probe so no need for post_processing + return; } + //post process + _post_process(env, p_cam_projection); + //#define GLES2_SHADOW_ATLAS_DEBUG_VIEW #ifdef GLES2_SHADOW_ATLAS_DEBUG_VIEW @@ -3313,6 +3769,10 @@ void RasterizerSceneGLES2::render_shadow(RID p_light, RID p_shadow_atlas, int p_ glEnable(GL_SCISSOR_TEST); glClearDepth(1.0f); glClear(GL_DEPTH_BUFFER_BIT); + if (storage->config.use_rgba_3d_shadows) { + glClearColor(1.0, 1.0, 1.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + } glDisable(GL_SCISSOR_TEST); if (light->reverse_cull) { @@ -3445,6 +3905,8 @@ void RasterizerSceneGLES2::initialize() { state.scene_shader.set_conditional(SceneShaderGLES2::USE_RGBA_SHADOWS, storage->config.use_rgba_3d_shadows); state.cube_to_dp_shader.init(); + state.effect_blur_shader.init(); + state.tonemap_shader.init(); render_list.init(); diff --git a/drivers/gles2/rasterizer_scene_gles2.h b/drivers/gles2/rasterizer_scene_gles2.h index 69a2295fc1..7babcfeed1 100644 --- a/drivers/gles2/rasterizer_scene_gles2.h +++ b/drivers/gles2/rasterizer_scene_gles2.h @@ -35,10 +35,12 @@ #include "rasterizer_storage_gles2.h" #include "shaders/cube_to_dp.glsl.gen.h" +#include "shaders/effect_blur.glsl.gen.h" #include "shaders/scene.glsl.gen.h" +#include "shaders/tonemap.glsl.gen.h" /* -#include "drivers/gles3/shaders/effect_blur.glsl.gen.h" + #include "drivers/gles3/shaders/exposure.glsl.gen.h" #include "drivers/gles3/shaders/resolve.glsl.gen.h" #include "drivers/gles3/shaders/scene.glsl.gen.h" @@ -47,7 +49,6 @@ #include "drivers/gles3/shaders/ssao_blur.glsl.gen.h" #include "drivers/gles3/shaders/ssao_minify.glsl.gen.h" #include "drivers/gles3/shaders/subsurf_scattering.glsl.gen.h" -#include "drivers/gles3/shaders/tonemap.glsl.gen.h" */ @@ -99,6 +100,8 @@ public: SceneShaderGLES2 scene_shader; CubeToDpShaderGLES2 cube_to_dp_shader; + TonemapShaderGLES2 tonemap_shader; + EffectBlurShaderGLES2 effect_blur_shader; GLuint sky_verts; @@ -114,7 +117,6 @@ public: // SsaoShaderGLES3 ssao_shader; // SsaoBlurShaderGLES3 ssao_blur_shader; // ExposureShaderGLES3 exposure_shader; - // TonemapShaderGLES3 tonemap_shader; /* struct SceneDataUBO { @@ -362,6 +364,35 @@ public: int canvas_max_layer; + bool glow_enabled; + int glow_levels; + float glow_intensity; + float glow_strength; + float glow_bloom; + VS::EnvironmentGlowBlendMode glow_blend_mode; + float glow_hdr_bleed_threshold; + float glow_hdr_bleed_scale; + float glow_hdr_luminance_cap; + bool glow_bicubic_upscale; + + bool dof_blur_far_enabled; + float dof_blur_far_distance; + float dof_blur_far_transition; + float dof_blur_far_amount; + VS::EnvironmentDOFBlurQuality dof_blur_far_quality; + + bool dof_blur_near_enabled; + float dof_blur_near_distance; + float dof_blur_near_transition; + float dof_blur_near_amount; + VS::EnvironmentDOFBlurQuality dof_blur_near_quality; + + bool adjustments_enabled; + float adjustments_brightness; + float adjustments_contrast; + float adjustments_saturation; + RID color_correction; + bool fog_enabled; Color fog_color; Color fog_sun_color; @@ -387,6 +418,30 @@ public: ambient_energy(1.0), ambient_sky_contribution(0.0), canvas_max_layer(0), + glow_enabled(false), + glow_levels((1 << 2) | (1 << 4)), + glow_intensity(0.8), + glow_strength(1.0), + glow_bloom(0.0), + glow_blend_mode(VS::GLOW_BLEND_MODE_SOFTLIGHT), + glow_hdr_bleed_threshold(1.0), + glow_hdr_bleed_scale(2.0), + glow_hdr_luminance_cap(12.0), + glow_bicubic_upscale(false), + dof_blur_far_enabled(false), + dof_blur_far_distance(10), + dof_blur_far_transition(5), + dof_blur_far_amount(0.1), + dof_blur_far_quality(VS::ENV_DOF_BLUR_QUALITY_MEDIUM), + dof_blur_near_enabled(false), + dof_blur_near_distance(2), + dof_blur_near_transition(1), + dof_blur_near_amount(0.1), + dof_blur_near_quality(VS::ENV_DOF_BLUR_QUALITY_MEDIUM), + adjustments_enabled(false), + adjustments_brightness(1.0), + adjustments_contrast(1.0), + adjustments_saturation(1.0), fog_enabled(false), fog_color(Color(0.5, 0.5, 0.5)), fog_sun_color(Color(0.8, 0.8, 0.0)), @@ -674,7 +729,7 @@ public: void _add_geometry(RasterizerStorageGLES2::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES2::GeometryOwner *p_owner, int p_material, bool p_depth_pass, bool p_shadow_pass); void _add_geometry_with_material(RasterizerStorageGLES2::Geometry *p_geometry, InstanceBase *p_instance, RasterizerStorageGLES2::GeometryOwner *p_owner, RasterizerStorageGLES2::Material *p_material, bool p_depth_pass, bool p_shadow_pass); - void _copy_texture_to_front_buffer(GLuint texture); + void _copy_texture_to_buffer(GLuint p_texture, GLuint p_buffer); void _fill_render_list(InstanceBase **p_cull_result, int p_cull_count, bool p_depth_pass, bool p_shadow_pass); void _render_render_list(RenderList::Element **p_elements, int p_element_count, const Transform &p_view_transform, @@ -698,6 +753,8 @@ public: _FORCE_INLINE_ void _setup_refprobes(ReflectionProbeInstance *p_refprobe1, ReflectionProbeInstance *p_refprobe2, const Transform &p_view_transform, Environment *p_env); _FORCE_INLINE_ void _render_geometry(RenderList::Element *p_element); + void _post_process(Environment *env, const CameraMatrix &p_cam_projection); + virtual void render_scene(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, InstanceBase **p_cull_result, int p_cull_count, RID *p_light_cull_result, int p_light_cull_count, RID *p_reflection_probe_cull_result, int p_reflection_probe_cull_count, RID p_environment, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass); virtual void render_shadow(RID p_light, RID p_shadow_atlas, int p_pass, InstanceBase **p_cull_result, int p_cull_count); virtual bool free(RID p_rid); diff --git a/drivers/gles2/rasterizer_storage_gles2.cpp b/drivers/gles2/rasterizer_storage_gles2.cpp index 5c02d8096d..9d9bceb243 100644 --- a/drivers/gles2/rasterizer_storage_gles2.cpp +++ b/drivers/gles2/rasterizer_storage_gles2.cpp @@ -82,6 +82,8 @@ GLuint RasterizerStorageGLES2::system_fbo = 0; #define _DEPTH_COMPONENT24_OES 0x81A6 #ifndef GLES_OVER_GL +#define glClearDepth glClearDepthf + // enable extensions manually for android and ios #include <dlfcn.h> // needed to load extensions @@ -112,7 +114,7 @@ void RasterizerStorageGLES2::bind_quad_array() const { glEnableVertexAttribArray(VS::ARRAY_TEX_UV); } -Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool p_will_need_resize) const { +Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool p_force_decompress) const { r_gl_format = 0; Ref<Image> image = p_image; @@ -259,7 +261,7 @@ Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_ } break; case Image::FORMAT_DXT1: { - if (config.s3tc_supported && !p_will_need_resize) { + if (config.s3tc_supported) { r_gl_internal_format = _EXT_COMPRESSED_RGBA_S3TC_DXT1_EXT; r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; @@ -271,7 +273,7 @@ Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_ } break; case Image::FORMAT_DXT3: { - if (config.s3tc_supported && !p_will_need_resize) { + if (config.s3tc_supported) { r_gl_internal_format = _EXT_COMPRESSED_RGBA_S3TC_DXT3_EXT; r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; @@ -283,7 +285,7 @@ Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_ } break; case Image::FORMAT_DXT5: { - if (config.s3tc_supported && !p_will_need_resize) { + if (config.s3tc_supported) { r_gl_internal_format = _EXT_COMPRESSED_RGBA_S3TC_DXT5_EXT; r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; @@ -422,7 +424,7 @@ Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_ } break; case Image::FORMAT_ETC: { - if (config.etc1_supported && !p_will_need_resize) { + if (config.etc1_supported) { r_gl_internal_format = _EXT_ETC1_RGB8_OES; r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; @@ -465,7 +467,7 @@ Ref<Image> RasterizerStorageGLES2::_get_gl_image_and_format(const Ref<Image> &p_ } } - if (need_decompress) { + if (need_decompress || p_force_decompress) { if (!image.is_null()) { @@ -636,7 +638,7 @@ void RasterizerStorageGLES2::texture_set_data(RID p_texture, const Ref<Image> &p if (texture->resize_to_po2) { if (p_image->is_compressed()) { - ERR_PRINTS("Texture '" + texture->path + "' was required to be a power of 2 (because it uses either mipmaps or repeat), so it was decompressed. This will hurt performance and memory usage."); + ERR_PRINTS("Texture '" + texture->path + "' is required to be a power of 2 because it uses either mipmaps or repeat, so it was decompressed. This will hurt performance and memory usage."); } if (img == p_image) { @@ -657,12 +659,13 @@ void RasterizerStorageGLES2::texture_set_data(RID p_texture, const Ref<Image> &p img->resize(texture->alloc_width, texture->alloc_height, Image::INTERPOLATE_BILINEAR); } - }; + } GLenum blit_target = (texture->target == GL_TEXTURE_CUBE_MAP) ? _cube_side_enum[p_layer] : GL_TEXTURE_2D; texture->data_size = img->get_data().size(); PoolVector<uint8_t>::Read read = img->get_data().read(); + ERR_FAIL_COND(!read.ptr()); glActiveTexture(GL_TEXTURE0); glBindTexture(texture->target, texture->tex_id); @@ -716,7 +719,7 @@ void RasterizerStorageGLES2::texture_set_data(RID p_texture, const Ref<Image> &p int size, ofs; img->get_mipmap_offset_and_size(i, ofs, size); - if (texture->compressed) { + if (compressed) { glPixelStorei(GL_UNPACK_ALIGNMENT, 4); int bw = w; @@ -1480,8 +1483,9 @@ void RasterizerStorageGLES2::_update_shader(Shader *p_shader) const { } Error err = shaders.compiler.compile(p_shader->mode, p_shader->code, actions, p_shader->path, gen_code); - - ERR_FAIL_COND(err != OK); + if (err != OK) { + return; + } p_shader->shader->set_custom_shader_code(p_shader->custom_code_id, gen_code.vertex, gen_code.vertex_global, gen_code.fragment, gen_code.light, gen_code.fragment_global, gen_code.uniforms, gen_code.texture_uniforms, gen_code.custom_defines); @@ -2432,7 +2436,7 @@ void RasterizerStorageGLES2::mesh_add_surface(RID p_mesh, uint32_t p_format, VS: // from surface->data. // if USE_SKELETON_SOFTWARE is active - if (!config.float_texture_supported) { + if (config.use_skeleton_software) { // if this geometry is used specifically for skinning if (p_format & (VS::ARRAY_FORMAT_BONES | VS::ARRAY_FORMAT_WEIGHTS)) surface->data = array; @@ -3233,12 +3237,14 @@ Color RasterizerStorageGLES2::multimesh_instance_get_custom_data(RID p_multimesh void RasterizerStorageGLES2::multimesh_set_as_bulk_array(RID p_multimesh, const PoolVector<float> &p_array) { MultiMesh *multimesh = multimesh_owner.getornull(p_multimesh); ERR_FAIL_COND(!multimesh); + ERR_FAIL_COND(!multimesh->data.ptr()); int dsize = multimesh->data.size(); ERR_FAIL_COND(dsize != p_array.size()); PoolVector<float>::Read r = p_array.read(); + ERR_FAIL_COND(!r.ptr()); copymem(multimesh->data.ptrw(), r.ptr(), dsize * sizeof(float)); multimesh->dirty_data = true; @@ -3514,7 +3520,7 @@ void RasterizerStorageGLES2::skeleton_allocate(RID p_skeleton, int p_bones, bool skeleton->size = p_bones; skeleton->use_2d = p_2d_skeleton; - if (config.float_texture_supported) { + if (!config.use_skeleton_software) { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, skeleton->tex_id); @@ -3663,23 +3669,6 @@ void RasterizerStorageGLES2::skeleton_set_base_transform_2d(RID p_skeleton, cons skeleton->base_transform_2d = p_base_transform; } -void RasterizerStorageGLES2::skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_world_transform) { - - Skeleton *skeleton = skeleton_owner.getornull(p_skeleton); - - ERR_FAIL_COND(skeleton->use_2d); - - skeleton->world_transform = p_world_transform; - skeleton->use_world_transform = p_enable; - if (p_enable) { - skeleton->world_transform_inverse = skeleton->world_transform.affine_inverse(); - } - - if (!skeleton->update_list.in_list()) { - skeleton_update_list.add(&skeleton->update_list); - } -} - void RasterizerStorageGLES2::_update_skeleton_transform_buffer(const PoolVector<float> &p_data, size_t p_size) { glBindBuffer(GL_ARRAY_BUFFER, resources.skeleton_transform_buffer); @@ -3699,7 +3688,7 @@ void RasterizerStorageGLES2::_update_skeleton_transform_buffer(const PoolVector< void RasterizerStorageGLES2::update_dirty_skeletons() { - if (!config.float_texture_supported) + if (config.use_skeleton_software) return; glActiveTexture(GL_TEXTURE0); @@ -4603,6 +4592,9 @@ void RasterizerStorageGLES2::_render_target_allocate(RenderTarget *rt) { color_format = GL_RGB; } + rt->used_dof_blur_near = false; + rt->mip_maps_allocated = false; + { /* Front FBO */ @@ -4744,21 +4736,39 @@ void RasterizerStorageGLES2::_render_target_allocate(RenderTarget *rt) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glFramebufferTexture2DMultisample(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->color, 0, msaa); + glFramebufferTexture2DMultisample(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->multisample_color, 0, msaa); #endif GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { + // Delete allocated resources and default to no MSAA + WARN_PRINT_ONCE("Cannot allocate back framebuffer for MSAA"); printf("err status: %x\n", status); - _render_target_clear(rt); - ERR_FAIL_COND(status != GL_FRAMEBUFFER_COMPLETE); + config.multisample_supported = false; + rt->multisample_active = false; + + glDeleteFramebuffers(1, &rt->multisample_fbo); + rt->multisample_fbo = 0; + + glDeleteRenderbuffers(1, &rt->multisample_depth); + rt->multisample_depth = 0; +#ifdef ANDROID_ENABLED + glDeleteTextures(1, &rt->multisample_color); +#else + glDeleteRenderbuffers(1, &rt->multisample_color); +#endif + rt->multisample_color = 0; } glBindRenderbuffer(GL_RENDERBUFFER, 0); + glBindFramebuffer(GL_FRAMEBUFFER, 0); +#ifdef ANDROID_ENABLED + glBindTexture(GL_TEXTURE_2D, 0); +#endif } else -#endif +#endif // JAVASCRIPT_ENABLED { rt->multisample_active = false; } @@ -4797,6 +4807,126 @@ void RasterizerStorageGLES2::_render_target_allocate(RenderTarget *rt) { } } + // Allocate mipmap chains for post_process effects + if (!rt->flags[RasterizerStorage::RENDER_TARGET_NO_3D] && rt->width >= 2 && rt->height >= 2) { + + for (int i = 0; i < 2; i++) { + + ERR_FAIL_COND(rt->mip_maps[i].sizes.size()); + int w = rt->width; + int h = rt->height; + + if (i > 0) { + w >>= 1; + h >>= 1; + } + + int level = 0; + int fb_w = w; + int fb_h = h; + + while (true) { + + RenderTarget::MipMaps::Size mm; + mm.width = w; + mm.height = h; + rt->mip_maps[i].sizes.push_back(mm); + + w >>= 1; + h >>= 1; + + if (w < 2 || h < 2) + break; + + level++; + } + + GLsizei width = fb_w; + GLsizei height = fb_h; + + if (config.render_to_mipmap_supported) { + + glGenTextures(1, &rt->mip_maps[i].color); + glBindTexture(GL_TEXTURE_2D, rt->mip_maps[i].color); + + for (int l = 0; l < level + 1; l++) { + glTexImage2D(GL_TEXTURE_2D, l, color_internal_format, width, height, 0, color_format, color_type, NULL); + width = MAX(1, (width / 2)); + height = MAX(1, (height / 2)); + } +#ifdef GLES_OVER_GL + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level); +#endif + } else { + + // Can't render to specific levels of a mipmap in ES 2.0 or Webgl so create a texture for each level + for (int l = 0; l < level + 1; l++) { + glGenTextures(1, &rt->mip_maps[i].sizes.write[l].color); + glBindTexture(GL_TEXTURE_2D, rt->mip_maps[i].sizes[l].color); + glTexImage2D(GL_TEXTURE_2D, 0, color_internal_format, width, height, 0, color_format, color_type, NULL); + width = MAX(1, (width / 2)); + height = MAX(1, (height / 2)); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } + } + + glDisable(GL_SCISSOR_TEST); + glColorMask(1, 1, 1, 1); + glDepthMask(GL_TRUE); + + for (int j = 0; j < rt->mip_maps[i].sizes.size(); j++) { + + RenderTarget::MipMaps::Size &mm = rt->mip_maps[i].sizes.write[j]; + + glGenFramebuffers(1, &mm.fbo); + glBindFramebuffer(GL_FRAMEBUFFER, mm.fbo); + + if (config.render_to_mipmap_supported) { + + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->mip_maps[i].color, j); + } else { + + glBindTexture(GL_TEXTURE_2D, rt->mip_maps[i].sizes[j].color); + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->mip_maps[i].sizes[j].color, 0); + } + + bool used_depth = false; + if (j == 0 && i == 0) { //use always + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, rt->depth, 0); + used_depth = true; + } + + GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + WARN_PRINT_ONCE("Cannot allocate mipmaps for 3D post processing effects"); + glBindFramebuffer(GL_FRAMEBUFFER, RasterizerStorageGLES2::system_fbo); + return; + } + + glClearColor(1.0, 0.0, 1.0, 0.0); + glClear(GL_COLOR_BUFFER_BIT); + if (used_depth) { + glClearDepth(1.0); + glClear(GL_DEPTH_BUFFER_BIT); + } + } + + rt->mip_maps[i].levels = level; + + if (config.render_to_mipmap_supported) { + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } + } + rt->mip_maps_allocated = true; + } + glBindFramebuffer(GL_FRAMEBUFFER, RasterizerStorageGLES2::system_fbo); } @@ -4854,16 +4984,30 @@ void RasterizerStorageGLES2::_render_target_clear(RenderTarget *rt) { rt->copy_screen_effect.color = 0; } + for (int i = 0; i < 2; i++) { + if (rt->mip_maps[i].sizes.size()) { + for (int j = 0; j < rt->mip_maps[i].sizes.size(); j++) { + glDeleteFramebuffers(1, &rt->mip_maps[i].sizes[j].fbo); + glDeleteTextures(1, &rt->mip_maps[i].sizes[j].color); + } + + glDeleteTextures(1, &rt->mip_maps[i].color); + rt->mip_maps[i].sizes.clear(); + rt->mip_maps[i].levels = 0; + rt->mip_maps[i].color = 0; + } + } + if (rt->multisample_active) { glDeleteFramebuffers(1, &rt->multisample_fbo); rt->multisample_fbo = 0; glDeleteRenderbuffers(1, &rt->multisample_depth); rt->multisample_depth = 0; -#ifdef GLES_OVER_GL - glDeleteRenderbuffers(1, &rt->multisample_color); -#else +#ifdef ANDROID_ENABLED glDeleteTextures(1, &rt->multisample_color); +#else + glDeleteRenderbuffers(1, &rt->multisample_color); #endif rt->multisample_color = 0; } @@ -5604,14 +5748,20 @@ void RasterizerStorageGLES2::initialize() { config.support_npot_repeat_mipmap = true; config.depth_internalformat = GL_DEPTH_COMPONENT; config.depth_type = GL_UNSIGNED_INT; - #else config.float_texture_supported = config.extensions.has("GL_ARB_texture_float") || config.extensions.has("GL_OES_texture_float"); config.s3tc_supported = config.extensions.has("GL_EXT_texture_compression_s3tc") || config.extensions.has("WEBGL_compressed_texture_s3tc"); config.etc1_supported = config.extensions.has("GL_OES_compressed_ETC1_RGB8_texture") || config.extensions.has("WEBGL_compressed_texture_etc1"); - config.pvrtc_supported = config.extensions.has("IMG_texture_compression_pvrtc"); + config.pvrtc_supported = config.extensions.has("IMG_texture_compression_pvrtc") || config.extensions.has("WEBGL_compressed_texture_pvrtc"); config.support_npot_repeat_mipmap = config.extensions.has("GL_OES_texture_npot"); - + // on mobile check for 24 bit depth support + if (config.extensions.has("GL_OES_depth24")) { + config.depth_internalformat = _DEPTH_COMPONENT24_OES; + config.depth_type = GL_UNSIGNED_INT; + } else { + config.depth_internalformat = GL_DEPTH_COMPONENT16; + config.depth_type = GL_UNSIGNED_SHORT; + } #endif #ifndef GLES_OVER_GL @@ -5634,13 +5784,21 @@ void RasterizerStorageGLES2::initialize() { config.multisample_supported = config.extensions.has("GL_EXT_framebuffer_multisample") || config.extensions.has("GL_EXT_multisampled_render_to_texture") || config.extensions.has("GL_APPLE_framebuffer_multisample"); #ifdef GLES_OVER_GL + //TODO: causes huge problems with desktop video drivers. Making false for now, needs to be true to render SCREEN_TEXTURE mipmaps + config.render_to_mipmap_supported = false; +#else + //check if mipmaps can be used for SCREEN_TEXTURE and Glow on Mobile and web platforms + config.render_to_mipmap_supported = config.extensions.has("GL_OES_fbo_render_mipmap") && config.extensions.has("GL_EXT_texture_lod"); +#endif + +#ifdef GLES_OVER_GL config.use_rgba_2d_shadows = false; config.support_depth_texture = true; config.use_rgba_3d_shadows = false; config.support_depth_cubemaps = true; #else config.use_rgba_2d_shadows = !(config.float_texture_supported && config.extensions.has("GL_EXT_texture_rg")); - config.support_depth_texture = config.extensions.has("GL_OES_depth_texture"); + config.support_depth_texture = config.extensions.has("GL_OES_depth_texture") || config.extensions.has("WEBGL_depth_texture"); config.use_rgba_3d_shadows = !config.support_depth_texture; config.support_depth_cubemaps = config.extensions.has("GL_OES_depth_texture_cube_map"); #endif @@ -5667,7 +5825,7 @@ void RasterizerStorageGLES2::initialize() { #endif config.rgtc_supported = config.extensions.has("GL_EXT_texture_compression_rgtc") || config.extensions.has("GL_ARB_texture_compression_rgtc") || config.extensions.has("EXT_texture_compression_rgtc"); - config.bptc_supported = config.extensions.has("GL_ARB_texture_compression_bptc"); + config.bptc_supported = config.extensions.has("GL_ARB_texture_compression_bptc") || config.extensions.has("EXT_texture_compression_bptc"); //determine formats for depth textures (or renderbuffers) if (config.support_depth_texture) { @@ -5680,7 +5838,7 @@ void RasterizerStorageGLES2::initialize() { GLuint depth; glGenTextures(1, &depth); glBindTexture(GL_TEXTURE_2D, depth); - glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 32, 32, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, config.depth_internalformat, 32, 32, 0, config.depth_internalformat, config.depth_type, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -5696,10 +5854,7 @@ void RasterizerStorageGLES2::initialize() { glBindTexture(GL_TEXTURE_2D, 0); glDeleteTextures(1, &depth); - if (status == GL_FRAMEBUFFER_COMPLETE) { - config.depth_internalformat = GL_DEPTH_COMPONENT; - config.depth_type = GL_UNSIGNED_INT; - } else { + if (status != GL_FRAMEBUFFER_COMPLETE) { // If it fails, test to see if it supports a framebuffer texture using UNSIGNED_SHORT // This is needed because many OSX devices don't support either UNSIGNED_INT or UNSIGNED_SHORT @@ -5732,15 +5887,6 @@ void RasterizerStorageGLES2::initialize() { glBindTexture(GL_TEXTURE_2D, 0); glDeleteTextures(1, &depth); } - } else { - // Will use renderbuffer for depth, on mobile check for 24 bit depth support - if (config.extensions.has("GL_OES_depth24")) { - config.depth_internalformat = _DEPTH_COMPONENT24_OES; - config.depth_type = GL_UNSIGNED_INT; - } else { - config.depth_internalformat = GL_DEPTH_COMPONENT16; - config.depth_type = GL_UNSIGNED_SHORT; - } } //picky requirements for these @@ -5751,9 +5897,14 @@ void RasterizerStorageGLES2::initialize() { frame.current_rt = NULL; frame.clear_request = false; + glGetIntegerv(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, &config.max_vertex_texture_image_units); glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &config.max_texture_image_units); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &config.max_texture_size); + // the use skeleton software path should be used if either float texture is not supported, + // OR max_vertex_texture_image_units is zero + config.use_skeleton_software = (config.float_texture_supported == false) || (config.max_vertex_texture_image_units == 0); + shaders.copy.init(); shaders.cubemap_filter.init(); bool ggx_hq = GLOBAL_GET("rendering/quality/reflections/high_quality_ggx"); diff --git a/drivers/gles2/rasterizer_storage_gles2.h b/drivers/gles2/rasterizer_storage_gles2.h index d139697b86..27f06074ed 100644 --- a/drivers/gles2/rasterizer_storage_gles2.h +++ b/drivers/gles2/rasterizer_storage_gles2.h @@ -60,7 +60,9 @@ public: bool shrink_textures_x2; bool use_fast_texture_filter; + bool use_skeleton_software; + int max_vertex_texture_image_units; int max_texture_image_units; int max_texture_size; @@ -93,6 +95,7 @@ public: bool support_shadow_cubemaps; bool multisample_supported; + bool render_to_mipmap_supported; GLuint depth_internalformat; GLuint depth_type; @@ -334,7 +337,7 @@ public: mutable RID_Owner<Texture> texture_owner; - Ref<Image> _get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool p_will_need_resize) const; + Ref<Image> _get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool p_force_decompress) const; virtual RID texture_create(); virtual void texture_allocate(RID p_texture, int p_width, int p_height, int p_depth_3d, Image::Format p_format, VS::TextureType p_type, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT); @@ -868,16 +871,12 @@ public: Set<RasterizerScene::InstanceBase *> instances; Transform2D base_transform_2d; - Transform world_transform; - Transform world_transform_inverse; - bool use_world_transform; Skeleton() : use_2d(false), size(0), tex_id(0), - update_list(this), - use_world_transform(false) { + update_list(this) { } }; @@ -895,7 +894,6 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform); virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const; virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform); - virtual void skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_world_transform); void _update_skeleton_transform_buffer(const PoolVector<float> &p_data, size_t p_size); @@ -1143,12 +1141,6 @@ public: GLuint multisample_depth; bool multisample_active; - // TODO post processing effects? - - // TODO HDR? - - // TODO this is hardcoded for texscreen copies for now - struct Effect { GLuint fbo; int width; @@ -1166,6 +1158,27 @@ public: Effect copy_screen_effect; + struct MipMaps { + + struct Size { + GLuint fbo; + GLuint color; + int width; + int height; + }; + + Vector<Size> sizes; + GLuint color; + int levels; + + MipMaps() : + color(0), + levels(0) { + } + }; + + MipMaps mip_maps[2]; + struct External { GLuint fbo; GLuint color; @@ -1185,6 +1198,9 @@ public: RID texture; + bool used_dof_blur_near; + bool mip_maps_allocated; + RenderTarget() : fbo(0), color(0), @@ -1198,7 +1214,9 @@ public: width(0), height(0), used_in_frame(false), - msaa(VS::VIEWPORT_MSAA_DISABLED) { + msaa(VS::VIEWPORT_MSAA_DISABLED), + used_dof_blur_near(false), + mip_maps_allocated(false) { for (int i = 0; i < RENDER_TARGET_FLAG_MAX; ++i) { flags[i] = false; } diff --git a/drivers/gles2/shader_compiler_gles2.cpp b/drivers/gles2/shader_compiler_gles2.cpp index 640d45ae65..7e9b6fdb82 100644 --- a/drivers/gles2/shader_compiler_gles2.cpp +++ b/drivers/gles2/shader_compiler_gles2.cpp @@ -353,6 +353,11 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener varying_code += _typestr(E->get().type); varying_code += " "; varying_code += _mkid(E->key()); + if (E->get().array_size > 0) { + varying_code += "["; + varying_code += itos(E->get().array_size); + varying_code += "]"; + } varying_code += ";\n"; String final_code = varying_code.as_string(); @@ -804,15 +809,6 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener code += "else\n"; code += _dump_node_code(cf_node->blocks[1], p_level + 1, r_gen_code, p_actions, p_default_actions, p_assigning); } - } else if (cf_node->flow_op == SL::FLOW_OP_SWITCH) { - code += _mktab(p_level) + "switch (" + _dump_node_code(cf_node->expressions[0], p_level, r_gen_code, p_actions, p_default_actions, p_assigning) + ")\n"; - code += _dump_node_code(cf_node->blocks[0], p_level + 1, r_gen_code, p_actions, p_default_actions, p_assigning); - } else if (cf_node->flow_op == SL::FLOW_OP_CASE) { - code += _mktab(p_level) + "case " + _dump_node_code(cf_node->expressions[0], p_level, r_gen_code, p_actions, p_default_actions, p_assigning) + ":\n"; - code += _dump_node_code(cf_node->blocks[0], p_level + 1, r_gen_code, p_actions, p_default_actions, p_assigning); - } else if (cf_node->flow_op == SL::FLOW_OP_DEFAULT) { - code += _mktab(p_level) + "default:\n"; - code += _dump_node_code(cf_node->blocks[0], p_level + 1, r_gen_code, p_actions, p_default_actions, p_assigning); } else if (cf_node->flow_op == SL::FLOW_OP_DO) { code += _mktab(p_level); code += "do"; @@ -943,6 +939,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { actions[VS::SHADER_CANVAS_ITEM].renames["LIGHT_UV"] = "light_uv"; actions[VS::SHADER_CANVAS_ITEM].renames["LIGHT"] = "light"; actions[VS::SHADER_CANVAS_ITEM].renames["SHADOW_COLOR"] = "shadow_color"; + actions[VS::SHADER_CANVAS_ITEM].renames["SHADOW_VEC"] = "shadow_vec"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["COLOR"] = "#define COLOR_USED\n"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["SCREEN_TEXTURE"] = "#define SCREEN_TEXTURE_USED\n"; @@ -952,6 +949,7 @@ ShaderCompilerGLES2::ShaderCompilerGLES2() { actions[VS::SHADER_CANVAS_ITEM].usage_defines["NORMALMAP"] = "#define NORMALMAP_USED\n"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["LIGHT"] = "#define USE_LIGHT_SHADER_CODE\n"; actions[VS::SHADER_CANVAS_ITEM].render_mode_defines["skip_vertex_transform"] = "#define SKIP_TRANSFORM_USED\n"; + actions[VS::SHADER_CANVAS_ITEM].usage_defines["SHADOW_VEC"] = "#define SHADOW_VEC_USED\n"; // Ported from GLES3 diff --git a/drivers/gles2/shaders/SCsub b/drivers/gles2/shaders/SCsub index 085c43319c..d7ae0243e6 100644 --- a/drivers/gles2/shaders/SCsub +++ b/drivers/gles2/shaders/SCsub @@ -12,12 +12,12 @@ if 'GLES2_GLSL' in env['BUILDERS']: env.GLES2_GLSL('cube_to_dp.glsl'); # env.GLES2_GLSL('blend_shape.glsl'); # env.GLES2_GLSL('screen_space_reflection.glsl'); -# env.GLES2_GLSL('effect_blur.glsl'); + env.GLES2_GLSL('effect_blur.glsl'); # env.GLES2_GLSL('subsurf_scattering.glsl'); # env.GLES2_GLSL('ssao.glsl'); # env.GLES2_GLSL('ssao_minify.glsl'); # env.GLES2_GLSL('ssao_blur.glsl'); # env.GLES2_GLSL('exposure.glsl'); -# env.GLES2_GLSL('tonemap.glsl'); + env.GLES2_GLSL('tonemap.glsl'); # env.GLES2_GLSL('particles.glsl'); env.GLES2_GLSL('lens_distorted.glsl'); diff --git a/drivers/gles2/shaders/canvas.glsl b/drivers/gles2/shaders/canvas.glsl index fa0b315e29..08548ded17 100644 --- a/drivers/gles2/shaders/canvas.glsl +++ b/drivers/gles2/shaders/canvas.glsl @@ -331,6 +331,7 @@ void light_compute( inout vec4 light_color, vec2 light_uv, inout vec4 shadow_color, + inout vec2 shadow_vec, vec3 normal, vec2 uv, #if defined(SCREEN_UV_USED) @@ -407,6 +408,7 @@ FRAGMENT_SHADER_CODE #ifdef USE_LIGHTING vec2 light_vec = transformed_light_uv; + vec2 shadow_vec = transformed_light_uv; if (normal_used) { normal.xy = mat2(local_rot.xy, local_rot.zw) * normal.xy; @@ -434,6 +436,7 @@ FRAGMENT_SHADER_CODE real_light_color, light_uv, real_light_shadow_color, + shadow_vec, normal, uv, #if defined(SCREEN_UV_USED) @@ -452,11 +455,18 @@ FRAGMENT_SHADER_CODE color *= light; #ifdef USE_SHADOWS - // Reset light_vec to compute shadows, the shadow map is created from the light origin, so it only - // makes sense to compute shadows from there. - light_vec = light_uv_interp.zw; - float angle_to_light = -atan(light_vec.x, light_vec.y); +#ifdef SHADOW_VEC_USED + mat3 inverse_light_matrix = mat3(light_matrix); + inverse_light_matrix[0] = normalize(inverse_light_matrix[0]); + inverse_light_matrix[1] = normalize(inverse_light_matrix[1]); + inverse_light_matrix[2] = normalize(inverse_light_matrix[2]); + shadow_vec = (inverse_light_matrix * vec3(shadow_vec, 0.0)).xy; +#else + shadow_vec = light_uv_interp.zw; +#endif + + float angle_to_light = -atan(shadow_vec.x, shadow_vec.y); float PI = 3.14159265358979323846264; /*int i = int(mod(floor((angle_to_light+7.0*PI/6.0)/(4.0*PI/6.0))+1.0, 3.0)); // +1 pq os indices estao em ordem 2,0,1 nos arrays float ang*/ @@ -467,18 +477,18 @@ FRAGMENT_SHADER_CODE vec2 point; float sh; if (abs_angle < 45.0 * PI / 180.0) { - point = light_vec; + point = shadow_vec; sh = 0.0 + (1.0 / 8.0); } else if (abs_angle > 135.0 * PI / 180.0) { - point = -light_vec; + point = -shadow_vec; sh = 0.5 + (1.0 / 8.0); } else if (angle_to_light > 0.0) { - point = vec2(light_vec.y, -light_vec.x); + point = vec2(shadow_vec.y, -shadow_vec.x); sh = 0.25 + (1.0 / 8.0); } else { - point = vec2(-light_vec.y, light_vec.x); + point = vec2(-shadow_vec.y, shadow_vec.x); sh = 0.75 + (1.0 / 8.0); } diff --git a/drivers/gles2/shaders/canvas_shadow.glsl b/drivers/gles2/shaders/canvas_shadow.glsl index dcb43d523f..7a5ba4f571 100644 --- a/drivers/gles2/shaders/canvas_shadow.glsl +++ b/drivers/gles2/shaders/canvas_shadow.glsl @@ -34,9 +34,14 @@ void main() { #define mediump #define highp #else +#if defined(USE_HIGHP_PRECISION) +precision highp float; +precision highp int; +#else precision mediump float; precision mediump int; #endif +#endif varying highp vec4 position_interp; /* clang-format on */ diff --git a/drivers/gles2/shaders/copy.glsl b/drivers/gles2/shaders/copy.glsl index 195db7c45f..aa967115da 100644 --- a/drivers/gles2/shaders/copy.glsl +++ b/drivers/gles2/shaders/copy.glsl @@ -144,11 +144,11 @@ void main() { #elif defined(USE_ASYM_PANO) // When an asymmetrical projection matrix is used (applicable for stereoscopic rendering i.e. VR) we need to do this calculation per fragment to get a perspective correct result. - // Note that we're ignoring the x-offset for IPD, with Z sufficiently in the distance it becomes neglectible, as a result we could probably just set cube_normal.z to -1. + // Asymmetrical projection means the center of projection is no longer in the center of the screen but shifted. // The Matrix[2][0] (= asym_proj.x) and Matrix[2][1] (= asym_proj.z) values are what provide the right shift in the image. vec3 cube_normal; - cube_normal.z = -1000000.0; + cube_normal.z = -1.0; cube_normal.x = (cube_normal.z * (-uv_interp.x - asym_proj.x)) / asym_proj.y; cube_normal.y = (cube_normal.z * (-uv_interp.y - asym_proj.z)) / asym_proj.a; cube_normal = mat3(sky_transform) * mat3(pano_transform) * cube_normal; diff --git a/drivers/gles2/shaders/cube_to_dp.glsl b/drivers/gles2/shaders/cube_to_dp.glsl index cb4b3f6dec..769908c3b4 100644 --- a/drivers/gles2/shaders/cube_to_dp.glsl +++ b/drivers/gles2/shaders/cube_to_dp.glsl @@ -30,9 +30,14 @@ void main() { #define mediump #define highp #else +#if defined(USE_HIGHP_PRECISION) +precision highp float; +precision highp int; +#else precision mediump float; precision mediump int; #endif +#endif uniform highp samplerCube source_cube; //texunit:0 /* clang-format on */ diff --git a/drivers/gles2/shaders/effect_blur.glsl b/drivers/gles2/shaders/effect_blur.glsl index df79e89931..b28d78a6ca 100644 --- a/drivers/gles2/shaders/effect_blur.glsl +++ b/drivers/gles2/shaders/effect_blur.glsl @@ -1,11 +1,20 @@ /* clang-format off */ [vertex] -layout(location = 0) in highp vec4 vertex_attrib; +#ifdef USE_GLES_OVER_GL +#define lowp +#define mediump +#define highp +#else +precision highp float; +precision highp int; +#endif + +attribute vec2 vertex_attrib; // attrib:0 /* clang-format on */ -layout(location = 4) in vec2 uv_in; +attribute vec2 uv_in; // attrib:4 -out vec2 uv_interp; +varying vec2 uv_interp; #ifdef USE_BLUR_SECTION @@ -16,7 +25,7 @@ uniform vec4 blur_section; void main() { uv_interp = uv_in; - gl_Position = vertex_attrib; + gl_Position = vec4(vertex_attrib, 0.0, 1.0); #ifdef USE_BLUR_SECTION uv_interp = blur_section.xy + uv_interp * blur_section.zw; @@ -27,29 +36,46 @@ void main() { /* clang-format off */ [fragment] -#if !defined(GLES_OVER_GL) +// texture2DLodEXT and textureCubeLodEXT are fragment shader specific. +// Do not copy these defines in the vertex section. +#ifndef USE_GLES_OVER_GL +#ifdef GL_EXT_shader_texture_lod +#extension GL_EXT_shader_texture_lod : enable +#define texture2DLod(img, coord, lod) texture2DLodEXT(img, coord, lod) +#define textureCubeLod(img, coord, lod) textureCubeLodEXT(img, coord, lod) +#endif +#endif // !USE_GLES_OVER_GL + +#ifdef GL_ARB_shader_texture_lod +#extension GL_ARB_shader_texture_lod : enable +#endif + +#if !defined(GL_EXT_shader_texture_lod) && !defined(GL_ARB_shader_texture_lod) +#define texture2DLod(img, coord, lod) texture2D(img, coord, lod) +#define textureCubeLod(img, coord, lod) textureCube(img, coord, lod) +#endif + +#ifdef USE_GLES_OVER_GL +#define lowp +#define mediump +#define highp +#else +#if defined(USE_HIGHP_PRECISION) +precision highp float; +precision highp int; +#else precision mediump float; +precision mediump int; +#endif #endif -in vec2 uv_interp; +varying vec2 uv_interp; /* clang-format on */ uniform sampler2D source_color; //texunit:0 -#ifdef SSAO_MERGE -uniform sampler2D source_ssao; //texunit:1 -#endif - uniform float lod; uniform vec2 pixel_size; -layout(location = 0) out vec4 frag_color; - -#ifdef SSAO_MERGE - -uniform vec4 ssao_color; - -#endif - #if defined(GLOW_GAUSSIAN_HORIZONTAL) || defined(GLOW_GAUSSIAN_VERTICAL) uniform float glow_strength; @@ -58,6 +84,7 @@ uniform float glow_strength; #if defined(DOF_FAR_BLUR) || defined(DOF_NEAR_BLUR) +#ifdef USE_GLES_OVER_GL #ifdef DOF_QUALITY_LOW const int dof_kernel_size = 5; const int dof_kernel_from = 2; @@ -76,6 +103,7 @@ const int dof_kernel_size = 21; const int dof_kernel_from = 10; const float dof_kernel[21] = float[](0.028174, 0.032676, 0.037311, 0.041944, 0.046421, 0.050582, 0.054261, 0.057307, 0.059587, 0.060998, 0.061476, 0.060998, 0.059587, 0.057307, 0.054261, 0.050582, 0.046421, 0.041944, 0.037311, 0.032676, 0.028174); #endif +#endif uniform sampler2D dof_source_depth; //texunit:1 uniform float dof_begin; @@ -83,24 +111,11 @@ uniform float dof_end; uniform vec2 dof_dir; uniform float dof_radius; -#ifdef DOF_NEAR_BLUR_MERGE - -uniform sampler2D source_dof_original; //texunit:2 -#endif - #endif #ifdef GLOW_FIRST_PASS -uniform float exposure; -uniform float white; - -#ifdef GLOW_USE_AUTO_EXPOSURE - -uniform highp sampler2D source_auto_exposure; //texunit:1 -uniform highp float auto_exposure_grey; - -#endif +uniform highp float luminance_cap; uniform float glow_bloom; uniform float glow_hdr_threshold; @@ -113,60 +128,95 @@ uniform float camera_z_near; void main() { -#ifdef GAUSSIAN_HORIZONTAL +#ifdef GLOW_GAUSSIAN_HORIZONTAL vec2 pix_size = pixel_size; pix_size *= 0.5; //reading from larger buffer, so use more samples - // sigma 2 - vec4 color = textureLod(source_color, uv_interp + vec2(0.0, 0.0) * pix_size, lod) * 0.214607; - color += textureLod(source_color, uv_interp + vec2(1.0, 0.0) * pix_size, lod) * 0.189879; - color += textureLod(source_color, uv_interp + vec2(2.0, 0.0) * pix_size, lod) * 0.131514; - color += textureLod(source_color, uv_interp + vec2(3.0, 0.0) * pix_size, lod) * 0.071303; - color += textureLod(source_color, uv_interp + vec2(-1.0, 0.0) * pix_size, lod) * 0.189879; - color += textureLod(source_color, uv_interp + vec2(-2.0, 0.0) * pix_size, lod) * 0.131514; - color += textureLod(source_color, uv_interp + vec2(-3.0, 0.0) * pix_size, lod) * 0.071303; - frag_color = color; + vec4 color = texture2DLod(source_color, uv_interp + vec2(0.0, 0.0) * pix_size, lod) * 0.174938; + color += texture2DLod(source_color, uv_interp + vec2(1.0, 0.0) * pix_size, lod) * 0.165569; + color += texture2DLod(source_color, uv_interp + vec2(2.0, 0.0) * pix_size, lod) * 0.140367; + color += texture2DLod(source_color, uv_interp + vec2(3.0, 0.0) * pix_size, lod) * 0.106595; + color += texture2DLod(source_color, uv_interp + vec2(-1.0, 0.0) * pix_size, lod) * 0.165569; + color += texture2DLod(source_color, uv_interp + vec2(-2.0, 0.0) * pix_size, lod) * 0.140367; + color += texture2DLod(source_color, uv_interp + vec2(-3.0, 0.0) * pix_size, lod) * 0.106595; + color *= glow_strength; + gl_FragColor = color; #endif -#ifdef GAUSSIAN_VERTICAL - vec4 color = textureLod(source_color, uv_interp + vec2(0.0, 0.0) * pixel_size, lod) * 0.38774; - color += textureLod(source_color, uv_interp + vec2(0.0, 1.0) * pixel_size, lod) * 0.24477; - color += textureLod(source_color, uv_interp + vec2(0.0, 2.0) * pixel_size, lod) * 0.06136; - color += textureLod(source_color, uv_interp + vec2(0.0, -1.0) * pixel_size, lod) * 0.24477; - color += textureLod(source_color, uv_interp + vec2(0.0, -2.0) * pixel_size, lod) * 0.06136; - frag_color = color; +#ifdef GLOW_GAUSSIAN_VERTICAL + vec4 color = texture2DLod(source_color, uv_interp + vec2(0.0, 0.0) * pixel_size, lod) * 0.288713; + color += texture2DLod(source_color, uv_interp + vec2(0.0, 1.0) * pixel_size, lod) * 0.233062; + color += texture2DLod(source_color, uv_interp + vec2(0.0, 2.0) * pixel_size, lod) * 0.122581; + color += texture2DLod(source_color, uv_interp + vec2(0.0, -1.0) * pixel_size, lod) * 0.233062; + color += texture2DLod(source_color, uv_interp + vec2(0.0, -2.0) * pixel_size, lod) * 0.122581; + color *= glow_strength; + gl_FragColor = color; #endif - //glow uses larger sigma for a more rounded blur effect +#ifndef USE_GLES_OVER_GL +#if defined(DOF_FAR_BLUR) || defined(DOF_NEAR_BLUR) -#ifdef GLOW_GAUSSIAN_HORIZONTAL - vec2 pix_size = pixel_size; - pix_size *= 0.5; //reading from larger buffer, so use more samples - vec4 color = textureLod(source_color, uv_interp + vec2(0.0, 0.0) * pix_size, lod) * 0.174938; - color += textureLod(source_color, uv_interp + vec2(1.0, 0.0) * pix_size, lod) * 0.165569; - color += textureLod(source_color, uv_interp + vec2(2.0, 0.0) * pix_size, lod) * 0.140367; - color += textureLod(source_color, uv_interp + vec2(3.0, 0.0) * pix_size, lod) * 0.106595; - color += textureLod(source_color, uv_interp + vec2(-1.0, 0.0) * pix_size, lod) * 0.165569; - color += textureLod(source_color, uv_interp + vec2(-2.0, 0.0) * pix_size, lod) * 0.140367; - color += textureLod(source_color, uv_interp + vec2(-3.0, 0.0) * pix_size, lod) * 0.106595; - color *= glow_strength; - frag_color = color; +#ifdef DOF_QUALITY_LOW + const int dof_kernel_size = 5; + const int dof_kernel_from = 2; + float dof_kernel[5]; + dof_kernel[0] = 0.153388; + dof_kernel[1] = 0.221461; + dof_kernel[2] = 0.250301; + dof_kernel[3] = 0.221461; + dof_kernel[4] = 0.153388; #endif -#ifdef GLOW_GAUSSIAN_VERTICAL - vec4 color = textureLod(source_color, uv_interp + vec2(0.0, 0.0) * pixel_size, lod) * 0.288713; - color += textureLod(source_color, uv_interp + vec2(0.0, 1.0) * pixel_size, lod) * 0.233062; - color += textureLod(source_color, uv_interp + vec2(0.0, 2.0) * pixel_size, lod) * 0.122581; - color += textureLod(source_color, uv_interp + vec2(0.0, -1.0) * pixel_size, lod) * 0.233062; - color += textureLod(source_color, uv_interp + vec2(0.0, -2.0) * pixel_size, lod) * 0.122581; - color *= glow_strength; - frag_color = color; +#ifdef DOF_QUALITY_MEDIUM + const int dof_kernel_size = 11; + const int dof_kernel_from = 5; + float dof_kernel[11]; + dof_kernel[0] = 0.055037; + dof_kernel[1] = 0.072806; + dof_kernel[2] = 0.090506; + dof_kernel[3] = 0.105726; + dof_kernel[4] = 0.116061; + dof_kernel[5] = 0.119726; + dof_kernel[6] = 0.116061; + dof_kernel[7] = 0.105726; + dof_kernel[8] = 0.090506; + dof_kernel[9] = 0.072806; + dof_kernel[10] = 0.055037; #endif +#ifdef DOF_QUALITY_HIGH + const int dof_kernel_size = 21; + const int dof_kernel_from = 10; + float dof_kernel[21]; + dof_kernel[0] = 0.028174; + dof_kernel[1] = 0.032676; + dof_kernel[2] = 0.037311; + dof_kernel[3] = 0.041944; + dof_kernel[4] = 0.046421; + dof_kernel[5] = 0.050582; + dof_kernel[6] = 0.054261; + dof_kernel[7] = 0.057307; + dof_kernel[8] = 0.059587; + dof_kernel[9] = 0.060998; + dof_kernel[10] = 0.061476; + dof_kernel[11] = 0.060998; + dof_kernel[12] = 0.059587; + dof_kernel[13] = 0.057307; + dof_kernel[14] = 0.054261; + dof_kernel[15] = 0.050582; + dof_kernel[16] = 0.046421; + dof_kernel[17] = 0.041944; + dof_kernel[18] = 0.037311; + dof_kernel[19] = 0.032676; + dof_kernel[20] = 0.028174; +#endif +#endif +#endif //!USE_GLES_OVER_GL + #ifdef DOF_FAR_BLUR vec4 color_accum = vec4(0.0); - float depth = textureLod(dof_source_depth, uv_interp, 0.0).r; + float depth = texture2DLod(dof_source_depth, uv_interp, 0.0).r; depth = depth * 2.0 - 1.0; #ifdef USE_ORTHOGONAL_PROJECTION depth = ((depth + (camera_z_far + camera_z_near) / (camera_z_far - camera_z_near)) * (camera_z_far - camera_z_near)) / 2.0; @@ -184,17 +234,17 @@ void main() { float tap_k = dof_kernel[i]; - float tap_depth = texture(dof_source_depth, tap_uv, 0.0).r; + float tap_depth = texture2D(dof_source_depth, tap_uv, 0.0).r; tap_depth = tap_depth * 2.0 - 1.0; #ifdef USE_ORTHOGONAL_PROJECTION tap_depth = ((tap_depth + (camera_z_far + camera_z_near) / (camera_z_far - camera_z_near)) * (camera_z_far - camera_z_near)) / 2.0; #else tap_depth = 2.0 * camera_z_near * camera_z_far / (camera_z_far + camera_z_near - tap_depth * (camera_z_far - camera_z_near)); #endif - float tap_amount = mix(smoothstep(dof_begin, dof_end, tap_depth), 1.0, int_ofs == 0); + float tap_amount = int_ofs == 0 ? 1.0 : smoothstep(dof_begin, dof_end, tap_depth); tap_amount *= tap_amount * tap_amount; //prevent undesired glow effect - vec4 tap_color = textureLod(source_color, tap_uv, 0.0) * tap_k; + vec4 tap_color = texture2DLod(source_color, tap_uv, 0.0) * tap_k; k_accum += tap_k * tap_amount; color_accum += tap_color * tap_amount; @@ -204,7 +254,7 @@ void main() { color_accum /= k_accum; } - frag_color = color_accum; ///k_accum; + gl_FragColor = color_accum; ///k_accum; #endif @@ -212,19 +262,19 @@ void main() { vec4 color_accum = vec4(0.0); - float max_accum = 0; + float max_accum = 0.0; for (int i = 0; i < dof_kernel_size; i++) { int int_ofs = i - dof_kernel_from; vec2 tap_uv = uv_interp + dof_dir * float(int_ofs) * dof_radius; - float ofs_influence = max(0.0, 1.0 - float(abs(int_ofs)) / float(dof_kernel_from)); + float ofs_influence = max(0.0, 1.0 - abs(float(int_ofs)) / float(dof_kernel_from)); float tap_k = dof_kernel[i]; - vec4 tap_color = textureLod(source_color, tap_uv, 0.0); + vec4 tap_color = texture2DLod(source_color, tap_uv, 0.0); - float tap_depth = texture(dof_source_depth, tap_uv, 0.0).r; + float tap_depth = texture2D(dof_source_depth, tap_uv, 0.0).r; tap_depth = tap_depth * 2.0 - 1.0; #ifdef USE_ORTHOGONAL_PROJECTION tap_depth = ((tap_depth + (camera_z_far + camera_z_near) / (camera_z_far - camera_z_near)) * (camera_z_far - camera_z_near)) / 2.0; @@ -247,46 +297,16 @@ void main() { color_accum.a = max(color_accum.a, sqrt(max_accum)); -#ifdef DOF_NEAR_BLUR_MERGE - - vec4 original = textureLod(source_dof_original, uv_interp, 0.0); - color_accum = mix(original, color_accum, color_accum.a); - -#endif - -#ifndef DOF_NEAR_FIRST_TAP - //color_accum=vec4(vec3(color_accum.a),1.0); -#endif - frag_color = color_accum; + gl_FragColor = color_accum; #endif #ifdef GLOW_FIRST_PASS -#ifdef GLOW_USE_AUTO_EXPOSURE - - frag_color /= texelFetch(source_auto_exposure, ivec2(0, 0), 0).r / auto_exposure_grey; -#endif - frag_color *= exposure; - - float luminance = max(frag_color.r, max(frag_color.g, frag_color.b)); + float luminance = max(gl_FragColor.r, max(gl_FragColor.g, gl_FragColor.b)); float feedback = max(smoothstep(glow_hdr_threshold, glow_hdr_threshold + glow_hdr_scale, luminance), glow_bloom); - frag_color *= feedback; - -#endif - -#ifdef SIMPLE_COPY - vec4 color = textureLod(source_color, uv_interp, 0.0); - frag_color = color; -#endif - -#ifdef SSAO_MERGE - - vec4 color = textureLod(source_color, uv_interp, 0.0); - float ssao = textureLod(source_ssao, uv_interp, 0.0).r; - - frag_color = vec4(mix(color.rgb, color.rgb * mix(ssao_color.rgb, vec3(1.0), ssao), color.a), 1.0); + gl_FragColor = min(gl_FragColor * feedback, vec4(luminance_cap)); #endif } diff --git a/drivers/gles2/shaders/lens_distorted.glsl b/drivers/gles2/shaders/lens_distorted.glsl index 81898a75a5..f4ff80ba9a 100644 --- a/drivers/gles2/shaders/lens_distorted.glsl +++ b/drivers/gles2/shaders/lens_distorted.glsl @@ -34,8 +34,13 @@ void main() { #define mediump #define highp #else -precision mediump float; +#if defined(USE_HIGHP_PRECISION) +precision highp float; precision highp int; +#else +precision mediump float; +precision mediump int; +#endif #endif uniform sampler2D source; //texunit:0 diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl index 8a9387f0b3..e36e776881 100644 --- a/drivers/gles2/shaders/scene.glsl +++ b/drivers/gles2/shaders/scene.glsl @@ -61,10 +61,6 @@ uniform ivec2 skeleton_texture_size; #endif -uniform highp mat4 skeleton_transform; -uniform highp mat4 skeleton_transform_inverse; -uniform bool skeleton_in_world_coords; - #endif #ifdef USE_INSTANCING @@ -410,12 +406,7 @@ void main() { #endif - if (skeleton_in_world_coords) { - bone_transform = skeleton_transform * (bone_transform * skeleton_transform_inverse); - world_matrix = bone_transform * world_matrix; - } else { - world_matrix = world_matrix * bone_transform; - } + world_matrix = world_matrix * bone_transform; #endif @@ -738,9 +729,6 @@ uniform highp vec2 viewport_size; uniform vec2 screen_pixel_size; #endif -// I think supporting this in GLES2 is difficult -// uniform highp sampler2D depth_buffer; - #if defined(SCREEN_TEXTURE_USED) uniform highp sampler2D screen_texture; //texunit:-4 #endif diff --git a/drivers/gles2/shaders/tonemap.glsl b/drivers/gles2/shaders/tonemap.glsl index eae3b5a1ca..585d821626 100644 --- a/drivers/gles2/shaders/tonemap.glsl +++ b/drivers/gles2/shaders/tonemap.glsl @@ -1,66 +1,103 @@ /* clang-format off */ [vertex] -layout(location = 0) in highp vec4 vertex_attrib; +#ifdef USE_GLES_OVER_GL +#define lowp +#define mediump +#define highp +#else +precision highp float; +precision highp int; +#endif + +attribute vec2 vertex_attrib; // attrib:0 /* clang-format on */ -layout(location = 4) in vec2 uv_in; +attribute vec2 uv_in; // attrib:4 -out vec2 uv_interp; +varying vec2 uv_interp; void main() { + gl_Position = vec4(vertex_attrib, 0.0, 1.0); - gl_Position = vertex_attrib; uv_interp = uv_in; -#ifdef V_FLIP - uv_interp.y = 1.0 - uv_interp.y; -#endif } /* clang-format off */ [fragment] -#if !defined(GLES_OVER_GL) -precision mediump float; + +// texture2DLodEXT and textureCubeLodEXT are fragment shader specific. +// Do not copy these defines in the vertex section. +#ifndef USE_GLES_OVER_GL +#ifdef GL_EXT_shader_texture_lod +#extension GL_EXT_shader_texture_lod : enable +#define texture2DLod(img, coord, lod) texture2DLodEXT(img, coord, lod) +#define textureCubeLod(img, coord, lod) textureCubeLodEXT(img, coord, lod) #endif +#endif // !USE_GLES_OVER_GL -in vec2 uv_interp; -/* clang-format on */ +#ifdef GL_ARB_shader_texture_lod +#extension GL_ARB_shader_texture_lod : enable +#endif -uniform highp sampler2D source; //texunit:0 +#if !defined(GL_EXT_shader_texture_lod) && !defined(GL_ARB_shader_texture_lod) +#define texture2DLod(img, coord, lod) texture2D(img, coord, lod) +#define textureCubeLod(img, coord, lod) textureCube(img, coord, lod) +#endif -uniform float exposure; -uniform float white; +// Allows the use of bitshift operators for bicubic upscale +#ifdef GL_EXT_gpu_shader4 +#extension GL_EXT_gpu_shader4 : enable +#endif -#ifdef USE_AUTO_EXPOSURE +#ifdef USE_GLES_OVER_GL +#define lowp +#define mediump +#define highp +#else +#if defined(USE_HIGHP_PRECISION) +precision highp float; +precision highp int; +#else +precision mediump float; +precision mediump int; +#endif +#endif -uniform highp sampler2D source_auto_exposure; //texunit:1 -uniform highp float auto_exposure_grey; +#include "stdlib.glsl" -#endif +varying vec2 uv_interp; +/* clang-format on */ -#if defined(USE_GLOW_LEVEL1) || defined(USE_GLOW_LEVEL2) || defined(USE_GLOW_LEVEL3) || defined(USE_GLOW_LEVEL4) || defined(USE_GLOW_LEVEL5) || defined(USE_GLOW_LEVEL6) || defined(USE_GLOW_LEVEL7) +uniform highp sampler2D source; //texunit:0 -uniform highp sampler2D source_glow; //texunit:2 +#if defined(USE_GLOW_LEVEL1) || defined(USE_GLOW_LEVEL2) || defined(USE_GLOW_LEVEL3) || defined(USE_GLOW_LEVEL4) || defined(USE_GLOW_LEVEL5) || defined(USE_GLOW_LEVEL6) || defined(USE_GLOW_LEVEL7) +#define USING_GLOW // only use glow when at least one glow level is selected + +#ifdef USE_MULTI_TEXTURE_GLOW +uniform highp sampler2D source_glow1; //texunit:1 +uniform highp sampler2D source_glow2; //texunit:2 +uniform highp sampler2D source_glow3; //texunit:3 +uniform highp sampler2D source_glow4; //texunit:4 +uniform highp sampler2D source_glow5; //texunit:5 +uniform highp sampler2D source_glow6; //texunit:6 +uniform highp sampler2D source_glow7; //texunit:7 +#else +uniform highp sampler2D source_glow; //texunit:1 +#endif uniform highp float glow_intensity; - #endif #ifdef USE_BCS - uniform vec3 bcs; - #endif #ifdef USE_COLOR_CORRECTION - -uniform sampler2D color_correction; //texunit:3 - +uniform sampler2D color_correction; //texunit:2 #endif -layout(location = 0) out vec4 frag_color; - +#ifdef GL_EXT_gpu_shader4 #ifdef USE_GLOW_FILTER_BICUBIC - // w0, w1, w2, and w3 are the four cubic B-spline basis functions float w0(float a) { return (1.0 / 6.0) * (a * (a * (-a + 3.0) - 3.0) + 1.0); @@ -101,8 +138,10 @@ uniform ivec2 glow_texture_size; vec4 texture2D_bicubic(sampler2D tex, vec2 uv, int p_lod) { float lod = float(p_lod); vec2 tex_size = vec2(glow_texture_size >> p_lod); - vec2 pixel_size = 1.0 / tex_size; - uv = uv * tex_size + 0.5; + vec2 pixel_size = vec2(1.0) / tex_size; + + uv = uv * tex_size + vec2(0.5); + vec2 iuv = floor(uv); vec2 fuv = fract(uv); @@ -113,73 +152,97 @@ vec4 texture2D_bicubic(sampler2D tex, vec2 uv, int p_lod) { float h0y = h0(fuv.y); float h1y = h1(fuv.y); - vec2 p0 = (vec2(iuv.x + h0x, iuv.y + h0y) - 0.5) * pixel_size; - vec2 p1 = (vec2(iuv.x + h1x, iuv.y + h0y) - 0.5) * pixel_size; - vec2 p2 = (vec2(iuv.x + h0x, iuv.y + h1y) - 0.5) * pixel_size; - vec2 p3 = (vec2(iuv.x + h1x, iuv.y + h1y) - 0.5) * pixel_size; + vec2 p0 = (vec2(iuv.x + h0x, iuv.y + h0y) - vec2(0.5)) * pixel_size; + vec2 p1 = (vec2(iuv.x + h1x, iuv.y + h0y) - vec2(0.5)) * pixel_size; + vec2 p2 = (vec2(iuv.x + h0x, iuv.y + h1y) - vec2(0.5)) * pixel_size; + vec2 p3 = (vec2(iuv.x + h1x, iuv.y + h1y) - vec2(0.5)) * pixel_size; - return (g0(fuv.y) * (g0x * textureLod(tex, p0, lod) + g1x * textureLod(tex, p1, lod))) + - (g1(fuv.y) * (g0x * textureLod(tex, p2, lod) + g1x * textureLod(tex, p3, lod))); + return (g0(fuv.y) * (g0x * texture2DLod(tex, p0, lod) + g1x * texture2DLod(tex, p1, lod))) + + (g1(fuv.y) * (g0x * texture2DLod(tex, p2, lod) + g1x * texture2DLod(tex, p3, lod))); } #define GLOW_TEXTURE_SAMPLE(m_tex, m_uv, m_lod) texture2D_bicubic(m_tex, m_uv, m_lod) +#else //!USE_GLOW_FILTER_BICUBIC +#define GLOW_TEXTURE_SAMPLE(m_tex, m_uv, m_lod) texture2DLod(m_tex, m_uv, float(m_lod)) +#endif //USE_GLOW_FILTER_BICUBIC -#else +#else //!GL_EXT_gpu_shader4 +#define GLOW_TEXTURE_SAMPLE(m_tex, m_uv, m_lod) texture2DLod(m_tex, m_uv, float(m_lod)) +#endif //GL_EXT_gpu_shader4 -#define GLOW_TEXTURE_SAMPLE(m_tex, m_uv, m_lod) textureLod(m_tex, m_uv, float(m_lod)) +vec3 apply_glow(vec3 color, vec3 glow) { // apply glow using the selected blending mode +#ifdef USE_GLOW_REPLACE + color = glow; +#endif +#ifdef USE_GLOW_SCREEN + color = max((color + glow) - (color * glow), vec3(0.0)); #endif -vec3 tonemap_filmic(vec3 color, float white) { +#ifdef USE_GLOW_SOFTLIGHT + glow = glow * vec3(0.5) + vec3(0.5); - float A = 0.15; - float B = 0.50; - float C = 0.10; - float D = 0.20; - float E = 0.02; - float F = 0.30; - float W = 11.2; + color.r = (glow.r <= 0.5) ? (color.r - (1.0 - 2.0 * glow.r) * color.r * (1.0 - color.r)) : (((glow.r > 0.5) && (color.r <= 0.25)) ? (color.r + (2.0 * glow.r - 1.0) * (4.0 * color.r * (4.0 * color.r + 1.0) * (color.r - 1.0) + 7.0 * color.r)) : (color.r + (2.0 * glow.r - 1.0) * (sqrt(color.r) - color.r))); + color.g = (glow.g <= 0.5) ? (color.g - (1.0 - 2.0 * glow.g) * color.g * (1.0 - color.g)) : (((glow.g > 0.5) && (color.g <= 0.25)) ? (color.g + (2.0 * glow.g - 1.0) * (4.0 * color.g * (4.0 * color.g + 1.0) * (color.g - 1.0) + 7.0 * color.g)) : (color.g + (2.0 * glow.g - 1.0) * (sqrt(color.g) - color.g))); + color.b = (glow.b <= 0.5) ? (color.b - (1.0 - 2.0 * glow.b) * color.b * (1.0 - color.b)) : (((glow.b > 0.5) && (color.b <= 0.25)) ? (color.b + (2.0 * glow.b - 1.0) * (4.0 * color.b * (4.0 * color.b + 1.0) * (color.b - 1.0) + 7.0 * color.b)) : (color.b + (2.0 * glow.b - 1.0) * (sqrt(color.b) - color.b))); +#endif - vec3 coltn = ((color * (A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F; - float whitetn = ((white * (A * white + C * B) + D * E) / (white * (A * white + B) + D * F)) - E / F; +#if !defined(USE_GLOW_SCREEN) && !defined(USE_GLOW_SOFTLIGHT) && !defined(USE_GLOW_REPLACE) // no other selected -> additive + color += glow; +#endif - return coltn / whitetn; + return color; } -vec3 tonemap_aces(vec3 color) { - float a = 2.51f; - float b = 0.03f; - float c = 2.43f; - float d = 0.59f; - float e = 0.14f; - return color = clamp((color * (a * color + b)) / (color * (c * color + d) + e), vec3(0.0), vec3(1.0)); +vec3 apply_bcs(vec3 color, vec3 bcs) { + color = mix(vec3(0.0), color, bcs.x); + color = mix(vec3(0.5), color, bcs.y); + color = mix(vec3(dot(vec3(1.0), color) * 0.33333), color, bcs.z); + + return color; } -vec3 tonemap_reindhart(vec3 color, float white) { +vec3 apply_color_correction(vec3 color, sampler2D correction_tex) { + color.r = texture2D(correction_tex, vec2(color.r, 0.0)).r; + color.g = texture2D(correction_tex, vec2(color.g, 0.0)).g; + color.b = texture2D(correction_tex, vec2(color.b, 0.0)).b; - return (color * (1.0 + (color / (white)))) / (1.0 + color); + return color; } void main() { + vec3 color = texture2DLod(source, uv_interp, 0.0).rgb; - vec4 color = textureLod(source, uv_interp, 0.0); + // Glow -#ifdef USE_AUTO_EXPOSURE - - color /= texelFetch(source_auto_exposure, ivec2(0, 0), 0).r / auto_exposure_grey; +#ifdef USING_GLOW + vec3 glow = vec3(0.0); +#ifdef USE_MULTI_TEXTURE_GLOW +#ifdef USE_GLOW_LEVEL1 + glow += GLOW_TEXTURE_SAMPLE(source_glow1, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL2 + glow += GLOW_TEXTURE_SAMPLE(source_glow2, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL3 + glow += GLOW_TEXTURE_SAMPLE(source_glow3, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL4 + glow += GLOW_TEXTURE_SAMPLE(source_glow4, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL5 + glow += GLOW_TEXTURE_SAMPLE(source_glow5, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL6 + glow += GLOW_TEXTURE_SAMPLE(source_glow6, uv_interp, 0).rgb; +#ifdef USE_GLOW_LEVEL7 + glow += GLOW_TEXTURE_SAMPLE(source_glow7, uv_interp, 0).rgb; +#endif +#endif +#endif +#endif +#endif #endif - - color *= exposure; - -#if defined(USE_GLOW_LEVEL1) || defined(USE_GLOW_LEVEL2) || defined(USE_GLOW_LEVEL3) || defined(USE_GLOW_LEVEL4) || defined(USE_GLOW_LEVEL5) || defined(USE_GLOW_LEVEL6) || defined(USE_GLOW_LEVEL7) -#define USING_GLOW #endif -#if defined(USING_GLOW) - vec3 glow = vec3(0.0); +#else #ifdef USE_GLOW_LEVEL1 - glow += GLOW_TEXTURE_SAMPLE(source_glow, uv_interp, 1).rgb; #endif @@ -206,100 +269,21 @@ void main() { #ifdef USE_GLOW_LEVEL7 glow += GLOW_TEXTURE_SAMPLE(source_glow, uv_interp, 7).rgb; #endif +#endif //USE_MULTI_TEXTURE_GLOW glow *= glow_intensity; - -#endif - -#ifdef USE_REINDHART_TONEMAPPER - - color.rgb = tonemap_reindhart(color.rgb, white); - -#if defined(USING_GLOW) - glow = tonemap_reindhart(glow, white); -#endif - + color = apply_glow(color, glow); #endif -#ifdef USE_FILMIC_TONEMAPPER - - color.rgb = tonemap_filmic(color.rgb, white); - -#if defined(USING_GLOW) - glow = tonemap_filmic(glow, white); -#endif - -#endif - -#ifdef USE_ACES_TONEMAPPER - - color.rgb = tonemap_aces(color.rgb); - -#if defined(USING_GLOW) - glow = tonemap_aces(glow); -#endif - -#endif - - //regular Linear -> SRGB conversion - vec3 a = vec3(0.055); - color.rgb = mix((vec3(1.0) + a) * pow(color.rgb, vec3(1.0 / 2.4)) - a, 12.92 * color.rgb, lessThan(color.rgb, vec3(0.0031308))); - -#if defined(USING_GLOW) - glow = mix((vec3(1.0) + a) * pow(glow, vec3(1.0 / 2.4)) - a, 12.92 * glow, lessThan(glow, vec3(0.0031308))); -#endif - - //glow needs to be added in SRGB space (together with image space effects) - - color.rgb = clamp(color.rgb, 0.0, 1.0); - -#if defined(USING_GLOW) - glow = clamp(glow, 0.0, 1.0); -#endif - -#ifdef USE_GLOW_REPLACE - - color.rgb = glow; - -#endif - -#ifdef USE_GLOW_SCREEN - - color.rgb = max((color.rgb + glow) - (color.rgb * glow), vec3(0.0)); - -#endif - -#ifdef USE_GLOW_SOFTLIGHT - - { - - glow = (glow * 0.5) + 0.5; - color.r = (glow.r <= 0.5) ? (color.r - (1.0 - 2.0 * glow.r) * color.r * (1.0 - color.r)) : (((glow.r > 0.5) && (color.r <= 0.25)) ? (color.r + (2.0 * glow.r - 1.0) * (4.0 * color.r * (4.0 * color.r + 1.0) * (color.r - 1.0) + 7.0 * color.r)) : (color.r + (2.0 * glow.r - 1.0) * (sqrt(color.r) - color.r))); - color.g = (glow.g <= 0.5) ? (color.g - (1.0 - 2.0 * glow.g) * color.g * (1.0 - color.g)) : (((glow.g > 0.5) && (color.g <= 0.25)) ? (color.g + (2.0 * glow.g - 1.0) * (4.0 * color.g * (4.0 * color.g + 1.0) * (color.g - 1.0) + 7.0 * color.g)) : (color.g + (2.0 * glow.g - 1.0) * (sqrt(color.g) - color.g))); - color.b = (glow.b <= 0.5) ? (color.b - (1.0 - 2.0 * glow.b) * color.b * (1.0 - color.b)) : (((glow.b > 0.5) && (color.b <= 0.25)) ? (color.b + (2.0 * glow.b - 1.0) * (4.0 * color.b * (4.0 * color.b + 1.0) * (color.b - 1.0) + 7.0 * color.b)) : (color.b + (2.0 * glow.b - 1.0) * (sqrt(color.b) - color.b))); - } - -#endif - -#if defined(USING_GLOW) && !defined(USE_GLOW_SCREEN) && !defined(USE_GLOW_SOFTLIGHT) && !defined(USE_GLOW_REPLACE) - //additive - color.rgb += glow; -#endif + // Additional effects #ifdef USE_BCS - - color.rgb = mix(vec3(0.0), color.rgb, bcs.x); - color.rgb = mix(vec3(0.5), color.rgb, bcs.y); - color.rgb = mix(vec3(dot(vec3(1.0), color.rgb) * 0.33333), color.rgb, bcs.z); - + color = apply_bcs(color, bcs); #endif #ifdef USE_COLOR_CORRECTION - - color.r = texture(color_correction, vec2(color.r, 0.0)).r; - color.g = texture(color_correction, vec2(color.g, 0.0)).g; - color.b = texture(color_correction, vec2(color.b, 0.0)).b; + color = apply_color_correction(color, color_correction); #endif - frag_color = vec4(color.rgb, 1.0); + gl_FragColor = vec4(color, 1.0); } diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index edffe852a2..e09ba755ea 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -548,8 +548,10 @@ void RasterizerCanvasGLES3::_canvas_item_render_commands(Item *p_item, Item *cur if (line->width <= 1) { Vector2 verts[2] = { - Vector2(line->from.x, line->from.y), - Vector2(line->to.x, line->to.y) + // Offset the line slightly to make sure we always draw the pixel at the from coordinate. + // Without this, corners of rectangles might be missing a pixel. (See diamond exit rule and #32657) + Vector2(Math::floor(line->from.x) + 0.5, Math::floor(line->from.y) + 0.5), + Vector2(Math::floor(line->to.x) + 0.5, Math::floor(line->to.y) + 0.5) }; #ifdef GLES_OVER_GL diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp index 1472954ebc..519fdf2b3b 100644 --- a/drivers/gles3/rasterizer_scene_gles3.cpp +++ b/drivers/gles3/rasterizer_scene_gles3.cpp @@ -1093,7 +1093,7 @@ void RasterizerSceneGLES3::gi_probe_instance_set_bounds(RID p_probe, const Vecto //////////////////////////// //////////////////////////// -bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_material, bool p_alpha_pass) { +bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_material, bool p_depth_pass, bool p_alpha_pass) { /* this is handled outside if (p_material->shader->spatial.cull_mode == RasterizerStorageGLES3::Shader::Spatial::CULL_MODE_DISABLED) { @@ -1121,7 +1121,7 @@ bool RasterizerSceneGLES3::_setup_material(RasterizerStorageGLES3::Material *p_m if (state.current_depth_draw != p_material->shader->spatial.depth_draw_mode) { switch (p_material->shader->spatial.depth_draw_mode) { case RasterizerStorageGLES3::Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS: { - glDepthMask(GL_TRUE); + glDepthMask(p_depth_pass); // If some transparent objects write to depth, we need to re-copy depth texture when we need it if (p_alpha_pass && !state.used_depth_prepass) { state.prepared_depth_texture = false; @@ -2241,7 +2241,7 @@ void RasterizerSceneGLES3::_render_list(RenderList::Element **p_elements, int p_ storage->info.render.material_switch_count++; - rebind = _setup_material(material, p_alpha_pass); + rebind = _setup_material(material, use_opaque_prepass, p_alpha_pass); if (rebind) { storage->info.render.shader_rebind_count++; @@ -2260,11 +2260,6 @@ void RasterizerSceneGLES3::_render_list(RenderList::Element **p_elements, int p_ _set_cull(e->sort_key & RenderList::SORT_KEY_MIRROR_FLAG, e->sort_key & RenderList::SORT_KEY_CULL_DISABLED_FLAG, p_reverse_cull); - if (skeleton) { - state.scene_shader.set_uniform(SceneShaderGLES3::SKELETON_TRANSFORM, skeleton->world_transform); - state.scene_shader.set_uniform(SceneShaderGLES3::SKELETON_IN_WORLD_COORDS, skeleton->use_world_transform); - } - state.scene_shader.set_uniform(SceneShaderGLES3::WORLD_TRANSFORM, e->instance->transform); _render_geometry(e); @@ -4335,6 +4330,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const if (storage->frame.current_rt->buffers.active) { current_fbo = storage->frame.current_rt->buffers.fbo; } else { + if (storage->frame.current_rt->effects.mip_maps[0].sizes.size() == 0) { + ERR_PRINT_ONCE("Can't use canvas background mode in a render target configured without sampling"); + return; + } current_fbo = storage->frame.current_rt->effects.mip_maps[0].sizes[0].fbo; } diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h index 3d09adcfeb..e6d2449653 100644 --- a/drivers/gles3/rasterizer_scene_gles3.h +++ b/drivers/gles3/rasterizer_scene_gles3.h @@ -832,7 +832,7 @@ public: _FORCE_INLINE_ void _set_cull(bool p_front, bool p_disabled, bool p_reverse_cull); - _FORCE_INLINE_ bool _setup_material(RasterizerStorageGLES3::Material *p_material, bool p_alpha_pass); + _FORCE_INLINE_ bool _setup_material(RasterizerStorageGLES3::Material *p_material, bool p_depth_pass, bool p_alpha_pass); _FORCE_INLINE_ void _setup_geometry(RenderList::Element *e, const Transform &p_view_transform); _FORCE_INLINE_ void _render_geometry(RenderList::Element *e); _FORCE_INLINE_ void _setup_light(RenderList::Element *e, const Transform &p_view_transform); diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 5f4acbc2de..f94020b918 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -135,13 +135,13 @@ void glTexStorage2DCustom(GLenum target, GLsizei levels, GLenum internalformat, GLuint RasterizerStorageGLES3::system_fbo = 0; -Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &srgb) const { +Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &r_srgb, bool p_force_decompress) const { r_compressed = false; r_gl_format = 0; r_real_format = p_format; Ref<Image> image = p_image; - srgb = false; + r_srgb = false; bool need_decompress = false; @@ -188,7 +188,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_internal_format = (config.srgb_decode_supported || (p_flags & VS::TEXTURE_FLAG_CONVERT_TO_LINEAR)) ? GL_SRGB8 : GL_RGB8; r_gl_format = GL_RGB; r_gl_type = GL_UNSIGNED_BYTE; - srgb = true; + r_srgb = true; } break; case Image::FORMAT_RGBA8: { @@ -196,7 +196,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_internal_format = (config.srgb_decode_supported || (p_flags & VS::TEXTURE_FLAG_CONVERT_TO_LINEAR)) ? GL_SRGB8_ALPHA8 : GL_RGBA8; r_gl_type = GL_UNSIGNED_BYTE; - srgb = true; + r_srgb = true; } break; case Image::FORMAT_RGBA4444: { @@ -278,7 +278,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -294,7 +294,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -310,7 +310,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -355,7 +355,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -395,7 +395,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -410,7 +410,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -426,7 +426,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -442,7 +442,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -527,7 +527,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGB; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -542,7 +542,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -557,7 +557,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_format = GL_RGBA; r_gl_type = GL_UNSIGNED_BYTE; r_compressed = true; - srgb = true; + r_srgb = true; } else { @@ -570,7 +570,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ } } - if (need_decompress) { + if (need_decompress || p_force_decompress) { if (!image.is_null()) { image = image->duplicate(); @@ -584,7 +584,7 @@ Ref<Image> RasterizerStorageGLES3::_get_gl_image_and_format(const Ref<Image> &p_ r_gl_type = GL_UNSIGNED_BYTE; r_compressed = false; r_real_format = Image::FORMAT_RGBA8; - srgb = true; + r_srgb = true; return image; } @@ -677,8 +677,22 @@ void RasterizerStorageGLES3::texture_allocate(RID p_texture, int p_width, int p_ } break; } + texture->is_npot_repeat_mipmap = false; +#ifdef JAVASCRIPT_ENABLED + // WebGL 2.0 on browsers does not seem to properly support compressed non power-of-two (NPOT) + // textures with repeat/mipmaps, even though NPOT textures should be supported as per the spec. + // Force decompressing them to work it around on WebGL 2.0 at a performance cost (GH-33058). + int po2_width = next_power_of_2(p_width); + int po2_height = next_power_of_2(p_height); + bool is_po2 = p_width == po2_width && p_height == po2_height; + + if (!is_po2 && (p_flags & VS::TEXTURE_FLAG_REPEAT || p_flags & VS::TEXTURE_FLAG_MIPMAPS)) { + texture->is_npot_repeat_mipmap = true; + } +#endif // JAVASCRIPT_ENABLED + Image::Format real_format; - _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, format, internal_format, type, compressed, srgb); + _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, format, internal_format, type, compressed, srgb, texture->is_npot_repeat_mipmap); texture->alloc_width = texture->width; texture->alloc_height = texture->height; @@ -753,13 +767,9 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Ref<Image> &p if (config.keep_original_textures && !(texture->flags & VS::TEXTURE_FLAG_USED_FOR_STREAMING)) { texture->images.write[p_layer] = p_image; } -#ifndef GLES_OVER_GL - if (p_image->is_compressed() && p_image->has_mipmaps() && !p_image->is_size_po2()) { - ERR_PRINTS("Texuture '" + texture->path + "' is compressed, has mipmaps but is not of powerf-of-2 size. This does not work on OpenGL ES 3.0."); - } -#endif + Image::Format real_format; - Ref<Image> img = _get_gl_image_and_format(p_image, p_image->get_format(), texture->flags, real_format, format, internal_format, type, compressed, srgb); + Ref<Image> img = _get_gl_image_and_format(p_image, p_image->get_format(), texture->flags, real_format, format, internal_format, type, compressed, srgb, texture->is_npot_repeat_mipmap); if (config.shrink_textures_x2 && (p_image->has_mipmaps() || !p_image->is_compressed()) && !(texture->flags & VS::TEXTURE_FLAG_USED_FOR_STREAMING)) { @@ -795,6 +805,7 @@ void RasterizerStorageGLES3::texture_set_data(RID p_texture, const Ref<Image> &p texture->data_size = img->get_data().size(); PoolVector<uint8_t>::Read read = img->get_data().read(); + ERR_FAIL_COND(!read.ptr()); glActiveTexture(GL_TEXTURE0); glBindTexture(texture->target, texture->tex_id); @@ -992,7 +1003,7 @@ void RasterizerStorageGLES3::texture_set_data_partial(RID p_texture, const Ref<I } Image::Format real_format; - Ref<Image> img = _get_gl_image_and_format(p_sub_img, p_sub_img->get_format(), texture->flags, real_format, format, internal_format, type, compressed, srgb); + Ref<Image> img = _get_gl_image_and_format(p_sub_img, p_sub_img->get_format(), texture->flags, real_format, format, internal_format, type, compressed, srgb, texture->is_npot_repeat_mipmap); GLenum blit_target = GL_TEXTURE_2D; @@ -1091,7 +1102,8 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) gl_internal_format, gl_type, compressed, - srgb); + srgb, + texture->is_npot_repeat_mipmap); PoolVector<uint8_t> data; @@ -1197,7 +1209,7 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) GLenum gl_type; bool compressed; bool srgb; - _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb); + _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb, false); PoolVector<uint8_t> data; @@ -1267,7 +1279,7 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer) GLenum gl_type; bool compressed; bool srgb; - _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb); + _get_gl_image_and_format(Ref<Image>(), texture->format, texture->flags, real_format, gl_format, gl_internal_format, gl_type, compressed, srgb, texture->is_npot_repeat_mipmap); PoolVector<uint8_t> data; @@ -2168,8 +2180,9 @@ void RasterizerStorageGLES3::_update_shader(Shader *p_shader) const { } Error err = shaders.compiler.compile(p_shader->mode, p_shader->code, actions, p_shader->path, gen_code); - - ERR_FAIL_COND(err != OK); + if (err != OK) { + return; + } p_shader->shader->set_custom_shader_code(p_shader->custom_code_id, gen_code.vertex, gen_code.vertex_global, gen_code.fragment, gen_code.light, gen_code.fragment_global, gen_code.uniforms, gen_code.texture_uniforms, gen_code.defines); @@ -2955,7 +2968,9 @@ _FORCE_INLINE_ static void _fill_std140_ubo_empty(ShaderLanguage::DataType type, case ShaderLanguage::TYPE_BVEC3: case ShaderLanguage::TYPE_IVEC3: case ShaderLanguage::TYPE_UVEC3: - case ShaderLanguage::TYPE_VEC3: + case ShaderLanguage::TYPE_VEC3: { + zeromem(data, 12); + } break; case ShaderLanguage::TYPE_BVEC4: case ShaderLanguage::TYPE_IVEC4: case ShaderLanguage::TYPE_UVEC4: @@ -4715,6 +4730,7 @@ void RasterizerStorageGLES3::multimesh_set_as_bulk_array(RID p_multimesh, const MultiMesh *multimesh = multimesh_owner.getornull(p_multimesh); ERR_FAIL_COND(!multimesh); + ERR_FAIL_COND(!multimesh->data.ptr()); int dsize = multimesh->data.size(); @@ -4851,15 +4867,16 @@ RID RasterizerStorageGLES3::immediate_create() { return immediate_owner.make_rid(im); } -void RasterizerStorageGLES3::immediate_begin(RID p_immediate, VS::PrimitiveType p_rimitive, RID p_texture) { +void RasterizerStorageGLES3::immediate_begin(RID p_immediate, VS::PrimitiveType p_primitive, RID p_texture) { + ERR_FAIL_INDEX(p_primitive, (int)VS::PRIMITIVE_MAX); Immediate *im = immediate_owner.get(p_immediate); ERR_FAIL_COND(!im); ERR_FAIL_COND(im->building); Immediate::Chunk ic; ic.texture = p_texture; - ic.primitive = p_rimitive; + ic.primitive = p_primitive; im->chunks.push_back(ic); im->mask = 0; im->building = true; @@ -5160,20 +5177,6 @@ void RasterizerStorageGLES3::skeleton_set_base_transform_2d(RID p_skeleton, cons skeleton->base_transform_2d = p_base_transform; } -void RasterizerStorageGLES3::skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_world_transform) { - - Skeleton *skeleton = skeleton_owner.getornull(p_skeleton); - - ERR_FAIL_COND(skeleton->use_2d); - - skeleton->world_transform = p_world_transform; - skeleton->use_world_transform = p_enable; - - if (!skeleton->update_list.in_list()) { - skeleton_update_list.add(&skeleton->update_list); - } -} - void RasterizerStorageGLES3::update_dirty_skeletons() { glActiveTexture(GL_TEXTURE0); diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h index 0a7e47e304..3b1021d0e1 100644 --- a/drivers/gles3/rasterizer_storage_gles3.h +++ b/drivers/gles3/rasterizer_storage_gles3.h @@ -266,6 +266,8 @@ public: int mipmaps; + bool is_npot_repeat_mipmap; + bool active; GLuint tex_id; @@ -342,7 +344,7 @@ public: mutable RID_Owner<Texture> texture_owner; - Ref<Image> _get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &srgb) const; + Ref<Image> _get_gl_image_and_format(const Ref<Image> &p_image, Image::Format p_format, uint32_t p_flags, Image::Format &r_real_format, GLenum &r_gl_format, GLenum &r_gl_internal_format, GLenum &r_gl_type, bool &r_compressed, bool &r_srgb, bool p_force_decompress) const; virtual RID texture_create(); virtual void texture_allocate(RID p_texture, int p_width, int p_height, int p_depth_3d, Image::Format p_format, VS::TextureType p_type, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT); @@ -869,7 +871,7 @@ public: mutable RID_Owner<Immediate> immediate_owner; virtual RID immediate_create(); - virtual void immediate_begin(RID p_immediate, VS::PrimitiveType p_rimitive, RID p_texture = RID()); + virtual void immediate_begin(RID p_immediate, VS::PrimitiveType p_primitive, RID p_texture = RID()); virtual void immediate_vertex(RID p_immediate, const Vector3 &p_vertex); virtual void immediate_normal(RID p_immediate, const Vector3 &p_normal); virtual void immediate_tangent(RID p_immediate, const Plane &p_tangent); @@ -892,15 +894,12 @@ public: SelfList<Skeleton> update_list; Set<RasterizerScene::InstanceBase *> instances; //instances using skeleton Transform2D base_transform_2d; - bool use_world_transform; - Transform world_transform; Skeleton() : use_2d(false), size(0), texture(0), - update_list(this), - use_world_transform(false) { + update_list(this) { } }; @@ -918,7 +917,6 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform); virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const; virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform); - virtual void skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_world_transform); /* Light API */ diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp index 0121d88f4d..7499962da3 100644 --- a/drivers/gles3/shader_compiler_gles3.cpp +++ b/drivers/gles3/shader_compiler_gles3.cpp @@ -467,6 +467,11 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener vcode += _prestr(E->get().precision); vcode += _typestr(E->get().type); vcode += " " + _mkid(E->key()); + if (E->get().array_size > 0) { + vcode += "["; + vcode += itos(E->get().array_size); + vcode += "]"; + } vcode += ";\n"; r_gen_code.vertex_global += interp_mode + "out " + vcode; r_gen_code.fragment_global += interp_mode + "in " + vcode; @@ -936,6 +941,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_CANVAS_ITEM].renames["LIGHT_UV"] = "light_uv"; actions[VS::SHADER_CANVAS_ITEM].renames["LIGHT"] = "light"; actions[VS::SHADER_CANVAS_ITEM].renames["SHADOW_COLOR"] = "shadow_color"; + actions[VS::SHADER_CANVAS_ITEM].renames["SHADOW_VEC"] = "shadow_vec"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["COLOR"] = "#define COLOR_USED\n"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["SCREEN_TEXTURE"] = "#define SCREEN_TEXTURE_USED\n"; @@ -944,6 +950,7 @@ ShaderCompilerGLES3::ShaderCompilerGLES3() { actions[VS::SHADER_CANVAS_ITEM].usage_defines["NORMAL"] = "#define NORMAL_USED\n"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["NORMALMAP"] = "#define NORMALMAP_USED\n"; actions[VS::SHADER_CANVAS_ITEM].usage_defines["LIGHT"] = "#define USE_LIGHT_SHADER_CODE\n"; + actions[VS::SHADER_CANVAS_ITEM].usage_defines["SHADOW_VEC"] = "#define SHADOW_VEC_USED\n"; actions[VS::SHADER_CANVAS_ITEM].render_mode_defines["skip_vertex_transform"] = "#define SKIP_TRANSFORM_USED\n"; /** SPATIAL SHADER **/ diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 10c8764b8e..7255b0425c 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -345,6 +345,7 @@ void light_compute( inout vec4 light_color, vec2 light_uv, inout vec4 shadow_color, + inout vec2 shadow_vec, vec3 normal, vec2 uv, #if defined(SCREEN_UV_USED) @@ -379,14 +380,16 @@ uniform bool np_draw_center; // left top right bottom in pixel coordinates uniform vec4 np_margins; -float map_ninepatch_axis(float pixel, float draw_size, float tex_pixel_size, float margin_begin, float margin_end, int np_repeat, inout int draw_center) { +float map_ninepatch_axis(float pixel, float draw_size, float tex_pixel_size, float margin_begin, float margin_end, float s_ratio, int np_repeat, inout int draw_center) { float tex_size = 1.0 / tex_pixel_size; - if (pixel < margin_begin) { - return pixel * tex_pixel_size; - } else if (pixel >= draw_size - margin_end) { - return (tex_size - (draw_size - pixel)) * tex_pixel_size; + float screen_margin_begin = margin_begin / s_ratio; + float screen_margin_end = margin_end / s_ratio; + if (pixel < screen_margin_begin) { + return pixel * s_ratio * tex_pixel_size; + } else if (pixel >= draw_size - screen_margin_end) { + return (tex_size - (draw_size - pixel) * s_ratio) * tex_pixel_size; } else { if (!np_draw_center) { draw_center--; @@ -394,22 +397,22 @@ float map_ninepatch_axis(float pixel, float draw_size, float tex_pixel_size, flo if (np_repeat == 0) { //stretch //convert to ratio - float ratio = (pixel - margin_begin) / (draw_size - margin_begin - margin_end); + float ratio = (pixel - screen_margin_begin) / (draw_size - screen_margin_begin - screen_margin_end); //scale to source texture return (margin_begin + ratio * (tex_size - margin_begin - margin_end)) * tex_pixel_size; } else if (np_repeat == 1) { //tile //convert to ratio - float ofs = mod((pixel - margin_begin), tex_size - margin_begin - margin_end); + float ofs = mod((pixel - screen_margin_begin), tex_size - margin_begin - margin_end); //scale to source texture return (margin_begin + ofs) * tex_pixel_size; } else if (np_repeat == 2) { //tile fit //convert to ratio - float src_area = draw_size - margin_begin - margin_end; + float src_area = draw_size - screen_margin_begin - screen_margin_end; float dst_area = tex_size - margin_begin - margin_end; float scale = max(1.0, floor(src_area / max(dst_area, 0.0000001) + 0.5)); //convert to ratio - float ratio = (pixel - margin_begin) / src_area; + float ratio = (pixel - screen_margin_begin) / src_area; ratio = mod(ratio * scale, 1.0); return (margin_begin + ratio * dst_area) * tex_pixel_size; } @@ -431,9 +434,11 @@ void main() { #ifdef USE_NINEPATCH int draw_center = 2; + float s_ratio = max((1.0 / color_texpixel_size.x) / abs(dst_rect.z), (1.0 / color_texpixel_size.y) / abs(dst_rect.w)); + s_ratio = max(1.0, s_ratio); uv = vec2( - map_ninepatch_axis(pixel_size_interp.x, abs(dst_rect.z), color_texpixel_size.x, np_margins.x, np_margins.z, np_repeat_h, draw_center), - map_ninepatch_axis(pixel_size_interp.y, abs(dst_rect.w), color_texpixel_size.y, np_margins.y, np_margins.w, np_repeat_v, draw_center)); + map_ninepatch_axis(pixel_size_interp.x, abs(dst_rect.z), color_texpixel_size.x, np_margins.x, np_margins.z, s_ratio, np_repeat_h, draw_center), + map_ninepatch_axis(pixel_size_interp.y, abs(dst_rect.w), color_texpixel_size.y, np_margins.y, np_margins.w, s_ratio, np_repeat_v, draw_center)); if (draw_center == 0) { color.a = 0.0; @@ -512,6 +517,7 @@ FRAGMENT_SHADER_CODE #ifdef USE_LIGHTING vec2 light_vec = transformed_light_uv; + vec2 shadow_vec = transformed_light_uv; if (normal_used) { normal.xy = mat2(local_rot.xy, local_rot.zw) * normal.xy; @@ -539,6 +545,7 @@ FRAGMENT_SHADER_CODE real_light_color, light_uv, real_light_shadow_color, + shadow_vec, normal, uv, #if defined(SCREEN_UV_USED) @@ -557,11 +564,16 @@ FRAGMENT_SHADER_CODE color *= light; #ifdef USE_SHADOWS - // Reset light_vec to compute shadows, the shadow map is created from the light origin, so it only - // makes sense to compute shadows from there. - light_vec = light_uv_interp.zw; - - float angle_to_light = -atan(light_vec.x, light_vec.y); +#ifdef SHADOW_VEC_USED + mat3 inverse_light_matrix = mat3(light_matrix); + inverse_light_matrix[0] = normalize(inverse_light_matrix[0]); + inverse_light_matrix[1] = normalize(inverse_light_matrix[1]); + inverse_light_matrix[2] = normalize(inverse_light_matrix[2]); + shadow_vec = (mat3(inverse_light_matrix) * vec3(shadow_vec, 0.0)).xy; +#else + shadow_vec = light_uv_interp.zw; +#endif + float angle_to_light = -atan(shadow_vec.x, shadow_vec.y); float PI = 3.14159265358979323846264; /*int i = int(mod(floor((angle_to_light+7.0*PI/6.0)/(4.0*PI/6.0))+1.0, 3.0)); // +1 pq os indices estao em ordem 2,0,1 nos arrays float ang*/ @@ -572,18 +584,18 @@ FRAGMENT_SHADER_CODE vec2 point; float sh; if (abs_angle < 45.0 * PI / 180.0) { - point = light_vec; + point = shadow_vec; sh = 0.0 + (1.0 / 8.0); } else if (abs_angle > 135.0 * PI / 180.0) { - point = -light_vec; + point = -shadow_vec; sh = 0.5 + (1.0 / 8.0); } else if (angle_to_light > 0.0) { - point = vec2(light_vec.y, -light_vec.x); + point = vec2(shadow_vec.y, -shadow_vec.x); sh = 0.25 + (1.0 / 8.0); } else { - point = vec2(-light_vec.y, light_vec.x); + point = vec2(-shadow_vec.y, shadow_vec.x); sh = 0.75 + (1.0 / 8.0); } diff --git a/drivers/gles3/shaders/scene.glsl b/drivers/gles3/shaders/scene.glsl index f08d3f4d23..403de25dd0 100644 --- a/drivers/gles3/shaders/scene.glsl +++ b/drivers/gles3/shaders/scene.glsl @@ -302,8 +302,6 @@ out highp float dp_clip; #ifdef USE_SKELETON uniform highp sampler2D skeleton_texture; // texunit:-1 -uniform highp mat4 skeleton_transform; -uniform bool skeleton_in_world_coords; #endif out highp vec4 position_interp; @@ -432,14 +430,7 @@ void main() { vec4(0.0, 0.0, 0.0, 1.0)) * bone_weights.w; - if (skeleton_in_world_coords) { - highp mat4 bone_matrix = skeleton_transform * (transpose(m) * inverse(skeleton_transform)); - world_matrix = bone_matrix * world_matrix; - - } else { - - world_matrix = world_matrix * transpose(m); - } + world_matrix = world_matrix * transpose(m); } #endif diff --git a/drivers/unix/file_access_unix.cpp b/drivers/unix/file_access_unix.cpp index 071734eb48..e3026f9fd9 100644 --- a/drivers/unix/file_access_unix.cpp +++ b/drivers/unix/file_access_unix.cpp @@ -56,9 +56,15 @@ #define S_ISREG(m) ((m)&S_IFREG) #endif +#ifndef NO_FCNTL +#include <fcntl.h> +#else +#include <sys/ioctl.h> +#endif + void FileAccessUnix::check_errors() const { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); if (feof(f)) { @@ -76,7 +82,7 @@ Error FileAccessUnix::_open(const String &p_path, int p_mode_flags) { path = fix_path(p_path); //printf("opening %ls, %i\n", path.c_str(), Memory::get_static_mem_usage()); - ERR_FAIL_COND_V(f, ERR_ALREADY_IN_USE); + ERR_FAIL_COND_V_MSG(f, ERR_ALREADY_IN_USE, "File is already in use."); const char *mode_string; if (p_mode_flags == READ) @@ -123,11 +129,24 @@ Error FileAccessUnix::_open(const String &p_path, int p_mode_flags) { } break; } return last_error; - } else { - last_error = OK; - flags = p_mode_flags; - return OK; } + + // Set close on exec to avoid leaking it to subprocesses. + int fd = fileno(f); + + if (fd != -1) { +#if defined(NO_FCNTL) + unsigned long par = 0; + ioctl(fd, FIOCLEX, &par); +#else + int opts = fcntl(fd, F_GETFD); + fcntl(fd, F_SETFD, opts | FD_CLOEXEC); +#endif + } + + last_error = OK; + flags = p_mode_flags; + return OK; } void FileAccessUnix::close() { @@ -171,7 +190,7 @@ String FileAccessUnix::get_path_absolute() const { void FileAccessUnix::seek(size_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); last_error = OK; if (fseek(f, p_position, SEEK_SET)) @@ -180,7 +199,7 @@ void FileAccessUnix::seek(size_t p_position) { void FileAccessUnix::seek_end(int64_t p_position) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); if (fseek(f, p_position, SEEK_END)) check_errors(); @@ -188,7 +207,7 @@ void FileAccessUnix::seek_end(int64_t p_position) { size_t FileAccessUnix::get_position() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); long pos = ftell(f); if (pos < 0) { @@ -200,7 +219,7 @@ size_t FileAccessUnix::get_position() const { size_t FileAccessUnix::get_len() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); long pos = ftell(f); ERR_FAIL_COND_V(pos < 0, 0); @@ -219,7 +238,7 @@ bool FileAccessUnix::eof_reached() const { uint8_t FileAccessUnix::get_8() const { - ERR_FAIL_COND_V(!f, 0); + ERR_FAIL_COND_V_MSG(!f, 0, "File must be opened before use."); uint8_t b; if (fread(&b, 1, 1, f) == 0) { check_errors(); @@ -230,7 +249,7 @@ uint8_t FileAccessUnix::get_8() const { int FileAccessUnix::get_buffer(uint8_t *p_dst, int p_length) const { - ERR_FAIL_COND_V(!f, -1); + ERR_FAIL_COND_V_MSG(!f, -1, "File must be opened before use."); int read = fread(p_dst, 1, p_length, f); check_errors(); return read; @@ -243,18 +262,20 @@ Error FileAccessUnix::get_error() const { void FileAccessUnix::flush() { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); fflush(f); } void FileAccessUnix::store_8(uint8_t p_dest) { - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); ERR_FAIL_COND(fwrite(&p_dest, 1, 1, f) != 1); } void FileAccessUnix::store_buffer(const uint8_t *p_src, int p_length) { - ERR_FAIL_COND(!f); + + ERR_FAIL_COND_MSG(!f, "File must be opened before use."); + ERR_FAIL_COND(!p_src); ERR_FAIL_COND((int)fwrite(p_src, 1, p_length, f) != p_length); } diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp index ac7195abc1..cf47cdc7e8 100644 --- a/drivers/unix/ip_unix.cpp +++ b/drivers/unix/ip_unix.cpp @@ -152,7 +152,7 @@ void IP_Unix::get_local_interfaces(Map<String, Interface_Info> *r_interfaces) co Interface_Info info; info.name = name; info.name_friendly = hostname->DisplayName->Data(); - info.index = 0; + info.index = String::num_uint64(0); E = r_interfaces->insert(name, info); ERR_CONTINUE(!E); } diff --git a/drivers/unix/net_socket_posix.cpp b/drivers/unix/net_socket_posix.cpp index 6a57a2e562..5f99a40c79 100644 --- a/drivers/unix/net_socket_posix.cpp +++ b/drivers/unix/net_socket_posix.cpp @@ -30,6 +30,7 @@ #include "net_socket_posix.h" +#ifndef UNIX_SOCKET_UNAVAILABLE #if defined(UNIX_ENABLED) #include <errno.h> @@ -69,6 +70,7 @@ #define SOCK_CBUF(x) x #define SOCK_IOCTL ioctl #define SOCK_CLOSE ::close +#define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::connect(p_sock, p_addr, p_addr_len) /* Windows */ #elif defined(WINDOWS_ENABLED) @@ -82,6 +84,9 @@ #define SOCK_CBUF(x) (const char *)(x) #define SOCK_IOCTL ioctlsocket #define SOCK_CLOSE closesocket +// connect is broken on windows under certain conditions, reasons unknown: +// See https://github.com/godotengine/webrtc-native/issues/6 +#define SOCK_CONNECT(p_sock, p_addr, p_addr_len) ::WSAConnect(p_sock, p_addr, p_addr_len, NULL, NULL, NULL, NULL) // Workaround missing flag in MinGW #if defined(__MINGW32__) && !defined(SIO_UDP_NETRESET) @@ -280,6 +285,21 @@ void NetSocketPosix::_set_socket(SOCKET_TYPE p_sock, IP::Type p_ip_type, bool p_ _sock = p_sock; _ip_type = p_ip_type; _is_stream = p_is_stream; + // Disable descriptor sharing with subprocesses. + _set_close_exec_enabled(true); +} + +void NetSocketPosix::_set_close_exec_enabled(bool p_enabled) { +#ifndef WINDOWS_ENABLED + // Enable close on exec to avoid sharing with subprocesses. Off by default on Windows. +#if defined(NO_FCNTL) + unsigned long par = p_enabled ? 1 : 0; + SOCK_IOCTL(_sock, FIOCLEX, &par); +#else + int opts = fcntl(_sock, F_GETFD); + fcntl(_sock, F_SETFD, opts | FD_CLOEXEC); +#endif +#endif } Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) { @@ -320,6 +340,9 @@ Error NetSocketPosix::open(Type p_sock_type, IP::Type &ip_type) { _is_stream = p_sock_type == TYPE_TCP; + // Disable descriptor sharing with subprocesses. + _set_close_exec_enabled(true); + #if defined(WINDOWS_ENABLED) if (!_is_stream) { // Disable windows feature/bug reporting WSAECONNRESET/WSAENETRESET when @@ -390,7 +413,7 @@ Error NetSocketPosix::connect_to_host(IP_Address p_host, uint16_t p_port) { struct sockaddr_storage addr; size_t addr_size = _set_addr_storage(&addr, p_host, p_port, _ip_type); - if (::connect(_sock, (struct sockaddr *)&addr, addr_size) != 0) { + if (SOCK_CONNECT(_sock, (struct sockaddr *)&addr, addr_size) != 0) { NetError err = _get_socket_error(); @@ -691,3 +714,4 @@ Error NetSocketPosix::join_multicast_group(const IP_Address &p_multi_address, St Error NetSocketPosix::leave_multicast_group(const IP_Address &p_multi_address, String p_if_name) { return _change_multicast_group(p_multi_address, p_if_name, false); } +#endif diff --git a/drivers/unix/net_socket_posix.h b/drivers/unix/net_socket_posix.h index 40406b241a..e549ea1d6a 100644 --- a/drivers/unix/net_socket_posix.h +++ b/drivers/unix/net_socket_posix.h @@ -61,6 +61,7 @@ private: NetError _get_socket_error(); void _set_socket(SOCKET_TYPE p_sock, IP::Type p_ip_type, bool p_is_stream); _FORCE_INLINE_ Error _change_multicast_group(IP_Address p_ip, String p_if_name, bool p_add); + _FORCE_INLINE_ void _set_close_exec_enabled(bool p_enabled); protected: static NetSocket *_create_func(); diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index ab5590dba4..25dee6aedb 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -126,7 +126,9 @@ void OS_Unix::initialize_core() { RWLockDummy::make_default(); #else ThreadPosix::make_default(); +#if !defined(OSX_ENABLED) && !defined(IPHONE_ENABLED) SemaphorePosix::make_default(); +#endif MutexPosix::make_default(); RWLockPosix::make_default(); #endif @@ -187,7 +189,7 @@ uint64_t OS_Unix::get_system_time_secs() const { uint64_t OS_Unix::get_system_time_msecs() const { struct timeval tv_now; gettimeofday(&tv_now, NULL); - return uint64_t(tv_now.tv_sec * 1000 + tv_now.tv_usec / 1000); + return uint64_t(tv_now.tv_sec) * 1000 + uint64_t(tv_now.tv_usec) / 1000; } OS::Date OS_Unix::get_date(bool utc) const { @@ -298,7 +300,7 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo } FILE *f = popen(argss.utf8().get_data(), "r"); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot pipe stream from process running with following arguments '" + argss + "'."); char buf[65535]; @@ -314,7 +316,7 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo } int rv = pclose(f); if (r_exitcode) - *r_exitcode = rv; + *r_exitcode = WEXITSTATUS(rv); return OK; } diff --git a/drivers/unix/semaphore_posix.cpp b/drivers/unix/semaphore_posix.cpp index 5aa51d77d1..fc2d5b0dfe 100644 --- a/drivers/unix/semaphore_posix.cpp +++ b/drivers/unix/semaphore_posix.cpp @@ -30,7 +30,7 @@ #include "semaphore_posix.h" -#if defined(UNIX_ENABLED) || defined(PTHREAD_ENABLED) +#if (defined(UNIX_ENABLED) || defined(PTHREAD_ENABLED)) && !defined(OSX_ENABLED) && !defined(IPHONE_ENABLED) #include "core/os/memory.h" #include <errno.h> diff --git a/drivers/unix/semaphore_posix.h b/drivers/unix/semaphore_posix.h index 83e75c9a82..8aff01fc27 100644 --- a/drivers/unix/semaphore_posix.h +++ b/drivers/unix/semaphore_posix.h @@ -33,7 +33,7 @@ #include "core/os/semaphore.h" -#if defined(UNIX_ENABLED) || defined(PTHREAD_ENABLED) +#if (defined(UNIX_ENABLED) || defined(PTHREAD_ENABLED)) && !defined(OSX_ENABLED) && !defined(IPHONE_ENABLED) #include <semaphore.h> diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index adc3cc8d65..336d5c5814 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -76,7 +76,7 @@ public: CMMNotificationClient() : _cRef(1), _pEnumerator(NULL) {} - ~CMMNotificationClient() { + virtual ~CMMNotificationClient() { if ((_pEnumerator) != NULL) { (_pEnumerator)->Release(); (_pEnumerator) = NULL; diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp index 6728f60e06..1283956ae6 100644 --- a/editor/animation_bezier_editor.cpp +++ b/editor/animation_bezier_editor.cpp @@ -546,7 +546,7 @@ void AnimationBezierTrackEdit::set_timeline(AnimationTimelineEdit *p_timeline) { } void AnimationBezierTrackEdit::set_editor(AnimationTrackEditor *p_editor) { editor = p_editor; - connect("clear_selection", editor, "_clear_selection"); + connect("clear_selection", editor, "_clear_selection", varray(false)); } void AnimationBezierTrackEdit::_play_position_draw() { @@ -929,13 +929,6 @@ void AnimationBezierTrackEdit::_gui_input(const Ref<InputEvent> &p_event) { undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, 1); } - // 6-(undo) reinsert overlapped keys - for (List<AnimMoveRestore>::Element *E = to_restore.front(); E; E = E->next()) { - - AnimMoveRestore &amr = E->get(); - undo_redo->add_undo_method(animation.ptr(), "track_insert_key", amr.track, amr.time, amr.key, 1); - } - undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp index a163490cfb..33f833afa4 100644 --- a/editor/animation_track_editor.cpp +++ b/editor/animation_track_editor.cpp @@ -2466,6 +2466,7 @@ void AnimationTrackEdit::update_play_position() { void AnimationTrackEdit::set_root(Node *p_root) { root = p_root; } + void AnimationTrackEdit::_zoom_changed() { update(); play_position->update(); @@ -3079,7 +3080,6 @@ void AnimationTrackEdit::_bind_methods() { ADD_SIGNAL(MethodInfo("insert_key", PropertyInfo(Variant::REAL, "ofs"))); ADD_SIGNAL(MethodInfo("select_key", PropertyInfo(Variant::INT, "index"), PropertyInfo(Variant::BOOL, "single"))); ADD_SIGNAL(MethodInfo("deselect_key", PropertyInfo(Variant::INT, "index"))); - ADD_SIGNAL(MethodInfo("clear_selection")); ADD_SIGNAL(MethodInfo("bezier_edit")); ADD_SIGNAL(MethodInfo("move_selection_begin")); @@ -3305,6 +3305,7 @@ Ref<Animation> AnimationTrackEditor::get_current_animation() const { return animation; } + void AnimationTrackEditor::_root_removed(Node *p_root) { root = NULL; } @@ -3400,15 +3401,14 @@ void AnimationTrackEditor::_track_remove_request(int p_track) { int idx = p_track; if (idx >= 0 && idx < animation->get_track_count()) { - selection.clear(); - _clear_key_edit(); - //all will be updated after remove anyway, and triggering update here raises error on tracks already removed undo_redo->create_action(TTR("Remove Anim Track")); + undo_redo->add_do_method(this, "_clear_selection", false); undo_redo->add_do_method(animation.ptr(), "remove_track", idx); undo_redo->add_undo_method(animation.ptr(), "add_track", animation->track_get_type(idx), idx); undo_redo->add_undo_method(animation.ptr(), "track_set_path", idx, animation->track_get_path(idx)); - //todo interpolation + + // TODO interpolation. for (int i = 0; i < animation->track_get_key_count(idx); i++) { Variant v = animation->track_get_key_value(idx, i); @@ -3469,20 +3469,18 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { if (p_id.track_idx == -1) { if (bool(EDITOR_DEF("editors/animation/confirm_insert_track", true))) { //potential new key, does not exist - if (insert_data.size() == 1) - insert_confirm_text->set_text(vformat(TTR("Create NEW track for %s and insert key?"), p_id.query)); - else - insert_confirm_text->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"), insert_data.size())); - + int num_tracks = 0; bool all_bezier = true; for (int i = 0; i < insert_data.size(); i++) { - if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) { + if (insert_data[i].type != Animation::TYPE_VALUE && insert_data[i].type != Animation::TYPE_BEZIER) all_bezier = false; - } - if (insert_data[i].type != Animation::TYPE_VALUE) { + if (insert_data[i].track_idx == -1) + ++num_tracks; + + if (insert_data[i].type != Animation::TYPE_VALUE) continue; - } + switch (insert_data[i].value.get_type()) { case Variant::INT: case Variant::REAL: @@ -3491,7 +3489,7 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { case Variant::QUAT: case Variant::PLANE: case Variant::COLOR: { - //good + // Valid. } break; default: { all_bezier = false; @@ -3499,6 +3497,11 @@ void AnimationTrackEditor::_query_insert(const InsertData &p_id) { } } + if (num_tracks == 1) + insert_confirm_text->set_text(vformat(TTR("Create NEW track for %s and insert key?"), p_id.query)); + else + insert_confirm_text->set_text(vformat(TTR("Create %d NEW tracks and insert keys?"), num_tracks)); + insert_confirm_bezier->set_visible(all_bezier); insert_confirm->get_ok()->set_text(TTR("Create")); insert_confirm->popup_centered_minsize(); @@ -3685,16 +3688,20 @@ void AnimationTrackEditor::insert_node_value_key(Node *p_node, const String &p_p } else if (animation->track_get_type(i) == Animation::TYPE_BEZIER) { Variant value; - if (animation->track_get_path(i) == np) { + String track_path = animation->track_get_path(i); + if (track_path == np) { value = p_value; //all good } else { - String tpath = animation->track_get_path(i); - if (NodePath(tpath.get_basename()) == np) { - String subindex = tpath.get_extension(); - value = p_value.get(subindex); - } else { + int sep = track_path.find_last(":"); + if (sep != -1) { + String base_path = track_path.substr(0, sep); + if (base_path == np) { + String value_name = track_path.substr(sep + 1); + value = p_value.get(value_name); + } else + continue; + } else continue; - } } InsertData id; @@ -3954,33 +3961,30 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo bool created = false; if (p_id.track_idx < 0) { - if (p_create_beziers && (p_id.value.get_type() == Variant::VECTOR2 || - p_id.value.get_type() == Variant::VECTOR3 || - p_id.value.get_type() == Variant::QUAT || - p_id.value.get_type() == Variant::COLOR || - p_id.value.get_type() == Variant::PLANE)) { - - Vector<String> subindices = _get_bezier_subindices_for_type(p_id.value.get_type()); + if (p_create_beziers) { + bool valid; + Vector<String> subindices = _get_bezier_subindices_for_type(p_id.value.get_type(), &valid); + if (valid) { + for (int i = 0; i < subindices.size(); i++) { + InsertData id = p_id; + id.type = Animation::TYPE_BEZIER; + id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); + id.path = String(p_id.path) + subindices[i]; + _confirm_insert(id, p_last_track + i); + } - for (int i = 0; i < subindices.size(); i++) { - InsertData id = p_id; - id.type = Animation::TYPE_BEZIER; - id.value = p_id.value.get(subindices[i].substr(1, subindices[i].length())); - id.path = String(p_id.path) + subindices[i]; - _confirm_insert(id, p_last_track + i); + return p_last_track + subindices.size(); } - - return p_last_track + subindices.size() - 1; } created = true; undo_redo->create_action(TTR("Anim Insert Track & Key")); Animation::UpdateMode update_mode = Animation::UPDATE_DISCRETE; if (p_id.type == Animation::TYPE_VALUE || p_id.type == Animation::TYPE_BEZIER) { - //wants a new tack + // Wants a new track. { - //hack + // Hack. NodePath np; animation->add_track(p_id.type); animation->track_set_path(animation->get_track_count() - 1, p_id.path); @@ -4034,7 +4038,7 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo Dictionary d; d["location"] = tr.origin; d["scale"] = tr.basis.get_scale(); - d["rotation"] = Quat(tr.basis); //.orthonormalized(); + d["rotation"] = Quat(tr.basis); value = d; } break; case Animation::TYPE_BEZIER: { @@ -4059,8 +4063,9 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo if (created) { - //just remove the track - undo_redo->add_undo_method(animation.ptr(), "remove_track", p_last_track); + // Just remove the track. + undo_redo->add_undo_method(this, "_clear_selection", false); + undo_redo->add_undo_method(animation.ptr(), "remove_track", animation->get_track_count()); p_last_track++; } else { @@ -4079,6 +4084,8 @@ int AnimationTrackEditor::_confirm_insert(InsertData p_id, int p_last_track, boo } void AnimationTrackEditor::show_select_node_warning(bool p_show) { + + info_message->set_visible(p_show); } bool AnimationTrackEditor::is_key_selected(int p_track, int p_key) const { @@ -4257,7 +4264,6 @@ void AnimationTrackEditor::_update_tracks() { track_edit->connect("select_key", this, "_key_selected", varray(i), CONNECT_DEFERRED); track_edit->connect("deselect_key", this, "_key_deselected", varray(i), CONNECT_DEFERRED); track_edit->connect("bezier_edit", this, "_bezier_edit", varray(i), CONNECT_DEFERRED); - track_edit->connect("clear_selection", this, "_clear_selection"); track_edit->connect("move_selection_begin", this, "_move_selection_begin"); track_edit->connect("move_selection", this, "_move_selection"); track_edit->connect("move_selection_commit", this, "_move_selection_commit"); @@ -4584,7 +4590,7 @@ void AnimationTrackEditor::_new_track_property_selected(String p_name) { for (int i = 0; i < subindices.size(); i++) { undo_redo->add_do_method(animation.ptr(), "add_track", adding_track_type); undo_redo->add_do_method(animation.ptr(), "track_set_path", base_track + i, full_path + subindices[i]); - undo_redo->add_undo_method(animation.ptr(), "remove_track", base_track + i); + undo_redo->add_undo_method(animation.ptr(), "remove_track", base_track); } undo_redo->commit_action(); } @@ -4661,6 +4667,7 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) { undo_redo->create_action(TTR("Add Track Key")); undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, value); + undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); undo_redo->add_undo_method(animation.ptr(), "track_remove_key_at_position", p_track, p_ofs); undo_redo->commit_action(); @@ -4868,11 +4875,16 @@ void AnimationTrackEditor::_clear_key_edit() { } } -void AnimationTrackEditor::_clear_selection() { +void AnimationTrackEditor::_clear_selection(bool p_update) { + selection.clear(); - for (int i = 0; i < track_edits.size(); i++) { - track_edits[i]->update(); + + if (p_update) { + for (int i = 0; i < track_edits.size(); i++) { + track_edits[i]->update(); + } } + _clear_key_edit(); } @@ -5543,7 +5555,6 @@ void AnimationTrackEditor::_edit_menu_pressed(int p_option) { undo_redo->add_do_method(this, "_clear_selection_for_anim", animation); undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation); undo_redo->commit_action(); - //selection.clear(); _update_key_edit(); } } break; @@ -5716,16 +5727,24 @@ void AnimationTrackEditor::_show_imported_anim_warning() const { } void AnimationTrackEditor::_select_all_tracks_for_copy() { + TreeItem *track = track_copy_select->get_root()->get_children(); + if (!track) + return; + + bool all_selected = true; while (track) { - track->set_checked(0, selected_all_tracks); + if (!track->is_checked(0)) + all_selected = false; + + track = track->get_next(); + } + + track = track_copy_select->get_root()->get_children(); + while (track) { + track->set_checked(0, !all_selected); track = track->get_next(); } - selected_all_tracks = !selected_all_tracks; - if (selected_all_tracks) - select_all_button->set_text(TTR("Select All")); - else - select_all_button->set_text(TTR("Select None")); } void AnimationTrackEditor::_bind_methods() { @@ -5794,6 +5813,15 @@ AnimationTrackEditor::AnimationTrackEditor() { timeline_vbox->set_h_size_flags(SIZE_EXPAND_FILL); timeline_vbox->add_constant_override("separation", 0); + info_message = memnew(Label); + info_message->set_text(TTR("Select an AnimationPlayer node to create and edit animations.")); + info_message->set_valign(Label::VALIGN_CENTER); + info_message->set_align(Label::ALIGN_CENTER); + info_message->set_autowrap(true); + info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + main_panel->add_child(info_message); + timeline = memnew(AnimationTimelineEdit); timeline->set_undo_redo(undo_redo); timeline_vbox->add_child(timeline); @@ -6048,25 +6076,22 @@ AnimationTrackEditor::AnimationTrackEditor() { track_copy_dialog = memnew(ConfirmationDialog); add_child(track_copy_dialog); - track_copy_dialog->set_title(TTR("Select tracks to copy:")); + track_copy_dialog->set_title(TTR("Select Tracks to Copy")); track_copy_dialog->get_ok()->set_text(TTR("Copy")); VBoxContainer *track_vbox = memnew(VBoxContainer); track_copy_dialog->add_child(track_vbox); - selected_all_tracks = true; + Button *select_all_button = memnew(Button); + select_all_button->set_text(TTR("Select All/None")); + select_all_button->connect("pressed", this, "_select_all_tracks_for_copy"); + track_vbox->add_child(select_all_button); track_copy_select = memnew(Tree); track_copy_select->set_h_size_flags(SIZE_EXPAND_FILL); track_copy_select->set_v_size_flags(SIZE_EXPAND_FILL); track_copy_select->set_hide_root(true); track_vbox->add_child(track_copy_select); - track_copy_options = memnew(HBoxContainer); - track_vbox->add_child(track_copy_options); - select_all_button = memnew(Button); - select_all_button->set_text(TTR("Select All")); - select_all_button->connect("pressed", this, "_select_all_tracks_for_copy"); - track_copy_options->add_child(select_all_button); track_copy_dialog->connect("confirmed", this, "_edit_menu_pressed", varray(EDIT_COPY_TRACKS_CONFIRM)); animation_changing_awaiting_update = false; } diff --git a/editor/animation_track_editor.h b/editor/animation_track_editor.h index 96fd10effd..fd28d8f4d1 100644 --- a/editor/animation_track_editor.h +++ b/editor/animation_track_editor.h @@ -304,6 +304,8 @@ class AnimationTrackEditor : public VBoxContainer { VBoxContainer *track_vbox; AnimationBezierTrackEdit *bezier_edit; + Label *info_message; + AnimationTimelineEdit *timeline; HSlider *zoom; EditorSpinSlider *step; @@ -385,7 +387,7 @@ class AnimationTrackEditor : public VBoxContainer { void _insert_key_from_track(float p_ofs, int p_track); void _add_method_key(const String &p_method); - void _clear_selection(); + void _clear_selection(bool p_update = false); void _clear_selection_for_anim(const Ref<Animation> &p_anim); void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos); @@ -463,11 +465,8 @@ class AnimationTrackEditor : public VBoxContainer { void _selection_changed(); - bool selected_all_tracks; ConfirmationDialog *track_copy_dialog; Tree *track_copy_select; - HBoxContainer *track_copy_options; - Button *select_all_button; struct TrackClipboard { NodePath full_path; diff --git a/editor/animation_track_editor_plugins.cpp b/editor/animation_track_editor_plugins.cpp index 226eef9c1e..3e0b644b20 100644 --- a/editor/animation_track_editor_plugins.cpp +++ b/editor/animation_track_editor_plugins.cpp @@ -337,7 +337,7 @@ AnimationTrackEditAudio::AnimationTrackEditAudio() { AudioStreamPreviewGenerator::get_singleton()->connect("preview_updated", this, "_preview_changed"); } -/// SPRITE FRAME /// +/// SPRITE FRAME / FRAME_COORDS /// int AnimationTrackEditSpriteFrame::get_key_height() const { @@ -439,14 +439,24 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in if (Object::cast_to<Sprite>(object) || Object::cast_to<Sprite3D>(object)) { - int frame = get_animation()->track_get_key_value(get_track(), p_index); - texture = object->call("get_texture"); if (!texture.is_valid()) { AnimationTrackEdit::draw_key(p_index, p_pixels_sec, p_x, p_selected, p_clip_left, p_clip_right); return; } + int hframes = object->call("get_hframes"); + int vframes = object->call("get_vframes"); + + Vector2 coords; + if (is_coords) { + coords = get_animation()->track_get_key_value(get_track(), p_index); + } else { + int frame = get_animation()->track_get_key_value(get_track(), p_index); + coords.x = frame % hframes; + coords.y = frame / hframes; + } + region.size = texture->get_size(); if (bool(object->call("is_region"))) { @@ -454,9 +464,6 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in region = Rect2(object->call("get_region_rect")); } - int hframes = object->call("get_hframes"); - int vframes = object->call("get_vframes"); - if (hframes > 1) { region.size.x /= hframes; } @@ -464,8 +471,8 @@ void AnimationTrackEditSpriteFrame::draw_key(int p_index, float p_pixels_sec, in region.size.y /= vframes; } - region.position.x += region.size.x * (frame % hframes); - region.position.y += region.size.y * (frame / hframes); + region.position.x += region.size.x * coords.x; + region.position.y += region.size.y * coords.y; } else if (Object::cast_to<AnimatedSprite>(object) || Object::cast_to<AnimatedSprite3D>(object)) { @@ -532,6 +539,11 @@ void AnimationTrackEditSpriteFrame::set_node(Object *p_object) { id = p_object->get_instance_id(); } +void AnimationTrackEditSpriteFrame::set_as_coords() { + + is_coords = true; +} + /// SUB ANIMATION /// int AnimationTrackEditSubAnim::get_key_height() const { @@ -1297,6 +1309,14 @@ AnimationTrackEdit *AnimationTrackEditDefaultPlugin::create_value_track_edit(Obj return sprite; } + if (p_property == "frame_coords" && (p_object->is_class("Sprite") || p_object->is_class("Sprite3D"))) { + + AnimationTrackEditSpriteFrame *sprite = memnew(AnimationTrackEditSpriteFrame); + sprite->set_as_coords(); + sprite->set_node(p_object); + return sprite; + } + if (p_property == "current_animation" && (p_object->is_class("AnimationPlayer"))) { AnimationTrackEditSubAnim *player = memnew(AnimationTrackEditSubAnim); diff --git a/editor/animation_track_editor_plugins.h b/editor/animation_track_editor_plugins.h index 5f0ea6196c..1013cccf72 100644 --- a/editor/animation_track_editor_plugins.h +++ b/editor/animation_track_editor_plugins.h @@ -81,6 +81,7 @@ class AnimationTrackEditSpriteFrame : public AnimationTrackEdit { GDCLASS(AnimationTrackEditSpriteFrame, AnimationTrackEdit); ObjectID id; + bool is_coords; public: virtual int get_key_height() const; @@ -89,6 +90,9 @@ public: virtual void draw_key(int p_index, float p_pixels_sec, int p_x, bool p_selected, int p_clip_left, int p_clip_right); void set_node(Object *p_object); + void set_as_coords(); + + AnimationTrackEditSpriteFrame() { is_coords = false; } }; class AnimationTrackEditSubAnim : public AnimationTrackEdit { diff --git a/editor/array_property_edit.cpp b/editor/array_property_edit.cpp index f2471e80d4..906139e239 100644 --- a/editor/array_property_edit.cpp +++ b/editor/array_property_edit.cpp @@ -267,9 +267,9 @@ void ArrayPropertyEdit::edit(Object *p_obj, const StringName &p_prop, const Stri default_type = p_deftype; if (!p_hint_string.empty()) { - int hint_subtype_seperator = p_hint_string.find(":"); - if (hint_subtype_seperator >= 0) { - String subtype_string = p_hint_string.substr(0, hint_subtype_seperator); + int hint_subtype_separator = p_hint_string.find(":"); + if (hint_subtype_separator >= 0) { + String subtype_string = p_hint_string.substr(0, hint_subtype_separator); int slash_pos = subtype_string.find("/"); if (slash_pos >= 0) { @@ -277,7 +277,7 @@ void ArrayPropertyEdit::edit(Object *p_obj, const StringName &p_prop, const Stri subtype_string = subtype_string.substr(0, slash_pos); } - subtype_hint_string = p_hint_string.substr(hint_subtype_seperator + 1, p_hint_string.size() - hint_subtype_seperator - 1); + subtype_hint_string = p_hint_string.substr(hint_subtype_separator + 1, p_hint_string.size() - hint_subtype_separator - 1); subtype = Variant::Type(subtype_string.to_int()); } } diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index b6cd69c3cd..1a821ddd02 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -191,7 +191,9 @@ void FindReplaceBar::_replace() { results_count = -1; } - search_current(); + if (!search_current()) { + search_next(); + } } void FindReplaceBar::_replace_all() { @@ -456,10 +458,10 @@ void FindReplaceBar::_show_search(bool p_focus_replace, bool p_show_only) { void FindReplaceBar::popup_search(bool p_show_only) { - if (!is_visible()) - replace_text->hide(); + replace_text->hide(); hbc_button_replace->hide(); hbc_option_replace->hide(); + _show_search(false, p_show_only); } diff --git a/editor/collada/collada.cpp b/editor/collada/collada.cpp index 1bb49a4167..843d1006d7 100644 --- a/editor/collada/collada.cpp +++ b/editor/collada/collada.cpp @@ -616,7 +616,7 @@ void Collada::_parse_effect_material(XMLParser &parser, Effect &effect, String & if (colorarr.size() >= 3) { - // alpha strangely not allright? maybe it needs to be multiplied by value as a channel intensity + // alpha strangely not alright? maybe it needs to be multiplied by value as a channel intensity Color color(colorarr[0], colorarr[1], colorarr[2], 1.0); if (what == "diffuse") effect.diffuse.color = color; @@ -854,7 +854,7 @@ void Collada::_parse_light(XMLParser &parser) { COLLADA_PRINT("colorarr size: " + rtos(colorarr.size())); if (colorarr.size() >= 4) { - // alpha strangely not allright? maybe it needs to be multiplied by value as a channel intensity + // alpha strangely not alright? maybe it needs to be multiplied by value as a channel intensity Color color(colorarr[0], colorarr[1], colorarr[2], 1.0); light.color = color; } @@ -2297,7 +2297,7 @@ bool Collada::_optimize_skeletons(VisualScene *p_vscene, Node *p_node) { //replace parent by this... Node *parent = node->parent; - //i wonder if this is allright.. i think it is since created skeleton (first joint) is already animated by bone.. + //i wonder if this is alright.. i think it is since created skeleton (first joint) is already animated by bone.. node->id = parent->id; node->name = parent->name; node->xform_list = parent->xform_list; @@ -2514,7 +2514,7 @@ Error Collada::load(const String &p_path, int p_flags) { Ref<XMLParser> parserr = memnew(XMLParser); XMLParser &parser = *parserr.ptr(); Error err = parser.open(p_path); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err, err, "Cannot open Collada file '" + p_path + "'."); state.local_path = ProjectSettings::get_singleton()->localize_path(p_path); state.import_flags = p_flags; @@ -2530,7 +2530,7 @@ Error Collada::load(const String &p_path, int p_flags) { } } - ERR_FAIL_COND_V(err != OK, ERR_FILE_CORRUPT); + ERR_FAIL_COND_V_MSG(err != OK, ERR_FILE_CORRUPT, "Corrupted Collada file '" + p_path + "'."); /* Start loading Collada */ diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index c5b81c4685..f5a01dfb04 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -108,8 +108,8 @@ public: }; /* -Signal automatically called by parent dialog. -*/ + * Signal automatically called by parent dialog. + */ void ConnectDialog::ok_pressed() { if (dst_method->get_text() == "") { @@ -134,8 +134,8 @@ void ConnectDialog::_cancel_pressed() { } /* -Called each time a target node is selected within the target node tree. -*/ + * Called each time a target node is selected within the target node tree. + */ void ConnectDialog::_tree_node_selected() { Node *current = tree->get_selected(); @@ -148,8 +148,8 @@ void ConnectDialog::_tree_node_selected() { } /* -Adds a new parameter bind to connection. -*/ + * Adds a new parameter bind to connection. + */ void ConnectDialog::_add_bind() { if (cdbinds->params.size() >= VARIANT_ARG_MAX) @@ -184,8 +184,8 @@ void ConnectDialog::_add_bind() { } /* -Remove parameter bind from connection. -*/ + * Remove parameter bind from connection. + */ void ConnectDialog::_remove_bind() { String st = bind_editor->get_selected_path(); @@ -265,18 +265,18 @@ bool ConnectDialog::get_oneshot() const { } /* -Returns true if ConnectDialog is being used to edit an existing connection. -*/ + * Returns true if ConnectDialog is being used to edit an existing connection. + */ bool ConnectDialog::is_editing() const { return bEditMode; } /* -Initialize ConnectDialog and populate fields with expected data. -If creating a connection from scratch, sensible defaults are used. -If editing an existing connection, previous data is retained. -*/ + * Initialize ConnectDialog and populate fields with expected data. + * If creating a connection from scratch, sensible defaults are used. + * If editing an existing connection, previous data is retained. + */ void ConnectDialog::init(Connection c, bool bEdit) { source = static_cast<Node *>(c.source); @@ -417,6 +417,7 @@ ConnectDialog::ConnectDialog() { dst_method = memnew(LineEdit); dst_method->set_h_size_flags(SIZE_EXPAND_FILL); + dst_method->connect("text_entered", this, "_builtin_text_entered"); dstm_hb->add_child(dst_method); advanced = memnew(CheckButton); @@ -482,9 +483,9 @@ struct _ConnectionsDockMethodInfoSort { }; /* -Post-ConnectDialog callback for creating/editing connections. -Creates or edits connections based on state of the ConnectDialog when "Connect" is pressed. -*/ + * Post-ConnectDialog callback for creating/editing connections. + * Creates or edits connections based on state of the ConnectDialog when "Connect" is pressed. + */ void ConnectionsDock::_make_or_edit_connection() { TreeItem *it = tree->get_selected(); @@ -529,7 +530,7 @@ void ConnectionsDock::_make_or_edit_connection() { // Pick up args here before "it" is deleted by update_tree. script_function_args = it->get_metadata(0).operator Dictionary()["args"]; for (int i = 0; i < cToMake.binds.size(); i++) { - script_function_args.append("extra_arg_" + itos(i)); + script_function_args.append("extra_arg_" + itos(i) + ":" + Variant::get_type_name(cToMake.binds[i].get_type())); } } @@ -552,8 +553,8 @@ void ConnectionsDock::_make_or_edit_connection() { } /* -Creates single connection w/ undo-redo functionality. -*/ + * Creates single connection w/ undo-redo functionality. + */ void ConnectionsDock::_connect(Connection cToMake) { Node *source = static_cast<Node *>(cToMake.source); @@ -575,8 +576,8 @@ void ConnectionsDock::_connect(Connection cToMake) { } /* -Break single connection w/ undo-redo functionality. -*/ + * Break single connection w/ undo-redo functionality. + */ void ConnectionsDock::_disconnect(TreeItem &item) { Connection c = item.get_metadata(0); @@ -595,9 +596,9 @@ void ConnectionsDock::_disconnect(TreeItem &item) { } /* -Break all connections of currently selected signal. -Can undo-redo as a single action. -*/ + * Break all connections of currently selected signal. + * Can undo-redo as a single action. + */ void ConnectionsDock::_disconnect_all() { TreeItem *item = tree->get_selected(); @@ -659,8 +660,8 @@ bool ConnectionsDock::_is_item_signal(TreeItem &item) { } /* -Open connection dialog with TreeItem data to CREATE a brand-new connection. -*/ + * Open connection dialog with TreeItem data to CREATE a brand-new connection. + */ void ConnectionsDock::_open_connection_dialog(TreeItem &item) { String signal = item.get_metadata(0).operator Dictionary()["name"]; @@ -700,8 +701,8 @@ void ConnectionsDock::_open_connection_dialog(TreeItem &item) { } /* -Open connection dialog with Connection data to EDIT an existing connection. -*/ + * Open connection dialog with Connection data to EDIT an existing connection. + */ void ConnectionsDock::_open_connection_dialog(Connection cToEdit) { Node *src = static_cast<Node *>(cToEdit.source); @@ -715,8 +716,8 @@ void ConnectionsDock::_open_connection_dialog(Connection cToEdit) { } /* -Open slot method location in script editor. -*/ + * Open slot method location in script editor. + */ void ConnectionsDock::_go_to_script(TreeItem &item) { if (_is_item_signal(item)) @@ -914,7 +915,6 @@ void ConnectionsDock::update_tree() { String signaldesc = "("; PoolStringArray argnames; if (mi.arguments.size()) { - signaldesc += " "; for (int i = 0; i < mi.arguments.size(); i++) { PropertyInfo &pi = mi.arguments[i]; @@ -927,10 +927,9 @@ void ConnectionsDock::update_tree() { } else if (pi.type != Variant::NIL) { tname = Variant::get_type_name(pi.type); } - signaldesc += tname + " " + (pi.name == "" ? String("arg " + itos(i)) : pi.name); + signaldesc += (pi.name == "" ? String("arg " + itos(i)) : pi.name) + ": " + tname; argnames.push_back(pi.name + ":" + tname); } - signaldesc += " "; } signaldesc += ")"; @@ -1000,14 +999,14 @@ void ConnectionsDock::update_tree() { path += " (oneshot)"; if (c.binds.size()) { - path += " binds( "; + path += " binds("; for (int i = 0; i < c.binds.size(); i++) { if (i > 0) path += ", "; path += c.binds[i].operator String(); } - path += " )"; + path += ")"; } TreeItem *item2 = tree->create_item(item); diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp index d5f0dc01ee..fb7cf494cd 100644 --- a/editor/create_dialog.cpp +++ b/editor/create_dialog.cpp @@ -151,6 +151,10 @@ void CreateDialog::add_type(const String &p_type, HashMap<String, TreeItem *> &p if (!ClassDB::is_parent_class(p_type, base_type)) return; } else { + if (!search_loaded_scripts.has(p_type)) { + search_loaded_scripts[p_type] = ed.script_class_load_script(p_type); + } + if (!ScriptServer::is_global_class(p_type) || !ed.script_class_is_parent(p_type, base_type)) return; @@ -352,7 +356,12 @@ void CreateDialog::_update_search() { } else { bool found = false; - String type2 = I->get(); + String type2 = type; + + if (!cpp_type && !search_loaded_scripts.has(type)) { + search_loaded_scripts[type] = ed.script_class_load_script(type); + } + while (type2 != "" && (cpp_type ? ClassDB::is_parent_class(type2, base_type) : ed.script_class_is_parent(type2, base_type)) && type2 != base_type) { if (search_box->get_text().is_subsequence_ofi(type2)) { @@ -361,10 +370,15 @@ void CreateDialog::_update_search() { } type2 = cpp_type ? ClassDB::get_parent_class(type2) : ed.script_class_get_base(type2); + + if (!cpp_type && !search_loaded_scripts.has(type2)) { + search_loaded_scripts[type2] = ed.script_class_load_script(type2); + } } - if (found) - add_type(I->get(), search_options_types, root, &to_select); + if (found) { + add_type(type, search_options_types, root, &to_select); + } } if (EditorNode::get_editor_data().get_custom_types().has(type) && ClassDB::is_parent_class(type, base_type)) { @@ -470,6 +484,7 @@ void CreateDialog::_notification(int p_what) { } break; case NOTIFICATION_POPUP_HIDE: { EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "create_new_node", get_rect()); + search_loaded_scripts.clear(); } break; } } @@ -811,6 +826,4 @@ CreateDialog::CreateDialog() { type_blacklist.insert("PluginScript"); // PluginScript must be initialized before use, which is not possible here type_blacklist.insert("ScriptCreateDialog"); // This is an exposed editor Node that doesn't have an Editor prefix. - - EDITOR_DEF("interface/editors/derive_script_globals_by_name", true); } diff --git a/editor/create_dialog.h b/editor/create_dialog.h index f3ed1d7af6..1150ac60da 100644 --- a/editor/create_dialog.h +++ b/editor/create_dialog.h @@ -51,6 +51,7 @@ class CreateDialog : public ConfirmationDialog { LineEdit *search_box; Tree *search_options; HashMap<String, TreeItem *> search_options_types; + HashMap<String, RES> search_loaded_scripts; bool is_replace_mode; String base_type; String preferred_search_result_type; diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp index 5f8660e108..1f58eda396 100644 --- a/editor/dependency_editor.cpp +++ b/editor/dependency_editor.cpp @@ -646,7 +646,7 @@ DependencyErrorDialog::DependencyErrorDialog() { vb->add_margin_child(TTR("Load failed due to missing dependencies:"), files, true); files->set_v_size_flags(SIZE_EXPAND_FILL); - set_custom_minimum_size(Size2(500, 220)); + set_custom_minimum_size(Size2(500, 220) * EDSCALE); get_ok()->set_text(TTR("Open Anyway")); get_cancel()->set_text(TTR("Close")); diff --git a/editor/doc/doc_data.cpp b/editor/doc/doc_data.cpp index 0f99e2ba1e..d472b41f2e 100644 --- a/editor/doc/doc_data.cpp +++ b/editor/doc/doc_data.cpp @@ -205,6 +205,29 @@ static void argument_doc_from_arginfo(DocData::ArgumentDoc &p_argument, const Pr } } +static Variant get_documentation_default_value(const StringName &p_class_name, const StringName &p_property_name, bool &r_default_value_valid) { + + Variant default_value = Variant(); + r_default_value_valid = false; + + if (ClassDB::can_instance(p_class_name)) { + default_value = ClassDB::class_get_default_property_value(p_class_name, p_property_name, &r_default_value_valid); + } else { + // Cannot get default value of classes that can't be instanced + List<StringName> inheriting_classes; + ClassDB::get_direct_inheriters_from_class(p_class_name, &inheriting_classes); + for (List<StringName>::Element *E2 = inheriting_classes.front(); E2; E2 = E2->next()) { + if (ClassDB::can_instance(E2->get())) { + default_value = ClassDB::class_get_default_property_value(E2->get(), p_property_name, &r_default_value_valid); + if (r_default_value_valid) + break; + } + } + } + + return default_value; +} + void DocData::generate(bool p_basic_types) { List<StringName> classes; @@ -229,47 +252,53 @@ void DocData::generate(bool p_basic_types) { c.category = ClassDB::get_category(name); List<PropertyInfo> properties; + List<PropertyInfo> own_properties; if (name == "ProjectSettings") { //special case for project settings, so settings can be documented ProjectSettings::get_singleton()->get_property_list(&properties); + own_properties = properties; } else { - ClassDB::get_property_list(name, &properties, true); + ClassDB::get_property_list(name, &properties); + ClassDB::get_property_list(name, &own_properties, true); } + List<PropertyInfo>::Element *EO = own_properties.front(); for (List<PropertyInfo>::Element *E = properties.front(); E; E = E->next()) { + bool inherited = EO == NULL; + if (EO && EO->get() == E->get()) { + inherited = false; + EO = EO->next(); + } + if (E->get().usage & PROPERTY_USAGE_GROUP || E->get().usage & PROPERTY_USAGE_CATEGORY || E->get().usage & PROPERTY_USAGE_INTERNAL) continue; PropertyDoc prop; - StringName setter = ClassDB::get_property_setter(name, E->get().name); - StringName getter = ClassDB::get_property_getter(name, E->get().name); prop.name = E->get().name; - prop.setter = setter; - prop.getter = getter; - Variant default_value = Variant(); + prop.overridden = inherited; + bool default_value_valid = false; + Variant default_value = get_documentation_default_value(name, E->get().name, default_value_valid); - if (ClassDB::can_instance(name)) { - default_value = ClassDB::class_get_default_property_value(name, E->get().name, &default_value_valid); - } else { - // Cannot get default value of classes that can't be instanced - List<StringName> inheriting_classes; - ClassDB::get_direct_inheriters_from_class(name, &inheriting_classes); - for (List<StringName>::Element *E2 = inheriting_classes.front(); E2; E2 = E2->next()) { - if (ClassDB::can_instance(E2->get())) { - default_value = ClassDB::class_get_default_property_value(E2->get(), E->get().name, &default_value_valid); - if (default_value_valid) - break; - } - } + if (inherited) { + bool base_default_value_valid = false; + Variant base_default_value = get_documentation_default_value(ClassDB::get_parent_class(name), E->get().name, base_default_value_valid); + if (!default_value_valid || !base_default_value_valid || default_value == base_default_value) + continue; } if (default_value_valid && default_value.get_type() != Variant::OBJECT) { prop.default_value = default_value.get_construct_string().replace("\n", ""); } + StringName setter = ClassDB::get_property_setter(name, E->get().name); + StringName getter = ClassDB::get_property_getter(name, E->get().name); + + prop.setter = setter; + prop.getter = getter; + bool found_type = false; if (getter != StringName()) { MethodBind *mb = ClassDB::get_method(name, getter); @@ -843,7 +872,7 @@ Error DocData::_load(Ref<XMLParser> parser) { ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Invalid tag in doc file: " + name3 + "."); } } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "tutorials") - break; //end of <tutorials> + break; // End of <tutorials>. } } else if (name2 == "methods") { @@ -876,16 +905,18 @@ Error DocData::_load(Ref<XMLParser> parser) { prop2.getter = parser->get_attribute_value("getter"); if (parser->has_attribute("enum")) prop2.enumeration = parser->get_attribute_value("enum"); - parser->read(); - if (parser->get_node_type() == XMLParser::NODE_TEXT) - prop2.description = parser->get_node_data(); + if (!parser->is_empty()) { + parser->read(); + if (parser->get_node_type() == XMLParser::NODE_TEXT) + prop2.description = parser->get_node_data(); + } c.properties.push_back(prop2); } else { ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Invalid tag in doc file: " + name3 + "."); } } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "members") - break; //end of <constants> + break; // End of <members>. } } else if (name2 == "theme_items") { @@ -904,16 +935,18 @@ Error DocData::_load(Ref<XMLParser> parser) { prop2.name = parser->get_attribute_value("name"); ERR_FAIL_COND_V(!parser->has_attribute("type"), ERR_FILE_CORRUPT); prop2.type = parser->get_attribute_value("type"); - parser->read(); - if (parser->get_node_type() == XMLParser::NODE_TEXT) - prop2.description = parser->get_node_data(); + if (!parser->is_empty()) { + parser->read(); + if (parser->get_node_type() == XMLParser::NODE_TEXT) + prop2.description = parser->get_node_data(); + } c.theme_properties.push_back(prop2); } else { ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Invalid tag in doc file: " + name3 + "."); } } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "theme_items") - break; //end of <constants> + break; // End of <theme_items>. } } else if (name2 == "constants") { @@ -934,16 +967,18 @@ Error DocData::_load(Ref<XMLParser> parser) { if (parser->has_attribute("enum")) { constant2.enumeration = parser->get_attribute_value("enum"); } - parser->read(); - if (parser->get_node_type() == XMLParser::NODE_TEXT) - constant2.description = parser->get_node_data(); + if (!parser->is_empty()) { + parser->read(); + if (parser->get_node_type() == XMLParser::NODE_TEXT) + constant2.description = parser->get_node_data(); + } c.constants.push_back(constant2); } else { ERR_FAIL_V_MSG(ERR_FILE_CORRUPT, "Invalid tag in doc file: " + name3 + "."); } } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "constants") - break; //end of <constants> + break; // End of <constants>. } } else { @@ -952,7 +987,7 @@ Error DocData::_load(Ref<XMLParser> parser) { } } else if (parser->get_node_type() == XMLParser::NODE_ELEMENT_END && parser->get_node_name() == "class") - break; //end of <asset> + break; // End of <class>. } } @@ -1076,10 +1111,16 @@ Error DocData::save_classes(const String &p_default_path, const Map<String, Stri if (c.properties[i].default_value != String()) { additional_attributes += " default=\"" + c.properties[i].default_value.xml_escape(true) + "\""; } + const PropertyDoc &p = c.properties[i]; - _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\"" + additional_attributes + ">"); - _write_string(f, 3, p.description.strip_edges().xml_escape()); - _write_string(f, 2, "</member>"); + + if (c.properties[i].overridden) { + _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\" override=\"true\"" + additional_attributes + " />"); + } else { + _write_string(f, 2, "<member name=\"" + p.name + "\" type=\"" + p.type + "\" setter=\"" + p.setter + "\" getter=\"" + p.getter + "\"" + additional_attributes + ">"); + _write_string(f, 3, p.description.strip_edges().xml_escape()); + _write_string(f, 2, "</member>"); + } } _write_string(f, 1, "</members>"); } diff --git a/editor/doc/doc_data.h b/editor/doc/doc_data.h index 3d5867dcca..6d601f0dce 100644 --- a/editor/doc/doc_data.h +++ b/editor/doc/doc_data.h @@ -74,6 +74,7 @@ public: String description; String setter, getter; String default_value; + bool overridden; bool operator<(const PropertyDoc &p_prop) const { return name < p_prop.name; } diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp index b2567249d8..f75d9c98e0 100644 --- a/editor/editor_about.cpp +++ b/editor/editor_about.cpp @@ -58,6 +58,7 @@ void EditorAbout::_notification(int p_what) { void EditorAbout::_license_tree_selected() { TreeItem *selected = _tpl_tree->get_selected(); + _tpl_text->scroll_to_line(0); _tpl_text->set_text(selected->get_metadata(0)); } @@ -141,7 +142,7 @@ EditorAbout::EditorAbout() { hbc->add_child(about_text); TabContainer *tc = memnew(TabContainer); - tc->set_custom_minimum_size(Size2(630, 240) * EDSCALE); + tc->set_custom_minimum_size(Size2(950, 400) * EDSCALE); tc->set_v_size_flags(Control::SIZE_EXPAND_FILL); vbc->add_child(tc); diff --git a/editor/editor_audio_buses.cpp b/editor/editor_audio_buses.cpp index 2180742bbb..b331a39535 100644 --- a/editor/editor_audio_buses.cpp +++ b/editor/editor_audio_buses.cpp @@ -31,6 +31,7 @@ #include "editor_audio_buses.h" #include "core/io/resource_saver.h" +#include "core/os/input.h" #include "core/os/keyboard.h" #include "editor_node.h" #include "filesystem_dock.h" @@ -87,7 +88,7 @@ void EditorAudioBus::_notification(int p_what) { bypass->set_icon(get_icon("AudioBusBypass", "EditorIcons")); bypass->add_color_override("icon_color_pressed", bypass_color); - bus_options->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + bus_options->set_icon(get_icon("GuiTabMenu", "EditorIcons")); update_bus(); set_process(true); @@ -179,7 +180,7 @@ void EditorAudioBus::_notification(int p_what) { mute->set_icon(get_icon("AudioBusMute", "EditorIcons")); bypass->set_icon(get_icon("AudioBusBypass", "EditorIcons")); - bus_options->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + bus_options->set_icon(get_icon("GuiTabMenu", "EditorIcons")); } break; case NOTIFICATION_MOUSE_EXIT: case NOTIFICATION_DRAG_END: { @@ -321,7 +322,13 @@ void EditorAudioBus::_volume_changed(float p_normalized) { updating_bus = true; - float p_db = this->_normalized_volume_to_scaled_db(p_normalized); + const float p_db = this->_normalized_volume_to_scaled_db(p_normalized); + + if (Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { + // Snap the value when holding Ctrl for easier editing. + // To do so, it needs to be converted back to normalized volume (as the slider uses that unit). + slider->set_value(_scaled_db_to_normalized_volume(Math::round(p_db))); + } UndoRedo *ur = EditorNode::get_undo_redo(); ur->create_action(TTR("Change Audio Bus Volume"), UndoRedo::MERGE_ENDS); @@ -376,14 +383,24 @@ float EditorAudioBus::_scaled_db_to_normalized_volume(float db) { } void EditorAudioBus::_show_value(float slider_value) { - String text = vformat("%10.1f dB", _normalized_volume_to_scaled_db(slider_value)); + float db; + if (Input::get_singleton()->is_key_pressed(KEY_CONTROL)) { + // Display the correct (snapped) value when holding Ctrl + db = Math::round(_normalized_volume_to_scaled_db(slider_value)); + } else { + db = _normalized_volume_to_scaled_db(slider_value); + } + + String text = vformat("%10.1f dB", db); + + slider->set_tooltip(text); audio_value_preview_label->set_text(text); Vector2 slider_size = slider->get_size(); Vector2 slider_position = slider->get_global_position(); float left_padding = 5.0f; float vert_padding = 10.0f; - Vector2 box_position = Vector2(slider_size.x + left_padding, (slider_size.y - vert_padding) * (1.0f - slider_value) - vert_padding); + Vector2 box_position = Vector2(slider_size.x + left_padding, (slider_size.y - vert_padding) * (1.0f - slider->get_value()) - vert_padding); audio_value_preview_box->set_position(slider_position + box_position); audio_value_preview_box->set_size(audio_value_preview_label->get_size()); if (slider->has_focus() && !audio_value_preview_box->is_visible()) { @@ -773,7 +790,7 @@ EditorAudioBus::EditorAudioBus(EditorAudioBuses *p_buses, bool p_is_master) { is_master = p_is_master; hovering_drop = false; - set_tooltip(TTR("Audio Bus, Drag and Drop to rearrange.")); + set_tooltip(TTR("Drag & drop to rearrange.")); VBoxContainer *vb = memnew(VBoxContainer); add_child(vb); @@ -1439,7 +1456,7 @@ Size2 EditorAudioMeterNotches::get_minimum_size() const { float width = 0; float height = top_padding + btm_padding; - for (uint8_t i = 0; i < notches.size(); i++) { + for (int i = 0; i < notches.size(); i++) { if (notches[i].render_db_value) { width = MAX(width, font->get_string_size(String::num(Math::abs(notches[i].db_value)) + "dB").x); height += font_height; @@ -1473,7 +1490,7 @@ void EditorAudioMeterNotches::_draw_audio_notches() { Ref<Font> font = get_font("font", "Label"); float font_height = font->get_height(); - for (uint8_t i = 0; i < notches.size(); i++) { + for (int i = 0; i < notches.size(); i++) { AudioNotch n = notches[i]; draw_line(Vector2(0, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + top_padding), Vector2(line_length, (1.0f - n.relative_position) * (get_size().y - btm_padding - top_padding) + top_padding), diff --git a/editor/editor_data.cpp b/editor/editor_data.cpp index c98635d16b..4855d3f69d 100644 --- a/editor/editor_data.cpp +++ b/editor/editor_data.cpp @@ -481,7 +481,7 @@ EditorPlugin *EditorData::get_editor_plugin(int p_idx) { void EditorData::add_custom_type(const String &p_type, const String &p_inherits, const Ref<Script> &p_script, const Ref<Texture> &p_icon) { - ERR_FAIL_COND(p_script.is_null()); + ERR_FAIL_COND_MSG(p_script.is_null(), "It's not a reference to a valid Script object."); CustomType ct; ct.name = p_type; ct.icon = p_icon; @@ -870,7 +870,7 @@ bool EditorData::script_class_is_parent(const String &p_class, const String &p_i if (!ScriptServer::is_global_class(p_class)) return false; String base = script_class_get_base(p_class); - Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script"); + Ref<Script> script = script_class_load_script(p_class); Ref<Script> base_script = script->get_base_script(); while (p_inherits != base) { @@ -889,12 +889,7 @@ bool EditorData::script_class_is_parent(const String &p_class, const String &p_i StringName EditorData::script_class_get_base(const String &p_class) const { - if (!ScriptServer::is_global_class(p_class)) - return StringName(); - - String path = ScriptServer::get_global_class_path(p_class); - - Ref<Script> script = ResourceLoader::load(path, "Script"); + Ref<Script> script = script_class_load_script(p_class); if (script.is_null()) return StringName(); @@ -910,7 +905,7 @@ Object *EditorData::script_class_instance(const String &p_class) { if (ScriptServer::is_global_class(p_class)) { Object *obj = ClassDB::instance(ScriptServer::get_global_class_native_base(p_class)); if (obj) { - RES script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class)); + Ref<Script> script = script_class_load_script(p_class); if (script.is_valid()) obj->set_script(script.get_ref_ptr()); return obj; @@ -919,6 +914,15 @@ Object *EditorData::script_class_instance(const String &p_class) { return NULL; } +Ref<Script> EditorData::script_class_load_script(const String &p_class) const { + + if (!ScriptServer::is_global_class(p_class)) + return Ref<Script>(); + + String path = ScriptServer::get_global_class_path(p_class); + return ResourceLoader::load(path, "Script"); +} + void EditorData::script_class_set_icon_path(const String &p_class, const String &p_icon_path) { _script_class_icon_paths[p_class] = p_icon_path; } @@ -1142,6 +1146,16 @@ List<Node *> &EditorSelection::get_selected_node_list() { return selected_node_list; } +List<Node *> EditorSelection::get_full_selected_node_list() { + + List<Node *> node_list; + for (Map<Node *, Object *>::Element *E = selection.front(); E; E = E->next()) { + node_list.push_back(E->key()); + } + + return node_list; +} + void EditorSelection::clear() { while (!selection.empty()) { diff --git a/editor/editor_data.h b/editor/editor_data.h index df83135942..aa3e84d5a4 100644 --- a/editor/editor_data.h +++ b/editor/editor_data.h @@ -219,6 +219,8 @@ public: StringName script_class_get_base(const String &p_class) const; Object *script_class_instance(const String &p_class); + Ref<Script> script_class_load_script(const String &p_class) const; + StringName script_class_get_name(const String &p_path) const; void script_class_set_name(const String &p_path, const StringName &p_class); @@ -273,6 +275,7 @@ public: void clear(); List<Node *> &get_selected_node_list(); + List<Node *> get_full_selected_node_list(); Map<Node *, Object *> &get_selection() { return selection; } EditorSelection(); diff --git a/editor/editor_dir_dialog.cpp b/editor/editor_dir_dialog.cpp index 7733ecb9da..525c5aa62d 100644 --- a/editor/editor_dir_dialog.cpp +++ b/editor/editor_dir_dialog.cpp @@ -95,7 +95,9 @@ void EditorDirDialog::_notification(int p_what) { } if (p_what == NOTIFICATION_EXIT_TREE) { - EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "reload"); + if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", this, "reload")) { + EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "reload"); + } } if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { @@ -151,7 +153,7 @@ void EditorDirDialog::_make_dir_confirm() { String dir = ti->get_metadata(0); DirAccessRef d = DirAccess::open(dir); - ERR_FAIL_COND(!d); + ERR_FAIL_COND_MSG(!d, "Cannot open directory '" + dir + "'."); Error err = d->make_dir(makedirname->get_text()); if (err != OK) { diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp index e58c7c992a..7ae8a9e0ce 100644 --- a/editor/editor_export.cpp +++ b/editor/editor_export.cpp @@ -376,6 +376,12 @@ Error EditorExportPlatform::_save_zip_file(void *p_userdata, const String &p_pat return OK; } +Ref<ImageTexture> EditorExportPlatform::get_option_icon(int p_index) const { + Ref<Theme> theme = EditorNode::get_singleton()->get_editor_theme(); + ERR_FAIL_COND_V(theme.is_null(), Ref<ImageTexture>()); + return theme->get_icon("Play", "EditorIcons"); +} + String EditorExportPlatform::find_export_template(String template_file_name, String *err) const { String current_version = VERSION_FULL_CONFIG; @@ -913,7 +919,7 @@ Error EditorExportPlatform::save_pack(const Ref<EditorExportPreset> &p_preset, c String tmppath = EditorSettings::get_singleton()->get_cache_dir().plus_file("packtmp"); FileAccess *ftmp = FileAccess::open(tmppath, FileAccess::WRITE); - ERR_FAIL_COND_V(!ftmp, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!ftmp, ERR_CANT_CREATE, "Cannot create file '" + tmppath + "'."); PackData pd; pd.ep = &ep; @@ -1017,7 +1023,7 @@ Error EditorExportPlatform::save_pack(const Ref<EditorExportPreset> &p_preset, c if (!ftmp) { memdelete(f); DirAccess::remove_file_or_error(tmppath); - ERR_FAIL_V_MSG(ERR_CANT_CREATE, "Can't open file to read from path: " + String(tmppath) + "."); + ERR_FAIL_V_MSG(ERR_CANT_CREATE, "Can't open file to read from path '" + String(tmppath) + "'."); } const int bufsize = 16384; @@ -1403,7 +1409,7 @@ bool EditorExport::poll_export_platforms() { bool changed = false; for (int i = 0; i < export_platforms.size(); i++) { - if (export_platforms.write[i]->poll_devices()) { + if (export_platforms.write[i]->poll_export()) { changed = true; } } @@ -1606,6 +1612,9 @@ Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_pr da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); for (int i = 0; i < so_files.size() && err == OK; i++) { err = da->copy(so_files[i].path, p_path.get_base_dir().plus_file(so_files[i].path.get_file())); + if (err == OK) { + err = sign_shared_object(p_preset, p_debug, p_path.get_base_dir().plus_file(so_files[i].path.get_file())); + } } memdelete(da); } @@ -1614,6 +1623,10 @@ Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_pr return err; } +Error EditorExportPlatformPC::sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path) { + return OK; +} + void EditorExportPlatformPC::set_extension(const String &p_extension, const String &p_feature_key) { extensions[p_feature_key] = p_extension; } diff --git a/editor/editor_export.h b/editor/editor_export.h index 3152e249bd..b0e27af629 100644 --- a/editor/editor_export.h +++ b/editor/editor_export.h @@ -243,10 +243,12 @@ public: Error save_pack(const Ref<EditorExportPreset> &p_preset, const String &p_path, Vector<SharedObject> *p_so_files = NULL, bool p_embed = false, int64_t *r_embedded_start = NULL, int64_t *r_embedded_size = NULL); Error save_zip(const Ref<EditorExportPreset> &p_preset, const String &p_path); - virtual bool poll_devices() { return false; } - virtual int get_device_count() const { return 0; } - virtual String get_device_name(int p_device) const { return ""; } - virtual String get_device_info(int p_device) const { return ""; } + virtual bool poll_export() { return false; } + virtual int get_options_count() const { return 0; } + virtual String get_options_tooltip() const { return ""; } + virtual Ref<ImageTexture> get_option_icon(int p_index) const; + virtual String get_option_label(int p_device) const { return ""; } + virtual String get_option_tooltip(int p_device) const { return ""; } enum DebugFlags { DEBUG_FLAG_DUMB_CLIENT = 1, @@ -423,6 +425,7 @@ public: virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const; virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); + virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path); void set_extension(const String &p_extension, const String &p_feature_key = "default"); void set_name(const String &p_name); diff --git a/editor/editor_feature_profile.cpp b/editor/editor_feature_profile.cpp index c6646eb28b..0182c3b4a2 100644 --- a/editor/editor_feature_profile.cpp +++ b/editor/editor_feature_profile.cpp @@ -165,7 +165,7 @@ Error EditorFeatureProfile::save_to_file(const String &p_path) { json["disabled_features"] = dis_features; FileAccessRef f = FileAccess::open(p_path, FileAccess::WRITE); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_CREATE, "Cannot create file '" + p_path + "'."); String text = JSON::print(json, "\t"); f->store_string(text); @@ -254,8 +254,8 @@ void EditorFeatureProfile::_bind_methods() { ClassDB::bind_method(D_METHOD("set_disable_class_editor", "class_name", "disable"), &EditorFeatureProfile::set_disable_class_editor); ClassDB::bind_method(D_METHOD("is_class_editor_disabled", "class_name"), &EditorFeatureProfile::is_class_editor_disabled); - ClassDB::bind_method(D_METHOD("set_disable_class_property", "class_name", "property"), &EditorFeatureProfile::set_disable_class_property); - ClassDB::bind_method(D_METHOD("is_class_property_disabled", "class_name"), &EditorFeatureProfile::is_class_property_disabled); + ClassDB::bind_method(D_METHOD("set_disable_class_property", "class_name", "property", "disable"), &EditorFeatureProfile::set_disable_class_property); + ClassDB::bind_method(D_METHOD("is_class_property_disabled", "class_name", "property"), &EditorFeatureProfile::is_class_property_disabled); ClassDB::bind_method(D_METHOD("set_disable_feature", "feature", "disable"), &EditorFeatureProfile::set_disable_feature); ClassDB::bind_method(D_METHOD("is_feature_disabled", "feature"), &EditorFeatureProfile::is_feature_disabled); @@ -326,7 +326,8 @@ void EditorFeatureProfileManager::_update_profile_list(const String &p_select_pr Vector<String> profiles; DirAccessRef d = DirAccess::open(EditorSettings::get_singleton()->get_feature_profiles_dir()); - ERR_FAIL_COND(!d); + ERR_FAIL_COND_MSG(!d, "Cannot open directory '" + EditorSettings::get_singleton()->get_feature_profiles_dir() + "'."); + d->list_dir_begin(); while (true) { String f = d->get_next(); @@ -433,7 +434,8 @@ void EditorFeatureProfileManager::_erase_selected_profile() { String selected = _get_selected_profile(); ERR_FAIL_COND(selected == String()); DirAccessRef da = DirAccess::open(EditorSettings::get_singleton()->get_feature_profiles_dir()); - ERR_FAIL_COND(!da); + ERR_FAIL_COND_MSG(!da, "Cannot open directory '" + EditorSettings::get_singleton()->get_feature_profiles_dir() + "'."); + da->remove(selected + ".profile"); if (selected == current_profile) { _profile_action(PROFILE_CLEAR); @@ -672,7 +674,7 @@ void EditorFeatureProfileManager::_update_selected_profile() { //reload edited, if different from current edited.instance(); Error err = edited->load_from_file(EditorSettings::get_singleton()->get_feature_profiles_dir().plus_file(profile + ".profile")); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Error when loading EditorSettings from file '" + EditorSettings::get_singleton()->get_feature_profiles_dir().plus_file(profile + ".profile") + "'."); } updating_features = true; diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp index 80aeeef868..2db4f03859 100644 --- a/editor/editor_file_dialog.cpp +++ b/editor/editor_file_dialog.cpp @@ -35,6 +35,7 @@ #include "core/os/os.h" #include "core/print_string.h" #include "dependency_editor.h" +#include "editor_file_system.h" #include "editor_resource_preview.h" #include "editor_scale.h" #include "editor_settings.h" @@ -252,6 +253,12 @@ void EditorFileDialog::_post_popup() { else item_list->grab_focus(); + if (mode == MODE_OPEN_DIR) { + file_box->set_visible(false); + } else { + file_box->set_visible(true); + } + if (is_visible_in_tree() && get_current_file() != "") _request_single_thumbnail(get_current_dir().plus_file(get_current_file())); @@ -702,6 +709,9 @@ void EditorFileDialog::update_file_list() { item_list->clear(); + // Scroll back to the top after opening a directory + item_list->get_v_scroll()->set_value(0); + if (display_mode == DISPLAY_THUMBNAILS) { item_list->set_max_columns(0); @@ -1085,7 +1095,7 @@ void EditorFileDialog::_make_dir_confirm() { update_filters(); update_dir(); _push_history(); - + EditorFileSystem::get_singleton()->scan_changes(); //we created a dir, so rescan changes } else { mkdirerr->popup_centered_minsize(Size2(250, 50) * EDSCALE); } @@ -1657,19 +1667,19 @@ EditorFileDialog::EditorFileDialog() { prev_cc->add_child(preview); preview_vb->hide(); - HBoxContainer *filename_hbc = memnew(HBoxContainer); - filename_hbc->add_child(memnew(Label(TTR("File:")))); + file_box = memnew(HBoxContainer); + file_box->add_child(memnew(Label(TTR("File:")))); file = memnew(LineEdit); file->set_stretch_ratio(4); file->set_h_size_flags(SIZE_EXPAND_FILL); - filename_hbc->add_child(file); + file_box->add_child(file); filter = memnew(OptionButton); filter->set_stretch_ratio(3); filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_clip_text(true); // Too many extensions overflow it. - filename_hbc->add_child(filter); - filename_hbc->set_h_size_flags(SIZE_EXPAND_FILL); - item_vb->add_child(filename_hbc); + file_box->add_child(filter); + file_box->set_h_size_flags(SIZE_EXPAND_FILL); + item_vb->add_child(file_box); dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); access = ACCESS_RESOURCES; diff --git a/editor/editor_file_dialog.h b/editor/editor_file_dialog.h index 2ecfa7db15..af52f6af5b 100644 --- a/editor/editor_file_dialog.h +++ b/editor/editor_file_dialog.h @@ -106,10 +106,11 @@ private: TextureRect *preview; VBoxContainer *preview_vb; HSplitContainer *list_hb; + HBoxContainer *file_box; LineEdit *file; + OptionButton *filter; AcceptDialog *mkdirerr; AcceptDialog *exterr; - OptionButton *filter; DirAccess *dir_access; ConfirmationDialog *confirm_save; DependencyRemoveDialog *remove_dialog; diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp index 6d3377a85b..2467e1f722 100644 --- a/editor/editor_file_system.cpp +++ b/editor/editor_file_system.cpp @@ -325,14 +325,12 @@ void EditorFileSystem::_save_filesystem_cache() { String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file(CACHE_FILE_NAME); FileAccess *f = FileAccess::open(fscache, FileAccess::WRITE); - if (f == NULL) { - ERR_PRINTS("Error writing fscache: " + fscache); - } else { - f->store_line(filesystem_settings_version_for_import); - _save_filesystem_cache(filesystem, f); - f->close(); - memdelete(f); - } + ERR_FAIL_COND_MSG(!f, "Cannot create file '" + fscache + "'. Check user write permissions."); + + f->store_line(filesystem_settings_version_for_import); + _save_filesystem_cache(filesystem, f); + f->close(); + memdelete(f); } void EditorFileSystem::_thread_func(void *_userdata) { @@ -389,7 +387,7 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo if (err == ERR_FILE_EOF) { break; } else if (err != OK) { - ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import:" + itos(lines) + " error: " + error_text); + ERR_PRINTS("ResourceFormatImporter::load - '" + p_path + ".import:" + itos(lines) + "' error '" + error_text + "'."); memdelete(f); return false; //parse error, try reimport manually (Avoid reimport loop on broken file) } @@ -437,7 +435,7 @@ bool EditorFileSystem::_test_for_reimport(const String &p_path, bool p_only_impo if (err == ERR_FILE_EOF) { break; } else if (err != OK) { - ERR_PRINTS("ResourceFormatImporter::load - " + p_path + ".import.md5:" + itos(lines) + " error: " + error_text); + ERR_PRINTS("ResourceFormatImporter::load - '" + p_path + ".import.md5:" + itos(lines) + "' error '" + error_text + "'."); memdelete(md5s); return false; // parse error } @@ -736,7 +734,7 @@ void EditorFileSystem::_scan_new_dir(EditorFileSystemDirectory *p_dir, DirAccess da->change_dir(".."); } } else { - ERR_PRINTS("Cannot go into subdir: " + E->get()); + ERR_PRINTS("Cannot go into subdir '" + E->get() + "'."); } p_progress.update(idx, total); @@ -1373,6 +1371,7 @@ void EditorFileSystem::_save_late_updated_files() { //files that already existed, and were modified, need re-scanning for dependencies upon project restart. This is done via saving this special file String fscache = EditorSettings::get_singleton()->get_project_settings_dir().plus_file("filesystem_update4"); FileAccessRef f = FileAccess::open(fscache, FileAccess::WRITE); + ERR_FAIL_COND_MSG(!f, "Cannot create file '" + fscache + "'. Check user write permissions."); for (Set<String>::Element *E = late_update_files.front(); E; E = E->next()) { f->store_line(E->get()); } @@ -1555,7 +1554,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector ERR_CONTINUE(file_importer_name == String()); if (importer_name != String() && importer_name != file_importer_name) { - print_line("one importer: " + importer_name + " the other: " + file_importer_name); + print_line("one importer '" + importer_name + "' the other '" + file_importer_name + "'."); EditorNode::get_singleton()->show_warning(vformat(TTR("There are multiple importers for different types pointing to file %s, import aborted"), p_group_file)); ERR_FAIL_V(ERR_FILE_CORRUPT); } @@ -1599,7 +1598,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector const String &file = E->key(); String base_path = ResourceFormatImporter::get_singleton()->get_import_base_path(file); FileAccessRef f = FileAccess::open(file + ".import", FileAccess::WRITE); - ERR_FAIL_COND_V(!f, ERR_FILE_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_FILE_CANT_OPEN, "Cannot open import file '" + file + ".import'."); //write manually, as order matters ([remap] has to go first for performance). f->store_line("[remap]"); @@ -1660,7 +1659,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector // Store the md5's of the various files. These are stored separately so that the .import files can be version controlled. FileAccessRef md5s = FileAccess::open(base_path + ".md5", FileAccess::WRITE); - ERR_FAIL_COND_V(!md5s, ERR_FILE_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!md5s, ERR_FILE_CANT_OPEN, "Cannot open MD5 file '" + base_path + ".md5'."); md5s->store_line("source_md5=\"" + FileAccess::get_md5(file) + "\""); if (dest_paths.size()) { @@ -1671,7 +1670,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector EditorFileSystemDirectory *fs = NULL; int cpos = -1; bool found = _find_file(file, &fs, cpos); - ERR_FAIL_COND_V(!found, ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(!found, ERR_UNCONFIGURED, "Can't find file '" + file + "'."); //update modified times, to avoid reimport fs->files[cpos]->modified_time = FileAccess::get_modified_time(file); @@ -1705,7 +1704,7 @@ void EditorFileSystem::_reimport_file(const String &p_file) { EditorFileSystemDirectory *fs = NULL; int cpos = -1; bool found = _find_file(p_file, &fs, cpos); - ERR_FAIL_COND(!found); + ERR_FAIL_COND_MSG(!found, "Can't find file '" + p_file + "'."); //try to obtain existing params @@ -1781,13 +1780,13 @@ void EditorFileSystem::_reimport_file(const String &p_file) { Error err = importer->import(p_file, base_path, params, &import_variants, &gen_files, &metadata); if (err != OK) { - ERR_PRINTS("Error importing: " + p_file); + ERR_PRINTS("Error importing '" + p_file + "'."); } //as import is complete, save the .import file FileAccess *f = FileAccess::open(p_file + ".import", FileAccess::WRITE); - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "Cannot open file from path '" + p_file + ".import'."); //write manually, as order matters ([remap] has to go first for performance). f->store_line("[remap]"); @@ -1872,7 +1871,8 @@ void EditorFileSystem::_reimport_file(const String &p_file) { // Store the md5's of the various files. These are stored separately so that the .import files can be version controlled. FileAccess *md5s = FileAccess::open(base_path + ".md5", FileAccess::WRITE); - ERR_FAIL_COND(!md5s); + ERR_FAIL_COND_MSG(!md5s, "Cannot open MD5 file '" + base_path + ".md5'."); + md5s->store_line("source_md5=\"" + FileAccess::get_md5(p_file) + "\""); if (dest_paths.size()) { md5s->store_line("dest_md5=\"" + FileAccess::get_multiple_md5(dest_paths) + "\"\n"); diff --git a/editor/editor_fonts.cpp b/editor/editor_fonts.cpp index 55cae35a4a..97c796c707 100644 --- a/editor/editor_fonts.cpp +++ b/editor/editor_fonts.cpp @@ -64,7 +64,7 @@ Ref<DynamicFont> m_name; \ m_name.instance(); \ m_name->set_size(m_size); \ - if (CustomFont.is_valid()) { \ + if (CustomFontBold.is_valid()) { \ m_name->set_font_data(CustomFontBold); \ m_name->add_fallback(DefaultFontBold); \ } else { \ @@ -232,6 +232,7 @@ void editor_register_fonts(Ref<Theme> p_theme) { // Default font MAKE_DEFAULT_FONT(df, default_font_size); p_theme->set_default_theme_font(df); + p_theme->set_font("main", "EditorFonts", df); // Bold font MAKE_BOLD_FONT(df_bold, default_font_size); diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp index e6df00b48c..dd49e38d7f 100644 --- a/editor/editor_help.cpp +++ b/editor/editor_help.cpp @@ -30,6 +30,7 @@ #include "editor_help.h" +#include "core/os/input.h" #include "core/os/keyboard.h" #include "doc_data_compressed.gen.h" #include "editor/plugins/script_editor_plugin.h" @@ -71,9 +72,12 @@ void EditorHelp::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } } -void EditorHelp::_search(const String &) { +void EditorHelp::_search(bool p_search_previous) { - find_bar->search_next(); + if (p_search_previous) + find_bar->search_prev(); + else + find_bar->search_next(); } void EditorHelp::_class_list_select(const String &p_select) { @@ -168,7 +172,9 @@ void EditorHelp::_class_desc_input(const Ref<InputEvent> &p_input) { void EditorHelp::_class_desc_resized() { // Add extra horizontal margins for better readability. // The margins increase as the width of the editor help container increases. - const int display_margin = MAX(30 * EDSCALE, get_parent_anchorable_rect().size.width - 900 * EDSCALE) * 0.5; + Ref<Font> doc_code_font = get_font("doc_source", "EditorFonts"); + real_t char_width = doc_code_font->get_char_size('x').width; + const int display_margin = MAX(30 * EDSCALE, get_parent_anchorable_rect().size.width - char_width * 120 * EDSCALE) * 0.5; Ref<StyleBox> class_desc_stylebox = EditorNode::get_singleton()->get_theme_base()->get_stylebox("normal", "RichTextLabel")->duplicate(); class_desc_stylebox->set_default_margin(MARGIN_LEFT, display_margin); @@ -257,16 +263,17 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview } class_desc->push_color(symbol_color); - class_desc->add_text(p_method.arguments.size() || is_vararg ? "( " : "("); + class_desc->add_text("("); class_desc->pop(); for (int j = 0; j < p_method.arguments.size(); j++) { class_desc->push_color(text_color); if (j > 0) class_desc->add_text(", "); - _add_type(p_method.arguments[j].type, p_method.arguments[j].enumeration); - class_desc->add_text(" "); + _add_text(p_method.arguments[j].name); + class_desc->add_text(": "); + _add_type(p_method.arguments[j].type, p_method.arguments[j].enumeration); if (p_method.arguments[j].default_value != "") { class_desc->push_color(symbol_color); @@ -291,7 +298,7 @@ void EditorHelp::_add_method(const DocData::MethodDoc &p_method, bool p_overview } class_desc->push_color(symbol_color); - class_desc->add_text(p_method.arguments.size() || is_vararg ? " )" : ")"); + class_desc->add_text(")"); class_desc->pop(); if (p_method.qualifiers != "") { @@ -424,7 +431,7 @@ void EditorHelp::_update_doc() { class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Brief Description:")); + class_desc->add_text(TTR("Brief Description")); class_desc->pop(); class_desc->pop(); @@ -451,7 +458,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Properties"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Properties:")); + class_desc->add_text(TTR("Properties")); class_desc->pop(); class_desc->pop(); @@ -487,6 +494,10 @@ void EditorHelp::_update_doc() { describe = true; } + if (cd.properties[i].overridden) { + describe = false; + } + class_desc->push_cell(); class_desc->push_font(doc_code_font); class_desc->push_color(headline_color); @@ -504,7 +515,7 @@ void EditorHelp::_update_doc() { if (cd.properties[i].default_value != "") { class_desc->push_color(symbol_color); - class_desc->add_text(" [default: "); + class_desc->add_text(cd.properties[i].overridden ? " [override: " : " [default: "); class_desc->pop(); class_desc->push_color(value_color); _add_text(_fix_constant(cd.properties[i].default_value)); @@ -547,7 +558,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Methods"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Methods:")); + class_desc->add_text(TTR("Methods")); class_desc->pop(); class_desc->pop(); @@ -618,7 +629,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Theme Properties"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Theme Properties:")); + class_desc->add_text(TTR("Theme Properties")); class_desc->pop(); class_desc->pop(); @@ -685,7 +696,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Signals"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Signals:")); + class_desc->add_text(TTR("Signals")); class_desc->pop(); class_desc->pop(); @@ -702,15 +713,16 @@ void EditorHelp::_update_doc() { _add_text(cd.signals[i].name); class_desc->pop(); class_desc->push_color(symbol_color); - class_desc->add_text(cd.signals[i].arguments.size() ? "( " : "("); + class_desc->add_text("("); class_desc->pop(); for (int j = 0; j < cd.signals[i].arguments.size(); j++) { class_desc->push_color(text_color); if (j > 0) class_desc->add_text(", "); - _add_type(cd.signals[i].arguments[j].type); - class_desc->add_text(" "); + _add_text(cd.signals[i].arguments[j].name); + class_desc->add_text(": "); + _add_type(cd.signals[i].arguments[j].type); if (cd.signals[i].arguments[j].default_value != "") { class_desc->push_color(symbol_color); @@ -723,7 +735,7 @@ void EditorHelp::_update_doc() { } class_desc->push_color(symbol_color); - class_desc->add_text(cd.signals[i].arguments.size() ? " )" : ")"); + class_desc->add_text(")"); class_desc->pop(); class_desc->pop(); // end monofont if (cd.signals[i].description != "") { @@ -770,7 +782,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Enumerations"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Enumerations:")); + class_desc->add_text(TTR("Enumerations")); class_desc->pop(); class_desc->pop(); class_desc->push_indent(1); @@ -856,7 +868,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Constants"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Constants:")); + class_desc->add_text(TTR("Constants")); class_desc->pop(); class_desc->pop(); class_desc->push_indent(1); @@ -916,7 +928,7 @@ void EditorHelp::_update_doc() { description_line = class_desc->get_line_count() - 2; class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Class Description:")); + class_desc->add_text(TTR("Class Description")); class_desc->pop(); class_desc->pop(); @@ -938,7 +950,7 @@ void EditorHelp::_update_doc() { { class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Online Tutorials:")); + class_desc->add_text(TTR("Online Tutorials")); class_desc->pop(); class_desc->pop(); class_desc->push_indent(1); @@ -980,7 +992,7 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Property Descriptions"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Property Descriptions:")); + class_desc->add_text(TTR("Property Descriptions")); class_desc->pop(); class_desc->pop(); @@ -989,6 +1001,9 @@ void EditorHelp::_update_doc() { for (int i = 0; i < cd.properties.size(); i++) { + if (cd.properties[i].overridden) + continue; + property_line[cd.properties[i].name] = class_desc->get_line_count() - 2; class_desc->push_table(2); @@ -1090,44 +1105,54 @@ void EditorHelp::_update_doc() { section_line.push_back(Pair<String, int>(TTR("Method Descriptions"), class_desc->get_line_count() - 2)); class_desc->push_color(title_color); class_desc->push_font(doc_title_font); - class_desc->add_text(TTR("Method Descriptions:")); + class_desc->add_text(TTR("Method Descriptions")); class_desc->pop(); class_desc->pop(); class_desc->add_newline(); class_desc->add_newline(); - for (int i = 0; i < methods.size(); i++) { + for (int pass = 0; pass < 2; pass++) { + Vector<DocData::MethodDoc> methods_filtered; - class_desc->push_font(doc_code_font); - _add_method(methods[i], false); - class_desc->pop(); + for (int i = 0; i < methods.size(); i++) { + const String &q = methods[i].qualifiers; + if ((pass == 0 && q.find("virtual") != -1) || (pass == 1 && q.find("virtual") == -1)) { + methods_filtered.push_back(methods[i]); + } + } - class_desc->add_newline(); - class_desc->add_newline(); + for (int i = 0; i < methods_filtered.size(); i++) { - class_desc->push_color(text_color); - class_desc->push_font(doc_font); - class_desc->push_indent(1); - if (methods[i].description.strip_edges() != String()) { - _add_text(methods[i].description); - } else { - class_desc->add_image(get_icon("Error", "EditorIcons")); - class_desc->add_text(" "); - class_desc->push_color(comment_color); - class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + class_desc->push_font(doc_code_font); + _add_method(methods_filtered[i], false); class_desc->pop(); - } - class_desc->pop(); - class_desc->pop(); - class_desc->pop(); - class_desc->add_newline(); - class_desc->add_newline(); - class_desc->add_newline(); + class_desc->add_newline(); + class_desc->add_newline(); + + class_desc->push_color(text_color); + class_desc->push_font(doc_font); + class_desc->push_indent(1); + if (methods_filtered[i].description.strip_edges() != String()) { + _add_text(methods_filtered[i].description); + } else { + class_desc->add_image(get_icon("Error", "EditorIcons")); + class_desc->add_text(" "); + class_desc->push_color(comment_color); + class_desc->append_bbcode(TTR("There is currently no description for this method. Please help us by [color=$color][url=$url]contributing one[/url][/color]!").replace("$url", CONTRIBUTE_URL).replace("$color", link_color_text)); + class_desc->pop(); + } + + class_desc->pop(); + class_desc->pop(); + class_desc->pop(); + class_desc->add_newline(); + class_desc->add_newline(); + class_desc->add_newline(); + } } } - scroll_locked = false; } @@ -1199,11 +1224,18 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { Ref<Font> doc_font = p_rt->get_font("doc", "EditorFonts"); Ref<Font> doc_bold_font = p_rt->get_font("doc_bold", "EditorFonts"); Ref<Font> doc_code_font = p_rt->get_font("doc_source", "EditorFonts"); + Color font_color_hl = p_rt->get_color("headline_color", "EditorHelp"); - Color link_color = p_rt->get_color("accent_color", "Editor").linear_interpolate(font_color_hl, 0.8); + Color accent_color = p_rt->get_color("accent_color", "Editor"); + Color link_color = accent_color.linear_interpolate(font_color_hl, 0.8); + Color code_color = accent_color.linear_interpolate(font_color_hl, 0.6); String bbcode = p_bbcode.dedent().replace("\t", "").replace("\r", "").strip_edges(); + // remove extra new lines around code blocks + bbcode = bbcode.replace("[codeblock]\n", "[codeblock]"); + bbcode = bbcode.replace("\n[/codeblock]", "[/codeblock]"); + List<String> tag_stack; bool code_tag = false; @@ -1251,9 +1283,14 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { tag_stack.pop_front(); pos = brk_end + 1; - code_tag = false; - if (tag != "/img") + if (tag != "/img") { p_rt->pop(); + if (code_tag) { + p_rt->pop(); + } + } + code_tag = false; + } else if (code_tag) { p_rt->add_text("["); @@ -1298,6 +1335,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) { //use monospace font p_rt->push_font(doc_code_font); + p_rt->push_color(code_color); code_tag = true; pos = brk_end + 1; tag_stack.push_front(tag); @@ -1444,6 +1482,11 @@ void EditorHelp::_notification(int p_what) { _update_doc(); } break; + case NOTIFICATION_THEME_CHANGED: { + if (is_visible_in_tree()) { + _class_desc_resized(); + } + } break; default: break; } } @@ -1482,8 +1525,8 @@ String EditorHelp::get_class() { return edited_class; } -void EditorHelp::search_again() { - _search(prev_search); +void EditorHelp::search_again(bool p_search_previous) { + _search(p_search_previous); } int EditorHelp::get_scroll() const { @@ -1807,5 +1850,9 @@ void FindBar::_search_text_changed(const String &p_text) { void FindBar::_search_text_entered(const String &p_text) { - search_next(); + if (Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { + search_prev(); + } else { + search_next(); + } } diff --git a/editor/editor_help.h b/editor/editor_help.h index 1019cafffc..23a6e005a0 100644 --- a/editor/editor_help.h +++ b/editor/editor_help.h @@ -158,7 +158,7 @@ class EditorHelp : public VBoxContainer { void _update_doc(); void _request_help(const String &p_string); - void _search(const String &p_str); + void _search(bool p_search_previous = false); void _unhandled_key_input(const Ref<InputEvent> &p_ev); @@ -179,7 +179,7 @@ public: void scroll_to_section(int p_section_index); void popup_search(); - void search_again(); + void search_again(bool p_search_previous = false); String get_class(); diff --git a/editor/editor_help_search.cpp b/editor/editor_help_search.cpp index af79c21f85..27e61362ed 100644 --- a/editor/editor_help_search.cpp +++ b/editor/editor_help_search.cpp @@ -338,10 +338,15 @@ bool EditorHelpSearch::Runner::_phase_match_classes() { if (search_flags & SEARCH_METHODS) for (int i = 0; i < class_doc.methods.size(); i++) { String method_name = (search_flags & SEARCH_CASE_SENSITIVE) ? class_doc.methods[i].name : class_doc.methods[i].name.to_lower(); - if (method_name.find(term) > -1 || - (term.begins_with(".") && method_name.begins_with(term.right(1))) || - (term.ends_with("(") && method_name.ends_with(term.left(term.length() - 1).strip_edges())) || - (term.begins_with(".") && term.ends_with("(") && method_name == term.substr(1, term.length() - 2).strip_edges())) + String aux_term = (search_flags & SEARCH_CASE_SENSITIVE) ? term : term.to_lower(); + + if (aux_term.begins_with(".")) + aux_term = aux_term.right(1); + + if (aux_term.ends_with("(")) + aux_term = aux_term.left(aux_term.length() - 1).strip_edges(); + + if (aux_term.is_subsequence_of(method_name)) match.methods.push_back(const_cast<DocData::MethodDoc *>(&class_doc.methods[i])); } if (search_flags & SEARCH_SIGNALS) @@ -431,9 +436,9 @@ bool EditorHelpSearch::Runner::_phase_select_match() { bool EditorHelpSearch::Runner::_match_string(const String &p_term, const String &p_string) const { if (search_flags & SEARCH_CASE_SENSITIVE) - return p_string.find(p_term) > -1; + return p_term.is_subsequence_of(p_string); else - return p_string.findn(p_term) > -1; + return p_term.is_subsequence_ofi(p_string); } void EditorHelpSearch::Runner::_match_item(TreeItem *p_item, const String &p_text) { diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index a76d34e122..96b6a32914 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -644,7 +644,19 @@ void EditorProperty::_gui_input(const Ref<InputEvent> &p_event) { emit_signal("property_keyed", property, use_keying_next()); if (use_keying_next()) { - call_deferred("emit_changed", property, object->get(property).operator int64_t() + 1, "", false); + if (property == "frame_coords" && (object->is_class("Sprite") || object->is_class("Sprite3D"))) { + Vector2 new_coords = object->get(property); + new_coords.x++; + if (new_coords.x >= object->get("hframes").operator int64_t()) { + new_coords.x = 0; + new_coords.y++; + } + + call_deferred("emit_changed", property, new_coords, "", false); + } else { + call_deferred("emit_changed", property, object->get(property).operator int64_t() + 1, "", false); + } + call_deferred("update_property"); } } @@ -1046,9 +1058,9 @@ void EditorInspectorSection::_notification(int p_what) { if (foldable) { if (object->editor_is_section_unfolded(section)) { - arrow = get_icon("arrow_up", "Tree"); - } else { arrow = get_icon("arrow", "Tree"); + } else { + arrow = get_icon("arrow_collapsed", "Tree"); } } @@ -1087,9 +1099,9 @@ void EditorInspectorSection::_notification(int p_what) { if (foldable) { if (object->editor_is_section_unfolded(section)) { - arrow = get_icon("arrow_up", "Tree"); - } else { arrow = get_icon("arrow", "Tree"); + } else { + arrow = get_icon("arrow_collapsed", "Tree"); } } @@ -1103,13 +1115,12 @@ void EditorInspectorSection::_notification(int p_what) { draw_rect(Rect2(Vector2(), Vector2(get_size().width, h)), bg_color); - int hs = get_constant("hseparation", "Tree"); - + const int arrow_margin = 3; Color color = get_color("font_color", "Tree"); - draw_string(font, Point2(hs, font->get_ascent() + (h - font->get_height()) / 2).floor(), label, color, get_size().width); + draw_string(font, Point2(Math::round((16 + arrow_margin) * EDSCALE), font->get_ascent() + (h - font->get_height()) / 2).floor(), label, color, get_size().width); if (arrow.is_valid()) { - draw_texture(arrow, Point2(get_size().width - arrow->get_width(), (h - arrow->get_height()) / 2).floor()); + draw_texture(arrow, Point2(Math::round(arrow_margin * EDSCALE), (h - arrow->get_height()) / 2).floor()); } } } @@ -1290,7 +1301,7 @@ void EditorInspector::remove_inspector_plugin(const Ref<EditorInspectorPlugin> & } } - ERR_FAIL_COND(idx == -1); + ERR_FAIL_COND_MSG(idx == -1, "Trying to remove nonexistent inspector plugin."); for (int i = idx; i < inspector_plugin_count - 1; i++) { inspector_plugins[i] = inspector_plugins[i + 1]; } @@ -1567,11 +1578,11 @@ void EditorInspector::update_tree() { if (dot != -1) { String ov = name.right(dot); name = name.substr(0, dot); - name = name.camelcase_to_underscore().capitalize(); + name = name.capitalize(); name += ov; } else { - name = name.camelcase_to_underscore().capitalize(); + name = name.capitalize(); } } diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp index b5cdc76115..5474f86c74 100644 --- a/editor/editor_log.cpp +++ b/editor/editor_log.cpp @@ -113,6 +113,10 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) { log->add_text(" "); tool_button->set_icon(icon); } break; + case MSG_TYPE_EDITOR: { + // Distinguish editor messages from messages printed by the project + log->push_color(get_color("font_color", "Editor") * Color(1, 1, 1, 0.6)); + } break; } log->add_text(p_msg); @@ -128,7 +132,7 @@ void EditorLog::set_tool_button(ToolButton *p_tool_button) { void EditorLog::_undo_redo_cbk(void *p_self, const String &p_name) { EditorLog *self = (EditorLog *)p_self; - self->add_message(p_name); + self->add_message(p_name, EditorLog::MSG_TYPE_EDITOR); } void EditorLog::_bind_methods() { diff --git a/editor/editor_log.h b/editor/editor_log.h index bb56bd34fe..10561b9c83 100644 --- a/editor/editor_log.h +++ b/editor/editor_log.h @@ -74,7 +74,8 @@ public: enum MessageType { MSG_TYPE_STD, MSG_TYPE_ERROR, - MSG_TYPE_WARNING + MSG_TYPE_WARNING, + MSG_TYPE_EDITOR }; void add_message(const String &p_msg, MessageType p_type = MSG_TYPE_STD); diff --git a/editor/editor_network_profiler.cpp b/editor/editor_network_profiler.cpp index b90fe96cee..8482c4e38a 100644 --- a/editor/editor_network_profiler.cpp +++ b/editor/editor_network_profiler.cpp @@ -43,9 +43,15 @@ void EditorNetworkProfiler::_bind_methods() { void EditorNetworkProfiler::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { activate->set_icon(get_icon("Play", "EditorIcons")); clear_button->set_icon(get_icon("Clear", "EditorIcons")); + incoming_bandwidth_text->set_right_icon(get_icon("ArrowDown", "EditorIcons")); + outgoing_bandwidth_text->set_right_icon(get_icon("ArrowUp", "EditorIcons")); + + // This needs to be done here to set the faded color when the profiler is first opened + incoming_bandwidth_text->add_color_override("font_color_uneditable", get_color("font_color", "Editor") * Color(1, 1, 1, 0.5)); + outgoing_bandwidth_text->add_color_override("font_color_uneditable", get_color("font_color", "Editor") * Color(1, 1, 1, 0.5)); } } @@ -113,6 +119,14 @@ void EditorNetworkProfiler::set_bandwidth(int p_incoming, int p_outgoing) { incoming_bandwidth_text->set_text(vformat(TTR("%s/s"), String::humanize_size(p_incoming))); outgoing_bandwidth_text->set_text(vformat(TTR("%s/s"), String::humanize_size(p_outgoing))); + + // Make labels more prominent when the bandwidth is greater than 0 to attract user attention + incoming_bandwidth_text->add_color_override( + "font_color_uneditable", + get_color("font_color", "Editor") * Color(1, 1, 1, p_incoming > 0 ? 1 : 0.5)); + outgoing_bandwidth_text->add_color_override( + "font_color_uneditable", + get_color("font_color", "Editor") * Color(1, 1, 1, p_outgoing > 0 ? 1 : 0.5)); } bool EditorNetworkProfiler::is_profiling() { @@ -139,27 +153,32 @@ EditorNetworkProfiler::EditorNetworkProfiler() { hb->add_spacer(); Label *lb = memnew(Label); - lb->set_text("Down "); + lb->set_text(TTR("Down")); hb->add_child(lb); incoming_bandwidth_text = memnew(LineEdit); incoming_bandwidth_text->set_editable(false); - incoming_bandwidth_text->set_custom_minimum_size(Size2(100, 0)); + incoming_bandwidth_text->set_custom_minimum_size(Size2(120, 0) * EDSCALE); incoming_bandwidth_text->set_align(LineEdit::Align::ALIGN_RIGHT); - incoming_bandwidth_text->set_text("0.0 B/s"); hb->add_child(incoming_bandwidth_text); + Control *down_up_spacer = memnew(Control); + down_up_spacer->set_custom_minimum_size(Size2(30, 0) * EDSCALE); + hb->add_child(down_up_spacer); + lb = memnew(Label); - lb->set_text("Up "); + lb->set_text(TTR("Up")); hb->add_child(lb); outgoing_bandwidth_text = memnew(LineEdit); outgoing_bandwidth_text->set_editable(false); - outgoing_bandwidth_text->set_custom_minimum_size(Size2(100, 0)); + outgoing_bandwidth_text->set_custom_minimum_size(Size2(120, 0) * EDSCALE); outgoing_bandwidth_text->set_align(LineEdit::Align::ALIGN_RIGHT); - outgoing_bandwidth_text->set_text("0.0 B/s"); hb->add_child(outgoing_bandwidth_text); + // Set initial texts in the incoming/outgoing bandwidth labels + set_bandwidth(0, 0); + counters_display = memnew(Tree); counters_display->set_custom_minimum_size(Size2(300, 0) * EDSCALE); counters_display->set_v_size_flags(SIZE_EXPAND_FILL); @@ -169,7 +188,7 @@ EditorNetworkProfiler::EditorNetworkProfiler() { counters_display->set_column_titles_visible(true); counters_display->set_column_title(0, TTR("Node")); counters_display->set_column_expand(0, true); - counters_display->set_column_min_width(0, 60); + counters_display->set_column_min_width(0, 60 * EDSCALE); counters_display->set_column_title(1, TTR("Incoming RPC")); counters_display->set_column_expand(1, false); counters_display->set_column_min_width(1, 120 * EDSCALE); diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index a1998a1d7c..d42345d9a2 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -33,6 +33,7 @@ #include "core/bind/core_bind.h" #include "core/class_db.h" #include "core/io/config_file.h" +#include "core/io/image_loader.h" #include "core/io/resource_loader.h" #include "core/io/resource_saver.h" #include "core/io/stream_peer_ssl.h" @@ -56,6 +57,7 @@ #include "editor/editor_help.h" #include "editor/editor_properties.h" #include "editor/editor_settings.h" +#include "editor/editor_spin_slider.h" #include "editor/editor_themes.h" #include "editor/import/editor_import_collada.h" #include "editor/import/editor_scene_importer_gltf.h" @@ -370,7 +372,7 @@ void EditorNode::_notification(int p_what) { case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { scene_tabs->set_tab_close_display_policy((bool(EDITOR_GET("interface/scene_tabs/always_show_close_button")) ? Tabs::CLOSE_BUTTON_SHOW_ALWAYS : Tabs::CLOSE_BUTTON_SHOW_ACTIVE_ONLY)); - Ref<Theme> theme = create_editor_theme(theme_base->get_theme()); + theme = create_editor_theme(theme_base->get_theme()); theme_base->set_theme(theme); gui_base->set_theme(theme); @@ -903,7 +905,7 @@ void EditorNode::_set_scene_metadata(const String &p_file, int p_idx) { } Error err = cf->save(path); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot save config file to '" + path + "'."); } bool EditorNode::_find_and_save_resource(RES p_res, Map<RES, bool> &processed, int32_t flags) { @@ -1469,7 +1471,7 @@ void EditorNode::_dialog_action(String p_file) { config.instance(); Error err = config->load(EditorSettings::get_singleton()->get_editor_layouts_config()); - if (err == ERR_CANT_OPEN) { + if (err == ERR_FILE_CANT_OPEN || err == ERR_FILE_NOT_FOUND) { config.instance(); // new config } else if (err != OK) { show_warning(TTR("Error trying to save layout!")); @@ -2212,27 +2214,27 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { case EDIT_UNDO: { if (Input::get_singleton()->get_mouse_button_mask() & 0x7) { - log->add_message("Can't UNDO while mouse buttons are pressed."); + log->add_message("Can't undo while mouse buttons are pressed.", EditorLog::MSG_TYPE_EDITOR); } else { String action = editor_data.get_undo_redo().get_current_action_name(); if (!editor_data.get_undo_redo().undo()) { - log->add_message("There is nothing to UNDO."); + log->add_message("Nothing to undo.", EditorLog::MSG_TYPE_EDITOR); } else if (action != "") { - log->add_message("UNDO: " + action); + log->add_message("Undo: " + action, EditorLog::MSG_TYPE_EDITOR); } } } break; case EDIT_REDO: { if (Input::get_singleton()->get_mouse_button_mask() & 0x7) { - log->add_message("Can't REDO while mouse buttons are pressed."); + log->add_message("Can't redo while mouse buttons are pressed.", EditorLog::MSG_TYPE_EDITOR); } else { if (!editor_data.get_undo_redo().redo()) { - log->add_message("There is nothing to REDO."); + log->add_message("Nothing to redo.", EditorLog::MSG_TYPE_EDITOR); } else { String action = editor_data.get_undo_redo().get_current_action_name(); - log->add_message("REDO: " + action); + log->add_message("Redo: " + action, EditorLog::MSG_TYPE_EDITOR); } } } break; @@ -2365,6 +2367,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { } } } break; + case RUN_PROJECT_DATA_FOLDER: { + OS::get_singleton()->shell_open(String("file://") + OS::get_singleton()->get_user_data_dir()); + } break; case FILE_EXPLORE_ANDROID_BUILD_TEMPLATES: { OS::get_singleton()->shell_open("file://" + ProjectSettings::get_singleton()->get_resource_path().plus_file("android")); } break; @@ -2519,7 +2524,7 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { bool was_visible = OS::get_singleton()->is_console_visible(); OS::get_singleton()->set_console_visible(!was_visible); - EditorSettings::get_singleton()->set_setting("interface/editor/hide_console_window", !was_visible); + EditorSettings::get_singleton()->set_setting("interface/editor/hide_console_window", was_visible); } break; case EDITOR_SCREENSHOT: { @@ -2571,8 +2576,6 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) { save_all_scenes(); restart_editor(); } break; - default: { - } } } @@ -2597,7 +2600,7 @@ void EditorNode::_save_screenshot(NodePath p_path) { img->flip_y(); viewport->set_clear_mode(Viewport::CLEAR_MODE_ALWAYS); Error error = img->save_png(p_path); - ERR_FAIL_COND(error != OK); + ERR_FAIL_COND_MSG(error != OK, "Cannot save screenshot to file '" + p_path + "'."); } void EditorNode::_tool_menu_option(int p_idx) { @@ -2605,9 +2608,6 @@ void EditorNode::_tool_menu_option(int p_idx) { case TOOLS_ORPHAN_RESOURCES: { orphan_resources->show(); } break; - case RUN_PROJECT_DATA_FOLDER: { - OS::get_singleton()->shell_open(String("file://") + OS::get_singleton()->get_user_data_dir()); - } break; case TOOLS_CUSTOM: { if (tool_menu->get_item_submenu(p_idx) == "") { Array params = tool_menu->get_item_metadata(p_idx); @@ -3133,7 +3133,14 @@ void EditorNode::_clear_undo_history() { void EditorNode::set_current_scene(int p_idx) { + //Save the folding in case the scene gets reloaded. + if (editor_data.get_scene_path(p_idx) != "") + editor_folding.save_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx)); + if (editor_data.check_and_update_scene(p_idx)) { + if (editor_data.get_scene_path(p_idx) != "") + editor_folding.load_scene_folding(editor_data.get_edited_scene_root(p_idx), editor_data.get_scene_path(p_idx)); + call_deferred("_clear_undo_history"); } @@ -3553,6 +3560,7 @@ void EditorNode::register_editor_types() { ClassDB::register_class<AnimationTrackEditPlugin>(); ClassDB::register_class<ScriptCreateDialog>(); ClassDB::register_class<EditorFeatureProfile>(); + ClassDB::register_class<EditorSpinSlider>(); // FIXME: Is this stuff obsolete, or should it be ported to new APIs? ClassDB::register_class<EditorScenePostImport>(); @@ -3632,6 +3640,20 @@ StringName EditorNode::get_object_custom_type_name(const Object *p_object) const return StringName(); } +Ref<ImageTexture> EditorNode::_load_custom_class_icon(const String &p_path) const { + if (p_path.length()) { + Ref<Image> img = memnew(Image); + Error err = ImageLoader::load_image(p_path, img); + if (err == OK) { + Ref<ImageTexture> icon = memnew(ImageTexture); + img->resize(16 * EDSCALE, 16 * EDSCALE, Image::INTERPOLATE_LANCZOS); + icon->create_from_image(img); + return icon; + } + } + return NULL; +} + Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p_fallback) const { ERR_FAIL_COND_V(!p_object || !gui_base, NULL); @@ -3645,8 +3667,10 @@ Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p while (base_script.is_valid()) { StringName name = EditorNode::get_editor_data().script_class_get_name(base_script->get_path()); String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(name); - if (icon_path.length()) - return ResourceLoader::load(icon_path); + Ref<ImageTexture> icon = _load_custom_class_icon(icon_path); + if (icon.is_valid()) { + return icon; + } // should probably be deprecated in 4.x StringName base = base_script->get_instance_base_type(); @@ -3676,7 +3700,7 @@ Ref<Texture> EditorNode::get_object_icon(const Object *p_object, const String &p } Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_fallback) const { - ERR_FAIL_COND_V(p_class.empty(), NULL); + ERR_FAIL_COND_V_MSG(p_class.empty(), NULL, "Class name cannot be empty."); if (gui_base->has_icon(p_class, "EditorIcons")) { return gui_base->get_icon(p_class, "EditorIcons"); @@ -3684,12 +3708,9 @@ Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_f if (ScriptServer::is_global_class(p_class)) { String icon_path = EditorNode::get_editor_data().script_class_get_icon_path(p_class); - RES icon; - - if (FileAccess::exists(icon_path)) { - icon = ResourceLoader::load(icon_path); - if (icon.is_valid()) - return icon; + Ref<ImageTexture> icon = _load_custom_class_icon(icon_path); + if (icon.is_valid()) { + return icon; } Ref<Script> script = ResourceLoader::load(ScriptServer::get_global_class_path(p_class), "Script"); @@ -3697,10 +3718,9 @@ Ref<Texture> EditorNode::get_class_icon(const String &p_class, const String &p_f while (script.is_valid()) { String current_icon_path; script->get_language()->get_global_class_name(script->get_path(), NULL, ¤t_icon_path); - if (FileAccess::exists(current_icon_path)) { - RES texture = ResourceLoader::load(current_icon_path); - if (texture.is_valid()) - return texture; + icon = _load_custom_class_icon(current_icon_path); + if (icon.is_valid()) { + return icon; } script = script->get_base_script(); } @@ -4886,7 +4906,7 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String> &p_paths, Control * } int max_rows = 6; - int num_rows = p_paths.size() > max_rows ? max_rows - 1 : p_paths.size(); //Don't waste a row to say "1 more file" - list it instead. + int num_rows = p_paths.size() > max_rows ? max_rows - 1 : p_paths.size(); // Don't waste a row to say "1 more file" - list it instead. VBoxContainer *vbox = memnew(VBoxContainer); for (int i = 0; i < num_rows; i++) { HBoxContainer *hbox = memnew(HBoxContainer); @@ -4900,6 +4920,7 @@ Variant EditorNode::drag_files_and_dirs(const Vector<String> &p_paths, Control * label->set_text(p_paths[i].get_file()); icon->set_texture(gui_base->get_icon("File", "EditorIcons")); } + icon->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); icon->set_size(Size2(16, 16)); hbox->add_child(icon); hbox->add_child(label); @@ -5150,14 +5171,20 @@ void EditorNode::_open_imported() { } void EditorNode::dim_editor(bool p_dimming, bool p_force_dim) { - // Dimming can be forced regardless of the editor setting, which is useful when quitting the editor + // Dimming can be forced regardless of the editor setting, which is useful when quitting the editor. if ((p_force_dim || EditorSettings::get_singleton()->get("interface/editor/dim_editor_on_dialog_popup")) && p_dimming) { + dimmed = true; gui_base->set_modulate(Color(0.5, 0.5, 0.5)); } else { + dimmed = false; gui_base->set_modulate(Color(1, 1, 1)); } } +bool EditorNode::is_editor_dimmed() const { + return dimmed; +} + void EditorNode::open_export_template_manager() { export_template_manager->popup_manager(); @@ -5466,6 +5493,7 @@ EditorNode::EditorNode() { singleton = this; exiting = false; + dimmed = false; last_checked_version = 0; changing_scene = false; _initializing_addons = false; @@ -5632,6 +5660,9 @@ EditorNode::EditorNode() { editor_export = memnew(EditorExport); add_child(editor_export); + // Exporters might need the theme + theme = create_custom_theme(); + register_exporters(); GLOBAL_DEF("editor/main_run_args", ""); @@ -5673,7 +5704,6 @@ EditorNode::EditorNode() { theme_base->add_child(gui_base); gui_base->set_anchors_and_margins_preset(Control::PRESET_WIDE); - Ref<Theme> theme = create_custom_theme(); theme_base->set_theme(theme); gui_base->set_theme(theme); gui_base->add_style_override("panel", gui_base->get_stylebox("Background", "EditorStyles")); diff --git a/editor/editor_node.h b/editor/editor_node.h index 5ecb472e64..b7775b5e83 100644 --- a/editor/editor_node.h +++ b/editor/editor_node.h @@ -260,6 +260,7 @@ private: int tab_closing; bool exiting; + bool dimmed; int old_split_ofs; VSplitContainer *top_split; @@ -655,6 +656,7 @@ private: void _feature_profile_changed(); bool _is_class_editor_disabled_by_feature_profile(const StringName &p_class); + Ref<ImageTexture> _load_custom_class_icon(const String &p_path) const; protected: void _notification(int p_what); @@ -849,6 +851,7 @@ public: void restart_editor(); void dim_editor(bool p_dimming, bool p_force_dim = false); + bool is_editor_dimmed() const; void edit_current() { _edit_current(); }; diff --git a/editor/editor_path.cpp b/editor/editor_path.cpp index 12510e27de..e4a939c379 100644 --- a/editor/editor_path.cpp +++ b/editor/editor_path.cpp @@ -74,7 +74,12 @@ void EditorPath::_about_to_show() { objects.clear(); get_popup()->clear(); get_popup()->set_size(Size2(get_size().width, 1)); + _add_children_to_popup(obj); + if (get_popup()->get_item_count() == 0) { + get_popup()->add_item(TTR("No sub-resources found.")); + get_popup()->set_item_disabled(0, true); + } } void EditorPath::update_path() { @@ -127,6 +132,15 @@ void EditorPath::_id_pressed(int p_idx) { EditorNode::get_singleton()->push_item(obj); } +void EditorPath::_notification(int p_what) { + + switch (p_what) { + case NOTIFICATION_THEME_CHANGED: { + update_path(); + } break; + } +} + void EditorPath::_bind_methods() { ClassDB::bind_method("_about_to_show", &EditorPath::_about_to_show); diff --git a/editor/editor_path.h b/editor/editor_path.h index 2dc4d21f9b..a84da9f5ac 100644 --- a/editor/editor_path.h +++ b/editor/editor_path.h @@ -48,6 +48,7 @@ class EditorPath : public MenuButton { void _add_children_to_popup(Object *p_obj, int p_depth = 0); protected: + void _notification(int p_what); static void _bind_methods(); public: diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 30fb561fbe..e14beabfa2 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -922,16 +922,29 @@ EditorPropertyFloat::EditorPropertyFloat() { void EditorPropertyEasing::_drag_easing(const Ref<InputEvent> &p_ev) { - Ref<InputEventMouseButton> mb = p_ev; - if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) { - preset->set_global_position(easing_draw->get_global_transform().xform(mb->get_position())); - preset->popup(); - } - if (mb.is_valid() && mb->is_doubleclick() && mb->get_button_index() == BUTTON_LEFT) { - _setup_spin(); + const Ref<InputEventMouseButton> mb = p_ev; + if (mb.is_valid()) { + if (mb->is_doubleclick() && mb->get_button_index() == BUTTON_LEFT) { + _setup_spin(); + } + + if (mb->is_pressed() && mb->get_button_index() == BUTTON_RIGHT) { + preset->set_global_position(easing_draw->get_global_transform().xform(mb->get_position())); + preset->popup(); + + // Ensure the easing doesn't appear as being dragged + dragging = false; + easing_draw->update(); + } + + if (mb->get_button_index() == BUTTON_LEFT) { + dragging = mb->is_pressed(); + // Update to display the correct dragging color + easing_draw->update(); + } } - Ref<InputEventMouseMotion> mm = p_ev; + const Ref<InputEventMouseMotion> mm = p_ev; if (mm.is_valid() && mm->get_button_mask() & BUTTON_MASK_LEFT) { @@ -969,13 +982,19 @@ void EditorPropertyEasing::_draw_easing() { Rect2 r(Point2(), s); r = r.grow(3); - int points = 48; + const int points = 48; float prev = 1.0; - float exp = get_edited_object()->get(get_edited_property()); + const float exp = get_edited_object()->get(get_edited_property()); - Ref<Font> f = get_font("font", "Label"); - Color color = get_color("font_color", "Label"); + const Ref<Font> f = get_font("font", "Label"); + const Color font_color = get_color("font_color", "Label"); + Color line_color; + if (dragging) { + line_color = get_color("accent_color", "Editor"); + } else { + line_color = get_color("font_color", "Label") * Color(1, 1, 1, 0.9); + } Vector<Point2> lines; for (int i = 1; i <= points; i++) { @@ -983,7 +1002,7 @@ void EditorPropertyEasing::_draw_easing() { float ifl = i / float(points); float iflp = (i - 1) / float(points); - float h = 1.0 - Math::ease(ifl, exp); + const float h = 1.0 - Math::ease(ifl, exp); if (flip) { ifl = 1.0 - ifl; @@ -995,8 +1014,8 @@ void EditorPropertyEasing::_draw_easing() { prev = h; } - easing_draw->draw_multiline(lines, color, 1.0, true); - f->draw(ci, Point2(10, 10 + f->get_ascent()), String::num(exp, 2), color); + easing_draw->draw_multiline(lines, line_color, 1.0, true); + f->draw(ci, Point2(10, 10 + f->get_ascent()), String::num(exp, 2), font_color); } void EditorPropertyEasing::update_property() { @@ -1033,6 +1052,9 @@ void EditorPropertyEasing::_spin_value_changed(double p_value) { void EditorPropertyEasing::_spin_focus_exited() { spin->hide(); + // Ensure the easing doesn't appear as being dragged + dragging = false; + easing_draw->update(); } void EditorPropertyEasing::setup(bool p_full, bool p_flip) { @@ -1095,6 +1117,7 @@ EditorPropertyEasing::EditorPropertyEasing() { spin->hide(); add_child(spin); + dragging = false; flip = false; full = false; } @@ -1861,6 +1884,23 @@ void EditorPropertyColor::_bind_methods() { void EditorPropertyColor::update_property() { picker->set_pick_color(get_edited_object()->get(get_edited_property())); + const Color color = picker->get_pick_color(); + + // Add a tooltip to display each channel's values without having to click the ColorPickerButton + if (picker->is_editing_alpha()) { + picker->set_tooltip(vformat( + "R: %s\nG: %s\nB: %s\nA: %s", + rtos(color.r).pad_decimals(2), + rtos(color.g).pad_decimals(2), + rtos(color.b).pad_decimals(2), + rtos(color.a).pad_decimals(2))); + } else { + picker->set_tooltip(vformat( + "R: %s\nG: %s\nB: %s", + rtos(color.r).pad_decimals(2), + rtos(color.g).pad_decimals(2), + rtos(color.b).pad_decimals(2))); + } } void EditorPropertyColor::setup(bool p_show_alpha) { @@ -2038,7 +2078,7 @@ void EditorPropertyResource::_file_selected(const String &p_path) { RES res = ResourceLoader::load(p_path); - ERR_FAIL_COND(res.is_null()); + ERR_FAIL_COND_MSG(res.is_null(), "Cannot load resource from path '" + p_path + "'."); List<PropertyInfo> prop_list; get_edited_object()->get_property_list(&prop_list); @@ -2182,7 +2222,14 @@ void EditorPropertyResource::_menu_option(int p_which) { case OBJ_MENU_NEW_SCRIPT: { if (Object::cast_to<Node>(get_edited_object())) { - EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(get_edited_object())); + EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(get_edited_object()), false); + } + + } break; + case OBJ_MENU_EXTEND_SCRIPT: { + + if (Object::cast_to<Node>(get_edited_object())) { + EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(get_edited_object()), true); } } break; @@ -2315,7 +2362,8 @@ void EditorPropertyResource::_update_menu_items() { menu->clear(); if (get_edited_property() == "script" && base_type == "Script" && Object::cast_to<Node>(get_edited_object())) { - menu->add_icon_item(get_icon("Script", "EditorIcons"), TTR("New Script"), OBJ_MENU_NEW_SCRIPT); + menu->add_icon_item(get_icon("ScriptCreate", "EditorIcons"), TTR("New Script"), OBJ_MENU_NEW_SCRIPT); + menu->add_icon_item(get_icon("ScriptExtend", "EditorIcons"), TTR("Extend Script"), OBJ_MENU_EXTEND_SCRIPT); menu->add_separator(); } else if (base_type != "") { int idx = 0; @@ -2376,19 +2424,11 @@ void EditorPropertyResource::_update_menu_items() { inheritors_array.push_back(t); - int id = TYPE_BASE_ID + idx; + if (!icon.is_valid()) + icon = get_icon(has_icon(t, "EditorIcons") ? t : "Object", "EditorIcons"); - if (!icon.is_valid() && has_icon(t, "EditorIcons")) { - icon = get_icon(t, "EditorIcons"); - } - - if (icon.is_valid()) { - - menu->add_icon_item(icon, vformat(TTR("New %s"), t), id); - } else { - - menu->add_item(vformat(TTR("New %s"), t), id); - } + int id = TYPE_BASE_ID + idx; + menu->add_icon_item(icon, vformat(TTR("New %s"), t), id); idx++; } @@ -2592,14 +2632,6 @@ void EditorPropertyResource::update_property() { get_tree()->call_deferred("call_group", "_editor_resource_properties", "_fold_other_editors", this); } opened_editor = true; - /* - Button *open_in_editor = memnew(Button); - open_in_editor->set_text(TTR("Open Editor")); - open_in_editor->set_icon(get_icon("Edit", "EditorIcons")); - sub_inspector_vbox->add_child(open_in_editor); - open_in_editor->connect("pressed", this, "_open_editor_pressed"); - open_in_editor->set_h_size_flags(SIZE_SHRINK_CENTER); - */ } } @@ -2628,7 +2660,7 @@ void EditorPropertyResource::update_property() { assign->set_text(TTR("[empty]")); } else { - assign->set_icon(EditorNode::get_singleton()->get_object_icon(res.operator->(), "Node")); + assign->set_icon(EditorNode::get_singleton()->get_object_icon(res.operator->(), "Object")); if (res->get_name() != String()) { assign->set_text(res->get_name()); diff --git a/editor/editor_properties.h b/editor/editor_properties.h index adf7779dc4..952b0447e2 100644 --- a/editor/editor_properties.h +++ b/editor/editor_properties.h @@ -311,6 +311,7 @@ class EditorPropertyEasing : public EditorProperty { EditorSpinSlider *spin; bool setting; + bool dragging; bool full; bool flip; @@ -549,7 +550,8 @@ class EditorPropertyResource : public EditorProperty { OBJ_MENU_COPY = 5, OBJ_MENU_PASTE = 6, OBJ_MENU_NEW_SCRIPT = 7, - OBJ_MENU_SHOW_IN_FILE_SYSTEM = 8, + OBJ_MENU_EXTEND_SCRIPT = 8, + OBJ_MENU_SHOW_IN_FILE_SYSTEM = 9, TYPE_BASE_ID = 100, CONVERT_BASE_ID = 1000 diff --git a/editor/editor_properties_array_dict.cpp b/editor/editor_properties_array_dict.cpp index ff19be8bd5..c75b66c601 100644 --- a/editor/editor_properties_array_dict.cpp +++ b/editor/editor_properties_array_dict.cpp @@ -264,7 +264,9 @@ void EditorPropertyArray::update_property() { edit->set_text(String("(Nil) ") + arrtype); edit->set_pressed(false); if (vbox) { + set_bottom_editor(NULL); memdelete(vbox); + vbox = NULL; } return; } @@ -473,16 +475,16 @@ void EditorPropertyArray::setup(Variant::Type p_array_type, const String &p_hint array_type = p_array_type; if (array_type == Variant::ARRAY && !p_hint_string.empty()) { - int hint_subtype_seperator = p_hint_string.find(":"); - if (hint_subtype_seperator >= 0) { - String subtype_string = p_hint_string.substr(0, hint_subtype_seperator); + int hint_subtype_separator = p_hint_string.find(":"); + if (hint_subtype_separator >= 0) { + String subtype_string = p_hint_string.substr(0, hint_subtype_separator); int slash_pos = subtype_string.find("/"); if (slash_pos >= 0) { subtype_hint = PropertyHint(subtype_string.substr(slash_pos + 1, subtype_string.size() - slash_pos - 1).to_int()); subtype_string = subtype_string.substr(0, slash_pos); } - subtype_hint_string = p_hint_string.substr(hint_subtype_seperator + 1, p_hint_string.size() - hint_subtype_seperator - 1); + subtype_hint_string = p_hint_string.substr(hint_subtype_separator + 1, p_hint_string.size() - hint_subtype_separator - 1); subtype = Variant::Type(subtype_string.to_int()); } } @@ -631,7 +633,9 @@ void EditorPropertyDictionary::update_property() { edit->set_text("Dictionary (Nil)"); //This provides symmetry with the array property. edit->set_pressed(false); if (vbox) { + set_bottom_editor(NULL); memdelete(vbox); + vbox = NULL; } return; } diff --git a/editor/editor_resource_preview.cpp b/editor/editor_resource_preview.cpp index 5c15ebb1eb..55f9347045 100644 --- a/editor/editor_resource_preview.cpp +++ b/editor/editor_resource_preview.cpp @@ -116,7 +116,7 @@ void EditorResourcePreview::_preview_ready(const String &p_str, const Ref<Textur uint64_t modified_time = 0; if (p_str.begins_with("ID:")) { - hash = p_str.get_slicec(':', 2).to_int(); + hash = uint32_t(p_str.get_slicec(':', 2).to_int64()); path = "ID:" + p_str.get_slicec(':', 1); } else { modified_time = FileAccess::get_modified_time(path); @@ -201,9 +201,8 @@ void EditorResourcePreview::_generate_preview(Ref<ImageTexture> &r_texture, Ref< if (has_small_texture) { ResourceSaver::save(cache_base + "_small.png", r_small_texture); } - Error err; - FileAccess *f = FileAccess::open(cache_base + ".txt", FileAccess::WRITE, &err); - ERR_FAIL_COND(err != OK); + FileAccess *f = FileAccess::open(cache_base + ".txt", FileAccess::WRITE); + ERR_FAIL_COND_MSG(!f, "Cannot create file '" + cache_base + ".txt'. Check user write permissions."); f->store_line(itos(thumbnail_size)); f->store_line(itos(has_small_texture)); f->store_line(itos(FileAccess::get_modified_time(p_item.path))); @@ -295,11 +294,17 @@ void EditorResourcePreview::_thread() { //update modified time f = FileAccess::open(file, FileAccess::WRITE); - f->store_line(itos(thumbnail_size)); - f->store_line(itos(has_small_texture)); - f->store_line(itos(modtime)); - f->store_line(md5); - memdelete(f); + if (!f) { + // Not returning as this would leave the thread hanging and would require + // some proper cleanup/disabling of resource preview generation. + ERR_PRINTS("Cannot create file '" + file + "'. Check user write permissions."); + } else { + f->store_line(itos(thumbnail_size)); + f->store_line(itos(has_small_texture)); + f->store_line(itos(modtime)); + f->store_line(md5); + memdelete(f); + } } } else { memdelete(f); @@ -450,7 +455,7 @@ void EditorResourcePreview::check_for_invalidation(const String &p_path) { } void EditorResourcePreview::start() { - ERR_FAIL_COND(thread); + ERR_FAIL_COND_MSG(thread, "Thread already started."); thread = Thread::create(_thread_func, this); } diff --git a/editor/editor_run_native.cpp b/editor/editor_run_native.cpp index 585ea0ec69..64e90f2488 100644 --- a/editor/editor_run_native.cpp +++ b/editor/editor_run_native.cpp @@ -75,20 +75,18 @@ void EditorRunNative::_notification(int p_what) { Ref<EditorExportPlatform> eep = EditorExport::get_singleton()->get_export_platform(E->key()); MenuButton *mb = E->get(); - int dc = eep->get_device_count(); + int dc = eep->get_options_count(); if (dc == 0) { mb->hide(); } else { mb->get_popup()->clear(); mb->show(); - if (dc == 1) { - mb->set_tooltip(eep->get_device_name(0) + "\n\n" + eep->get_device_info(0).strip_edges()); - } else { - mb->set_tooltip("Select device from the list"); + mb->set_tooltip(eep->get_options_tooltip()); + if (dc > 1) { for (int i = 0; i < dc; i++) { - mb->get_popup()->add_icon_item(get_icon("Play", "EditorIcons"), eep->get_device_name(i)); - mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() - 1, eep->get_device_info(i).strip_edges()); + mb->get_popup()->add_icon_item(eep->get_option_icon(i), eep->get_option_label(i)); + mb->get_popup()->set_item_tooltip(mb->get_popup()->get_item_count() - 1, eep->get_option_tooltip(i)); } } } @@ -111,7 +109,7 @@ void EditorRunNative::_run_native(int p_idx, int p_platform) { ERR_FAIL_COND(eep.is_null()); if (p_idx == -1) { - if (eep->get_device_count() == 1) { + if (eep->get_options_count() == 1) { menus[p_platform]->get_popup()->hide(); p_idx = 0; } else { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 479fe5f0cb..a3a02dbd4c 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -436,7 +436,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { _initial_set("text_editor/indent/size", 4); hints["text_editor/indent/size"] = PropertyInfo(Variant::INT, "text_editor/indent/size", PROPERTY_HINT_RANGE, "1, 64, 1"); // size of 0 crashes. _initial_set("text_editor/indent/auto_indent", true); - _initial_set("text_editor/indent/convert_indent_on_save", false); + _initial_set("text_editor/indent/convert_indent_on_save", true); _initial_set("text_editor/indent/draw_tabs", true); _initial_set("text_editor/indent/draw_spaces", false); @@ -559,8 +559,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) { hints["editors/3d/freelook/freelook_base_speed"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_base_speed", PROPERTY_HINT_RANGE, "0.0, 10, 0.01"); _initial_set("editors/3d/freelook/freelook_activation_modifier", 0); hints["editors/3d/freelook/freelook_activation_modifier"] = PropertyInfo(Variant::INT, "editors/3d/freelook/freelook_activation_modifier", PROPERTY_HINT_ENUM, "None,Shift,Alt,Meta,Ctrl"); - _initial_set("editors/3d/freelook/freelook_modifier_speed_factor", 3.0); - hints["editors/3d/freelook/freelook_modifier_speed_factor"] = PropertyInfo(Variant::REAL, "editors/3d/freelook/freelook_modifier_speed_factor", PROPERTY_HINT_RANGE, "0.0, 10.0, 0.1"); _initial_set("editors/3d/freelook/freelook_speed_zoom_link", false); // 2D @@ -666,6 +664,7 @@ void EditorSettings::_load_default_text_editor_theme() { _initial_set("text_editor/highlighting/keyword_color", Color(1.0, 1.0, 0.7)); _initial_set("text_editor/highlighting/base_type_color", Color(0.64, 1.0, 0.83)); _initial_set("text_editor/highlighting/engine_type_color", Color(0.51, 0.83, 1.0)); + _initial_set("text_editor/highlighting/user_type_color", Color(0.42, 0.67, 0.93)); _initial_set("text_editor/highlighting/comment_color", Color(0.4, 0.4, 0.4)); _initial_set("text_editor/highlighting/string_color", Color(0.94, 0.43, 0.75)); _initial_set("text_editor/highlighting/background_color", dark_theme ? Color(0.0, 0.0, 0.0, 0.23) : Color(0.2, 0.23, 0.31)); @@ -793,13 +792,13 @@ void EditorSettings::create() { self_contained = true; Error err = extra_config->load(exe_path + "/._sc_"); if (err != OK) { - ERR_PRINTS("Can't load config from path: " + exe_path + "/._sc_"); + ERR_PRINTS("Can't load config from path '" + exe_path + "/._sc_'."); } } else if (d->file_exists(exe_path + "/_sc_")) { self_contained = true; Error err = extra_config->load(exe_path + "/_sc_"); if (err != OK) { - ERR_PRINTS("Can't load config from path: " + exe_path + "/_sc_"); + ERR_PRINTS("Can't load config from path '" + exe_path + "/_sc_'."); } } memdelete(d); @@ -1235,10 +1234,10 @@ void EditorSettings::set_project_metadata(const String &p_section, const String String path = get_project_settings_dir().plus_file("project_metadata.cfg"); Error err; err = cf->load(path); - ERR_FAIL_COND(err != OK && err != ERR_FILE_NOT_FOUND); + ERR_FAIL_COND_MSG(err != OK && err != ERR_FILE_NOT_FOUND, "Cannot load editor settings from file '" + path + "'."); cf->set_value(p_section, p_key, p_data); err = cf->save(path); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot save editor settings to file '" + path + "'."); } Variant EditorSettings::get_project_metadata(const String &p_section, const String &p_key, Variant p_default) const { diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp index 35fe366526..fbc4a5ee5c 100644 --- a/editor/editor_spin_slider.cpp +++ b/editor/editor_spin_slider.cpp @@ -109,15 +109,10 @@ void EditorSpinSlider::_gui_input(const Ref<InputEvent> &p_event) { } if (grabbing_spinner) { - if (mm->get_control() || updown_offset != -1) { - set_value(Math::round(get_value())); - if (ABS(grabbing_spinner_dist_cache) > 6) { - set_value(get_value() + SGN(grabbing_spinner_dist_cache)); - grabbing_spinner_dist_cache = 0; - pre_grab_value = get_value(); - } + if (mm->get_control()) { + set_value(Math::round(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10)); } else { - set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache * 10); + set_value(pre_grab_value + get_step() * grabbing_spinner_dist_cache); } } } else if (updown_offset != -1) { @@ -233,9 +228,9 @@ void EditorSpinSlider::_notification(int p_what) { draw_style_box(focus, Rect2(Vector2(), get_size())); } - draw_string(font, Vector2(sb->get_offset().x, vofs), label, lc * Color(1, 1, 1, 0.5)); + draw_string(font, Vector2(Math::round(sb->get_offset().x), vofs), label, lc * Color(1, 1, 1, 0.5)); - draw_string(font, Vector2(sb->get_offset().x + string_width + sep, vofs), numstr, fc, number_width); + draw_string(font, Vector2(Math::round(sb->get_offset().x + string_width + sep), vofs), numstr, fc, number_width); if (get_step() == 1) { Ref<Texture> updown2 = get_icon("updown", "SpinBox"); diff --git a/editor/editor_sub_scene.cpp b/editor/editor_sub_scene.cpp index 987033b123..a77051c80b 100644 --- a/editor/editor_sub_scene.cpp +++ b/editor/editor_sub_scene.cpp @@ -97,8 +97,14 @@ void EditorSubScene::_fill_tree(Node *p_node, TreeItem *p_parent) { } void EditorSubScene::_selected_changed() { - selection.clear(); - is_root = false; + TreeItem *item = tree->get_selected(); + ERR_FAIL_COND(!item); + Node *n = item->get_metadata(0); + + if (!n || !selection.find(n)) { + selection.clear(); + is_root = false; + } } void EditorSubScene::_item_multi_selected(Object *p_object, int p_cell, bool p_selected) { @@ -116,6 +122,11 @@ void EditorSubScene::_item_multi_selected(Object *p_object, int p_cell, bool p_s selection.clear(); } selection.push_back(n); + } else { + List<Node *>::Element *E = selection.find(n); + + if (E) + selection.erase(E); } } } diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index e29e44caa2..f05c7709d4 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -203,6 +203,7 @@ void editor_register_and_generate_icons(Ref<Theme> p_theme, bool p_dark_theme = exceptions.push_back("StatusSuccess"); exceptions.push_back("StatusWarning"); exceptions.push_back("NodeWarning"); + exceptions.push_back("OverbrightIndicator"); ImageLoaderSVG::set_convert_colors(&dark_icon_color_dictionary); @@ -367,6 +368,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("box_selection_fill_color", "Editor", accent_color * Color(1, 1, 1, 0.3)); theme->set_color("box_selection_stroke_color", "Editor", accent_color * Color(1, 1, 1, 0.8)); + theme->set_color("axis_x_color", "Editor", Color(0.96, 0.20, 0.32)); + theme->set_color("axis_y_color", "Editor", Color(0.53, 0.84, 0.01)); + theme->set_color("axis_z_color", "Editor", Color(0.16, 0.55, 0.96)); + theme->set_color("font_color", "Editor", font_color); theme->set_color("highlighted_font_color", "Editor", font_color_hl); theme->set_color("disabled_font_color", "Editor", font_color_disabled); @@ -643,9 +648,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_constant("hseparation", "CheckBox", 4 * EDSCALE); theme->set_constant("check_vadjust", "CheckBox", 0 * EDSCALE); + // PopupDialog + theme->set_stylebox("panel", "PopupDialog", style_popup); + // PopupMenu - Ref<StyleBoxFlat> style_popup_menu = style_popup; - theme->set_stylebox("panel", "PopupMenu", style_popup_menu); + theme->set_stylebox("panel", "PopupMenu", style_popup); theme->set_stylebox("separator", "PopupMenu", style_popup_separator); theme->set_stylebox("labeled_separator_left", "PopupMenu", style_popup_labeled_separator_left); theme->set_stylebox("labeled_separator_right", "PopupMenu", style_popup_labeled_separator_right); @@ -685,12 +692,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { // Tree theme->set_icon("checked", "Tree", theme->get_icon("GuiChecked", "EditorIcons")); theme->set_icon("unchecked", "Tree", theme->get_icon("GuiUnchecked", "EditorIcons")); - theme->set_icon("arrow_up", "Tree", theme->get_icon("GuiTreeArrowUp", "EditorIcons")); theme->set_icon("arrow", "Tree", theme->get_icon("GuiTreeArrowDown", "EditorIcons")); theme->set_icon("arrow_collapsed", "Tree", theme->get_icon("GuiTreeArrowRight", "EditorIcons")); theme->set_icon("updown", "Tree", theme->get_icon("GuiTreeUpdown", "EditorIcons")); theme->set_icon("select_arrow", "Tree", theme->get_icon("GuiDropdown", "EditorIcons")); - theme->set_icon("select_option", "Tree", theme->get_icon("GuiTreeOption", "EditorIcons")); theme->set_stylebox("bg_focus", "Tree", style_focus); theme->set_stylebox("custom_button", "Tree", make_empty_stylebox()); theme->set_stylebox("custom_button_pressed", "Tree", make_empty_stylebox()); @@ -704,7 +709,6 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("drop_position_color", "Tree", accent_color); theme->set_constant("vseparation", "Tree", (extra_spacing + default_margin_size) * EDSCALE); theme->set_constant("hseparation", "Tree", (extra_spacing + default_margin_size) * EDSCALE); - theme->set_constant("guide_width", "Tree", border_width); theme->set_constant("item_margin", "Tree", 3 * default_margin_size * EDSCALE); theme->set_constant("button_margin", "Tree", default_margin_size * EDSCALE); theme->set_constant("draw_relationship_lines", "Tree", relationship_line_opacity >= 0.01); @@ -717,6 +721,11 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { style_tree_btn->set_border_width_all(0); theme->set_stylebox("button_pressed", "Tree", style_tree_btn); + Ref<StyleBoxFlat> style_tree_hover = style_default->duplicate(); + style_tree_hover->set_bg_color(highlight_color * Color(1, 1, 1, 0.4)); + style_tree_hover->set_border_width_all(0); + theme->set_stylebox("hover", "Tree", style_tree_hover); + Ref<StyleBoxFlat> style_tree_focus = style_default->duplicate(); style_tree_focus->set_bg_color(highlight_color); style_tree_focus->set_border_width_all(0); @@ -783,7 +792,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_color("font_color_fg", "Tabs", font_color); theme->set_color("font_color_bg", "Tabs", font_color_disabled); theme->set_icon("menu", "TabContainer", theme->get_icon("GuiTabMenu", "EditorIcons")); - theme->set_icon("menu_hl", "TabContainer", theme->get_icon("GuiTabMenu", "EditorIcons")); + theme->set_icon("menu_highlight", "TabContainer", theme->get_icon("GuiTabMenuHl", "EditorIcons")); theme->set_stylebox("SceneTabFG", "EditorStyles", style_tab_selected); theme->set_stylebox("SceneTabBG", "EditorStyles", style_tab_unselected); theme->set_icon("close", "Tabs", theme->get_icon("GuiClose", "EditorIcons")); @@ -793,10 +802,10 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("decrement", "TabContainer", theme->get_icon("GuiScrollArrowLeft", "EditorIcons")); theme->set_icon("increment", "Tabs", theme->get_icon("GuiScrollArrowRight", "EditorIcons")); theme->set_icon("decrement", "Tabs", theme->get_icon("GuiScrollArrowLeft", "EditorIcons")); - theme->set_icon("increment_highlight", "Tabs", theme->get_icon("GuiScrollArrowRight", "EditorIcons")); - theme->set_icon("decrement_highlight", "Tabs", theme->get_icon("GuiScrollArrowLeft", "EditorIcons")); - theme->set_icon("increment_highlight", "TabContainer", theme->get_icon("GuiScrollArrowRight", "EditorIcons")); - theme->set_icon("decrement_highlight", "TabContainer", theme->get_icon("GuiScrollArrowLeft", "EditorIcons")); + theme->set_icon("increment_highlight", "Tabs", theme->get_icon("GuiScrollArrowRightHl", "EditorIcons")); + theme->set_icon("decrement_highlight", "Tabs", theme->get_icon("GuiScrollArrowLeftHl", "EditorIcons")); + theme->set_icon("increment_highlight", "TabContainer", theme->get_icon("GuiScrollArrowRightHl", "EditorIcons")); + theme->set_icon("decrement_highlight", "TabContainer", theme->get_icon("GuiScrollArrowLeftHl", "EditorIcons")); theme->set_constant("hseparation", "Tabs", 4 * EDSCALE); // Content of each tab @@ -1080,7 +1089,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("port", "GraphNode", theme->get_icon("GuiGraphNodePort", "EditorIcons")); // GridContainer - theme->set_constant("vseperation", "GridContainer", (extra_spacing + default_margin_size) * EDSCALE); + theme->set_constant("vseparation", "GridContainer", (extra_spacing + default_margin_size) * EDSCALE); // FileDialog theme->set_icon("folder", "FileDialog", theme->get_icon("Folder", "EditorIcons")); @@ -1098,6 +1107,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { theme->set_icon("screen_picker", "ColorPicker", theme->get_icon("ColorPick", "EditorIcons")); theme->set_icon("add_preset", "ColorPicker", theme->get_icon("Add", "EditorIcons")); theme->set_icon("preset_bg", "ColorPicker", theme->get_icon("GuiMiniCheckerboard", "EditorIcons")); + theme->set_icon("overbright_indicator", "ColorPicker", theme->get_icon("OverbrightIndicator", "EditorIcons")); theme->set_icon("bg", "ColorPickerButton", theme->get_icon("GuiMiniCheckerboard", "EditorIcons")); @@ -1122,7 +1132,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { const Color symbol_color = Color(0.34, 0.57, 1.0).linear_interpolate(mono_color, dark_theme ? 0.5 : 0.3); const Color keyword_color = Color(1.0, 0.44, 0.52); const Color basetype_color = dark_theme ? Color(0.26, 1.0, 0.76) : Color(0.0, 0.76, 0.38); - const Color type_color = basetype_color.linear_interpolate(mono_color, dark_theme ? 0.7 : 0.5); + const Color type_color = basetype_color.linear_interpolate(mono_color, dark_theme ? 0.4 : 0.3); + const Color usertype_color = basetype_color.linear_interpolate(mono_color, dark_theme ? 0.7 : 0.5); const Color comment_color = dim_color; const Color string_color = (dark_theme ? Color(1.0, 0.85, 0.26) : Color(1.0, 0.82, 0.09)).linear_interpolate(mono_color, dark_theme ? 0.5 : 0.3); @@ -1161,6 +1172,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) { setting->set_initial_value("text_editor/highlighting/keyword_color", keyword_color, true); setting->set_initial_value("text_editor/highlighting/base_type_color", basetype_color, true); setting->set_initial_value("text_editor/highlighting/engine_type_color", type_color, true); + setting->set_initial_value("text_editor/highlighting/user_type_color", usertype_color, true); setting->set_initial_value("text_editor/highlighting/comment_color", comment_color, true); setting->set_initial_value("text_editor/highlighting/string_color", string_color, true); setting->set_initial_value("text_editor/highlighting/background_color", te_background_color, true); diff --git a/editor/editor_vcs_interface.cpp b/editor/editor_vcs_interface.cpp index 8da1777871..4df2a06736 100644 --- a/editor/editor_vcs_interface.cpp +++ b/editor/editor_vcs_interface.cpp @@ -78,18 +78,12 @@ Dictionary EditorVCSInterface::_get_modified_files_data() { } void EditorVCSInterface::_stage_file(String p_file_path) { - - return; } void EditorVCSInterface::_unstage_file(String p_file_path) { - - return; } void EditorVCSInterface::_commit(String p_msg) { - - return; } Array EditorVCSInterface::_get_file_diff(String p_file_path) { @@ -134,7 +128,6 @@ void EditorVCSInterface::stage_file(String p_file_path) { call("_stage_file", p_file_path); } - return; } void EditorVCSInterface::unstage_file(String p_file_path) { @@ -143,7 +136,6 @@ void EditorVCSInterface::unstage_file(String p_file_path) { call("_unstage_file", p_file_path); } - return; } bool EditorVCSInterface::is_addon_ready() { @@ -157,7 +149,6 @@ void EditorVCSInterface::commit(String p_msg) { call("_commit", p_msg); } - return; } Array EditorVCSInterface::get_file_diff(String p_file_path) { diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp index 536cfaa1dd..f47f9b8b92 100644 --- a/editor/export_template_manager.cpp +++ b/editor/export_template_manager.cpp @@ -69,9 +69,15 @@ void ExportTemplateManager::_update_template_list() { memdelete(d); String current_version = VERSION_FULL_CONFIG; - // Downloadable export templates are only available for stable, alpha, beta and RC versions. + // Downloadable export templates are only available for stable and official alpha/beta/RC builds + // (which always have a number following their status, e.g. "alpha1"). // Therefore, don't display download-related features when using a development version - const bool downloads_available = String(VERSION_STATUS) != String("dev"); + // (whose builds aren't numbered). + const bool downloads_available = + String(VERSION_STATUS) != String("dev") && + String(VERSION_STATUS) != String("alpha") && + String(VERSION_STATUS) != String("beta") && + String(VERSION_STATUS) != String("rc"); Label *current = memnew(Label); current->set_h_size_flags(SIZE_EXPAND_FILL); @@ -155,38 +161,27 @@ void ExportTemplateManager::_uninstall_template(const String &p_version) { void ExportTemplateManager::_uninstall_template_confirm() { - DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - Error err = d->change_dir(EditorSettings::get_singleton()->get_templates_dir()); - - ERR_FAIL_COND(err != OK); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + const String &templates_dir = EditorSettings::get_singleton()->get_templates_dir(); + Error err = da->change_dir(templates_dir); + ERR_FAIL_COND_MSG(err != OK, "Could not access templates directory at '" + templates_dir + "'."); + err = da->change_dir(to_remove); + ERR_FAIL_COND_MSG(err != OK, "Could not access templates directory at '" + templates_dir.plus_file(to_remove) + "'."); - err = d->change_dir(to_remove); + err = da->erase_contents_recursive(); + ERR_FAIL_COND_MSG(err != OK, "Could not remove all templates in '" + templates_dir.plus_file(to_remove) + "'."); - ERR_FAIL_COND(err != OK); - - Vector<String> files; - d->list_dir_begin(); - String c = d->get_next(); - while (c != String()) { - if (!d->current_is_dir()) { - files.push_back(c); - } - c = d->get_next(); - } - d->list_dir_end(); - - for (int i = 0; i < files.size(); i++) { - d->remove(files[i]); - } - - d->change_dir(".."); - d->remove(to_remove); + da->change_dir(".."); + da->remove(to_remove); + ERR_FAIL_COND_MSG(err != OK, "Could not remove templates directory at '" + templates_dir.plus_file(to_remove) + "'."); _update_template_list(); } bool ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_progress) { + // unzClose() will take care of closing the file stored in the unzFile, + // so we don't need to `memdelete(fa)` in this method. FileAccess *fa = NULL; zlib_filefunc_def io = zipio_create_io_from_file(&fa); @@ -251,7 +246,7 @@ bool ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_ String template_path = EditorSettings::get_singleton()->get_templates_dir().plus_file(version); - DirAccess *d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + DirAccessRef d = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); Error err = d->make_dir_recursive(template_path); if (err != OK) { EditorNode::get_singleton()->show_warning(TTR("Error creating path for templates:") + "\n" + template_path); @@ -259,8 +254,6 @@ bool ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_ return false; } - memdelete(d); - ret = unzGoToFirstFile(pkg); EditorProgress *p = NULL; @@ -316,18 +309,16 @@ bool ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_ } String to_write = template_path.plus_file(file); - FileAccess *f = FileAccess::open(to_write, FileAccess::WRITE); + FileAccessRef f = FileAccess::open(to_write, FileAccess::WRITE); if (!f) { ret = unzGoToNextFile(pkg); fc++; - ERR_CONTINUE_MSG(true, "Can't open file from path: " + String(to_write) + "."); + ERR_CONTINUE_MSG(true, "Can't open file from path '" + String(to_write) + "'."); } f->store_buffer(data.ptr(), data.size()); - memdelete(f); - #ifndef WINDOWS_ENABLED FileAccess::set_unix_permissions(to_write, (info.external_fa >> 16) & 0x01FF); #endif @@ -343,7 +334,6 @@ bool ExportTemplateManager::_install_from_file(const String &p_file, bool p_use_ unzClose(pkg); _update_template_list(); - return true; } @@ -562,10 +552,8 @@ bool ExportTemplateManager::can_install_android_template() { Error ExportTemplateManager::install_android_template() { - // To support custom Android builds, we install various things to the project's res://android folder. - // First is the Java source code and buildsystem from android_source.zip. - // Then we extract the Godot Android libraries from pre-build android_release.apk - // and android_debug.apk, to place them in the libs folder. + // To support custom Android builds, we install the Java source code and buildsystem + // from android_source.zip to the project's res://android folder. DirAccessRef da = DirAccess::open("res://"); ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); @@ -661,89 +649,6 @@ Error ExportTemplateManager::install_android_template() { ProgressDialog::get_singleton()->end_task("uncompress_src"); unzClose(pkg); - // Extract libs from pre-built APKs. - err = _extract_libs_from_apk("release"); - ERR_FAIL_COND_V_MSG(err != OK, err, "Can't extract Android libs from android_release.apk."); - err = _extract_libs_from_apk("debug"); - ERR_FAIL_COND_V_MSG(err != OK, err, "Can't extract Android libs from android_debug.apk."); - - return OK; -} - -Error ExportTemplateManager::_extract_libs_from_apk(const String &p_target_name) { - - const String &templates_path = EditorSettings::get_singleton()->get_templates_dir().plus_file(VERSION_FULL_CONFIG); - const String &apk_file = templates_path.plus_file("android_" + p_target_name + ".apk"); - ERR_FAIL_COND_V(!FileAccess::exists(apk_file), ERR_CANT_OPEN); - - FileAccess *src_f = NULL; - zlib_filefunc_def io = zipio_create_io_from_file(&src_f); - - unzFile pkg = unzOpen2(apk_file.utf8().get_data(), &io); - ERR_FAIL_COND_V_MSG(!pkg, ERR_CANT_OPEN, "Android APK can't be extracted."); - - DirAccessRef da = DirAccess::open("res://"); - ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); - - // 8 steps because 4 arches, 2 libs per arch. - ProgressDialog::get_singleton()->add_task("extract_libs_from_apk", TTR("Extracting Android Libraries From APKs"), 8); - - int ret = unzGoToFirstFile(pkg); - Set<String> dirs_tested; - int idx = 0; - while (ret == UNZ_OK) { - // Get file path. - unz_file_info info; - char fpath[16384]; - ret = unzGetCurrentFileInfo(pkg, &info, fpath, 16384, NULL, 0, NULL, 0); - - String path = fpath; - String base_dir = path.get_base_dir(); - String file = path.get_file(); - - if (!base_dir.begins_with("lib") || path.ends_with("/")) { - ret = unzGoToNextFile(pkg); - continue; - } - - Vector<uint8_t> data; - data.resize(info.uncompressed_size); - - // Read. - unzOpenCurrentFile(pkg); - unzReadCurrentFile(pkg, data.ptrw(), data.size()); - unzCloseCurrentFile(pkg); - - // We have a "lib" folder in the APK, but it should be "libs/{release,debug}" in the source dir. - String target_base_dir = base_dir.replace_first("lib", String("libs").plus_file(p_target_name)); - - if (!dirs_tested.has(base_dir)) { - da->make_dir_recursive(String("android/build").plus_file(target_base_dir)); - dirs_tested.insert(base_dir); - } - - String to_write = String("res://android/build").plus_file(target_base_dir.plus_file(path.get_file())); - FileAccess *f = FileAccess::open(to_write, FileAccess::WRITE); - if (f) { - f->store_buffer(data.ptr(), data.size()); - memdelete(f); -#ifndef WINDOWS_ENABLED - // We can't retrieve Unix permissions from the APK it seems, so simply set 0755 as should be. - FileAccess::set_unix_permissions(to_write, 0755); -#endif - } else { - ERR_PRINTS("Can't uncompress file: " + to_write); - } - - ProgressDialog::get_singleton()->task_step("extract_libs_from_apk", path, idx); - - idx++; - ret = unzGoToNextFile(pkg); - } - - ProgressDialog::get_singleton()->end_task("extract_libs_from_apk"); - unzClose(pkg); - return OK; } diff --git a/editor/export_template_manager.h b/editor/export_template_manager.h index ecb8e85b21..ad3ab507b3 100644 --- a/editor/export_template_manager.h +++ b/editor/export_template_manager.h @@ -72,8 +72,6 @@ class ExportTemplateManager : public ConfirmationDialog { virtual void ok_pressed(); bool _install_from_file(const String &p_file, bool p_use_progress = true); - Error _extract_libs_from_apk(const String &p_target_name); - void _http_download_mirror_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); void _http_download_templates_completed(int p_status, int p_code, const PoolStringArray &headers, const PoolByteArray &p_data); diff --git a/editor/file_type_cache.cpp b/editor/file_type_cache.cpp index 746d38f2b5..602906cb8d 100644 --- a/editor/file_type_cache.cpp +++ b/editor/file_type_cache.cpp @@ -99,6 +99,6 @@ void FileTypeCache::save() { FileTypeCache::FileTypeCache() { - ERR_FAIL_COND(singleton); + ERR_FAIL_COND_MSG(singleton, "FileTypeCache singleton already exist."); singleton = this; } diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp index a729befe8e..5409ef65ea 100644 --- a/editor/filesystem_dock.cpp +++ b/editor/filesystem_dock.cpp @@ -71,11 +71,7 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory subdirectory_item->select(0); } - if ((path.begins_with(lpath) && path != lpath)) { - subdirectory_item->set_collapsed(false); - } else { - subdirectory_item->set_collapsed(uncollapsed_paths.find(lpath) < 0); - } + subdirectory_item->set_collapsed(uncollapsed_paths.find(lpath) < 0); if (searched_string.length() > 0 && dname.to_lower().find(searched_string) >= 0) { parent_should_expand = true; } @@ -115,6 +111,10 @@ bool FileSystemDock::_create_tree(TreeItem *p_parent, EditorFileSystemDirectory file_item->select(0); file_item->set_as_cursor(0); } + String main_scene = ProjectSettings::get_singleton()->get("application/run/main_scene"); + if (main_scene == file_metadata) { + file_item->set_custom_color(0, get_color("accent_color", "Editor")); + } Array udata; udata.push_back(tree_update_id); udata.push_back(file_item); @@ -333,10 +333,11 @@ void FileSystemDock::_notification(int p_what) { case NOTIFICATION_DRAG_BEGIN: { Dictionary dd = get_viewport()->gui_get_drag_data(); if (tree->is_visible_in_tree() && dd.has("type")) { - if ((String(dd["type"]) == "files") || (String(dd["type"]) == "files_and_dirs") || (String(dd["type"]) == "resource")) { + if (dd.has("favorite")) { + if ((String(dd["favorite"]) == "all")) + tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); + } else if ((String(dd["type"]) == "files") || (String(dd["type"]) == "files_and_dirs") || (String(dd["type"]) == "resource")) { tree->set_drop_mode_flags(Tree::DROP_MODE_ON_ITEM | Tree::DROP_MODE_INBETWEEN); - } else if ((String(dd["type"]) == "favorite")) { - tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); } } } break; @@ -477,6 +478,7 @@ void FileSystemDock::_navigate_to_path(const String &p_path, bool p_select_in_fa } void FileSystemDock::navigate_to_path(const String &p_path) { + file_list_search_box->clear(); _navigate_to_path(p_path); } @@ -1563,6 +1565,15 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected } } break; + case FILE_MAIN_SCENE: { + // Set as main scene with selected scene file. + if (p_selected.size() == 1) { + ProjectSettings::get_singleton()->set("application/run/main_scene", p_selected[0]); + ProjectSettings::get_singleton()->save(); + _update_tree(_compute_uncollapsed_paths()); + } + } break; + case FILE_INSTANCE: { // Instance all selected scenes. Vector<String> paths; @@ -1709,7 +1720,7 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected reimport.push_back(p_selected[i]); } - ERR_FAIL_COND(reimport.size() == 0); + ERR_FAIL_COND_MSG(reimport.size() == 0, "You need to select files to reimport them."); } break; case FILE_NEW_FOLDER: { @@ -1838,7 +1849,7 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from) all_not_favorites &= !is_favorite; selected = tree->get_next_selected(selected); } - if (all_favorites) { + if (!all_not_favorites) { paths = _tree_get_selected(false); } else { paths = _tree_get_selected(); @@ -1856,12 +1867,9 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from) if (paths.empty()) return Variant(); - if (!all_favorites && !all_not_favorites) - return Variant(); - Dictionary drag_data = EditorNode::get_singleton()->drag_files_and_dirs(paths, p_from); - if (all_favorites) { - drag_data["type"] = "favorite"; + if (!all_not_favorites) { + drag_data["favorite"] = all_favorites ? "all" : "mixed"; } return drag_data; } @@ -1869,7 +1877,11 @@ Variant FileSystemDock::get_drag_data_fw(const Point2 &p_point, Control *p_from) bool FileSystemDock::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { Dictionary drag_data = p_data; - if (drag_data.has("type") && String(drag_data["type"]) == "favorite") { + if (drag_data.has("favorite")) { + + if (String(drag_data["favorite"]) != "all") { + return false; + } // Moving favorite around. TreeItem *ti = tree->get_item_at_position(p_point); @@ -1936,7 +1948,11 @@ void FileSystemDock::drop_data_fw(const Point2 &p_point, const Variant &p_data, Vector<String> dirs = EditorSettings::get_singleton()->get_favorites(); - if (drag_data.has("type") && String(drag_data["type"]) == "favorite") { + if (drag_data.has("favorite")) { + + if (String(drag_data["favorite"]) != "all") { + return; + } // Moving favorite around. TreeItem *ti = tree->get_item_at_position(p_point); if (!ti) @@ -2087,7 +2103,7 @@ void FileSystemDock::_get_drag_target_folder(String &target, bool &target_favori void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<String> p_paths, bool p_display_path_dependent_options) { // Add options for files and folders. - ERR_FAIL_COND(p_paths.empty()); + ERR_FAIL_COND_MSG(p_paths.empty(), "Path cannot be empty."); Vector<String> filenames; Vector<String> foldernames; @@ -2099,6 +2115,7 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str bool all_folders = true; bool all_favorites = true; bool all_not_favorites = true; + for (int i = 0; i < p_paths.size(); i++) { String fpath = p_paths[i]; if (fpath.ends_with("/")) { @@ -2128,25 +2145,26 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str if (all_files) { if (all_files_scenes) { if (filenames.size() == 1) { - p_popup->add_item(TTR("Open Scene"), FILE_OPEN); - p_popup->add_item(TTR("New Inherited Scene"), FILE_INHERIT); + p_popup->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open Scene"), FILE_OPEN); + p_popup->add_icon_item(get_icon("CreateNewSceneFrom", "EditorIcons"), TTR("New Inherited Scene"), FILE_INHERIT); + p_popup->add_item(TTR("Set As Main Scene"), FILE_MAIN_SCENE); } else { - p_popup->add_item(TTR("Open Scenes"), FILE_OPEN); + p_popup->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open Scenes"), FILE_OPEN); } - p_popup->add_item(TTR("Instance"), FILE_INSTANCE); + p_popup->add_icon_item(get_icon("Instance", "EditorIcons"), TTR("Instance"), FILE_INSTANCE); p_popup->add_separator(); } else if (filenames.size() == 1) { - p_popup->add_item(TTR("Open"), FILE_OPEN); + p_popup->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open"), FILE_OPEN); p_popup->add_separator(); } } if (p_paths.size() >= 1) { if (!all_favorites) { - p_popup->add_item(TTR("Add to Favorites"), FILE_ADD_FAVORITE); + p_popup->add_icon_item(get_icon("Favorites", "EditorIcons"), TTR("Add to Favorites"), FILE_ADD_FAVORITE); } if (!all_not_favorites) { - p_popup->add_item(TTR("Remove from Favorites"), FILE_REMOVE_FAVORITE); + p_popup->add_icon_item(get_icon("NonFavorite", "EditorIcons"), TTR("Remove from Favorites"), FILE_REMOVE_FAVORITE); } p_popup->add_separator(); } @@ -2159,36 +2177,36 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str } } else if (all_folders && foldernames.size() > 0) { - p_popup->add_item(TTR("Open"), FILE_OPEN); + p_popup->add_icon_item(get_icon("Load", "EditorIcons"), TTR("Open"), FILE_OPEN); p_popup->add_separator(); } if (p_paths.size() == 1) { - p_popup->add_item(TTR("Copy Path"), FILE_COPY_PATH); + p_popup->add_icon_item(get_icon("ActionCopy", "EditorIcons"), TTR("Copy Path"), FILE_COPY_PATH); if (p_paths[0] != "res://") { - p_popup->add_item(TTR("Rename..."), FILE_RENAME); - p_popup->add_item(TTR("Duplicate..."), FILE_DUPLICATE); + p_popup->add_icon_item(get_icon("Rename", "EditorIcons"), TTR("Rename..."), FILE_RENAME); + p_popup->add_icon_item(get_icon("Duplicate", "EditorIcons"), TTR("Duplicate..."), FILE_DUPLICATE); } } if (p_paths.size() > 1 || p_paths[0] != "res://") { - p_popup->add_item(TTR("Move To..."), FILE_MOVE); - p_popup->add_item(TTR("Delete"), FILE_REMOVE); + p_popup->add_icon_item(get_icon("MoveUp", "EditorIcons"), TTR("Move To..."), FILE_MOVE); + p_popup->add_icon_item(get_icon("Remove", "EditorIcons"), TTR("Delete"), FILE_REMOVE); } if (p_paths.size() == 1) { p_popup->add_separator(); if (p_display_path_dependent_options) { - p_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); - p_popup->add_item(TTR("New Scene..."), FILE_NEW_SCENE); - p_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); - p_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); + p_popup->add_icon_item(get_icon("Folder", "EditorIcons"), TTR("New Folder..."), FILE_NEW_FOLDER); + p_popup->add_icon_item(get_icon("PackedScene", "EditorIcons"), TTR("New Scene..."), FILE_NEW_SCENE); + p_popup->add_icon_item(get_icon("Script", "EditorIcons"), TTR("New Script..."), FILE_NEW_SCRIPT); + p_popup->add_icon_item(get_icon("Object", "EditorIcons"), TTR("New Resource..."), FILE_NEW_RESOURCE); p_popup->add_separator(); } String fpath = p_paths[0]; String item_text = fpath.ends_with("/") ? TTR("Open in File Manager") : TTR("Show in File Manager"); - p_popup->add_item(item_text, FILE_SHOW_IN_EXPLORER); + p_popup->add_icon_item(get_icon("Filesystem", "EditorIcons"), item_text, FILE_SHOW_IN_EXPLORER); } } @@ -2198,8 +2216,8 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) { if (paths.size() == 1) { if (paths[0].ends_with("/")) { - tree_popup->add_item(TTR("Expand All"), FOLDER_EXPAND_ALL); - tree_popup->add_item(TTR("Collapse All"), FOLDER_COLLAPSE_ALL); + tree_popup->add_icon_item(get_icon("GuiTreeArrowDown", "EditorIcons"), TTR("Expand All"), FOLDER_EXPAND_ALL); + tree_popup->add_icon_item(get_icon("GuiTreeArrowRight", "EditorIcons"), TTR("Collapse All"), FOLDER_COLLAPSE_ALL); tree_popup->add_separator(); } } @@ -2219,10 +2237,10 @@ void FileSystemDock::_tree_rmb_empty(const Vector2 &p_pos) { path = "res://"; tree_popup->clear(); tree_popup->set_size(Size2(1, 1)); - tree_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); - tree_popup->add_item(TTR("New Scene..."), FILE_NEW_SCENE); - tree_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); - tree_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); + tree_popup->add_icon_item(get_icon("Folder", "EditorIcons"), TTR("New Folder..."), FILE_NEW_FOLDER); + tree_popup->add_icon_item(get_icon("PackedScene", "EditorIcons"), TTR("New Scene..."), FILE_NEW_SCENE); + tree_popup->add_icon_item(get_icon("Script", "EditorIcons"), TTR("New Script..."), FILE_NEW_SCRIPT); + tree_popup->add_icon_item(get_icon("Object", "EditorIcons"), TTR("New Resource..."), FILE_NEW_RESOURCE); tree_popup->set_position(tree->get_global_position() + p_pos); tree_popup->popup(); } @@ -2262,12 +2280,12 @@ void FileSystemDock::_file_list_rmb_pressed(const Vector2 &p_pos) { file_list_popup->clear(); file_list_popup->set_size(Size2(1, 1)); - file_list_popup->add_item(TTR("New Folder..."), FILE_NEW_FOLDER); - file_list_popup->add_item(TTR("New Scene..."), FILE_NEW_SCENE); - file_list_popup->add_item(TTR("New Script..."), FILE_NEW_SCRIPT); - file_list_popup->add_item(TTR("New Resource..."), FILE_NEW_RESOURCE); + file_list_popup->add_icon_item(get_icon("Folder", "EditorIcons"), TTR("New Folder..."), FILE_NEW_FOLDER); + file_list_popup->add_icon_item(get_icon("PackedScene", "EditorIcons"), TTR("New Scene..."), FILE_NEW_SCENE); + file_list_popup->add_icon_item(get_icon("Script", "EditorIcons"), TTR("New Script..."), FILE_NEW_SCRIPT); + file_list_popup->add_icon_item(get_icon("Object", "EditorIcons"), TTR("New Resource..."), FILE_NEW_RESOURCE); file_list_popup->add_separator(); - file_list_popup->add_item(TTR("Open in File Manager"), FILE_SHOW_IN_EXPLORER); + file_list_popup->add_icon_item(get_icon("Filesystem", "EditorIcons"), TTR("Open in File Manager"), FILE_SHOW_IN_EXPLORER); file_list_popup->set_position(files->get_global_position() + p_pos); file_list_popup->popup(); } diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h index 49eb31e330..099f4ad273 100644 --- a/editor/filesystem_dock.h +++ b/editor/filesystem_dock.h @@ -74,6 +74,7 @@ private: enum FileMenu { FILE_OPEN, FILE_INHERIT, + FILE_MAIN_SCENE, FILE_INSTANCE, FILE_ADD_FAVORITE, FILE_REMOVE_FAVORITE, diff --git a/editor/find_in_files.cpp b/editor/find_in_files.cpp index def22d07de..752e49a932 100644 --- a/editor/find_in_files.cpp +++ b/editor/find_in_files.cpp @@ -829,7 +829,7 @@ void FindInFilesPanel::apply_replaces_in_file(String fpath, const Vector<Result> // however that means either losing changes or losing replaces. FileAccess *f = FileAccess::open(fpath, FileAccess::READ); - ERR_FAIL_COND(f == NULL); + ERR_FAIL_COND_MSG(f == NULL, "Cannot open file from path '" + fpath + "'."); String buffer; int current_line = 1; @@ -876,7 +876,7 @@ void FindInFilesPanel::apply_replaces_in_file(String fpath, const Vector<Result> // Now the modified contents are in the buffer, rewrite the file with our changes Error err = f->reopen(fpath, FileAccess::WRITE); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot create file in path '" + fpath + "'."); f->store_string(buffer); diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp index 4cefb53617..74d81bf561 100644 --- a/editor/groups_editor.cpp +++ b/editor/groups_editor.cpp @@ -529,6 +529,7 @@ GroupDialog::GroupDialog() { group_empty->set_valign(Label::VALIGN_CENTER); group_empty->set_align(Label::ALIGN_CENTER); group_empty->set_autowrap(true); + group_empty->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); nodes_to_remove->add_child(group_empty); group_empty->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); diff --git a/editor/icons/icon_2_d.svg b/editor/icons/icon_2_d.svg index dcc22a579e..e1a96aeab6 100644 --- a/editor/icons/icon_2_d.svg +++ b/editor/icons/icon_2_d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-6.5859v-6.5859l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.9844 1.002a1.0001 1.0001 0 0 0 -.69141.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l.29297-.29297v8.5859h8.5859l-.29297.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0-1.4141l-2-2a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l.29297.29297h-6.5859v-6.5859l.29297.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2-2a1.0001 1.0001 0 0 0 -.72266-.29102z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_3_d.svg b/editor/icons/icon_3_d.svg index 2b89b0fbbe..2a1d5ff36d 100644 --- a/editor/icons/icon_3_d.svg +++ b/editor/icons/icon_3_d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3.9902 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v8.5859h8.5859l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1 1 0 0 0 -0.72266 -0.29102 1 1 0 0 0 -0.69141 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-5.1719l5.5859-5.5859v0.41602a1 1 0 0 0 1 1 1 1 0 0 0 1 -1v-2.8301a1.0001 1.0001 0 0 0 -1 -1h-2.8301a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h0.41602l-5.5859 5.5859v-5.1719l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.9902 1.002a1.0001 1.0001 0 0 0 -.69141.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l.29297-.29297v8.5859h8.5859l-.29297.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0-1.4141l-2-2a1 1 0 0 0 -.72266-.29102 1 1 0 0 0 -.69141.29102 1 1 0 0 0 0 1.4141l.29297.29297h-5.1719l5.5859-5.5859v.41602a1 1 0 0 0 1 1 1 1 0 0 0 1-1v-2.8301a1.0001 1.0001 0 0 0 -1-1h-2.8301a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h.41602l-5.5859 5.5859v-5.1719l.29297.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2-2a1.0001 1.0001 0 0 0 -.72266-.29102z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_dropdown.svg b/editor/icons/icon_GUI_dropdown.svg index 4aa800b470..3ed9466f4a 100644 --- a/editor/icons/icon_GUI_dropdown.svg +++ b/editor/icons/icon_GUI_dropdown.svg @@ -1,5 +1 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path d="m4 1045.4 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".58824" stroke-width="2"/> -</g> -</svg> +<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="m4 1045.4 3 3 3-3" style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.58824;stroke-width:2" transform="translate(0 -1038.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_ellipsis.svg b/editor/icons/icon_GUI_ellipsis.svg index 5565fd2947..4d530d635e 100644 --- a/editor/icons/icon_GUI_ellipsis.svg +++ b/editor/icons/icon_GUI_ellipsis.svg @@ -1,5 +1 @@ -<svg width="14" height="8" version="1.1" viewBox="0 0 14 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1040.4)" d="m3.8594 4c-2.1381 0-3.8594 1.7213-3.8594 3.8594v0.28125c0 2.1381 1.7213 3.8594 3.8594 3.8594h6.2812c2.1381 0 3.8594-1.7213 3.8594-3.8594v-0.28125c0-2.1381-1.7213-3.8594-3.8594-3.8594zm-0.85938 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#fff" fill-opacity=".39216"/> -</g> -</svg> +<svg height="8" viewBox="0 0 14 8" width="14" xmlns="http://www.w3.org/2000/svg"><path d="m3.8594 4c-2.1381 0-3.8594 1.7213-3.8594 3.8594v.28125c0 2.1381 1.7213 3.8594 3.8594 3.8594h6.2812c2.1381 0 3.8594-1.7213 3.8594-3.8594v-.28125c0-2.1381-1.7213-3.8594-3.8594-3.8594zm-.85938 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#fff" fill-opacity=".39216" transform="translate(0 -4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_h_tick.svg b/editor/icons/icon_GUI_h_tick.svg index 5aa799deb0..01fecf5d12 100644 --- a/editor/icons/icon_GUI_h_tick.svg +++ b/editor/icons/icon_GUI_h_tick.svg @@ -1,3 +1 @@ -<svg width="4" height="16" version="1.1" viewBox="0 0 4 15.999999" xmlns="http://www.w3.org/2000/svg"> -<circle cx="2" cy="2" r="1" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="16" viewBox="0 0 4 15.999999" width="4" xmlns="http://www.w3.org/2000/svg"><circle cx="2" cy="2" fill="#fff" fill-opacity=".39216" r="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_hsplitter.svg b/editor/icons/icon_GUI_hsplitter.svg index 650e977921..f94a81cb1e 100644 --- a/editor/icons/icon_GUI_hsplitter.svg +++ b/editor/icons/icon_GUI_hsplitter.svg @@ -1,5 +1 @@ -<svg width="8" height="64" version="1.1" viewBox="0 0 8 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<path d="m4 990.36v60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="64" viewBox="0 0 8 64" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m4 990.36v60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2" transform="translate(0 -988.36)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_mini_checkerboard.svg b/editor/icons/icon_GUI_mini_checkerboard.svg index e740113b2d..dc6c7e37d1 100644 --- a/editor/icons/icon_GUI_mini_checkerboard.svg +++ b/editor/icons/icon_GUI_mini_checkerboard.svg @@ -1,4 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v8h8v-8h-8zm8 8v8h8v-8h-8z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.9994"/> -<path d="m8 0v8h8v-8h-8zm0 8h-8v8h8v-8z" fill="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.9994"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="1.9994"><path d="m0 0v8h8v-8zm8 8v8h8v-8z" fill="#e0e0e0"/><path d="m8 0v8h8v-8zm0 8h-8v8h8z" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_mini_tab_menu.svg b/editor/icons/icon_GUI_mini_tab_menu.svg deleted file mode 100644 index 8aeb85277c..0000000000 --- a/editor/icons/icon_GUI_mini_tab_menu.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="6" height="16" version="1.1" viewBox="0 0 6 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#fff" fill-opacity=".39216"/> -</g> -</svg> diff --git a/editor/icons/icon_GUI_option_arrow.svg b/editor/icons/icon_GUI_option_arrow.svg index ee2a77c090..28435e08c3 100644 --- a/editor/icons/icon_GUI_option_arrow.svg +++ b/editor/icons/icon_GUI_option_arrow.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m10 1043.4c-0.26378 0.01-0.5144 0.1165-0.69726 0.3067l-3.293 3.2929-3.293-3.2929c-0.18826-0.1936-0.44679-0.3028-0.7168-0.3028-0.89742 2e-4 -1.3404 1.0909-0.69727 1.7168l4 4c0.39053 0.3904 1.0235 0.3904 1.4141 0l4-4c0.65734-0.6321 0.19491-1.7422-0.7168-1.7207z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".78431" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m10 1043.4c-.26378.01-.5144.1165-.69726.3067l-3.293 3.2929-3.293-3.2929c-.18826-.1936-.44679-.3028-.7168-.3028-.89742.0002-1.3404 1.0909-.69727 1.7168l4 4c.39053.3904 1.0235.3904 1.4141 0l4-4c.65734-.6321.19491-1.7422-.7168-1.7207z" fill="#fff" fill-opacity=".78431" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_progress_bar.svg b/editor/icons/icon_GUI_progress_bar.svg index 9ea0cddfb0..a7a57adaa7 100644 --- a/editor/icons/icon_GUI_progress_bar.svg +++ b/editor/icons/icon_GUI_progress_bar.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1036.4c-1.0907-2e-4 -2 0.9073-2 1.998v12.002c0 1.0907 0.9093 2 2 2h12c1.0907 0 2-0.9093 2-2v-12c0-1.0907-0.9093-1.9978-2-1.998zm0 2h12v11.998h-12z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".39216" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1036.4c-1.0907-.0002-2 .9073-2 1.998v12.002c0 1.0907.9093 2 2 2h12c1.0907 0 2-.9093 2-2v-12c0-1.0907-.9093-1.9978-2-1.998zm0 2h12v11.998h-12z" fill="#e0e0e0" fill-opacity=".39216" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_progress_fill.svg b/editor/icons/icon_GUI_progress_fill.svg index 9c68923254..a75bf93edd 100644 --- a/editor/icons/icon_GUI_progress_fill.svg +++ b/editor/icons/icon_GUI_progress_fill.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="4" y="1040.4" width="8" height="8" ry=".99999" fill="#e0e0e0" fill-opacity=".39216"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" fill-opacity=".39216" height="8" ry=".99999" width="8" x="4" y="4"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_arrow_left.svg b/editor/icons/icon_GUI_scroll_arrow_left.svg index 364d15ea26..a118f04e17 100644 --- a/editor/icons/icon_GUI_scroll_arrow_left.svg +++ b/editor/icons/icon_GUI_scroll_arrow_left.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 2a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6 -6 6 6 0 0 1 6 -6zm1.0137 2a1 1 0 0 0 -0.7207 0.29297l-3 3a1.0001 1.0001 0 0 0 0 1.4141l3 3a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2.293-2.293 2.293-2.293a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.69336 -0.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6-6 6 6 0 0 1 6-6zm1.0137 2a1 1 0 0 0 -.7207.29297l-3 3a1.0001 1.0001 0 0 0 0 1.4141l3 3a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2.293-2.293 2.293-2.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.69336-.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_arrow_left_hl.svg b/editor/icons/icon_GUI_scroll_arrow_left_hl.svg new file mode 100644 index 0000000000..046356f18b --- /dev/null +++ b/editor/icons/icon_GUI_scroll_arrow_left_hl.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 1 6 6 6 6 0 0 1 -6 6 6 6 0 0 1 -6-6 6 6 0 0 1 6-6zm1.0137 2a1 1 0 0 0 -.7207.29297l-3 3a1.0001 1.0001 0 0 0 0 1.4141l3 3a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2.293-2.293 2.293-2.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.69336-.29297z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_arrow_right.svg b/editor/icons/icon_GUI_scroll_arrow_right.svg index 5788aa1b0b..4e0a8b5327 100644 --- a/editor/icons/icon_GUI_scroll_arrow_right.svg +++ b/editor/icons/icon_GUI_scroll_arrow_right.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 15.999999" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6zm-1.0137 2a1 1 0 0 1 0.7207 0.29297l3 3a1.0001 1.0001 0 0 1 0 1.4141l-3 3a1 1 0 0 1 -1.4141 0 1 1 0 0 1 0 -1.4141l2.293-2.293-2.293-2.293a1 1 0 0 1 0 -1.4141 1 1 0 0 1 0.69336 -0.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm-1.0137 2a1 1 0 0 1 .7207.29297l3 3a1.0001 1.0001 0 0 1 0 1.4141l-3 3a1 1 0 0 1 -1.4141 0 1 1 0 0 1 0-1.4141l2.293-2.293-2.293-2.293a1 1 0 0 1 0-1.4141 1 1 0 0 1 .69336-.29297z" fill="#e0e0e0" fill-opacity=".78431" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_arrow_right_hl.svg b/editor/icons/icon_GUI_scroll_arrow_right_hl.svg new file mode 100644 index 0000000000..4224ca8de4 --- /dev/null +++ b/editor/icons/icon_GUI_scroll_arrow_right_hl.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm-1.0137 2a1 1 0 0 1 .7207.29297l3 3a1.0001 1.0001 0 0 1 0 1.4141l-3 3a1 1 0 0 1 -1.4141 0 1 1 0 0 1 0-1.4141l2.293-2.293-2.293-2.293a1 1 0 0 1 0-1.4141 1 1 0 0 1 .69336-.29297z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_bg.svg b/editor/icons/icon_GUI_scroll_bg.svg index 302368b19a..263b42ea61 100644 --- a/editor/icons/icon_GUI_scroll_bg.svg +++ b/editor/icons/icon_GUI_scroll_bg.svg @@ -1 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 11.999999" xmlns="http://www.w3.org/2000/svg"></svg> +<svg height="12" viewBox="0 0 12 11.999999" width="12" xmlns="http://www.w3.org/2000/svg"/>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_grabber.svg b/editor/icons/icon_GUI_scroll_grabber.svg index 545ec6782d..9f6e9f2e25 100644 --- a/editor/icons/icon_GUI_scroll_grabber.svg +++ b/editor/icons/icon_GUI_scroll_grabber.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 11.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<circle cx="6" cy="1046.4" r="2" fill="#fff" fill-opacity=".27451"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 11.999999" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#fff" fill-opacity=".27451" r="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_grabber_hl.svg b/editor/icons/icon_GUI_scroll_grabber_hl.svg index e165cf3cfb..bf5bce6934 100644 --- a/editor/icons/icon_GUI_scroll_grabber_hl.svg +++ b/editor/icons/icon_GUI_scroll_grabber_hl.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 11.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<circle cx="6" cy="1046.4" r="3" fill="#f9f9f9" fill-opacity=".73"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 11.999999" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#f9f9f9" fill-opacity=".73" r="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_scroll_grabber_pressed.svg b/editor/icons/icon_GUI_scroll_grabber_pressed.svg index 729289e756..da26032474 100644 --- a/editor/icons/icon_GUI_scroll_grabber_pressed.svg +++ b/editor/icons/icon_GUI_scroll_grabber_pressed.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 11.999999" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<circle cx="6" cy="1046.4" r="3" d="m 8.9999952,1046.3623 c 0,1.6569 -1.3431436,3 -2.9999952,3 -1.6568516,0 -2.9999952,-1.3431 -2.9999952,-3 0,-1.6568 1.3431436,-3 2.9999952,-3 1.6568516,0 2.9999952,1.3432 2.9999952,3 z" fill="#afafaf" fill-opacity=".72941"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 11.999999" width="12" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="6" fill="#afafaf" fill-opacity=".72941" r="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_slider_grabber.svg b/editor/icons/icon_GUI_slider_grabber.svg index b8e6f0a654..dd751ead80 100644 --- a/editor/icons/icon_GUI_slider_grabber.svg +++ b/editor/icons/icon_GUI_slider_grabber.svg @@ -1,82 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 15.999999" - id="svg8" - sodipodi:docname="icon_GUI_slider_grabber.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1211" - inkscape:window-height="644" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="-5.7627119" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g6" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <path - transform="translate(0 1036.4)" - d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 0.5 0.025391 5 5 0 0 1 0.49414 0.074219 5 5 0 0 1 0.48438 0.12305 5 5 0 0 1 0.46875 0.17188 5 5 0 0 1 0.44922 0.2168 5 5 0 0 1 0.42578 0.26172 5 5 0 0 1 0.39844 0.30273 5 5 0 0 1 0.36524 0.33984 5 5 0 0 1 0.33008 0.37695 5 5 0 0 1 0.29102 0.40625 5 5 0 0 1 0.24805 0.43359 5 5 0 0 1 0.20508 0.45508 5 5 0 0 1 0.1582 0.47461 5 5 0 0 1 0.10938 0.48828 5 5 0 0 1 0.060547 0.49609 5 5 0 0 1 0.011719 0.35352 5 5 0 0 1 -0.025391 0.5 5 5 0 0 1 -0.074218 0.49414 5 5 0 0 1 -0.12305 0.48438 5 5 0 0 1 -0.17188 0.46875 5 5 0 0 1 -0.2168 0.44922 5 5 0 0 1 -0.26172 0.42578 5 5 0 0 1 -0.30273 0.39844 5 5 0 0 1 -0.33984 0.36524 5 5 0 0 1 -0.37695 0.33008 5 5 0 0 1 -0.40625 0.29102 5 5 0 0 1 -0.43359 0.24805 5 5 0 0 1 -0.45508 0.20508 5 5 0 0 1 -0.47461 0.1582 5 5 0 0 1 -0.48828 0.10938 5 5 0 0 1 -0.49609 0.060547 5 5 0 0 1 -0.35352 0.011719 5 5 0 0 1 -0.5 -0.025391 5 5 0 0 1 -0.49414 -0.074218 5 5 0 0 1 -0.48438 -0.12305 5 5 0 0 1 -0.46875 -0.17188 5 5 0 0 1 -0.44922 -0.2168 5 5 0 0 1 -0.42578 -0.26172 5 5 0 0 1 -0.39844 -0.30273 5 5 0 0 1 -0.36523 -0.33984 5 5 0 0 1 -0.33008 -0.37695 5 5 0 0 1 -0.29102 -0.40625 5 5 0 0 1 -0.24805 -0.43359 5 5 0 0 1 -0.20508 -0.45508 5 5 0 0 1 -0.1582 -0.47461 5 5 0 0 1 -0.10938 -0.48828 5 5 0 0 1 -0.060547 -0.49609 5 5 0 0 1 -0.011719 -0.35352 5 5 0 0 1 0.025391 -0.5 5 5 0 0 1 0.074219 -0.49414 5 5 0 0 1 0.12305 -0.48438 5 5 0 0 1 0.17188 -0.46875 5 5 0 0 1 0.2168 -0.44922 5 5 0 0 1 0.26172 -0.42578 5 5 0 0 1 0.30273 -0.39844 5 5 0 0 1 0.33984 -0.36523 5 5 0 0 1 0.37695 -0.33008 5 5 0 0 1 0.40625 -0.29102 5 5 0 0 1 0.43359 -0.24805 5 5 0 0 1 0.45508 -0.20508 5 5 0 0 1 0.47461 -0.1582 5 5 0 0 1 0.48828 -0.10938 5 5 0 0 1 0.49609 -0.060547 5 5 0 0 1 0.35352 -0.011719z" - fill="#e0e0e0" - id="path2" - style="fill:#e0e0e0;fill-opacity:0.28925619" /> - <circle - cx="8" - cy="1044.4" - r="3" - fill="#fff" - fill-opacity=".58824" - stroke-linecap="round" - stroke-linejoin="round" - stroke-opacity=".32549" - stroke-width="3" - id="circle4" /> - </g> - <g - transform="translate(-0.06779632,-1036.4)" - id="g18"> - <circle - style="fill:#ffffff;fill-opacity:0.78430996;stroke-width:3;stroke-linejoin:round;stroke-opacity:0.39216003" - cx="8" - cy="1044.4" - r="3" - id="circle16" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm0 2a5 5 0 0 1 .5.025391 5 5 0 0 1 .49414.074219 5 5 0 0 1 .48438.12305 5 5 0 0 1 .46875.17188 5 5 0 0 1 .44922.2168 5 5 0 0 1 .42578.26172 5 5 0 0 1 .39844.30273 5 5 0 0 1 .36524.33984 5 5 0 0 1 .33008.37695 5 5 0 0 1 .29102.40625 5 5 0 0 1 .24805.43359 5 5 0 0 1 .20508.45508 5 5 0 0 1 .1582.47461 5 5 0 0 1 .10938.48828 5 5 0 0 1 .060547.49609 5 5 0 0 1 .011719.35352 5 5 0 0 1 -.025391.5 5 5 0 0 1 -.074218.49414 5 5 0 0 1 -.12305.48438 5 5 0 0 1 -.17188.46875 5 5 0 0 1 -.2168.44922 5 5 0 0 1 -.26172.42578 5 5 0 0 1 -.30273.39844 5 5 0 0 1 -.33984.36524 5 5 0 0 1 -.37695.33008 5 5 0 0 1 -.40625.29102 5 5 0 0 1 -.43359.24805 5 5 0 0 1 -.45508.20508 5 5 0 0 1 -.47461.1582 5 5 0 0 1 -.48828.10938 5 5 0 0 1 -.49609.060547 5 5 0 0 1 -.35352.011719 5 5 0 0 1 -.5-.025391 5 5 0 0 1 -.49414-.074218 5 5 0 0 1 -.48438-.12305 5 5 0 0 1 -.46875-.17188 5 5 0 0 1 -.44922-.2168 5 5 0 0 1 -.42578-.26172 5 5 0 0 1 -.39844-.30273 5 5 0 0 1 -.36523-.33984 5 5 0 0 1 -.33008-.37695 5 5 0 0 1 -.29102-.40625 5 5 0 0 1 -.24805-.43359 5 5 0 0 1 -.20508-.45508 5 5 0 0 1 -.1582-.47461 5 5 0 0 1 -.10938-.48828 5 5 0 0 1 -.060547-.49609 5 5 0 0 1 -.011719-.35352 5 5 0 0 1 .025391-.5 5 5 0 0 1 .074219-.49414 5 5 0 0 1 .12305-.48438 5 5 0 0 1 .17188-.46875 5 5 0 0 1 .2168-.44922 5 5 0 0 1 .26172-.42578 5 5 0 0 1 .30273-.39844 5 5 0 0 1 .33984-.36523 5 5 0 0 1 .37695-.33008 5 5 0 0 1 .40625-.29102 5 5 0 0 1 .43359-.24805 5 5 0 0 1 .45508-.20508 5 5 0 0 1 .47461-.1582 5 5 0 0 1 .48828-.10938 5 5 0 0 1 .49609-.060547 5 5 0 0 1 .35352-.011719z" fill="#e0e0e0" fill-opacity=".289256" transform="translate(0 1036.4)"/><circle cx="8" cy="1044.4" r="3" style="fill:#fff;fill-opacity:.58824;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.32549;stroke-width:3"/></g><circle cx="7.932204" cy="8" fill="#fff" fill-opacity=".78431" r="3" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_slider_grabber_hl.svg b/editor/icons/icon_GUI_slider_grabber_hl.svg index a04ac44cf6..90d62934ec 100644 --- a/editor/icons/icon_GUI_slider_grabber_hl.svg +++ b/editor/icons/icon_GUI_slider_grabber_hl.svg @@ -1,80 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 15.999999" - id="svg8" - sodipodi:docname="icon_GUI_slider_grabber_hl.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="944" - inkscape:window-height="480" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <path - transform="translate(0 1036.4)" - d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 0.5 0.025391 5 5 0 0 1 0.49414 0.074219 5 5 0 0 1 0.48438 0.12305 5 5 0 0 1 0.46875 0.17188 5 5 0 0 1 0.44922 0.2168 5 5 0 0 1 0.42578 0.26172 5 5 0 0 1 0.39844 0.30273 5 5 0 0 1 0.36524 0.33984 5 5 0 0 1 0.33008 0.37695 5 5 0 0 1 0.29102 0.40625 5 5 0 0 1 0.24805 0.43359 5 5 0 0 1 0.20508 0.45508 5 5 0 0 1 0.1582 0.47461 5 5 0 0 1 0.10938 0.48828 5 5 0 0 1 0.060547 0.49609 5 5 0 0 1 0.011719 0.35352 5 5 0 0 1 -0.025391 0.5 5 5 0 0 1 -0.074218 0.49414 5 5 0 0 1 -0.12305 0.48438 5 5 0 0 1 -0.17188 0.46875 5 5 0 0 1 -0.2168 0.44922 5 5 0 0 1 -0.26172 0.42578 5 5 0 0 1 -0.30273 0.39844 5 5 0 0 1 -0.33984 0.36524 5 5 0 0 1 -0.37695 0.33008 5 5 0 0 1 -0.40625 0.29102 5 5 0 0 1 -0.43359 0.24805 5 5 0 0 1 -0.45508 0.20508 5 5 0 0 1 -0.47461 0.1582 5 5 0 0 1 -0.48828 0.10938 5 5 0 0 1 -0.49609 0.060547 5 5 0 0 1 -0.35352 0.011719 5 5 0 0 1 -0.5 -0.025391 5 5 0 0 1 -0.49414 -0.074218 5 5 0 0 1 -0.48438 -0.12305 5 5 0 0 1 -0.46875 -0.17188 5 5 0 0 1 -0.44922 -0.2168 5 5 0 0 1 -0.42578 -0.26172 5 5 0 0 1 -0.39844 -0.30273 5 5 0 0 1 -0.36523 -0.33984 5 5 0 0 1 -0.33008 -0.37695 5 5 0 0 1 -0.29102 -0.40625 5 5 0 0 1 -0.24805 -0.43359 5 5 0 0 1 -0.20508 -0.45508 5 5 0 0 1 -0.1582 -0.47461 5 5 0 0 1 -0.10938 -0.48828 5 5 0 0 1 -0.060547 -0.49609 5 5 0 0 1 -0.011719 -0.35352 5 5 0 0 1 0.025391 -0.5 5 5 0 0 1 0.074219 -0.49414 5 5 0 0 1 0.12305 -0.48438 5 5 0 0 1 0.17188 -0.46875 5 5 0 0 1 0.2168 -0.44922 5 5 0 0 1 0.26172 -0.42578 5 5 0 0 1 0.30273 -0.39844 5 5 0 0 1 0.33984 -0.36523 5 5 0 0 1 0.37695 -0.33008 5 5 0 0 1 0.40625 -0.29102 5 5 0 0 1 0.43359 -0.24805 5 5 0 0 1 0.45508 -0.20508 5 5 0 0 1 0.47461 -0.1582 5 5 0 0 1 0.48828 -0.10938 5 5 0 0 1 0.49609 -0.060547 5 5 0 0 1 0.35352 -0.011719z" - fill="#e0e0e0" - id="path2" /> - <circle - cx="8" - cy="1044.4" - r="3" - fill="#fff" - fill-opacity=".58824" - stroke-linecap="round" - stroke-linejoin="round" - stroke-opacity=".32549" - stroke-width="3" - id="circle4" /> - </g> - <g - transform="translate(-0.06779632,-1036.4)" - id="g18"> - <circle - style="fill:#ffffff;fill-opacity:0.78430996;stroke-width:3;stroke-linejoin:round;stroke-opacity:0.39216003" - cx="8" - cy="1044.4" - r="3" - id="circle16" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 15.999999" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm0 2a5 5 0 0 1 .5.025391 5 5 0 0 1 .49414.074219 5 5 0 0 1 .48438.12305 5 5 0 0 1 .46875.17188 5 5 0 0 1 .44922.2168 5 5 0 0 1 .42578.26172 5 5 0 0 1 .39844.30273 5 5 0 0 1 .36524.33984 5 5 0 0 1 .33008.37695 5 5 0 0 1 .29102.40625 5 5 0 0 1 .24805.43359 5 5 0 0 1 .20508.45508 5 5 0 0 1 .1582.47461 5 5 0 0 1 .10938.48828 5 5 0 0 1 .060547.49609 5 5 0 0 1 .011719.35352 5 5 0 0 1 -.025391.5 5 5 0 0 1 -.074218.49414 5 5 0 0 1 -.12305.48438 5 5 0 0 1 -.17188.46875 5 5 0 0 1 -.2168.44922 5 5 0 0 1 -.26172.42578 5 5 0 0 1 -.30273.39844 5 5 0 0 1 -.33984.36524 5 5 0 0 1 -.37695.33008 5 5 0 0 1 -.40625.29102 5 5 0 0 1 -.43359.24805 5 5 0 0 1 -.45508.20508 5 5 0 0 1 -.47461.1582 5 5 0 0 1 -.48828.10938 5 5 0 0 1 -.49609.060547 5 5 0 0 1 -.35352.011719 5 5 0 0 1 -.5-.025391 5 5 0 0 1 -.49414-.074218 5 5 0 0 1 -.48438-.12305 5 5 0 0 1 -.46875-.17188 5 5 0 0 1 -.44922-.2168 5 5 0 0 1 -.42578-.26172 5 5 0 0 1 -.39844-.30273 5 5 0 0 1 -.36523-.33984 5 5 0 0 1 -.33008-.37695 5 5 0 0 1 -.29102-.40625 5 5 0 0 1 -.24805-.43359 5 5 0 0 1 -.20508-.45508 5 5 0 0 1 -.1582-.47461 5 5 0 0 1 -.10938-.48828 5 5 0 0 1 -.060547-.49609 5 5 0 0 1 -.011719-.35352 5 5 0 0 1 .025391-.5 5 5 0 0 1 .074219-.49414 5 5 0 0 1 .12305-.48438 5 5 0 0 1 .17188-.46875 5 5 0 0 1 .2168-.44922 5 5 0 0 1 .26172-.42578 5 5 0 0 1 .30273-.39844 5 5 0 0 1 .33984-.36523 5 5 0 0 1 .37695-.33008 5 5 0 0 1 .40625-.29102 5 5 0 0 1 .43359-.24805 5 5 0 0 1 .45508-.20508 5 5 0 0 1 .47461-.1582 5 5 0 0 1 .48828-.10938 5 5 0 0 1 .49609-.060547 5 5 0 0 1 .35352-.011719z" fill="#e0e0e0" transform="translate(0 1036.4)"/><circle cx="8" cy="1044.4" r="3" style="fill:#fff;fill-opacity:.58824;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.32549;stroke-width:3"/></g><circle cx="7.932204" cy="8" fill="#fff" fill-opacity=".78431" r="3" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_space.svg b/editor/icons/icon_GUI_space.svg index caa4565f4a..b43e97b6e1 100644 --- a/editor/icons/icon_GUI_space.svg +++ b/editor/icons/icon_GUI_space.svg @@ -1,71 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="8" - height="8" - version="1.1" - viewBox="0 0 8 7.9999993" - id="svg98" - sodipodi:docname="icon_GUI_space.svg" - inkscape:version="0.92.4 (unknown)"> - <metadata - id="metadata104"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs102"> - <inkscape:perspective - sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 3.9999996 : 1" - inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="8 : 3.9999996 : 1" - inkscape:persp3d-origin="4 : 2.6666664 : 1" - id="perspective992" /> - </defs> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1853" - inkscape:window-height="1025" - id="namedview100" - showgrid="false" - inkscape:zoom="70.333333" - inkscape:cx="3.4905213" - inkscape:cy="6" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="svg98" - inkscape:pagecheckerboard="true" /> - <g - transform="matrix(0.5,0,0,-0.5,1,527.20001)" - id="g96" - style="fill:#ffffff;fill-opacity:0.19607843"> - <circle - cx="6" - cy="1046.4" - r="3" - id="circle94" - style="fill:#ffffff;fill-opacity:0.19607843" /> - </g> -</svg> +<svg height="8" viewBox="0 0 8 7.9999993" width="8" xmlns="http://www.w3.org/2000/svg"><circle cx="6" cy="1046.4" fill="#fff" fill-opacity=".196078" r="3" transform="matrix(.5 0 0 -.5 1 527.20001)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_spinbox_updown.svg b/editor/icons/icon_GUI_spinbox_updown.svg index 24c74ba6cd..a6776728e3 100644 --- a/editor/icons/icon_GUI_spinbox_updown.svg +++ b/editor/icons/icon_GUI_spinbox_updown.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-4 4a1.0001 1.0001 0 1 0 1.4141 1.4141l3.293-3.293 3.293 3.293a1.0001 1.0001 0 1 0 1.4141 -1.4141l-4-4a1.0001 1.0001 0 0 0 -0.72266 -0.29102zm4.0059 7.9844a1.0001 1.0001 0 0 0 -0.69726 0.30664l-3.293 3.293-3.293-3.293a1.0001 1.0001 0 0 0 -0.7168 -0.30273 1.0001 1.0001 0 0 0 -0.69727 1.7168l4 4a1.0001 1.0001 0 0 0 1.4141 0l4-4a1.0001 1.0001 0 0 0 -0.7168 -1.7207z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".78431" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9844 1.002a1.0001 1.0001 0 0 0 -.69141.29102l-4 4a1.0001 1.0001 0 1 0 1.4141 1.4141l3.293-3.293 3.293 3.293a1.0001 1.0001 0 1 0 1.4141-1.4141l-4-4a1.0001 1.0001 0 0 0 -.72266-.29102zm4.0059 7.9844a1.0001 1.0001 0 0 0 -.69726.30664l-3.293 3.293-3.293-3.293a1.0001 1.0001 0 0 0 -.7168-.30273 1.0001 1.0001 0 0 0 -.69727 1.7168l4 4a1.0001 1.0001 0 0 0 1.4141 0l4-4a1.0001 1.0001 0 0 0 -.7168-1.7207z" fill="#e0e0e0" fill-opacity=".78431"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tab.svg b/editor/icons/icon_GUI_tab.svg index 3eed0680c0..8451ebe5c0 100644 --- a/editor/icons/icon_GUI_tab.svg +++ b/editor/icons/icon_GUI_tab.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m6 0v8h2v-8h-2zm-5.0137 0.0019531a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l2.293 2.293-2.293 2.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l3-3a1.0001 1.0001 0 0 0 0 -1.4141l-3-3a1 1 0 0 0 -0.7207 -0.29102z" fill="#fff" fill-opacity=".19608"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m6 0v8h2v-8zm-5.0137.0019531a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l2.293 2.293-2.293 2.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l3-3a1.0001 1.0001 0 0 0 0-1.4141l-3-3a1 1 0 0 0 -.7207-.29102z" fill="#fff" fill-opacity=".19608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tab_menu.svg b/editor/icons/icon_GUI_tab_menu.svg index 9284e7488b..8bf5ef2f7d 100644 --- a/editor/icons/icon_GUI_tab_menu.svg +++ b/editor/icons/icon_GUI_tab_menu.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#fff" fill-opacity=".39216"/> -</g> -</svg> +<svg height="16" viewBox="0 0 6 16" width="6" xmlns="http://www.w3.org/2000/svg"><path d="m3 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tab_menu_hl.svg b/editor/icons/icon_GUI_tab_menu_hl.svg new file mode 100644 index 0000000000..42d58a5abf --- /dev/null +++ b/editor/icons/icon_GUI_tab_menu_hl.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 6 16" width="6" xmlns="http://www.w3.org/2000/svg"><path d="m3 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm0 6a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_toggle_off.svg b/editor/icons/icon_GUI_toggle_off.svg index 928b55b201..46f13d198d 100644 --- a/editor/icons/icon_GUI_toggle_off.svg +++ b/editor/icons/icon_GUI_toggle_off.svg @@ -1 +1 @@ -<svg height="26" viewBox="0 0 42 25.999998" width="42" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><rect fill-opacity=".188235" height="16" rx="9" stroke-width="55.8958" width="38" x="2" y="5"/><circle cx="10" cy="13" r="5" stroke-width="97.3613"/></g></svg> +<svg height="26" viewBox="0 0 42 25.999998" width="42" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><rect fill-opacity=".188235" height="16" rx="9" stroke-width="55.8958" width="38" x="2" y="5"/><circle cx="10" cy="13" r="5" stroke-width="97.3613"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_toggle_on.svg b/editor/icons/icon_GUI_toggle_on.svg index a79a8290b1..0316680daa 100644 --- a/editor/icons/icon_GUI_toggle_on.svg +++ b/editor/icons/icon_GUI_toggle_on.svg @@ -1 +1 @@ -<svg height="26" viewBox="0 0 42 25.999998" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m11 5c-4.986 0-9 3.568-9 8s4.014 8 9 8h20c4.986 0 9-3.568 9-8s-4.014-8-9-8zm21 3a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5z" fill="#e0e0e0" stroke-width="55.8958"/></svg> +<svg height="26" viewBox="0 0 42 25.999998" width="42" xmlns="http://www.w3.org/2000/svg"><path d="m11 5c-4.986 0-9 3.568-9 8s4.014 8 9 8h20c4.986 0 9-3.568 9-8s-4.014-8-9-8zm21 3a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5z" fill="#e0e0e0" stroke-width="55.8958"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tree_arrow_down.svg b/editor/icons/icon_GUI_tree_arrow_down.svg index 332b49d4cf..fd2d900711 100644 --- a/editor/icons/icon_GUI_tree_arrow_down.svg +++ b/editor/icons/icon_GUI_tree_arrow_down.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m3 1045.4 3 3 3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m3 1045.4 3 3 3-3" style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.39216;stroke-width:2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tree_arrow_right.svg b/editor/icons/icon_GUI_tree_arrow_right.svg index b3da27f1fa..e20c92e2e7 100644 --- a/editor/icons/icon_GUI_tree_arrow_right.svg +++ b/editor/icons/icon_GUI_tree_arrow_right.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m4 1049.4 3-3-3-3" fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m4 1049.4 3-3-3-3" style="fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.39216;stroke-width:2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tree_arrow_up.svg b/editor/icons/icon_GUI_tree_arrow_up.svg index 4e6e8e9e29..464363a8b1 100644 --- a/editor/icons/icon_GUI_tree_arrow_up.svg +++ b/editor/icons/icon_GUI_tree_arrow_up.svg @@ -1,60 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="12" - height="12" - version="1.1" - viewBox="0 0 12 12" - id="svg6" - sodipodi:docname="icon_GUI_tree_arrow_up.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1673" - inkscape:window-height="594" - id="namedview8" - showgrid="false" - inkscape:zoom="19.666667" - inkscape:cx="-4.3220338" - inkscape:cy="6.0000001" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="rotate(180,6,526.08476)" - id="g4"> - <path - d="m 3,1045.4 3,3 3,-3" - id="path2" - inkscape:connector-curvature="0" - style="fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0.39216003" /> - </g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m3 1045.4 3 3 3-3" style="fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.39216" transform="matrix(-1 0 0 -1 12 1052.16952)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_tree_option.svg b/editor/icons/icon_GUI_tree_option.svg deleted file mode 100644 index 4200745a78..0000000000 --- a/editor/icons/icon_GUI_tree_option.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m7.5 1a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm0 5a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm0 5a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5z" fill="#fff" fill-opacity=".58824" stroke-linejoin="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> diff --git a/editor/icons/icon_GUI_tree_updown.svg b/editor/icons/icon_GUI_tree_updown.svg index cdcd6c2441..66716845df 100644 --- a/editor/icons/icon_GUI_tree_updown.svg +++ b/editor/icons/icon_GUI_tree_updown.svg @@ -1,5 +1 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)"> -<path transform="translate(0 1038.4)" d="m6.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-3 3a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2.293-2.293 2.293 2.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-3-3a1.0001 1.0001 0 0 0 -0.72266 -0.29102zm3 6.998a1 1 0 0 0 -0.69141 0.29297l-2.293 2.293-2.293-2.293a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 1.4141 0l3-3a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.72266 -0.29297z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".58824" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><path d="m6.9844 1.002a1.0001 1.0001 0 0 0 -.69141.29102l-3 3a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2.293-2.293 2.293 2.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-3-3a1.0001 1.0001 0 0 0 -.72266-.29102zm3 6.998a1 1 0 0 0 -.69141.29297l-2.293 2.293-2.293-2.293a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 1.4141 0l3-3a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.72266-.29297z" fill="#fff" fill-opacity=".58824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_v_tick.svg b/editor/icons/icon_GUI_v_tick.svg index 87b5656927..4205237952 100644 --- a/editor/icons/icon_GUI_v_tick.svg +++ b/editor/icons/icon_GUI_v_tick.svg @@ -1,5 +1 @@ -<svg width="16" height="4" version="1.1" viewBox="0 0 16 3.9999998" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0,-12)"> -<circle cx="2" cy="14" r="1" fill="#fff" fill-opacity=".39216"/> -</g> -</svg> +<svg height="4" viewBox="0 0 16 3.9999998" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="2" cy="2" fill="#fff" fill-opacity=".39216" r="1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_viewport_hdiagsplitter.svg b/editor/icons/icon_GUI_viewport_hdiagsplitter.svg index 90a0f56c43..b1705582dc 100644 --- a/editor/icons/icon_GUI_viewport_hdiagsplitter.svg +++ b/editor/icons/icon_GUI_viewport_hdiagsplitter.svg @@ -1,5 +1 @@ -<svg width="64" height="34" version="1.1" viewBox="0 0 64 34" xmlns="http://www.w3.org/2000/svg"> -<g transform="rotate(90,541.2,539.2)"> -<path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="34" viewBox="0 0 64 34" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2" transform="matrix(0 1 -1 0 1080.4 -2)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_viewport_vdiagsplitter.svg b/editor/icons/icon_GUI_viewport_vdiagsplitter.svg index 481f895d46..0817529ff1 100644 --- a/editor/icons/icon_GUI_viewport_vdiagsplitter.svg +++ b/editor/icons/icon_GUI_viewport_vdiagsplitter.svg @@ -1,7 +1 @@ -<svg width="34" height="64" version="1.1" viewBox="0 0 34 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="rotate(90 32.004 32.004)"> -<g transform="rotate(90,526.2,554.2)"> -<path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</g> -</svg> +<svg height="64" viewBox="0 0 34 64" width="34" xmlns="http://www.w3.org/2000/svg"><path d="m4.0307 1048.4h29.969m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2" transform="matrix(-1 0 0 -1 36.008 1080.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_viewport_vhsplitter.svg b/editor/icons/icon_GUI_viewport_vhsplitter.svg index 52d7d8f0b7..a11fbd1b4c 100644 --- a/editor/icons/icon_GUI_viewport_vhsplitter.svg +++ b/editor/icons/icon_GUI_viewport_vhsplitter.svg @@ -1,5 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="rotate(90,526.2,554.2)"> -<path d="m-26 1048.4h60m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m-26 1048.4h60m-30 30v-60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2" transform="matrix(0 1 -1 0 1080.4 28)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_visibility_hidden.svg b/editor/icons/icon_GUI_visibility_hidden.svg index 7b7f3c8031..1d1e61d1bb 100644 --- a/editor/icons/icon_GUI_visibility_hidden.svg +++ b/editor/icons/icon_GUI_visibility_hidden.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2.9609 7.7266-1.9219 0.54883c0.31999 1.12 0.8236 2.0593 1.4316 2.8398l-0.83398 0.83398 1.4141 1.4141 0.84375-0.84375c0.98585 0.74762 2.0766 1.2067 3.1055 1.3867v1.0938h2v-1.0938c1.0288-0.17998 2.1196-0.6391 3.1055-1.3867l0.84375 0.84375 1.4141-1.4141-0.83398-0.83398c0.60804-0.78055 1.1117-1.7199 1.4316-2.8398l-1.9219-0.54883c-0.8756 3.0646-3.5391 4.2734-5.0391 4.2734s-4.1635-1.2088-5.0391-4.2734z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.9609 7.7266-1.9219.54883c.31999 1.12.8236 2.0593 1.4316 2.8398l-.83398.83398 1.4141 1.4141.84375-.84375c.98585.74762 2.0766 1.2067 3.1055 1.3867v1.0938h2v-1.0938c1.0288-.17998 2.1196-.6391 3.1055-1.3867l.84375.84375 1.4141-1.4141-.83398-.83398c.60804-.78055 1.1117-1.7199 1.4316-2.8398l-1.9219-.54883c-.8756 3.0646-3.5391 4.2734-5.0391 4.2734s-4.1635-1.2088-5.0391-4.2734z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_visibility_visible.svg b/editor/icons/icon_GUI_visibility_visible.svg index e3aff37058..2e56f57ed8 100644 --- a/editor/icons/icon_GUI_visibility_visible.svg +++ b/editor/icons/icon_GUI_visibility_visible.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.00586 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0 -0.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.00586.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0-.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_visibility_xray.svg b/editor/icons/icon_GUI_visibility_xray.svg index b78709821f..241ff3e7e5 100644 --- a/editor/icons/icon_GUI_visibility_xray.svg +++ b/editor/icons/icon_GUI_visibility_xray.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#e0e0e0" fill-rule="evenodd" shape-rendering="auto"> -<path d="m7.9998 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.00586 0.5703c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0 -0.5527c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" color="#000000" color-rendering="auto" fill-opacity=".39216" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m8 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.00586 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246v-2a4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2z" color="#000000" color-rendering="auto" fill-opacity=".99608" image-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-rule="evenodd"><path d="m7.9998 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.00586.5703c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0-.5527c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill-opacity=".39216"/><path d="m8 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.00586.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246v-2a4 4 0 0 1 -4-4 4 4 0 0 1 4-4zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_vsplit_bg.svg b/editor/icons/icon_GUI_vsplit_bg.svg index 8294c44611..fa572c797e 100644 --- a/editor/icons/icon_GUI_vsplit_bg.svg +++ b/editor/icons/icon_GUI_vsplit_bg.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 7.9999995" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<rect y="1044.4" width="8" height="8" fill-opacity=".098039"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 7.9999995" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h8v8h-8z" fill-opacity=".098039"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_GUI_vsplitter.svg b/editor/icons/icon_GUI_vsplitter.svg index 31b4019486..8629801713 100644 --- a/editor/icons/icon_GUI_vsplitter.svg +++ b/editor/icons/icon_GUI_vsplitter.svg @@ -1,5 +1 @@ -<svg width="64" height="8" version="1.1" viewBox="0 0 64 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m2 1048.4h60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2"/> -</g> -</svg> +<svg height="8" viewBox="0 0 64 8" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m2 1048.4h60" fill="none" stroke="#fff" stroke-linecap="round" stroke-opacity=".39216" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_a_a_b_b.svg b/editor/icons/icon_a_a_b_b.svg index 1af05f9b68..d6fbc52541 100644 --- a/editor/icons/icon_a_a_b_b.svg +++ b/editor/icons/icon_a_a_b_b.svg @@ -1,6 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path transform="translate(0 1040.4)" d="m5 1a3 3 0 0 0 -3 3 3 3 0 0 0 0.77734 2.0117 3 3 0 0 0 -2.7773 2.9883 3 3 0 0 0 3 3h2v-5h2v-6h-2zm6 0v5.1738a3 3 0 0 0 -1 -0.17383v-2h-2v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm-6 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm-10 3v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#ee7991"/> -<path transform="translate(0 1040.4)" d="m8 4v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2h-2zm-5 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#fff" fill-opacity=".23529"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1a3 3 0 0 0 -3 3 3 3 0 0 0 .77734 2.0117 3 3 0 0 0 -2.7773 2.9883 3 3 0 0 0 3 3h2v-5h2v-6h-2zm6 0v5.1738a3 3 0 0 0 -1-.17383v-2h-2v8h2a3 3 0 0 0 3-3 3 3 0 0 0 3-3 3 3 0 0 0 -3-3v-2h-2zm-6 2v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm8 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1zm-10 3v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#ee7991"/><path d="m8 4v8h2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3v-2zm-5 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6zm0 2v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm7 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#fff" fill-opacity=".23529"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_a_r_v_r_anchor.svg b/editor/icons/icon_a_r_v_r_anchor.svg index 1a8398a1be..f1571b3fcc 100644 --- a/editor/icons/icon_a_r_v_r_anchor.svg +++ b/editor/icons/icon_a_r_v_r_anchor.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v2h-2v2h2v3.2656l-2.5527-1.2773c-0.15005-0.075253-0.31662-0.11152-0.48438-0.10547-0.36536 0.013648-0.69415 0.2256-0.85742 0.55273-0.24709 0.49403-0.046823 1.0948 0.44727 1.3418l4.4473 2.2227 4.4473-2.2227c0.49409-0.24697 0.69435-0.84777 0.44726-1.3418-0.24697-0.49409-0.84777-0.69435-1.3418-0.44727l-2.5527 1.2773v-3.2656h2v-2h-2v-2zm-3 11v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h-2v2h2v3.2656l-2.5527-1.2773c-.15005-.075253-.31662-.11152-.48438-.10547-.36536.013648-.69415.2256-.85742.55273-.24709.49403-.046823 1.0948.44727 1.3418l4.4473 2.2227 4.4473-2.2227c.49409-.24697.69435-.84777.44726-1.3418-.24697-.49409-.84777-.69435-1.3418-.44727l-2.5527 1.2773v-3.2656h2v-2h-2v-2zm-3 11v1c0 .55228.44772 1 1 1-.55228 0-1 .44772-1 1v1h1v-1h1v1h1v-1c0-.55228-.44772-1-1-1 .55228 0 1-.44772 1-1v-1h-1v1h-1v-1zm5 0v4h1v-1h1v1h1v-1c-.000834-.17579-.047991-.34825-.13672-.5.088728-.15175.13588-.32421.13672-.5v-1c0-.55228-.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_a_r_v_r_camera.svg b/editor/icons/icon_a_r_v_r_camera.svg index 5bf815bcef..f59a8c8b4a 100644 --- a/editor/icons/icon_a_r_v_r_camera.svg +++ b/editor/icons/icon_a_r_v_r_camera.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m9.5 0a3 3 0 0 0 -2.9883 2.7773 3 3 0 0 0 -2.0117 -0.77734 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8242v2.1758c0 0.554 0.44599 1 1 1h6c0.55401 0 1-0.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1 -2.2305 3 3 0 0 0 -3 -3zm-5.5 12v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9.5 0a3 3 0 0 0 -2.9883 2.7773 3 3 0 0 0 -2.0117-.77734 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8242v2.1758c0 .554.44599 1 1 1h6c.55401 0 1-.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1-2.2305 3 3 0 0 0 -3-3zm-5.5 12v1c0 .55228.44772 1 1 1-.55228 0-1 .44772-1 1v1h1v-1h1v1h1v-1c0-.55228-.44772-1-1-1 .55228 0 1-.44772 1-1v-1h-1v1h-1v-1zm5 0v1 3h1v-1h1v1h1v-1c-.000834-.17579-.047991-.34825-.13672-.5.088728-.15175.13588-.32421.13672-.5v-1c0-.55228-.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_a_r_v_r_controller.svg b/editor/icons/icon_a_r_v_r_controller.svg index a61f99ffdf..40e5b8dce1 100644 --- a/editor/icons/icon_a_r_v_r_controller.svg +++ b/editor/icons/icon_a_r_v_r_controller.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1c-0.554 0-1 0.446-1 1v6c0 0.554 0.446 1 1 1h12c0.554 0 1-0.446 1-1v-6c0-0.554-0.446-1-1-1h-12zm2 1h2v2h2v2h-2v2h-2v-2h-2v-2h2v-2zm9 1c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-2 2c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-7 7v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.554 0-1 .446-1 1v6c0 .554.446 1 1 1h12c.554 0 1-.446 1-1v-6c0-.554-.446-1-1-1zm2 1h2v2h2v2h-2v2h-2v-2h-2v-2h2zm9 1c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1zm-2 2c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1zm-7 7v1c0 .55228.44772 1 1 1-.55228 0-1 .44772-1 1v1h1v-1h1v1h1v-1c0-.55228-.44772-1-1-1 .55228 0 1-.44772 1-1v-1h-1v1h-1v-1zm5 0v1 3h1v-1h1v1h1v-1c-.000834-.17579-.047991-.34825-.13672-.5.088728-.15175.13588-.32421.13672-.5v-1c0-.55228-.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_a_r_v_r_origin.svg b/editor/icons/icon_a_r_v_r_origin.svg index 53a149cec6..dbb93ba7a5 100644 --- a/editor/icons/icon_a_r_v_r_origin.svg +++ b/editor/icons/icon_a_r_v_r_origin.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v3h2v-3h-2zm-4 4v2h3v-2h-3zm5 0c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1 1-0.44772 1-1-0.44772-1-1-1zm2 0v2h3v-2h-3zm-3 3v3h2v-3h-2zm-3 4v1c0 0.55228 0.44772 1 1 1-0.55228 0-1 0.44772-1 1v1h1v-1h1v1h1v-1c0-0.55228-0.44772-1-1-1 0.55228 0 1-0.44772 1-1v-1h-1v1h-1v-1h-1zm5 0v1 3h1v-1h1v1h1v-1c-8.34e-4 -0.17579-0.047991-0.34825-0.13672-0.5 0.088728-0.15175 0.13588-0.32421 0.13672-0.5v-1c0-0.55228-0.44772-1-1-1h-1-1zm1 1h1v1h-1v-1z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v3h2v-3zm-4 4v2h3v-2zm5 0c-.55228 0-1 .44772-1 1s.44772 1 1 1 1-.44772 1-1-.44772-1-1-1zm2 0v2h3v-2zm-3 3v3h2v-3zm-3 4v1c0 .55228.44772 1 1 1-.55228 0-1 .44772-1 1v1h1v-1h1v1h1v-1c0-.55228-.44772-1-1-1 .55228 0 1-.44772 1-1v-1h-1v1h-1v-1zm5 0v1 3h1v-1h1v1h1v-1c-.000834-.17579-.047991-.34825-.13672-.5.088728-.15175.13588-.32421.13672-.5v-1c0-.55228-.44772-1-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_accept_dialog.svg b/editor/icons/icon_accept_dialog.svg index b65f58b35e..e0bf7b8336 100644 --- a/editor/icons/icon_accept_dialog.svg +++ b/editor/icons/icon_accept_dialog.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8zm9.4746 1.6367 1.4141 1.4141-4.9492 4.9492-2.8281-2.8281 1.4141-1.4141 1.4141 1.4141z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8zm9.4746 1.6367 1.4141 1.4141-4.9492 4.9492-2.8281-2.8281 1.4141-1.4141 1.4141 1.4141z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_action_copy.svg b/editor/icons/icon_action_copy.svg index d5da233bc9..d7a1e1097a 100644 --- a/editor/icons/icon_action_copy.svg +++ b/editor/icons/icon_action_copy.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1c-0.554 0-1 0.446-1 1v9c0 0.554 0.446 1 1 1h1v-9h9v-1c0-0.554-0.446-1-1-1h-9zm3 3c-0.554 0-1 0.446-1 1v9c0 0.554 0.446 1 1 1h9c0.554 0 1-0.446 1-1v-9c0-0.554-0.446-1-1-1h-9zm1 2h7v7h-7v-7z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.554 0-1 .446-1 1v9c0 .554.446 1 1 1h1v-9h9v-1c0-.554-.446-1-1-1zm3 3c-.554 0-1 .446-1 1v9c0 .554.446 1 1 1h9c.554 0 1-.446 1-1v-9c0-.554-.446-1-1-1zm1 2h7v7h-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_action_cut.svg b/editor/icons/icon_action_cut.svg index 776ca3a4c4..97df9b2d5a 100644 --- a/editor/icons/icon_action_cut.svg +++ b/editor/icons/icon_action_cut.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3.6348 0.50977c-2.9641 2.866 0.53553 8.9289 2.7676 8.7949l0.44141 0.76562-0.56445 0.97852a3 3 0 0 0 -2.2793 -1.0488 3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 2.5938 -1.502l0.0039062 0.001953 1.4023-2.4277 1.4023 2.4277 0.0019531-0.001953a3 3 0 0 0 2.5957 1.502 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3 3 3 0 0 0 -2.2773 1.0527l-0.56641-0.98242 0.44141-0.76562c2.2321 0.13397 5.7317-5.9289 2.7676-8.7949l-4.3652 7.5605-4.3652-7.5605zm0.36523 11.49a1 1 0 0 1 1 1 1 1 0 0 1 -0.12305 0.47852l-0.011719 0.021484a1 1 0 0 1 -0.86523 0.5 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm8 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.6348.50977c-2.9641 2.866.53553 8.9289 2.7676 8.7949l.44141.76562-.56445.97852a3 3 0 0 0 -2.2793-1.0488 3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 2.5938-1.502l.0039062.001953 1.4023-2.4277 1.4023 2.4277.0019531-.001953a3 3 0 0 0 2.5957 1.502 3 3 0 0 0 3-3 3 3 0 0 0 -3-3 3 3 0 0 0 -2.2773 1.0527l-.56641-.98242.44141-.76562c2.2321.13397 5.7317-5.9289 2.7676-8.7949l-4.3652 7.5605-4.3652-7.5605zm.36523 11.49a1 1 0 0 1 1 1 1 1 0 0 1 -.12305.47852l-.011719.021484a1 1 0 0 1 -.86523.5 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm8 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_action_paste.svg b/editor/icons/icon_action_paste.svg index b71e5531df..6d46f899f8 100644 --- a/editor/icons/icon_action_paste.svg +++ b/editor/icons/icon_action_paste.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-1.3045 0-2.4033 0.8372-2.8164 2h-3.1836c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h12c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-3.1836c-0.41312-1.1628-1.5119-2-2.8164-2zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-5 2h2v2h6v-2h2v8h-10v-8z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.3045 0-2.4033.8372-2.8164 2h-3.1836c-.554 0-1 .446-1 1v10c0 .554.446 1 1 1h12c.554 0 1-.446 1-1v-10c0-.554-.446-1-1-1h-3.1836c-.41312-1.1628-1.5119-2-2.8164-2zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-5 2h2v2h6v-2h2v8h-10z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_add.svg b/editor/icons/icon_add.svg index 3b7e9b8fc1..a241829603 100644 --- a/editor/icons/icon_add.svg +++ b/editor/icons/icon_add.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_add_atlas_tile.svg b/editor/icons/icon_add_atlas_tile.svg index 912a0ce2c9..97d3590678 100644 --- a/editor/icons/icon_add_atlas_tile.svg +++ b/editor/icons/icon_add_atlas_tile.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#c9cfd4"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#c9cfd4"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_add_autotile.svg b/editor/icons/icon_add_autotile.svg index 2cc34d53b1..c6f1df422d 100644 --- a/editor/icons/icon_add_autotile.svg +++ b/editor/icons/icon_add_autotile.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#4490fc"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#4490fc"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_add_single_tile.svg b/editor/icons/icon_add_single_tile.svg index 01af8e0649..319fef8078 100644 --- a/editor/icons/icon_add_single_tile.svg +++ b/editor/icons/icon_add_single_tile.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6h-2z" fill="#fce844"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v2h6v6h2v-6h6v-2h-6v-6z" fill="#fce844"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_add_split.svg b/editor/icons/icon_add_split.svg index 4555fceb7c..1f33e8c72b 100644 --- a/editor/icons/icon_add_split.svg +++ b/editor/icons/icon_add_split.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 13 10-10" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> -</g> -<circle cx="4" cy="12" r="2" fill="none"/> -<path d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-10 10a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 13 10-10" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/><circle cx="4" cy="12" fill="none" r="2"/><path d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-10 10a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_anchor.svg b/editor/icons/icon_anchor.svg index 9818fe31b1..119960d177 100644 --- a/editor/icons/icon_anchor.svg +++ b/editor/icons/icon_anchor.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8262v0.17383h-2v2h2v3.8984a5 5 0 0 1 -3.8281 -3.6035l-1.9336 0.51758a7 7 0 0 0 6.7617 5.1875 7 7 0 0 0 6.7617 -5.1875l-1.9375-0.51953a5 5 0 0 1 -3.8242 3.6035v-3.8965h2v-2h-2v-0.17578a3 3 0 0 0 2 -2.8242 3 3 0 0 0 -3 -3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8262v.17383h-2v2h2v3.8984a5 5 0 0 1 -3.8281-3.6035l-1.9336.51758a7 7 0 0 0 6.7617 5.1875 7 7 0 0 0 6.7617-5.1875l-1.9375-.51953a5 5 0 0 1 -3.8242 3.6035v-3.8965h2v-2h-2v-.17578a3 3 0 0 0 2-2.8242 3 3 0 0 0 -3-3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animated_sprite.svg b/editor/icons/icon_animated_sprite.svg index 6fdf8a7a40..411ddda015 100644 --- a/editor/icons/icon_animated_sprite.svg +++ b/editor/icons/icon_animated_sprite.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#a5b7f3"> -<path d="m7 0c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2z" fill-opacity=".39216"/> -<path d="m5 2c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7z" fill-opacity=".58824"/> -<path d="m3 4c-1.108 0-2 0.89199-2 2v7c0 1.108 0.89199 2 2 2h7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7zm0 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm7 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5b7f3"><path d="m7 0c-1.108 0-2 .89199-2 2h7c1.108 0 2 .89199 2 2v6c1.108 0 2-.89199 2-2v-6c0-1.108-.89199-2-2-2z" fill-opacity=".39216"/><path d="m5 2c-1.108 0-2 .89199-2 2h7c1.108 0 2 .89199 2 2v7c1.108 0 2-.89199 2-2v-7c0-1.108-.89199-2-2-2z" fill-opacity=".58824"/><path d="m3 4c-1.108 0-2 .89199-2 2v7c0 1.108.89199 2 2 2h7c1.108 0 2-.89199 2-2v-7c0-1.108-.89199-2-2-2zm0 4c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm7 0c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25-1.7324z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animated_sprite_3d.svg b/editor/icons/icon_animated_sprite_3d.svg index ccc836832c..974c4e04eb 100644 --- a/editor/icons/icon_animated_sprite_3d.svg +++ b/editor/icons/icon_animated_sprite_3d.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#fc9c9c"> -<path d="m7 0c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2z" fill-opacity=".39216"/> -<path d="m5 2c-1.108 0-2 0.89199-2 2h7c1.108 0 2 0.89199 2 2v7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7z" fill-opacity=".58824"/> -<path d="m3 4c-1.108 0-2 0.89199-2 2v7c0 1.108 0.89199 2 2 2h7c1.108 0 2-0.89199 2-2v-7c0-1.108-0.89199-2-2-2h-7zm0 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm7 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25 -1.7324z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc9c9c"><path d="m7 0c-1.108 0-2 .89199-2 2h7c1.108 0 2 .89199 2 2v6c1.108 0 2-.89199 2-2v-6c0-1.108-.89199-2-2-2z" fill-opacity=".39216"/><path d="m5 2c-1.108 0-2 .89199-2 2h7c1.108 0 2 .89199 2 2v7c1.108 0 2-.89199 2-2v-7c0-1.108-.89199-2-2-2z" fill-opacity=".58824"/><path d="m3 4c-1.108 0-2 .89199-2 2v7c0 1.108.89199 2 2 2h7c1.108 0 2-.89199 2-2v-7c0-1.108-.89199-2-2-2zm0 4c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm7 0c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm-6 4h5a2.5 2 0 0 1 -1.25 1.7324 2.5 2 0 0 1 -2.5 0 2.5 2 0 0 1 -1.25-1.7324z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animated_texture.svg b/editor/icons/icon_animated_texture.svg index dd039df6a7..3719b64747 100644 --- a/editor/icons/icon_animated_texture.svg +++ b/editor/icons/icon_animated_texture.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_animated_texture.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10"> - <filter - inkscape:collect="always" - style="color-interpolation-filters:sRGB" - id="filter822" - x="-0.012" - width="1.024" - y="-0.012" - height="1.024"> - <feGaussianBlur - inkscape:collect="always" - stdDeviation="0.07" - id="feGaussianBlur824" /> - </filter> - </defs> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="836" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g4"> - <path - d="m1 1037.4v14h1.1667v-2h1.8333v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.8333v-2zm1.1667 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2zm-9.8333 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2z" - fill="#cea4f1" - id="path2" - style="fill:#e0e0e0;fill-opacity:1;filter:url(#filter822)" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><filter id="a" color-interpolation-filters="sRGB" height="1.024" width="1.024" x="-.012" y="-.012"><feGaussianBlur stdDeviation=".07"/></filter><path d="m1 1037.4v14h1.1667v-2h1.8333v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.8333v-2zm1.1667 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2zm-9.8333 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2z" fill="#e0e0e0" filter="url(#a)" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation.svg b/editor/icons/icon_animation.svg index 600faeeddb..2cb738a8a6 100644 --- a/editor/icons/icon_animation.svg +++ b/editor/icons/icon_animation.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 4 -1.5352v1.5352h0.001953a2 2 0 0 0 0.26562 1 2 2 0 0 0 1.7324 1h1v-1-1h-0.5a0.5 0.49999 0 0 1 -0.5 -0.5v-0.5-5a6 6 0 0 0 -6 -6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm3.4414 2a1 1 0 0 1 0.88867 0.5 1 1 0 0 1 -0.36523 1.3652 1 1 0 0 1 -1.3672 -0.36523 1 1 0 0 1 0.36719 -1.3652 1 1 0 0 1 0.47656 -0.13477zm-6.9531 0.0019531a1 1 0 0 1 0.54688 0.13281 1 1 0 0 1 0.36719 1.3652 1 1 0 0 1 -1.3672 0.36523 1 1 0 0 1 -0.36523 -1.3652 1 1 0 0 1 0.81836 -0.49805zm0.023438 3.998a1 1 0 0 1 0.89062 0.5 1 1 0 0 1 -0.36719 1.3652 1 1 0 0 1 -1.3652 -0.36523 1 1 0 0 1 0.36523 -1.3652 1 1 0 0 1 0.47656 -0.13477zm6.9043 0.0019531a1 1 0 0 1 0.54883 0.13281 1 1 0 0 1 0.36523 1.3652 1 1 0 0 1 -1.3652 0.36523 1 1 0 0 1 -0.36719 -1.3652 1 1 0 0 1 0.81836 -0.49805zm-3.416 1.998a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 4-1.5352v1.5352h.001953a2 2 0 0 0 .26562 1 2 2 0 0 0 1.7324 1h1v-1-1h-.5a.5.49999 0 0 1 -.5-.5v-.5-5a6 6 0 0 0 -6-6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm3.4414 2a1 1 0 0 1 .88867.5 1 1 0 0 1 -.36523 1.3652 1 1 0 0 1 -1.3672-.36523 1 1 0 0 1 .36719-1.3652 1 1 0 0 1 .47656-.13477zm-6.9531.0019531a1 1 0 0 1 .54688.13281 1 1 0 0 1 .36719 1.3652 1 1 0 0 1 -1.3672.36523 1 1 0 0 1 -.36523-1.3652 1 1 0 0 1 .81836-.49805zm.023438 3.998a1 1 0 0 1 .89062.5 1 1 0 0 1 -.36719 1.3652 1 1 0 0 1 -1.3652-.36523 1 1 0 0 1 .36523-1.3652 1 1 0 0 1 .47656-.13477zm6.9043.0019531a1 1 0 0 1 .54883.13281 1 1 0 0 1 .36523 1.3652 1 1 0 0 1 -1.3652.36523 1 1 0 0 1 -.36719-1.3652 1 1 0 0 1 .81836-.49805zm-3.416 1.998a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_filter.svg b/editor/icons/icon_animation_filter.svg index 4f8e881ea8..45c323543d 100644 --- a/editor/icons/icon_animation_filter.svg +++ b/editor/icons/icon_animation_filter.svg @@ -1,63 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_animation_filter.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1089" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="10.429825" - inkscape:cx="-5.6414698" - inkscape:cy="10.961343" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g10" /> - <g - transform="matrix(0.02719109,0,0,0.02719109,1.3153462,1.0022864)" - id="g12"> - <g - id="g10"> - <path - inkscape:connector-curvature="0" - d="M 495.289,20.143 H 16.709 c -14.938,0 -22.344,18.205 -11.666,28.636 l 169.7,165.778 v 260.587 c 0,14.041 16.259,21.739 27.131,13.031 L 331.017,384.743 c 3.956,-3.169 6.258,-7.962 6.258,-13.031 V 214.556 L 506.955,48.779 c 10.688,-10.44 3.259,-28.636 -11.666,-28.636 z" - id="path8" - style="fill:#e0e0e0;fill-opacity:1" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m495.289 20.143h-478.58c-14.938 0-22.344 18.205-11.666 28.636l169.7 165.778v260.587c0 14.041 16.259 21.739 27.131 13.031l129.143-103.432c3.956-3.169 6.258-7.962 6.258-13.031v-157.156l169.68-165.777c10.688-10.44 3.259-28.636-11.666-28.636z" fill="#e0e0e0" transform="matrix(.02719109 0 0 .02719109 1.315346 1.002286)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_player.svg b/editor/icons/icon_animation_player.svg index 7c54464cd8..a5f7804e0d 100644 --- a/editor/icons/icon_animation_player.svg +++ b/editor/icons/icon_animation_player.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m1 1037.4v14h1.1667v-2h1.8333v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.8333v-2zm1.1667 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2zm-9.8333 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2z" fill="#cea4f1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1037.4v14h1.1667v-2h1.8333v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.8333v-2zm1.1667 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2zm-9.8333 4h1.8333v2h-1.8333zm9.8333 0h2v2h-2z" fill="#cea4f1" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_track_group.svg b/editor/icons/icon_animation_track_group.svg index 9c4748a528..d0d14b7c44 100644 --- a/editor/icons/icon_animation_track_group.svg +++ b/editor/icons/icon_animation_track_group.svg @@ -1,63 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_animation_track_group.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1089" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="10.429825" - inkscape:cx="6.2135985" - inkscape:cy="6.5622523" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:#e0e0e0" - inkscape:connector-curvature="0" - id="path2" - d="M 5.0508475,2 V 4 H 14 V 2 Z m -3.322034,-0.016949 v 2 h 2 v -2 z M 8.9830508,7 V 9 H 14 V 7 Z m -3.5254237,5 v 2 h 2 v -2 z m 3.5254237,0 v 2 H 14 v -2 z" - sodipodi:nodetypes="ccccccccccccccccccccccccc" /> - <path - style="fill:#e0e0e0" - inkscape:connector-curvature="0" - id="path2-3" - d="m 5.4915255,6.9322039 v 1.999999 h 2 v -1.999999 z" - sodipodi:nodetypes="ccccc" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m5.0508475 2v2h8.9491525v-2zm-3.322034-.016949v2h2v-2zm7.2542373 5.016949v2h5.0169492v-2zm-3.5254237 5v2h2v-2zm3.5254237 0v2h5.0169492v-2z"/><path d="m5.4915255 6.9322039v1.999999h2v-1.999999z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_track_list.svg b/editor/icons/icon_animation_track_list.svg index 40e8414598..e47c8b18cb 100644 --- a/editor/icons/icon_animation_track_list.svg +++ b/editor/icons/icon_animation_track_list.svg @@ -1,60 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_animation_track_list.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1089" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(0 -1036.4)" - id="g4"> - <path - transform="translate(0 1036.4)" - d="m2 2v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8z" - fill="#e0e0e0" - id="path2" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_tree.svg b/editor/icons/icon_animation_tree.svg index 046506fa37..718eaac2d2 100644 --- a/editor/icons/icon_animation_tree.svg +++ b/editor/icons/icon_animation_tree.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h1.166v-2h1.834v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.834v-2h-1.166zm4 3h2v1 1h1 3v2h-2v1 1h1 1v2h-1-2a1.0001 1.0001 0 0 1 -1 -1v-1-2h-1a1.0001 1.0001 0 0 1 -1 -1v-1-1-1zm-2.834 1h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2zm-9.834 4h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2z" fill="#cea4f1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h1.166v-2h1.834v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.834v-2zm4 3h2v1 1h1 3v2h-2v1 1h1 1v2h-1-2a1.0001 1.0001 0 0 1 -1-1v-1-2h-1a1.0001 1.0001 0 0 1 -1-1v-1-1zm-2.834 1h1.834v2h-1.834zm9.834 0h2v2h-2zm-9.834 4h1.834v2h-1.834zm9.834 0h2v2h-2z" fill="#cea4f1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_animation_tree_player.svg b/editor/icons/icon_animation_tree_player.svg index 046506fa37..718eaac2d2 100644 --- a/editor/icons/icon_animation_tree_player.svg +++ b/editor/icons/icon_animation_tree_player.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h1.166v-2h1.834v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.834v-2h-1.166zm4 3h2v1 1h1 3v2h-2v1 1h1 1v2h-1-2a1.0001 1.0001 0 0 1 -1 -1v-1-2h-1a1.0001 1.0001 0 0 1 -1 -1v-1-1-1zm-2.834 1h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2zm-9.834 4h1.834v2h-1.834v-2zm9.834 0h2v2h-2v-2z" fill="#cea4f1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h1.166v-2h1.834v2h8v-2h2v2h1v-14h-1v2h-2v-2h-8v2h-1.834v-2zm4 3h2v1 1h1 3v2h-2v1 1h1 1v2h-1-2a1.0001 1.0001 0 0 1 -1-1v-1-2h-1a1.0001 1.0001 0 0 1 -1-1v-1-1zm-2.834 1h1.834v2h-1.834zm9.834 0h2v2h-2zm-9.834 4h1.834v2h-1.834zm9.834 0h2v2h-2z" fill="#cea4f1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_area.svg b/editor/icons/icon_area.svg index 5e1a385f58..21ebe3c251 100644 --- a/editor/icons/icon_area.svg +++ b/editor/icons/icon_area.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 1v2 2h2v-2h2v-2h-4zm10 0v2h2v2h2v-4h-4zm-7 3v2 4 2h8v-2-6h-8zm2 2h4v4h-4v-4zm-5 5v2 2h2 2v-2h-2v-2h-2zm12 0v2h-2v2h4v-2-2h-2z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 2h2v-2h2v-2zm10 0v2h2v2h2v-4zm-7 3v2 4 2h8v-2-6zm2 2h4v4h-4zm-5 5v2 2h2 2v-2h-2v-2zm12 0v2h-2v2h4v-2-2z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_area_2d.svg b/editor/icons/icon_area_2d.svg index 28fc4d7804..e374205b13 100644 --- a/editor/icons/icon_area_2d.svg +++ b/editor/icons/icon_area_2d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 1v2 2h2v-2h2v-2h-4zm10 0v2h2v2h2v-4h-4zm-7 3v2 4 2h8v-2-6h-8zm2 2h4v4h-4v-4zm-5 5v2 2h2 2v-2h-2v-2h-2zm12 0v2h-2v2h4v-2-2h-2z" fill="#a5b7f3"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 2h2v-2h2v-2zm10 0v2h2v2h2v-4zm-7 3v2 4 2h8v-2-6zm2 2h4v4h-4zm-5 5v2 2h2 2v-2h-2v-2zm12 0v2h-2v2h4v-2-2z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_array.svg b/editor/icons/icon_array.svg index 4a279bf87b..d499fcac3a 100644 --- a/editor/icons/icon_array.svg +++ b/editor/icons/icon_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path transform="translate(0 1040.4)" d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6h-2zm6 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm4 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm-10 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6zm6 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2zm4 0a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2zm-10 2v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_array_mesh.svg b/editor/icons/icon_array_mesh.svg index 7c086e1a44..394a18623d 100644 --- a/editor/icons/icon_array_mesh.svg +++ b/editor/icons/icon_array_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm10 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-2 7v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2zm-8 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm10 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-2 7v3h-3v2h3v3h2v-3h3v-2h-3v-3zm-8 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_arrow_down.svg b/editor/icons/icon_arrow_down.svg new file mode 100644 index 0000000000..49a93e6e28 --- /dev/null +++ b/editor/icons/icon_arrow_down.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 3.002a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l2.293 2.293h-4.5859c-.55228 0-1 .4477-1 1s.44772 1 1 1h4.5859l-2.293 2.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l4-4a1.0001 1.0001 0 0 0 0-1.4141l-4-4a1 1 0 0 0 -.7207-.29102z" fill="#e0e0e0" fill-opacity=".99608" transform="matrix(0 1 -1 0 16.0021 -.00004)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_arrow_left.svg b/editor/icons/icon_arrow_left.svg index b10afb0986..fbbe5d9075 100644 --- a/editor/icons/icon_arrow_left.svg +++ b/editor/icons/icon_arrow_left.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9863 3.002a1 1 0 0 0 -0.69336 0.29102l-4 4a1.0001 1.0001 0 0 0 0 1.4141l4 4a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2.293-2.293h4.5859a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-4.5859l2.293-2.293a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9863 3.002a1 1 0 0 0 -.69336.29102l-4 4a1.0001 1.0001 0 0 0 0 1.4141l4 4a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2.293-2.293h4.5859a1 1 0 0 0 1-1 1 1 0 0 0 -1-1h-4.5859l2.293-2.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_arrow_right.svg b/editor/icons/icon_arrow_right.svg index a51b15dc8d..7895158bb1 100644 --- a/editor/icons/icon_arrow_right.svg +++ b/editor/icons/icon_arrow_right.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 3.002a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l2.293 2.293h-4.5859c-0.55228 0-1 0.4477-1 1s0.44772 1 1 1h4.5859l-2.293 2.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l4-4a1.0001 1.0001 0 0 0 0 -1.4141l-4-4a1 1 0 0 0 -0.7207 -0.29102z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 3.002a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l2.293 2.293h-4.5859c-.55228 0-1 .4477-1 1s.44772 1 1 1h4.5859l-2.293 2.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l4-4a1.0001 1.0001 0 0 0 0-1.4141l-4-4a1 1 0 0 0 -.7207-.29102z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_arrow_up.svg b/editor/icons/icon_arrow_up.svg index 77a20e8c50..9bf19a6a12 100644 --- a/editor/icons/icon_arrow_up.svg +++ b/editor/icons/icon_arrow_up.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2.9875 1044.4a1.0001 1.0001 0 0 0 1.7168 0.6972l2.293-2.2929v4.5859a1.0001 1.0001 0 1 0 2 0v-4.5859l2.293 2.2929a1.0001 1.0001 0 1 0 1.4141 -1.414l-3.9141-3.9141a1.0001 1.0001 0 0 0 -1.5859 0 1.0001 1.0001 0 0 0 -0.00391 0.01l-3.9102 3.9102a1.0001 1.0001 0 0 0 -0.30273 0.7168z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8.00008 1049.4022a1 1 0 0 0 .69336-.291 1 1 0 0 0 0-1.4141l-2.293-2.293h4.5859c.55228 0 1-.4477 1-1s-.44772-1-1-1h-4.5859l2.293-2.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -1.4141 0l-4 4a1.0001 1.0001 0 0 0 0 1.4141l4 4a1 1 0 0 0 .7207.291z" fill="#e0e0e0" fill-opacity=".99608" transform="matrix(0 1 -1 0 1052.4021 -.00004)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_asset_lib.svg b/editor/icons/icon_asset_lib.svg index 967c5bf708..72b20ec047 100644 --- a/editor/icons/icon_asset_lib.svg +++ b/editor/icons/icon_asset_lib.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-1.6569 0-3 1.3431-3 3v2h-3c-0.66446 3.505e-4 -1.1438 0.6366-0.96094 1.2754l2 7c0.12287 0.42881 0.51487 0.7244 0.96094 0.72461h8c0.44606-2.09e-4 0.83806-0.2958 0.96094-0.72461l2-7c0.1829-0.63879-0.29648-1.275-0.96094-1.2754h-3v-2c0-1.6569-1.3431-3-3-3zm0 2c0.55228 0 1 0.44772 1 1v2h-2v-2c0-0.55228 0.44772-1 1-1z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.6569 0-3 1.3431-3 3v2h-3c-.66446.0003505-1.1438.6366-.96094 1.2754l2 7c.12287.42881.51487.7244.96094.72461h8c.44606-.000209.83806-.2958.96094-.72461l2-7c.1829-.63879-.29648-1.275-.96094-1.2754h-3v-2c0-1.6569-1.3431-3-3-3zm0 2c.55228 0 1 .44772 1 1v2h-2v-2c0-.55228.44772-1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_atlas_texture.svg b/editor/icons/icon_atlas_texture.svg index af3e488883..28a44e179a 100644 --- a/editor/icons/icon_atlas_texture.svg +++ b/editor/icons/icon_atlas_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m6 1037.4-5 2v12l5-2 4 2 5-2v-12l-5 2zm0 2 4 2v8l-4-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1037.4-5 2v12l5-2 4 2 5-2v-12l-5 2zm0 2 4 2v8l-4-2z" fill="#e0e0e0" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_bus_bypass.svg b/editor/icons/icon_audio_bus_bypass.svg index f85c9d17b5..c251a7c83f 100644 --- a/editor/icons/icon_audio_bus_bypass.svg +++ b/editor/icons/icon_audio_bus_bypass.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 3c-0.55226 5.52e-5 -0.99994 0.44774-1 1v8c5.52e-5 0.55226 0.44774 0.99994 1 1h4c1.0702 0 2.0645-0.5732 2.5996-1.5 0.5351-0.9268 0.5351-2.0732 0-3-0.40058-0.69381-1.058-1.1892-1.8125-1.3945 0.33452-0.84425 0.27204-1.8062-0.18945-2.6055-0.5351-0.9268-1.5275-1.5-2.5977-1.5zm1 2h1c0.35887 0 0.6858 0.1892 0.86523 0.5s0.17943 0.6892 0 1-0.50637 0.5-0.86523 0.5h-1zm0 4h1 2c0.35887 0 0.68775 0.1892 0.86719 0.5 0.17943 0.3108 0.17943 0.6892 0 1-0.17944 0.3108-0.50832 0.5-0.86719 0.5h-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 3c-.55226.0000552-.99994.44774-1 1v8c.0000552.55226.44774.99994 1 1h4c1.0702 0 2.0645-.5732 2.5996-1.5s.5351-2.0732 0-3c-.40058-.69381-1.058-1.1892-1.8125-1.3945.33452-.84425.27204-1.8062-.18945-2.6055-.5351-.9268-1.5275-1.5-2.5977-1.5zm1 2h1c.35887 0 .6858.1892.86523.5s.17943.6892 0 1-.50637.5-.86523.5h-1zm0 4h1 2c.35887 0 .68775.1892.86719.5.17943.3108.17943.6892 0 1-.17944.3108-.50832.5-.86719.5h-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_bus_layout.svg b/editor/icons/icon_audio_bus_layout.svg index fa6b60bc3e..f95794a7c7 100644 --- a/editor/icons/icon_audio_bus_layout.svg +++ b/editor/icons/icon_audio_bus_layout.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.108 0-2 0.89199-2 2v10c0 1.108 0.89199 2 2 2h2c1.108 0 2-0.89199 2-2v-10c0-1.108-0.89199-2-2-2h-2zm8 0c-1.108 0-2 0.89199-2 2v10c0 1.108 0.89199 2 2 2h2c1.108 0 2-0.89199 2-2v-10c0-1.108-0.89199-2-2-2h-2zm-8 1h2c0.55401 0 1 0.44599 1 1v10c0 0.55401-0.44599 1-1 1h-2c-0.55401 0-1-0.44599-1-1v-10c0-0.55401 0.44599-1 1-1z" fill="url(#a)"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m3 1c-1.108 0-2 .89199-2 2v10c0 1.108.89199 2 2 2h2c1.108 0 2-.89199 2-2v-10c0-1.108-.89199-2-2-2zm8 0c-1.108 0-2 .89199-2 2v10c0 1.108.89199 2 2 2h2c1.108 0 2-.89199 2-2v-10c0-1.108-.89199-2-2-2zm-8 1h2c.55401 0 1 .44599 1 1v10c0 .55401-.44599 1-1 1h-2c-.55401 0-1-.44599-1-1v-10c0-.55401.44599-1 1-1z" fill="url(#a)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_bus_mute.svg b/editor/icons/icon_audio_bus_mute.svg index cacca295eb..4750b0fec0 100644 --- a/editor/icons/icon_audio_bus_mute.svg +++ b/editor/icons/icon_audio_bus_mute.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m4 1048.4v-8l4 5 4-5v8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1048.4v-8l4 5 4-5v8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_bus_solo.svg b/editor/icons/icon_audio_bus_solo.svg index 25e26d6038..5be72a8961 100644 --- a/editor/icons/icon_audio_bus_solo.svg +++ b/editor/icons/icon_audio_bus_solo.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 3a1 1 0 0 0 -0.12695 0.0078125c-1.0208 0.043703-1.957 0.60248-2.4707 1.4922-0.5351 0.9268-0.5351 2.0732 0 3 0.5351 0.9268 1.5275 1.5 2.5977 1.5h2c0.35887 0 0.6858 0.1892 0.86523 0.5 0.17943 0.3108 0.17943 0.6892 0 1-0.17943 0.3108-0.50637 0.5-0.86523 0.5h-3a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h3c1.0702 0 2.0626-0.5732 2.5977-1.5s0.5351-2.0732 0-3-1.5275-1.5-2.5977-1.5h-2c-0.35887 0-0.6858-0.1892-0.86523-0.5s-0.17943-0.6892 0-1 0.50637-0.5 0.86523-0.5h3a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 3a1 1 0 0 0 -.12695.0078125c-1.0208.043703-1.957.60248-2.4707 1.4922-.5351.9268-.5351 2.0732 0 3s1.5275 1.5 2.5977 1.5h2c.35887 0 .6858.1892.86523.5s.17943.6892 0 1-.50637.5-.86523.5h-3a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h3c1.0702 0 2.0626-.5732 2.5977-1.5s.5351-2.0732 0-3-1.5275-1.5-2.5977-1.5h-2c-.35887 0-.6858-.1892-.86523-.5s-.17943-.6892 0-1 .50637-.5.86523-.5h3a1 1 0 0 0 1-1 1 1 0 0 0 -1-1h-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_stream_player.svg b/editor/icons/icon_audio_stream_player.svg index 754b72bc96..bbe2793407 100644 --- a/editor/icons/icon_audio_stream_player.svg +++ b/editor/icons/icon_audio_stream_player.svg @@ -1,13 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)" shape-rendering="auto"> -<path d="m10.023 1044.4c-0.56139-0.013-1.0235 0.4264-1.0234 0.9724v5.0542c6.911e-4 0.7482 0.83361 1.2154 1.5 0.8414l4-2.5262c0.66694-0.3743 0.66694-1.3104 0-1.6847l-4-2.5261c-0.14505-0.082-0.30893-0.1269-0.47656-0.131z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 1036.4)" d="m11.971 1.002a1.0001 1.0001 0 0 0 -0.24609 0.037109l-7 2a1.0001 1.0001 0 0 0 -0.72461 0.96094v5.5508a2.5 2.5 0 0 0 -0.5 -0.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961 -2.4121 1.0001 1.0001 0 0 0 0.0039062 -0.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293 -0.99805z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><g transform="translate(0 -1036.4)"><path d="m10.023 1044.4c-.56139-.013-1.0235.4264-1.0234.9724v5.0542c.0006911.7482.83361 1.2154 1.5.8414l4-2.5262c.66694-.3743.66694-1.3104 0-1.6847l-4-2.5261c-.14505-.082-.30893-.1269-.47656-.131z" fill="#e0e0e0"/><path d="m11.971 1.002a1.0001 1.0001 0 0 0 -.24609.037109l-7 2a1.0001 1.0001 0 0 0 -.72461.96094v5.5508a2.5 2.5 0 0 0 -.5-.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961-2.4121 1.0001 1.0001 0 0 0 .0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293-.99805z" fill="url(#a)" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_stream_player_2_d.svg b/editor/icons/icon_audio_stream_player_2_d.svg index 0e9c0ca5b1..090b23ff7c 100644 --- a/editor/icons/icon_audio_stream_player_2_d.svg +++ b/editor/icons/icon_audio_stream_player_2_d.svg @@ -1,13 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)" shape-rendering="auto"> -<path d="m10.023 1044.4c-0.56139-0.013-1.0235 0.4264-1.0234 0.9724v5.0542c6.911e-4 0.7482 0.83361 1.2154 1.5 0.8414l4-2.5262c0.66694-0.3743 0.66694-1.3104 0-1.6847l-4-2.5261c-0.14505-0.082-0.30893-0.1269-0.47656-0.131z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5b7f3" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 1036.4)" d="m11.971 1.002a1.0001 1.0001 0 0 0 -0.24609 0.037109l-7 2a1.0001 1.0001 0 0 0 -0.72461 0.96094v5.5508a2.5 2.5 0 0 0 -0.5 -0.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961 -2.4121 1.0001 1.0001 0 0 0 0.0039062 -0.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293 -0.99805z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><g transform="translate(0 -1036.4)"><path d="m10.023 1044.4c-.56139-.013-1.0235.4264-1.0234.9724v5.0542c.0006911.7482.83361 1.2154 1.5.8414l4-2.5262c.66694-.3743.66694-1.3104 0-1.6847l-4-2.5261c-.14505-.082-.30893-.1269-.47656-.131z" fill="#a5b7f3"/><path d="m11.971 1.002a1.0001 1.0001 0 0 0 -.24609.037109l-7 2a1.0001 1.0001 0 0 0 -.72461.96094v5.5508a2.5 2.5 0 0 0 -.5-.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961-2.4121 1.0001 1.0001 0 0 0 .0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293-.99805z" fill="url(#a)" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_stream_player_3_d.svg b/editor/icons/icon_audio_stream_player_3_d.svg index d947586f63..95da9818aa 100644 --- a/editor/icons/icon_audio_stream_player_3_d.svg +++ b/editor/icons/icon_audio_stream_player_3_d.svg @@ -1,13 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)" shape-rendering="auto"> -<path d="m10.023 1044.4c-0.56139-0.013-1.0235 0.4264-1.0234 0.9724v5.0542c6.911e-4 0.7482 0.83361 1.2154 1.5 0.8414l4-2.5262c0.66694-0.3743 0.66694-1.3104 0-1.6847l-4-2.5261c-0.14505-0.082-0.30893-0.1269-0.47656-0.131z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 1036.4)" d="m11.971 1.002a1.0001 1.0001 0 0 0 -0.24609 0.037109l-7 2a1.0001 1.0001 0 0 0 -0.72461 0.96094v5.5508a2.5 2.5 0 0 0 -0.5 -0.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961 -2.4121 1.0001 1.0001 0 0 0 0.0039062 -0.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293 -0.99805z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><g transform="translate(0 -1036.4)"><path d="m10.023 1044.4c-.56139-.013-1.0235.4264-1.0234.9724v5.0542c.0006911.7482.83361 1.2154 1.5.8414l4-2.5262c.66694-.3743.66694-1.3104 0-1.6847l-4-2.5261c-.14505-.082-.30893-.1269-.47656-.131z" fill="#fc9c9c"/><path d="m11.971 1.002a1.0001 1.0001 0 0 0 -.24609.037109l-7 2a1.0001 1.0001 0 0 0 -.72461.96094v5.5508a2.5 2.5 0 0 0 -.5-.050781 2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.4961-2.4121 1.0001 1.0001 0 0 0 .0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5a1.0001 1.0001 0 0 0 -1.0293-.99805z" fill="url(#a)" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_audio_stream_sample.svg b/editor/icons/icon_audio_stream_sample.svg index a7c7232ee0..a8d6fb6bf1 100644 --- a/editor/icons/icon_audio_stream_sample.svg +++ b/editor/icons/icon_audio_stream_sample.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11.971 1.002c-0.08326 0.00207-0.16593 0.014541-0.24609 0.037109l-7 2c-0.42881 0.12287-0.7244 0.51487-0.72461 0.96094v5.5508c-0.16454-0.033679-0.33205-0.050692-0.5-0.050781-1.3807 0-2.5 1.1193-2.5 2.5-4.75e-6 1.3807 1.1193 2.5 2.5 2.5 1.3456-0.0013 2.4488-1.0674 2.4961-2.4121 0.0025906-0.029226 0.003894-0.058551 0.0039062-0.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5c-9.16e-4 -0.56314-0.4664-1.0145-1.0293-0.99805zm-1.4707 6.998c-0.277 0-0.5 0.223-0.5 0.5v5c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-5c0-0.277-0.223-0.5-0.5-0.5zm2 1c-0.277 0-0.5 0.223-0.5 0.5v3c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-3c0-0.277-0.223-0.5-0.5-0.5zm-4 1c-0.277 0-0.5 0.223-0.5 0.5v1c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1c0-0.277-0.223-0.5-0.5-0.5zm6 0c-0.277 0-0.5 0.223-0.5 0.5v1c0 0.277 0.223 0.5 0.5 0.5s0.5-0.223 0.5-0.5v-1c0-0.277-0.223-0.5-0.5-0.5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="url(#a)" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1" y2="15"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m11.971 1.002c-.08326.00207-.16593.014541-.24609.037109l-7 2c-.42881.12287-.7244.51487-.72461.96094v5.5508c-.16454-.033679-.33205-.050692-.5-.050781-1.3807 0-2.5 1.1193-2.5 2.5-.00000475 1.3807 1.1193 2.5 2.5 2.5 1.3456-.0013 2.4488-1.0674 2.4961-2.4121.0025906-.029226.003894-.058551.0039062-.087891v-7.2441l5-1.4277v3.1719l2-1v-3.5c-.000916-.56314-.4664-1.0145-1.0293-.99805zm-1.4707 6.998c-.277 0-.5.223-.5.5v5c0 .277.223.5.5.5s.5-.223.5-.5v-5c0-.277-.223-.5-.5-.5zm2 1c-.277 0-.5.223-.5.5v3c0 .277.223.5.5.5s.5-.223.5-.5v-3c0-.277-.223-.5-.5-.5zm-4 1c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5zm6 0c-.277 0-.5.223-.5.5v1c0 .277.223.5.5.5s.5-.223.5-.5v-1c0-.277-.223-.5-.5-.5z" fill="url(#a)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_auto_end.svg b/editor/icons/icon_auto_end.svg index 9e779c69f4..35f5fb2b1c 100644 --- a/editor/icons/icon_auto_end.svg +++ b/editor/icons/icon_auto_end.svg @@ -1,68 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_auto_end.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1273" - inkscape:window-height="766" - id="namedview8" - showgrid="false" - inkscape:zoom="41.7193" - inkscape:cx="12.08616" - inkscape:cy="6.9898672" - inkscape:window-x="539" - inkscape:window-y="208" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - inkscape:connector-curvature="0" - id="path2" - style="color:#000000;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;white-space:normal;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - d="m 13.999798,14 c 0.552262,-5.5e-5 0.999945,-0.447738 1,-1 V 3 c -5.5e-5,-0.5522619 -0.447738,-0.9999448 -1,-1 H 5.9997976 C 5.6959349,1.9998247 5.4084731,2.1378063 5.2185476,2.375 l -4,5 c -0.29139692,0.3649711 -0.29139692,0.8830289 0,1.248 l 4,5 c 0.189538,0.237924 0.4770584,0.376652 0.78125,0.37695 h 8.0000004 z m -1,-2 H 6.4802976 l -3.1992,-4 3.1992,-4 H 12.999798 Z M 6.9997976,10 V 6 l -2,2 z" - sodipodi:nodetypes="cccccccccccccccccccccc" /> - <g - aria-label="E" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';letter-spacing:0px;word-spacing:0px;fill:#e0e0e0;fill-opacity:1;stroke:none" - id="text829" - transform="matrix(0.20475474,0,0,0.20475474,4.7903856,12.365563)"> - <path - d="M 15.129502,-36.414393 H 35.422471 V -30.7308 H 22.649034 v 5.429688 h 12.011718 v 5.683594 H 22.649034 v 6.679687 h 13.203125 v 5.6835938 H 15.129502 Z" - style="fill:#e0e0e0;fill-opacity:1" - id="path831" - inkscape:connector-curvature="0" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m13.999798 14c.552262-.000055.999945-.447738 1-1v-10c-.000055-.5522619-.447738-.9999448-1-1h-8.0000004c-.3038627-.0001753-.5913245.1378063-.78125.375l-4 5c-.29139692.3649711-.29139692.8830289 0 1.248l4 5c.189538.237924.4770584.376652.78125.37695h8.0000004zm-1-2h-6.5195004l-3.1992-4 3.1992-4h6.5195004zm-6.0000004-2v-4l-2 2z" fill-rule="evenodd"/><path d="m15.129502-36.414393h20.292969v5.683593h-12.773437v5.429688h12.011718v5.683594h-12.011718v6.679687h13.203125v5.6835938h-20.722657z" transform="matrix(.20475474 0 0 .20475474 4.790386 12.365563)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_auto_play.svg b/editor/icons/icon_auto_play.svg index 78e48b2bc3..dbe41f244f 100644 --- a/editor/icons/icon_auto_play.svg +++ b/editor/icons/icon_auto_play.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 2a1.0001 1.0001 0 0 0 -1 1v10a1.0001 1.0001 0 0 0 1 1h8a1.0001 1.0001 0 0 0 0.78125 -0.375l4-5a1.0001 1.0001 0 0 0 0 -1.248l-4-5a1.0001 1.0001 0 0 0 -0.78125 -0.37695h-8zm1 2h6.5195l3.1992 4-3.1992 4h-6.5195v-8zm3 1c-1.1046 0-2 0.8954-2 2v4h1v-2h2v2h1v-4c0-1.1046-0.89543-2-2-2zm0 1a1 1 0 0 1 1 1v1h-2v-1a1 1 0 0 1 1 -1zm3 0v4l2-2-2-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2a1.0001 1.0001 0 0 0 -1 1v10a1.0001 1.0001 0 0 0 1 1h8a1.0001 1.0001 0 0 0 .78125-.375l4-5a1.0001 1.0001 0 0 0 0-1.248l-4-5a1.0001 1.0001 0 0 0 -.78125-.37695h-8zm1 2h6.5195l3.1992 4-3.1992 4h-6.5195zm3 1c-1.1046 0-2 .8954-2 2v4h1v-2h2v2h1v-4c0-1.1046-.89543-2-2-2zm0 1a1 1 0 0 1 1 1v1h-2v-1a1 1 0 0 1 1-1zm3 0v4l2-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_auto_triangle.svg b/editor/icons/icon_auto_triangle.svg index 631f259452..13b8f7c5d2 100644 --- a/editor/icons/icon_auto_triangle.svg +++ b/editor/icons/icon_auto_triangle.svg @@ -1,64 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_auto_triangle.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1853" - inkscape:window-height="1016" - id="namedview10" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="17.168167" - inkscape:cy="5.5708575" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <g - transform="translate(-26.001 -9.8683)" - id="g4"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.87616086;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 8.2324219 0.67773438 L 0.64453125 15.289062 L 15.355469 15.289062 L 8.2324219 0.67773438 z M 6.9414062 5.4433594 L 9.2109375 5.4433594 C 9.5561128 6.0670927 9.8954447 6.7088542 10.230469 7.3671875 C 10.565492 8.0167875 10.901304 8.703974 11.236328 9.4316406 C 11.581503 10.159241 11.931781 10.934946 12.287109 11.757812 C 12.642437 12.580746 13.018126 13.477066 13.414062 14.447266 L 10.871094 14.447266 C 10.75942 14.135399 10.632366 13.815528 10.490234 13.486328 C 10.358255 13.157195 10.225729 12.827247 10.09375 12.498047 L 5.9824219 12.498047 C 5.8504432 12.827247 5.7143976 13.157195 5.5722656 13.486328 C 5.440287 13.815528 5.3167521 14.135399 5.2050781 14.447266 L 2.7382812 14.447266 C 3.1342186 13.477066 3.5099064 12.580746 3.8652344 11.757812 C 4.2205624 10.934946 4.5673204 10.159241 4.9023438 9.4316406 C 5.2475197 8.703974 5.5813793 8.0167875 5.90625 7.3671875 C 6.2412733 6.7088542 6.5860782 6.0670927 6.9414062 5.4433594 z M 8.0234375 7.4824219 C 7.9726708 7.6123552 7.8964385 7.790425 7.7949219 8.015625 C 7.6933999 8.240825 7.5772912 8.5003885 7.4453125 8.7949219 C 7.3133332 9.0894552 7.1643891 9.4143979 7.0019531 9.7695312 C 6.8496698 10.124665 6.6936847 10.496919 6.53125 10.886719 L 9.53125 10.886719 C 9.368814 10.496919 9.2108764 10.124665 9.0585938 9.7695312 C 8.9063104 9.4143979 8.7593188 9.0894552 8.6171875 8.7949219 C 8.4852082 8.5003885 8.3691001 8.240825 8.2675781 8.015625 C 8.1660555 7.790425 8.0843508 7.6123552 8.0234375 7.4824219 z " - transform="translate(26.001,1046.2683)" - id="path821" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8.2324219.67773438-7.58789065 14.61132762h14.71093775zm-1.2910157 4.76562502h2.2695313c.3451753.6237333.6845072 1.2654948 1.0195315 1.9238281.335023.6496.670835 1.3367865 1.005859 2.0644531.345175.7276004.695453 1.5033054 1.050781 2.3261714.355328.822934.731017 1.719254 1.126953 2.689454h-2.542968c-.111674-.311867-.238728-.631738-.38086-.960938-.131979-.329133-.264505-.659081-.396484-.988281h-4.1113281c-.1319787.3292-.2680243.659148-.4101563.988281-.1319786.3292-.2555135.649071-.3671875.960938h-2.4667969c.3959374-.9702.7716252-1.86652 1.1269532-2.689454.355328-.822866.702086-1.598571 1.0371094-2.3261714.3451759-.7276666.6790355-1.4148531 1.0039062-2.0644531.3350233-.6583333.6798282-1.3000948 1.0351562-1.9238281zm1.0820313 2.0390625c-.0507667.1299333-.126999.3080031-.2285156.5332031-.101522.2252-.2176307.4847635-.3496094.7792969-.1319793.2945333-.2809234.619476-.4433594.9746093-.1522833.3551338-.3082684.7273878-.4707031 1.1171878h3c-.162436-.3898-.3203736-.762054-.4726562-1.1171878-.1522834-.3551333-.299275-.680076-.4414063-.9746093-.1319793-.2945334-.2480874-.5540969-.3496094-.7792969-.1015226-.2252-.1832273-.4032698-.2441406-.5332031z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_back.svg b/editor/icons/icon_back.svg index 184369f1e6..c8ea97fa5c 100644 --- a/editor/icons/icon_back.svg +++ b/editor/icons/icon_back.svg @@ -1,5 +1 @@ -<svg width="8" height="16" version="1.1" viewBox="0 0 8 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m6 1038.4-4 6 4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m6 1038.4-4 6 4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_back_buffer_copy.svg b/editor/icons/icon_back_buffer_copy.svg index 8231c7133c..c16cfe9009 100644 --- a/editor/icons/icon_back_buffer_copy.svg +++ b/editor/icons/icon_back_buffer_copy.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v11h5v-2h-3v-7h6v-2zm6 3v11h8v-11zm2 2h4v7h-4z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v11h5v-2h-3v-7h6v-2zm6 3v11h8v-11zm2 2h4v7h-4z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bake.svg b/editor/icons/icon_bake.svg index ca5245da10..9bcfb174dc 100644 --- a/editor/icons/icon_bake.svg +++ b/editor/icons/icon_bake.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1v2h12v-2h-12zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-14zm2 1h1v1h-1v-1zm3 0h1v1h-1v-1zm3 0h1v1h-1v-1zm3 0h1v1h-1v-1zm-9 2h10v6h-10v-6zm3 1v1h4v-1h-4z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_baked_lightmap.svg b/editor/icons/icon_baked_lightmap.svg index 6c6586244e..338a100022 100644 --- a/editor/icons/icon_baked_lightmap.svg +++ b/editor/icons/icon_baked_lightmap.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1v2h12v-2h-12zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-14zm2 1h1v1h-1v-1zm3 0h1v1h-1v-1zm3 0h1v1h-1v-1zm3 0h1v1h-1v-1zm-9 2h10v6h-10v-6zm3 1v1h4v-1h-4z" fill="#fc9c9c"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v2h12v-2zm-1 3v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9zm2 1h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm3 0h1v1h-1zm-9 2h10v6h-10zm3 1v1h4v-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_baked_lightmap_data.svg b/editor/icons/icon_baked_lightmap_data.svg index b5ddd24680..e8d471c2af 100644 --- a/editor/icons/icon_baked_lightmap_data.svg +++ b/editor/icons/icon_baked_lightmap_data.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 1v2h2v-2h-2zm3 0v2h2v-2h-2zm4 0v2h6v-2h-6zm-7 3v2h2v-2h-2zm3 0v2h2v-2h-2zm4 0v3h5v6h-5v2h5a2 2 0 0 0 2 -2v-9h-7zm1 1h1v1h-1v-1zm3 0h1v1h-1v-1zm-11 2v2h2v-2h-2zm3 0v2h2v-2h-2zm4 1v1h2v-1h-2zm-7 2v2h2v-2h-2zm3 0v2h2v-2h-2zm-3 3v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h2v-2zm4 0v2h6v-2zm-7 3v2h2v-2zm3 0v2h2v-2zm4 0v3h5v6h-5v2h5a2 2 0 0 0 2-2v-9zm1 1h1v1h-1zm3 0h1v1h-1zm-11 2v2h2v-2zm3 0v2h2v-2zm4 1v1h2v-1zm-7 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_basis.svg b/editor/icons/icon_basis.svg index e9bee04f56..ecdb0f4ec0 100644 --- a/editor/icons/icon_basis.svg +++ b/editor/icons/icon_basis.svg @@ -1,4 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 2v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2zm10 0v2h2v-2zm-3 2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v2h2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0 -2 2 2 0 0 0 -1.7324 -1h2v-2zm7 0a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v-2h-2v4h4a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0 -2 2 2 0 0 0 -1.7324 -1h2v-2zm-12 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#e3ec69"/> -<path d="m10 2v2h2v-2zm0 4v4h2v-4z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 2v8h2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3v-2zm10 0v2h2v-2zm-3 2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v2h2a2 2 0 0 0 1.7324-1 2 2 0 0 0 0-2 2 2 0 0 0 -1.7324-1h2v-2zm7 0a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v-2h-2v4h4a2 2 0 0 0 1.7324-1 2 2 0 0 0 0-2 2 2 0 0 0 -1.7324-1h2v-2zm-12 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#e3ec69"/><path d="m10 2v2h2v-2zm0 4v4h2v-4z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bezier_handles_balanced.svg b/editor/icons/icon_bezier_handles_balanced.svg index 8ab99d79bb..6656d3f5eb 100644 --- a/editor/icons/icon_bezier_handles_balanced.svg +++ b/editor/icons/icon_bezier_handles_balanced.svg @@ -1,98 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_bezier_handles_balanced.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1417" - inkscape:window-height="685" - id="namedview8" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="4.2910315" - inkscape:cy="11.857644" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" - id="path4526" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846" - cx="1.8983043" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3" - cx="14.237288" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.61799997;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 7.4559186,5.1473018 2.7203863,6.7014816" - id="path5878" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.61489719;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 10.790357,4.2063094 8.2893822,5.149623" - id="path5878-7" - inkscape:connector-curvature="0" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3-6" - cx="8.2711868" - cy="4.7796612" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="M 1.7157324,5.8754878 A 1.2675855,1.1997888 0 0 0 0.44815434,7.0747066 1.2675855,1.1997888 0 0 0 1.7157324,8.2739253 1.2675855,1.1997888 0 0 0 2.9833105,7.0747066 1.2675855,1.1997888 0 0 0 1.7157324,5.8754878 Z m 0.00195,0.4238282 A 0.84677333,0.80148375 0 0 1 2.5653417,7.1000972 0.84677333,0.80148375 0 0 1 1.7176855,7.9008784 0.84677333,0.80148375 0 0 1 0.87002934,7.1000972 0.84677333,0.80148375 0 0 1 1.7176855,6.299316 Z" - id="path5846-5" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.7567277;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="M 11.909414,2.4642073 A 1.2836218,1.231838 0 0 0 10.6258,3.6954601 1.2836218,1.231838 0 0 0 11.909414,4.9267128 1.2836218,1.231838 0 0 0 13.193028,3.6954601 1.2836218,1.231838 0 0 0 11.909414,2.4642073 Z m 0.002,0.4351497 a 0.85748593,0.82289328 0 0 1 0.858383,0.8221719 0.85748593,0.82289328 0 0 1 -0.85838,0.822172 0.85748593,0.82289328 0 0 1 -0.858379,-0.822172 0.85748593,0.82289328 0 0 1 0.858379,-0.8221719 z" - id="path5846-5-6" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.7627119 13.627119s1.2881355-6.847458 6.5762712-8.1355935c5.0847459.9491522 5.9661009 8.1355925 5.9661009 8.1355925" fill="none" stroke="#84c2ff" stroke-miterlimit="4.9" stroke-width="1.7"/><ellipse cx="1.898304" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><ellipse cx="14.237288" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><path d="m7.4559186 5.1473018-4.7355323 1.5541798" fill="none" stroke="#84c2ff" stroke-width=".618"/><path d="m10.790357 4.2063094-2.5009748.9433136" fill="none" stroke="#84c2ff" stroke-width=".614897"/><g fill="#e0e0e0"><ellipse cx="8.271187" cy="4.779661" rx="1.267586" ry="1.199789"/><path d="m1.7157324 5.8754878a1.2675855 1.1997888 0 0 0 -1.26757806 1.1992188 1.2675855 1.1997888 0 0 0 1.26757806 1.1992187 1.2675855 1.1997888 0 0 0 1.2675781-1.1992187 1.2675855 1.1997888 0 0 0 -1.2675781-1.1992188zm.00195.4238282a.84677333.80148375 0 0 1 .8476593.8007812.84677333.80148375 0 0 1 -.8476562.8007812.84677333.80148375 0 0 1 -.84765616-.8007812.84677333.80148375 0 0 1 .84765616-.8007812z"/><path d="m11.909414 2.4642073a1.2836218 1.231838 0 0 0 -1.283614 1.2312528 1.2836218 1.231838 0 0 0 1.283614 1.2312527 1.2836218 1.231838 0 0 0 1.283614-1.2312527 1.2836218 1.231838 0 0 0 -1.283614-1.2312528zm.002.4351497a.85748593.82289328 0 0 1 .858383.8221719.85748593.82289328 0 0 1 -.85838.822172.85748593.82289328 0 0 1 -.858379-.822172.85748593.82289328 0 0 1 .858379-.8221719z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bezier_handles_free.svg b/editor/icons/icon_bezier_handles_free.svg index e5dfb8d0fc..06abfe34ab 100644 --- a/editor/icons/icon_bezier_handles_free.svg +++ b/editor/icons/icon_bezier_handles_free.svg @@ -1,98 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_bezier_handles_separate.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1417" - inkscape:window-height="685" - id="namedview8" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="4.2910315" - inkscape:cy="11.857644" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" - id="path4526" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846" - cx="1.8983043" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3" - cx="14.237288" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.80513805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 7.6850253,4.7560401 3.9088983,5.4168" - id="path5878" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.73079807;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 11.695505,2.3941651 8.696384,4.6876729" - id="path5878-7" - inkscape:connector-curvature="0" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3-6" - cx="8.2711868" - cy="4.7796612" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="M 2.4961199,4.3976698 A 1.1997888,1.2675855 80.074672 0 0 1.4542161,5.7974257 1.1997888,1.2675855 80.074672 0 0 2.9095255,6.7602105 1.1997888,1.2675855 80.074672 0 0 3.9514292,5.3604547 1.1997888,1.2675855 80.074672 0 0 2.4961199,4.3976698 Z m 0.074974,0.4171488 A 0.80148375,0.84677333 80.074672 0 1 3.5440925,5.4575082 0.80148375,0.84677333 80.074672 0 1 2.8471493,6.3924102 0.80148375,0.84677333 80.074672 0 1 1.8741535,5.74972 0.80148375,0.84677333 80.074672 0 1 2.5710967,4.814818 Z" - id="path5846-5" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.7567277;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 11.838896,0.64428913 a 1.231838,1.2836218 52.593897 0 0 -0.271701,1.75779027 1.231838,1.2836218 52.593897 0 0 1.767576,0.1983008 1.231838,1.2836218 52.593897 0 0 0.271701,-1.75779027 1.231838,1.2836218 52.593897 0 0 -1.767576,-0.1983008 z m 0.265925,0.3444462 A 0.82289328,0.85748593 52.593897 0 1 13.286115,1.1203938 0.82289328,0.85748593 52.593897 0 1 13.103698,2.2949179 0.82289328,0.85748593 52.593897 0 1 11.922407,2.163257 0.82289328,0.85748593 52.593897 0 1 12.104824,0.98873353 Z" - id="path5846-5-6" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.7627119 13.627119s1.2881355-6.847458 6.5762712-8.1355935c5.0847459.9491522 5.9661009 8.1355925 5.9661009 8.1355925" fill="none" stroke="#84c2ff" stroke-miterlimit="4.9" stroke-width="1.7"/><ellipse cx="1.898304" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><ellipse cx="14.237288" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><path d="m7.6850253 4.7560401-3.776127.6607599" fill="none" stroke="#84c2ff" stroke-width=".805138"/><path d="m11.695505 2.3941651-2.999121 2.2935078" fill="none" stroke="#84c2ff" stroke-width=".730798"/><g fill="#e0e0e0"><ellipse cx="8.271187" cy="4.779661" rx="1.267586" ry="1.199789"/><path d="m2.4961199 4.3976698a1.1997888 1.2675855 80.074672 0 0 -1.0419038 1.3997559 1.1997888 1.2675855 80.074672 0 0 1.4553094.9627848 1.1997888 1.2675855 80.074672 0 0 1.0419037-1.3997558 1.1997888 1.2675855 80.074672 0 0 -1.4553093-.9627849zm.074974.4171488a.80148375.84677333 80.074672 0 1 .9729986.6426896.80148375.84677333 80.074672 0 1 -.6969432.934902.80148375.84677333 80.074672 0 1 -.9729958-.6426902.80148375.84677333 80.074672 0 1 .6969432-.934902z"/><path d="m11.838896.64428913a1.231838 1.2836218 52.593897 0 0 -.271701 1.75779027 1.231838 1.2836218 52.593897 0 0 1.767576.1983008 1.231838 1.2836218 52.593897 0 0 .271701-1.75779027 1.231838 1.2836218 52.593897 0 0 -1.767576-.1983008zm.265925.3444462a.82289328.85748593 52.593897 0 1 1.181294.13165847.82289328.85748593 52.593897 0 1 -.182417 1.1745241.82289328.85748593 52.593897 0 1 -1.181291-.1316609.82289328.85748593 52.593897 0 1 .182417-1.17452347z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bezier_handles_mirror.svg b/editor/icons/icon_bezier_handles_mirror.svg index 682c898368..be85f170c7 100644 --- a/editor/icons/icon_bezier_handles_mirror.svg +++ b/editor/icons/icon_bezier_handles_mirror.svg @@ -1,98 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_bezier_handles_mirror.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1417" - inkscape:window-height="685" - id="namedview8" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="4.2910315" - inkscape:cy="11.857644" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 1.7627119,13.627119 c 0,0 1.2881355,-6.847458 6.5762712,-8.1355935 5.0847459,0.9491522 5.9661009,8.1355925 5.9661009,8.1355925" - id="path4526" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccc" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846" - cx="1.8983043" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3" - cx="14.237288" - cy="13.491526" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.80513805;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 8.2033896,4.6779662 H 4.3698875" - id="path5878" - inkscape:connector-curvature="0" /> - <path - style="fill:none;stroke:#84c2ff;stroke-width:0.71670938;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 11.931789,4.6440679 H 8.2033896" - id="path5878-7" - inkscape:connector-curvature="0" /> - <ellipse - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3-6" - cx="8.2711868" - cy="4.7796612" - rx="1.2675855" - ry="1.1997888" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="M 3.1539157,3.4305762 A 1.2675855,1.1997888 0 0 0 1.8863376,4.629795 1.2675855,1.1997888 0 0 0 3.1539157,5.8290137 1.2675855,1.1997888 0 0 0 4.4214938,4.629795 1.2675855,1.1997888 0 0 0 3.1539157,3.4305762 Z m 0.00195,0.4238282 A 0.84677333,0.80148375 0 0 1 4.003525,4.6551856 0.84677333,0.80148375 0 0 1 3.1558688,5.4559668 0.84677333,0.80148375 0 0 1 2.3082126,4.6551856 0.84677333,0.80148375 0 0 1 3.1558688,3.8544044 Z" - id="path5846-5" - inkscape:connector-curvature="0" /> - <path - inkscape:connector-curvature="0" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 13.093969,3.3750567 a 1.2675855,1.1997888 0 0 0 -1.267578,1.1992188 1.2675855,1.1997888 0 0 0 1.267578,1.1992187 1.2675855,1.1997888 0 0 0 1.267578,-1.1992187 1.2675855,1.1997888 0 0 0 -1.267578,-1.1992188 z m 0.002,0.4238282 a 0.84677333,0.80148375 0 0 1 0.847659,0.8007812 0.84677333,0.80148375 0 0 1 -0.847656,0.8007812 0.84677333,0.80148375 0 0 1 -0.847656,-0.8007812 0.84677333,0.80148375 0 0 1 0.847656,-0.8007812 z" - id="path5846-5-6" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.7627119 13.627119s1.2881355-6.847458 6.5762712-8.1355935c5.0847459.9491522 5.9661009 8.1355925 5.9661009 8.1355925" fill="none" stroke="#84c2ff" stroke-miterlimit="4.9" stroke-width="1.7"/><ellipse cx="1.898304" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><ellipse cx="14.237288" cy="13.491526" fill="#e0e0e0" rx="1.267586" ry="1.199789"/><path d="m8.2033896 4.6779662h-3.8335021" fill="none" stroke="#84c2ff" stroke-width=".805138"/><path d="m11.931789 4.6440679h-3.7283994" fill="none" stroke="#84c2ff" stroke-width=".716709"/><g fill="#e0e0e0"><ellipse cx="8.271187" cy="4.779661" rx="1.267586" ry="1.199789"/><path d="m3.1539157 3.4305762a1.2675855 1.1997888 0 0 0 -1.2675781 1.1992188 1.2675855 1.1997888 0 0 0 1.2675781 1.1992187 1.2675855 1.1997888 0 0 0 1.2675781-1.1992187 1.2675855 1.1997888 0 0 0 -1.2675781-1.1992188zm.00195.4238282a.84677333.80148375 0 0 1 .8476593.8007812.84677333.80148375 0 0 1 -.8476562.8007812.84677333.80148375 0 0 1 -.8476562-.8007812.84677333.80148375 0 0 1 .8476562-.8007812z"/><path d="m13.093969 3.3750567a1.2675855 1.1997888 0 0 0 -1.267578 1.1992188 1.2675855 1.1997888 0 0 0 1.267578 1.1992187 1.2675855 1.1997888 0 0 0 1.267578-1.1992187 1.2675855 1.1997888 0 0 0 -1.267578-1.1992188zm.002.4238282a.84677333.80148375 0 0 1 .847659.8007812.84677333.80148375 0 0 1 -.847656.8007812.84677333.80148375 0 0 1 -.847656-.8007812.84677333.80148375 0 0 1 .847656-.8007812z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bit_map.svg b/editor/icons/icon_bit_map.svg index fbfe0e4b5a..b61c1b7dc5 100644 --- a/editor/icons/icon_bit_map.svg +++ b/editor/icons/icon_bit_map.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h2v-2h-2zm2 2v2h2v-2h-2zm2 0h2v-2h-2v2zm2 0v2h2v-2h-2zm2 0h2v-2h-2v2zm2 0v2h2v-2h-2zm2 0h2v-2h-2v2zm0 2v2h2v-2h-2zm0 2h-2v2h2v-2zm0 2v2h2v-2h-2zm0 2h-2v2h2v-2zm0 2v2h2v-2h-2zm-2 0h-2v2h2v-2zm-2 0v-2h-2v2h2zm-2 0h-2v2h2v-2zm-2 0v-2h-2v2h2zm-2 0h-2v2h2v-2zm0-2v-2h-2v2h2zm0-2h2v-2h-2v2zm0-2v-2h-2v2h2zm2 0h2v-2h-2v2zm2 0v2h2v-2h-2zm2 0h2v-2h-2v2zm0 2v2h2v-2h-2zm-2 0h-2v2h2v-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm2 2v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm-2 0v-2h-2v2zm-2 0h-2v2h2zm0-2v-2h-2v2zm0-2h2v-2h-2zm0-2v-2h-2v2zm2 0h2v-2h-2zm2 0v2h2v-2zm2 0h2v-2h-2zm0 2v2h2v-2zm-2 0h-2v2h2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bitmap_font.svg b/editor/icons/icon_bitmap_font.svg index ce5f88b97c..5e5bd859c9 100644 --- a/editor/icons/icon_bitmap_font.svg +++ b/editor/icons/icon_bitmap_font.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m1 1037.4v4h1v-1h1v-1h4v10h-1v1h-1v1h6v-1h-1v-1h-1v-10h4v1h1v1h1v-4z" fill="#84c2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1037.4v4h1v-1h1v-1h4v10h-1v1h-1v1h6v-1h-1v-1h-1v-10h4v1h1v1h1v-4z" fill="#84c2ff" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_blend.svg b/editor/icons/icon_blend.svg index 3d24fc3b6b..c78b9287fa 100644 --- a/editor/icons/icon_blend.svg +++ b/editor/icons/icon_blend.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 1v2h2.5859l-3.5859 3.5859-4.293-4.293-1.4141 1.4141 4.293 4.293-4.293 4.293 1.4141 1.4141 4.293-4.293 3.5859 3.5859h-2.5859v2h5a1.0001 1.0001 0 0 0 1 -1v-5h-2v2.5859l-3.5859-3.5859 3.5859-3.5859v2.5859h2v-5a1.0001 1.0001 0 0 0 -1 -1h-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1v2h2.5859l-3.5859 3.5859-4.293-4.293-1.4141 1.4141 4.293 4.293-4.293 4.293 1.4141 1.4141 4.293-4.293 3.5859 3.5859h-2.5859v2h5a1.0001 1.0001 0 0 0 1-1v-5h-2v2.5859l-3.5859-3.5859 3.5859-3.5859v2.5859h2v-5a1.0001 1.0001 0 0 0 -1-1h-5z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bone.svg b/editor/icons/icon_bone.svg index 01662cd9aa..fafebb0394 100644 --- a/editor/icons/icon_bone.svg +++ b/editor/icons/icon_bone.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804 0.7205 2.4664 2.4663 0 0 0 -0.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023 0.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397 0.6955 2.4664 2.4663 0 0 0 0.69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 0.31408 -3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004 -0.3102 2.4664 2.4663 0 0 0 0 -3.4875 2.4664 2.4663 0 0 0 -1.397 -0.6974 2.4664 2.4663 0 0 0 -0.69561 -1.3971 2.4664 2.4663 0 0 0 -1.7072 -0.7205z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804.7205 2.4664 2.4663 0 0 0 -.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397.6955 2.4664 2.4663 0 0 0 .69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 .31408-3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004-.3102 2.4664 2.4663 0 0 0 0-3.4875 2.4664 2.4663 0 0 0 -1.397-.6974 2.4664 2.4663 0 0 0 -.69561-1.3971 2.4664 2.4663 0 0 0 -1.7072-.7205z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bone_2_d.svg b/editor/icons/icon_bone_2_d.svg index efcbc17e13..94bfff61e4 100644 --- a/editor/icons/icon_bone_2_d.svg +++ b/editor/icons/icon_bone_2_d.svg @@ -1,61 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_bone_2d.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="836" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(0 -1036.4)" - id="g4" - style="fill:#a5b7f3;fill-opacity:1"> - <path - d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804 0.7205 2.4664 2.4663 0 0 0 -0.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023 0.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397 0.6955 2.4664 2.4663 0 0 0 0.69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 0.31408 -3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004 -0.3102 2.4664 2.4663 0 0 0 0 -3.4875 2.4664 2.4663 0 0 0 -1.397 -0.6974 2.4664 2.4663 0 0 0 -0.69561 -1.3971 2.4664 2.4663 0 0 0 -1.7072 -0.7205z" - fill="#fc9c9c" - id="path2" - style="fill:#a5b7f3;fill-opacity:1" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804.7205 2.4664 2.4663 0 0 0 -.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397.6955 2.4664 2.4663 0 0 0 .69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 .31408-3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004-.3102 2.4664 2.4663 0 0 0 0-3.4875 2.4664 2.4663 0 0 0 -1.397-.6974 2.4664 2.4663 0 0 0 -.69561-1.3971 2.4664 2.4663 0 0 0 -1.7072-.7205z" fill="#a5b7f3" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bone_attachment.svg b/editor/icons/icon_bone_attachment.svg index 1dbc0f1ed3..0b7dede0b6 100644 --- a/editor/icons/icon_bone_attachment.svg +++ b/editor/icons/icon_bone_attachment.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804 0.7205 2.4664 2.4663 0 0 0 -0.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023 0.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397 0.6955 2.4664 2.4663 0 0 0 0.69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 0.31408 -3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004 -0.3102 2.4664 2.4663 0 0 0 0 -3.4875 2.4664 2.4663 0 0 0 -1.397 -0.6974 2.4664 2.4663 0 0 0 -0.69561 -1.3971 2.4664 2.4663 0 0 0 -1.7072 -0.7205z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804.7205 2.4664 2.4663 0 0 0 -.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397.6955 2.4664 2.4663 0 0 0 .69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 .31408-3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004-.3102 2.4664 2.4663 0 0 0 0-3.4875 2.4664 2.4663 0 0 0 -1.397-.6974 2.4664 2.4663 0 0 0 -.69561-1.3971 2.4664 2.4663 0 0 0 -1.7072-.7205z" fill="#fc9c9c" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bone_track.svg b/editor/icons/icon_bone_track.svg index a8adbb3dd1..0f6f9bb6cd 100644 --- a/editor/icons/icon_bone_track.svg +++ b/editor/icons/icon_bone_track.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804 0.7205 2.4664 2.4663 0 0 0 -0.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023 0.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397 0.6955 2.4664 2.4663 0 0 0 0.69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 0.31408 -3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004 -0.3102 2.4664 2.4663 0 0 0 0 -3.4875 2.4664 2.4663 0 0 0 -1.397 -0.6974 2.4664 2.4663 0 0 0 -0.69561 -1.3971 2.4664 2.4663 0 0 0 -1.7072 -0.7205z" fill="#cea4f1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.478 1037.4a2.4664 2.4663 0 0 0 -1.7804.7205 2.4664 2.4663 0 0 0 -.31408 3.1041l-3.559 3.5608a2.4664 2.4663 0 0 0 -3.1023.3121 2.4664 2.4663 0 0 0 0 3.4876 2.4664 2.4663 0 0 0 1.397.6955 2.4664 2.4663 0 0 0 .69561 1.397 2.4664 2.4663 0 0 0 3.4877 0 2.4664 2.4663 0 0 0 .31408-3.1041l3.5609-3.5608a2.4664 2.4663 0 0 0 3.1004-.3102 2.4664 2.4663 0 0 0 0-3.4875 2.4664 2.4663 0 0 0 -1.397-.6974 2.4664 2.4663 0 0 0 -.69561-1.3971 2.4664 2.4663 0 0 0 -1.7072-.7205z" fill="#cea4f1" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bool.svg b/editor/icons/icon_bool.svg index c4c919dfca..5ffd40a815 100644 --- a/editor/icons/icon_bool.svg +++ b/editor/icons/icon_bool.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 2v8h2a3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457 3 3 0 0 0 2 -0.76758 3 3 0 0 0 2 0.76758 3 3 0 0 0 2.5 -1.3457 3 3 0 0 0 2.5 1.3457v-2a1 1 0 0 1 -1 -1v-5h-2v2.7695a3 3 0 0 0 -2 -0.76953 3 3 0 0 0 -2 0.76758 3 3 0 0 0 -2 -0.76758 3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5 -1.3457v-2zm2 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#8da6f0"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 2v8h2a3 3 0 0 0 2.5-1.3457 3 3 0 0 0 2.5 1.3457 3 3 0 0 0 2-.76758 3 3 0 0 0 2 .76758 3 3 0 0 0 2.5-1.3457 3 3 0 0 0 2.5 1.3457v-2a1 1 0 0 1 -1-1v-5h-2v2.7695a3 3 0 0 0 -2-.76953 3 3 0 0 0 -2 .76758 3 3 0 0 0 -2-.76758 3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5-1.3457v-2zm2 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#8da6f0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_box_shape.svg b/editor/icons/icon_box_shape.svg index b11edb16ca..171e95f4fa 100644 --- a/editor/icons/icon_box_shape.svg +++ b/editor/icons/icon_box_shape.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-7 3v8l7 3 7-3v-8l-7-3z" fill="#2998ff"/> -<path d="m8 1051.4-7-3v-8l7 3z" fill="#68b6ff"/> -<path d="m1 1040.4 7 3 7-3-7-3z" fill="#a2d2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m8 1-7 3v8l7 3 7-3v-8z" fill="#2998ff" transform="translate(0 1036.4)"/><path d="m8 1051.4-7-3v-8l7 3z" fill="#68b6ff"/><path d="m1 1040.4 7 3 7-3-7-3z" fill="#a2d2ff"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bucket.svg b/editor/icons/icon_bucket.svg index 4a5df39e93..fc3481290d 100644 --- a/editor/icons/icon_bucket.svg +++ b/editor/icons/icon_bucket.svg @@ -1,86 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_bucket.svg" - inkscape:version="0.92.2 2405546, 2018-03-11"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1876" - inkscape:window-height="1574" - id="namedview8" - showgrid="true" - inkscape:snap-bbox="true" - inkscape:bbox-paths="false" - inkscape:bbox-nodes="false" - inkscape:snap-bbox-edge-midpoints="false" - inkscape:snap-bbox-midpoints="true" - inkscape:snap-intersection-paths="true" - inkscape:snap-smooth-nodes="true" - inkscape:snap-object-midpoints="true" - inkscape:snap-nodes="false" - inkscape:snap-others="false" - inkscape:zoom="16" - inkscape:cx="-4.3713942" - inkscape:cy="-1.9091903" - inkscape:window-x="4" - inkscape:window-y="20" - inkscape:window-maximized="0" - inkscape:current-layer="g4"> - <inkscape:grid - type="xygrid" - id="grid4524" /> - </sodipodi:namedview> - <g - transform="translate(0 -1036.4)" - id="g4"> - <g - id="g4576" - transform="matrix(0.53348552,0.53348552,-0.53348552,0.53348552,561.06065,484.40406)" - style="stroke-width:1.32544696"> - <path - id="path2" - transform="translate(0,1036.4)" - d="M 2,1 C 1.4477645,1.0001 1.0000523,1.4477 1,2 V 3.5 H 3.8847656 A 1.4999877,1.5 0 0 1 5,3 1.4999877,1.5 0 0 1 6.5,4.5 1.4999877,1.5 0 0 1 5,6 1.4999877,1.5 0 0 1 3.8847656,5.5 H 1 V 7 H -0.26953125 -2 c -0.5522769,0 -0.999989,-0.4477 -1,-1 1.1e-5,-0.5523 0.4477231,-1 1,-1 h 3 2.5878906 0.546875 A 1,1 0 0 0 5,5.5 1,1 0 0 0 6,4.5 1,1 0 0 0 5,3.5 1,1 0 0 0 4.1367188,4 H 3.5878906 1 -2 c -1.1045647,0 -1.9999933,0.8954285 -2,2 6.7e-6,1.1045715 0.8954353,2 2,2 h 3 v 6 c 7.35e-5,0.5523 0.4477232,0.9999 1,1 h 8 c 0.552235,-10e-5 0.999947,-0.4477 1,-1 V 1 Z" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;stroke-width:1.32544696;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cczcc" - inkscape:connector-curvature="0" - id="path4526" - d="m 12,1038.4 c 0.707107,3.5356 0.707107,3.5356 1.414213,4.2427 0.707107,0.7071 2.121321,0.7071 2.828428,0 0.707106,-0.7071 0.707106,-2.1213 0,-2.8284 C 15.535534,1039.1071 15.535534,1039.1071 12,1038.4 Z" - style="fill:#e0e0e0;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.32544696px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke-width="1.325447" transform="matrix(.53348552 .53348552 -.53348552 .53348552 561.06065 -551.99594)"><path d="m2 1c-.5522355.0001-.9999477.4477-1 1v1.5h2.8847656a1.4999877 1.5 0 0 1 1.1152344-.5 1.4999877 1.5 0 0 1 1.5 1.5 1.4999877 1.5 0 0 1 -1.5 1.5 1.4999877 1.5 0 0 1 -1.1152344-.5h-2.8847656v1.5h-1.26953125-1.73046875c-.5522769 0-.999989-.4477-1-1 .000011-.5523.4477231-1 1-1h3 2.5878906.546875a1 1 0 0 0 .8652344.5 1 1 0 0 0 1-1 1 1 0 0 0 -1-1 1 1 0 0 0 -.8632812.5h-.5488282-2.5878906-3c-1.1045647 0-1.9999933.8954285-2 2 .0000067 1.1045715.8954353 2 2 2h3v6c.0000735.5523.4477232.9999 1 1h8c.552235-.0001.999947-.4477 1-1v-13z" stroke-width="1.325447" transform="translate(0 1036.4)"/><path d="m12 1038.4c.707107 3.5356.707107 3.5356 1.414213 4.2427.707107.7071 2.121321.7071 2.828428 0 .707106-.7071.707106-2.1213 0-2.8284-.707107-.7072-.707107-.7072-4.242641-1.4143z" fill-rule="evenodd"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bus_vu_db.svg b/editor/icons/icon_bus_vu_db.svg deleted file mode 100644 index 236e41e1f5..0000000000 --- a/editor/icons/icon_bus_vu_db.svg +++ /dev/null @@ -1,12 +0,0 @@ -<svg width="32" height="128" version="1.1" viewBox="0 0 32 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="16" x2="16" y2="128" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m1.5 0c-0.831 0-1.5 0.669-1.5 1.5 0 0.831 0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5 0-0.831-0.669-1.5-1.5-1.5h-2zm0 7c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm22.5 3.75c-1.5 0-3 1.3056-3 3.25-0.01912 1.3523 2.0191 1.3523 2 0 0-1.0556 0.5-1.25 1-1.25s1 0.19444 1 1.25c0 0.59157-0.35893 1.156-1.1914 1.8633-0.83248 0.70724-2.0616 1.4518-3.3574 2.3008-0.82974 0.54516-0.44398 1.8356 0.54883 1.8359h5c1.3523 0.01912 1.3523-2.0191 0-2h-1.7852c0.28375-0.20667 0.63106-0.39443 0.88867-0.61328 1.0302-0.87519 1.8965-1.9783 1.8965-3.3867 0-1.9444-1.5-3.25-3-3.25zm-7.0293 0.25195c-0.14519 0.0037-0.28782 0.03907-0.41797 0.10352l-2 1c-1.1924 0.59646-0.29787 2.3855 0.89453 1.7891l0.55273-0.27539v5.3809c-0.01913 1.3523 2.0191 1.3523 2 0v-7c-9.16e-4 -0.56314-0.4664-1.0145-1.0293-0.99805zm-15.471 2.998c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm0 7c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm21.5 3c-0.554 0-1 0.446-1 1v1 2h-0.92969c-0.02343-8.24e-4 -0.046882-8.24e-4 -0.070312 0-1.0702 0-2.0626 0.57318-2.5977 1.5-0.5351 0.92681-0.5351 2.0732 0 3 0.5351 0.92681 1.5275 1.5 2.5977 1.5h2c0.554 0 1-0.446 1-1v-8c0-0.554-0.446-1-1-1zm4 0c-0.554 0-1 0.446-1 1v8c0 0.554 0.446 1 1 1h2c1.0702 0 2.0626-0.57319 2.5977-1.5 0.5351-0.92682 0.5351-2.0732 0-3-0.10504-0.18193-0.23173-0.34698-0.36914-0.5 0.1378-0.15331 0.26385-0.31764 0.36914-0.5 0.5351-0.92682 0.5351-2.0732 0-3-0.5351-0.92682-1.5275-1.5-2.5977-1.5h-2zm-14 1c-1.6447 0-3 1.3553-3 3v3c0 1.6447 1.3553 3 3 3s3-1.3553 3-3v-3c0-1.6447-1.3553-3-3-3zm15 1h1c0.35887 0 0.6858 0.18921 0.86523 0.5 0.17944 0.31079 0.17944 0.68921 0 1-0.17943 0.31079-0.50636 0.5-0.86523 0.5h-0.070312-0.92969v-2zm-15 1c0.5713 0 1 0.4287 1 1v3c0 0.5713-0.4287 1-1 1s-1-0.4287-1-1v-3c0-0.5713 0.4287-1 1-1zm-11.5 1c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm19.5 2h1v2h-0.92969c-0.02343-8.24e-4 -0.046882-8.24e-4 -0.070312 0-0.35887 0-0.6858-0.18921-0.86523-0.5-0.17944-0.31079-0.17944-0.68921 0-1 0.17943-0.31079 0.50636-0.5 0.86523-0.5zm7 0h1c0.35887 0 0.6858 0.18921 0.86523 0.5 0.17944 0.31079 0.17944 0.68921 0 1-0.17943 0.31079-0.50636 0.5-0.86523 0.5h-1v-2zm-26.5 5c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm22.5 2.75c-1.5 0-3 1.3056-3 3.25-0.01912 1.3523 2.0191 1.3523 2 0 0-1.0556 0.5-1.25 1-1.25s1 0.19444 1 1.25c0 0.59157-0.35893 1.156-1.1914 1.8633-0.83248 0.70724-2.0616 1.4518-3.3574 2.3008-0.82974 0.54516-0.44398 1.8356 0.54883 1.8359h5c1.3523 0.01913 1.3523-2.0191 0-2h-1.7852c0.28375-0.20667 0.63106-0.39443 0.88867-0.61328 1.0302-0.87519 1.8965-1.9783 1.8965-3.3867 0-1.9444-1.5-3.25-3-3.25zm-7.0293 0.25195c-0.14519 0.0037-0.28782 0.03907-0.41797 0.10352l-2 1c-1.1924 0.59646-0.29787 2.3855 0.89453 1.7891l0.55273-0.27539v5.3809c-0.01913 1.3523 2.0191 1.3523 2 0v-7c-9.16e-4 -0.56314-0.4664-1.0145-1.0293-0.99805zm-15.471 3.998c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm7.5 1v2h3v-2h-3zm-7 6c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm15.986 3.75c-1.5 0-3 1.3056-3 3.25-0.01913 1.3523 2.0191 1.3523 2 0 0-1.0556 0.5-1.25 1-1.25s1 0.19444 1 1.25c0 0.59157-0.35893 1.156-1.1914 1.8633s-2.0616 1.4518-3.3574 2.3008c-0.82974 0.54516-0.44398 1.8356 0.54883 1.8359h5c1.3523 0.01913 1.3523-2.0191 0-2h-1.7871c0.2841-0.20689 0.63273-0.39419 0.89062-0.61328 1.0302-0.87519 1.8965-1.9783 1.8965-3.3867 0-1.9444-1.5-3.25-3-3.25zm7.0469 0.23828c-0.36561-0.0093-0.70715 0.18167-0.89062 0.49805l-3 5c-0.39877 0.66633 0.080888 1.5131 0.85742 1.5137h3v1c-0.01912 1.3523 2.0191 1.3523 2 0v-2c-5.5e-5 -0.55226-0.44774-0.99994-1-1h-2.2324l2.0898-3.4844c0.40768-0.65656-0.05163-1.5077-0.82422-1.5273zm-23.533 3.0117c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm7.5 2v2h3v-2h-3zm-7.5 5c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm24.547 4.9961c-0.12355-0.0037-0.24673 0.01547-0.36328 0.05664 0 0-0.98349 0.3331-1.8906 1.2402-0.90714 0.90717-1.793 2.457-1.793 4.707-6.13e-4 0.07218 0.006604 0.14421 0.021484 0.21484 0.11389 1.5445 1.4072 2.7852 2.9785 2.7852 1.645 0 3-1.355 3-3 0-1.645-1.355-3-3-3-0.01533 0-0.029642 0.003706-0.044922 0.003906 0.084-0.10099 0.16695-0.21188 0.25195-0.29688 0.59286-0.59287 1.1094-0.75781 1.1094-0.75781 1.0726-0.33926 0.85487-1.9171-0.26953-1.9531zm-9.0605 0.005859c-1.0407 0.006928-2.0405 0.55674-2.584 1.498a1 1 0 0 0 0.36523 1.3672 1 1 0 0 0 1.3672 -0.36719c0.24596-0.42602 0.74477-0.6077 1.207-0.43945 0.46226 0.16824 0.728 0.62882 0.64258 1.1133-0.085422 0.48445-0.49245 0.82617-0.98438 0.82617a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c0.49193 0 0.89896 0.34368 0.98438 0.82812 0.085422 0.48446-0.18032 0.94508-0.64258 1.1133-0.46226 0.1683-0.96107-0.015436-1.207-0.44141-0.27644-0.47871-0.88884-0.6423-1.3672-0.36523-0.47752 0.27639-0.64095 0.88733-0.36523 1.3652 0.72462 1.2553 2.2612 1.816 3.623 1.3203 1.3618-0.4956 2.1813-1.9126 1.9297-3.3398-0.1003-0.56884-0.37254-1.0676-0.74023-1.4746 0.37098-0.40777 0.63937-0.91234 0.74023-1.4844 0.25166-1.4272-0.56786-2.8442-1.9297-3.3398-0.34046-0.12392-0.69218-0.182-1.0391-0.17969zm-15.486 1.998c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm7.5 2v2h3v-2h-3zm16 1c0.56413 0 1 0.43587 1 1s-0.43587 1-1 1-1-0.43587-1-1 0.43587-1 1-1zm-23.5 4c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm16.533 3.9883c-0.36561-0.0093-0.70715 0.18167-0.89062 0.49805l-3 5c-0.39877 0.66633 0.080888 1.5131 0.85742 1.5137h3v1c-0.01912 1.3523 2.0191 1.3523 2 0v-2c-5.5e-5 -0.55226-0.44774-0.99994-1-1h-2.2324l2.0898-3.4844c0.40768-0.65656-0.05163-1.5077-0.82422-1.5273zm6.9668 0.011719c-1.645 0-3 1.355-3 3 0 0.769 0.30369 1.4666 0.78711 2-0.48282 0.53332-0.78711 1.2315-0.78711 2 0 1.645 1.355 3 3 3s3-1.355 3-3c0-0.76846-0.30429-1.4667-0.78711-2 0.48342-0.53345 0.78711-1.231 0.78711-2 0-1.645-1.355-3-3-3zm0 2c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1zm-23.5 1c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm7.5 2v2h3v-2h-3zm16 1c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1zm-23.5 4c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm16.447 3.9824c-0.08995 0.0063-0.17865 0.024647-0.26367 0.054687 0 0-0.98349 0.33509-1.8906 1.2422-0.90714 0.9068-1.793 2.457-1.793 4.707-6.13e-4 0.0722 0.006604 0.14421 0.021484 0.21484 0.11389 1.5445 1.4072 2.7852 2.9785 2.7852 1.645 0 3-1.355 3-3 0-1.6451-1.355-3-3-3-0.01533 0-0.029642 0.003706-0.044922 0.003906 0.084-0.10099 0.16695-0.21187 0.25195-0.29688 0.59286-0.5929 1.1094-0.75781 1.1094-0.75781 1.0726-0.33926 0.85487-1.9171-0.26953-1.9531-0.03318-0.0017-0.066429-0.0017-0.099609 0zm7.0527 0.017578c-1.6447 0-3 1.3553-3 3v3c0 1.6447 1.3553 3 3 3s3-1.3553 3-3v-3c0-1.6447-1.3553-3-3-3zm0 2c0.5713 0 1 0.4287 1 1v3c0 0.5713-0.4287 1-1 1s-1-0.4287-1-1v-3c0-0.5713 0.4287-1 1-1zm-23.5 1c-0.831 0-1.5 0.669-1.5 1.5 0 0.831 0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5 0-0.831-0.669-1.5-1.5-1.5h-2zm15.5 1.9863c0.56413 0 1 0.4358 1 1 0 0.5641-0.43587 1-1 1s-1-0.4359-1-1c0-0.5642 0.43587-1 1-1zm-8 0.013672v2h3v-2h-3zm-7.5 5c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5zm22.5 3.75c-1.5 0-3 1.3056-3 3.25-0.01912 1.3523 2.0191 1.3523 2 0 0-1.0555 0.5-1.25 1-1.25s1 0.1945 1 1.25c0 0.5916-0.35893 1.1561-1.1914 1.8633-0.83248 0.7072-2.0616 1.4518-3.3574 2.3008-0.82975 0.54515-0.44398 1.8356 0.54883 1.8359h5c1.3523 0.0191 1.3523-2.0191 0-2h-1.7852c0.28375-0.2066 0.63106-0.39438 0.88867-0.61328 1.0302-0.8751 1.8965-1.9782 1.8965-3.3867 0-1.9444-1.5-3.25-3-3.25zm-10 0.25c-1.3523-0.0191-1.3523 2.0191 0 2h3.3828l-3.2773 6.5527c-0.59596 1.1926 1.1931 2.0871 1.7891 0.89454l4-8c0.33239-0.66495-0.15113-1.4472-0.89453-1.4473h-5zm-12.5 3c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5h2c0.831 0 1.5-0.669 1.5-1.5s-0.669-1.5-1.5-1.5h-2zm7.5 2v2h3v-2h-3zm-7.5 5c-0.831 0-1.5 0.669-1.5 1.5s0.669 1.5 1.5 1.5 1.5-0.669 1.5-1.5-0.669-1.5-1.5-1.5z" fill="url(#a)"/> -</g> -</svg> diff --git a/editor/icons/icon_bus_vu_empty.svg b/editor/icons/icon_bus_vu_empty.svg index 60fddc535f..5260b9e252 100644 --- a/editor/icons/icon_bus_vu_empty.svg +++ b/editor/icons/icon_bus_vu_empty.svg @@ -1,13 +1 @@ -<svg width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientTransform="translate(0 924.36)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -924.36)"> -<path d="m3 926.36c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 5c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1z" fill="url(#a)"/> -<path transform="translate(0 924.36)" d="m3 2c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 5c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10z" fill-opacity=".19608"/> -</g> -</svg> +<svg height="128" viewBox="0 0 16 128" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="926.36" y2="1050.36"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><g transform="translate(0 -924.36)"><path d="m3 926.36c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 5c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1z" fill="url(#a)"/><path d="m3 2c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 5c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1z" fill-opacity=".19608" transform="translate(0 924.36)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bus_vu_frozen.svg b/editor/icons/icon_bus_vu_frozen.svg index 99884d33fc..c10bb5a1a2 100644 --- a/editor/icons/icon_bus_vu_frozen.svg +++ b/editor/icons/icon_bus_vu_frozen.svg @@ -1,12 +1 @@ -<svg width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientUnits="userSpaceOnUse"> -<stop stop-color="#62aeff" offset="0"/> -<stop stop-color="#75d1e6" offset=".5"/> -<stop stop-color="#84ffee" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m3 2c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 5c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10z" fill="url(#a)" opacity=".7"/> -</g> -</svg> +<svg height="128" viewBox="0 0 16 128" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="2" y2="126"><stop offset="0" stop-color="#62aeff"/><stop offset=".5" stop-color="#75d1e6"/><stop offset="1" stop-color="#84ffee"/></linearGradient><path d="m3 2c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 5c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1z" fill="url(#a)" opacity=".7"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_bus_vu_full.svg b/editor/icons/icon_bus_vu_full.svg index 4f2ce5df11..377ac60bc1 100644 --- a/editor/icons/icon_bus_vu_full.svg +++ b/editor/icons/icon_bus_vu_full.svg @@ -1,12 +1 @@ -<svg width="16" height="128" version="1.1" viewBox="0 0 16 128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="2" y2="126" gradientUnits="userSpaceOnUse"> -<stop stop-color="#ff7a7a" offset="0"/> -<stop stop-color="#e1dc7a" offset=".5"/> -<stop stop-color="#66ff9e" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m3 2c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 5c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10zm0 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h10c0.554 0 1-0.446 1-1s-0.446-1-1-1h-10z" fill="url(#a)"/> -</g> -</svg> +<svg height="128" viewBox="0 0 16 128" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="2" y2="126"><stop offset="0" stop-color="#ff7a7a"/><stop offset=".5" stop-color="#e1dc7a"/><stop offset="1" stop-color="#66ff9e"/></linearGradient><path d="m3 2c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 5c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1zm0 3c-.554 0-1 .446-1 1s.446 1 1 1h10c.554 0 1-.446 1-1s-.446-1-1-1z" fill="url(#a)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_button.svg b/editor/icons/icon_button.svg index 605546d174..6ea5663dda 100644 --- a/editor/icons/icon_button.svg +++ b/editor/icons/icon_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v3.1328l-1.4453-0.96484-1.1094 1.6641 3 2a1.0001 1.0001 0 0 0 1.1094 0l3-2-1.1094-1.6641-1.4453 0.96484v-3.1328h-2zm-1.5 8c-0.831 0-1.5 0.669-1.5 1.5v1.5h-2v2h12v-2h-2v-1.5c0-0.831-0.669-1.5-1.5-1.5h-5z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v3.1328l-1.4453-.96484-1.1094 1.6641 3 2a1.0001 1.0001 0 0 0 1.1094 0l3-2-1.1094-1.6641-1.4453.96484v-3.1328zm-1.5 8c-.831 0-1.5.669-1.5 1.5v1.5h-2v2h12v-2h-2v-1.5c0-.831-.669-1.5-1.5-1.5z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_button_group.svg b/editor/icons/icon_button_group.svg index 110688adaf..683a8c3054 100644 --- a/editor/icons/icon_button_group.svg +++ b/editor/icons/icon_button_group.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1c-0.554 0-1 0.446-1 1v12c0 0.554 0.446 1 1 1h8c0.554 0 1-0.446 1-1v-12c0-0.554-0.446-1-1-1h-8zm1 1h2c0.554 0 1 0.446 1 1s-0.446 1-1 1h-2c-0.554 0-1-0.446-1-1s0.446-1 1-1zm6 0c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-5 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm5 0c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm0 4c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1zm-7 2h1v2h-1v-2zm2 0h1v2h-1v-2zm2 0h1v2h-1v-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1c-.554 0-1 .446-1 1v12c0 .554.446 1 1 1h8c.554 0 1-.446 1-1v-12c0-.554-.446-1-1-1zm1 1h2c.554 0 1 .446 1 1s-.446 1-1 1h-2c-.554 0-1-.446-1-1s.446-1 1-1zm6 0c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1zm-5 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm5 0c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1zm0 4c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1zm-7 2h1v2h-1zm2 0h1v2h-1zm2 0h1v2h-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_c_p_u_particles.svg b/editor/icons/icon_c_p_u_particles.svg index 00d79cafd2..af4115c93f 100644 --- a/editor/icons/icon_c_p_u_particles.svg +++ b/editor/icons/icon_c_p_u_particles.svg @@ -1,60 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_c_p_u_particles.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1741" - inkscape:window-height="753" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8.1355932" - inkscape:cy="7.7288136" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:#fc9c9c;fill-opacity:0.99607843" - d="m 4.5587261,0.60940813 c -0.4226244,0 -0.7617187,0.3410473 -0.7617187,0.76367177 v 0.5078126 c 0,0.1028478 0.020058,0.199689 0.056641,0.2890624 H 2.6602887 c -0.4226245,0 -0.7617188,0.3390944 -0.7617188,0.7617188 v 0.921875 C 1.8581419,3.8469787 1.821771,3.8301112 1.7794293,3.8301112 H 1.2716168 c -0.42262448,0 -0.76367188,0.3410475 -0.76367188,0.7636719 v 0.3730468 c 0,0.4226245 0.3410474,0.7617188 0.76367188,0.7617188 h 0.5078125 c 0.042396,0 0.078663,-0.016851 0.1191406,-0.023437 v 4.4531248 c -0.040428,-0.0066 -0.076799,-0.02344 -0.1191406,-0.02344 H 1.2716168 c -0.42262448,0 -0.76367188,0.341047 -0.76367188,0.763672 v 0.373047 c 0,0.422625 0.3410474,0.761718 0.76367188,0.761718 h 0.5078125 c 0.042396,0 0.078663,-0.01685 0.1191406,-0.02344 v 1.125 c 0,0.422624 0.3390944,0.763672 0.7617188,0.763672 h 1.1367187 v 0.457031 c 0,0.422624 0.3390943,0.763672 0.7617187,0.763672 H 4.931773 c 0.4226244,0 0.7636719,-0.341048 0.7636719,-0.763672 v -0.457031 h 4.4062501 v 0.457031 c 0,0.422624 0.339094,0.763672 0.761719,0.763672 h 0.373047 c 0.422624,0 0.763671,-0.341048 0.763671,-0.763672 v -0.457031 h 1.269532 c 0.422625,0 0.763672,-0.341048 0.763672,-0.763672 v -1.111328 c 0.01774,0.0012 0.03272,0.0098 0.05078,0.0098 h 0.507812 c 0.422624,0 0.763672,-0.339093 0.763672,-0.761718 v -0.373047 c 0,-0.422624 -0.341048,-0.763672 -0.763672,-0.763672 h -0.507812 c -0.01803,0 -0.03307,0.0085 -0.05078,0.0098 V 5.7187831 c 0.01774,0.00122 0.03272,0.00977 0.05078,0.00977 h 0.507812 c 0.422624,0 0.763672,-0.3390943 0.763672,-0.7617188 V 4.5937831 c 0,-0.4226244 -0.341048,-0.7636719 -0.763672,-0.7636719 h -0.507812 c -0.01803,0 -0.03307,0.00855 -0.05078,0.00977 V 2.9316737 c 0,-0.4226244 -0.341047,-0.7617187 -0.763672,-0.7617188 h -1.328125 c 0.03658,-0.089375 0.05859,-0.1862118 0.05859,-0.2890624 V 1.3730799 c 0,-0.42262437 -0.341047,-0.76367177 -0.763671,-0.76367177 h -0.373047 c -0.422625,0 -0.761719,0.3410474 -0.761719,0.76367177 v 0.5078126 c 0,0.1028478 0.02006,0.1996891 0.05664,0.2890624 H 5.6368511 C 5.6734361,2.08058 5.6954449,1.9837431 5.6954449,1.8808925 V 1.3730799 c 0,-0.42262437 -0.3410475,-0.76367177 -0.7636719,-0.76367177 z M 7.7970074,2.9668299 A 3.279661,3.6440678 0 0 1 11.009898,5.9062831 2.1864407,2.1864407 0 0 1 12.89857,8.0683925 2.1864407,2.1864407 0 0 1 10.71107,10.25394 H 4.8809918 A 2.1864407,2.1864407 0 0 1 2.6954449,8.0683925 2.1864407,2.1864407 0 0 1 4.5802105,5.9043299 3.279661,3.6440678 0 0 1 7.7970074,2.9668299 Z M 4.8809918,10.982455 A 0.72881355,0.72881355 0 0 1 5.6095074,11.710971 0.72881355,0.72881355 0 0 1 4.8809918,12.44144 0.72881355,0.72881355 0 0 1 4.1524761,11.710971 0.72881355,0.72881355 0 0 1 4.8809918,10.982455 Z m 5.8300782,0 A 0.72881355,0.72881355 0 0 1 11.441539,11.710971 0.72881355,0.72881355 0 0 1 10.71107,12.44144 0.72881355,0.72881355 0 0 1 9.9825543,11.710971 0.72881355,0.72881355 0 0 1 10.71107,10.982455 Z M 7.7970074,11.710971 A 0.72881355,0.72881355 0 0 1 8.525523,12.44144 0.72881355,0.72881355 0 0 1 7.7970074,13.169955 0.72881355,0.72881355 0 0 1 7.0684918,12.44144 0.72881355,0.72881355 0 0 1 7.7970074,11.710971 Z" - id="rect822" - inkscape:connector-curvature="0" /> - <g - inkscape:groupmode="layer" - id="layer1" - inkscape:label="Layer 1" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.5587261.60940813c-.4226244 0-.7617187.3410473-.7617187.76367177v.5078126c0 .1028478.020058.199689.056641.2890624h-1.1933597c-.4226245 0-.7617188.3390944-.7617188.7617188v.921875c-.040428-.00657-.0767989-.0234375-.1191406-.0234375h-.5078125c-.42262448 0-.76367188.3410475-.76367188.7636719v.3730468c0 .4226245.3410474.7617188.76367188.7617188h.5078125c.042396 0 .078663-.016851.1191406-.023437v4.4531248c-.040428-.0066-.076799-.02344-.1191406-.02344h-.5078125c-.42262448 0-.76367188.341047-.76367188.763672v.373047c0 .422625.3410474.761718.76367188.761718h.5078125c.042396 0 .078663-.01685.1191406-.02344v1.125c0 .422624.3390944.763672.7617188.763672h1.1367187v.457031c0 .422624.3390943.763672.7617187.763672h.3730469c.4226244 0 .7636719-.341048.7636719-.763672v-.457031h4.4062501v.457031c0 .422624.339094.763672.761719.763672h.373047c.422624 0 .763671-.341048.763671-.763672v-.457031h1.269532c.422625 0 .763672-.341048.763672-.763672v-1.111328c.01774.0012.03272.0098.05078.0098h.507812c.422624 0 .763672-.339093.763672-.761718v-.373047c0-.422624-.341048-.763672-.763672-.763672h-.507812c-.01803 0-.03307.0085-.05078.0098v-4.4258454c.01774.00122.03272.00977.05078.00977h.507812c.422624 0 .763672-.3390943.763672-.7617188v-.3730512c0-.4226244-.341048-.7636719-.763672-.7636719h-.507812c-.01803 0-.03307.00855-.05078.00977v-.9082075c0-.4226244-.341047-.7617187-.763672-.7617188h-1.328125c.03658-.089375.05859-.1862118.05859-.2890624v-.5078126c0-.42262437-.341047-.76367177-.763671-.76367177h-.373047c-.422625 0-.761719.3410474-.761719.76367177v.5078126c0 .1028478.02006.1996891.05664.2890624h-4.5214809c.036585-.0893749.0585938-.1862118.0585938-.2890624v-.5078126c0-.42262437-.3410475-.76367177-.7636719-.76367177zm3.2382813 2.35742177a3.279661 3.6440678 0 0 1 3.2128906 2.9394532 2.1864407 2.1864407 0 0 1 1.888672 2.1621094 2.1864407 2.1864407 0 0 1 -2.1875 2.1855475h-5.8300782a2.1864407 2.1864407 0 0 1 -2.1855469-2.1855475 2.1864407 2.1864407 0 0 1 1.8847656-2.1640626 3.279661 3.6440678 0 0 1 3.2167969-2.9375zm-2.9160156 8.0156251a.72881355.72881355 0 0 1 .7285156.728516.72881355.72881355 0 0 1 -.7285156.730469.72881355.72881355 0 0 1 -.7285157-.730469.72881355.72881355 0 0 1 .7285157-.728516zm5.8300782 0a.72881355.72881355 0 0 1 .730469.728516.72881355.72881355 0 0 1 -.730469.730469.72881355.72881355 0 0 1 -.7285157-.730469.72881355.72881355 0 0 1 .7285157-.728516zm-2.9140626.728516a.72881355.72881355 0 0 1 .7285156.730469.72881355.72881355 0 0 1 -.7285156.728515.72881355.72881355 0 0 1 -.7285156-.728515.72881355.72881355 0 0 1 .7285156-.730469z" fill="#fc9c9c" fill-opacity=".996078"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_c_p_u_particles_2_d.svg b/editor/icons/icon_c_p_u_particles_2_d.svg index 926e675fee..25afc35bec 100644 --- a/editor/icons/icon_c_p_u_particles_2_d.svg +++ b/editor/icons/icon_c_p_u_particles_2_d.svg @@ -1,60 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_c_p_u_particles_2_d.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1741" - inkscape:window-height="753" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="-5.6949153" - inkscape:cy="7.7288136" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:#a3b6f3;fill-opacity:0.99215686" - d="m 4.5587261,0.60940813 c -0.4226244,0 -0.7617187,0.3410473 -0.7617187,0.76367177 v 0.5078126 c 0,0.1028478 0.020058,0.199689 0.056641,0.2890624 H 2.6602887 c -0.4226245,0 -0.7617188,0.3390944 -0.7617188,0.7617188 v 0.921875 C 1.8581419,3.8469787 1.821771,3.8301112 1.7794293,3.8301112 H 1.2716168 c -0.42262448,0 -0.76367188,0.3410475 -0.76367188,0.7636719 v 0.3730468 c 0,0.4226245 0.3410474,0.7617188 0.76367188,0.7617188 h 0.5078125 c 0.042396,0 0.078663,-0.016851 0.1191406,-0.023437 v 4.4531248 c -0.040428,-0.0066 -0.076799,-0.02344 -0.1191406,-0.02344 H 1.2716168 c -0.42262448,0 -0.76367188,0.341047 -0.76367188,0.763672 v 0.373047 c 0,0.422625 0.3410474,0.761718 0.76367188,0.761718 h 0.5078125 c 0.042396,0 0.078663,-0.01685 0.1191406,-0.02344 v 1.125 c 0,0.422624 0.3390944,0.763672 0.7617188,0.763672 h 1.1367187 v 0.457031 c 0,0.422624 0.3390943,0.763672 0.7617187,0.763672 H 4.931773 c 0.4226244,0 0.7636719,-0.341048 0.7636719,-0.763672 v -0.457031 h 4.4062501 v 0.457031 c 0,0.422624 0.339094,0.763672 0.761719,0.763672 h 0.373047 c 0.422624,0 0.763671,-0.341048 0.763671,-0.763672 v -0.457031 h 1.269532 c 0.422625,0 0.763672,-0.341048 0.763672,-0.763672 v -1.111328 c 0.01774,0.0012 0.03272,0.0098 0.05078,0.0098 h 0.507812 c 0.422624,0 0.763672,-0.339093 0.763672,-0.761718 v -0.373047 c 0,-0.422624 -0.341048,-0.763672 -0.763672,-0.763672 h -0.507812 c -0.01803,0 -0.03307,0.0085 -0.05078,0.0098 V 5.7187831 c 0.01774,0.00122 0.03272,0.00977 0.05078,0.00977 h 0.507812 c 0.422624,0 0.763672,-0.3390943 0.763672,-0.7617188 V 4.5937831 c 0,-0.4226244 -0.341048,-0.7636719 -0.763672,-0.7636719 h -0.507812 c -0.01803,0 -0.03307,0.00855 -0.05078,0.00977 V 2.9316737 c 0,-0.4226244 -0.341047,-0.7617187 -0.763672,-0.7617188 h -1.328125 c 0.03658,-0.089375 0.05859,-0.1862118 0.05859,-0.2890624 V 1.3730799 c 0,-0.42262437 -0.341047,-0.76367177 -0.763671,-0.76367177 h -0.373047 c -0.422625,0 -0.761719,0.3410474 -0.761719,0.76367177 v 0.5078126 c 0,0.1028478 0.02006,0.1996891 0.05664,0.2890624 H 5.6368511 C 5.6734361,2.08058 5.6954449,1.9837431 5.6954449,1.8808925 V 1.3730799 c 0,-0.42262437 -0.3410475,-0.76367177 -0.7636719,-0.76367177 z M 7.7970074,2.9668299 A 3.279661,3.6440678 0 0 1 11.009898,5.9062831 2.1864407,2.1864407 0 0 1 12.89857,8.0683925 2.1864407,2.1864407 0 0 1 10.71107,10.25394 H 4.8809918 A 2.1864407,2.1864407 0 0 1 2.6954449,8.0683925 2.1864407,2.1864407 0 0 1 4.5802105,5.9043299 3.279661,3.6440678 0 0 1 7.7970074,2.9668299 Z M 4.8809918,10.982455 A 0.72881355,0.72881355 0 0 1 5.6095074,11.710971 0.72881355,0.72881355 0 0 1 4.8809918,12.44144 0.72881355,0.72881355 0 0 1 4.1524761,11.710971 0.72881355,0.72881355 0 0 1 4.8809918,10.982455 Z m 5.8300782,0 A 0.72881355,0.72881355 0 0 1 11.441539,11.710971 0.72881355,0.72881355 0 0 1 10.71107,12.44144 0.72881355,0.72881355 0 0 1 9.9825543,11.710971 0.72881355,0.72881355 0 0 1 10.71107,10.982455 Z M 7.7970074,11.710971 A 0.72881355,0.72881355 0 0 1 8.525523,12.44144 0.72881355,0.72881355 0 0 1 7.7970074,13.169955 0.72881355,0.72881355 0 0 1 7.0684918,12.44144 0.72881355,0.72881355 0 0 1 7.7970074,11.710971 Z" - id="rect822" - inkscape:connector-curvature="0" /> - <g - inkscape:groupmode="layer" - id="layer1" - inkscape:label="Layer 1" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.5587261.60940813c-.4226244 0-.7617187.3410473-.7617187.76367177v.5078126c0 .1028478.020058.199689.056641.2890624h-1.1933597c-.4226245 0-.7617188.3390944-.7617188.7617188v.921875c-.040428-.00657-.0767989-.0234375-.1191406-.0234375h-.5078125c-.42262448 0-.76367188.3410475-.76367188.7636719v.3730468c0 .4226245.3410474.7617188.76367188.7617188h.5078125c.042396 0 .078663-.016851.1191406-.023437v4.4531248c-.040428-.0066-.076799-.02344-.1191406-.02344h-.5078125c-.42262448 0-.76367188.341047-.76367188.763672v.373047c0 .422625.3410474.761718.76367188.761718h.5078125c.042396 0 .078663-.01685.1191406-.02344v1.125c0 .422624.3390944.763672.7617188.763672h1.1367187v.457031c0 .422624.3390943.763672.7617187.763672h.3730469c.4226244 0 .7636719-.341048.7636719-.763672v-.457031h4.4062501v.457031c0 .422624.339094.763672.761719.763672h.373047c.422624 0 .763671-.341048.763671-.763672v-.457031h1.269532c.422625 0 .763672-.341048.763672-.763672v-1.111328c.01774.0012.03272.0098.05078.0098h.507812c.422624 0 .763672-.339093.763672-.761718v-.373047c0-.422624-.341048-.763672-.763672-.763672h-.507812c-.01803 0-.03307.0085-.05078.0098v-4.4258454c.01774.00122.03272.00977.05078.00977h.507812c.422624 0 .763672-.3390943.763672-.7617188v-.3730512c0-.4226244-.341048-.7636719-.763672-.7636719h-.507812c-.01803 0-.03307.00855-.05078.00977v-.9082075c0-.4226244-.341047-.7617187-.763672-.7617188h-1.328125c.03658-.089375.05859-.1862118.05859-.2890624v-.5078126c0-.42262437-.341047-.76367177-.763671-.76367177h-.373047c-.422625 0-.761719.3410474-.761719.76367177v.5078126c0 .1028478.02006.1996891.05664.2890624h-4.5214809c.036585-.0893749.0585938-.1862118.0585938-.2890624v-.5078126c0-.42262437-.3410475-.76367177-.7636719-.76367177zm3.2382813 2.35742177a3.279661 3.6440678 0 0 1 3.2128906 2.9394532 2.1864407 2.1864407 0 0 1 1.888672 2.1621094 2.1864407 2.1864407 0 0 1 -2.1875 2.1855475h-5.8300782a2.1864407 2.1864407 0 0 1 -2.1855469-2.1855475 2.1864407 2.1864407 0 0 1 1.8847656-2.1640626 3.279661 3.6440678 0 0 1 3.2167969-2.9375zm-2.9160156 8.0156251a.72881355.72881355 0 0 1 .7285156.728516.72881355.72881355 0 0 1 -.7285156.730469.72881355.72881355 0 0 1 -.7285157-.730469.72881355.72881355 0 0 1 .7285157-.728516zm5.8300782 0a.72881355.72881355 0 0 1 .730469.728516.72881355.72881355 0 0 1 -.730469.730469.72881355.72881355 0 0 1 -.7285157-.730469.72881355.72881355 0 0 1 .7285157-.728516zm-2.9140626.728516a.72881355.72881355 0 0 1 .7285156.730469.72881355.72881355 0 0 1 -.7285156.728515.72881355.72881355 0 0 1 -.7285156-.728515.72881355.72881355 0 0 1 .7285156-.730469z" fill="#a3b6f3" fill-opacity=".992157"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_camera.svg b/editor/icons/icon_camera.svg index aaacdec36c..af1cb8a2e9 100644 --- a/editor/icons/icon_camera.svg +++ b/editor/icons/icon_camera.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m9 1038.4a3 3 0 0 0 -2.9883 2.7774 3 3 0 0 0 -2.0117 -0.7774 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8243v2.1757c0 0.554 0.44599 1 1 1h6c0.55401 0 1-0.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1 -2.2305 3 3 0 0 0 -3 -3z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1038.4a3 3 0 0 0 -2.9883 2.7774 3 3 0 0 0 -2.0117-.7774 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8243v2.1757c0 .554.44599 1 1 1h6c.55401 0 1-.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1-2.2305 3 3 0 0 0 -3-3z" fill="#fc9c9c" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_camera_2d.svg b/editor/icons/icon_camera_2d.svg index 089f864511..9a91b3017b 100644 --- a/editor/icons/icon_camera_2d.svg +++ b/editor/icons/icon_camera_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m9 1038.4a3 3 0 0 0 -2.9883 2.7774 3 3 0 0 0 -2.0117 -0.7774 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8243v2.1757c0 0.554 0.44599 1 1 1h6c0.55401 0 1-0.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1 -2.2305 3 3 0 0 0 -3 -3z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1038.4a3 3 0 0 0 -2.9883 2.7774 3 3 0 0 0 -2.0117-.7774 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8243v2.1757c0 .554.44599 1 1 1h6c.55401 0 1-.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1-2.2305 3 3 0 0 0 -3-3z" fill="#a5b7f3" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_camera_texture.svg b/editor/icons/icon_camera_texture.svg new file mode 100644 index 0000000000..e61b5902f0 --- /dev/null +++ b/editor/icons/icon_camera_texture.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55228 0-1 .44772-1 1v12c0 .55228.44772 1 1 1h12c.55228 0 1-.44772 1-1v-12c0-.55228-.44772-1-1-1zm1 2h10v8h-10zm5.8184 1.0039c-.85534.0009758-1.5654.66069-1.6289 1.5137-.30036-.27229-.69029-.4234-1.0957-.42383-.90315 0-1.6367.73162-1.6367 1.6348.0009732.69217.43922 1.3103 1.0918 1.541v1.1855c0 .30198.24293.54492.54492.54492h3.2695c.30199 0 .54492-.24294.54492-.54492v-.54492l1.6367 1.0898v-3.2715l-1.6367 1.0918v-.96484c.34606-.30952.54406-.75251.54492-1.2168 0-.90315-.73162-1.6348-1.6348-1.6348z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_item.svg b/editor/icons/icon_canvas_item.svg index 72503faea3..eefe501ca8 100644 --- a/editor/icons/icon_canvas_item.svg +++ b/editor/icons/icon_canvas_item.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2.9208 1046.4c-0.26373 0.3-0.4204 0.7296-0.4204 1.2383 0 1.6277-3.1381-0.1781-0.33757 2.6703 0.88382 0.899 2.6544 0.6701 3.5382-0.2288 0.88384-0.899 0.88382-2.3565 0-3.2554-1.1002-1.1191-2.2001-1.0845-2.7803-0.4244zm2.3802-1.6103 2.4005 2.4416 6.8014-6.9177c0.66286-0.6742 0.66286-1.7673 0-2.4415-0.66288-0.6741-1.7376-0.6741-2.4005 0z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.9208 1046.4c-.26373.3-.4204.7296-.4204 1.2383 0 1.6277-3.1381-.1781-.33757 2.6703.88382.899 2.6544.6701 3.5382-.2288.88384-.899.88382-2.3565 0-3.2554-1.1002-1.1191-2.2001-1.0845-2.7803-.4244zm2.3802-1.6103 2.4005 2.4416 6.8014-6.9177c.66286-.6742.66286-1.7673 0-2.4415-.66288-.6741-1.7376-.6741-2.4005 0z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_item_material.svg b/editor/icons/icon_canvas_item_material.svg index d043e6a5a1..7df06ed686 100644 --- a/editor/icons/icon_canvas_item_material.svg +++ b/editor/icons/icon_canvas_item_material.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.1035 3a7 7 0 0 0 -1.418 2h12.631a7 7 0 0 0 -1.4277 -2h-9.7852z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1.6855 5a7 7 0 0 0 -0.60547 2h13.842a7 7 0 0 0 -0.60547 -2h-12.631z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1.0801 7a7 7 0 0 0 -0.080078 1 7 7 0 0 0 0.078125 1h13.842a7 7 0 0 0 0.080078 -1 7 7 0 0 0 -0.078125 -1h-13.842z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1.0781 9a7 7 0 0 0 0.60547 2h12.631a7 7 0 0 0 0.60547 -2h-13.842z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m3.1113 13a7 7 0 0 0 4.8887 2 7 7 0 0 0 4.8965 -2h-9.7852z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1.6836 11a7 7 0 0 0 1.4277 2h9.7852a7 7 0 0 0 1.418 -2h-12.631z" fill="#9f70ff"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -4.8965 2h9.7852a7 7 0 0 0 -4.8887 -2z" fill="#ff7070"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.1035 3a7 7 0 0 0 -1.418 2h12.631a7 7 0 0 0 -1.4277-2h-9.7852z" fill="#ffeb70"/><path d="m1.6855 5a7 7 0 0 0 -.60547 2h13.842a7 7 0 0 0 -.60547-2h-12.631z" fill="#9dff70"/><path d="m1.0801 7a7 7 0 0 0 -.080078 1 7 7 0 0 0 .078125 1h13.842a7 7 0 0 0 .080078-1 7 7 0 0 0 -.078125-1z" fill="#70ffb9"/><path d="m1.0781 9a7 7 0 0 0 .60547 2h12.631a7 7 0 0 0 .60547-2h-13.842z" fill="#70deff"/><path d="m3.1113 13a7 7 0 0 0 4.8887 2 7 7 0 0 0 4.8965-2z" fill="#ff70ac"/><path d="m1.6836 11a7 7 0 0 0 1.4277 2h9.7852a7 7 0 0 0 1.418-2h-12.631z" fill="#9f70ff"/><path d="m8 1a7 7 0 0 0 -4.8965 2h9.7852a7 7 0 0 0 -4.8887-2z" fill="#ff7070"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_item_shader.svg b/editor/icons/icon_canvas_item_shader.svg index e92dc7f555..834fe61472 100644 --- a/editor/icons/icon_canvas_item_shader.svg +++ b/editor/icons/icon_canvas_item_shader.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13.303 1c-0.4344 0-0.86973 0.16881-1.2012 0.50586l-1.4688 1.4941h4.3418c0.082839-0.52789-0.072596-1.0872-0.47266-1.4941-0.33144-0.33705-0.76482-0.50586-1.1992-0.50586z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m10.633 3l-1.9668 2h4.8008l1.0352-1.0527c0.2628-0.2673 0.41824-0.60049 0.47266-0.94727h-4.3418z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m8.666 5l-1.9648 2h4.7988l1.9668-2h-4.8008z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m6.7012 7l-1.4004 1.4238 0.56641 0.57617h3.668l1.9648-2h-4.7988z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m5.8672 9l1.834 1.8652 1.834-1.8652h-3.668zm-1.752 0.57812c-0.48501-0.048725-0.90521 0.12503-1.1953 0.45508-0.21472 0.24426-0.35243 0.57797-0.39844 0.9668h3.5625c-0.10223-0.1935-0.22224-0.37965-0.38281-0.54297-0.55011-0.55955-1.1009-0.83018-1.5859-0.87891z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1.3242 13c0.18414 0.24071 0.43707 0.53374 0.83789 0.94141 0.88382 0.899 2.6552 0.67038 3.5391-0.22852 0.20747-0.21103 0.36064-0.45476 0.4707-0.71289h-4.8477z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m2.5215 11c-0.0105 0.088737-0.021484 0.17696-0.021484 0.27148 0 1.3947-2.2782 0.28739-1.1758 1.7285h4.8477c0.27363-0.64173 0.24047-1.3785-0.087891-2h-3.5625z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.303 1c-.4344 0-.86973.16881-1.2012.50586l-1.4688 1.4941h4.3418c.082839-.52789-.072596-1.0872-.47266-1.4941-.33144-.33705-.76482-.50586-1.1992-.50586z" fill="#ff7070"/><path d="m10.633 3-1.9668 2h4.8008l1.0352-1.0527c.2628-.2673.41824-.60049.47266-.94727h-4.3418z" fill="#ffeb70"/><path d="m8.666 5-1.9648 2h4.7988l1.9668-2z" fill="#9dff70"/><path d="m6.7012 7-1.4004 1.4238.56641.57617h3.668l1.9648-2h-4.7988z" fill="#70ffb9"/><path d="m5.8672 9 1.834 1.8652 1.834-1.8652zm-1.752.57812c-.48501-.048725-.90521.12503-1.1953.45508-.21472.24426-.35243.57797-.39844.9668h3.5625c-.10223-.1935-.22224-.37965-.38281-.54297-.55011-.55955-1.1009-.83018-1.5859-.87891z" fill="#70deff"/><path d="m1.3242 13c.18414.24071.43707.53374.83789.94141.88382.899 2.6552.67038 3.5391-.22852.20747-.21103.36064-.45476.4707-.71289h-4.8477z" fill="#ff70ac"/><path d="m2.5215 11c-.0105.088737-.021484.17696-.021484.27148 0 1.3947-2.2782.28739-1.1758 1.7285h4.8477c.27363-.64173.24047-1.3785-.087891-2h-3.5625z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_item_shader_graph.svg b/editor/icons/icon_canvas_item_shader_graph.svg index 4079dd9f76..3e83751698 100644 --- a/editor/icons/icon_canvas_item_shader_graph.svg +++ b/editor/icons/icon_canvas_item_shader_graph.svg @@ -1,19 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<defs> -<clipPath id="a"> -<path d="m8.0625 1025.9a3.375 3 0 0 0 -3.375 3 3.375 3 0 0 0 1.6875 2.5957v9.8115a3.375 3 0 0 0 -1.6875 2.5928 3.375 3 0 0 0 3.375 3 3.375 3 0 0 0 3.375 -3 3.375 3 0 0 0 -1.6875 -2.5957v-8.7832l11.931 10.605a3.375 3 0 0 0 -0.11865 0.7735 3.375 3 0 0 0 3.375 3 3.375 3 0 0 0 3.375 -3 3.375 3 0 0 0 -3.375 -3 3.375 3 0 0 0 -0.87341 0.1025l-11.928-10.602h9.8844a3.375 3 0 0 0 2.9169 1.5 3.375 3 0 0 0 3.375 -3 3.375 3 0 0 0 -3.375 -3 3.375 3 0 0 0 -2.9202 1.5h-11.038a3.375 3 0 0 0 -2.9169 -1.5z" fill="#fff"/> -</clipPath> -</defs> -<g transform="translate(0 -1036.4)"> -<g transform="matrix(.59259 0 0 .66667 -1.7778 353.45)" clip-path="url(#a)"> -<rect x="3" y="1025.9" width="27" height="3" fill="#ff7070"/> -<rect x="3" y="1028.9" width="27" height="3" fill="#ffeb70"/> -<rect x="3" y="1031.9" width="27" height="3" fill="#9dff70"/> -<rect x="3" y="1034.9" width="27" height="3" fill="#70ffb9"/> -<rect x="3" y="1037.9" width="27" height="3" fill="#70deff"/> -<rect x="3" y="1043.9" width="27" height="3" fill="#ff70ac"/> -<rect x="3" y="1040.9" width="27" height="3" fill="#9f70ff"/> -</g> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><clipPath id="a"><path d="m8.0625 1025.9a3.375 3 0 0 0 -3.375 3 3.375 3 0 0 0 1.6875 2.5957v9.8115a3.375 3 0 0 0 -1.6875 2.5928 3.375 3 0 0 0 3.375 3 3.375 3 0 0 0 3.375-3 3.375 3 0 0 0 -1.6875-2.5957v-8.7832l11.931 10.605a3.375 3 0 0 0 -.11865.7735 3.375 3 0 0 0 3.375 3 3.375 3 0 0 0 3.375-3 3.375 3 0 0 0 -3.375-3 3.375 3 0 0 0 -.87341.1025l-11.928-10.602h9.8844a3.375 3 0 0 0 2.9169 1.5 3.375 3 0 0 0 3.375-3 3.375 3 0 0 0 -3.375-3 3.375 3 0 0 0 -2.9202 1.5h-11.038a3.375 3 0 0 0 -2.9169-1.5z"/></clipPath><g transform="translate(0 -1036.4)"><g clip-path="url(#a)" transform="matrix(.59259 0 0 .66667 -1.7778 353.45)"><path d="m3 1025.9h27v3h-27z" fill="#ff7070"/><path d="m3 1028.9h27v3h-27z" fill="#ffeb70"/><path d="m3 1031.9h27v3h-27z" fill="#9dff70"/><path d="m3 1034.9h27v3h-27z" fill="#70ffb9"/><path d="m3 1037.9h27v3h-27z" fill="#70deff"/><path d="m3 1043.9h27v3h-27z" fill="#ff70ac"/><path d="m3 1040.9h27v3h-27z" fill="#9f70ff"/></g><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_layer.svg b/editor/icons/icon_canvas_layer.svg index 9a2ab5de9f..a3fcc903d7 100644 --- a/editor/icons/icon_canvas_layer.svg +++ b/editor/icons/icon_canvas_layer.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2v6h1v-6a1 1 0 0 1 1 -1h6v-1h-6zm10.303 0c-0.4344 0-0.86973 0.16881-1.2012 0.50586l-6.8008 6.918 2.4004 2.4414 6.8008-6.918c0.66286-0.6742 0.66286-1.7672 0-2.4414-0.33144-0.33705-0.76482-0.50586-1.1992-0.50586zm0.69727 6v6a1 1 0 0 1 -1 1h-6v1h6a2 2 0 0 0 2 -2v-6h-1zm-9.8848 2.5781c-0.48501-0.048725-0.90521 0.12503-1.1953 0.45508-0.26373 0.3-0.41992 0.72958-0.41992 1.2383 0 1.6277-3.1385-0.17848-0.33789 2.6699 0.88382 0.899 2.6552 0.67038 3.5391-0.22852 0.88384-0.899 0.88382-2.357 0-3.2559-0.55011-0.55955-1.1009-0.83018-1.5859-0.87891z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2v6h1v-6a1 1 0 0 1 1-1h6v-1zm10.303 0c-.4344 0-.86973.16881-1.2012.50586l-6.8008 6.918 2.4004 2.4414 6.8008-6.918c.66286-.6742.66286-1.7672 0-2.4414-.33144-.33705-.76482-.50586-1.1992-.50586zm.69727 6v6a1 1 0 0 1 -1 1h-6v1h6a2 2 0 0 0 2-2v-6zm-9.8848 2.5781c-.48501-.048725-.90521.12503-1.1953.45508-.26373.3-.41992.72958-.41992 1.2383 0 1.6277-3.1385-.17848-.33789 2.6699.88382.899 2.6552.67038 3.5391-.22852.88384-.899.88382-2.357 0-3.2559-.55011-.55955-1.1009-.83018-1.5859-.87891z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_canvas_modulate.svg b/editor/icons/icon_canvas_modulate.svg index 63c230c2b2..a7b788d638 100644 --- a/editor/icons/icon_canvas_modulate.svg +++ b/editor/icons/icon_canvas_modulate.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m1 1037.4v14h14v-14zm2 2h10v10h-10z" fill="#a5b7f3"/> -<path d="m12 1048.4h-5l5-5z" fill="#70bfff" fill-rule="evenodd"/> -<path d="m4 1040.4h5l-5 5z" fill="#ff7070" fill-rule="evenodd"/> -<path d="m4 1048.4v-3l5-5h3v3l-5 5z" fill="#7aff70" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1 1037.4v14h14v-14zm2 2h10v10h-10z" fill="#a5b7f3"/><g fill-rule="evenodd"><path d="m12 1048.4h-5l5-5z" fill="#70bfff"/><path d="m4 1040.4h5l-5 5z" fill="#ff7070"/><path d="m4 1048.4v-3l5-5h3v3l-5 5z" fill="#7aff70"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_capsule_mesh.svg b/editor/icons/icon_capsule_mesh.svg index c375e6adfb..1c9470105f 100644 --- a/editor/icons/icon_capsule_mesh.svg +++ b/editor/icons/icon_capsule_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922 2.7527 0 5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903zm-1.0059 2.1264v4.8576c-0.66556-0.1047-1.2973-0.372-1.9941-0.6618v-1.3222c0-1.3474 0.79838-2.4648 1.9941-2.8736zm2.0118 0c1.1957 0.4088 1.9941 1.5262 1.9941 2.8736v1.3451c-0.68406 0.3054-1.3142 0.5732-1.9941 0.6663zm-4.0059 6.334c0.67836 0.2231 1.3126 0.447 1.9941 0.5264v2.8848c-1.1957-0.4092-1.9941-1.5242-1.9941-2.8716zm6 0.03v0.5094c0 1.3474-0.79838 2.4619-1.9941 2.8711v-2.8711c0.68606-0.068 1.3207-0.2828 1.9941-0.5094z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922s5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903zm-1.0059 2.1264v4.8576c-.66556-.1047-1.2973-.372-1.9941-.6618v-1.3222c0-1.3474.79838-2.4648 1.9941-2.8736zm2.0118 0c1.1957.4088 1.9941 1.5262 1.9941 2.8736v1.3451c-.68406.3054-1.3142.5732-1.9941.6663zm-4.0059 6.334c.67836.2231 1.3126.447 1.9941.5264v2.8848c-1.1957-.4092-1.9941-1.5242-1.9941-2.8716zm6 .03v.5094c0 1.3474-.79838 2.4619-1.9941 2.8711v-2.8711c.68606-.068 1.3207-.2828 1.9941-.5094z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_capsule_shape.svg b/editor/icons/icon_capsule_shape.svg index 2940816d60..ba035ca196 100644 --- a/editor/icons/icon_capsule_shape.svg +++ b/editor/icons/icon_capsule_shape.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1037.4c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922 2.7527 0 5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#68b6ff" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<circle cx="6.5" cy="1040.9" r="1.5" fill="#a2d2ff" stroke-width="0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m8 1037.4c-2.7527 0-5 2.2419-5 4.9903v4.0175c0 2.7484 2.2473 4.9922 5 4.9922s5-2.2438 5-4.9922v-4.0175c0-2.7484-2.2473-4.9903-5-4.9903z" fill="#68b6ff"/><circle cx="6.5" cy="1040.9" fill="#a2d2ff" r="1.5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_capsule_shape_2d.svg b/editor/icons/icon_capsule_shape_2d.svg index 3549a289e0..81de995cb4 100644 --- a/editor/icons/icon_capsule_shape_2d.svg +++ b/editor/icons/icon_capsule_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-2.77 0-5 2.23-5 5v4c0 2.77 2.23 5 5 5s5-2.23 5-5v-4c0-2.77-2.23-5-5-5zm0 2c1.662 0 3 1.338 3 3v4c0 1.662-1.338 3-3 3s-3-1.338-3-3v-4c0-1.662 1.338-3 3-3z" fill="#68b6ff" stroke-width="0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-2.77 0-5 2.23-5 5v4c0 2.77 2.23 5 5 5s5-2.23 5-5v-4c0-2.77-2.23-5-5-5zm0 2c1.662 0 3 1.338 3 3v4c0 1.662-1.338 3-3 3s-3-1.338-3-3v-4c0-1.662 1.338-3 3-3z" fill="#68b6ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_center_container.svg b/editor/icons/icon_center_container.svg index fc0abc5c28..5d854a3cc3 100644 --- a/editor/icons/icon_center_container.svg +++ b/editor/icons/icon_center_container.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm3 1l2 2 2-2h-4zm-2 2v4l2-2-2-2zm8 0l-2 2 2 2v-4zm-4 4l-2 2h4l-2-2z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm3 1 2 2 2-2zm-2 2v4l2-2zm8 0-2 2 2 2zm-4 4-2 2h4z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_check_box.svg b/editor/icons/icon_check_box.svg index 1bbebe3fb5..6cb1f2aacd 100644 --- a/editor/icons/icon_check_box.svg +++ b/editor/icons/icon_check_box.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2c-1.1046 0-2 0.89543-2 2v9c0 1.1046 0.89543 2 2 2h9c1.1046 0 2-0.89543 2-2v-4.9277l-2 2v2.9277h-9v-9h6.5859l2-2zm9.3633 2.0508-4.9492 4.9492-1.4141-1.4141-1.4141 1.4141 2.8281 2.8281 6.3633-6.3633z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2c-1.1046 0-2 .89543-2 2v9c0 1.1046.89543 2 2 2h9c1.1046 0 2-.89543 2-2v-4.9277l-2 2v2.9277h-9v-9h6.5859l2-2zm9.3633 2.0508-4.9492 4.9492-1.4141-1.4141-1.4141 1.4141 2.8281 2.8281 6.3633-6.3633z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_check_button.svg b/editor/icons/icon_check_button.svg index c6e0aa99c9..f689c5fe47 100644 --- a/editor/icons/icon_check_button.svg +++ b/editor/icons/icon_check_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4h6a4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4h-6zm0 2h2.541a4 4 0 0 0 -0.54102 2 4 4 0 0 0 0.54102 2h-2.541a2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 4a4 4 0 0 0 -4 4 4 4 0 0 0 4 4h6a4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 2h2.541a4 4 0 0 0 -.54102 2 4 4 0 0 0 .54102 2h-2.541a2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_checkerboard.svg b/editor/icons/icon_checkerboard.svg index 078c54a761..7923291017 100644 --- a/editor/icons/icon_checkerboard.svg +++ b/editor/icons/icon_checkerboard.svg @@ -1,6 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)" fill="#fff" stroke-linecap="round" stroke-linejoin="round"> -<rect y="988.36" width="64" height="64" fill-opacity=".19608" stroke-width="2"/> -<path transform="translate(0 988.36)" d="m0 0v16h16v-16h-16zm16 16v16h16v-16h-16zm16 0h16v-16h-16v16zm16 0v16h16v-16h-16zm0 16h-16v16h16v-16zm0 16v16h16v-16h-16zm-16 0h-16v16h16v-16zm-16 0v-16h-16v16h16z" fill-opacity=".39216" stroke-width="8"/> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-linecap="round" stroke-linejoin="round" transform="translate(0 -988.36)"><path d="m0 988.36h64v64h-64z" fill-opacity=".19608" stroke-width="2"/><path d="m0 0v16h16v-16zm16 16v16h16v-16zm16 0h16v-16h-16zm16 0v16h16v-16zm0 16h-16v16h16zm0 16v16h16v-16zm-16 0h-16v16h16zm-16 0v-16h-16v16z" fill-opacity=".39216" stroke-width="8" transform="translate(0 988.36)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_circle_shape_2d.svg b/editor/icons/icon_circle_shape_2d.svg index bfe5aec81a..e41fc8807c 100644 --- a/editor/icons/icon_circle_shape_2d.svg +++ b/editor/icons/icon_circle_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1038.4a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1038.4a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_class_list.svg b/editor/icons/icon_class_list.svg index 87a20743c7..ae2494724d 100644 --- a/editor/icons/icon_class_list.svg +++ b/editor/icons/icon_class_list.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1h-5v1h2v10h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-4h2v1h6v-3h-6z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1v1h-5v1h2v10h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-4h2v1h6v-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_clear.svg b/editor/icons/icon_clear.svg index 533054e37b..91343ca6af 100644 --- a/editor/icons/icon_clear.svg +++ b/editor/icons/icon_clear.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a1 1 0 0 0 -1 1v5h-2c-1.108 0-2 0.892-2 2v1h10v-1c0-1.108-0.892-2-2-2h-2v-5a1 1 0 0 0 -1 -1zm-5 10v4l10-1v-3h-10z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a1 1 0 0 0 -1 1v5h-2c-1.108 0-2 .892-2 2v1h10v-1c0-1.108-.892-2-2-2h-2v-5a1 1 0 0 0 -1-1zm-5 10v4l10-1v-3z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_clipped_camera.svg b/editor/icons/icon_clipped_camera.svg new file mode 100644 index 0000000000..8c80c04e27 --- /dev/null +++ b/editor/icons/icon_clipped_camera.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6.5 12v4h3v-1h-2v-3zm-1 0h-2c-.5 0-1 .5-1 1v2c-.01829.53653.5 1 1 1h2v-1h-2v-2h2zm4-12c-1.5691.0017903-2.8718 1.2125-2.9883 2.7773-.55103-.49952-1.268-.77655-2.0117-.77734-1.6569 0-3 1.3431-3 3 .00179 1.2698.80282 2.4009 2 2.8242v2.1758c0 .554.44599 1 1 1h6c.55401 0 1-.446 1-1v-1l3 2v-6l-3 2v-1.7695c.63486-.56783.99842-1.3788 1-2.2305 0-1.6569-1.3431-3-3-3zm1 12v4h1v-1h1c.55228 0 1-.44772 1-1v-1c0-.55228-.44775-.99374-1-1h-1zm1 1h1v1h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_close.svg b/editor/icons/icon_close.svg index f797070e16..4147c7bcdd 100644 --- a/editor/icons/icon_close.svg +++ b/editor/icons/icon_close.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.7578 2.3438l-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422-4.2422-4.2422z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.7578 2.3438-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_collapse.svg b/editor/icons/icon_collapse.svg index 8d50772b9b..62b5e55d81 100644 --- a/editor/icons/icon_collapse.svg +++ b/editor/icons/icon_collapse.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m3 1044.4 5 4 5-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1044.4 5 4 5-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_collision_polygon.svg b/editor/icons/icon_collision_polygon.svg index 1c5e0be781..5e849ae4e3 100644 --- a/editor/icons/icon_collision_polygon.svg +++ b/editor/icons/icon_collision_polygon.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#fc9c9c" stroke-linejoin="round" stroke-opacity=".99608" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#fc9c9c" stroke-linejoin="round" stroke-opacity=".99608" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_collision_polygon_2d.svg b/editor/icons/icon_collision_polygon_2d.svg index 9d90a66c6f..54148f3fd4 100644 --- a/editor/icons/icon_collision_polygon_2d.svg +++ b/editor/icons/icon_collision_polygon_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_collision_shape.svg b/editor/icons/icon_collision_shape.svg index 7975b288f5..8f14996a97 100644 --- a/editor/icons/icon_collision_shape.svg +++ b/editor/icons/icon_collision_shape.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 1.1802e-5)" stroke="#fc9c9c" stroke-opacity=".99608"> -<path d="m8 1050.4-6-3v-6l6-3 6 3v6z" fill="none" stroke="#fc9c9c" stroke-linejoin="round" stroke-opacity=".99608" stroke-width="2"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1050.4-6-3v-6l6-3 6 3v6z" fill="none" stroke="#fc9c9c" stroke-linejoin="round" stroke-opacity=".99608" stroke-width="2" transform="translate(0 -1036.399988)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_collision_shape_2d.svg b/editor/icons/icon_collision_shape_2d.svg index b5fd8c7105..8210bf917f 100644 --- a/editor/icons/icon_collision_shape_2d.svg +++ b/editor/icons/icon_collision_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-12h12z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-12h12z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color.svg b/editor/icons/icon_color.svg index 52c7890e60..de0540763e 100644 --- a/editor/icons/icon_color.svg +++ b/editor/icons/icon_color.svg @@ -1,7 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g> -<path d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2z" fill="#ff8484"/> -<path d="m14 4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2z" fill="#84c2ff"/> -<path d="m6 2v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-5z" fill="#84ffb1"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2z" fill="#ff8484"/><path d="m14 4a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2z" fill="#84c2ff"/><path d="m6 2v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-5z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_pick.svg b/editor/icons/icon_color_pick.svg index 5c21eeba8b..d73225bd60 100644 --- a/editor/icons/icon_color_pick.svg +++ b/editor/icons/icon_color_pick.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.108 0-2 .892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1-1.7305v-5h1v-2h-1v-2c0-1.108-.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_picker.svg b/editor/icons/icon_color_picker.svg index 55c55fe205..3d03615708 100644 --- a/editor/icons/icon_color_picker.svg +++ b/editor/icons/icon_color_picker.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.108 0-2 .892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1-1.7305v-5h1v-2h-1v-2c0-1.108-.892-2-2-2zm-1 6h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_picker_button.svg b/editor/icons/icon_color_picker_button.svg index d8de02b298..b9fa86db6a 100644 --- a/editor/icons/icon_color_picker_button.svg +++ b/editor/icons/icon_color_picker_button.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m13 1c-1.108 0-2 0.892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1 -1.7305v-5h1v-2h-1v-2c0-1.108-0.892-2-2-2zm-9 1v3.1328l-1.4453-0.96484-1.1094 1.6641 3 2c0.3359 0.2239 0.77347 0.2239 1.1094 0l3-2-1.1094-1.6641-1.4453 0.96484v-3.1328h-2zm8 5h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-5zm-8.5 3c-0.831 0-1.5 0.669-1.5 1.5v0.5 1h-1v2h8v-2h-1v-1-0.5c0-0.831-0.669-1.5-1.5-1.5h-3z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 1c-1.108 0-2 .892-2 2v2h-1v2h1v5a2 2 0 0 0 1 1.7285v1.2715h2v-1.2695a2 2 0 0 0 1-1.7305v-5h1v-2h-1v-2c0-1.108-.892-2-2-2zm-9 1v3.1328l-1.4453-.96484-1.1094 1.6641 3 2c.3359.2239.77347.2239 1.1094 0l3-2-1.1094-1.6641-1.4453.96484v-3.1328zm8 5h2v5a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1zm-8.5 3c-.831 0-1.5.669-1.5 1.5v.5 1h-1v2h8v-2h-1v-1-.5c0-.831-.669-1.5-1.5-1.5z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_ramp.svg b/editor/icons/icon_color_ramp.svg index d05355d8c7..e0f0a67483 100644 --- a/editor/icons/icon_color_ramp.svg +++ b/editor/icons/icon_color_ramp.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="4" x2="30" y1="14" y2="14" gradientTransform="matrix(.51852 0 0 .7 -.55556 1034.6)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#afff68" offset="0"/> -<stop stop-color="#ff6b6b" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path d="m1 1051.4h14v-14z" fill="url(#a)"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(.51852 0 0 .7 -.55556 1034.6)" gradientUnits="userSpaceOnUse" x1="4" x2="30" y1="14" y2="14"><stop offset="0" stop-color="#afff68"/><stop offset="1" stop-color="#ff6b6b"/></linearGradient><path d="m1 1051.4h14v-14z" fill="url(#a)" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_rect.svg b/editor/icons/icon_color_rect.svg index c2d4cf344d..c2054de9d3 100644 --- a/editor/icons/icon_color_rect.svg +++ b/editor/icons/icon_color_rect.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h14v-14zm2 2h10v10h-10z" fill="#a5efac"/> -<path d="m12 1048.4h-4.8l4.8-4.8z" fill="#70bfff" fill-rule="evenodd"/> -<path d="m4 1040.4h4.8l-4.8 4.8z" fill="#ff7070" fill-rule="evenodd"/> -<path d="m4 1048.4v-3.2l4.8-4.8h3.2v3.2l-4.8 4.8z" fill="#7aff70" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1 1v14h14v-14zm2 2h10v10h-10z" fill="#a5efac" transform="translate(0 1036.4)"/><g fill-rule="evenodd"><path d="m12 1048.4h-4.8l4.8-4.8z" fill="#70bfff"/><path d="m4 1040.4h4.8l-4.8 4.8z" fill="#ff7070"/><path d="m4 1048.4v-3.2l4.8-4.8h3.2v3.2l-4.8 4.8z" fill="#7aff70"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_color_track_vu.svg b/editor/icons/icon_color_track_vu.svg index cad76d0234..5760f81070 100644 --- a/editor/icons/icon_color_track_vu.svg +++ b/editor/icons/icon_color_track_vu.svg @@ -1,115 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="24" - version="1.1" - viewBox="0 0 16 24" - id="svg6" - sodipodi:docname="icon_color_track_vu.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10"> - <linearGradient - id="linearGradient4583" - inkscape:collect="always"> - <stop - id="stop4579" - offset="0" - style="stop-color:#f70000;stop-opacity:1" /> - <stop - id="stop4581" - offset="1" - style="stop-color:#eec315;stop-opacity:1" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - id="linearGradient4549"> - <stop - style="stop-color:#288027;stop-opacity:1" - offset="0" - id="stop4545" /> - <stop - style="stop-color:#dbee15;stop-opacity:1" - offset="1" - id="stop4547" /> - </linearGradient> - <linearGradient - inkscape:collect="always" - xlink:href="#linearGradient4549" - id="linearGradient4551" - x1="7.7288136" - y1="16.474577" - x2="7.7288136" - y2="3.8644071" - gradientUnits="userSpaceOnUse" - gradientTransform="matrix(1.0931873,0,0,1.4762899,-0.98021429,0.08553021)" /> - <linearGradient - gradientTransform="matrix(1.1036585,0,0,0.47778193,-16.507235,-7.9018165)" - inkscape:collect="always" - xlink:href="#linearGradient4583" - id="linearGradient4551-7" - x1="7.7288136" - y1="16.474577" - x2="7.7288136" - y2="3.8644071" - gradientUnits="userSpaceOnUse" /> - </defs> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1170" - inkscape:window-height="712" - id="namedview8" - showgrid="false" - showguides="false" - inkscape:zoom="14.75" - inkscape:cx="5.3261277" - inkscape:cy="13.681053" - inkscape:window-x="397" - inkscape:window-y="233" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <rect - style="fill:url(#linearGradient4551);fill-opacity:1;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;paint-order:fill markers stroke" - id="rect822" - width="18.232145" - height="18.416088" - x="-1.3507863" - y="5.9906898" - ry="0.84580106" /> - <rect - style="fill:url(#linearGradient4551-7);fill-opacity:1;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;paint-order:fill markers stroke" - id="rect822-5" - width="18.406782" - height="5.9601259" - x="-16.881357" - y="-5.9906898" - ry="0.27373245" - transform="scale(-1)" /> -</svg> +<svg height="24" viewBox="0 0 16 24" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.0931873 0 0 1.4762899 -.980214 .08553)" gradientUnits="userSpaceOnUse" x1="7.728814" x2="7.728814" y1="16.474577" y2="3.864407"><stop offset="0" stop-color="#288027"/><stop offset="1" stop-color="#dbee15"/></linearGradient><linearGradient id="b" gradientTransform="matrix(1.1036585 0 0 .47778193 -16.507235 -7.901817)" gradientUnits="userSpaceOnUse" x1="7.728814" x2="7.728814" y1="16.474577" y2="3.864407"><stop offset="0" stop-color="#f70000"/><stop offset="1" stop-color="#eec315"/></linearGradient><rect fill="url(#a)" height="18.416088" ry=".845801" width="18.232145" x="-1.350786" y="5.99069"/><rect fill="url(#b)" height="5.960126" ry=".273732" transform="scale(-1)" width="18.406782" x="-16.881357" y="-5.99069"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_concave_polygon_shape.svg b/editor/icons/icon_concave_polygon_shape.svg index 0df696f8b7..001ab82826 100644 --- a/editor/icons/icon_concave_polygon_shape.svg +++ b/editor/icons/icon_concave_polygon_shape.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-7 3v8l7 3 7-3v-8l-7-3z" fill="#2998ff"/> -<path d="m8 1037.4-7 3v8l7 3 7-3v-8l-7-3z" fill="#2998ff"/> -<path d="m3 1041.4v6l5 2 5-2v-6l-5-2z" fill="#2998ff"/> -<path d="m8 1049.4 5-2-5-2-5 2z" fill="#a2d2ff"/> -<path d="m8 1045.4 5 2v-6l-5-2z" fill="#68b6ff"/> -<path transform="translate(0 1036.4)" d="m8 1-7 3 2 1 5-2 5 2 2-1z" fill="#a2d2ff"/> -<path transform="translate(0 1036.4)" d="m1 4v8l7 3v-2l-5-2v-6z" fill="#68b6ff"/> -<path transform="translate(0 1036.4)" d="m15 4-2 1v6l-5 2v2l7-3z" fill="#2998ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><g fill="#2998ff"><path d="m8 1-7 3v8l7 3 7-3v-8z" transform="translate(0 1036.4)"/><path d="m8 1037.4-7 3v8l7 3 7-3v-8z"/><path d="m3 1041.4v6l5 2 5-2v-6l-5-2z"/></g><path d="m8 1049.4 5-2-5-2-5 2z" fill="#a2d2ff"/><path d="m8 1045.4 5 2v-6l-5-2z" fill="#68b6ff"/><g transform="translate(0 1036.4)"><path d="m8 1-7 3 2 1 5-2 5 2 2-1z" fill="#a2d2ff"/><path d="m1 4v8l7 3v-2l-5-2v-6z" fill="#68b6ff"/><path d="m15 4-2 1v6l-5 2v2l7-3z" fill="#2998ff"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_concave_polygon_shape_2d.svg b/editor/icons/icon_concave_polygon_shape_2d.svg index 3264e69ffc..38a92095c9 100644 --- a/editor/icons/icon_concave_polygon_shape_2d.svg +++ b/editor/icons/icon_concave_polygon_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-12l6 6 6-6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-12l6 6 6-6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_cone_twist_joint.svg b/editor/icons/icon_cone_twist_joint.svg index 8d869fa1d5..0e5e98a17b 100644 --- a/editor/icons/icon_cone_twist_joint.svg +++ b/editor/icons/icon_cone_twist_joint.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9824 1a1.0001 1.0001 0 0 0 -0.81445 0.44531l-4.7012 7.0527c-0.80117 0.58197-1.3801 1.3563-1.4492 2.3145a1.0001 1.0001 0 0 0 -0.017578 0.1875c0 0.21449 0.033976 0.41628 0.082031 0.61328 0.0071983 0.028314 0.015306 0.055972 0.023438 0.083985 0.053631 0.19149 0.1274 0.37452 0.2207 0.54883 0.19678 0.36764 0.47105 0.69651 0.80273 0.98633 0.007988 0.007025 0.013442 0.016473 0.021484 0.023437 0.016953 0.014679 0.03747 0.026532 0.054688 0.041016 0.10299 0.086112 0.21259 0.16531 0.32422 0.24414 0.23883 0.16992 0.49083 0.33075 0.76953 0.4707 0.0025295 0.00127 0.0052799 0.002638 0.0078125 0.003906 0.001313 6.58e-4 0.0025928 0.001296 0.0039063 0.001953 0.0085785 0.00429 0.018732 0.007456 0.027344 0.011719 0.26499 0.13103 0.55174 0.24596 0.84961 0.35156 0.10487 0.037634 0.21202 0.071147 0.32031 0.10547 0.072945 0.022902 0.1402 0.050715 0.21484 0.072266 0.16777 0.04843 0.34161 0.086385 0.51367 0.12695 0.093562 0.021905 0.18185 0.048745 0.27734 0.068359 0.010733 0.002205 0.022447 0.003684 0.033203 0.00586 0.34623 0.071177 0.69974 0.12196 1.0566 0.16211 0.057889 0.006228 0.11544 0.01213 0.17383 0.017578 0.81052 0.079498 1.6348 0.079498 2.4453 0 0.058387-0.005448 0.11594-0.01135 0.17383-0.017578 0.3569-0.040146 0.71041-0.090932 1.0566-0.16211 0.010948-0.002251 0.022269-0.003578 0.033203-0.00586 0.095491-0.019614 0.18378-0.046454 0.27734-0.068359 0.17206-0.040568 0.3459-0.078523 0.51367-0.12695 0.074642-0.021551 0.1419-0.049364 0.21484-0.072266 0.10829-0.034322 0.21544-0.067835 0.32031-0.10547 0.29787-0.1056 0.58462-0.22053 0.84961-0.35156 0.009951-0.00492 0.021348-0.008715 0.03125-0.013672 0.002626-0.001315 0.005189-0.002588 0.007813-0.003906 0.2787-0.13995 0.5307-0.30078 0.76953-0.4707 0.11163-0.07883 0.22123-0.15803 0.32422-0.24414 0.017218-0.014484 0.037734-0.026337 0.054687-0.041016 0.008042-0.006964 0.013497-0.016412 0.021485-0.023437 0.33169-0.28982 0.60596-0.61869 0.80273-0.98633 0.093299-0.17431 0.16707-0.35733 0.2207-0.54883 0.008132-0.028013 0.016239-0.055671 0.023438-0.083985 0.048055-0.197 0.082031-0.39879 0.082031-0.61328a1.0001 1.0001 0 0 0 -0.017578 -0.18164 1.0001 1.0001 0 0 0 -0.001953 -0.017578c-0.073081-0.95265-0.64941-1.7232-1.4473-2.3027l-4.7012-7.0527a1.0001 1.0001 0 0 0 -0.84961 -0.44531zm-0.98242 4.3027v1.7461c-0.43911 0.033461-0.86366 0.087835-1.2734 0.16406l1.2734-1.9102zm2 0l1.2734 1.9102c-0.40978-0.076228-0.83432-0.1306-1.2734-0.16406v-1.7461zm-2 3.748v1.9492a1.0001 1.0001 0 1 0 2 0v-1.9492c1.1126 0.10487 2.0951 0.37277 2.7949 0.72266 0.12146 0.060728 0.20622 0.12218 0.30664 0.18359l0.80078 1.2012c-0.032965 0.14677-0.089654 0.30658-0.30469 0.51758-0.051464 0.049149-0.10034 0.098137-0.16406 0.14844-0.045193 0.035312-0.091373 0.070148-0.14258 0.10547-0.11245 0.07827-0.24511 0.15838-0.39062 0.23633-0.075428 0.040204-0.1553 0.078371-0.23828 0.11719-0.16195 0.075482-0.33452 0.14662-0.52148 0.21289-0.070588 0.025324-0.14454 0.048409-0.21875 0.072265-0.23425 0.074473-0.48077 0.14392-0.74414 0.20117-0.021343 0.004579-0.041038 0.011189-0.0625 0.015625-0.2559 0.05368-0.53101 0.090517-0.80859 0.125-0.856 0.10229-1.7573 0.10229-2.6133 0-0.27759-0.034483-0.5527-0.07132-0.80859-0.125-0.021462-0.004436-0.041156-0.011046-0.0625-0.015625-0.26337-0.057254-0.50989-0.1267-0.74414-0.20117-0.074211-0.023856-0.14816-0.046941-0.21875-0.072265-0.18697-0.066266-0.35954-0.13741-0.52148-0.21289-0.082979-0.038816-0.16285-0.076983-0.23828-0.11719-0.14552-0.077951-0.27818-0.15806-0.39062-0.23633-0.051205-0.035321-0.097386-0.070157-0.14258-0.10547-0.06372-0.050301-0.1126-0.099289-0.16406-0.14844-0.21503-0.21099-0.27173-0.37081-0.30469-0.51758l0.80078-1.2012c0.10043-0.061415 0.18518-0.12287 0.30664-0.18359 0.69978-0.34989 1.6823-0.61778 2.7949-0.72266z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9824 1a1.0001 1.0001 0 0 0 -.81445.44531l-4.7012 7.0527c-.80117.58197-1.3801 1.3563-1.4492 2.3145a1.0001 1.0001 0 0 0 -.017578.1875c0 .21449.033976.41628.082031.61328.0071983.028314.015306.055972.023438.083985.053631.19149.1274.37452.2207.54883.19678.36764.47105.69651.80273.98633.007988.007025.013442.016473.021484.023437.016953.014679.03747.026532.054688.041016.10299.086112.21259.16531.32422.24414.23883.16992.49083.33075.76953.4707.0025295.00127.0052799.002638.0078125.003906.001313.000658.0025928.001296.0039063.001953.0085785.00429.018732.007456.027344.011719.26499.13103.55174.24596.84961.35156.10487.037634.21202.071147.32031.10547.072945.022902.1402.050715.21484.072266.16777.04843.34161.086385.51367.12695.093562.021905.18185.048745.27734.068359.010733.002205.022447.003684.033203.00586.34623.071177.69974.12196 1.0566.16211.057889.006228.11544.01213.17383.017578.81052.079498 1.6348.079498 2.4453 0 .058387-.005448.11594-.01135.17383-.017578.3569-.040146.71041-.090932 1.0566-.16211.010948-.002251.022269-.003578.033203-.00586.095491-.019614.18378-.046454.27734-.068359.17206-.040568.3459-.078523.51367-.12695.074642-.021551.1419-.049364.21484-.072266.10829-.034322.21544-.067835.32031-.10547.29787-.1056.58462-.22053.84961-.35156.009951-.00492.021348-.008715.03125-.013672.002626-.001315.005189-.002588.007813-.003906.2787-.13995.5307-.30078.76953-.4707.11163-.07883.22123-.15803.32422-.24414.017218-.014484.037734-.026337.054687-.041016.008042-.006964.013497-.016412.021485-.023437.33169-.28982.60596-.61869.80273-.98633.093299-.17431.16707-.35733.2207-.54883.008132-.028013.016239-.055671.023438-.083985.048055-.197.082031-.39879.082031-.61328a1.0001 1.0001 0 0 0 -.017578-.18164 1.0001 1.0001 0 0 0 -.001953-.017578c-.073081-.95265-.64941-1.7232-1.4473-2.3027l-4.7012-7.0527a1.0001 1.0001 0 0 0 -.84961-.44531zm-.98242 4.3027v1.7461c-.43911.033461-.86366.087835-1.2734.16406l1.2734-1.9102zm2 0 1.2734 1.9102c-.40978-.076228-.83432-.1306-1.2734-.16406v-1.7461zm-2 3.748v1.9492a1.0001 1.0001 0 1 0 2 0v-1.9492c1.1126.10487 2.0951.37277 2.7949.72266.12146.060728.20622.12218.30664.18359l.80078 1.2012c-.032965.14677-.089654.30658-.30469.51758-.051464.049149-.10034.098137-.16406.14844-.045193.035312-.091373.070148-.14258.10547-.11245.07827-.24511.15838-.39062.23633-.075428.040204-.1553.078371-.23828.11719-.16195.075482-.33452.14662-.52148.21289-.070588.025324-.14454.048409-.21875.072265-.23425.074473-.48077.14392-.74414.20117-.021343.004579-.041038.011189-.0625.015625-.2559.05368-.53101.090517-.80859.125-.856.10229-1.7573.10229-2.6133 0-.27759-.034483-.5527-.07132-.80859-.125-.021462-.004436-.041156-.011046-.0625-.015625-.26337-.057254-.50989-.1267-.74414-.20117-.074211-.023856-.14816-.046941-.21875-.072265-.18697-.066266-.35954-.13741-.52148-.21289-.082979-.038816-.16285-.076983-.23828-.11719-.14552-.077951-.27818-.15806-.39062-.23633-.051205-.035321-.097386-.070157-.14258-.10547-.06372-.050301-.1126-.099289-.16406-.14844-.21503-.21099-.27173-.37081-.30469-.51758l.80078-1.2012c.10043-.061415.18518-.12287.30664-.18359.69978-.34989 1.6823-.61778 2.7949-.72266z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_confirmation_dialog.svg b/editor/icons/icon_confirmation_dialog.svg index 491a3bf1f3..d1f13fbb3b 100644 --- a/editor/icons/icon_confirmation_dialog.svg +++ b/editor/icons/icon_confirmation_dialog.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2h-10zm9 1h1v1h-1v-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8h-14zm6.9863 1.002c0.34689-0.0022844 0.6986 0.055762 1.0391 0.17969 1.3618 0.4956 2.1813 1.9126 1.9297 3.3398-0.19105 1.0835-0.96172 1.9461-1.9551 2.3008v0.17773h-1-1v-0.8418a1.0001 1.0001 0 0 1 1 -1.1582c0.49193 0 0.89895-0.34177 0.98438-0.82617 0.085424-0.4845-0.18031-0.94508-0.64258-1.1133-0.46227-0.1683-0.96106 0.013453-1.207 0.43945a1.0002 1.0002 0 0 1 -1.7324 -1c0.54346-0.94148 1.5433-1.4912 2.584-1.498zm-0.98633 6.998h2v1h-2v-1z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8zm6.9863 1.002c.34689-.0022844.6986.055762 1.0391.17969 1.3618.4956 2.1813 1.9126 1.9297 3.3398-.19105 1.0835-.96172 1.9461-1.9551 2.3008v.17773h-1-1v-.8418a1.0001 1.0001 0 0 1 1-1.1582c.49193 0 .89895-.34177.98438-.82617.085424-.4845-.18031-.94508-.64258-1.1133-.46227-.1683-.96106.013453-1.207.43945a1.0002 1.0002 0 0 1 -1.7324-1c.54346-.94148 1.5433-1.4912 2.584-1.498zm-.98633 6.998h2v1h-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_container.svg b/editor/icons/icon_container.svg index 90b086a215..aaea67faa1 100644 --- a/editor/icons/icon_container.svg +++ b/editor/icons/icon_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2h2v-2zm2 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2c0-1.1046-0.89543-2-2-2zm-12 4v2h2v-2h-2zm12 0v2h2v-2h-2zm-12 4v2h2v-2h-2zm12 0v2h2v-2h-2zm-12 4c0 1.1046 0.89543 2 2 2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2c1.1046 0 2-0.89543 2-2h-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2h2zm2 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2c0-1.1046-.89543-2-2-2zm-12 4v2h2v-2zm12 0v2h2v-2zm-12 4v2h2v-2zm12 0v2h2v-2zm-12 4c0 1.1046.89543 2 2 2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2c1.1046 0 2-.89543 2-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control.svg b/editor/icons/icon_control.svg index 3db18ac0e5..ff6a52e29a 100644 --- a/editor/icons/icon_control.svg +++ b/editor/icons/icon_control.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_bottom_center.svg b/editor/icons/icon_control_align_bottom_center.svg index 9d1219078e..7aee8caa79 100644 --- a/editor/icons/icon_control_align_bottom_center.svg +++ b/editor/icons/icon_control_align_bottom_center.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="6" y="1046.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 10h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_bottom_left.svg b/editor/icons/icon_control_align_bottom_left.svg index fc8e7adb3e..aa26eb570a 100644 --- a/editor/icons/icon_control_align_bottom_left.svg +++ b/editor/icons/icon_control_align_bottom_left.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1046.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 10h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_bottom_right.svg b/editor/icons/icon_control_align_bottom_right.svg index 9a9bc0f2ec..737328e6f0 100644 --- a/editor/icons/icon_control_align_bottom_right.svg +++ b/editor/icons/icon_control_align_bottom_right.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="10" y="1046.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 10h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_bottom_wide.svg b/editor/icons/icon_control_align_bottom_wide.svg index 111ea52be7..ad0d7fac85 100644 --- a/editor/icons/icon_control_align_bottom_wide.svg +++ b/editor/icons/icon_control_align_bottom_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1046.4" width="12" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 10h12v4h-12z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_center.svg b/editor/icons/icon_control_align_center.svg index 5dd012c389..14dd500500 100644 --- a/editor/icons/icon_control_align_center.svg +++ b/editor/icons/icon_control_align_center.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="6" y="1042.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 6h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_center_left.svg b/editor/icons/icon_control_align_center_left.svg index 38542419cf..52f1d4d143 100644 --- a/editor/icons/icon_control_align_center_left.svg +++ b/editor/icons/icon_control_align_center_left.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="2" y="1042.4" width="6" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 6h6v4h-6z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_center_right.svg b/editor/icons/icon_control_align_center_right.svg index 371436a6ad..201796f172 100644 --- a/editor/icons/icon_control_align_center_right.svg +++ b/editor/icons/icon_control_align_center_right.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="8" y="1042.4" width="6" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 6h6v4h-6z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_left_center.svg b/editor/icons/icon_control_align_left_center.svg index dbf11be914..8135c9d851 100644 --- a/editor/icons/icon_control_align_left_center.svg +++ b/editor/icons/icon_control_align_left_center.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1042.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 6h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_left_wide.svg b/editor/icons/icon_control_align_left_wide.svg index 7020a8a406..56d16bec76 100644 --- a/editor/icons/icon_control_align_left_wide.svg +++ b/editor/icons/icon_control_align_left_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1038.4" width="4" height="12" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h4v12h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_right_center.svg b/editor/icons/icon_control_align_right_center.svg index 2ce0ebdf30..69c4dba40d 100644 --- a/editor/icons/icon_control_align_right_center.svg +++ b/editor/icons/icon_control_align_right_center.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="10" y="1042.4" width="4" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 6h4v4h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_right_wide.svg b/editor/icons/icon_control_align_right_wide.svg index 0c1713cfe8..b0a46cdb82 100644 --- a/editor/icons/icon_control_align_right_wide.svg +++ b/editor/icons/icon_control_align_right_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="10" y="1038.4" width="4" height="12" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 2h4v12h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_top_center.svg b/editor/icons/icon_control_align_top_center.svg index 4b13ab28b9..cafb3ff856 100644 --- a/editor/icons/icon_control_align_top_center.svg +++ b/editor/icons/icon_control_align_top_center.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="6" y="1038.4" width="4" height="3.9999" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m6 2h4v3.9999h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_top_left.svg b/editor/icons/icon_control_align_top_left.svg index cd06aaad82..ad288647fb 100644 --- a/editor/icons/icon_control_align_top_left.svg +++ b/editor/icons/icon_control_align_top_left.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1038.4" width="4" height="3.9999" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h4v3.9999h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_top_right.svg b/editor/icons/icon_control_align_top_right.svg index 3bbbb89eca..d9955de728 100644 --- a/editor/icons/icon_control_align_top_right.svg +++ b/editor/icons/icon_control_align_top_right.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="10" y="1038.4" width="4" height="3.9999" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m10 2h4v3.9999h-4z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_top_wide.svg b/editor/icons/icon_control_align_top_wide.svg index d704d5cc81..2526b45ad9 100644 --- a/editor/icons/icon_control_align_top_wide.svg +++ b/editor/icons/icon_control_align_top_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1038.4" width="12" height="3.9999" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h12v3.9999h-12z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_align_wide.svg b/editor/icons/icon_control_align_wide.svg index 683504128c..5d1467cd9b 100644 --- a/editor/icons/icon_control_align_wide.svg +++ b/editor/icons/icon_control_align_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 2h12v12h-12z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_hcenter_wide.svg b/editor/icons/icon_control_hcenter_wide.svg index c96ba7ca11..51c9aeb22d 100644 --- a/editor/icons/icon_control_hcenter_wide.svg +++ b/editor/icons/icon_control_hcenter_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect x="2" y="1042.4" width="12" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#919191"/><path d="m2 2h12v12h-12z" fill="#474747"/><path d="m2 6h12v4h-12z" fill="#d6d6d6"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_layout.svg b/editor/icons/icon_control_layout.svg index 4bf60cf751..e39e6b474c 100644 --- a/editor/icons/icon_control_layout.svg +++ b/editor/icons/icon_control_layout.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 1v14h14v-14zm2 2h3v3h-3zm5 0h5v3h-5zm-5 5h3v5h-3zm5 0h5v5h-5z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h14v-14zm2 2h3v3h-3zm5 0h5v3h-5zm-5 5h3v5h-3zm5 0h5v5h-5z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_control_vcenter_wide.svg b/editor/icons/icon_control_vcenter_wide.svg index 892bfcc50d..93bbc5748b 100644 --- a/editor/icons/icon_control_vcenter_wide.svg +++ b/editor/icons/icon_control_vcenter_wide.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#919191"/> -<rect x="2" y="1038.4" width="12" height="12" fill="#474747"/> -<rect transform="rotate(90)" x="1038.4" y="-10" width="12" height="4" fill="#d6d6d6"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m0 1036.4h16v16h-16z" fill="#919191"/><path d="m2 1038.4h12v12h-12z" fill="#474747"/><path d="m1038.4-10h12v4h-12z" fill="#d6d6d6" transform="rotate(90)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_convex_polygon_shape.svg b/editor/icons/icon_convex_polygon_shape.svg index 143780da53..bfb9230586 100644 --- a/editor/icons/icon_convex_polygon_shape.svg +++ b/editor/icons/icon_convex_polygon_shape.svg @@ -1,9 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-7 3v8l7 3 7-3-7-11z" fill="#2998ff"/> -<path d="m8 1051.4-7-3v-8l7 3z" fill="#68b6ff"/> -<path transform="translate(0 1036.4)" d="m8 1-7 3 7 11 7-3z" fill="#2998ff"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m8 1-7 3v8l7 3 7-3z" fill="#2998ff" transform="translate(0 1036.4)"/><path d="m8 1051.4-7-3v-8l7 3z" fill="#68b6ff"/><path d="m8 1-7 3 7 11 7-3z" fill="#2998ff" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_convex_polygon_shape_2d.svg b/editor/icons/icon_convex_polygon_shape_2d.svg index 5bd177d1c6..8d16523d93 100644 --- a/editor/icons/icon_convex_polygon_shape_2d.svg +++ b/editor/icons/icon_convex_polygon_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-6l6-6 6 6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-6l6-6 6 6z" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_copy_node_path.svg b/editor/icons/icon_copy_node_path.svg index c3d3e93a6b..2cabe0a44e 100644 --- a/editor/icons/icon_copy_node_path.svg +++ b/editor/icons/icon_copy_node_path.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<circle cx="3" cy="1048.4" rx="1" ry="1"/> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v12c5.52e-5 0.5523 0.44774 0.9999 1 1h12c0.55226-1e-4 0.99994-0.4477 1-1v-8l-5-5h-8zm1 2h6v3c0 0.554 0.44599 1 1 1h3v6h-10v-10zm3 5l-2 4h2l2-4h-2zm4 0l-2 4h2l2-4h-2z" fill-opacity=".78431"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><circle cx="3" cy="1048.4"/><path d="m2 1c-.55226.0001-.99994.4477-1 1v12c.0000552.5523.44774.9999 1 1h12c.55226-.0001.99994-.4477 1-1v-8l-5-5zm1 2h6v3c0 .554.44599 1 1 1h3v6h-10zm3 5-2 4h2l2-4zm4 0-2 4h2l2-4z" fill-opacity=".78431" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_create_new_scene_from.svg b/editor/icons/icon_create_new_scene_from.svg index 1b1771dae0..ffeaa36bc4 100644 --- a/editor/icons/icon_create_new_scene_from.svg +++ b/editor/icons/icon_create_new_scene_from.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m14.564 2l-2.2441 0.32812 0.81836 1.9004 1.7148-0.25-0.28906-1.9785zm-4.2227 0.61523l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.959 0.57812l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.957 0.57812l-1.7148 0.25 0.28906 1.9785 2.2441-0.32812-0.81836-1.9004zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h7v-1h-2v-4h2v-2h4v2h1v-3h-14z" fill="#e0e0e0"/> -<circle cx="-14" cy="1047.4" r="0" fill="#e0e0e0"/> -<path d="m13 1049.4h2v-2h-2v-2h-2v2h-2v2h2v2h2z" fill="#84ffb1" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25-.28906-1.9785zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812-.81836-1.9004zm-1.4258 3.2285v6c0 1.1046.89543 2 2 2h7v-1h-2v-4h2v-2h4v2h1v-3z" fill="#e0e0e0" transform="translate(0 1036.4)"/><circle cx="-14" cy="1047.4" fill="#e0e0e0" r="0"/><path d="m13 1049.4h2v-2h-2v-2h-2v2h-2v2h2v2h2z" fill="#84ffb1" fill-rule="evenodd"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_crypto_key.svg b/editor/icons/icon_crypto_key.svg new file mode 100644 index 0000000000..45b53c815d --- /dev/null +++ b/editor/icons/icon_crypto_key.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 4.233 4.233" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.397.34-.374.373-.375.374v.375l.188.187-1.497 1.496v.375l.374.374h.374l.187-.188.282-.092.092-.282.282-.093.093-.28.094-.28.28-.095.187-.187.187.187h.374l.375-.375.373-.373.001-.374-1.122-1.122zm.374.858a.264.264 0 1 1 .002.528.264.264 0 0 1 -.002-.528z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_cube_map.svg b/editor/icons/icon_cube_map.svg index d814998500..c9e6f1fa7d 100644 --- a/editor/icons/icon_cube_map.svg +++ b/editor/icons/icon_cube_map.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 6v4h4v-4h-4zm8 0v4h4v-4h-4z" fill="#84ffb1"/> -<path transform="translate(0 1036.4)" d="m4 6v4h4v-4h-4zm8 0v4h4v-4h-4z" fill="#ff8484"/> -<path transform="translate(0 1036.4)" d="m4 2v4h4v-4h-4zm0 8v4h4v-4h-4z" fill="#84c2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 6v4h4v-4zm8 0v4h4v-4z" fill="#84ffb1"/><path d="m4 6v4h4v-4zm8 0v4h4v-4z" fill="#ff8484"/><path d="m4 2v4h4v-4zm0 8v4h4v-4z" fill="#84c2ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_cube_mesh.svg b/editor/icons/icon_cube_mesh.svg index d1897dd710..aeb5324b1b 100644 --- a/editor/icons/icon_cube_mesh.svg +++ b/editor/icons/icon_cube_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> -<path transform="scale(.9375)" d="m8 0.88867-7 3.5v7.2227l7 3.5 7-3.5v-7.2227zm0 2.1152 3.9395 1.9707-3.9395 1.9688-3.9395-1.9688zm-5 3.5527 4 2v3.9414l-4-2.002zm10 0v3.9395l-4 2.002v-3.9414z" fill="#ffd684" stroke-width="1.0667"/> -</svg> +<svg height="16" viewBox="0 0 14.999999 14.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .88867-7 3.5v7.2227l7 3.5 7-3.5v-7.2227zm0 2.1152 3.9395 1.9707-3.9395 1.9688-3.9395-1.9688zm-5 3.5527 4 2v3.9414l-4-2.002zm10 0v3.9395l-4 2.002v-3.9414z" fill="#ffd684" stroke-width="1.0667" transform="scale(.9375)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve.svg b/editor/icons/icon_curve.svg index 244b7d5678..14895337c6 100644 --- a/editor/icons/icon_curve.svg +++ b/editor/icons/icon_curve.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#e0e0e0" stroke-width="2"> -<path d="m2 1038.4v12h12" stroke-linecap="square" stroke-opacity=".32549"/> -<path d="m2 1050.4c8 0 12-4 12-12" stroke-linecap="round"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0" stroke-width="2" transform="translate(0 -1036.4)"><path d="m2 1038.4v12h12" stroke-linecap="square" stroke-opacity=".32549"/><path d="m2 1050.4c8 0 12-4 12-12" stroke-linecap="round"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_2d.svg b/editor/icons/icon_curve_2d.svg index 3172387555..23f585c7c5 100644 --- a/editor/icons/icon_curve_2d.svg +++ b/editor/icons/icon_curve_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1037.4c-3.1667 0-5.1045 0.854-6.082 2.3203-0.97757 1.4664-0.91797 3.1797-0.91797 4.6797s-0.059601 2.7867-0.58203 3.5703c-0.52243 0.7837-1.5846 1.4297-4.418 1.4297a1.0001 1.0001 0 1 0 0 2c3.1667 0 5.1045-0.8539 6.082-2.3203 0.97757-1.4663 0.91797-3.1797 0.91797-4.6797s0.059601-2.7866 0.58203-3.5703c0.52243-0.7836 1.5846-1.4297 4.418-1.4297a1.0001 1.0001 0 1 0 0 -2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1037.4c-3.1667 0-5.1045.854-6.082 2.3203-.97757 1.4664-.91797 3.1797-.91797 4.6797s-.059601 2.7867-.58203 3.5703c-.52243.7837-1.5846 1.4297-4.418 1.4297a1.0001 1.0001 0 1 0 0 2c3.1667 0 5.1045-.8539 6.082-2.3203.97757-1.4663.91797-3.1797.91797-4.6797s.059601-2.7866.58203-3.5703c.52243-.7836 1.5846-1.4297 4.418-1.4297a1.0001 1.0001 0 1 0 0-2z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_3d.svg b/editor/icons/icon_curve_3d.svg index 4f841516d7..f14c581ec3 100644 --- a/editor/icons/icon_curve_3d.svg +++ b/editor/icons/icon_curve_3d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8.0039 1037.4a1.0001 1.0001 0 0 0 -0.45117 0.1113l-6 3a1.0001 1.0001 0 0 0 0 1.7891l6 3a1.0001 1.0001 0 0 0 0.89453 0l4.5527-2.2754v3.7636l-5 2.5-5.5527-2.7773a1.0001 1.0001 0 0 0 -0.89453 1.7891l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.8946v-6a1.0001 1.0001 0 0 0 -1.4473 -0.8945l-5.5527 2.7773-3.7637-1.8828 4.2109-2.1054a1.0001 1.0001 0 0 0 -0.44336 -1.9004z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8.0039 1037.4a1.0001 1.0001 0 0 0 -.45117.1113l-6 3a1.0001 1.0001 0 0 0 0 1.7891l6 3a1.0001 1.0001 0 0 0 .89453 0l4.5527-2.2754v3.7636l-5 2.5-5.5527-2.7773a1.0001 1.0001 0 0 0 -.89453 1.7891l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1.0001 1.0001 0 0 0 .55273-.8946v-6a1.0001 1.0001 0 0 0 -1.4473-.8945l-5.5527 2.7773-3.7637-1.8828 4.2109-2.1054a1.0001 1.0001 0 0 0 -.44336-1.9004z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_close.svg b/editor/icons/icon_curve_close.svg index 561ef33cb2..7d7bae88c2 100644 --- a/editor/icons/icon_curve_close.svg +++ b/editor/icons/icon_curve_close.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm8 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> -<path transform="translate(0 1036.4)" d="m10 6v2h2v-2h-2zm0 2h-2v2h2v-2zm-2 2h-2v2h2v-2z" fill="#84c2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><g transform="translate(0 1036.4)"><path d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm8 0a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#f5f5f5"/><path d="m10 6v2h2v-2zm0 2h-2v2h2zm-2 2h-2v2h2z" fill="#84c2ff"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_constant.svg b/editor/icons/icon_curve_constant.svg index 153d023dd6..713a3a982a 100644 --- a/editor/icons/icon_curve_constant.svg +++ b/editor/icons/icon_curve_constant.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1046.4h8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1046.4h8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_create.svg b/editor/icons/icon_curve_create.svg index 1181111a0c..43811f93f5 100644 --- a/editor/icons/icon_curve_create.svg +++ b/editor/icons/icon_curve_create.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm6 5v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#84ffb1"/> -<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><g transform="translate(0 1036.4)"><path d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm6 5v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#84ffb1"/><path d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#f5f5f5"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_curve.svg b/editor/icons/icon_curve_curve.svg index 51597d613a..60f965abc1 100644 --- a/editor/icons/icon_curve_curve.svg +++ b/editor/icons/icon_curve_curve.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<path transform="translate(0 1036.4)" d="m8.4688 0.4707l-2.6875 2.6875h-0.0019531a2 2 0 0 0 -0.7793 -0.1582 2 2 0 0 0 -2 2 2 2 0 0 0 0.16016 0.7793l-2.6914 2.6914 1.0625 1.0605 2.6895-2.6895a2 2 0 0 0 0.7793 0.1582 2 2 0 0 0 2 -2 2 2 0 0 0 -0.16016 -0.77734l2.6914-2.6914-1.0625-1.0605z" fill="#84c2ff"/> -<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><g transform="translate(0 1036.4)"><path d="m8.4688.4707-2.6875 2.6875h-.0019531a2 2 0 0 0 -.7793-.1582 2 2 0 0 0 -2 2 2 2 0 0 0 .16016.7793l-2.6914 2.6914 1.0625 1.0605 2.6895-2.6895a2 2 0 0 0 .7793.1582 2 2 0 0 0 2-2 2 2 0 0 0 -.16016-.77734l2.6914-2.6914-1.0625-1.0605z" fill="#84c2ff"/><path d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#f5f5f5"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_delete.svg b/editor/icons/icon_curve_delete.svg index 901a08e984..afb545840f 100644 --- a/editor/icons/icon_curve_delete.svg +++ b/editor/icons/icon_curve_delete.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<path d="m5 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm4.8789 5.4648-1.4141 1.4141 2.1211 2.1211-2.1211 2.1211 1.4141 1.4141l2.1211-2.1211 2.1211 2.1211 1.4141-1.4141-2.1211-2.1211 2.1211-2.1211-1.4141-1.4141-2.1211 2.1211z" fill="#ff8484"/> -<path d="m13 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><path d="m5 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm4.8789 5.4648-1.4141 1.4141 2.1211 2.1211-2.1211 2.1211 1.4141 1.4141 2.1211-2.1211 2.1211 2.1211 1.4141-1.4141-2.1211-2.1211 2.1211-2.1211-1.4141-1.4141-2.1211 2.1211z" fill="#ff8484"/><path d="m13 1039.4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#f5f5f5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_edit.svg b/editor/icons/icon_curve_edit.svg index 8f09ca6793..5d1d6560e1 100644 --- a/editor/icons/icon_curve_edit.svg +++ b/editor/icons/icon_curve_edit.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/> -<path transform="translate(0 1036.4)" d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm3 5l3.291 8 0.94726-2.8203 1.8828 1.8828 0.94336-0.94141-1.8848-1.8828 2.8203-0.94726-8-3.291z" fill="#84c2ff"/> -<path transform="translate(0 1036.4)" d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#f5f5f5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 1049.4c-2-9-1-10 8-8" fill="none" stroke="#f5f5f5" stroke-opacity=".39216" stroke-width="2"/><g transform="translate(0 1036.4)"><path d="m5 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm3 5 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291z" fill="#84c2ff"/><path d="m13 3a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-8 8a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#f5f5f5"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_in.svg b/editor/icons/icon_curve_in.svg index 69877bbd09..b9e203dea0 100644 --- a/editor/icons/icon_curve_in.svg +++ b/editor/icons/icon_curve_in.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1050.4c5 0 8-3 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c5 0 8-3 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_in_out.svg b/editor/icons/icon_curve_in_out.svg index 6e8bedd27d..6d3c57d4f5 100644 --- a/editor/icons/icon_curve_in_out.svg +++ b/editor/icons/icon_curve_in_out.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1050.4c5 0 3-8 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c5 0 3-8 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_linear.svg b/editor/icons/icon_curve_linear.svg index 92c4de7979..2256f493ce 100644 --- a/editor/icons/icon_curve_linear.svg +++ b/editor/icons/icon_curve_linear.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1050.4 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_out.svg b/editor/icons/icon_curve_out.svg index d74c0c6689..9b04df6b6c 100644 --- a/editor/icons/icon_curve_out.svg +++ b/editor/icons/icon_curve_out.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1050.4c0-5 3-8 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c0-5 3-8 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_out_in.svg b/editor/icons/icon_curve_out_in.svg index e98c50d931..4a08d30966 100644 --- a/editor/icons/icon_curve_out_in.svg +++ b/editor/icons/icon_curve_out_in.svg @@ -1,5 +1 @@ -<svg width="12" height="12" version="1.1" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path d="m2 1050.4c0-5 8-3 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="12" viewBox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c0-5 8-3 8-8" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1040.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_curve_texture.svg b/editor/icons/icon_curve_texture.svg index 15926087eb..05f9d62775 100644 --- a/editor/icons/icon_curve_texture.svg +++ b/editor/icons/icon_curve_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55228 0-1 0.44772-1 1v9.1602c0.32185-0.10966 0.66-0.16382 1-0.16016 0.33117 0 0.66575-0.007902 1-0.013672v-7.9863h10v1.1348c0.29007-0.10393 0.59442-0.16256 0.90234-0.17383 0.37315-0.012796 0.74541 0.044169 1.0977 0.16797v-2.1289c0-0.55228-0.44772-1-1-1h-12zm7 4v1h-1v1h-2v1h-1v1h-1v1h2 2 0.39062c1.1119-0.56677 1.9678-1.4538 2.6094-3.4727v-0.52734h-1v-1h-1zm4.9668 0.98828a1.0001 1.0001 0 0 0 -0.92774 0.73828c-0.92743 3.246-2.6356 4.6825-4.6523 5.4668-2.0168 0.7843-4.3867 0.80664-6.3867 0.80664a1.0001 1.0001 0 1 0 0 2c2 0 4.6301 0.023994 7.1133-0.94141 2.4832-0.9657 4.7751-3.0292 5.8477-6.7832a1.0001 1.0001 0 0 0 -0.99414 -1.2871z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55228 0-1 .44772-1 1v9.1602c.32185-.10966.66-.16382 1-.16016.33117 0 .66575-.007902 1-.013672v-7.9863h10v1.1348c.29007-.10393.59442-.16256.90234-.17383.37315-.012796.74541.044169 1.0977.16797v-2.1289c0-.55228-.44772-1-1-1h-12zm7 4v1h-1v1h-2v1h-1v1h-1v1h2 2 .39062c1.1119-.56677 1.9678-1.4538 2.6094-3.4727v-.52734h-1v-1h-1zm4.9668.98828a1.0001 1.0001 0 0 0 -.92774.73828c-.92743 3.246-2.6356 4.6825-4.6523 5.4668-2.0168.7843-4.3867.80664-6.3867.80664a1.0001 1.0001 0 1 0 0 2c2 0 4.6301.023994 7.1133-.94141 2.4832-.9657 4.7751-3.0292 5.8477-6.7832a1.0001 1.0001 0 0 0 -.99414-1.2871z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_cylinder_mesh.svg b/editor/icons/icon_cylinder_mesh.svg index 21b5fc144b..f204edc985 100644 --- a/editor/icons/icon_cylinder_mesh.svg +++ b/editor/icons/icon_cylinder_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> -<path d="m7.5 0.9375c-1.6377 0-3.12 0.2123-4.2737 0.5969-0.57682 0.1923-1.0754 0.4237-1.4905 0.7508-0.41505 0.3271-0.79834 0.8259-0.79834 1.4648v7.5c0 0.6389 0.38329 1.1396 0.79834 1.4667 0.41505 0.3271 0.91366 0.5585 1.4905 0.7507 1.1536 0.3846 2.6359 0.5951 4.2737 0.5951s3.12-0.2105 4.2737-0.5951c0.57682-0.1922 1.0754-0.4236 1.4905-0.7507 0.41505-0.3271 0.79834-0.8278 0.79834-1.4667v-7.5c0-0.6389-0.38329-1.1377-0.79834-1.4648-0.41505-0.3271-0.91366-0.5585-1.4905-0.7508-1.1536-0.3846-2.6359-0.5969-4.2737-0.5969zm0 1.875c1.4689 0 2.8 0.2076 3.6823 0.5017 0.4347 0.1449 0.7513 0.3163 0.9082 0.4376-0.15705 0.1212-0.47387 0.2911-0.9082 0.4358-0.88221 0.2941-2.2134 0.4999-3.6823 0.4999s-2.8-0.2058-3.6823-0.4999c-0.43433-0.1447-0.75115-0.3146-0.9082-0.4358 0.15691-0.1213 0.47351-0.2927 0.9082-0.4376 0.88221-0.2941 2.2134-0.5017 3.6823-0.5017zm-4.6875 2.9883c0.13762 0.055 0.26578 0.1173 0.41382 0.1666 1.1536 0.3846 2.6359 0.5951 4.2737 0.5951s3.12-0.2105 4.2737-0.5951c0.14804-0.049 0.2762-0.1112 0.41382-0.1666v5.4492c-0.15705 0.1212-0.57092 0.2929-1.0052 0.4376-0.88221 0.2941-2.2134 0.4999-3.6823 0.4999s-2.8-0.2058-3.6823-0.4999c-0.43433-0.1447-0.8482-0.3164-1.0052-0.4376z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 14.999999 14.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.5.9375c-1.6377 0-3.12.2123-4.2737.5969-.57682.1923-1.0754.4237-1.4905.7508-.41505.3271-.79834.8259-.79834 1.4648v7.5c0 .6389.38329 1.1396.79834 1.4667s.91366.5585 1.4905.7507c1.1536.3846 2.6359.5951 4.2737.5951s3.12-.2105 4.2737-.5951c.57682-.1922 1.0754-.4236 1.4905-.7507.41505-.3271.79834-.8278.79834-1.4667v-7.5c0-.6389-.38329-1.1377-.79834-1.4648s-.91366-.5585-1.4905-.7508c-1.1536-.3846-2.6359-.5969-4.2737-.5969zm0 1.875c1.4689 0 2.8.2076 3.6823.5017.4347.1449.7513.3163.9082.4376-.15705.1212-.47387.2911-.9082.4358-.88221.2941-2.2134.4999-3.6823.4999s-2.8-.2058-3.6823-.4999c-.43433-.1447-.75115-.3146-.9082-.4358.15691-.1213.47351-.2927.9082-.4376.88221-.2941 2.2134-.5017 3.6823-.5017zm-4.6875 2.9883c.13762.055.26578.1173.41382.1666 1.1536.3846 2.6359.5951 4.2737.5951s3.12-.2105 4.2737-.5951c.14804-.049.2762-.1112.41382-.1666v5.4492c-.15705.1212-.57092.2929-1.0052.4376-.88221.2941-2.2134.4999-3.6823.4999s-2.8-.2058-3.6823-.4999c-.43433-.1447-.8482-.3164-1.0052-.4376z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_cylinder_shape.svg b/editor/icons/icon_cylinder_shape.svg index abda347ec5..f0aa5833d2 100644 --- a/editor/icons/icon_cylinder_shape.svg +++ b/editor/icons/icon_cylinder_shape.svg @@ -1,6 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg width="16" height="16" version="1.1" viewBox="0 0 14.999999 14.999999" xmlns="http://www.w3.org/2000/svg"> -<rect fill="#68b6ff" width="13.171325" height="7.6993308" x="0.89037383" y="3.6879442"/> -<ellipse fill="#a2d2ff" cx="7.4772978" cy="3.7229116" rx="6.5864792" ry="2.820821"/> -<ellipse fill="#68b6ff" cx="7.4746876" cy="11.34481" rx="6.5864792" ry="2.8208208"/> -</svg> +<svg height="16" viewBox="0 0 14.999999 14.999999" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m.890374 3.687944h13.171325v7.699331h-13.171325z" fill="#68b6ff"/><ellipse cx="7.477298" cy="3.722912" fill="#a2d2ff" rx="6.586479" ry="2.820821"/><ellipse cx="7.474688" cy="11.34481" fill="#68b6ff" rx="6.586479" ry="2.820821"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_damped_spring_joint_2d.svg b/editor/icons/icon_damped_spring_joint_2d.svg index fa1fb9f348..9bd842bcc8 100644 --- a/editor/icons/icon_damped_spring_joint_2d.svg +++ b/editor/icons/icon_damped_spring_joint_2d.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-opacity=".98824"> -<path transform="translate(0 1036.4)" d="m4 3v2l8 3v-2zm0 5v2l8 3v-2z" fill="#708cea"/> -<path transform="translate(0 1036.4)" d="m4 3v2l8-2v-2zm0 5v2l8-2v-2zm0 5v2l8-2v-2z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".98824"><path d="m4 3v2l8 3v-2zm0 5v2l8 3v-2z" fill="#708cea"/><path d="m4 3v2l8-2v-2zm0 5v2l8-2v-2zm0 5v2l8-2v-2z" fill="#a5b7f3"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug.svg b/editor/icons/icon_debug.svg index dfab5eb28b..7490862c4a 100644 --- a/editor/icons/icon_debug.svg +++ b/editor/icons/icon_debug.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-1.3257 0-2.5977 0.52744-3.5352 1.4648a1 1 0 0 0 0 1.4141 1 1 0 0 0 0.69141 0.29297 1 1 0 0 0 0.72266 -0.29297c0.56288-0.5628 1.3251-0.87891 2.1211-0.87891s1.5582 0.31611 2.1211 0.87891a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141c-0.93741-0.9374-2.2095-1.4648-3.5352-1.4648zm-5 3.9961a1 1 0 0 0 -1 1c0 0.8334 0.32654 1.6973 0.96875 2.5 0.33016 0.41272 0.7705 0.79575 1.3008 1.0723a4 4 0 0 0 -0.13672 0.43164h-2.1328a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2.1309a4 4 0 0 0 0.17969 0.53711c-0.14177 0.089422-0.27868 0.1846-0.41016 0.2832-0.58533 0.439-1.1074 0.96875-1.6074 1.4688a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0c0.5-0.5 0.97791-0.9722 1.3926-1.2832 0.1693-0.12693 0.3098-0.20282 0.44336-0.26953a4 4 0 0 0 2.457 0.84961 4 4 0 0 0 2.459 -0.84766c0.13307 0.066645 0.27298 0.14126 0.44141 0.26758 0.41467 0.311 0.89258 0.7832 1.3926 1.2832a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141c-0.5-0.5-1.0221-1.0297-1.6074-1.4688-0.13076-0.098068-0.26727-0.19224-0.4082-0.28125a4 4 0 0 0 0.17578 -0.53906h2.1328a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2.1309a4 4 0 0 0 -0.13477 -0.43359c0.52857-0.27637 0.96751-0.65858 1.2969-1.0703 0.64221-0.8027 0.96875-1.6666 0.96875-2.5a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1c0 0.1667-0.17346 0.8028-0.53125 1.25-0.25089 0.31365-0.54884 0.54907-0.93164 0.66602a4 4 0 0 0 -0.60352 -0.41211 2 2 0 0 0 0.066406 -0.5 2 2 0 0 0 -2 -2 2 2 0 0 0 -2 2 2 2 0 0 0 0.066406 0.50391 4 4 0 0 0 -0.60352 0.4082c-0.3828-0.11694-0.68075-0.35236-0.93164-0.66602-0.35779-0.4472-0.53125-1.0833-0.53125-1.25a1 1 0 0 0 -1 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-1.3257 0-2.5977.52744-3.5352 1.4648a1 1 0 0 0 0 1.4141 1 1 0 0 0 .69141.29297 1 1 0 0 0 .72266-.29297c.56288-.5628 1.3251-.87891 2.1211-.87891s1.5582.31611 2.1211.87891a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141c-.93741-.9374-2.2095-1.4648-3.5352-1.4648zm-5 3.9961a1 1 0 0 0 -1 1c0 .8334.32654 1.6973.96875 2.5.33016.41272.7705.79575 1.3008 1.0723a4 4 0 0 0 -.13672.43164h-2.1328a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2.1309a4 4 0 0 0 .17969.53711c-.14177.089422-.27868.1846-.41016.2832-.58533.439-1.1074.96875-1.6074 1.4688a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0c.5-.5.97791-.9722 1.3926-1.2832.1693-.12693.3098-.20282.44336-.26953a4 4 0 0 0 2.457.84961 4 4 0 0 0 2.459-.84766c.13307.066645.27298.14126.44141.26758.41467.311.89258.7832 1.3926 1.2832a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141c-.5-.5-1.0221-1.0297-1.6074-1.4688-.13076-.098068-.26727-.19224-.4082-.28125a4 4 0 0 0 .17578-.53906h2.1328a1 1 0 0 0 1-1 1 1 0 0 0 -1-1h-2.1309a4 4 0 0 0 -.13477-.43359c.52857-.27637.96751-.65858 1.2969-1.0703.64221-.8027.96875-1.6666.96875-2.5a1 1 0 0 0 -1-1 1 1 0 0 0 -1 1c0 .1667-.17346.8028-.53125 1.25-.25089.31365-.54884.54907-.93164.66602a4 4 0 0 0 -.60352-.41211 2 2 0 0 0 .066406-.5 2 2 0 0 0 -2-2 2 2 0 0 0 -2 2 2 2 0 0 0 .066406.50391 4 4 0 0 0 -.60352.4082c-.3828-.11694-.68075-.35236-.93164-.66602-.35779-.4472-.53125-1.0833-.53125-1.25a1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug_continue.svg b/editor/icons/icon_debug_continue.svg index d38bde9ea6..69c64c4fd4 100644 --- a/editor/icons/icon_debug_continue.svg +++ b/editor/icons/icon_debug_continue.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m10 4v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#ff8484"/> -<circle cx="4" cy="1044.4" r="3" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m10 4v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z" fill="#ff8484" transform="translate(0 1036.4)"/><circle cx="4" cy="1044.4" fill="#e0e0e0" r="3"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug_next.svg b/editor/icons/icon_debug_next.svg index e641fb9dbe..133be255e1 100644 --- a/editor/icons/icon_debug_next.svg +++ b/editor/icons/icon_debug_next.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1v10h-2l1.5 2 1.5 2 1.5-2 1.5-2h-2v-10h-2z" fill="#ff8484"/> -<path transform="translate(0 1036.4)" d="m7 1v2h8v-2h-8zm2 4v2h6v-2h-6zm0 4v2h6v-2h-6zm-2 4v2h8v-2h-8z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1v10h-2l1.5 2 1.5 2 1.5-2 1.5-2h-2v-10z" fill="#ff8484"/><path d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug_skip_breakpoints_off.svg b/editor/icons/icon_debug_skip_breakpoints_off.svg index 2a0b949aa9..f8923510bb 100644 --- a/editor/icons/icon_debug_skip_breakpoints_off.svg +++ b/editor/icons/icon_debug_skip_breakpoints_off.svg @@ -1,89 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="17" - height="17" - version="1.1" - viewBox="0 0 17 17" - id="svg3801" - sodipodi:docname="icon_debug_skip_breakpoints_off.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata3807"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs3805" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1887" - inkscape:window-height="2103" - id="namedview3803" - showgrid="false" - inkscape:measure-start="15.5563,28.7373" - inkscape:measure-end="0,0" - inkscape:zoom="32" - inkscape:cx="8.5156226" - inkscape:cy="-9.0970543" - inkscape:window-x="1953" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg3801" /> - <path - id="path3835" - sodipodi:type="arc" - sodipodi:cx="3.2790968" - sodipodi:cy="3.006855" - sodipodi:rx="1.6192284" - sodipodi:ry="1.3289529" - sodipodi:start="0" - sodipodi:end="0.0073006075" - sodipodi:open="true" - d="m 4.8983252,3.006855 a 1.6192284,1.3289529 0 0 1 -4.31e-5,0.0097" - style="fill:#000000;stroke-width:0.62631863" /> - <path - style="fill:#000000;stroke-width:0.62631863" - id="path3837" - sodipodi:type="arc" - sodipodi:cx="6.233613" - sodipodi:cy="5.0553513" - sodipodi:rx="2.563139" - sodipodi:ry="3.6270869" - sodipodi:start="0" - sodipodi:end="0.0073006075" - sodipodi:open="true" - d="m 8.796752,5.0553513 a 2.563139,3.6270869 0 0 1 -6.83e-5,0.02648" /> - <path - style="fill:#ff8585;fill-opacity:0.99607843;stroke-width:1.01912296" - id="path3839" - sodipodi:type="arc" - sodipodi:cx="8.4689026" - sodipodi:cy="8.479969" - sodipodi:rx="6.1594577" - sodipodi:ry="6.0545759" - sodipodi:start="5.5685493" - sodipodi:end="5.2409356" - d="M 13.121337,4.512148 A 6.1594577,6.0545759 0 0 1 12.87255,12.713238 6.1594577,6.0545759 0 0 1 4.5370096,13.140453 6.1594577,6.0545759 0 0 1 3.4219038,5.0092664 6.1594577,6.0545759 0 0 1 11.574987,3.2515951" - sodipodi:open="true" /> -</svg> +<svg height="17" viewBox="0 0 17 17" width="17" xmlns="http://www.w3.org/2000/svg"><path d="m4.8983252 3.006855a1.6192284 1.3289529 0 0 1 -.0000431.0097" stroke-width=".626319"/><path d="m8.796752 5.0553513a2.563139 3.6270869 0 0 1 -.0000683.02648" stroke-width=".626319"/><path d="m13.121337 4.512148a6.1594577 6.0545759 0 0 1 -.248787 8.20109 6.1594577 6.0545759 0 0 1 -8.3355404.427215 6.1594577 6.0545759 0 0 1 -1.1151058-8.1311866 6.1594577 6.0545759 0 0 1 8.1530832-1.7576713" fill="#ff8585" fill-opacity=".996078" stroke-width="1.019123"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug_skip_breakpoints_on.svg b/editor/icons/icon_debug_skip_breakpoints_on.svg index 186778a1b4..d4a4b4c138 100644 --- a/editor/icons/icon_debug_skip_breakpoints_on.svg +++ b/editor/icons/icon_debug_skip_breakpoints_on.svg @@ -1,106 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="17" - height="17" - version="1.1" - viewBox="0 0 17 17" - id="svg3801" - sodipodi:docname="icon_debug_skip_breakpoints_on.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata3807"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs3805" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1887" - inkscape:window-height="2105" - id="namedview3803" - showgrid="false" - inkscape:measure-start="15.5563,28.7373" - inkscape:measure-end="0,0" - inkscape:zoom="40.96" - inkscape:cx="12.825686" - inkscape:cy="-5.1961973" - inkscape:window-x="1953" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="layer1" /> - <g - inkscape:groupmode="layer" - id="layer1" - inkscape:label="bg" /> - <g - inkscape:groupmode="layer" - id="layer2" - inkscape:label="fg"> - <path - id="path3835" - sodipodi:type="arc" - sodipodi:cx="3.2790968" - sodipodi:cy="3.006855" - sodipodi:rx="1.6192284" - sodipodi:ry="1.3289529" - sodipodi:start="0" - sodipodi:end="0.0073006075" - sodipodi:open="true" - d="m 4.8983252,3.006855 a 1.6192284,1.3289529 0 0 1 -4.31e-5,0.0097" - style="fill:#000000;stroke-width:0.62631863" /> - <path - style="fill:#000000;stroke-width:0.62631863" - id="path3837" - sodipodi:type="arc" - sodipodi:cx="6.233613" - sodipodi:cy="5.0553513" - sodipodi:rx="2.563139" - sodipodi:ry="3.6270869" - sodipodi:start="0" - sodipodi:end="0.0073006075" - sodipodi:open="true" - d="m 8.796752,5.0553513 a 2.563139,3.6270869 0 0 1 -6.83e-5,0.02648" /> - <path - style="fill:#ff8585;fill-opacity:0.99607843;stroke-width:1.01912296" - id="path3839" - sodipodi:type="arc" - sodipodi:cx="8.4689026" - sodipodi:cy="8.479969" - sodipodi:rx="6.1594577" - sodipodi:ry="6.0545759" - sodipodi:start="5.5685493" - sodipodi:end="5.2409356" - d="M 13.121337,4.512148 A 6.1594577,6.0545759 0 0 1 12.87255,12.713238 6.1594577,6.0545759 0 0 1 4.5370096,13.140453 6.1594577,6.0545759 0 0 1 3.4219038,5.0092664 6.1594577,6.0545759 0 0 1 11.574987,3.2515951" - sodipodi:open="true" /> - <rect - style="fill:#e0e0e0;fill-opacity:1;stroke-width:1.1873318" - id="rect5375" - width="18.575495" - height="2.5187109" - x="-9.2906752" - y="10.816157" - transform="matrix(0.70605846,-0.70815355,0.70605846,0.70815355,0,0)" /> - </g> -</svg> +<svg height="17" viewBox="0 0 17 17" width="17" xmlns="http://www.w3.org/2000/svg"><path d="m4.8983252 3.006855a1.6192284 1.3289529 0 0 1 -.0000431.0097" stroke-width=".626319"/><path d="m8.796752 5.0553513a2.563139 3.6270869 0 0 1 -.0000683.02648" stroke-width=".626319"/><path d="m13.121337 4.512148a6.1594577 6.0545759 0 0 1 -.248787 8.20109 6.1594577 6.0545759 0 0 1 -8.3355404.427215 6.1594577 6.0545759 0 0 1 -1.1151058-8.1311866 6.1594577 6.0545759 0 0 1 8.1530832-1.7576713" fill="#ff8585" fill-opacity=".996078" stroke-width="1.019123"/><path d="m-9.290675 10.816157h18.575495v2.518711h-18.575495z" fill="#e0e0e0" stroke-width="1.187332" transform="matrix(.70605846 -.70815355 .70605846 .70815355 0 0)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_debug_step.svg b/editor/icons/icon_debug_step.svg index 0a1f878a78..c0356463fe 100644 --- a/editor/icons/icon_debug_step.svg +++ b/editor/icons/icon_debug_step.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v8 2h2 1v2l2-1.5 2-1.5-2-1.5-2-1.5v2h-1v-8h-2z" fill="#ff8484"/> -<path transform="translate(0 1036.4)" d="m7 1v2h8v-2h-8zm2 4v2h6v-2h-6zm0 4v2h6v-2h-6zm-2 4v2h8v-2h-8z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v8 2h2 1v2l2-1.5 2-1.5-2-1.5-2-1.5v2h-1v-8z" fill="#ff8484"/><path d="m7 1v2h8v-2zm2 4v2h6v-2zm0 4v2h6v-2zm-2 4v2h8v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_default_project_icon.svg b/editor/icons/icon_default_project_icon.svg index d16d137550..10ecbd019d 100644 --- a/editor/icons/icon_default_project_icon.svg +++ b/editor/icons/icon_default_project_icon.svg @@ -1,33 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<path transform="translate(0 988.36)" d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8z" fill="#355570" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path transform="translate(0 988.36)" d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8zm0 2h48c3.324 0 6 2.676 6 6v48c0 3.324-2.676 6-6 6h-48c-3.324 0-6-2.676-6-6v-48c0-3.324 2.676-6 6-6z" fill-opacity=".19608" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path transform="translate(0 988.36)" d="m27.254 10c-2.1314 0.47383-4.2401 1.134-6.2168 2.1289 0.04521 1.7455 0.15796 3.4164 0.38672 5.1152-0.76768 0.4919-1.574 0.91443-2.291 1.4902-0.72854 0.5604-1.4731 1.0965-2.1328 1.752-1.3179-0.8716-2.7115-1.691-4.1484-2.4141-1.549 1.667-2.9985 3.4672-4.1816 5.4805 0.89011 1.4399 1.8209 2.7894 2.8242 4.0703h0.027343v9.9453 1.2617 1.1504l-0.009765 1.6309h-0.001953c0.0031 0.7321 0.011718 1.5356 0.011718 1.6953 0 7.1942 9.1264 10.652 20.465 10.691h0.013672 0.013672c11.338-0.04 20.461-3.4972 20.461-10.691 0-0.1626 0.010282-0.96271 0.013672-1.6953h-0.001953l-0.011719-1.6309v-0.98633l0.003907-0.001953v-11.369h0.027343c1.0035-1.2809 1.9337-2.6304 2.8242-4.0703-1.1827-2.0133-2.6327-3.8135-4.1816-5.4805-1.4366 0.7231-2.8325 1.5425-4.1504 2.4141-0.65947-0.6555-1.4013-1.1916-2.1309-1.752-0.71682-0.5758-1.5248-0.99833-2.291-1.4902 0.22813-1.6988 0.3413-3.3697 0.38672-5.1152-1.977-0.99494-4.0863-1.6551-6.2188-2.1289-0.85139 1.4309-1.6285 2.9812-2.3066 4.4961-0.80409-0.1344-1.613-0.18571-2.4219-0.19531h-0.015625-0.015625c-0.81037 0.01-1.6176 0.060513-2.4219 0.19531-0.67768-1.5149-1.4559-3.0652-2.3086-4.4961z" fill="#fff" stroke="#fff" stroke-linejoin="round" stroke-width="3"/> -<g transform="matrix(.050279 0 0 .050279 6.2574 989.54)" stroke-width=".32031"> -<g transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"> -<path d="m0 0s-0.325 1.994-0.515 1.976l-36.182-3.491c-2.879-0.278-5.115-2.574-5.317-5.459l-0.994-14.247-27.992-1.997-1.904 12.912c-0.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-0.994 14.247c-0.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-0.187 0.018-0.324-1.978-0.511-1.978l-0.049-7.83 30.658-4.944 1.004-14.374c0.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c0.146-0.01 0.29-0.016 0.434-0.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c0.423-2.871 2.93-5.037 5.831-5.037 0.142 0 0.284 5e-3 0.423 0.015l38.556 2.75c2.911 0.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"> -<path d="m0 0v-59.041c0.108-1e-3 0.216-5e-3 0.323-0.015l36.196-3.49c1.896-0.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c0.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c0.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c0.107 0.01 0.214 0.014 0.322 0.015v4.711l0.015 5e-3v54.325h0.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842 0.642-7.702 0.88-11.567 0.926v6e-3c-0.027 0-0.052-6e-3 -0.075-6e-3 -0.024 0-0.049 6e-3 -0.073 6e-3v-6e-3c-3.872-0.046-7.729-0.284-11.572-0.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17 0.216-8.34 0.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"> -<path d="m0 0-1.121-16.063c-0.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-0.094-7e-3 -0.188-0.01-0.281-0.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-0.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936 0.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c0.015-3.498 0.06-7.33 0.06-8.093 0-34.374 43.605-50.896 97.781-51.086h0.133c54.176 0.19 97.766 16.712 97.766 51.086 0 0.777 0.047 4.593 0.063 8.093z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"> -<path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"> -<path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"> -<path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"> -<path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"> -<path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042"/> -</g> -</g> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><g stroke-linejoin="round"><path d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8z" fill="#355570" stroke-linecap="round" stroke-width="2"/><path d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8zm0 2h48c3.324 0 6 2.676 6 6v48c0 3.324-2.676 6-6 6h-48c-3.324 0-6-2.676-6-6v-48c0-3.324 2.676-6 6-6z" fill-opacity=".19608" stroke-linecap="round" stroke-width="2"/><path d="m27.254 10c-2.1314.47383-4.2401 1.134-6.2168 2.1289.04521 1.7455.15796 3.4164.38672 5.1152-.76768.4919-1.574.91443-2.291 1.4902-.72854.5604-1.4731 1.0965-2.1328 1.752-1.3179-.8716-2.7115-1.691-4.1484-2.4141-1.549 1.667-2.9985 3.4672-4.1816 5.4805.89011 1.4399 1.8209 2.7894 2.8242 4.0703h.027343v9.9453 1.2617 1.1504l-.009765 1.6309h-.001953c.0031.7321.011718 1.5356.011718 1.6953 0 7.1942 9.1264 10.652 20.465 10.691h.013672.013672c11.338-.04 20.461-3.4972 20.461-10.691 0-.1626.010282-.96271.013672-1.6953h-.001953l-.011719-1.6309v-.98633l.003907-.001953v-11.369h.027343c1.0035-1.2809 1.9337-2.6304 2.8242-4.0703-1.1827-2.0133-2.6327-3.8135-4.1816-5.4805-1.4366.7231-2.8325 1.5425-4.1504 2.4141-.65947-.6555-1.4013-1.1916-2.1309-1.752-.71682-.5758-1.5248-.99833-2.291-1.4902.22813-1.6988.3413-3.3697.38672-5.1152-1.977-.99494-4.0863-1.6551-6.2188-2.1289-.85139 1.4309-1.6285 2.9812-2.3066 4.4961-.80409-.1344-1.613-.18571-2.4219-.19531h-.015625-.015625c-.81037.01-1.6176.060513-2.4219.19531-.67768-1.5149-1.4559-3.0652-2.3086-4.4961z" fill="#fff" stroke="#fff" stroke-width="3"/></g><g stroke-width=".32031" transform="matrix(.050279 0 0 .050279 6.2574 1.18)"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247-27.992-1.997-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142 0 .284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"/><path d="m0 0v-59.041c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325h.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027 0-.052-.006-.075-.006-.024 0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c.015-3.498.06-7.33.06-8.093 0-34.374 43.605-50.896 97.781-51.086h.133c54.176.19 97.766 16.712 97.766 51.086 0 .777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"/><path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_delete_split.svg b/editor/icons/icon_delete_split.svg index c24f7449d6..7424de3b8a 100644 --- a/editor/icons/icon_delete_split.svg +++ b/editor/icons/icon_delete_split.svg @@ -1,95 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg4" - sodipodi:docname="icon_delete_split.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - <metadata - id="metadata10"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs8" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="3066" - inkscape:window-height="1689" - id="namedview6" - showgrid="false" - inkscape:zoom="41.7193" - inkscape:cx="7.7924561" - inkscape:cy="6.0148972" - inkscape:window-x="134" - inkscape:window-y="55" - inkscape:window-maximized="1" - inkscape:current-layer="svg4" /> - <rect - style="fill:#800000" - id="rect12" - width="1.8456686" - height="2.0853658" - x="0.62321275" - y="6.9394455" /> - <rect - style="fill:#800000" - id="rect14" - width="1.6299411" - height="1.9894869" - x="12.488225" - y="7.1791425" /> - <rect - style="fill:#e9afaf" - id="rect37" - width="3.1640031" - height="0.40748528" - x="2.5407906" - y="7.9701433" /> - <rect - style="fill:#e9afaf" - id="rect39" - width="3.5235491" - height="0.52733386" - x="9.0126152" - y="8.0420523" /> - <rect - style="fill:#e9afaf" - id="rect41" - width="3.6433976" - height="0.4554247" - x="1.5110972" - y="-9.732645" - transform="rotate(123.99908)" /> - <rect - style="fill:#e9afaf" - id="rect41-3" - width="3.6433976" - height="0.4554247" - x="0.072069742" - y="-12.144793" - transform="rotate(123.99908)" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m.623213 6.939446h1.845669v2.085366h-1.845669z" fill="#800000"/><path d="m12.488225 7.179143h1.629941v1.989487h-1.629941z" fill="#800000"/><g fill="#e9afaf"><path d="m2.540791 7.970143h3.164003v.407485h-3.164003z"/><path d="m9.012615 8.042052h3.523549v.527334h-3.523549z"/><g transform="matrix(-.55917959 .82904655 -.82904655 -.55917959 0 0)"><path d="m1.511097-9.732645h3.643398v.455425h-3.643398z"/><path d="m.07207-12.144793h3.643398v.455425h-3.643398z"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_dictionary.svg b/editor/icons/icon_dictionary.svg index b0146bb5d3..668ef37a86 100644 --- a/editor/icons/icon_dictionary.svg +++ b/editor/icons/icon_dictionary.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 2v2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-8h-2zm3 0v2h2v-2h-2zm7 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2zm-2 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1zm-3 3v-1h-2v4h2v-3zm-5-1v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#77edb1"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2v2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-8zm3 0v2h2v-2zm7 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2zm-2 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2zm-3 3v-1h-2v4h2zm-5-1v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#77edb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_directional_light.svg b/editor/icons/icon_directional_light.svg index 31802ef0c1..faac2be134 100644 --- a/editor/icons/icon_directional_light.svg +++ b/editor/icons/icon_directional_light.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v3h2v-3h-2zm-2.5352 2.0508l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm7.0703 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-3.5352 1.9492c-1.6569 0-3 1.3432-3 3s1.3431 3 3 3 3-1.3432 3-3-1.3431-3-3-3zm-7 2v2h3v-2h-3zm11 0v2h3v-2h-3zm-7.5352 3.1211l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm7.0703 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.5352 1.8789v3h2v-3h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v3h2v-3zm-2.5352 2.0508-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm7.0703 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-3.5352 1.9492c-1.6569 0-3 1.3432-3 3s1.3431 3 3 3 3-1.3432 3-3-1.3431-3-3-3zm-7 2v2h3v-2zm11 0v2h3v-2zm-7.5352 3.1211-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm7.0703 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.5352 1.8789v3h2v-3z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_distraction_free.svg b/editor/icons/icon_distraction_free.svg index 3b59dd1650..8608b33f58 100644 --- a/editor/icons/icon_distraction_free.svg +++ b/editor/icons/icon_distraction_free.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v5l1.793-1.793 2.5 2.5 1.4141-1.4141-2.5-2.5 1.793-1.793h-5zm9 0l1.793 1.793-2.5 2.5 1.4141 1.4141 2.5-2.5 1.793 1.793v-5h-5zm-4.707 8.293l-2.5 2.5-1.793-1.793v5h5l-1.793-1.793 2.5-2.5-1.4141-1.4141zm5.4141 0l-1.4141 1.4141 2.5 2.5-1.793 1.793h5v-5l-1.793 1.793-2.5-2.5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v5l1.793-1.793 2.5 2.5 1.4141-1.4141-2.5-2.5 1.793-1.793h-5zm9 0 1.793 1.793-2.5 2.5 1.4141 1.4141 2.5-2.5 1.793 1.793v-5h-5zm-4.707 8.293-2.5 2.5-1.793-1.793v5h5l-1.793-1.793 2.5-2.5-1.4141-1.4141zm5.4141 0-1.4141 1.4141 2.5 2.5-1.793 1.793h5v-5l-1.793 1.793-2.5-2.5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_duplicate.svg b/editor/icons/icon_duplicate.svg index 4b27dcf62d..d506b7a8c7 100644 --- a/editor/icons/icon_duplicate.svg +++ b/editor/icons/icon_duplicate.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1v11h9v-6h-5v-5h-4zm5 0v4h4l-4-4zm-8 3v11h2 8v-2h-8v-9h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1v11h9v-6h-5v-5zm5 0v4h4zm-8 3v11h2 8v-2h-8v-9z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_dynamic_font.svg b/editor/icons/icon_dynamic_font.svg index 867939e475..fe5eca2e35 100644 --- a/editor/icons/icon_dynamic_font.svg +++ b/editor/icons/icon_dynamic_font.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m1 1037.4v2 1h1a1 1 0 0 1 1 -1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1 -1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2-4z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m4 5v2 1h1a1 1 0 0 1 1 -1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1 -1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2-4z" fill="#84c2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1 1037.4v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#e0e0e0"/><path d="m4 5v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#84c2ff" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_dynamic_font_data.svg b/editor/icons/icon_dynamic_font_data.svg index 644c987d8a..56426dd33e 100644 --- a/editor/icons/icon_dynamic_font_data.svg +++ b/editor/icons/icon_dynamic_font_data.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2 1h1a1 1 0 0 1 1 -1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1 -1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2-4zm0 5v2h2v-2h-2zm0 3v2h2v-2h-2zm0 3v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m4 5v2 1h1a1 1 0 0 1 1 -1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1 -1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2-4z" fill="#ff8484"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2zm0 5v2h2v-2zm0 3v2h2v-2zm0 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/><path d="m4 5v2 1h1a1 1 0 0 1 1-1h2v6a1 1 0 0 1 -1 1v1h1 2 1v-1a1 1 0 0 1 -1-1v-6h2a1 1 0 0 1 1 1h1v-1-2h-4-2z" fill="#ff8484"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit.svg b/editor/icons/icon_edit.svg index 1805aab54f..bb7ffa2fce 100644 --- a/editor/icons/icon_edit.svg +++ b/editor/icons/icon_edit.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-1 4v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3v-7zm1 1h1v5h-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit_bezier.svg b/editor/icons/icon_edit_bezier.svg index 542ff52aac..be9e2f22b8 100644 --- a/editor/icons/icon_edit_bezier.svg +++ b/editor/icons/icon_edit_bezier.svg @@ -1,73 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_edit_bezier.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1039" - inkscape:window-height="585" - id="namedview8" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="11.65471" - inkscape:cy="9.0988062" - inkscape:window-x="277" - inkscape:window-y="113" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g4"> - <path - style="fill:none;stroke:#84c2ff;stroke-width:2.20000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - d="m 1.4758015,1050.3064 c 11.6492855,0.7191 3.1098343,-11.4976 12.2331255,-11.3475" - id="path4526" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <circle - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" - id="path5846-3" - cy="1038.7133" - cx="13.470984" - r="1.8230016" /> - <circle - r="1.8230016" - cx="2.4449117" - cy="1050.1708" - id="circle1374" - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:5.64574671;stroke-miterlimit:4.9000001;stroke-dasharray:none;stroke-opacity:1" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1.4758015 1050.3064c11.6492855.7191 3.1098343-11.4976 12.2331255-11.3475" fill="none" stroke="#84c2ff" stroke-miterlimit="4.9" stroke-width="2.2"/><g fill="#e0e0e0"><circle cx="13.470984" cy="1038.7133" r="1.823002"/><circle cx="2.444912" cy="1050.1708" r="1.823002"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit_internal.svg b/editor/icons/icon_edit_internal.svg index 4acb54ed82..2a538102ce 100644 --- a/editor/icons/icon_edit_internal.svg +++ b/editor/icons/icon_edit_internal.svg @@ -1,67 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_edit_internal.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1008" - inkscape:window-height="562" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="9.4237288" - inkscape:cy="8" - inkscape:window-x="649" - inkscape:window-y="95" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(-3.322034,-1036.4)" - id="g4"> - <path - transform="translate(0,1036.4)" - d="M 7,1 C 6.446,1 6,1.446 6,2 v 2 h 4 V 2 C 10,1.446 9.554,1 9,1 Z M 6,5 v 7 l 2,3 2,-3 V 5 Z m 1,1 h 1 v 5 H 7 Z" - id="path2" - inkscape:connector-curvature="0" - style="fill:#e0e0e0" /> - </g> - <circle - style="fill:#e0e0e0;fill-opacity:1" - id="path822" - cx="10.508475" - cy="12.677966" - r="2.3728814" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m7 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3v-7zm1 1h1v5h-1z" transform="translate(-3.322034)"/><circle cx="10.508475" cy="12.677966" r="2.372881"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit_key.svg b/editor/icons/icon_edit_key.svg index 443a9a0455..883ddfda71 100644 --- a/editor/icons/icon_edit_key.svg +++ b/editor/icons/icon_edit_key.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m12 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-7 3c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm6 1v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-7 3c-.195 0-.38964.07519-.53906.22461l-3.2363 3.2363c-.29884.29884-.29884.77929 0 1.0781l3.2363 3.2363c.29884.29884.77929.29884 1.0781 0l3.2363-3.2363c.29884-.29884.29884-.77929 0-1.0781l-3.2363-3.2363c-.14942-.14942-.34406-.22461-.53906-.22461zm6 1v7l2 3 2-3v-7zm1 1h1v5h-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit_pivot.svg b/editor/icons/icon_edit_pivot.svg index 32c51a491f..ae303535b4 100644 --- a/editor/icons/icon_edit_pivot.svg +++ b/editor/icons/icon_edit_pivot.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v4h2v-4h-2zm-6 6v2h4v-2h-4zm10 0v0.61328l3.3711 1.3867h0.62891v-2h-4zm-3 1l3.291 8 0.94726-2.8203 1.8828 1.8828 0.94336-0.94141-1.8848-1.8828 2.8203-0.94726-8-3.291zm-1 3v4h2v-0.625l-1.3887-3.375h-0.61133z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v.61328l3.3711 1.3867h.62891v-2h-4zm-3 1 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291zm-1 3v4h2v-.625l-1.3887-3.375h-.61133z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_edit_resource.svg b/editor/icons/icon_edit_resource.svg index a744685de8..e16ca00355 100644 --- a/editor/icons/icon_edit_resource.svg +++ b/editor/icons/icon_edit_resource.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m3.9902-0.0097656a1.0001 1.0001 0 0 0 -0.69727 1.7168l1.293 1.293h-3.5859v2h3.5859l-1.293 1.293a1.0001 1.0001 0 1 0 1.4141 1.4141l3-3a1.0001 1.0001 0 0 0 0 -1.4141l-3-3a1.0001 1.0001 0 0 0 -0.7168 -0.30273z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".78431" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m3.9902-.0097656a1.0001 1.0001 0 0 0 -.69727 1.7168l1.293 1.293h-3.5859v2h3.5859l-1.293 1.293a1.0001 1.0001 0 1 0 1.4141 1.4141l3-3a1.0001 1.0001 0 0 0 0-1.4141l-3-3a1.0001 1.0001 0 0 0 -.7168-.30273z" fill="#e0e0e0" fill-opacity=".78431"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_3d_handle.svg b/editor/icons/icon_editor_3d_handle.svg index cd28f8d22e..687a5b184d 100644 --- a/editor/icons/icon_editor_3d_handle.svg +++ b/editor/icons/icon_editor_3d_handle.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<circle cx="8" cy="1044.4" r="8" fill-opacity=".29412"/> -<circle cx="8" cy="1044.4" r="7" fill="#fff"/> -<circle cx="8" cy="1044.4" r="5" fill="#ff8484"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill-opacity=".29412" r="8"/><circle cx="8" cy="8" fill="#fff" r="7"/><circle cx="8" cy="8" fill="#ff8484" r="5"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_control_anchor.svg b/editor/icons/icon_editor_control_anchor.svg index 5e75f9bdf5..11e2bb5175 100644 --- a/editor/icons/icon_editor_control_anchor.svg +++ b/editor/icons/icon_editor_control_anchor.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 0a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 1.0566 -0.11914l9.9434 6.1191-6.1172-9.9395a5 5 0 0 0 0.11719 -1.0605 5 5 0 0 0 -5 -5z" fill-opacity=".39216" style="paint-order:fill markers stroke"/> -<path transform="translate(0 1036.4)" d="m5 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 1.1406 -0.16992l9.8594 7.1699-7.168-9.8555a4 4 0 0 0 0.16797 -1.1445 4 4 0 0 0 -4 -4z" fill="#a5efac" fill-rule="evenodd"/> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<circle cx="5" cy="1041.4" r="0" fill="#a5efac" style="paint-order:fill markers stroke"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m5 0a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 1.0566-.11914l9.9434 6.1191-6.1172-9.9395a5 5 0 0 0 .11719-1.0605 5 5 0 0 0 -5-5z" fill-opacity=".39216" transform="translate(0 1036.4)"/><path d="m5 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 1.1406-.16992l9.8594 7.1699-7.168-9.8555a4 4 0 0 0 .16797-1.1445 4 4 0 0 0 -4-4z" fill="#a5efac" fill-rule="evenodd" transform="translate(0 1036.4)"/><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/><circle cx="5" cy="1041.4" fill="#a5efac" r="0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_handle.svg b/editor/icons/icon_editor_handle.svg index f215820ddc..8b11e782db 100644 --- a/editor/icons/icon_editor_handle.svg +++ b/editor/icons/icon_editor_handle.svg @@ -1,5 +1 @@ -<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> -<circle cx="5" cy="5" r="5" fill-opacity=".29412"/> -<circle cx="5" cy="5" r="4" fill="#fff"/> -<circle cx="5" cy="5" r="3" fill="#ff8484"/> -</svg> +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill-opacity=".29412" r="5"/><circle cx="5" cy="5" fill="#fff" r="4"/><circle cx="5" cy="5" fill="#ff8484" r="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_handle_add.svg b/editor/icons/icon_editor_handle_add.svg index a8bc1fdc9b..bf3b604d5c 100644 --- a/editor/icons/icon_editor_handle_add.svg +++ b/editor/icons/icon_editor_handle_add.svg @@ -1,5 +1 @@ -<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> -<circle cx="5" cy="5" r="5" fill-opacity=".29412"/> -<circle cx="5" cy="5" r="4" fill="#474747"/> -<path d="m4 2v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> -</svg> +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill-opacity=".29412" r="5"/><circle cx="5" cy="5" fill="#474747" r="4"/><path d="m4 2v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_internal_handle.svg b/editor/icons/icon_editor_internal_handle.svg index 8f6698f2b2..244e6b5d6c 100644 --- a/editor/icons/icon_editor_internal_handle.svg +++ b/editor/icons/icon_editor_internal_handle.svg @@ -1,70 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="10" - height="10" - version="1.1" - viewBox="0 0 10 10" - id="svg8" - sodipodi:docname="icon_editor_internal_handle.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1449" - inkscape:window-height="649" - id="namedview10" - showgrid="false" - inkscape:zoom="33.37544" - inkscape:cx="5.3723219" - inkscape:cy="4.9131249" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <circle - cx="5" - cy="5" - r="5" - fill-opacity=".29412" - id="circle2" /> - <circle - cx="5" - cy="5" - r="4" - fill="#fff" - id="circle4" /> - <circle - cx="5" - cy="5" - r="3" - fill="#ff8484" - id="circle6" - style="fill:#84b1ff;fill-opacity:1" /> -</svg> +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill-opacity=".29412" r="5"/><circle cx="5" cy="5" fill="#fff" r="4"/><circle cx="5" cy="5" fill="#84b1ff" r="3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_pivot.svg b/editor/icons/icon_editor_pivot.svg index 8b8d07c7de..8e00f60530 100644 --- a/editor/icons/icon_editor_pivot.svg +++ b/editor/icons/icon_editor_pivot.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 0v6h-6v4h6v6h4v-6h6v-4h-6v-6h-4zm1 7h2v2h-2v-2z" fill="#fff" fill-opacity=".70588"/> -<path transform="translate(0 1036.4)" d="m7 1v5h2v-5h-2zm-6 6v2h5v-2h-5zm9 0v2h5v-2h-5zm-3 3v5h2v-5h-2z" fill="#ff8484"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0v6h-6v4h6v6h4v-6h6v-4h-6v-6zm1 7h2v2h-2z" fill="#fff" fill-opacity=".70588"/><path d="m7 1v5h2v-5zm-6 6v2h5v-2zm9 0v2h5v-2zm-3 3v5h2v-5z" fill="#ff8484"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_plugin.svg b/editor/icons/icon_editor_plugin.svg index e68d787bd3..72f2bd5c28 100644 --- a/editor/icons/icon_editor_plugin.svg +++ b/editor/icons/icon_editor_plugin.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v8c5.52e-5 0.5523 0.44774 0.9999 1 1h3v0.27148a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1 -1.7305v-0.26953h3c0.55226-1e-4 0.99994-0.4477 1-1v-3h0.27148a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-0.26953v-3c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0001-.99994.4477-1 1v8c.0000552.5523.44774.9999 1 1h3v.27148a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -1-1.7305v-.26953h3c.55226-.0001.99994-.4477 1-1v-3h.27148a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-.26953v-3c-.000055-.5523-.44774-.9999-1-1h-8z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_position.svg b/editor/icons/icon_editor_position.svg index 7657eb5160..7b17fb5aa3 100644 --- a/editor/icons/icon_editor_position.svg +++ b/editor/icons/icon_editor_position.svg @@ -1,4 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709 -1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051 -1.582v-4.418z" fill="#fff" fill-opacity=".70588"/> -<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#ff8484"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709-1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051-1.582v-4.418z" fill="#fff" fill-opacity=".70588"/><path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1-.11914 4.2662 4.0576 0 0 1 1 .11914v-3.0605zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199-2.9199 2.9201 2.9201 0 0 0 -2.9199-2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -.13477-1 4.2662 4.0576 0 0 1 .13672-1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 .13477 1 4.2662 4.0576 0 0 1 -.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 .11914 4.2662 4.0576 0 0 1 -1-.11914z" fill="#ff8484"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_position_previous.svg b/editor/icons/icon_editor_position_previous.svg index 180156e13a..8c1d2992a5 100644 --- a/editor/icons/icon_editor_position_previous.svg +++ b/editor/icons/icon_editor_position_previous.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#69f" fill-opacity=".69804"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1-.11914 4.2662 4.0576 0 0 1 1 .11914v-3.0605zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199-2.9199 2.9201 2.9201 0 0 0 -2.9199-2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -.13477-1 4.2662 4.0576 0 0 1 .13672-1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 .13477 1 4.2662 4.0576 0 0 1 -.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 .11914 4.2662 4.0576 0 0 1 -1-.11914z" fill="#69f" fill-opacity=".69804"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_editor_position_unselected.svg b/editor/icons/icon_editor_position_unselected.svg index 3c7d479b88..b9a38ca371 100644 --- a/editor/icons/icon_editor_position_unselected.svg +++ b/editor/icons/icon_editor_position_unselected.svg @@ -1,4 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709 -1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051 -1.582v-4.418h-4z" fill-opacity=".41077"/> -<path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1 -0.11914 4.2662 4.0576 0 0 1 1 0.11914v-3.0605h-2zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 -2.9199 2.9201 2.9201 0 0 0 -2.9199 -2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -0.13477 -1 4.2662 4.0576 0 0 1 0.13672 -1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 0.13477 1 4.2662 4.0576 0 0 1 -0.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 0.11914 4.2662 4.0576 0 0 1 -1 -0.11914z" fill="#d9d9d9"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0v4.4199a4.2662 4.0576 0 0 0 -1.709 1.5801h-4.291v4h4.2949a4.2662 4.0576 0 0 0 1.7051 1.582v4.418h4v-4.4199a4.2662 4.0576 0 0 0 1.709-1.5801h4.291v-4h-4.2949a4.2662 4.0576 0 0 0 -1.7051-1.582v-4.418z" fill-opacity=".41077"/><path d="m7 1v3.0605a4.2662 4.0576 0 0 1 1-.11914 4.2662 4.0576 0 0 1 1 .11914v-3.0605zm1 4.0801a2.9201 2.9201 0 0 0 -2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199 2.9199 2.9201 2.9201 0 0 0 2.9199-2.9199 2.9201 2.9201 0 0 0 -2.9199-2.9199zm-7 1.9199v2h2.8691a4.2662 4.0576 0 0 1 -.13477-1 4.2662 4.0576 0 0 1 .13672-1h-2.8711zm11.131 0a4.2662 4.0576 0 0 1 .13477 1 4.2662 4.0576 0 0 1 -.13672 1h2.8711v-2h-2.8691zm-5.1309 4.9395v3.0605h2v-3.0605a4.2662 4.0576 0 0 1 -1 .11914 4.2662 4.0576 0 0 1 -1-.11914z" fill="#d9d9d9"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_enum.svg b/editor/icons/icon_enum.svg index e9c3fbbd2e..efa3050e95 100644 --- a/editor/icons/icon_enum.svg +++ b/editor/icons/icon_enum.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 2c-0.5304 8.01e-5 -1.0391 0.21085-1.4141 0.58594-0.37509 0.37501-0.58586 0.88366-0.58594 1.4141v1c-0.2652 4.01e-5 -0.51953 0.10542-0.70703 0.29297-0.18755 0.18751-0.29293 0.44183-0.29297 0.70703 4.0076e-5 0.2652 0.10542 0.51953 0.29297 0.70703 0.18751 0.18755 0.44183 0.29293 0.70703 0.29297v1c8.01e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.37509 0.88366 0.58586 1.4141 0.58594h1v-2h-1v-4h1v-2zm3 0v8h4v-2h-2v-1h2v-2h-2v-1h2v-2zm6 0v2h1v4h-1v2h1c0.5304-8.03e-5 1.0391-0.21085 1.4141-0.58594 0.37509-0.37501 0.58586-0.88366 0.58594-1.4141v-1c0.2652-4.01e-5 0.51953-0.10542 0.70703-0.29297 0.18755-0.18751 0.29293-0.44183 0.29297-0.70703-4e-5 -0.2652-0.10542-0.51953-0.29297-0.70703-0.1875-0.18755-0.44183-0.29293-0.70703-0.29297v-1c-8e-5 -0.5304-0.21085-1.0391-0.58594-1.4141-0.37501-0.37509-0.88366-0.58586-1.4141-0.58594z" fill="#e0e0e0"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2c-.5304.0000801-1.0391.21085-1.4141.58594-.37509.37501-.58586.88366-.58594 1.4141v1c-.2652.0000401-.51953.10542-.70703.29297-.18755.18751-.29293.44183-.29297.70703.00004008.2652.10542.51953.29297.70703.18751.18755.44183.29293.70703.29297v1c.0000801.5304.21085 1.0391.58594 1.4141.37501.37509.88366.58586 1.4141.58594h1v-2h-1v-4h1v-2zm3 0v8h4v-2h-2v-1h2v-2h-2v-1h2v-2zm6 0v2h1v4h-1v2h1c.5304-.0000803 1.0391-.21085 1.4141-.58594.37509-.37501.58586-.88366.58594-1.4141v-1c.2652-.0000401.51953-.10542.70703-.29297.18755-.18751.29293-.44183.29297-.70703-.00004-.2652-.10542-.51953-.29297-.70703-.1875-.18755-.44183-.29293-.70703-.29297v-1c-.00008-.5304-.21085-1.0391-.58594-1.4141-.37501-.37509-.88366-.58586-1.4141-.58594z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_environment.svg b/editor/icons/icon_environment.svg index 464f2d91a3..ee29342942 100644 --- a/editor/icons/icon_environment.svg +++ b/editor/icons/icon_environment.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#e0e0e0"> -<circle cx="8" cy="1044.4" r="6" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -<path d="m2 1044.4c4.5932 1.582 8.3985 1.0627 12 0" stroke-width="1.5"/> -<path d="m8 1038.4c-3 4-3 8 0 12" stroke-width="1.5"/> -<path d="m8 1038.4c3 4 3 8 0 12" stroke-width="1.5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0"><circle cx="8" cy="8" r="6" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/><g stroke-width="1.5" transform="translate(0 -1036.4)"><path d="m2 1044.4c4.5932 1.582 8.3985 1.0627 12 0"/><path d="m8 1038.4c-3 4-3 8 0 12"/><path d="m8 1038.4c3 4 3 8 0 12"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_error.svg b/editor/icons/icon_error.svg index 846bd88cb1..05e548068d 100644 --- a/editor/icons/icon_error.svg +++ b/editor/icons/icon_error.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<rect x="2.2204e-16" y="1044.4" width="8" height="8" ry="4" fill="#ff5d5d"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#ff5d5d" height="8" ry="4" width="8"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_error_sign.svg b/editor/icons/icon_error_sign.svg index bde0494a93..96aace5c0c 100644 --- a/editor/icons/icon_error_sign.svg +++ b/editor/icons/icon_error_sign.svg @@ -1,6 +1 @@ -<svg width="32" height="32" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1020.4)"> -<path d="m10 1048.4h12l6-6v-12l-6-6h-12l-6 6v12z" fill="#ff5d5d" fill-rule="evenodd"/> -<path transform="translate(0 1020.4)" d="m14 8l1 10h2l1-10h-4zm2 12a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#fff"/> -</g> -</svg> +<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1020.4)"><path d="m10 1048.4h12l6-6v-12l-6-6h-12l-6 6v12z" fill="#ff5d5d" fill-rule="evenodd"/><path d="m14 8 1 10h2l1-10zm2 12a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#fff" transform="translate(0 1020.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_expand_bottom_dock.svg b/editor/icons/icon_expand_bottom_dock.svg index 5a1760f377..09cc3b9b07 100644 --- a/editor/icons/icon_expand_bottom_dock.svg +++ b/editor/icons/icon_expand_bottom_dock.svg @@ -1,70 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_expand_bottom_dock.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1853" - inkscape:window-height="1016" - id="namedview8" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="9.4509357" - inkscape:cy="6.016355" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <path - style="fill:#e0e0e0" - d="M 4.2130251,4.516057 0.6774912,8.0515909 H 3.2131761 V 13.025308 H 5.2130155 V 8.0515909 H 7.7487004 L 4.2131665,4.516057 Z" - id="path829" - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccc" /> - <path - inkscape:connector-curvature="0" - id="path831" - d="M 11.907306,4.6119359 8.3717718,8.1474698 h 2.5356852 v 4.9737172 h 1.999839 V 8.1474698 h 2.535685 L 11.907447,4.6119359 Z" - style="fill:#e0e0e0" - sodipodi:nodetypes="ccccccccc" /> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect855" - width="14" - height="1.8305085" - x="1.2881356" - y="1.3700738" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m4.2130251 4.516057-3.5355339 3.5355339h2.5356849v4.9737171h1.9998394v-4.9737171h2.5356849l-3.5355339-3.5355339z"/><path d="m11.907306 4.6119359-3.5355342 3.5355339h2.5356852v4.9737172h1.999839v-4.9737172h2.535685l-3.535534-3.5355339z"/><path d="m1.288136 1.370074h14v1.830509h-14z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_favorites.svg b/editor/icons/icon_favorites.svg index ce42a45732..79e0c8475e 100644 --- a/editor/icons/icon_favorites.svg +++ b/editor/icons/icon_favorites.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1038.1-2.3741 4.0973-4.6259 1.0978l3.2361 3.4074-0.35866 4.6735 4.1389-1.9766 4.1572 1.9421-0.39534-4.6532 3.2218-3.3932-4.6259-1.0978-2.3741-4.0973z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1038.1-2.3741 4.0973-4.6259 1.0978 3.2361 3.4074-.35866 4.6735 4.1389-1.9766 4.1572 1.9421-.39534-4.6532 3.2218-3.3932-4.6259-1.0978z" fill="#e0e0e0" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file.svg b/editor/icons/icon_file.svg index 67a081a704..22d330fd56 100644 --- a/editor/icons/icon_file.svg +++ b/editor/icons/icon_file.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1036.4)" d="m2 1v14h12v-9h-5v-5zm8 0v4h4z" fill="#e0e0e0"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v14h12v-9h-5v-5zm8 0v4h4z" fill="#e0e0e0" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_big_thumb.svg b/editor/icons/icon_file_big_thumb.svg index 569b449a59..50900ab684 100644 --- a/editor/icons/icon_file_big_thumb.svg +++ b/editor/icons/icon_file_big_thumb.svg @@ -1,7 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 988.36)" d="m14 5c-2.1987 0-4 1.8013-4 4v46c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-33h-0.007812c0.00212-0.24832-0.079273-0.50098-0.28516-0.70703l-16-16c-0.18786-0.18693-0.44246-0.28939-0.70703-0.28906v-0.0039062h-23zm0 2h22v2 10c0 2.1987 1.8013 4 4 4h10 2v32c0 1.1253-0.87472 2-2 2h-36c-1.1253 0-2-0.8747-2-2v-46c0-1.1253 0.87472-2 2-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".58824" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m14 5c-2.1987 0-4 1.8013-4 4v46c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-33h-.007812c.00212-.24832-.079273-.50098-.28516-.70703l-16-16c-.18786-.18693-.44246-.28939-.70703-.28906v-.0039062h-23zm0 2h22v2 10c0 2.1987 1.8013 4 4 4h10 2v32c0 1.1253-.87472 2-2 2h-36c-1.1253 0-2-.8747-2-2v-46c0-1.1253.87472-2 2-2z" fill="#fff" fill-opacity=".58824" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_broken.svg b/editor/icons/icon_file_broken.svg index 7b05ab625e..af79f02c12 100644 --- a/editor/icons/icon_file_broken.svg +++ b/editor/icons/icon_file_broken.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1036.4)" d="m2 1v8.5859l1.293-1.293a1.0001 1.0001 0 0 1 0.69141 -0.29102 1.0001 1.0001 0 0 1 0.72266 0.29102l2.293 2.293 2.293-2.293a1.0001 1.0001 0 0 1 1.4141 0l2.293 2.293 1-1v-3.5859h-5v-5h-7zm8 0v4h4l-4-4zm-6 9.4141l-2 2v2.5859h12v-2.5859l-0.29297 0.29297a1.0001 1.0001 0 0 1 -1.4141 0l-2.293-2.293-2.293 2.293a1.0001 1.0001 0 0 1 -1.4141 0l-2.293-2.293z" fill="#ff5d5d"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v8.5859l1.293-1.293a1.0001 1.0001 0 0 1 .69141-.29102 1.0001 1.0001 0 0 1 .72266.29102l2.293 2.293 2.293-2.293a1.0001 1.0001 0 0 1 1.4141 0l2.293 2.293 1-1v-3.5859h-5v-5h-7zm8 0v4h4zm-6 9.4141-2 2v2.5859h12v-2.5859l-.29297.29297a1.0001 1.0001 0 0 1 -1.4141 0l-2.293-2.293-2.293 2.293a1.0001 1.0001 0 0 1 -1.4141 0l-2.293-2.293z" fill="#ff5d5d" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_broken_big_thumb.svg b/editor/icons/icon_file_broken_big_thumb.svg index 5e8fa607c1..08dee26f1c 100644 --- a/editor/icons/icon_file_broken_big_thumb.svg +++ b/editor/icons/icon_file_broken_big_thumb.svg @@ -1,7 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 988.36)" d="m14 5c-2.1987 0-4 1.8013-4 4v26.172a1.0001 1.0001 0 0 0 1.707 0.70703l3.293-3.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l9.293-9.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l8-8a1.0001 1.0001 0 0 0 0.29297 -0.70703v-11.172a1.0001 1.0001 0 0 0 -0.29297 -0.70703l-16-16a1.0001 1.0001 0 0 0 -0.70703 -0.29297h-23zm0 2h22v12c0 2.1987 1.8013 4 4 4h12v9.7578l-7 7-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-9.293 9.293-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-2.293 2.293v-23.758c0-1.1253 0.87473-2 2-2zm0.98438 28.83a1.0001 1.0001 0 0 0 -0.69141 0.29297l-4 4a1.0001 1.0001 0 0 0 -0.29297 0.70703v14.17c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-16.17a1.0001 1.0001 0 0 0 -1.707 -0.70703l-7.293 7.293-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-9.293 9.293-9.293-9.293a1.0001 1.0001 0 0 0 -0.72266 -0.29297zm0.015625 2.4141l9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l9.293-9.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l6.293-6.293v13.756c0 1.1253-0.87473 2-2 2h-36c-1.1253 0-2-0.87473-2-2v-13.756l3-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ff5d5d" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m14 5c-2.1987 0-4 1.8013-4 4v26.172a1.0001 1.0001 0 0 0 1.707.70703l3.293-3.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l9.293-9.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l8-8a1.0001 1.0001 0 0 0 .29297-.70703v-11.172a1.0001 1.0001 0 0 0 -.29297-.70703l-16-16a1.0001 1.0001 0 0 0 -.70703-.29297h-23zm0 2h22v12c0 2.1987 1.8013 4 4 4h12v9.7578l-7 7-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-9.293 9.293-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-2.293 2.293v-23.758c0-1.1253.87473-2 2-2zm.98438 28.83a1.0001 1.0001 0 0 0 -.69141.29297l-4 4a1.0001 1.0001 0 0 0 -.29297.70703v14.17c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-16.17a1.0001 1.0001 0 0 0 -1.707-.70703l-7.293 7.293-9.293-9.293a1.0001 1.0001 0 0 0 -1.4141 0l-9.293 9.293-9.293-9.293a1.0001 1.0001 0 0 0 -.72266-.29297zm.015625 2.4141 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l9.293-9.293 9.293 9.293a1.0001 1.0001 0 0 0 1.4141 0l6.293-6.293v13.756c0 1.1253-.87473 2-2 2h-36c-1.1253 0-2-.87473-2-2v-13.756l3-3z" fill="#ff5d5d" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_dead.svg b/editor/icons/icon_file_dead.svg index ec13e7087f..c40aa1b9a4 100644 --- a/editor/icons/icon_file_dead.svg +++ b/editor/icons/icon_file_dead.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1036.4)" d="m2 1v14h12v-9h-5v-5zm8 0v4h4zm-6.0078 6c0.1353-0.0020779 0.26567 0.050774 0.36133 0.14648l0.64648 0.64648 0.64648-0.64648c0.09183-0.091882 0.21582-0.14442 0.3457-0.14648 0.1353-0.00208 0.26567 0.050774 0.36133 0.14648 0.19521 0.19525 0.19521 0.51178 0 0.70703l-0.64648 0.64648 0.64648 0.64648c0.19521 0.19525 0.19521 0.51178 0 0.70703-0.19525 0.19521-0.51178 0.19521-0.70703 0l-0.64648-0.64648-0.64648 0.64648c-0.19525 0.19521-0.51178 0.19521-0.70703 0-0.19521-0.19525-0.19521-0.51178 0-0.70703l0.64648-0.64648-0.64648-0.64648c-0.19521-0.19525-0.19521-0.51178 0-0.70703 0.09183-0.091882 0.21582-0.14442 0.3457-0.14648zm6 0c0.1353-0.00208 0.26567 0.050774 0.36133 0.14648l0.64648 0.64648 0.64648-0.64648c0.09183-0.091883 0.21582-0.14442 0.3457-0.14648 0.1353-0.00208 0.26567 0.050774 0.36133 0.14648 0.19521 0.19525 0.19521 0.51178 0 0.70703l-0.64648 0.64648 0.64648 0.64648c0.19521 0.19525 0.19521 0.51178 0 0.70703-0.19525 0.19521-0.51178 0.19521-0.70703 0l-0.64648-0.64648-0.64648 0.64648c-0.19525 0.19521-0.51178 0.19521-0.70703 0-0.19521-0.19525-0.19521-0.51178 0-0.70703l0.64648-0.64648-0.64648-0.64648c-0.19521-0.19525-0.19521-0.51178 0-0.70703 0.09183-0.091882 0.21582-0.14442 0.3457-0.14648zm-6.4922 4h9c0.277 0 0.5 0.223 0.5 0.5s-0.223 0.5-0.5 0.5h-4.5c0 1.1046-0.89543 2-2 2s-2-0.8954-2-2h-0.5c-0.277 0-0.5-0.223-0.5-0.5s0.223-0.5 0.5-0.5zm1.5 1c-1.9e-5 0.5523 0.44771 1 1 1s1-0.4477 1-1z" fill="#ff5d5d"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1v14h12v-9h-5v-5zm8 0v4h4zm-6.0078 6c.1353-.0020779.26567.050774.36133.14648l.64648.64648.64648-.64648c.09183-.091882.21582-.14442.3457-.14648.1353-.00208.26567.050774.36133.14648.19521.19525.19521.51178 0 .70703l-.64648.64648.64648.64648c.19521.19525.19521.51178 0 .70703-.19525.19521-.51178.19521-.70703 0l-.64648-.64648-.64648.64648c-.19525.19521-.51178.19521-.70703 0-.19521-.19525-.19521-.51178 0-.70703l.64648-.64648-.64648-.64648c-.19521-.19525-.19521-.51178 0-.70703.09183-.091882.21582-.14442.3457-.14648zm6 0c.1353-.00208.26567.050774.36133.14648l.64648.64648.64648-.64648c.09183-.091883.21582-.14442.3457-.14648.1353-.00208.26567.050774.36133.14648.19521.19525.19521.51178 0 .70703l-.64648.64648.64648.64648c.19521.19525.19521.51178 0 .70703-.19525.19521-.51178.19521-.70703 0l-.64648-.64648-.64648.64648c-.19525.19521-.51178.19521-.70703 0-.19521-.19525-.19521-.51178 0-.70703l.64648-.64648-.64648-.64648c-.19521-.19525-.19521-.51178 0-.70703.09183-.091882.21582-.14442.3457-.14648zm-6.4922 4h9c.277 0 .5.223.5.5s-.223.5-.5.5h-4.5c0 1.1046-.89543 2-2 2s-2-.8954-2-2h-.5c-.277 0-.5-.223-.5-.5s.223-.5.5-.5zm1.5 1c-.000019.5523.44771 1 1 1s1-.4477 1-1z" fill="#ff5d5d" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_dead_big_thumb.svg b/editor/icons/icon_file_dead_big_thumb.svg index 2ac8d1e9df..79369873a6 100644 --- a/editor/icons/icon_file_dead_big_thumb.svg +++ b/editor/icons/icon_file_dead_big_thumb.svg @@ -1,7 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<g transform="translate(0 -1.6949e-5)"> -<path d="m14 993.36c-2.1987 0-4 1.8013-4 4v46c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-33h-0.0078c2e-3 -0.2483-0.0793-0.501-0.28516-0.707l-16-16c-0.18788-0.18693-0.44247-0.28939-0.70704-0.28907v-4e-3zm0 2h22v12c0 2.1987 1.8013 4 4 4h12v32c0 1.1253-0.87472 2-2 2h-36c-1.1253 0-2-0.8747-2-2v-46c0-1.1253 0.87472-2 2-2zm2.9512 22.002a1 1 0 0 0 -0.60938 0.2461 1 1 0 0 0 -0.09375 1.4121l2.9238 3.3398-2.9238 3.3418a1 1 0 0 0 0.09375 1.4121 1 1 0 0 0 1.4102 -0.094l2.748-3.1407 2.748 3.1407a1 1 0 0 0 1.4102 0.094 1 1 0 0 0 0.09375 -1.4121l-2.9238-3.3418 2.9238-3.3398a1 1 0 0 0 -0.09375 -1.4121 1 1 0 0 0 -0.63867 -0.2461 1 1 0 0 0 -0.77148 0.3398l-2.748 3.1406-2.748-3.1406a1 1 0 0 0 -0.80078 -0.3398zm23 0a1 1 0 0 0 -0.60938 0.2461 1 1 0 0 0 -0.09375 1.4121l2.9238 3.3398-2.9238 3.3418a1 1 0 0 0 0.09375 1.4121 1 1 0 0 0 1.4102 -0.094l2.748-3.1407 2.748 3.1407a1 1 0 0 0 1.4102 0.094 1 1 0 0 0 0.09375 -1.4121l-2.9238-3.3418 2.9238-3.3398a1 1 0 0 0 -0.09375 -1.4121 1 1 0 0 0 -0.63867 -0.2461 1 1 0 0 0 -0.77148 0.3398l-2.748 3.1406-2.748-3.1406a1 1 0 0 0 -0.80078 -0.3398zm-18.951 13.998a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h3v3c0 2.7527 2.2473 5 5 5s5-2.2473 5-5v-3h9a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm5 2h6v3c0 1.6793-1.3207 3-3 3s-3-1.3207-3-3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ff5d5d" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m14 993.36c-2.1987 0-4 1.8013-4 4v46c0 2.1987 1.8013 4 4 4h36c2.1987 0 4-1.8013 4-4v-33h-.0078c.002-.2483-.0793-.501-.28516-.707l-16-16c-.18788-.18693-.44247-.28939-.70704-.28907v-.004zm0 2h22v12c0 2.1987 1.8013 4 4 4h12v32c0 1.1253-.87472 2-2 2h-36c-1.1253 0-2-.8747-2-2v-46c0-1.1253.87472-2 2-2zm2.9512 22.002a1 1 0 0 0 -.60938.2461 1 1 0 0 0 -.09375 1.4121l2.9238 3.3398-2.9238 3.3418a1 1 0 0 0 .09375 1.4121 1 1 0 0 0 1.4102-.094l2.748-3.1407 2.748 3.1407a1 1 0 0 0 1.4102.094 1 1 0 0 0 .09375-1.4121l-2.9238-3.3418 2.9238-3.3398a1 1 0 0 0 -.09375-1.4121 1 1 0 0 0 -.63867-.2461 1 1 0 0 0 -.77148.3398l-2.748 3.1406-2.748-3.1406a1 1 0 0 0 -.80078-.3398zm23 0a1 1 0 0 0 -.60938.2461 1 1 0 0 0 -.09375 1.4121l2.9238 3.3398-2.9238 3.3418a1 1 0 0 0 .09375 1.4121 1 1 0 0 0 1.4102-.094l2.748-3.1407 2.748 3.1407a1 1 0 0 0 1.4102.094 1 1 0 0 0 .09375-1.4121l-2.9238-3.3418 2.9238-3.3398a1 1 0 0 0 -.09375-1.4121 1 1 0 0 0 -.63867-.2461 1 1 0 0 0 -.77148.3398l-2.748 3.1406-2.748-3.1406a1 1 0 0 0 -.80078-.3398zm-18.951 13.998a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h3v3c0 2.7527 2.2473 5 5 5s5-2.2473 5-5v-3h9a1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm5 2h6v3c0 1.6793-1.3207 3-3 3s-3-1.3207-3-3z" fill="#ff5d5d" transform="translate(0 -988.360017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_dead_medium_thumb.svg b/editor/icons/icon_file_dead_medium_thumb.svg index 010019ae03..62496daaae 100644 --- a/editor/icons/icon_file_dead_medium_thumb.svg +++ b/editor/icons/icon_file_dead_medium_thumb.svg @@ -1,7 +1 @@ -<svg width="32" height="32" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1020.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1020.4)" d="m5 1c-1.6447 0-3 1.3553-3 3v24c0 1.6447 1.3553 3 3 3h22c1.6447 0 3-1.3553 3-3v-16.809c-5.1e-5 -0.2652-0.10543-0.51952-0.29297-0.70703l-9.1816-9.1895c-0.18719-0.18825-0.44155-0.29435-0.70703-0.29492h-14.818zm0 2h14v6c0 1.6447 1.3553 3 3 3h6v16c0 0.5713-0.42868 1-1 1h-22c-0.57133 0-1-0.4287-1-1v-24c0-0.5713 0.42867-1 1-1zm1.9863 11.002a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l1.293 1.293-1.293 1.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l1.293-1.293 1.293 1.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-1.293-1.293 1.293-1.293a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102l-1.293 1.293-1.293-1.293a1 1 0 0 0 -0.7207 -0.29102zm14 0a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l1.293 1.293-1.293 1.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l1.293-1.293 1.293 1.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-1.293-1.293 1.293-1.293a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102l-1.293 1.293-1.293-1.293a1 1 0 0 0 -0.7207 -0.29102zm-13.986 7.998a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h1a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2 -3.4648h9a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-18zm3 2h4a2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ff5d5d" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.6447 0-3 1.3553-3 3v24c0 1.6447 1.3553 3 3 3h22c1.6447 0 3-1.3553 3-3v-16.809c-.000051-.2652-.10543-.51952-.29297-.70703l-9.1816-9.1895c-.18719-.18825-.44155-.29435-.70703-.29492h-14.818zm0 2h14v6c0 1.6447 1.3553 3 3 3h6v16c0 .5713-.42868 1-1 1h-22c-.57133 0-1-.4287-1-1v-24c0-.5713.42867-1 1-1zm1.9863 11.002a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l1.293 1.293-1.293 1.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l1.293-1.293 1.293 1.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-1.293-1.293 1.293-1.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102l-1.293 1.293-1.293-1.293a1 1 0 0 0 -.7207-.29102zm14 0a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l1.293 1.293-1.293 1.293a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l1.293-1.293 1.293 1.293a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-1.293-1.293 1.293-1.293a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102l-1.293 1.293-1.293-1.293a1 1 0 0 0 -.7207-.29102zm-13.986 7.998a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h1a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2-3.4648h9a1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm3 2h4a2 2 0 0 1 -2 2 2 2 0 0 1 -2-2z" fill="#ff5d5d" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_dialog.svg b/editor/icons/icon_file_dialog.svg index fafb940611..7708659c21 100644 --- a/editor/icons/icon_file_dialog.svg +++ b/editor/icons/icon_file_dialog.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8zm3 2h3c1 0 1 2 2 2h3v4h-8z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8zm3 2h3c1 0 1 2 2 2h3v4h-8z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_list.svg b/editor/icons/icon_file_list.svg index 6eee2e63cf..e47c8b18cb 100644 --- a/editor/icons/icon_file_list.svg +++ b/editor/icons/icon_file_list.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 2v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8zm-4 5v2h2v-2h-2zm4 0v2h8v-2h-8z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2zm-4 5v2h2v-2zm4 0v2h8v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_medium_thumb.svg b/editor/icons/icon_file_medium_thumb.svg index a143aa5c8f..4c7d78b58e 100644 --- a/editor/icons/icon_file_medium_thumb.svg +++ b/editor/icons/icon_file_medium_thumb.svg @@ -1,7 +1 @@ -<svg width="32" height="32" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1020.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1020.4)" d="m5 1c-1.6447 0-3 1.3553-3 3v24c0 1.6447 1.3553 3 3 3h22c1.6447 0 3-1.3553 3-3v-16.809c-5.1e-5 -0.2652-0.10543-0.51952-0.29297-0.70703l-9.1816-9.1895c-0.18719-0.18825-0.44155-0.29435-0.70703-0.29492zm0 2h14v6c0 1.6447 1.3553 3 3 3h6v16c0 0.5713-0.42868 1-1 1h-22c-0.57133 0-1-0.4287-1-1v-24c0-0.5713 0.42867-1 1-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".58824" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.6447 0-3 1.3553-3 3v24c0 1.6447 1.3553 3 3 3h22c1.6447 0 3-1.3553 3-3v-16.809c-.000051-.2652-.10543-.51952-.29297-.70703l-9.1816-9.1895c-.18719-.18825-.44155-.29435-.70703-.29492zm0 2h14v6c0 1.6447 1.3553 3 3 3h6v16c0 .5713-.42868 1-1 1h-22c-.57133 0-1-.4287-1-1v-24c0-.5713.42867-1 1-1z" fill="#fff" fill-opacity=".58824" transform="translate(0 -.000017)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_file_thumbnail.svg b/editor/icons/icon_file_thumbnail.svg index 074856ce75..571335a935 100644 --- a/editor/icons/icon_file_thumbnail.svg +++ b/editor/icons/icon_file_thumbnail.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 2v5h5v-5h-5zm7 0v5h5v-5h-5zm-7 7v5h5v-5h-5zm7 0v5h5v-5h-5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2v5h5v-5zm7 0v5h5v-5zm-7 7v5h5v-5zm7 0v5h5v-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_filesystem.svg b/editor/icons/icon_filesystem.svg index 41e0348d68..da6fa2ad60 100644 --- a/editor/icons/icon_filesystem.svg +++ b/editor/icons/icon_filesystem.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v5h2v8h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-2h3v-4h-2l-1-1h-3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v5h2v8h1 5v1h6v-3h-6v1h-5v-4h5v1h6v-3h-6v1h-5v-2h3v-4h-2l-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_fixed_material.svg b/editor/icons/icon_fixed_material.svg index e77e89df31..903691689b 100644 --- a/editor/icons/icon_fixed_material.svg +++ b/editor/icons/icon_fixed_material.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1037.4a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_fixed_spatial_material.svg b/editor/icons/icon_fixed_spatial_material.svg index d69a762d7e..ba1e251088 100644 --- a/editor/icons/icon_fixed_spatial_material.svg +++ b/editor/icons/icon_fixed_spatial_material.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -4.8887 2h2.8887 6.8965a7 7 0 0 0 -4.8965 -2z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m3.1113 3a7 7 0 0 0 -1.4277 2h2.3164a2 2 0 0 1 2 -2h-2.8887zm2.8887 0a2 2 0 0 1 2 2h6.3145a7 7 0 0 0 -1.418 -2h-6.8965z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1.6836 5a7 7 0 0 0 -0.60547 2h4.9219a2 2 0 0 1 -2 -2h-2.3164zm4.3164 2h8.9199a7 7 0 0 0 -0.60547 -2h-6.3145a2 2 0 0 1 -2 2z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1.0781 7a7 7 0 0 0 -0.078125 1 7 7 0 0 0 0.080078 1h13.842a7 7 0 0 0 0.078125 -1 7 7 0 0 0 -0.080078 -1h-8.9199-4.9219z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1.0801 9a7 7 0 0 0 0.60547 2h12.631a7 7 0 0 0 0.60547 -2h-13.842z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m3.1035 13a7 7 0 0 0 4.8965 2 7 7 0 0 0 4.8887 -2h-9.7852z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1.6855 11a7 7 0 0 0 1.418 2h9.7852a7 7 0 0 0 1.4277 -2h-12.631z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -4.8887 2h2.8887 6.8965a7 7 0 0 0 -4.8965-2z" fill="#ff7070"/><path d="m3.1113 3a7 7 0 0 0 -1.4277 2h2.3164a2 2 0 0 1 2-2zm2.8887 0a2 2 0 0 1 2 2h6.3145a7 7 0 0 0 -1.418-2z" fill="#ffeb70"/><path d="m1.6836 5a7 7 0 0 0 -.60547 2h4.9219a2 2 0 0 1 -2-2h-2.3164zm4.3164 2h8.9199a7 7 0 0 0 -.60547-2h-6.3145a2 2 0 0 1 -2 2z" fill="#9dff70"/><path d="m1.0781 7a7 7 0 0 0 -.078125 1 7 7 0 0 0 .080078 1h13.842a7 7 0 0 0 .078125-1 7 7 0 0 0 -.080078-1h-8.9199-4.9219z" fill="#70ffb9"/><path d="m1.0801 9a7 7 0 0 0 .60547 2h12.631a7 7 0 0 0 .60547-2h-13.842z" fill="#70deff"/><path d="m3.1035 13a7 7 0 0 0 4.8965 2 7 7 0 0 0 4.8887-2z" fill="#ff70ac"/><path d="m1.6855 11a7 7 0 0 0 1.418 2h9.7852a7 7 0 0 0 1.4277-2h-12.631z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_float.svg b/editor/icons/icon_float.svg index 4091101fd1..5c09d4c244 100644 --- a/editor/icons/icon_float.svg +++ b/editor/icons/icon_float.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 2a3 3 0 0 0 -3 3v5h2v-2h2v-2h-2v-1a1 1 0 0 1 1 -1h1v-2zm3 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-5zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2z" fill="#61daf4"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2a3 3 0 0 0 -3 3v5h2v-2h2v-2h-2v-1a1 1 0 0 1 1-1h1v-2zm3 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-5zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2z" fill="#61daf4"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_folder.svg b/editor/icons/icon_folder.svg index 4b5b9359ea..00ff7a95e9 100644 --- a/editor/icons/icon_folder.svg +++ b/editor/icons/icon_folder.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 2a1 1 0 0 0 -1 1v2 6 2a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-4a1 1 0 0 1 -1 -1v-1a1 1 0 0 0 -1 -1h-6z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 2a1 1 0 0 0 -1 1v2 6 2a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1h-4a1 1 0 0 1 -1-1v-1a1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_folder_big_thumb.svg b/editor/icons/icon_folder_big_thumb.svg index a7e830b019..a620d17b8f 100644 --- a/editor/icons/icon_folder_big_thumb.svg +++ b/editor/icons/icon_folder_big_thumb.svg @@ -1,5 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<path transform="translate(0 988.36)" d="m12 10c-2.2091 0-4 1.7909-4 4v37h0.13086c0.45564 1.7647 2.0466 2.9982 3.8691 3h40c2.2091 0 4-1.7909 4-4v-28c0-2.2091-1.7909-4-4-4h-16l-2-4c-0.98796-1.9759-1.7909-4-4-4z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m12 10c-2.2091 0-4 1.7909-4 4v37h.13086c.45564 1.7647 2.0466 2.9982 3.8691 3h40c2.2091 0 4-1.7909 4-4v-28c0-2.2091-1.7909-4-4-4h-16l-2-4c-.98796-1.9759-1.7909-4-4-4z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_folder_medium_thumb.svg b/editor/icons/icon_folder_medium_thumb.svg index 23b9ffc25c..431650aff0 100644 --- a/editor/icons/icon_folder_medium_thumb.svg +++ b/editor/icons/icon_folder_medium_thumb.svg @@ -1,5 +1 @@ -<svg width="32" height="32" version="1.1" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1020.4)"> -<path d="m6 1025.4c-1.1046 0-2 0.8954-2 2v18.5h0.06543c0.22782 0.8823 1.0233 1.4991 1.9346 1.5h20c1.1046 0 2-0.8954 2-2v-14c0-1.1046-0.89543-2-2-2h-8l-1-2c-0.49398-0.988-0.89543-2-2-2z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round"/> -</g> -</svg> +<svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m6 1025.4c-1.1046 0-2 .8954-2 2v18.5h.06543c.22782.8823 1.0233 1.4991 1.9346 1.5h20c1.1046 0 2-.8954 2-2v-14c0-1.1046-.89543-2-2-2h-8l-1-2c-.49398-.988-.89543-2-2-2z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" transform="translate(0 -1020.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_font.svg b/editor/icons/icon_font.svg index 1389ed4024..4b71b59d2e 100644 --- a/editor/icons/icon_font.svg +++ b/editor/icons/icon_font.svg @@ -1,13 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="1" y="1037.4" width="14" height="2"/> -<rect x="7" y="1037.4" width="2" height="14"/> -<rect x="5" y="1050.4" width="6" height="1"/> -<rect transform="rotate(90)" x="1037.4" y="-2" width="4" height="1"/> -<rect transform="rotate(90)" x="1037.4" y="-15" width="4" height="1"/> -<path transform="translate(0 1036.4)" d="m2 3v2a2 2 0 0 1 2 -2h-2z"/> -<path transform="translate(0 1036.4)" d="m12 3a2 2 0 0 1 2 2v-2h-2z"/> -<path d="m5 1050.4a2 2 0 0 0 2 -2v2h-2z"/> -<path d="m11 1050.4a2 2 0 0 1 -2 -2v2h2z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m1 1037.4h14v2h-14z"/><path d="m7 1037.4h2v14h-2z"/><path d="m5 1050.4h6v1h-6z"/><path d="m1037.4-2h4v1h-4z" transform="rotate(90)"/><path d="m1037.4-15h4v1h-4z" transform="rotate(90)"/><path d="m2 3v2a2 2 0 0 1 2-2z" transform="translate(0 1036.4)"/><path d="m12 3a2 2 0 0 1 2 2v-2z" transform="translate(0 1036.4)"/><path d="m5 1050.4a2 2 0 0 0 2-2v2z"/><path d="m11 1050.4a2 2 0 0 1 -2-2v2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_forward.svg b/editor/icons/icon_forward.svg index 6b638731a9..aecd4b362c 100644 --- a/editor/icons/icon_forward.svg +++ b/editor/icons/icon_forward.svg @@ -1,5 +1 @@ -<svg width="8" height="16" version="1.1" viewBox="0 0 8 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1038.4 4 6-4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 8 16" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m2 1038.4 4 6-4 6" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_g_i_probe.svg b/editor/icons/icon_g_i_probe.svg index 37b2cda223..5a5bfd3c5a 100644 --- a/editor/icons/icon_g_i_probe.svg +++ b/editor/icons/icon_g_i_probe.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4v-2h-3v-10h9v-2h-10zm9 3a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.459v0.54102c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-0.54102a4 4 0 0 0 2 -3.459 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-1 8v1h2v-1h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4v-2h-3v-10h9v-2zm9 3a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.459v.54102c0 .55401.44599 1 1 1h2c.55401 0 1-.44599 1-1v-.54102a4 4 0 0 0 2-3.459 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm-1 8v1h2v-1z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_g_i_probe_data.svg b/editor/icons/icon_g_i_probe_data.svg index f5a0961a35..d4765be30f 100644 --- a/editor/icons/icon_g_i_probe_data.svg +++ b/editor/icons/icon_g_i_probe_data.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4v-2h-3v-10h9v-2h-10zm2 3v2h2v-2h-2zm7 0a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.459v0.54102c0 0.55401 0.44599 1 1 1h2c0.55401 0 1-0.44599 1-1v-0.54102a4 4 0 0 0 2 -3.459 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-7 1v2h2v-2h-2zm0 3v2h2v-2h-2zm6 4v1h2v-1h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4v-2h-3v-10h9v-2zm2 3v2h2v-2zm7 0a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.459v.54102c0 .55401.44599 1 1 1h2c.55401 0 1-.44599 1-1v-.54102a4 4 0 0 0 2-3.459 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm-7 1v2h2v-2zm0 3v2h2v-2zm6 4v1h2v-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_generic_6_d_o_f_joint.svg b/editor/icons/icon_generic_6_d_o_f_joint.svg index dad266fff1..30d892e7a1 100644 --- a/editor/icons/icon_generic_6_d_o_f_joint.svg +++ b/editor/icons/icon_generic_6_d_o_f_joint.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a1 1 0 0 0 -1 1v4.8828l-3.5527-1.7773a1 1 0 0 0 -0.48438 -0.10352 1 1 0 0 0 -0.85742 0.55078 1 1 0 0 0 0.44727 1.3418l3.2109 1.6055-3.2109 1.6055a1 1 0 0 0 -0.44727 1.3418 1 1 0 0 0 1.3418 0.44726l3.5527-1.7773v3.8828a1 1 0 0 0 1 1 1 1 0 0 0 1 -1v-3.8828l3.5527 1.7773a1 1 0 0 0 1.3418 -0.44726 1 1 0 0 0 -0.44726 -1.3418l-3.2109-1.6055 3.2109-1.6055a1 1 0 0 0 0.44726 -1.3418 1 1 0 0 0 -0.88672 -0.55273 1 1 0 0 0 -0.45508 0.10547l-3.5527 1.7773v-4.8828a1 1 0 0 0 -1 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a1 1 0 0 0 -1 1v4.8828l-3.5527-1.7773a1 1 0 0 0 -.48438-.10352 1 1 0 0 0 -.85742.55078 1 1 0 0 0 .44727 1.3418l3.2109 1.6055-3.2109 1.6055a1 1 0 0 0 -.44727 1.3418 1 1 0 0 0 1.3418.44726l3.5527-1.7773v3.8828a1 1 0 0 0 1 1 1 1 0 0 0 1-1v-3.8828l3.5527 1.7773a1 1 0 0 0 1.3418-.44726 1 1 0 0 0 -.44726-1.3418l-3.2109-1.6055 3.2109-1.6055a1 1 0 0 0 .44726-1.3418 1 1 0 0 0 -.88672-.55273 1 1 0 0 0 -.45508.10547l-3.5527 1.7773v-4.8828a1 1 0 0 0 -1-1z" fill="#fc9c9c" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_baked_lightmap.svg b/editor/icons/icon_gizmo_baked_lightmap.svg index cc21b7c1c5..9568f7ff25 100644 --- a/editor/icons/icon_gizmo_baked_lightmap.svg +++ b/editor/icons/icon_gizmo_baked_lightmap.svg @@ -1,4 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<path d="m18 8c-2.209 2.2e-4 -3.9998 1.791-4 4l0.01563 20h-6.0156c-2.209 2.2e-4 -3.9998 1.791-4 4v71.076c0 9.3065 7.6174 16.924 16.924 16.924h61.076c2.209-2e-4 3.9998-1.791 4-4v-12c-2.21e-4 -2.209-1.791-3.9998-4-4h-58v-40h20v12c2.21e-4 2.209 1.791 3.9998 4 4h32c2.209-2e-4 3.9998-1.791 4-4v-12h20v4c2e-3 0.72576 0.20093 1.4374 0.57617 2.0586-0.19584-6e-3 -0.37901-0.058594-0.57617-0.058594-10.998 0-20 9.0016-20 20-4e-6 0-4e-6 0.0098 0 0.0098 0.0088 6.2734 3.0833 12.01 8 15.756v2.2383c0 2.8834 1.66 5.3456 4 6.75v5.2461c2.21e-4 2.209 1.791 3.9998 4 4h8c2.209-2e-4 3.9998-1.791 4-4v-5.248c2.3405-1.4043 4-3.8682 4-6.752v-2.2344c4.9179-3.7475 7.9931-9.4866 8-15.762 0-7.935-4.7186-14.774-11.459-18h7.459c2.209-2.2e-4 3.9998-1.791 4-4v-32c-2.2e-4 -2.209-1.791-3.9998-4-4l-6-0.003906v-19.996c-2.2e-4 -2.209-1.791-3.9998-4-4zm8 38c1.1519 0 2 0.84806 2 2 3e-6 1.1519-0.84806 2-2 2s-2-0.84806-2-2c-3e-6 -1.1519 0.84806-2 2-2zm25 0c1.1519 0 2 0.84806 2 2 3e-6 1.1519-0.84806 2-2 2s-2-0.84806-2-2c-3e-6 -1.1519 0.84806-2 2-2zm26 0c1.1519 0 2 0.84806 2 2 3e-6 1.1519-0.84806 2-2 2s-2-0.84806-2-2c-3e-6 -1.1519 0.84806-2 2-2zm25 0c1.1519 0 2 0.84806 2 2s-0.84806 2-2 2-2-0.84806-2-2c-3e-6 -1.1519 0.84806-2 2-2zm2 38c3.3611 0 6 2.6388 6 6 0 3.361-2.639 6-6 6-3.361 0-6-2.639-6-6 0-3.3612 2.6389-6 6-6z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path d="m18 12v16h92v-16zm-10 24v71.076c0 7.1594 5.7644 12.924 12.924 12.924h61.076v-12h-62v-48h88v8h12v-32zm18 6c3.3137-1e-5 6 2.6863 6 6 9e-6 3.3137-2.6863 6-6 6-3.3137 1e-5 -6-2.6863-6-6-9e-6 -3.3137 2.6863-6 6-6zm25 0c3.3137-1e-5 6 2.6863 6 6 9e-6 3.3137-2.6863 6-6 6-3.3137 1e-5 -6-2.6863-6-6-9e-6 -3.3137 2.6863-6 6-6zm26 0c3.3137-1e-5 6 2.6863 6 6 9e-6 3.3137-2.6863 6-6 6-3.3137 1e-5 -6-2.6863-6-6-9e-6 -3.3137 2.6863-6 6-6zm25 0c3.3137-1e-5 6 2.6863 6 6 1e-5 3.3137-2.6863 6-6 6-3.3137 1e-5 -6-2.6863-6-6-9e-6 -3.3137 2.6863-6 6-6zm-54 26v8h32v-8zm56 6c-8.8365 0-16 7.1634-16 16 8e-3 5.7082 3.0565 10.98 8 13.834v4.166c0 2.216 1.784 4 4 4h8c2.216 0 4-1.784 4-4v-4.1602c4.945-2.855 7.9937-8.1299 8-13.84 0-8.8366-7.1635-16-16-16zm0 6c5.5228 0 10 4.4771 10 10 0 5.5228-4.4772 10-10 10-5.5228 0-10-4.4772-10-10 0-5.5229 4.4772-10 10-10zm-4 36v4h8v-4z" fill="#f7f5cf"/> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m18 8c-2.209.00022-3.9998 1.791-4 4l.01563 20h-6.0156c-2.209.00022-3.9998 1.791-4 4v71.076c0 9.3065 7.6174 16.924 16.924 16.924h61.076c2.209-.0002 3.9998-1.791 4-4v-12c-.000221-2.209-1.791-3.9998-4-4h-58v-40h20v12c.000221 2.209 1.791 3.9998 4 4h32c2.209-.0002 3.9998-1.791 4-4v-12h20v4c.002.72576.20093 1.4374.57617 2.0586-.19584-.006-.37901-.058594-.57617-.058594-10.998 0-20 9.0016-20 20-.000004 0-.000004.0098 0 .0098.0088 6.2734 3.0833 12.01 8 15.756v2.2383c0 2.8834 1.66 5.3456 4 6.75v5.2461c.000221 2.209 1.791 3.9998 4 4h8c2.209-.0002 3.9998-1.791 4-4v-5.248c2.3405-1.4043 4-3.8682 4-6.752v-2.2344c4.9179-3.7475 7.9931-9.4866 8-15.762 0-7.935-4.7186-14.774-11.459-18h7.459c2.209-.00022 3.9998-1.791 4-4v-32c-.00022-2.209-1.791-3.9998-4-4l-6-.003906v-19.996c-.00022-2.209-1.791-3.9998-4-4zm8 38c1.1519 0 2 .84806 2 2 .000003 1.1519-.84806 2-2 2s-2-.84806-2-2c-.000003-1.1519.84806-2 2-2zm25 0c1.1519 0 2 .84806 2 2 .000003 1.1519-.84806 2-2 2s-2-.84806-2-2c-.000003-1.1519.84806-2 2-2zm26 0c1.1519 0 2 .84806 2 2 .000003 1.1519-.84806 2-2 2s-2-.84806-2-2c-.000003-1.1519.84806-2 2-2zm25 0c1.1519 0 2 .84806 2 2s-.84806 2-2 2-2-.84806-2-2c-.000003-1.1519.84806-2 2-2zm2 38c3.3611 0 6 2.6388 6 6 0 3.361-2.639 6-6 6s-6-2.639-6-6c0-3.3612 2.6389-6 6-6z" fill-opacity=".29412"/><path d="m18 12v16h92v-16zm-10 24v71.076c0 7.1594 5.7644 12.924 12.924 12.924h61.076v-12h-62v-48h88v8h12v-32zm18 6c3.3137-.00001 6 2.6863 6 6 .000009 3.3137-2.6863 6-6 6-3.3137.00001-6-2.6863-6-6-.000009-3.3137 2.6863-6 6-6zm25 0c3.3137-.00001 6 2.6863 6 6 .000009 3.3137-2.6863 6-6 6-3.3137.00001-6-2.6863-6-6-.000009-3.3137 2.6863-6 6-6zm26 0c3.3137-.00001 6 2.6863 6 6 .000009 3.3137-2.6863 6-6 6-3.3137.00001-6-2.6863-6-6-.000009-3.3137 2.6863-6 6-6zm25 0c3.3137-.00001 6 2.6863 6 6 .00001 3.3137-2.6863 6-6 6-3.3137.00001-6-2.6863-6-6-.000009-3.3137 2.6863-6 6-6zm-54 26v8h32v-8zm56 6c-8.8365 0-16 7.1634-16 16 .008 5.7082 3.0565 10.98 8 13.834v4.166c0 2.216 1.784 4 4 4h8c2.216 0 4-1.784 4-4v-4.1602c4.945-2.855 7.9937-8.1299 8-13.84 0-8.8366-7.1635-16-16-16zm0 6c5.5228 0 10 4.4771 10 10 0 5.5228-4.4772 10-10 10s-10-4.4772-10-10c0-5.5229 4.4772-10 10-10zm-4 36v4h8v-4z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_c_p_u_particles.svg b/editor/icons/icon_gizmo_c_p_u_particles.svg index a6f0eaef5b..d4e86d9c42 100644 --- a/editor/icons/icon_gizmo_c_p_u_particles.svg +++ b/editor/icons/icon_gizmo_c_p_u_particles.svg @@ -1,85 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="128" - height="128" - version="1.1" - viewBox="0 0 128 128" - id="svg6" - sodipodi:docname="icon_gizmo_c_p_u_particles.svg" - inkscape:version="0.92.4 5da689c313, 2019-01-14"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1606" - inkscape:window-height="821" - id="namedview8" - showgrid="false" - inkscape:zoom="2.6074563" - inkscape:cx="101.29539" - inkscape:cy="83.191634" - inkscape:window-x="295" - inkscape:window-y="81" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" - fit-margin-top="0" - fit-margin-left="0" - fit-margin-right="0" - fit-margin-bottom="0" /> - <path - style="display:inline;opacity:1;fill:#f7f5cf;fill-opacity:1;stroke:#b4b4b4;stroke-width:2.56380486;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="m 35.503779,1.2819066 c -3.570424,0 -6.435164,2.9483368 -6.435164,6.6019028 v 4.3900146 c 0,0.889114 0.169457,1.726301 0.478513,2.49893 H 19.465369 c -3.570424,0 -6.435167,2.931453 -6.435167,6.585021 v 7.969562 c -0.341543,-0.0568 -0.648813,-0.202614 -1.006525,-0.202614 H 7.7335674 c -3.5704232,0 -6.451665,2.948338 -6.451665,6.601904 v 3.224972 c 0,3.653568 2.8812418,6.585016 6.451665,6.585016 h 4.2901096 c 0.358169,0 0.664563,-0.14568 1.006525,-0.202618 V 83.83104 C 12.688659,83.77398 12.381388,83.628424 12.023677,83.628424 H 7.7335674 c -3.5704232,0 -6.451665,2.948332 -6.451665,6.601908 v 3.224971 c 0,3.653575 2.8812418,6.585017 6.451665,6.585017 h 4.2901096 c 0.358169,0 0.664563,-0.145692 1.006525,-0.202612 v 9.725542 c 0,3.6536 2.864743,6.60193 6.435167,6.60193 h 9.603246 v 3.951 c 0,3.65357 2.86474,6.60192 6.435164,6.60192 h 3.15158 c 3.57042,0 6.451663,-2.94836 6.451663,-6.60192 v -3.95104 h 37.224955 v 3.951 c 0,3.65358 2.86474,6.60193 6.435166,6.60193 h 3.151583 c 3.570418,0 6.451653,-2.94836 6.451653,-6.60193 v -3.951 h 10.725281 c 3.57043,0 6.45166,-2.94833 6.45166,-6.60191 v -9.607372 c 0.14985,0.0105 0.27643,0.0846 0.42899,0.0846 h 4.29014 c 3.5704,0 6.45165,-2.931432 6.45165,-6.585011 v -3.224992 c 0,-3.653565 -2.88125,-6.601906 -6.45165,-6.601906 h -4.29014 c -0.15231,0 -0.27938,0.07348 -0.42899,0.08472 V 45.452198 c 0.14985,0.01042 0.27643,0.08445 0.42899,0.08445 h 4.29014 c 3.5704,0 6.45165,-2.931451 6.45165,-6.585023 v -3.224986 c 0,-3.653566 -2.88125,-6.601906 -6.45165,-6.601906 h -4.29014 c -0.15231,0 -0.27938,0.07392 -0.42899,0.08446 v -7.851429 c 0,-3.653567 -2.88123,-6.585019 -6.45166,-6.585021 H 97.875379 c 0.309043,-0.772641 0.494982,-1.609791 0.494982,-2.498929 V 7.8838054 c 0,-3.6535651 -2.881246,-6.601903 -6.451662,-6.601903 h -3.15158 c -3.570428,0 -6.435167,2.9483379 -6.435167,6.601903 V 12.27382 c 0,0.889115 0.16948,1.726301 0.478507,2.49893 H 44.612011 c 0.309083,-0.772642 0.495011,-1.609792 0.495011,-2.49893 V 7.8838054 c 0,-3.6535651 -2.881243,-6.601903 -6.451663,-6.601903 z" - id="path4542" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke-width:8.54601765" - d="M 62.861474,21.661698 A 27.707285,31.502779 0 0 1 90.004671,47.07312 18.471523,18.901669 0 0 1 105.96058,65.764449 18.471523,18.901669 0 0 1 87.480108,84.658396 H 38.226348 A 18.471523,18.901669 0 0 1 19.762375,65.764449 18.471523,18.901669 0 0 1 35.685283,47.056234 27.707285,31.502779 0 0 1 62.861474,21.661698 Z" - id="path4540" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke-width:8.54601765" - d="m 38.226348,90.956369 a 6.1571744,6.3005562 0 0 1 6.154657,6.297979 6.1571744,6.3005562 0 0 1 -6.154657,6.314882 6.1571744,6.3005562 0 0 1 -6.154657,-6.314882 6.1571744,6.3005562 0 0 1 6.154657,-6.297979 z" - id="path4538" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke-width:8.54601765" - d="m 87.480108,90.956369 a 6.1571744,6.3005562 0 0 1 6.171159,6.297979 6.1571744,6.3005562 0 0 1 -6.171159,6.314882 6.1571744,6.3005562 0 0 1 -6.154656,-6.314882 6.1571744,6.3005562 0 0 1 6.154656,-6.297979 z" - id="path4536" - inkscape:connector-curvature="0" /> - <path - style="opacity:1;fill:#b4b4b4;fill-opacity:1;stroke-width:8.54601765" - d="m 62.861474,97.254348 a 6.1571744,6.3005562 0 0 1 6.154662,6.314882 6.1571744,6.3005562 0 0 1 -6.154662,6.29797 6.1571744,6.3005562 0 0 1 -6.154651,-6.29797 6.1571744,6.3005562 0 0 1 6.154651,-6.314882 z" - id="rect822" - inkscape:connector-curvature="0" /> - <g - inkscape:groupmode="layer" - id="layer1" - inkscape:label="Layer 1" - transform="translate(-0.35794507,-5.5049216)" /> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m35.503779 1.2819066c-3.570424 0-6.435164 2.9483368-6.435164 6.6019028v4.3900146c0 .889114.169457 1.726301.478513 2.49893h-10.081759c-3.570424 0-6.435167 2.931453-6.435167 6.585021v7.969562c-.341543-.0568-.648813-.202614-1.006525-.202614h-4.2901096c-3.5704232 0-6.451665 2.948338-6.451665 6.601904v3.224972c0 3.653568 2.8812418 6.585016 6.451665 6.585016h4.2901096c.358169 0 .664563-.14568 1.006525-.202618v38.497043c-.341543-.05706-.648814-.202616-1.006525-.202616h-4.2901096c-3.5704232 0-6.451665 2.948332-6.451665 6.601908v3.224971c0 3.653575 2.8812418 6.585017 6.451665 6.585017h4.2901096c.358169 0 .664563-.145692 1.006525-.202612v9.725542c0 3.6536 2.864743 6.60193 6.435167 6.60193h9.603246v3.951c0 3.65357 2.86474 6.60192 6.435164 6.60192h3.15158c3.57042 0 6.451663-2.94836 6.451663-6.60192v-3.95104h37.224955v3.951c0 3.65358 2.86474 6.60193 6.435166 6.60193h3.151583c3.570418 0 6.451653-2.94836 6.451653-6.60193v-3.951h10.725281c3.57043 0 6.45166-2.94833 6.45166-6.60191v-9.607372c.14985.0105.27643.0846.42899.0846h4.29014c3.5704 0 6.45165-2.931432 6.45165-6.585011v-3.224992c0-3.653565-2.88125-6.601906-6.45165-6.601906h-4.29014c-.15231 0-.27938.07348-.42899.08472v-38.261071c.14985.01042.27643.08445.42899.08445h4.29014c3.5704 0 6.45165-2.931451 6.45165-6.585023v-3.224986c0-3.653566-2.88125-6.601906-6.45165-6.601906h-4.29014c-.15231 0-.27938.07392-.42899.08446v-7.851429c0-3.653567-2.88123-6.585019-6.45166-6.585021h-11.220281c.309043-.772641.494982-1.609791.494982-2.498929v-4.3900086c0-3.6535651-2.881246-6.601903-6.451662-6.601903h-3.15158c-3.570428 0-6.435167 2.9483379-6.435167 6.601903v4.3900146c0 .889115.16948 1.726301.478507 2.49893h-38.198448c.309083-.772642.495011-1.609792.495011-2.49893v-4.3900146c0-3.6535651-2.881243-6.601903-6.451663-6.601903z" fill="#f7f5cf" stroke="#b4b4b4" stroke-width="2.563805"/><g fill="#b4b4b4" stroke-width="8.546018"><path d="m62.861474 21.661698a27.707285 31.502779 0 0 1 27.143197 25.411422 18.471523 18.901669 0 0 1 15.955909 18.691329 18.471523 18.901669 0 0 1 -18.480472 18.893947h-49.25376a18.471523 18.901669 0 0 1 -18.463973-18.893947 18.471523 18.901669 0 0 1 15.922908-18.708215 27.707285 31.502779 0 0 1 27.176191-25.394536z"/><path d="m38.226348 90.956369a6.1571744 6.3005562 0 0 1 6.154657 6.297979 6.1571744 6.3005562 0 0 1 -6.154657 6.314882 6.1571744 6.3005562 0 0 1 -6.154657-6.314882 6.1571744 6.3005562 0 0 1 6.154657-6.297979z"/><path d="m87.480108 90.956369a6.1571744 6.3005562 0 0 1 6.171159 6.297979 6.1571744 6.3005562 0 0 1 -6.171159 6.314882 6.1571744 6.3005562 0 0 1 -6.154656-6.314882 6.1571744 6.3005562 0 0 1 6.154656-6.297979z"/><path d="m62.861474 97.254348a6.1571744 6.3005562 0 0 1 6.154662 6.314882 6.1571744 6.3005562 0 0 1 -6.154662 6.29797 6.1571744 6.3005562 0 0 1 -6.154651-6.29797 6.1571744 6.3005562 0 0 1 6.154651-6.314882z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_camera.svg b/editor/icons/icon_gizmo_camera.svg index cb80c16598..f28efb813e 100644 --- a/editor/icons/icon_gizmo_camera.svg +++ b/editor/icons/icon_gizmo_camera.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m76 16a28 28 0 0 0 -26.631 19.4 28 28 0 0 0 -13.369 -3.4004 28 28 0 0 0 -28 28 28 28 0 0 0 16 25.26v14.74c0 6.648 5.352 12 12 12h48c6.648 0 12-5.352 12-12l24 16v-64l-24 16v-4.4434a28 28 0 0 0 8 -19.557 28 28 0 0 0 -28 -28z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> -<path d="m76 944.36a24 24 0 0 0 -23.906 22.219 24 24 0 0 0 -16.094 -6.2192 24 24 0 0 0 -24 24 24 24 0 0 0 16 22.594v17.406c0 4.432 3.5679 8 8 8h48c4.4321 0 8-3.568 8-8v-8l24 16v-48l-24 16v-14.156a24 24 0 0 0 8 -17.844 24 24 0 0 0 -24 -24z" fill="#f7f5cf"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -924.36)"><path d="m76 16a28 28 0 0 0 -26.631 19.4 28 28 0 0 0 -13.369-3.4004 28 28 0 0 0 -28 28 28 28 0 0 0 16 25.26v14.74c0 6.648 5.352 12 12 12h48c6.648 0 12-5.352 12-12l24 16v-64l-24 16v-4.4434a28 28 0 0 0 8-19.557 28 28 0 0 0 -28-28z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2" transform="translate(0 924.36)"/><path d="m76 944.36a24 24 0 0 0 -23.906 22.219 24 24 0 0 0 -16.094-6.2192 24 24 0 0 0 -24 24 24 24 0 0 0 16 22.594v17.406c0 4.432 3.5679 8 8 8h48c4.4321 0 8-3.568 8-8v-8l24 16v-48l-24 16v-14.156a24 24 0 0 0 8-17.844 24 24 0 0 0 -24-24z" fill="#f7f5cf"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_directional_light.svg b/editor/icons/icon_gizmo_directional_light.svg index 1b125b44de..a0e31c8b19 100644 --- a/editor/icons/icon_gizmo_directional_light.svg +++ b/editor/icons/icon_gizmo_directional_light.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m64 4c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8zm-36.77 15.223c-2.045 0-4.0893 0.78461-5.6562 2.3516-3.1339 3.1339-3.1339 8.1786 0 11.312l11.312 11.314c3.1339 3.1339 8.1806 3.1339 11.314 0s3.1339-8.1806 0-11.314l-11.314-11.312c-1.5669-1.5669-3.6113-2.3516-5.6562-2.3516zm73.539 0c-2.045 0-4.0893 0.78461-5.6562 2.3516l-11.314 11.312c-3.1339 3.1339-3.1339 8.1806 0 11.314s8.1806 3.1339 11.314 0l11.312-11.314c3.1339-3.1339 3.1339-8.1786 0-11.312-1.567-1.5669-3.6113-2.3516-5.6562-2.3516zm-36.77 20.777a24 24 0 0 0 -24 24 24 24 0 0 0 24 24 24 24 0 0 0 24 -24 24 24 0 0 0 -24 -24zm-52 16c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8h-16zm88 0c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8h-16zm-61.455 25.449c-2.045 0-4.0913 0.78266-5.6582 2.3496l-11.312 11.314c-3.1339 3.1339-3.1339 8.1786 0 11.312 3.1339 3.1339 8.1786 3.1339 11.312 0l11.314-11.312c3.1339-3.1339 3.1339-8.1806 0-11.314-1.5669-1.5669-3.6113-2.3496-5.6562-2.3496zm50.91 0c-2.045 0-4.0893 0.78266-5.6562 2.3496-3.1339 3.1339-3.1339 8.1806 0 11.314l11.314 11.312c3.1339 3.1339 8.1786 3.1339 11.312 0s3.1339-8.1786 0-11.312l-11.312-11.314c-1.5669-1.5669-3.6132-2.3496-5.6582-2.3496zm-25.455 10.551c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/> -<path transform="translate(0 924.36)" d="m64 8c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4zm-36.77 15.227c-1.0225 0-2.0447 0.39231-2.8281 1.1758-1.5669 1.5669-1.5669 4.0893 0 5.6562l11.312 11.314c1.5669 1.5669 4.0913 1.5669 5.6582 0s1.5669-4.0913 0-5.6582l-11.314-11.312c-0.78348-0.78348-1.8056-1.1758-2.8281-1.1758zm73.539 0c-1.0225 0-2.0446 0.39231-2.8281 1.1758l-11.314 11.312c-1.5669 1.5669-1.5669 4.0913 0 5.6582s4.0913 1.5669 5.6582 0l11.313-11.314c1.5669-1.5669 1.5669-4.0893 0-5.6562-0.78348-0.78348-1.8056-1.1758-2.8281-1.1758zm-36.77 20.773c-11.046 1e-5 -20 8.9543-20 20 7e-6 11.046 8.9543 20 20 20s20-8.9543 20-20c-8e-6 -11.046-8.9543-20-20-20zm-52 16c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4h-16zm88 0c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4h-16zm-61.455 25.453c-1.0225 0-2.0466 0.39035-2.8301 1.1738l-11.312 11.314c-1.5669 1.5669-1.5669 4.0893 0 5.6563 1.5669 1.5669 4.0893 1.5669 5.6562 0l11.314-11.313c1.5669-1.5669 1.5669-4.0913 0-5.6582-0.78347-0.78347-1.8056-1.1738-2.8281-1.1738zm50.91 0c-1.0225 0-2.0447 0.39035-2.8281 1.1738-1.5669 1.5669-1.5669 4.0913 0 5.6582l11.314 11.313c1.5669 1.5669 4.0893 1.5669 5.6563 0 1.5669-1.567 1.5669-4.0893 0-5.6563l-11.313-11.314c-0.78347-0.78347-1.8076-1.1738-2.8301-1.1738zm-25.455 10.547c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4z" fill="#f7f5cf"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m64 4c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8zm-36.77 15.223c-2.045 0-4.0893.78461-5.6562 2.3516-3.1339 3.1339-3.1339 8.1786 0 11.312l11.312 11.314c3.1339 3.1339 8.1806 3.1339 11.314 0s3.1339-8.1806 0-11.314l-11.314-11.312c-1.5669-1.5669-3.6113-2.3516-5.6562-2.3516zm73.539 0c-2.045 0-4.0893.78461-5.6562 2.3516l-11.314 11.312c-3.1339 3.1339-3.1339 8.1806 0 11.314s8.1806 3.1339 11.314 0l11.312-11.314c3.1339-3.1339 3.1339-8.1786 0-11.312-1.567-1.5669-3.6113-2.3516-5.6562-2.3516zm-36.77 20.777a24 24 0 0 0 -24 24 24 24 0 0 0 24 24 24 24 0 0 0 24-24 24 24 0 0 0 -24-24zm-52 16c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8zm88 0c-4.432 0-8 3.568-8 8s3.568 8 8 8h16c4.432 0 8-3.568 8-8s-3.568-8-8-8zm-61.455 25.449c-2.045 0-4.0913.78266-5.6582 2.3496l-11.312 11.314c-3.1339 3.1339-3.1339 8.1786 0 11.312 3.1339 3.1339 8.1786 3.1339 11.312 0l11.314-11.312c3.1339-3.1339 3.1339-8.1806 0-11.314-1.5669-1.5669-3.6113-2.3496-5.6562-2.3496zm50.91 0c-2.045 0-4.0893.78266-5.6562 2.3496-3.1339 3.1339-3.1339 8.1806 0 11.314l11.314 11.312c3.1339 3.1339 8.1786 3.1339 11.312 0s3.1339-8.1786 0-11.312l-11.312-11.314c-1.5669-1.5669-3.6132-2.3496-5.6582-2.3496zm-25.455 10.551c-4.432 0-8 3.568-8 8v16c0 4.432 3.568 8 8 8s8-3.568 8-8v-16c0-4.432-3.568-8-8-8z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2"/><path d="m64 8c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4zm-36.77 15.227c-1.0225 0-2.0447.39231-2.8281 1.1758-1.5669 1.5669-1.5669 4.0893 0 5.6562l11.312 11.314c1.5669 1.5669 4.0913 1.5669 5.6582 0s1.5669-4.0913 0-5.6582l-11.314-11.312c-.78348-.78348-1.8056-1.1758-2.8281-1.1758zm73.539 0c-1.0225 0-2.0446.39231-2.8281 1.1758l-11.314 11.312c-1.5669 1.5669-1.5669 4.0913 0 5.6582s4.0913 1.5669 5.6582 0l11.313-11.314c1.5669-1.5669 1.5669-4.0893 0-5.6562-.78348-.78348-1.8056-1.1758-2.8281-1.1758zm-36.77 20.773c-11.046.00001-20 8.9543-20 20 .000007 11.046 8.9543 20 20 20s20-8.9543 20-20c-.000008-11.046-8.9543-20-20-20zm-52 16c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4zm88 0c-2.216 0-4 1.784-4 4s1.784 4 4 4h16c2.216 0 4-1.784 4-4s-1.784-4-4-4zm-61.455 25.453c-1.0225 0-2.0466.39035-2.8301 1.1738l-11.312 11.314c-1.5669 1.5669-1.5669 4.0893 0 5.6563 1.5669 1.5669 4.0893 1.5669 5.6562 0l11.314-11.313c1.5669-1.5669 1.5669-4.0913 0-5.6582-.78347-.78347-1.8056-1.1738-2.8281-1.1738zm50.91 0c-1.0225 0-2.0447.39035-2.8281 1.1738-1.5669 1.5669-1.5669 4.0913 0 5.6582l11.314 11.313c1.5669 1.5669 4.0893 1.5669 5.6563 0 1.5669-1.567 1.5669-4.0893 0-5.6563l-11.313-11.314c-.78347-.78347-1.8076-1.1738-2.8301-1.1738zm-25.455 10.547c-2.216 0-4 1.784-4 4v16c0 2.216 1.784 4 4 4s4-1.784 4-4v-16c0-2.216-1.784-4-4-4z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_g_i_probe.svg b/editor/icons/icon_gizmo_g_i_probe.svg index 815da4d5c3..c792dc5a28 100644 --- a/editor/icons/icon_gizmo_g_i_probe.svg +++ b/editor/icons/icon_gizmo_g_i_probe.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m12 4c-4.4183 9.5e-6 -8 3.5817-8 8v104c9.5e-6 4.4183 3.5817 8 8 8h64v-16h-56v-88h88v7.7676a36 36 0 0 0 -16 -3.7676 36 36 0 0 0 -36 36 36 36 0 0 0 16 29.9v8.0996c0 4.8544 3.4253 8.8788 8 9.8008v16.199h24v-16.199c4.5747-0.92197 8-4.9464 8-9.8008v-8.0879a36 36 0 0 0 16 -29.912 36 36 0 0 0 -19.523 -32h15.523v-16c-1e-5 -4.4183-3.5817-8-8-8h-104zm28.25 17.996c-2.8358-0.076599-5.6171 1.3651-7.1406 4.0039-2.216 3.8382-0.90854 8.7117 2.9297 10.928l10.393 6c3.8382 2.216 8.7117 0.91049 10.928-2.9277s0.91049-8.7117-2.9277-10.928l-10.393-6c-1.1994-0.6925-2.5-1.0414-3.7891-1.0762zm51.75 22.004a16 16 0 0 1 16 16 16 16 0 0 1 -16 16 16 16 0 0 1 -16 -16 16 16 0 0 1 16 -16zm-60 8c-4.432 0-8 3.568-8 8s3.568 8 8 8h12c4.432 0 8-3.568 8-8s-3.568-8-8-8h-12zm18.221 23.996c-1.289 0.034818-2.5896 0.38367-3.7891 1.0762l-10.393 6c-3.8382 2.216-5.1457 7.0895-2.9297 10.928s7.0915 5.1437 10.93 2.9277l10.393-6c3.8382-2.216 5.1437-7.0895 2.9277-10.928-1.5235-2.6388-4.3028-4.0805-7.1387-4.0039z" fill-opacity=".29412"/> -<path transform="translate(0 924.36)" d="m12 8a4.0004 4.0004 0 0 0 -4 4v104a4.0004 4.0004 0 0 0 4 4h60v-8h-56v-96h96v8h8v-12a4.0004 4.0004 0 0 0 -4 -4zm27.715 17.951c-1.2324 0.08615-2.3996 0.76492-3.0664 1.9199l-0.14844 0.25781c-1.0669 1.848-0.43784 4.1948 1.4102 5.2617l10.648 6.1484c1.848 1.0669 4.1948 0.43784 5.2617-1.4102l0.14844-0.25781c1.0669-1.848 0.43784-4.1948-1.4102-5.2617l-10.648-6.1484c-0.693-0.4001-1.4558-0.56146-2.1953-0.50977zm52.285 2.0488a32 32 0 0 0 -32 32 32 32 0 0 0 16 27.668v8.332c0 4.432 3.568 8 8 8h16c4.432 0 8-3.568 8-8v-8.3223a32 32 0 0 0 16 -27.678 32 32 0 0 0 -32 -32zm0 12a20 20 0 0 1 20 20 20 20 0 0 1 -20 20 20 20 0 0 1 -20 -20 20 20 0 0 1 20 -20zm-60.148 16c-2.1339 0-3.8516 1.7177-3.8516 3.8516v0.29688c0 2.1339 1.7177 3.8516 3.8516 3.8516h12.297c2.1339 0 3.8516-1.7177 3.8516-3.8516v-0.29688c0-2.1339-1.7177-3.8516-3.8516-3.8516zm18.902 23.951c-0.73947-0.05169-1.5023 0.10966-2.1953 0.50977l-10.648 6.1484c-1.848 1.0669-2.4771 3.4137-1.4102 5.2617l0.14844 0.25781c1.0669 1.848 3.4137 2.4771 5.2617 1.4102l10.648-6.1484c1.848-1.0669 2.4771-3.4137 1.4102-5.2617l-0.14844-0.25781c-0.66684-1.155-1.834-1.8338-3.0664-1.9199zm33.246 32.049v8h16v-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m12 4c-4.4183.0000095-8 3.5817-8 8v104c.0000095 4.4183 3.5817 8 8 8h64v-16h-56v-88h88v7.7676a36 36 0 0 0 -16-3.7676 36 36 0 0 0 -36 36 36 36 0 0 0 16 29.9v8.0996c0 4.8544 3.4253 8.8788 8 9.8008v16.199h24v-16.199c4.5747-.92197 8-4.9464 8-9.8008v-8.0879a36 36 0 0 0 16-29.912 36 36 0 0 0 -19.523-32h15.523v-16c-.00001-4.4183-3.5817-8-8-8h-104zm28.25 17.996c-2.8358-.076599-5.6171 1.3651-7.1406 4.0039-2.216 3.8382-.90854 8.7117 2.9297 10.928l10.393 6c3.8382 2.216 8.7117.91049 10.928-2.9277s.91049-8.7117-2.9277-10.928l-10.393-6c-1.1994-.6925-2.5-1.0414-3.7891-1.0762zm51.75 22.004a16 16 0 0 1 16 16 16 16 0 0 1 -16 16 16 16 0 0 1 -16-16 16 16 0 0 1 16-16zm-60 8c-4.432 0-8 3.568-8 8s3.568 8 8 8h12c4.432 0 8-3.568 8-8s-3.568-8-8-8zm18.221 23.996c-1.289.034818-2.5896.38367-3.7891 1.0762l-10.393 6c-3.8382 2.216-5.1457 7.0895-2.9297 10.928s7.0915 5.1437 10.93 2.9277l10.393-6c3.8382-2.216 5.1437-7.0895 2.9277-10.928-1.5235-2.6388-4.3028-4.0805-7.1387-4.0039z" fill-opacity=".29412"/><path d="m12 8a4.0004 4.0004 0 0 0 -4 4v104a4.0004 4.0004 0 0 0 4 4h60v-8h-56v-96h96v8h8v-12a4.0004 4.0004 0 0 0 -4-4zm27.715 17.951c-1.2324.08615-2.3996.76492-3.0664 1.9199l-.14844.25781c-1.0669 1.848-.43784 4.1948 1.4102 5.2617l10.648 6.1484c1.848 1.0669 4.1948.43784 5.2617-1.4102l.14844-.25781c1.0669-1.848.43784-4.1948-1.4102-5.2617l-10.648-6.1484c-.693-.4001-1.4558-.56146-2.1953-.50977zm52.285 2.0488a32 32 0 0 0 -32 32 32 32 0 0 0 16 27.668v8.332c0 4.432 3.568 8 8 8h16c4.432 0 8-3.568 8-8v-8.3223a32 32 0 0 0 16-27.678 32 32 0 0 0 -32-32zm0 12a20 20 0 0 1 20 20 20 20 0 0 1 -20 20 20 20 0 0 1 -20-20 20 20 0 0 1 20-20zm-60.148 16c-2.1339 0-3.8516 1.7177-3.8516 3.8516v.29688c0 2.1339 1.7177 3.8516 3.8516 3.8516h12.297c2.1339 0 3.8516-1.7177 3.8516-3.8516v-.29688c0-2.1339-1.7177-3.8516-3.8516-3.8516zm18.902 23.951c-.73947-.05169-1.5023.10966-2.1953.50977l-10.648 6.1484c-1.848 1.0669-2.4771 3.4137-1.4102 5.2617l.14844.25781c1.0669 1.848 3.4137 2.4771 5.2617 1.4102l10.648-6.1484c1.848-1.0669 2.4771-3.4137 1.4102-5.2617l-.14844-.25781c-.66684-1.155-1.834-1.8338-3.0664-1.9199zm33.246 32.049v8h16v-8z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_light.svg b/editor/icons/icon_gizmo_light.svg index 0db2749e91..e3d2a148fa 100644 --- a/editor/icons/icon_gizmo_light.svg +++ b/editor/icons/icon_gizmo_light.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m64 2a44 44 0 0 0 -44 44 44 44 0 0 0 24 39.189v5.8105 5 3c0 5.0515 3.3756 9.2769 8 10.578v16.422h24v-16.422c4.6244-1.3012 8-5.5266 8-10.578v-3-5-5.8574a44 44 0 0 0 24 -39.143 44 44 0 0 0 -44 -44zm0 20a24 24 0 0 1 24 24 24 24 0 0 1 -24 24 24 24 0 0 1 -24 -24 24 24 0 0 1 24 -24z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2.2"/> -<path transform="translate(0 924.36)" d="m64 6a40 40 0 0 0 -40 40 40 40 0 0 0 24 36.607v15.393a8 8 0 0 0 8 8h16a8 8 0 0 0 8 -8v-15.363a40 40 0 0 0 24 -36.637 40 40 0 0 0 -40 -40zm0 12a28 28 0 0 1 28 28 28 28 0 0 1 -28 28 28 28 0 0 1 -28 -28 28 28 0 0 1 28 -28zm-8 96v8h16v-8h-16z" fill="#f7f5cf"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m64 2a44 44 0 0 0 -44 44 44 44 0 0 0 24 39.189v5.8105 5 3c0 5.0515 3.3756 9.2769 8 10.578v16.422h24v-16.422c4.6244-1.3012 8-5.5266 8-10.578v-3-5-5.8574a44 44 0 0 0 24-39.143 44 44 0 0 0 -44-44zm0 20a24 24 0 0 1 24 24 24 24 0 0 1 -24 24 24 24 0 0 1 -24-24 24 24 0 0 1 24-24z" fill-opacity=".29412" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="2.2"/><path d="m64 6a40 40 0 0 0 -40 40 40 40 0 0 0 24 36.607v15.393a8 8 0 0 0 8 8h16a8 8 0 0 0 8-8v-15.363a40 40 0 0 0 24-36.637 40 40 0 0 0 -40-40zm0 12a28 28 0 0 1 28 28 28 28 0 0 1 -28 28 28 28 0 0 1 -28-28 28 28 0 0 1 28-28zm-8 96v8h16v-8z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_listener.svg b/editor/icons/icon_gizmo_listener.svg index 9b74469b67..9e28c7730f 100644 --- a/editor/icons/icon_gizmo_listener.svg +++ b/editor/icons/icon_gizmo_listener.svg @@ -1,8 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<g transform="matrix(2 0 0 2 -16 -1040.4)"> -<path d="m32 984.36c-12.126 2e-5 -22 9.8729-22 21.999 1.1e-4 1.1045 0.89548 1.9999 2 2h8c1.1045-1e-4 1.9999-0.8955 2-2 2.23e-4 -5.546 4.4536-9.999 10-9.999 5.5464 1e-5 9.9998 4.453 10 9.999 0 6.5873-1.6032 8.0251-3.8408 9.8897-1.0295 0.8579-2.3133 1.6111-3.7969 2.6826-0.72285 0.522-1.6649 1.2341-2.5488 2.3496-0.98288 1.2402-1.8135 2.99-1.8135 5.0781 0 2.3898-0.31658 3.686-0.61035 4.3194-0.29378 0.6333-0.4706 0.73-0.97754 1.0341-0.54947 0.3297-2.5162 0.6446-4.4121 0.6446-0.0065 3e-4 -0.01302 6e-4 -0.01953 1e-3h-3.9805c-1.1045 1e-4 -1.9999 0.8954-2 2v8c1.1e-4 1.1045 0.89548 1.9999 2 2h4c0.0072-3e-4 0.01432-5e-4 0.02148-1e-3 1.9052 1e-3 6.3098 0.1982 10.566-2.3555 4.0103-2.4061 6.6628-7.2724 7.1738-13.592 0.81224-0.548 2.3445-1.497 4.0791-2.9424 4.0025-3.3353 8.1592-9.5405 8.1592-19.108-9.5e-5 -12.126-9.8735-21.999-22-21.999zm31.807 4.002c-0.38259-0.0177-0.76221 0.0749-1.0938 0.2666l-6.9531 4.0156c-0.95754 0.55332-1.2843 1.7787-0.72949 2.7354 1.9364 3.3365 2.9609 7.1229 2.9717 10.98-0.0072 3.8597-1.0296 7.6487-2.9648 10.988-0.55452 0.9572-0.22681 2.1827 0.73144 2.7353l6.9453 4.0069c0.95656 0.5517 2.1792 0.2238 2.7314-0.7325 6.0717-10.516 6.0717-23.482 0-33.998-0.3406-0.59005-0.95812-0.96615-1.6387-0.99805z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="matrix(.5 0 0 .5 8 982.36)" d="m48 8a40 39.998 0 0 0 -40 39.998h16a24 23.999 0 0 1 24 -23.998 24 23.999 0 0 1 24 23.998c0 13.999-4.33 18.859-9.1211 22.852-2.3955 1.9962-5.0363 3.5302-7.8125 5.5352-1.3881 1.0024-2.8661 2.126-4.3047 3.9414-1.4385 1.8152-2.7617 4.6719-2.7617 7.6719 0 10.221-2.5383 12.59-5.1172 14.137-2.5789 1.5472-6.8828 1.8594-10.883 1.8594v0.00195h-8v16h8v-0.00195c4 0 11.696 0.31158 19.117-4.1406 7.0602-4.236 12.198-13.279 12.695-26 0.1835-0.1636 0.14883-0.15489 0.62109-0.49609 1.7238-1.245 5.083-3.2112 8.6875-6.2148 7.209-6.0072 14.879-17.145 14.879-35.145a40 39.998 0 0 0 -40 -39.998zm63.426 8l-13.906 8.0312a48 47.998 0 0 1 6.4844 23.967 48 47.998 0 0 1 -6.4688 23.984l13.891 8.0137a64 63.997 0 0 0 0 -63.996z" fill="#f7f5cf"/> -</g> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(2 0 0 2 -16 -1964.76)"><path d="m32 984.36c-12.126.00002-22 9.8729-22 21.999.00011 1.1045.89548 1.9999 2 2h8c1.1045-.0001 1.9999-.8955 2-2 .000223-5.546 4.4536-9.999 10-9.999 5.5464.00001 9.9998 4.453 10 9.999 0 6.5873-1.6032 8.0251-3.8408 9.8897-1.0295.8579-2.3133 1.6111-3.7969 2.6826-.72285.522-1.6649 1.2341-2.5488 2.3496-.98288 1.2402-1.8135 2.99-1.8135 5.0781 0 2.3898-.31658 3.686-.61035 4.3194-.29378.6333-.4706.73-.97754 1.0341-.54947.3297-2.5162.6446-4.4121.6446-.0065.0003-.01302.0006-.01953.001h-3.9805c-1.1045.0001-1.9999.8954-2 2v8c.00011 1.1045.89548 1.9999 2 2h4c.0072-.0003.01432-.0005.02148-.001 1.9052.001 6.3098.1982 10.566-2.3555 4.0103-2.4061 6.6628-7.2724 7.1738-13.592.81224-.548 2.3445-1.497 4.0791-2.9424 4.0025-3.3353 8.1592-9.5405 8.1592-19.108-.000095-12.126-9.8735-21.999-22-21.999zm31.807 4.002c-.38259-.0177-.76221.0749-1.0938.2666l-6.9531 4.0156c-.95754.55332-1.2843 1.7787-.72949 2.7354 1.9364 3.3365 2.9609 7.1229 2.9717 10.98-.0072 3.8597-1.0296 7.6487-2.9648 10.988-.55452.9572-.22681 2.1827.73144 2.7353l6.9453 4.0069c.95656.5517 2.1792.2238 2.7314-.7325 6.0717-10.516 6.0717-23.482 0-33.998-.3406-.59005-.95812-.96615-1.6387-.99805z" fill-opacity=".29412"/><path d="m48 8a40 39.998 0 0 0 -40 39.998h16a24 23.999 0 0 1 24-23.998 24 23.999 0 0 1 24 23.998c0 13.999-4.33 18.859-9.1211 22.852-2.3955 1.9962-5.0363 3.5302-7.8125 5.5352-1.3881 1.0024-2.8661 2.126-4.3047 3.9414-1.4385 1.8152-2.7617 4.6719-2.7617 7.6719 0 10.221-2.5383 12.59-5.1172 14.137-2.5789 1.5472-6.8828 1.8594-10.883 1.8594v.00195h-8v16h8v-.00195c4 0 11.696.31158 19.117-4.1406 7.0602-4.236 12.198-13.279 12.695-26 .1835-.1636.14883-.15489.62109-.49609 1.7238-1.245 5.083-3.2112 8.6875-6.2148 7.209-6.0072 14.879-17.145 14.879-35.145a40 39.998 0 0 0 -40-39.998zm63.426 8-13.906 8.0312a48 47.998 0 0 1 6.4844 23.967 48 47.998 0 0 1 -6.4688 23.984l13.891 8.0137a64 63.997 0 0 0 0-63.996z" fill="#f7f5cf" transform="matrix(.5 0 0 .5 8 982.36)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_particles.svg b/editor/icons/icon_gizmo_particles.svg index 0989c1acad..1c5d8c5f2d 100644 --- a/editor/icons/icon_gizmo_particles.svg +++ b/editor/icons/icon_gizmo_particles.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path d="m63.998 928.36c-18.429 5e-3 -34.029 13.88-38.557 32.926-12.4 3.0077-21.427 14.08-21.441 27.07v4e-3c0 15.417 12.583 28 28 28h64c15.417 0 28-12.583 28-28v-4e-3c-0.0152-13-9.0549-24.076-21.467-27.074-4.5265-19.033-20.112-32.903-38.529-32.922zm32.002 88c-6.58 0-12 5.42-12 12s5.42 12 12 12c6.58 0 12-5.42 12-12s-5.42-12-12-12zm-64 0c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm32 8c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 924.36)" d="m64 8a36 40 0 0 0 -35.311 32.256 24 24 0 0 0 -20.689 23.744 24 24 0 0 0 24 24h64a24 24 0 0 0 24 -24 24 24 0 0 0 -20.715 -23.746 36 40 0 0 0 -35.285 -32.254zm-32 88a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8zm64 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8zm-32 8a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8 -8 8 8 0 0 0 -8 -8z" fill="#f7f5cf"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -924.36)"><path d="m63.998 928.36c-18.429.005-34.029 13.88-38.557 32.926-12.4 3.0077-21.427 14.08-21.441 27.07v.004c0 15.417 12.583 28 28 28h64c15.417 0 28-12.583 28-28v-.004c-.0152-13-9.0549-24.076-21.467-27.074-4.5265-19.033-20.112-32.903-38.529-32.922zm32.002 88c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm-64 0c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12zm32 8c-6.58 0-12 5.42-12 12s5.42 12 12 12 12-5.42 12-12-5.42-12-12-12z" fill-opacity=".29412"/><path d="m64 8a36 40 0 0 0 -35.311 32.256 24 24 0 0 0 -20.689 23.744 24 24 0 0 0 24 24h64a24 24 0 0 0 24-24 24 24 0 0 0 -20.715-23.746 36 40 0 0 0 -35.285-32.254zm-32 88a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm64 0a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8zm-32 8a8 8 0 0 0 -8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0 -8-8z" fill="#f7f5cf" transform="translate(0 924.36)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_reflection_probe.svg b/editor/icons/icon_gizmo_reflection_probe.svg index bcfd6e53f9..82136821c7 100644 --- a/editor/icons/icon_gizmo_reflection_probe.svg +++ b/editor/icons/icon_gizmo_reflection_probe.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)" shape-rendering="auto"> -<path d="m12 928.36c-4.3705 4.4e-4 -7.9996 3.6295-8 8v28h16v-20h88v8h16v-16c-4.4e-4 -4.3705-3.6295-7.9996-8-8zm76 28c-4.3709 0-8 3.6291-8 8s3.6291 8 8 8h10.035l-34.486 40.236-44.721-44.723-11.312 11.316 50.828 50.828c3.2536 3.2513 8.7374 3.0394 11.73-0.4531l37.926-44.244v7.0391c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-28c-4.4e-4 -4.3705-3.6295-7.9996-8-8zm-84 52v32c4.37e-4 4.3705 3.6295 7.9996 8 8h104c4.3705-4e-4 7.9996-3.6295 8-8v-32h-16v24h-88v-24z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path d="m12 932.36c-2.209 2.2e-4 -3.9998 1.791-4 4v24h8v-20h96v8h8v-12c-2.2e-4 -2.209-1.791-3.9998-4-4zm76 28c-2.2091 0-4 1.7909-4 4s1.7909 4 4 4h18.732l-42.957 50.119-44.947-44.947-5.6562 5.6582 48 48c1.648 1.6468 4.3491 1.5425 5.8652-0.2266l44.963-52.457v17.854c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-28c-2.2e-4 -2.209-1.791-3.9998-4-4zm-80 52v28c2.209e-4 2.2091 1.791 3.9998 4 4h104c2.209-2e-4 3.9998-1.7909 4-4v-28h-8v24h-96v-24z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -924.36)"><path d="m12 928.36c-4.3705.00044-7.9996 3.6295-8 8v28h16v-20h88v8h16v-16c-.00044-4.3705-3.6295-7.9996-8-8zm76 28c-4.3709 0-8 3.6291-8 8s3.6291 8 8 8h10.035l-34.486 40.236-44.721-44.723-11.312 11.316 50.828 50.828c3.2536 3.2513 8.7374 3.0394 11.73-.4531l37.926-44.244v7.0391c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-28c-.00044-4.3705-3.6295-7.9996-8-8zm-84 52v32c.000437 4.3705 3.6295 7.9996 8 8h104c4.3705-.0004 7.9996-3.6295 8-8v-32h-16v24h-88v-24z" fill-opacity=".29412"/><path d="m12 932.36c-2.209.00022-3.9998 1.791-4 4v24h8v-20h96v8h8v-12c-.00022-2.209-1.791-3.9998-4-4zm76 28c-2.2091 0-4 1.7909-4 4s1.7909 4 4 4h18.732l-42.957 50.119-44.947-44.947-5.6562 5.6582 48 48c1.648 1.6468 4.3491 1.5425 5.8652-.2266l44.963-52.457v17.854c0 2.2091 1.7909 4 4 4s4-1.7909 4-4v-28c-.00022-2.209-1.791-3.9998-4-4zm-80 52v28c.0002209 2.2091 1.791 3.9998 4 4h104c2.209-.0002 3.9998-1.7909 4-4v-28h-8v24h-96v-24z" fill="#f7f5cf"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_spatial_sample_player.svg b/editor/icons/icon_gizmo_spatial_sample_player.svg index aa69248503..ee471124dc 100644 --- a/editor/icons/icon_gizmo_spatial_sample_player.svg +++ b/editor/icons/icon_gizmo_spatial_sample_player.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)" fill-rule="evenodd" shape-rendering="auto"> -<path d="m63.766 932.37c-2.0369 0.0594-3.9779 0.89602-5.4199 2.3359l-2e-3 2e-3 -29.656 29.658h-12.688c-4.3705 4.4e-4 -7.9996 3.6295-8 8v32c4.372e-4 4.3705 3.6295 7.9995 8 8h12.688l29.656 29.656c2.4 2.3983 5.9795 2.8662 8.7168 1.7324 2.7373-1.1337 4.9381-3.9958 4.9395-7.3886v-96.004c-3e-3 -4.4555-3.779-8.1211-8.2324-7.9922zm48.234 3.9941c-4.3709 0-8 3.6291-8 8v88c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-88c0-4.3709-3.6291-8-8-8zm-24 24c-4.3709 0-8 3.6291-8 8v40c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-40c0-4.3709-3.6291-8-8-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 924.36)" d="m63.883 12.004c-1.0195 0.0295-1.9892 0.4473-2.7109 1.168l-30.828 30.83h-14.344c-2.209 2.21e-4 -3.9998 1.791-4 4v32c2.21e-4 2.209 1.791 3.9998 4 4h14.344l30.828 30.828c2.52 2.5182 6.8267 0.73442 6.8281-2.8281v-96.002c-0.0015-2.2541-1.8641-4.0619-4.1172-3.9961zm48.117 3.9961a4 4 0 0 0 -4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-88a4 4 0 0 0 -4 -4zm-24 24a4 4 0 0 0 -4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4 -4v-40a4 4 0 0 0 -4 -4z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -924.36)"><path d="m63.766 932.37c-2.0369.0594-3.9779.89602-5.4199 2.3359l-.002.002-29.656 29.658h-12.688c-4.3705.00044-7.9996 3.6295-8 8v32c.0004372 4.3705 3.6295 7.9995 8 8h12.688l29.656 29.656c2.4 2.3983 5.9795 2.8662 8.7168 1.7324 2.7373-1.1337 4.9381-3.9958 4.9395-7.3886v-96.004c-.003-4.4555-3.779-8.1211-8.2324-7.9922zm48.234 3.9941c-4.3709 0-8 3.6291-8 8v88c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-88c0-4.3709-3.6291-8-8-8zm-24 24c-4.3709 0-8 3.6291-8 8v40c0 4.3709 3.6291 8 8 8s8-3.6291 8-8v-40c0-4.3709-3.6291-8-8-8z" fill-opacity=".29412"/><path d="m63.883 12.004c-1.0195.0295-1.9892.4473-2.7109 1.168l-30.828 30.83h-14.344c-2.209.000221-3.9998 1.791-4 4v32c.000221 2.209 1.791 3.9998 4 4h14.344l30.828 30.828c2.52 2.5182 6.8267.73442 6.8281-2.8281v-96.002c-.0015-2.2541-1.8641-4.0619-4.1172-3.9961zm48.117 3.9961a4 4 0 0 0 -4 4v88a4 4 0 0 0 4 4 4 4 0 0 0 4-4v-88a4 4 0 0 0 -4-4zm-24 24a4 4 0 0 0 -4 4v40a4 4 0 0 0 4 4 4 4 0 0 0 4-4v-40a4 4 0 0 0 -4-4z" fill="#f7f5cf" transform="translate(0 924.36)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_spatial_stream_player.svg b/editor/icons/icon_gizmo_spatial_stream_player.svg index 1470d3bfba..473fd2c2cd 100644 --- a/editor/icons/icon_gizmo_spatial_stream_player.svg +++ b/editor/icons/icon_gizmo_spatial_stream_player.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)" shape-rendering="auto"> -<path transform="translate(0 924.36)" d="m99.645 6.0059c-0.9956 0.029687-1.9837 0.18322-2.9414 0.45703l-56 16c-5.1336 1.4668-8.7021 6.198-8.7031 11.537v44.203c-11.16 1.0331-20 10.379-20 21.797 1.1e-5 12.103 9.8971 22 22 22 12.103-1e-5 22-9.8971 22-22v-56.947l32-9.1426v28.293c-11.16 1.0331-20 10.379-20 21.797 1.1e-5 12.103 9.8971 22 22 22 12.103-1e-5 22-9.8971 22-22v-66c-0.00104-6.7137-5.6428-12.192-12.354-11.994z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 924.36)" d="m99.764 10.004a8.0008 8.0008 0 0 0 -1.9609 0.30469l-56 16a8.0008 8.0008 0 0 0 -5.8027 7.6914v48.121a18 18 0 0 0 -2 -0.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18 -18v-59.965l40-11.428v37.514a18 18 0 0 0 -2 -0.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18 -18v-66a8.0008 8.0008 0 0 0 -8.2363 -7.9961z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#f7f5cf" image-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m99.645 6.0059c-.9956.029687-1.9837.18322-2.9414.45703l-56 16c-5.1336 1.4668-8.7021 6.198-8.7031 11.537v44.203c-11.16 1.0331-20 10.379-20 21.797.000011 12.103 9.8971 22 22 22 12.103-.00001 22-9.8971 22-22v-56.947l32-9.1426v28.293c-11.16 1.0331-20 10.379-20 21.797.000011 12.103 9.8971 22 22 22 12.103-.00001 22-9.8971 22-22v-66c-.00104-6.7137-5.6428-12.192-12.354-11.994z" fill-opacity=".29412"/><path d="m99.764 10.004a8.0008 8.0008 0 0 0 -1.9609.30469l-56 16a8.0008 8.0008 0 0 0 -5.8027 7.6914v48.121a18 18 0 0 0 -2-.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18-18v-59.965l40-11.428v37.514a18 18 0 0 0 -2-.12109 18 18 0 0 0 -18 18 18 18 0 0 0 18 18 18 18 0 0 0 18-18v-66a8.0008 8.0008 0 0 0 -8.2363-7.9961z" fill="#f7f5cf"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gizmo_spot_light.svg b/editor/icons/icon_gizmo_spot_light.svg index 1881b6b60a..7f0b23937f 100644 --- a/editor/icons/icon_gizmo_spot_light.svg +++ b/editor/icons/icon_gizmo_spot_light.svg @@ -1,6 +1 @@ -<svg width="128" height="128" version="1.1" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -924.36)"> -<path transform="translate(0 924.36)" d="m52 4c-6.5788 0-12 5.4212-12 12v26.625c-12.263 7.2822-19.978 19.75-20 33.369l-0.005859 4.0059h28.578c1.7994 6.8632 8.0265 12 15.428 12s13.628-5.1368 15.428-12h28.576l-0.00391-4.0039c-0.01526-13.625-7.7323-26.099-20-33.385v-26.611c0-6.5788-5.4212-12-12-12zm-11.689 78.016c-1.536-0.10738-3.1419 0.23676-4.5586 1.0547l-10.393 6c-3.7786 2.1816-5.1117 7.1503-2.9297 10.93 2.1816 3.7786 7.1503 5.1117 10.93 2.9297l10.393-6c3.7796-2.1822 5.1087-7.1521 2.9277-10.93-1.3629-2.3605-3.8057-3.8052-6.3691-3.9844zm47.379 0c-2.5634 0.1792-5.0063 1.6238-6.3691 3.9844-2.181 3.7776-0.85187 8.7475 2.9277 10.93l10.393 6c3.7794 2.182 8.7481 0.8489 10.93-2.9297 2.182-3.7794 0.84891-8.7481-2.9297-10.93l-10.393-6c-1.4167-0.81792-3.0225-1.1621-4.5586-1.0547zm-23.689 13.984c-4.3628 0-8 3.6372-8 8v12c0 4.3628 3.6372 8 8 8s8-3.6372 8-8v-12c0-4.3628-3.6372-8-8-8z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill-opacity=".29412" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path transform="translate(0 924.36)" d="m52 8c-4.432 0-8 3.568-8 8v12 16.875a40 36 0 0 0 -20 31.125h28a12 12 0 0 0 12 12 12 12 0 0 0 12 -12h28a40 36 0 0 0 -20 -31.141v-20.859-8c0-4.432-3.568-8-8-8h-24zm-11.969 78.006c-0.76793-0.053681-1.5596 0.1138-2.2793 0.5293l-10.393 6c-1.9191 1.108-2.5728 3.5457-1.4648 5.4648s3.5457 2.5728 5.4648 1.4648l10.393-6c1.9191-1.108 2.5709-3.5457 1.4629-5.4648-0.6925-1.1994-1.9037-1.9047-3.1836-1.9941zm47.938 0c-1.2799 0.08947-2.4911 0.7947-3.1836 1.9941-1.108 1.9191-0.45622 4.3568 1.4629 5.4648l10.393 6c1.9191 1.108 4.3568 0.45427 5.4648-1.4648s0.45427-4.3568-1.4648-5.4648l-10.393-6c-0.71967-0.4155-1.5114-0.58298-2.2793-0.5293zm-23.969 13.994c-2.216 0-4 1.784-4 4v12c0 2.216 1.784 4 4 4s4-1.784 4-4v-12c0-2.216-1.784-4-4-4z" fill="#f7f5cf" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.1082"/> -</g> -</svg> +<svg height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m52 4c-6.5788 0-12 5.4212-12 12v26.625c-12.263 7.2822-19.978 19.75-20 33.369l-.005859 4.0059h28.578c1.7994 6.8632 8.0265 12 15.428 12s13.628-5.1368 15.428-12h28.576l-.00391-4.0039c-.01526-13.625-7.7323-26.099-20-33.385v-26.611c0-6.5788-5.4212-12-12-12zm-11.689 78.016c-1.536-.10738-3.1419.23676-4.5586 1.0547l-10.393 6c-3.7786 2.1816-5.1117 7.1503-2.9297 10.93 2.1816 3.7786 7.1503 5.1117 10.93 2.9297l10.393-6c3.7796-2.1822 5.1087-7.1521 2.9277-10.93-1.3629-2.3605-3.8057-3.8052-6.3691-3.9844zm47.379 0c-2.5634.1792-5.0063 1.6238-6.3691 3.9844-2.181 3.7776-.85187 8.7475 2.9277 10.93l10.393 6c3.7794 2.182 8.7481.8489 10.93-2.9297 2.182-3.7794.84891-8.7481-2.9297-10.93l-10.393-6c-1.4167-.81792-3.0225-1.1621-4.5586-1.0547zm-23.689 13.984c-4.3628 0-8 3.6372-8 8v12c0 4.3628 3.6372 8 8 8s8-3.6372 8-8v-12c0-4.3628-3.6372-8-8-8z" fill-opacity=".29412"/><path d="m52 8c-4.432 0-8 3.568-8 8v12 16.875a40 36 0 0 0 -20 31.125h28a12 12 0 0 0 12 12 12 12 0 0 0 12-12h28a40 36 0 0 0 -20-31.141v-20.859-8c0-4.432-3.568-8-8-8zm-11.969 78.006c-.76793-.053681-1.5596.1138-2.2793.5293l-10.393 6c-1.9191 1.108-2.5728 3.5457-1.4648 5.4648s3.5457 2.5728 5.4648 1.4648l10.393-6c1.9191-1.108 2.5709-3.5457 1.4629-5.4648-.6925-1.1994-1.9037-1.9047-3.1836-1.9941zm47.938 0c-1.2799.08947-2.4911.7947-3.1836 1.9941-1.108 1.9191-.45622 4.3568 1.4629 5.4648l10.393 6c1.9191 1.108 4.3568.45427 5.4648-1.4648s.45427-4.3568-1.4648-5.4648l-10.393-6c-.71967-.4155-1.5114-.58298-2.2793-.5293zm-23.969 13.994c-2.216 0-4 1.784-4 4v12c0 2.216 1.784 4 4 4s4-1.784 4-4v-12c0-2.216-1.784-4-4-4z" fill="#f7f5cf" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.1082"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_godot.svg b/editor/icons/icon_godot.svg index b8bdfcc023..8ca9fdcabd 100644 --- a/editor/icons/icon_godot.svg +++ b/editor/icons/icon_godot.svg @@ -1,30 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="matrix(.017241 0 0 .017241 -.82759 1033.7)" stroke-width=".32031"> -<g transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"> -<path d="m0 0s-0.325 1.994-0.515 1.976l-36.182-3.491c-2.879-0.278-5.115-2.574-5.317-5.459l-0.994-14.247-27.992-1.997-1.904 12.912c-0.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-0.994 14.247c-0.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-0.187 0.018-0.324-1.978-0.511-1.978l-0.049-7.83 30.658-4.944 1.004-14.374c0.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c0.146-0.01 0.29-0.016 0.434-0.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c0.423-2.871 2.93-5.037 5.831-5.037 0.142 0 0.284 5e-3 0.423 0.015l38.556 2.75c2.911 0.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"> -<path d="m0 0v-59.041c0.108-1e-3 0.216-5e-3 0.323-0.015l36.196-3.49c1.896-0.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c0.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c0.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c0.107 0.01 0.214 0.014 0.322 0.015v4.711l0.015 5e-3v54.325h0.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842 0.642-7.702 0.88-11.567 0.926v6e-3c-0.027 0-0.052-6e-3 -0.075-6e-3 -0.024 0-0.049 6e-3 -0.073 6e-3v-6e-3c-3.872-0.046-7.729-0.284-11.572-0.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17 0.216-8.34 0.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"> -<path d="m0 0-1.121-16.063c-0.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-0.094-7e-3 -0.188-0.01-0.281-0.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-0.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936 0.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c0.015-3.498 0.06-7.33 0.06-8.093 0-34.374 43.605-50.896 97.781-51.086h0.133c54.176 0.19 97.766 16.712 97.766 51.086 0 0.777 0.047 4.593 0.063 8.093z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"> -<path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"> -<path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"> -<path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"> -<path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"> -<path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042"/> -</g> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-width=".32031" transform="matrix(.017241 0 0 .017241 -.82759 -2.7)"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247-27.992-1.997-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142 0 .284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"/><path d="m0 0v-59.041c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325h.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027 0-.052-.006-.075-.006-.024 0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c.015-3.498.06-7.33.06-8.093 0-34.374 43.605-50.896 97.781-51.086h.133c54.176.19 97.766 16.712 97.766 51.086 0 .777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"/><path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_godot_docs.svg b/editor/icons/icon_godot_docs.svg index 9caa09066d..e38885aed9 100644 --- a/editor/icons/icon_godot_docs.svg +++ b/editor/icons/icon_godot_docs.svg @@ -1,31 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="matrix(.017241 0 0 .017241 -.82759 1033.7)" stroke-width=".32031"> -<g transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"> -<path d="m0 0s-0.325 1.994-0.515 1.976l-36.182-3.491c-2.879-0.278-5.115-2.574-5.317-5.459l-0.994-14.247-27.992-1.997-1.904 12.912c-0.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-0.994 14.247c-0.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-0.187 0.018-0.324-1.978-0.511-1.978l-0.049-7.83 30.658-4.944 1.004-14.374c0.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c0.146-0.01 0.29-0.016 0.434-0.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c0.423-2.871 2.93-5.037 5.831-5.037 0.142 0 0.284 5e-3 0.423 0.015l38.556 2.75c2.911 0.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"> -<path d="m0 0v-59.041c0.108-1e-3 0.216-5e-3 0.323-0.015l36.196-3.49c1.896-0.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c0.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c0.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c0.107 0.01 0.214 0.014 0.322 0.015v4.711l0.015 5e-3v54.325h0.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842 0.642-7.702 0.88-11.567 0.926v6e-3c-0.027 0-0.052-6e-3 -0.075-6e-3 -0.024 0-0.049 6e-3 -0.073 6e-3v-6e-3c-3.872-0.046-7.729-0.284-11.572-0.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17 0.216-8.34 0.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"> -<path d="m0 0-1.121-16.063c-0.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-0.094-7e-3 -0.188-0.01-0.281-0.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-0.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936 0.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c0.015-3.498 0.06-7.33 0.06-8.093 0-34.374 43.605-50.896 97.781-51.086h0.133c54.176 0.19 97.766 16.712 97.766 51.086 0 0.777 0.047 4.593 0.063 8.093z" fill="#478cbf"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"> -<path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"> -<path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"> -<path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"> -<path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff"/> -</g> -<g transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"> -<path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042"/> -</g> -</g> -<path transform="translate(0 1036.4)" d="m4 5a3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3 -3h2a3 3 0 0 0 3 3 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3 3 3 0 0 0 -2.8262 2h-2.3496a3 3 0 0 0 -2.8242 -2zm0 1a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm8 0a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-width=".32031" transform="matrix(.017241 0 0 .017241 -.82759 -2.7)"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247-27.992-1.997-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902 0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897 0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142 0 .284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 919.24 771.67)"/><path d="m0 0v-59.041c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933 0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325h.134c4.795 6.12 9.232 12.569 13.487 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027 0-.052-.006-.075-.006-.024 0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.253-6.88 8.693-13.329 13.487-19.449z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 104.7 525.91)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916 0-3.569 1.406-3.852 3.33l-2.211 14.994h-31.459l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616l-1.121 16.063-32.547 3.138c.015-3.498.06-7.33.06-8.093 0-34.374 43.605-50.896 97.781-51.086h.133c54.176.19 97.766 16.712 97.766 51.086 0 .777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.1626 0 0 -4.1626 784.07 817.24)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042 0-21.81 9.763-21.81 21.815 0 12.044 9.768 21.802 21.81 21.802 12.048 0 21.813-9.758 21.813-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 389.21 625.67)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996 0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479c8 0 14.479-6.485 14.479-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 367.37 631.06)"/><path d="m0 0c-3.878 0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381v-20.081c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 511.99 724.74)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041 0 21.808 9.763 21.808 21.815 0 12.044-9.767 21.802-21.808 21.802-12.05 0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.1626 0 0 -4.1626 634.79 625.67)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473 8.002 0 14.479 6.479 14.479 14.473s-6.477 14.479-14.479 14.479c-7.994 0-14.471-6.485-14.471-14.479" fill="#414042" transform="matrix(4.1626 0 0 -4.1626 656.64 631.06)"/></g><path d="m4 5a3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3h2a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0 -3-3 3 3 0 0 0 -2.8262 2h-2.3496a3 3 0 0 0 -2.8242-2zm0 1a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm8 0a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gradient.svg b/editor/icons/icon_gradient.svg index cf36fc1afd..b67a9e6f8a 100644 --- a/editor/icons/icon_gradient.svg +++ b/editor/icons/icon_gradient.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="10" x2="10" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#e0e0e0" offset="0"/> -<stop stop-color="#e0e0e0" stop-opacity="0" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55228 0-1 0.44772-1 1v12c0 0.55228 0.44772 1 1 1h12c0.55228 0 1-0.44772 1-1v-12c0-0.55228-0.44772-1-1-1z" fill="url(#a)"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="10" x2="10" y1="1" y2="15"><stop offset="0" stop-color="#e0e0e0"/><stop offset="1" stop-color="#e0e0e0" stop-opacity="0"/></linearGradient><path d="m2 1c-.55228 0-1 .44772-1 1v12c0 .55228.44772 1 1 1h12c.55228 0 1-.44772 1-1v-12c0-.55228-.44772-1-1-1z" fill="url(#a)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gradient_texture.svg b/editor/icons/icon_gradient_texture.svg index 553a2d843b..1388c141bd 100644 --- a/editor/icons/icon_gradient_texture.svg +++ b/editor/icons/icon_gradient_texture.svg @@ -1,19 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="10" x2="10" y1="1" y2="15" gradientUnits="userSpaceOnUse"> -<stop stop-color="#e0e0e0" offset="0"/> -<stop stop-color="#e0e0e0" stop-opacity="0" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-12a1 1 0 0 0 -1 -1h-12zm1 2h10v8h-10v-8z" fill="url(#a)"/> -<rect x="6" y="1043.4" width="2" height="1" fill="#e0e0e0"/> -<rect x="6" y="1044.4" width="2" height="2" fill="#e0e0e0"/> -<rect x="4" y="1045.4" width="2" height="1" fill="#e0e0e0"/> -<rect x="8" y="1044.4" width="2" height="2" fill="#e0e0e0"/> -<rect x="10" y="1044.4" width="2" height="2" fill="#e0e0e0"/> -<rect x="8" y="1042.4" width="3" height="2" fill="#e0e0e0"/> -<rect x="9" y="1041.4" width="1" height="1" fill="#e0e0e0"/> -<rect x="5" y="1044.4" width="1" height="1" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="10" x2="10" y1="1" y2="15"><stop offset="0" stop-color="#e0e0e0"/><stop offset="1" stop-color="#e0e0e0" stop-opacity="0"/></linearGradient><g transform="translate(0 -1036.4)"><path d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm1 2h10v8h-10z" fill="url(#a)" transform="translate(0 1036.4)"/><g fill="#e0e0e0"><path d="m6 1043.4h2v1h-2z"/><path d="m6 1044.4h2v2h-2z"/><path d="m4 1045.4h2v1h-2z"/><path d="m8 1044.4h2v2h-2z"/><path d="m10 1044.4h2v2h-2z"/><path d="m8 1042.4h3v2h-3z"/><path d="m9 1041.4h1v1h-1z"/><path d="m5 1044.4h1v1h-1z"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_graph_edit.svg b/editor/icons/icon_graph_edit.svg index d56fd74b8d..7ab7245260 100644 --- a/editor/icons/icon_graph_edit.svg +++ b/editor/icons/icon_graph_edit.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1 -1.7305v-5.8555l4.793 4.793 1.4141-1.4141-4.793-4.793h5.8574a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm10.656 6.9297l-0.70703 0.70703 1.4141 1.4141 0.70703-0.70703-1.4141-1.4141zm-1.4141 1.4141l-3.8887 3.8887-0.35352 1.7676 1.7676-0.35352 3.8887-3.8887-1.4141-1.4141z" fill="#a5efac"/> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -1-1.7305v-5.8555l4.793 4.793 1.4141-1.4141-4.793-4.793h5.8574a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm10.656 6.9297-.70703.70703 1.4141 1.4141.70703-.70703zm-1.4141 1.4141-3.8887 3.8887-.35352 1.7676 1.7676-.35352 3.8887-3.8887-1.4141-1.4141z" fill="#a5efac" transform="translate(0 1036.4)"/><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_graph_node.svg b/editor/icons/icon_graph_node.svg index e5e1c1dfee..c8d4fda910 100644 --- a/editor/icons/icon_graph_node.svg +++ b/editor/icons/icon_graph_node.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1 -1.7305v-5.8555l4.0859 4.0859 1.4141-1.4141-4.0859-4.0859h5.8574a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9.5 9a2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5 -2.5 2.5 2.5 0 0 0 -2.5 -2.5z" fill="#a5efac"/> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -1-1.7305v-5.8555l4.0859 4.0859 1.4141-1.4141-4.0859-4.0859h5.8574a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm9.5 9a2.5 2.5 0 0 0 -2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0 -2.5-2.5z" fill="#a5efac" transform="translate(0 1036.4)"/><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_grid.svg b/editor/icons/icon_grid.svg index ad18e2f7e9..869bc649fe 100644 --- a/editor/icons/icon_grid.svg +++ b/editor/icons/icon_grid.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2 10 2h2 12v-2-12h-12-2zm2 2h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 10 2h2 12v-2-12h-12zm2 2h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_grid_container.svg b/editor/icons/icon_grid_container.svg index 0492c7d7fd..9fffd8b342 100644 --- a/editor/icons/icon_grid_container.svg +++ b/editor/icons/icon_grid_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_groove_joint_2d.svg b/editor/icons/icon_groove_joint_2d.svg index bedb7fa474..a2c7b741ad 100644 --- a/editor/icons/icon_groove_joint_2d.svg +++ b/editor/icons/icon_groove_joint_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m15 1037.4h-5v6h-5v2h5v6h5zm-7 0h-7v14h7v-4h-5v-6h5z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m15 1037.4h-5v6h-5v2h5v6h5zm-7 0h-7v14h7v-4h-5v-6h5z" fill="#a5b7f3" fill-opacity=".98824" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_group.svg b/editor/icons/icon_group.svg index e607f35660..7e0b2f3675 100644 --- a/editor/icons/icon_group.svg +++ b/editor/icons/icon_group.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0" fill-opacity=".39216"/> -<path transform="translate(0 1036.4)" d="m1 1v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm12 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm-12 12v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0zm12 0v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0" fill-opacity=".39216"/><path d="m1 1v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm12 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm-12 12v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0zm12 0v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_group_viewport.svg b/editor/icons/icon_group_viewport.svg index 350fb4103f..768c87e18d 100644 --- a/editor/icons/icon_group_viewport.svg +++ b/editor/icons/icon_group_viewport.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v4h4v-4h-4zm6 0v6h-6v10h10v-6h6v-10h-10zm4 4h2v2h-2v-2zm2 8v4h4v-4h-4z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width=".5"/> -<path transform="translate(0 1036.4)" d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m1 1v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm12 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm-12 12v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0zm12 0v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v4h4v-4zm6 0v6h-6v10h10v-6h6v-10zm4 4h2v2h-2zm2 8v4h4v-4z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width=".5"/><path d="m7 1v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0"/><path d="m1 1v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm12 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm-12 12v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0zm12 0v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_groups.svg b/editor/icons/icon_groups.svg index 55cf3c48eb..5c8bd73f0f 100644 --- a/editor/icons/icon_groups.svg +++ b/editor/icons/icon_groups.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1 -1v-12a1.0001 1.0001 0 0 0 -1 -1h-12zm1 2h10v10h-10v-10zm5 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1-1v-12a1.0001 1.0001 0 0 0 -1-1zm1 2h10v10h-10zm5 2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0 -3-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gui_close.svg b/editor/icons/icon_gui_close.svg index ac023b7030..3596061877 100644 --- a/editor/icons/icon_gui_close.svg +++ b/editor/icons/icon_gui_close.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.7578 2.3438l-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422-4.2422-4.2422z" fill="#fff" fill-opacity=".89804"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.7578 2.3438-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422z" fill="#fff" fill-opacity=".89804"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gui_close_customizable.svg b/editor/icons/icon_gui_close_customizable.svg index ac023b7030..3596061877 100644 --- a/editor/icons/icon_gui_close_customizable.svg +++ b/editor/icons/icon_gui_close_customizable.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3.7578 2.3438l-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422-4.2422-4.2422z" fill="#fff" fill-opacity=".89804"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.7578 2.3438-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422z" fill="#fff" fill-opacity=".89804"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gui_graph_node_port.svg b/editor/icons/icon_gui_graph_node_port.svg index 1120218844..2023a30ead 100644 --- a/editor/icons/icon_gui_graph_node_port.svg +++ b/editor/icons/icon_gui_graph_node_port.svg @@ -1,5 +1 @@ -<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1042.4)"> -<circle cx="5" cy="1047.4" r="5" fill="#fff" fill-rule="evenodd"/> -</g> -</svg> +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><circle cx="5" cy="5" fill="#fff" fill-rule="evenodd" r="5"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_gui_resizer.svg b/editor/icons/icon_gui_resizer.svg index d9af047213..545a1c9612 100644 --- a/editor/icons/icon_gui_resizer.svg +++ b/editor/icons/icon_gui_resizer.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m11 3c-0.55228 0-1 0.44772-1 1v6h-6c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h7c0.55226-5.5e-5 0.99994-0.44774 1-1v-7c0-0.55228-0.44772-1-1-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-opacity=".58824" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 3c-.55228 0-1 .44772-1 1v6h-6c-.55228 0-1 .44772-1 1s.44772 1 1 1h7c.55226-.000055.99994-.44774 1-1v-7c0-.55228-.44772-1-1-1z" fill="#fff" fill-opacity=".58824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_box_container.svg b/editor/icons/icon_h_box_container.svg index 1428af8542..0ddbaf5a2e 100644 --- a/editor/icons/icon_h_box_container.svg +++ b/editor/icons/icon_h_box_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h2v10h-2v-10zm4 0h2v10h-2v-10zm4 0h2v10h-2v-10z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h2v10h-2zm4 0h2v10h-2zm4 0h2v10h-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_scroll_bar.svg b/editor/icons/icon_h_scroll_bar.svg index e0118b1186..039ebdf0c1 100644 --- a/editor/icons/icon_h_scroll_bar.svg +++ b/editor/icons/icon_h_scroll_bar.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m15 1041.4c0-1.108-0.892-2-2-2h-10c-1.108 0-2 0.892-2 2v6c0 1.108 0.892 2 2 2h10c1.108 0 2-0.892 2-2zm-1 2.9883a1.0001 1.0001 0 0 1 -0.168 0.5664l-2 3a1.0001 1.0001 0 1 1 -1.664 -1.1094l1.6289-2.4453-1.6289-2.4453a1.0001 1.0001 0 1 1 1.664 -1.1094l2 3a1.0001 1.0001 0 0 1 0.168 0.543zm-7.9922-2.9981a1.0001 1.0001 0 0 1 -0.1758 0.5645l-1.6308 2.4453 1.6308 2.4453a1.0001 1.0001 0 1 1 -1.664 1.1094l-2-3a1.0001 1.0001 0 0 1 0 -1.1094l2-3a1.0001 1.0001 0 0 1 1.8398 0.5449z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m15 1041.4c0-1.108-.892-2-2-2h-10c-1.108 0-2 .892-2 2v6c0 1.108.892 2 2 2h10c1.108 0 2-.892 2-2zm-1 2.9883a1.0001 1.0001 0 0 1 -.168.5664l-2 3a1.0001 1.0001 0 1 1 -1.664-1.1094l1.6289-2.4453-1.6289-2.4453a1.0001 1.0001 0 1 1 1.664-1.1094l2 3a1.0001 1.0001 0 0 1 .168.543zm-7.9922-2.9981a1.0001 1.0001 0 0 1 -.1758.5645l-1.6308 2.4453 1.6308 2.4453a1.0001 1.0001 0 1 1 -1.664 1.1094l-2-3a1.0001 1.0001 0 0 1 0-1.1094l2-3a1.0001 1.0001 0 0 1 1.8398.5449z" fill="#a5efac" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_separator.svg b/editor/icons/icon_h_separator.svg index 60a665c730..762992acb8 100644 --- a/editor/icons/icon_h_separator.svg +++ b/editor/icons/icon_h_separator.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 2v3h6v-3h-6zm-4 5v2h14v-2h-14zm4 4v3h6v-3h-6z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 2v3h6v-3zm-4 5v2h14v-2zm4 4v3h6v-3z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_slider.svg b/editor/icons/icon_h_slider.svg index ecfb84ebeb..20fbf0d00b 100644 --- a/editor/icons/icon_h_slider.svg +++ b/editor/icons/icon_h_slider.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 3c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1s1-0.44772 1-1v-2c0-0.55228-0.44772-1-1-1zm12 0c-0.55228 0-1 0.44772-1 1v2c0 0.55228 0.44772 1 1 1s1-0.44772 1-1v-2c0-0.55228-0.44772-1-1-1zm-6 1c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1 1-0.44772 1-1-0.44772-1-1-1zm5 5c-1.1046 0-2 0.89543-2 2 0 1.1046 0.89543 2 2 2 1.0099-3.37e-4 1.8611-0.75351 1.9844-1.7559 0.04003-0.16104 0.03936-0.32952-2e-3 -0.49024-0.12404-1.0008-0.97388-1.7527-1.9824-1.7539zm-11 1c-1.3523-0.019125-1.3523 2.0191 0 2h7.1309c-0.085635-0.32648-0.1296-0.66248-0.13086-1 0.00189-0.3376 0.046518-0.67361 0.13281-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 3c-.55228 0-1 .44772-1 1v2c0 .55228.44772 1 1 1s1-.44772 1-1v-2c0-.55228-.44772-1-1-1zm12 0c-.55228 0-1 .44772-1 1v2c0 .55228.44772 1 1 1s1-.44772 1-1v-2c0-.55228-.44772-1-1-1zm-6 1c-.55228 0-1 .44772-1 1s.44772 1 1 1 1-.44772 1-1-.44772-1-1-1zm5 5c-1.1046 0-2 .89543-2 2 0 1.1046.89543 2 2 2 1.0099-.000337 1.8611-.75351 1.9844-1.7559.04003-.16104.03936-.32952-.002-.49024-.12404-1.0008-.97388-1.7527-1.9824-1.7539zm-11 1c-1.3523-.019125-1.3523 2.0191 0 2h7.1309c-.085635-.32648-.1296-.66248-.13086-1 .00189-.3376.046518-.67361.13281-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_split_container.svg b/editor/icons/icon_h_split_container.svg index 1f84ef4353..ae7c05ee61 100644 --- a/editor/icons/icon_h_split_container.svg +++ b/editor/icons/icon_h_split_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h4v3l-2 2 2 2v3h-4v-10zm6 0h4v10h-4v-3l2-2-2-2v-3z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h4v3l-2 2 2 2v3h-4zm6 0h4v10h-4v-3l2-2-2-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_h_t_t_p_request.svg b/editor/icons/icon_h_t_t_p_request.svg index 6568825af4..c79af15a43 100644 --- a/editor/icons/icon_h_t_t_p_request.svg +++ b/editor/icons/icon_h_t_t_p_request.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1l-3 4h2v3h2v-3h2l-3-4zm7 0v3h-2l3 4 3-4h-2v-3h-2zm-10 9v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2h-1zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v1h1v4h1v-4h1v-1h-3zm4 0v2 1 2h1v-2h1 1v-1-2h-2-1zm1 1h1v1h-1v-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-3 4h2v3h2v-3h2zm7 0v3h-2l3 4 3-4h-2v-3zm-10 9v2 1 2h1v-2h1v2h1v-5h-1v2h-1v-2zm4 0v1h1v4h1v-4h1v-1zm4 0v1h1v4h1v-4h1v-1zm4 0v2 1 2h1v-2h1 1v-1-2h-2zm1 1h1v1h-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_headphones.svg b/editor/icons/icon_headphones.svg index 0df3f6f85c..82ef7acb29 100644 --- a/editor/icons/icon_headphones.svg +++ b/editor/icons/icon_headphones.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7v2 3a2 2 0 0 0 2 2h2v-5h-2v-2a5 5 0 0 1 5 -5 5 5 0 0 1 5 5v2h-2v3 2h2a2 2 0 0 0 2 -2v-3-2a7 7 0 0 0 -7 -7z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7v2 3a2 2 0 0 0 2 2h2v-5h-2v-2a5 5 0 0 1 5-5 5 5 0 0 1 5 5v2h-2v3 2h2a2 2 0 0 0 2-2v-3-2a7 7 0 0 0 -7-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_height_map_shape.svg b/editor/icons/icon_height_map_shape.svg new file mode 100644 index 0000000000..2e0bf53565 --- /dev/null +++ b/editor/icons/icon_height_map_shape.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="8" y2="11"><stop offset="0" stop-color="#68b6ff"/><stop offset="1" stop-color="#a2d2ff"/></linearGradient><g transform="translate(0 -1)"><path d="m1 1044.4 7 3 7-3-7-3z" fill="#a2d2ff" fill-rule="evenodd" transform="translate(0 -1033.4)"/><path d="m3 11c1-1 2-2 2-4s1-3 3-3 3 1 3 3 1 3 2 4z" fill="url(#a)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_help.svg b/editor/icons/icon_help.svg index c149b2a0a7..d993c95982 100644 --- a/editor/icons/icon_help.svg +++ b/editor/icons/icon_help.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5.0293 1c-0.99969-0.010925-2.0096 0.31165-3.0293 1v7c2.0172-1.3529 4.0167-1.3136 6 0 1.9833-1.3136 3.9828-1.3529 6 0v-7c-1.0197-0.68835-2.0296-1.0109-3.0293-1-0.6613 0.007227-1.3175 0.1735-1.9707 0.46289v4.5371h-1v-4c-0.98156-0.64465-1.971-0.98908-2.9707-1zm-5.0293 9v6h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-2zm5 3a3 3 0 0 0 3 3 3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3 3 3 0 0 0 -3 3zm6 0a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3zm-9-1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#e0e0e0" fill-opacity=".58824" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5.0293 1c-.99969-.010925-2.0096.31165-3.0293 1v7c2.0172-1.3529 4.0167-1.3136 6 0 1.9833-1.3136 3.9828-1.3529 6 0v-7c-1.0197-.68835-2.0296-1.0109-3.0293-1-.6613.007227-1.3175.1735-1.9707.46289v4.5371h-1v-4c-.98156-.64465-1.971-.98908-2.9707-1zm-5.0293 9v6h2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3zm5 3a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0 -3-3 3 3 0 0 0 -3 3zm6 0a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2h-1a3 3 0 0 0 -3 3zm-9-1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" style="fill:#e0e0e0;fill-opacity:.58824;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.32549;stroke-width:2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_help_search.svg b/editor/icons/icon_help_search.svg index 8e4f97d781..4a82ba23c7 100644 --- a/editor/icons/icon_help_search.svg +++ b/editor/icons/icon_help_search.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 0a4 4 0 0 0 -4 4 4 4 0 0 0 0.55859 2.0273l-2.2656 2.2656 1.4141 1.4141 2.2656-2.2656a4 4 0 0 0 2.0273 0.55859 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-9 8v6h2c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3h-2zm5 3c0 1.6569 1.3431 3 3 3s3-1.3431 3-3-1.3431-3-3-3-3 1.3431-3 3zm6 0c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 1e-5 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-9-1c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1v-2zm6 0c0.55228 1e-5 0.99999 0.44772 1 1-9.6e-6 0.55228-0.44772 0.99999-1 1-0.55228-1e-5 -0.99999-0.44772-1-1 9.6e-6 -0.55228 0.44772-0.99999 1-1z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 0a4 4 0 0 0 -4 4 4 4 0 0 0 .55859 2.0273l-2.2656 2.2656 1.4141 1.4141 2.2656-2.2656a4 4 0 0 0 2.0273.55859 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm-9 8v6h2c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3zm5 3c0 1.6569 1.3431 3 3 3s3-1.3431 3-3-1.3431-3-3-3-3 1.3431-3 3zm6 0c0 1.6569 1.3431 3 3 3h1v-2h-1c-.55228-.00001-.99999-.44772-1-1 .00001-.55228.44772-.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-9-1c.55228 0 1 .44772 1 1s-.44772 1-1 1zm6 0c.55228.00001.99999.44772 1 1-.0000096.55228-.44772.99999-1 1-.55228-.00001-.99999-.44772-1-1 .0000096-.55228.44772-.99999 1-1z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".32549" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_hinge_joint.svg b/editor/icons/icon_hinge_joint.svg index 900786aa4c..21b3e29cb5 100644 --- a/editor/icons/icon_hinge_joint.svg +++ b/editor/icons/icon_hinge_joint.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.2832 1.3281a1.0001 1.0001 0 0 0 -0.88086 0.51172l-3.6895 6.3906c0.40599-0.13877 0.83411-0.23047 1.2871-0.23047 0.37043 0 0.72206 0.067873 1.0625 0.16211l3.0723-5.3223a1.0001 1.0001 0 0 0 -0.85156 -1.5117zm-3.2832 7.6719a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h10a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-7.1738a3 3 0 0 0 0.17383 -1 3 3 0 0 0 -3 -3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.2832 1.3281a1.0001 1.0001 0 0 0 -.88086.51172l-3.6895 6.3906c.40599-.13877.83411-.23047 1.2871-.23047.37043 0 .72206.067873 1.0625.16211l3.0723-5.3223a1.0001 1.0001 0 0 0 -.85156-1.5117zm-3.2832 7.6719a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h10a1 1 0 0 0 1-1 1 1 0 0 0 -1-1h-7.1738a3 3 0 0 0 .17383-1 3 3 0 0 0 -3-3zm0 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_history.svg b/editor/icons/icon_history.svg index 7194206154..48eed7b0c8 100644 --- a/editor/icons/icon_history.svg +++ b/editor/icons/icon_history.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4 -4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6z"/> -<path transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)" d="m4.118 1048.3-1.6771-0.9683-1.6771-0.9682 1.6771-0.9683 1.6771-0.9682-1e-7 1.9365z"/> -<rect x="8" y="1041.4" width="2" height="4"/> -<rect x="8" y="1043.4" width="4" height="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/><path d="m8 1041.4h2v4h-2z"/><path d="m8 1043.4h4v2h-4z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_hsize.svg b/editor/icons/icon_hsize.svg index a004cb529a..075bab1050 100644 --- a/editor/icons/icon_hsize.svg +++ b/editor/icons/icon_hsize.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 7v-2l-3 3 3 3v-2h8v2l3-3-3-3v2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 7v-2l-3 3 3 3v-2h8v2l3-3-3-3v2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_image.svg b/editor/icons/icon_image.svg index b427ed5577..f3beda898e 100644 --- a/editor/icons/icon_image.svg +++ b/editor/icons/icon_image.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-12a1 1 0 0 0 -1 -1h-12zm1 2h10v8h-10v-8zm6 2l-1.5 2.5-0.70117 1.168-0.099609-0.16797-0.89844-1.5-0.90039 1.5-0.90039 1.5h1.8008 0.19922 1.5996 1.4004 3l-1.5-2.5-1.5-2.5z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm1 2h10v8h-10zm6 2-1.5 2.5-.70117 1.168-.099609-.16797-.89844-1.5-.90039 1.5-.90039 1.5h1.8008.19922 1.5996 1.4004 3l-1.5-2.5-1.5-2.5z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_image_texture.svg b/editor/icons/icon_image_texture.svg index 59516a244c..6e9905881b 100644 --- a/editor/icons/icon_image_texture.svg +++ b/editor/icons/icon_image_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-12a1 1 0 0 0 -1 -1h-12zm1 2h10v8h-10v-8zm6 2v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1h-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm1 2h10v8h-10zm6 2v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_immediate_geometry.svg b/editor/icons/icon_immediate_geometry.svg index f6d253d865..5679d5906f 100644 --- a/editor/icons/icon_immediate_geometry.svg +++ b/editor/icons/icon_immediate_geometry.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2.9208 1046.4c-0.26373 0.3-0.4204 0.7296-0.4204 1.2383 0 1.6277-3.1381-0.1781-0.33757 2.6703 0.88382 0.899 2.6544 0.6701 3.5382-0.2288 0.88384-0.899 0.88382-2.3565 0-3.2554-1.1002-1.1191-2.2001-1.0845-2.7803-0.4244zm2.3802-1.6103 2.4005 2.4416 6.8014-6.9177c0.66286-0.6742 0.66286-1.7673 0-2.4415-0.66288-0.6741-1.7376-0.6741-2.4005 0z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.9208 1046.4c-.26373.3-.4204.7296-.4204 1.2383 0 1.6277-3.1381-.1781-.33757 2.6703.88382.899 2.6544.6701 3.5382-.2288.88384-.899.88382-2.3565 0-3.2554-1.1002-1.1191-2.2001-1.0845-2.7803-.4244zm2.3802-1.6103 2.4005 2.4416 6.8014-6.9177c.66286-.6742.66286-1.7673 0-2.4415-.66288-.6741-1.7376-.6741-2.4005 0z" fill="#fc9c9c" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_import_check.svg b/editor/icons/icon_import_check.svg index c9f51bb6e0..b2b967f37a 100644 --- a/editor/icons/icon_import_check.svg +++ b/editor/icons/icon_import_check.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1044.4 4 4 8-8" fill="none" stroke="#45ff8b" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1044.4 4 4 8-8" fill="none" stroke="#45ff8b" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_import_fail.svg b/editor/icons/icon_import_fail.svg index f4aa212c20..6c81f88d9f 100644 --- a/editor/icons/icon_import_fail.svg +++ b/editor/icons/icon_import_fail.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2.9902 1.9902a1.0001 1.0001 0 0 0 -0.69727 1.7168l4.293 4.293-4.293 4.293a1.0001 1.0001 0 1 0 1.4141 1.4141l4.293-4.293 4.293 4.293a1.0001 1.0001 0 1 0 1.4141 -1.4141l-4.293-4.293 4.293-4.293a1.0001 1.0001 0 0 0 -0.72656 -1.7148 1.0001 1.0001 0 0 0 -0.6875 0.30078l-4.293 4.293-4.293-4.293a1.0001 1.0001 0 0 0 -0.7168 -0.30273z" color="#000000" color-rendering="auto" fill="#ff5d5d" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2.9902 1.9902a1.0001 1.0001 0 0 0 -.69727 1.7168l4.293 4.293-4.293 4.293a1.0001 1.0001 0 1 0 1.4141 1.4141l4.293-4.293 4.293 4.293a1.0001 1.0001 0 1 0 1.4141-1.4141l-4.293-4.293 4.293-4.293a1.0001 1.0001 0 0 0 -.72656-1.7148 1.0001 1.0001 0 0 0 -.6875.30078l-4.293 4.293-4.293-4.293a1.0001 1.0001 0 0 0 -.7168-.30273z" fill="#ff5d5d" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_information_sign.svg b/editor/icons/icon_information_sign.svg index 95002b6948..a99be1b042 100644 --- a/editor/icons/icon_information_sign.svg +++ b/editor/icons/icon_information_sign.svg @@ -1,70 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_information_sign.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1047" - inkscape:window-height="603" - id="namedview10" - showgrid="false" - inkscape:zoom="14.521571" - inkscape:cx="12.730205" - inkscape:cy="8.6526495" - inkscape:window-x="654" - inkscape:window-y="156" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <path - style="fill:#ffb65d;fill-opacity:1;fill-rule:evenodd;stroke-width:0.57024062" - inkscape:connector-curvature="0" - id="path2" - d="m 4.5291945,14.892249 h 6.8428865 l 3.421444,-3.421444 V 4.6279186 L 11.372081,1.2064749 H 4.5291945 L 1.1077509,4.6279186 v 6.8428864 z" /> - <rect - style="fill:#ffffff;fill-opacity:1;stroke-width:0.57024062" - id="rect829" - width="2.6243541" - height="6.5062103" - x="6.6998501" - y="6.3477535" /> - <ellipse - style="fill:#ffffff;fill-opacity:1;stroke-width:0.57024062" - id="path831" - cx="8.0393629" - cy="4.2154655" - rx="1.3941878" - ry="1.3668507" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-width=".570241"><path d="m4.5291945 14.892249h6.8428865l3.421444-3.421444v-6.8428864l-3.421444-3.4214437h-6.8428865l-3.4214436 3.4214437v6.8428864z" fill="#ffb65d" fill-rule="evenodd"/><g fill="#fff"><path d="m6.69985 6.347754h2.624354v6.50621h-2.624354z"/><ellipse cx="8.039363" cy="4.215466" rx="1.394188" ry="1.366851"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_insert_after.svg b/editor/icons/icon_insert_after.svg index 4696a2fc22..cab00048ac 100644 --- a/editor/icons/icon_insert_after.svg +++ b/editor/icons/icon_insert_after.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<circle cx="4" cy="12" r="2" fill="none"/> -<path d="m11.99 0.99023a1.0001 1.0001 0 0 0 -0.69726 1.7168l0.29297 0.29297h-2.5859v2h2.5859l-0.29297 0.29297a1.0001 1.0001 0 1 0 1.4141 1.4141l2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.7168 -0.30273zm-8.9902 0.0097656c-1.108 0-2 0.892-2 2v2c0 1.108 0.892 2 2 2h2c1.108 0 2-0.892 2-2v-2c0-1.108-0.892-2-2-2h-2z" fill="#e0e0e0"/> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="12" fill="none" r="2"/><path d="m11.99.99023a1.0001 1.0001 0 0 0 -.69726 1.7168l.29297.29297h-2.5859v2h2.5859l-.29297.29297a1.0001 1.0001 0 1 0 1.4141 1.4141l2-2a1.0001 1.0001 0 0 0 0-1.4141l-2-2a1.0001 1.0001 0 0 0 -.7168-.30273zm-8.9902.0097656c-1.108 0-2 .892-2 2v2c0 1.108.892 2 2 2h2c1.108 0 2-.892 2-2v-2c0-1.108-.892-2-2-2z" fill="#e0e0e0"/><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_insert_before.svg b/editor/icons/icon_insert_before.svg index eb85144214..366be3a1e6 100644 --- a/editor/icons/icon_insert_before.svg +++ b/editor/icons/icon_insert_before.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<circle cx="4" cy="12" r="2" fill="none"/> -<path d="m4.0096 0.99023a1.0001 1.0001 0 0 1 0.69726 1.7168l-0.29297 0.29297h2.5859v2h-2.5859l0.29297 0.29297a1.0001 1.0001 0 1 1 -1.4141 1.4141l-2-2a1.0001 1.0001 0 0 1 0 -1.4141l2-2a1.0001 1.0001 0 0 1 0.7168 -0.30273zm8.9902 0.0097656c1.108 0 2 0.892 2 2v2c0 1.108-0.892 2-2 2h-2c-1.108 0-2-0.892-2-2v-2c0-1.108 0.892-2 2-2z" fill="#e0e0e0"/> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="4" cy="12" fill="none" r="2"/><path d="m4.0096.99023a1.0001 1.0001 0 0 1 .69726 1.7168l-.29297.29297h2.5859v2h-2.5859l.29297.29297a1.0001 1.0001 0 1 1 -1.4141 1.4141l-2-2a1.0001 1.0001 0 0 1 0-1.4141l2-2a1.0001 1.0001 0 0 1 .7168-.30273zm8.9902.0097656c1.108 0 2 .892 2 2v2c0 1.108-.892 2-2 2h-2c-1.108 0-2-.892-2-2v-2c0-1.108.892-2 2-2z" fill="#e0e0e0"/><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_instance.svg b/editor/icons/icon_instance.svg index 5ef7be9331..8fc985bb51 100644 --- a/editor/icons/icon_instance.svg +++ b/editor/icons/icon_instance.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 1c-2.1973 0-4 1.8027-4 4 0 0.35477 0.062329 0.69321 0.15039 1.0215l2.3945-2.3945c0.36302-0.38506 0.87563-0.62695 1.4551-0.62695 1.1164 0 2 0.8836 2 2 0 0.57388-0.23667 1.0829-0.61523 1.4453l-2.4043 2.4043c0.32773 0.087749 0.66541 0.15039 1.0195 0.15039 2.1973 0 4-1.8027 4-4s-1.8027-4-4-4zm-0.013672 3.002a1 1 0 0 0 -0.69336 0.29102l-6 6a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l6-6a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102zm-5.9863 2.998c-2.1973 0-4 1.8027-4 4s1.8027 4 4 4 4-1.8027 4-4c0-0.35412-0.062641-0.6918-0.15039-1.0195l-2.4043 2.4043c-0.36245 0.37857-0.87143 0.61523-1.4453 0.61523-1.1164 0-2-0.8836-2-2 0-0.57944 0.24189-1.0921 0.62695-1.4551l2.3945-2.3945c-0.32827-0.088062-0.66671-0.15039-1.0215-0.15039z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 1c-2.1973 0-4 1.8027-4 4 0 .35477.062329.69321.15039 1.0215l2.3945-2.3945c.36302-.38506.87563-.62695 1.4551-.62695 1.1164 0 2 .8836 2 2 0 .57388-.23667 1.0829-.61523 1.4453l-2.4043 2.4043c.32773.087749.66541.15039 1.0195.15039 2.1973 0 4-1.8027 4-4s-1.8027-4-4-4zm-.013672 3.002a1 1 0 0 0 -.69336.29102l-6 6a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l6-6a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102zm-5.9863 2.998c-2.1973 0-4 1.8027-4 4s1.8027 4 4 4 4-1.8027 4-4c0-.35412-.062641-.6918-.15039-1.0195l-2.4043 2.4043c-.36245.37857-.87143.61523-1.4453.61523-1.1164 0-2-.8836-2-2 0-.57944.24189-1.0921.62695-1.4551l2.3945-2.3945c-.32827-.088062-.66671-.15039-1.0215-.15039z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_instance_options.svg b/editor/icons/icon_instance_options.svg index b15276c997..ca9a5bcc87 100644 --- a/editor/icons/icon_instance_options.svg +++ b/editor/icons/icon_instance_options.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m1 7v6c0 1.1046 0.89543 2 2 2h12v-8h-14zm4 2h6l-3 4-3-4z"/> -<path d="m0.71129 1040.4 0.28871 1.9791l2.2438-0.3273-0.81826-1.9018-1.7143 0.25zm3.6933-0.5387 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5775 0.81826 1.9018 1.9791-0.2887-0.81826-1.9018-1.9791 0.2887zm3.9581-0.5774 0.81826 1.9018 1.7143-0.25-0.28871-1.9791-2.2438 0.3273z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m1 7v6c0 1.1046.89543 2 2 2h12v-8zm4 2h6l-3 4z" transform="translate(0 1036.4)"/><path d="m.71129 1040.4.28871 1.9791 2.2438-.3273-.81826-1.9018-1.7143.25zm3.6933-.5387.81826 1.9018 1.9791-.2887-.81826-1.9018zm3.9581-.5775.81826 1.9018 1.9791-.2887-.81826-1.9018zm3.9581-.5774.81826 1.9018 1.7143-.25-.28871-1.9791-2.2438.3273z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_int.svg b/editor/icons/icon_int.svg index e16bb2ec07..4226c8cb7e 100644 --- a/editor/icons/icon_int.svg +++ b/editor/icons/icon_int.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 2v2h2v-2zm11 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2zm-8 2v6h2v-4h1a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-1zm-3 2v4h2v-4z" fill="#7dc6ef"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 2v2h2v-2zm11 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2zm-8 2v6h2v-4h1a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3h-1zm-3 2v4h2v-4z" fill="#7dc6ef"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interp_cubic.svg b/editor/icons/icon_interp_cubic.svg index d949ae7e74..c2dd7db08c 100644 --- a/editor/icons/icon_interp_cubic.svg +++ b/editor/icons/icon_interp_cubic.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m2 1050.4c3 0 3-4 6-4s3 4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c3 0 3-4 6-4s3 4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interp_linear.svg b/editor/icons/icon_interp_linear.svg index 00b5e326a0..368be15315 100644 --- a/editor/icons/icon_interp_linear.svg +++ b/editor/icons/icon_interp_linear.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m2 1050.4 6-4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4 6-4 6 4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interp_raw.svg b/editor/icons/icon_interp_raw.svg index 140ff2b0ff..1c6ae0062a 100644 --- a/editor/icons/icon_interp_raw.svg +++ b/editor/icons/icon_interp_raw.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m2 1050.4h3v-4h6v4h3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4h3v-4h6v4h3" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interp_wrap_clamp.svg b/editor/icons/icon_interp_wrap_clamp.svg index 8ed349c185..9634dc8a07 100644 --- a/editor/icons/icon_interp_wrap_clamp.svg +++ b/editor/icons/icon_interp_wrap_clamp.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m1 1v6h2v-2.9863-3.0137h-2zm2 3.0137a1.0001 1.0001 0 0 0 0.29297 0.69336l2 2a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-0.29297-0.29297h3.1719l-0.29297 0.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0.29297 -0.72266 1.0001 1.0001 0 0 0 -0.29297 -0.69141l-2-2a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l0.29297 0.29297h-3.1719l0.29297-0.29297a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102l-2 2a1.0001 1.0001 0 0 0 -0.29297 0.7207zm10-0.029297v3.0156h2v-6h-2v2.9844z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v6h2v-2.9863-3.0137zm2 3.0137a1.0001 1.0001 0 0 0 .29297.69336l2 2a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-.29297-.29297h3.1719l-.29297.29297a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 .29297-.72266 1.0001 1.0001 0 0 0 -.29297-.69141l-2-2a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l.29297.29297h-3.1719l.29297-.29297a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102l-2 2a1.0001 1.0001 0 0 0 -.29297.7207zm10-.029297v3.0156h2v-6h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interp_wrap_loop.svg b/editor/icons/icon_interp_wrap_loop.svg index 69c4d31d79..6fbb4356c8 100644 --- a/editor/icons/icon_interp_wrap_loop.svg +++ b/editor/icons/icon_interp_wrap_loop.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)" fill="#e0e0e0"> -<path transform="translate(0 1044.4)" d="m9 0l-3 2 3 2v-1h3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-3v-1zm-5 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h3v1l3-2-3-2v1h-3a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1v-2z"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 0-3 2 3 2v-1h3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3h-3zm-5 1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h3v1l3-2-3-2v1h-3a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_interpolated_camera.svg b/editor/icons/icon_interpolated_camera.svg index 7a33c64ca2..4bc4ba1ee9 100644 --- a/editor/icons/icon_interpolated_camera.svg +++ b/editor/icons/icon_interpolated_camera.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 0a3 3 0 0 0 -2.9883 2.7773 3 3 0 0 0 -2.0117 -0.77734 3 3 0 0 0 -3 3 3 3 0 0 0 2 2.8242v2.1758c0 0.554 0.44599 1 1 1h6c0.55401 0 1-0.446 1-1v-1l3 2v-6l-3 2v-1.7695a3 3 0 0 0 1 -2.2305 3 3 0 0 0 -3 -3zm-6 12v4h1v-4h-1zm3 0v4h1v-1h1a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1-1zm5 0a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h1a1 1 0 0 0 1 -1v-2a1 1 0 0 0 -1 -1h-1zm-4 1h1v1h-1v-1zm4 0h1v2h-1v-2z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9.5.00004c-1.5691.0017903-2.8718 1.2125-2.9883 2.7773-.55103-.49952-1.268-.77655-2.0117-.77734-1.6569 0-3 1.3431-3 3 .00179 1.2698.80282 2.4009 2 2.8242v2.1758c0 .554.44599 1 1 1h6c.55401 0 .9853-.4462 1-1v-1l3 2v-6l-3 2v-1.7695c.63486-.56783.99842-1.3788 1-2.2305 0-1.6569-1.3431-3-3-3zm-6 12v4h1v-4zm3 0v4h1v-1h1c.55228 0 1-.44772 1-1v-1c0-.55228-.44824-1.024-1-1h-1zm5 0c-.55228 0-1 .44772-1 1v2c0 .55228.44772 1 1 1h1c.55228 0 1-.44772 1-1v-2c0-.55228-.44772-1-1-1zm-4 1h1v1h-1zm4 0h1v2h-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_inverse_kinematics.svg b/editor/icons/icon_inverse_kinematics.svg index aac40f6015..a98c989ccc 100644 --- a/editor/icons/icon_inverse_kinematics.svg +++ b/editor/icons/icon_inverse_kinematics.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v10.27h2v-10.271a2 2 0 0 0 0.73047 -0.72852h4.541a2 2 0 0 0 0.72852 0.73047v3.2695h-2v2l-1 2 3 2v-4h2v4l3-2-1-2v-2h-2v-3.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-4.541a2 2 0 0 0 -1.7285 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v10.27h2v-10.271a2 2 0 0 0 .73047-.72852h4.541a2 2 0 0 0 .72852.73047v3.2695h-2v2l-1 2 3 2v-4h2v4l3-2-1-2v-2h-2v-3.2715a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-4.541a2 2 0 0 0 -1.7285-1z" fill="#fc9c9c" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_issue.svg b/editor/icons/icon_issue.svg index 73e21a9b68..ddaaf41440 100644 --- a/editor/icons/icon_issue.svg +++ b/editor/icons/icon_issue.svg @@ -1,70 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_issue.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="2242" - inkscape:window-height="1224" - id="namedview8" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="0.93716338" - inkscape:cy="15.746557" - inkscape:window-x="134" - inkscape:window-y="55" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(0 -1036.4)" - id="g4" /> - <g - aria-label="!" - transform="matrix(1.2172834,0,0,0.60107067,0.478728,1.8392137)" - style="font-style:normal;font-weight:normal;font-size:19.68510056px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:0.92273909" - id="text3719"> - <path - d="M 5.2902433,14.98657 H 7.241452 v 2.441414 H 5.2902433 Z m 0,-11.909101 H 7.241452 V 9.3732409 L 7.0492147,12.804677 H 5.4920925 L 5.2902433,9.3732409 Z" - style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.92273909" - id="path10" - inkscape:connector-curvature="0" /> - </g> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.88671917" - d="M 8.0503291,1.1522775 A 6.8983747,6.8983747 0 0 0 1.1522775,8.0503291 6.8983747,6.8983747 0 0 0 8.0503291,14.950113 6.8983747,6.8983747 0 0 0 14.950113,8.0503291 6.8983747,6.8983747 0 0 0 8.0503291,1.1522775 Z M 8.0208873,2.2953139 A 5.6659852,5.6659852 0 0 1 13.687577,7.9602717 5.6659852,5.6659852 0 0 1 8.0208873,13.626961 5.6659852,5.6659852 0 0 1 2.3541977,7.9602717 5.6659852,5.6659852 0 0 1 8.0208873,2.2953139 Z" - id="path4526" - inkscape:connector-curvature="0" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m5.2902433 14.98657h1.9512087v2.441414h-1.9512087zm0-11.909101h1.9512087v6.2957719l-.1922373 3.4314361h-1.5571222l-.2018492-3.4314361z" transform="matrix(1.2172834 0 0 .60107067 .478728 1.839214)"/><path d="m8.0503291 1.1522775a6.8983747 6.8983747 0 0 0 -6.8980516 6.8980516 6.8983747 6.8983747 0 0 0 6.8980516 6.8997839 6.8983747 6.8983747 0 0 0 6.8997839-6.8997839 6.8983747 6.8983747 0 0 0 -6.8997839-6.8980516zm-.0294418 1.1430364a5.6659852 5.6659852 0 0 1 5.6666897 5.6649578 5.6659852 5.6659852 0 0 1 -5.6666897 5.6666893 5.6659852 5.6659852 0 0 1 -5.6666896-5.6666893 5.6659852 5.6659852 0 0 1 5.6666896-5.6649578z" stroke-width=".886719"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_item_list.svg b/editor/icons/icon_item_list.svg index 8b2221ade6..311ed08a44 100644 --- a/editor/icons/icon_item_list.svg +++ b/editor/icons/icon_item_list.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm1 1v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm1 1v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-6 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-6 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_joy_axis.svg b/editor/icons/icon_joy_axis.svg index 8d9e3e01d8..cb7b5cdf8f 100644 --- a/editor/icons/icon_joy_axis.svg +++ b/editor/icons/icon_joy_axis.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="27" y="1038.4" width="7" height="14" fill="#fff" fill-opacity=".99608"/> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h12v-14h-12zm4 2h2a1 1 0 0 1 1 1v2h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-2h-2a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1h2v-2a1 1 0 0 1 1 -1z" fill="#e0e0e0" fill-opacity=".99608"/> -<circle cx="8" cy="1044.4" r="1" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m27 1038.4h7v14h-7z" fill="#fff" fill-opacity=".99608"/><g fill="#e0e0e0"><path d="m3 1a2 2 0 0 0 -2 2v10a2 2 0 0 0 2 2h12v-14zm4 2h2a1 1 0 0 1 1 1v2h2a1 1 0 0 1 1 1v2a1 1 0 0 1 -1 1h-2v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1-1v-2h-2a1 1 0 0 1 -1-1v-2a1 1 0 0 1 1-1h2v-2a1 1 0 0 1 1-1z" fill-opacity=".99608" transform="translate(0 1036.4)"/><circle cx="8" cy="1044.4" r="1"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_joy_button.svg b/editor/icons/icon_joy_button.svg index 98cf48e70d..9f4fbfdf2d 100644 --- a/editor/icons/icon_joy_button.svg +++ b/editor/icons/icon_joy_button.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-opacity=".99608"> -<rect x="27" y="1038.4" width="7" height="14" fill="#fff"/> -<path transform="translate(0 1036.4)" d="m1 1v14h12c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2h-12zm7 1a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-4 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm8 0a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2zm-4 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m27 1038.4h7v14h-7z" fill="#fff"/><path d="m1 1v14h12c1.1046 0 2-.8954 2-2v-10c0-1.1046-.89543-2-2-2zm7 1a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm-4 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm8 0a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2zm-4 4a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_joypad.svg b/editor/icons/icon_joypad.svg index bde84bd399..8cb5de0c0e 100644 --- a/editor/icons/icon_joypad.svg +++ b/editor/icons/icon_joypad.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 3c-0.55226 5.52e-5 -0.99994 0.44774-1 1v8c5.52e-5 0.55226 0.44774 0.99994 1 1h14c0.55226-5.5e-5 0.99994-0.44774 1-1v-8c-5.5e-5 -0.55226-0.44774-0.99994-1-1h-14zm2 2h2v2h2v2h-2v2h-2v-2h-2v-2h2v-2zm10.5 0a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1 -1.5 1.5 1.5 1.5 0 0 1 -1.5 -1.5 1.5 1.5 0 0 1 1.5 -1.5zm-3 3a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1 -1.5 1.5 1.5 1.5 0 0 1 -1.5 -1.5 1.5 1.5 0 0 1 1.5 -1.5z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3c-.55226.0000552-.99994.44774-1 1v8c.0000552.55226.44774.99994 1 1h14c.55226-.000055.99994-.44774 1-1v-8c-.000055-.55226-.44774-.99994-1-1zm2 2h2v2h2v2h-2v2h-2v-2h-2v-2h2zm10.5 0a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1 -1.5 1.5 1.5 1.5 0 0 1 -1.5-1.5 1.5 1.5 0 0 1 1.5-1.5zm-3 3a1.5 1.5 0 0 1 1.5 1.5 1.5 1.5 0 0 1 -1.5 1.5 1.5 1.5 0 0 1 -1.5-1.5 1.5 1.5 0 0 1 1.5-1.5z" fill="#e0e0e0" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key.svg b/editor/icons/icon_key.svg index cc152b58a5..d134735c53 100644 --- a/editor/icons/icon_key.svg +++ b/editor/icons/icon_key.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 4a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 3.8672 3 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 4a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 3.8672 3 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_bezier_handle.svg b/editor/icons/icon_key_bezier_handle.svg index d7b22d0905..9f00f61304 100644 --- a/editor/icons/icon_key_bezier_handle.svg +++ b/editor/icons/icon_key_bezier_handle.svg @@ -1,60 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="8" - height="8" - version="1.1" - viewBox="0 0 8 8" - id="svg6" - sodipodi:docname="icon_key_bezier_handle.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1853" - inkscape:window-height="1016" - id="namedview8" - showgrid="false" - inkscape:zoom="59" - inkscape:cx="2.0952442" - inkscape:cy="4.6061633" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1044.4)" - id="g4"> - <path - style="fill:#e0e0e0;fill-opacity:1" - d="M 3.9960938 -0.037109375 C 3.8010931 -0.037109375 3.6064535 0.038077731 3.4570312 0.1875 L 0.22070312 3.4238281 C -0.078134343 3.7226656 -0.078141414 4.2050617 0.22070312 4.5039062 L 3.4570312 7.7402344 C 3.7558687 8.0390718 4.2382719 8.0390718 4.5371094 7.7402344 L 7.7734375 4.5039062 C 8.072282 4.2050617 8.072275 3.7226656 7.7734375 3.4238281 L 4.5371094 0.1875 C 4.3876871 0.038077731 4.1910944 -0.037109375 3.9960938 -0.037109375 z M 4.0253906 0.81445312 C 4.1770098 0.81445312 4.3291322 0.87241756 4.4453125 0.98828125 L 6.9609375 3.4960938 C 7.193298 3.7278211 7.193298 4.102257 6.9609375 4.3339844 L 4.4453125 6.84375 C 4.212952 7.0754774 3.8378293 7.0754774 3.6054688 6.84375 L 1.0898438 4.3339844 C 0.85748323 4.102257 0.85748323 3.7278211 1.0898438 3.4960938 L 3.6054688 0.98828125 C 3.721649 0.87241756 3.8737714 0.81445312 4.0253906 0.81445312 z " - transform="translate(0,1044.4)" - id="rect2" /> - </g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m3.9960938-.03710938c-.1950007 0-.3896403.07518711-.5390626.22460938l-3.23632808 3.2363281c-.29883746.2988375-.29884453.7812336 0 1.0800781l3.23632808 3.2363282c.2988375.2988374.7812407.2988374 1.0800782 0l3.2363281-3.2363282c.2988445-.2988445.2988375-.7812406 0-1.0800781l-3.2363281-3.2363281c-.1494223-.14942227-.346015-.22460938-.5410156-.22460938zm.0292968.8515625c.1516192 0 .3037416.05796444.4199219.17382813l2.515625 2.50781255c.2323605.2317273.2323605.6061632 0 .8378906l-2.515625 2.5097656c-.2323605.2317274-.6074832.2317274-.8398437 0l-2.515625-2.5097656c-.23236057-.2317274-.23236057-.6061633 0-.8378906l2.515625-2.50781255c.1161802-.11586369.2683026-.17382813.4199218-.17382813z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_bezier_point.svg b/editor/icons/icon_key_bezier_point.svg index aa33063c95..0edb55cda1 100644 --- a/editor/icons/icon_key_bezier_point.svg +++ b/editor/icons/icon_key_bezier_point.svg @@ -1,64 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="8" - height="8" - version="1.1" - viewBox="0 0 8 8" - id="svg6" - sodipodi:docname="icon_key_bezier_point.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="836" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="4" - inkscape:cy="4" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(0 -1044.4)" - id="g4"> - <rect - transform="rotate(-45)" - x="-741.53" - y="741.08" - width="6.1027" - height="6.1027" - ry=".76286" - fill="#e0e0e0" - id="rect2" /> - </g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="6.1027" ry=".76286" transform="matrix(.70710678 -.70710678 .70710678 .70710678 0 -1044.4)" width="6.1027" x="-741.53" y="741.08"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_bezier_selected.svg b/editor/icons/icon_key_bezier_selected.svg index e3f967707a..9e50e2bdf1 100644 --- a/editor/icons/icon_key_bezier_selected.svg +++ b/editor/icons/icon_key_bezier_selected.svg @@ -1,64 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="8" - height="8" - version="1.1" - viewBox="0 0 8 8" - id="svg6" - sodipodi:docname="icon_key_bezier_selected.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="836" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="4" - inkscape:cy="4" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - transform="translate(0 -1044.4)" - id="g4"> - <rect - transform="rotate(-45)" - x="-741.53" - y="741.08" - width="6.1027" - height="6.1027" - ry=".76286" - fill="#84c2ff" - id="rect2" /> - </g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#84c2ff" height="6.1027" ry=".76286" transform="matrix(.70710678 -.70710678 .70710678 .70710678 0 -1044.4)" width="6.1027" x="-741.53" y="741.08"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_hover.svg b/editor/icons/icon_key_hover.svg index 4a3fab4754..417621716b 100644 --- a/editor/icons/icon_key_hover.svg +++ b/editor/icons/icon_key_hover.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<rect transform="rotate(-45)" x="-741.53" y="741.08" width="6.1027" height="6.1027" ry=".76286" fill="#fff"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#fff" height="6.1027" ry=".76286" transform="matrix(.70710678 -.70710678 .70710678 .70710678 0 -1044.4)" width="6.1027" x="-741.53" y="741.08"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_invalid.svg b/editor/icons/icon_key_invalid.svg index 742859bac5..8ac9445b31 100644 --- a/editor/icons/icon_key_invalid.svg +++ b/editor/icons/icon_key_invalid.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m0.46447 1046.2 2.1213 2.1213-2.1213 2.1213 1.4142 1.4142l2.1213-2.1213 2.1213 2.1213 1.4142-1.4142-2.1213-2.1213 2.1213-2.1213-1.4142-1.4142-2.1213 2.1213-2.1213-2.1213-1.4142 1.4142z" fill="#ff5d5d"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m.46447 1046.2 2.1213 2.1213-2.1213 2.1213 1.4142 1.4142 2.1213-2.1213 2.1213 2.1213 1.4142-1.4142-2.1213-2.1213 2.1213-2.1213-1.4142-1.4142-2.1213 2.1213-2.1213-2.1213-1.4142 1.4142z" fill="#ff5d5d" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_next.svg b/editor/icons/icon_key_next.svg index 7fb221f96d..2d064e7e86 100644 --- a/editor/icons/icon_key_next.svg +++ b/editor/icons/icon_key_next.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2h-2z" fill="#84ffb1"/> -<path transform="translate(0 1036.4)" d="m11 1a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 2.8672 2.8691v-0.86914h3.6387a4 4 0 0 0 1.3613 -3 4 4 0 0 0 -4 -4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/><path d="m11 1a4 4 0 0 0 -3.8691 3h-6.1309v2h1v2h3v-2h2.1328a4 4 0 0 0 2.8672 2.8691v-.86914h3.6387a4 4 0 0 0 1.3613-3 4 4 0 0 0 -4-4zm0 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_position.svg b/editor/icons/icon_key_position.svg index 203b697ad2..d152b76e8d 100644 --- a/editor/icons/icon_key_position.svg +++ b/editor/icons/icon_key_position.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm-7 7v5c0 1.6569 1.3471 3.114 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1v-5h-2zm7 2c-1.645 0-3 1.355-3 3s1.355 3 3 3 3-1.355 3-3-1.355-3-3-3zm3 3c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 1e-5 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-3-1c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-.195 0-.38964.07519-.53906.22461l-3.2363 3.2363c-.29884.29884-.29884.77929 0 1.0781l3.2363 3.2363c.29884.29884.77929.29884 1.0781 0l3.2363-3.2363c.29884-.29884.29884-.77929 0-1.0781l-3.2363-3.2363c-.14942-.14942-.34406-.22461-.53906-.22461zm-7 7v5c0 1.6569 1.3471 3.114 3 3h1v-2h-1c-.55228-.00001-.99999-.44772-1-1v-5zm7 2c-1.645 0-3 1.355-3 3s1.355 3 3 3 3-1.355 3-3-1.355-3-3-3zm3 3c0 1.6569 1.3431 3 3 3h1v-2h-1c-.55228-.00001-.99999-.44772-1-1 .00001-.55228.44772-.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm-3-1c.56413 0 1 .4359 1 1 0 .5642-.43587 1-1 1s-1-.4358-1-1c0-.5641.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_rotation.svg b/editor/icons/icon_key_rotation.svg index 0f975631b2..0d3577eac4 100644 --- a/editor/icons/icon_key_rotation.svg +++ b/editor/icons/icon_key_rotation.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228 0-0.99999-0.4477-1-1v-1h2v-2h-2v-2h-2zm0 5c0-1.645-1.355-3-3-3s-3 1.355-3 3 1.355 3 3 3 3-1.355 3-3zm-7-3c-1.6569 0-3 1.3431-3 3v3h2v-3c9.6e-6 -0.5523 0.44772-1 1-1h1v-2h-1zm4 2c0.56413 0 1 0.4359 1 1 0 0.5642-0.43587 1-1 1s-1-0.4358-1-1c0-0.5641 0.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-.195 0-.38964.07519-.53906.22461l-3.2363 3.2363c-.29884.29884-.29884.77929 0 1.0781l3.2363 3.2363c.29884.29884.77929.29884 1.0781 0l3.2363-3.2363c.29884-.29884.29884-.77929 0-1.0781l-3.2363-3.2363c-.14942-.14942-.34406-.22461-.53906-.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-.55228 0-.99999-.4477-1-1v-1h2v-2h-2v-2zm0 5c0-1.645-1.355-3-3-3s-3 1.355-3 3 1.355 3 3 3 3-1.355 3-3zm-7-3c-1.6569 0-3 1.3431-3 3v3h2v-3c.0000096-.5523.44772-1 1-1h1v-2zm4 2c.56413 0 1 .4359 1 1 0 .5642-.43587 1-1 1s-1-.4358-1-1c0-.5641.43587-1 1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_key_scale.svg b/editor/icons/icon_key_scale.svg index eaa12fdf0e..a1214db62e 100644 --- a/editor/icons/icon_key_scale.svg +++ b/editor/icons/icon_key_scale.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-0.195 0-0.38964 0.07519-0.53906 0.22461l-3.2363 3.2363c-0.29884 0.29884-0.29884 0.77929 0 1.0781l3.2363 3.2363c0.29884 0.29884 0.77929 0.29884 1.0781 0l3.2363-3.2363c0.29884-0.29884 0.29884-0.77929 0-1.0781l-3.2363-3.2363c-0.14942-0.14942-0.34406-0.22461-0.53906-0.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1v-5h-2zm-8 2c-0.71466-1e-4 -1.3751 0.3811-1.7324 1-0.35727 0.6188-0.35727 1.3812 0 2 0.35733 0.6189 1.0178 1.0001 1.7324 1h-2v2h2c0.71466 1e-4 1.3751-0.3811 1.7324-1 0.35727-0.6188 0.35727-1.3812 0-2-0.35733-0.6189-1.0178-1.0001-1.7324-1h2v-2h-2zm6 0c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3h1v-2h-1c-0.55228-1e-5 -0.99999-0.44772-1-1 9.6e-6 -0.55228 0.44772-0.99999 1-1h1v-2h-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-.195 0-.38964.07519-.53906.22461l-3.2363 3.2363c-.29884.29884-.29884.77929 0 1.0781l3.2363 3.2363c.29884.29884.77929.29884 1.0781 0l3.2363-3.2363c.29884-.29884.29884-.77929 0-1.0781l-3.2363-3.2363c-.14942-.14942-.34406-.22461-.53906-.22461zm3 7v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-.55228-.00001-.99999-.44772-1-1v-5zm-8 2c-.71466-.0001-1.3751.3811-1.7324 1-.35727.6188-.35727 1.3812 0 2 .35733.6189 1.0178 1.0001 1.7324 1h-2v2h2c.71466.0001 1.3751-.3811 1.7324-1 .35727-.6188.35727-1.3812 0-2-.35733-.6189-1.0178-1.0001-1.7324-1h2v-2zm6 0c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3h1v-2h-1c-.55228-.00001-.99999-.44772-1-1 .0000096-.55228.44772-.99999 1-1h1v-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_keyboard.svg b/editor/icons/icon_keyboard.svg index ca58ec6cb2..bd8736278d 100644 --- a/editor/icons/icon_keyboard.svg +++ b/editor/icons/icon_keyboard.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m4 2a1 1 0 0 0 -1 1v9.084a1 0.91667 0 0 0 1 0.91602h8a1 0.91667 0 0 0 1 -0.91602v-9.084a1 1 0 0 0 -1 -1h-8zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1zm4 0h2v3l2-3h2l-2 3 2 4h-2l-2-4v4h-2v-7z" fill="#e0e0e0"/> -<rect x="27" y="1038.4" width="7" height="14" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m4 2a1 1 0 0 0 -1 1v9.084a1 .91667 0 0 0 1 .91602h8a1 .91667 0 0 0 1-.91602v-9.084a1 1 0 0 0 -1-1zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9h-1v9a.99998.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1-1v-9zm4 0h2v3l2-3h2l-2 3 2 4h-2l-2-4v4h-2z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m27 1038.4h7v14h-7z" fill="#fff"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_kinematic_body.svg b/editor/icons/icon_kinematic_body.svg index c5f817c68c..16078fbdec 100644 --- a/editor/icons/icon_kinematic_body.svg +++ b/editor/icons/icon_kinematic_body.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 1c-0.55401 0-1 0.44599-1 1v3c0 0.55401 0.44599 1 1 1h1v0.99023a1.0001 1.0001 0 0 0 -0.31641 0.0625l-2.0508 0.68359-0.68359-2.0508a1.0001 1.0001 0 0 0 -0.99023 -0.69727 1.0001 1.0001 0 0 0 -0.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656 0.63281l1.6836-0.56055v0.61133c0 0.04088 0.018715 0.07566 0.023437 0.11523l-4.5781 3.0527a1.0001 1.0001 0 1 0 1.1094 1.6641l5.0566-3.3711 1.4941 2.9863a1.0001 1.0001 0 0 0 1.2109 0.50195l3-1a1.0001 1.0001 0 1 0 -0.63281 -1.8965l-2.1777 0.72461-0.97461-1.9512c0.2759-0.17764 0.46875-0.47227 0.46875-0.82617v-1h1.3828l0.72266 1.4473a1.0001 1.0001 0 1 0 1.7891 -0.89453l-1-2a1.0001 1.0001 0 0 0 -0.89453 -0.55273h-3v-1h1c0.55401 0 1-0.44599 1-1v-3c0-0.55401-0.44599-1-1-1zm0 2h1v2h-1z" fill="#fc9c9c" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1c-.55401 0-1 .44599-1 1v3c0 .55401.44599 1 1 1h1v.99023a1.0001 1.0001 0 0 0 -.31641.0625l-2.0508.68359-.68359-2.0508a1.0001 1.0001 0 0 0 -.99023-.69727 1.0001 1.0001 0 0 0 -.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656.63281l1.6836-.56055v.61133c0 .04088.018715.07566.023437.11523l-4.5781 3.0527a1.0001 1.0001 0 1 0 1.1094 1.6641l5.0566-3.3711 1.4941 2.9863a1.0001 1.0001 0 0 0 1.2109.50195l3-1a1.0001 1.0001 0 1 0 -.63281-1.8965l-2.1777.72461-.97461-1.9512c.2759-.17764.46875-.47227.46875-.82617v-1h1.3828l.72266 1.4473a1.0001 1.0001 0 1 0 1.7891-.89453l-1-2a1.0001 1.0001 0 0 0 -.89453-.55273h-3v-1h1c.55401 0 1-.44599 1-1v-3c0-.55401-.44599-1-1-1zm0 2h1v2h-1z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_kinematic_body_2d.svg b/editor/icons/icon_kinematic_body_2d.svg index cac3ac7684..be9dfa2d27 100644 --- a/editor/icons/icon_kinematic_body_2d.svg +++ b/editor/icons/icon_kinematic_body_2d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6.4921 1c-0.55401 0-1 0.446-1 1v3c0 0.554 0.44599 1 1 1h1v0.9902a1.0001 1.0001 0 0 0 -0.31641 0.062l-2.0508 0.6836-0.68359-2.0508a1.0001 1.0001 0 0 0 -0.99023 -0.6972 1.0001 1.0001 0 0 0 -0.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656 0.6328l1.6836-0.5605v0.6113c0 0.041 0.018715 0.076 0.023437 0.1152l-4.5781 3.0528a1.0001 1.0001 0 1 0 1.1094 1.664l5.0566-3.3711 1.4941 2.9864a1.0001 1.0001 0 0 0 1.2109 0.5019l3-1a1.0001 1.0001 0 1 0 -0.63281 -1.8965l-2.1777 0.7246-0.97461-1.9511c0.2759-0.1777 0.46875-0.4723 0.46875-0.8262v-1h1.3828l0.72266 1.4473a1.0001 1.0001 0 1 0 1.7891 -0.8946l-1-2a1.0001 1.0001 0 0 0 -0.89453 -0.5527h-3v-1h1c0.55401 0 1-0.446 1-1v-3c0-0.554-0.44599-1-1-1zm0 2h1v2h-1z" fill="#a5b7f3"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6.4921 1c-.55401 0-1 .446-1 1v3c0 .554.44599 1 1 1h1v.9902a1.0001 1.0001 0 0 0 -.31641.062l-2.0508.6836-.68359-2.0508a1.0001 1.0001 0 0 0 -.99023-.6972 1.0001 1.0001 0 0 0 -.9082 1.3281l1 3a1.0001 1.0001 0 0 0 1.2656.6328l1.6836-.5605v.6113c0 .041.018715.076.023437.1152l-4.5781 3.0528a1.0001 1.0001 0 1 0 1.1094 1.664l5.0566-3.3711 1.4941 2.9864a1.0001 1.0001 0 0 0 1.2109.5019l3-1a1.0001 1.0001 0 1 0 -.63281-1.8965l-2.1777.7246-.97461-1.9511c.2759-.1777.46875-.4723.46875-.8262v-1h1.3828l.72266 1.4473a1.0001 1.0001 0 1 0 1.7891-.8946l-1-2a1.0001 1.0001 0 0 0 -.89453-.5527h-3v-1h1c.55401 0 1-.446 1-1v-3c0-.554-.44599-1-1-1zm0 2h1v2h-1z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_label.svg b/editor/icons/icon_label.svg index 2ca7febb54..24de398501 100644 --- a/editor/icons/icon_label.svg +++ b/editor/icons/icon_label.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 3a1.0001 1.0001 0 0 0 -0.70703 0.29297l-4 4a1.0001 1.0001 0 0 0 0 1.4141l4 4a1.0001 1.0001 0 0 0 0.70703 0.29297h8a1.0001 1.0001 0 0 0 1 -1v-8a1.0001 1.0001 0 0 0 -1 -1h-8zm-1 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" color="#000000" color-rendering="auto" fill="#a5efac" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 3a1.0001 1.0001 0 0 0 -.70703.29297l-4 4a1.0001 1.0001 0 0 0 0 1.4141l4 4a1.0001 1.0001 0 0 0 .70703.29297h8a1.0001 1.0001 0 0 0 1-1v-8a1.0001 1.0001 0 0 0 -1-1h-8zm-1 4a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#a5efac" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_large_texture.svg b/editor/icons/icon_large_texture.svg index b68b27cfb4..15920bf3d3 100644 --- a/editor/icons/icon_large_texture.svg +++ b/editor/icons/icon_large_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v1 2h1v-2h2v-1h-3zm11 0v1h2v2h1v-3h-3zm-3 5v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-1-1h-1v-1h-1zm-8 6v2 1h3v-1h-2v-2h-1zm13 0v2h-2v1h3v-1-2h-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v1 2h1v-2h2v-1zm11 0v1h2v2h1v-3zm-3 5v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-1-1h-1v-1zm-8 6v2 1h3v-1h-2v-2zm13 0v2h-2v1h3v-1-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_light_2d.svg b/editor/icons/icon_light_2d.svg index 6e680ddef2..87cfb29149 100644 --- a/editor/icons/icon_light_2d.svg +++ b/editor/icons/icon_light_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5 5 5 0 0 0 3 4.5762v2.4238h4v-2.4199a5 5 0 0 0 3 -4.5801 5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3zm-1 11v1h2v-1h-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a5 5 0 0 0 -5 5 5 5 0 0 0 3 4.5762v2.4238h4v-2.4199a5 5 0 0 0 3-4.5801 5 5 0 0 0 -5-5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3-3 3 3 0 0 1 3-3zm-1 11v1h2v-1z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_light_occluder_2d.svg b/editor/icons/icon_light_occluder_2d.svg index 153de7eede..2905f9badd 100644 --- a/editor/icons/icon_light_occluder_2d.svg +++ b/editor/icons/icon_light_occluder_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m8 1037.4c-2.7614 0-5 2.2386-5 5 0.00253 1.9858 1.18 3.7819 3 4.5762v2.4238h4v-2.4199c1.8213-0.7949 2.999-2.5929 3-4.5801 0-2.7614-2.2386-5-5-5zm0 2v6c-1.6569 0-3-1.3431-3-3s1.3431-3 3-3zm-1 11v1h2v-1z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1037.4c-2.7614 0-5 2.2386-5 5 .00253 1.9858 1.18 3.7819 3 4.5762v2.4238h4v-2.4199c1.8213-.7949 2.999-2.5929 3-4.5801 0-2.7614-2.2386-5-5-5zm0 2v6c-1.6569 0-3-1.3431-3-3s1.3431-3 3-3zm-1 11v1h2v-1z" fill="#a5b7f3" fill-opacity=".98824" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_line_2d.svg b/editor/icons/icon_line_2d.svg index ca9184e979..9728262e50 100644 --- a/editor/icons/icon_line_2d.svg +++ b/editor/icons/icon_line_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1045.4 3 4 3-10 3 6 3-2" fill="none" stroke="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1045.4 3 4 3-10 3 6 3-2" fill="none" stroke="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_line_edit.svg b/editor/icons/icon_line_edit.svg index 13a4f3c2c2..4df7a3b248 100644 --- a/editor/icons/icon_line_edit.svg +++ b/editor/icons/icon_line_edit.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 4v5h2v-5h-2zm-1 7c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2h-2-10-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 4v5h2v-5zm-1 7c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2h-2-10z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_line_shape_2d.svg b/editor/icons/icon_line_shape_2d.svg index f6c036bb2e..758c0fbef2 100644 --- a/editor/icons/icon_line_shape_2d.svg +++ b/editor/icons/icon_line_shape_2d.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke="#68b6ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<path d="m1 1037.4 14 14" fill="#68b6ff" fill-rule="evenodd" stroke-opacity=".39216"/> -<path d="m3 1039.4 10 10" fill="none" stroke-opacity=".58824"/> -<path d="m5 1041.4 6 6" fill="none"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke="#68b6ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"><path d="m1 1037.4 14 14" fill="#68b6ff" fill-rule="evenodd" stroke-opacity=".39216"/><g fill="none"><path d="m3 1039.4 10 10" stroke-opacity=".58824"/><path d="m5 1041.4 6 6"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_link_button.svg b/editor/icons/icon_link_button.svg index 0e13db7477..bf7f7657eb 100644 --- a/editor/icons/icon_link_button.svg +++ b/editor/icons/icon_link_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 3a5 5 0 0 0 -4.3301 2.5 5 5 0 0 0 0 5 5 5 0 0 0 4.3301 2.5h1v-2h-1a3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3h1v-2h-1zm3 0v2h1a3 3 0 0 1 3 3 3 3 0 0 1 -3 3h-1v2h1a5 5 0 0 0 4.3301 -2.5 5 5 0 0 0 0 -5 5 5 0 0 0 -4.3301 -2.5h-1zm-3 4a0.99998 0.99998 0 0 0 -1 1 0.99998 0.99998 0 0 0 1 1h4a0.99998 0.99998 0 0 0 1 -1 0.99998 0.99998 0 0 0 -1 -1h-4z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 3a5 5 0 0 0 -4.3301 2.5 5 5 0 0 0 0 5 5 5 0 0 0 4.3301 2.5h1v-2h-1a3 3 0 0 1 -3-3 3 3 0 0 1 3-3h1v-2zm3 0v2h1a3 3 0 0 1 3 3 3 3 0 0 1 -3 3h-1v2h1a5 5 0 0 0 4.3301-2.5 5 5 0 0 0 0-5 5 5 0 0 0 -4.3301-2.5zm-3 4a.99998.99998 0 0 0 -1 1 .99998.99998 0 0 0 1 1h4a.99998.99998 0 0 0 1-1 .99998.99998 0 0 0 -1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_list_select.svg b/editor/icons/icon_list_select.svg index d619d84fd9..42feb1922b 100644 --- a/editor/icons/icon_list_select.svg +++ b/editor/icons/icon_list_select.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h8.2578l-0.82227-2h-5.4355v-2h4.6113l-0.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977 -0.49805v-0.0019531a1.5002 1.5002 0 0 1 0.58594 0.11133l0.94531 0.38867h0.48438v0.19922l2 0.82227v-7.0215h-11zm2 2h7v2h-7v-2zm5 5l3.291 8 0.94726-2.8203 1.8828 1.8828 0.94336-0.94141-1.8848-1.8828 2.8203-0.94726-8-3.291z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h8.2578l-.82227-2h-5.4355v-2h4.6113l-.82227-2h-3.7891v-2h3.8867a1.5002 1.5002 0 0 1 1.0977-.49805v-.0019531a1.5002 1.5002 0 0 1 .58594.11133l.94531.38867h.48438v.19922l2 .82227v-7.0215h-11zm2 2h7v2h-7zm5 5 3.291 8 .94726-2.8203 1.8828 1.8828.94336-.94141-1.8848-1.8828 2.8203-.94726-8-3.291z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_listener.svg b/editor/icons/icon_listener.svg index 3624e5a085..96eaeaffa9 100644 --- a/editor/icons/icon_listener.svg +++ b/editor/icons/icon_listener.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5h2a3 3 0 0 1 3 -3 3 3 0 0 1 3 3c0 1.75-0.54175 2.3583-1.1406 2.8574-0.29944 0.2495-0.62954 0.44071-0.97656 0.69141-0.17351 0.1253-0.35729 0.26529-0.53711 0.49219-0.17982 0.227-0.3457 0.58398-0.3457 0.95898 0 1.2778-0.31632 1.5742-0.63867 1.7676-0.32236 0.1934-0.86133 0.23242-1.3613 0.23242h-1v2h1c0.5 0 1.461 0.038922 2.3887-0.51758 0.87316-0.5239 1.4826-1.6633 1.5566-3.2266 0.011365-0.0098 0.027247-0.024684 0.10938-0.083984 0.21547-0.1556 0.63537-0.40194 1.0859-0.77734 0.90112-0.751 1.8594-2.1445 1.8594-4.3945a5 5 0 0 0 -5 -5zm7.9277 1l-1.7383 1.0039a6 6 0 0 1 0.81055 2.9961 6 6 0 0 1 -0.80859 2.998l1.7363 1.002a8 8 0 0 0 0 -8z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a5 5 0 0 0 -5 5h2a3 3 0 0 1 3-3 3 3 0 0 1 3 3c0 1.75-.54175 2.3583-1.1406 2.8574-.29944.2495-.62954.44071-.97656.69141-.17351.1253-.35729.26529-.53711.49219-.17982.227-.3457.58398-.3457.95898 0 1.2778-.31632 1.5742-.63867 1.7676-.32236.1934-.86133.23242-1.3613.23242h-1v2h1c.5 0 1.461.038922 2.3887-.51758.87316-.5239 1.4826-1.6633 1.5566-3.2266.011365-.0098.027247-.024684.10938-.083984.21547-.1556.63537-.40194 1.0859-.77734.90112-.751 1.8594-2.1445 1.8594-4.3945a5 5 0 0 0 -5-5zm7.9277 1-1.7383 1.0039a6 6 0 0 1 .81055 2.9961 6 6 0 0 1 -.80859 2.998l1.7363 1.002a8 8 0 0 0 0-8z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_load.svg b/editor/icons/icon_load.svg index b564c1f656..7ee6ae2a2d 100644 --- a/editor/icons/icon_load.svg +++ b/editor/icons/icon_load.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2c-1.1046 0-2 0.8954-2 2v9c0 1.1046 0.89543 2 2 2h9c1.1046 0 1.8184-0.91043 2-2l1-6c0.003977-0.18354-0.042648-0.3412-0.13477-0.5-0.17849-0.30916-0.50825-0.49972-0.86523-0.5h-8c-0.35698 2.824e-4 -0.68674 0.19084-0.86523 0.5-0.092118 0.1588-0.13874 0.3399-0.13477 0.52344l-1 5.9766c-0.091144 0.54473-0.44772 1-1 1s-1-0.4477-1-1v-9c0-0.5523 0.44772-1 1-1h2c0.55228 0 1 0.4477 1 1a1 1 0 0 0 0.29297 0.70703 1 1 0 0 0 0.70703 0.29297h4 1a1 1 0 0 0 -0.29297 -0.70703 1 1 0 0 0 -0.70703 -0.29297h-4c0-1.1046-0.89543-2-2-2h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2c-1.1046 0-2 .8954-2 2v9c0 1.1046.89543 2 2 2h9c1.1046 0 1.8184-.91043 2-2l1-6c.003977-.18354-.042648-.3412-.13477-.5-.17849-.30916-.50825-.49972-.86523-.5h-8c-.35698.0002824-.68674.19084-.86523.5-.092118.1588-.13874.3399-.13477.52344l-1 5.9766c-.091144.54473-.44772 1-1 1s-1-.4477-1-1v-9c0-.5523.44772-1 1-1h2c.55228 0 1 .4477 1 1a1 1 0 0 0 .29297.70703 1 1 0 0 0 .70703.29297h4 1a1 1 0 0 0 -.29297-.70703 1 1 0 0 0 -.70703-.29297h-4c0-1.1046-.89543-2-2-2h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_lock.svg b/editor/icons/icon_lock.svg index 1202f1d86f..4136dad557 100644 --- a/editor/icons/icon_lock.svg +++ b/editor/icons/icon_lock.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3 -3zm-1 7h2v3h-2v-3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5-5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3-3zm-1 7h2v3h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_lock_viewport.svg b/editor/icons/icon_lock_viewport.svg index 54dc9f6b82..99c066055d 100644 --- a/editor/icons/icon_lock_viewport.svg +++ b/editor/icons/icon_lock_viewport.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 0a6 6 0 0 0 -6 6v1h-1v9h14v-9h-1v-1a6 6 0 0 0 -6 -6zm0 4c1.1046 0 2 0.89543 2 2v1h-4v-1c0-1.1046 0.89543-2 2-2z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="4"/> -<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3 -3zm-1 7h2v3h-2v-3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 0a6 6 0 0 0 -6 6v1h-1v9h14v-9h-1v-1a6 6 0 0 0 -6-6zm0 4c1.1046 0 2 .89543 2 2v1h-4v-1c0-1.1046.89543-2 2-2z" fill-opacity=".39216" stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".98824" stroke-width="4"/><path d="m8 1a5 5 0 0 0 -5 5v2h-1v7h12v-7h-1v-2a5 5 0 0 0 -5-5zm0 2a3 3 0 0 1 3 3v2h-6v-2a3 3 0 0 1 3-3zm-1 7h2v3h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_logo.svg b/editor/icons/icon_logo.svg index 269fe1b245..f5379c48d4 100644 --- a/editor/icons/icon_logo.svg +++ b/editor/icons/icon_logo.svg @@ -1,7 +1 @@ -<svg width="187" height="69" version="1.1" viewBox="0 0 187 69" xmlns="http://www.w3.org/2000/svg"> -<path d="m91.912 19.51c-3.5233 0-6.278 1.1097-8.2676 3.3281-1.9911 2.2193-2.9844 5.1004-2.9844 8.6465 0 4.1636 1.0165 7.3207 3.0508 9.4707 2.0379 2.1497 4.7123 3.2227 8.0293 3.2227 1.7838 0 3.3686-0.15384 4.752-0.46289 1.3848-0.30784 2.3038-0.62367 2.7617-0.94336l0.13867-10.736c0-0.62388-1.6471-0.90785-3.4941-0.93945-1.847-0.02857-3.9609 0.35742-3.9609 0.35742v3.6055h2.125l-0.023438 1.6055c0 0.59532-0.59062 0.89453-1.7676 0.89453-1.1785 0-2.2182-0.4989-3.1211-1.4941-0.90498-0.99645-1.3555-2.4517-1.3555-4.3711 0-1.9233 0.43964-3.3428 1.3203-4.2578 0.87885-0.9141 2.0322-1.3711 3.4492-1.3711 0.59532 0 1.2107 0.095008 1.8516 0.29102 0.64121 0.19418 1.0686 0.37639 1.2871 0.54688 0.21667 0.17534 0.42435 0.25781 0.61914 0.25781 0.19388 0 0.50715-0.22698 0.94141-0.68555 0.43487-0.45735 0.82427-1.1501 1.168-2.0742 0.34218-0.92899 0.51367-1.6414 0.51367-2.1465 0-0.50111-0.011023-0.84501-0.033203-1.0273-0.48045-0.52573-1.3668-0.94394-2.6602-1.2539-1.2909-0.30906-2.7387-0.46289-4.3398-0.46289zm21.049 0c-3.2367 0-5.8788 1.0413-7.9258 3.1211-2.0464 2.0826-3.0703 5.1404-3.0703 9.1797 0 4.0369 1.0128 7.1085 3.0352 9.2129 2.0251 2.1026 4.6444 3.1543 7.8574 3.1543 3.2145 0 5.8383-1.0111 7.875-3.0332 2.0367-2.0263 3.0527-5.1142 3.0527-9.2656 0-4.1484-0.99433-7.2508-2.9863-9.2969-1.9884-2.05-4.6018-3.0723-7.8379-3.0723zm45.504 0c-3.2379 0-5.8792 1.0413-7.9277 3.1211-2.0461 2.0826-3.0684 5.1404-3.0684 9.1797 0 4.0369 1.0104 7.1085 3.0352 9.2129 2.0233 2.1026 4.6432 3.1543 7.8574 3.1543 3.213 0 5.8373-1.0111 7.873-3.0332 2.0364-2.0263 3.0547-5.1142 3.0547-9.2656 0-4.1484-0.9939-7.2508-2.9844-9.2969-1.9908-2.05-4.6031-3.0723-7.8398-3.0723zm-30.105 0.30859c-0.45888 0-0.82988 0.16637-1.1152 0.49609-0.28717 0.33489-0.42969 0.78715-0.42969 1.3594v20.584c0 1.053 0.58624 1.5781 1.752 1.5781h5.8652c7.1824-1e-6 10.773-4.2092 10.773-12.627 0-3.9348-0.94335-6.8151-2.832-8.6445-1.8853-1.83-4.6472-2.7461-8.2832-2.7461h-5.7305zm42.807 0c-0.38928 0-0.66468 0.52801-0.82422 1.5801-0.0687 0.50294-0.10157 1.0191-0.10157 1.543 0 0.52694 0.03287 1.0409 0.10157 1.543 0.15954 1.0548 0.43494 1.5801 0.82422 1.5801h4.1152v17.225c0 0.45462 1.1351 0.68555 3.3984 0.68555 2.2655 0 3.3965-0.23093 3.3965-0.68555v-17.225h4.0137c0.38868 0 0.66225-0.52528 0.82422-1.5801 0.0672-0.50202 0.10156-1.016 0.10156-1.543 1e-5 -0.52391-0.03436-1.04-0.10156-1.543-0.16197-1.0521-0.43554-1.5801-0.82422-1.5801h-14.924zm-58.291 6.2793c1.0989 0 2.0193 0.49244 2.7617 1.4746 0.74331 0.98339 1.1152 2.3913 1.1152 4.2207 0 1.8309-0.35955 3.2363-1.0801 4.2188-0.72053 0.98612-1.6597 1.4785-2.8145 1.4785-1.1554 0-2.0859-0.48441-2.7949-1.459-0.71019-0.97154-1.0644-2.3663-1.0644-4.1875 0-1.8173 0.37148-3.2302 1.1133-4.2363 0.74574-1.0053 1.6663-1.5098 2.7637-1.5098zm45.504 0c1.0989 0 2.0181 0.49244 2.7617 1.4746 0.74331 0.98339 1.1152 2.3913 1.1152 4.2207 0 1.8309-0.3612 3.2363-1.082 4.2188-0.71961 0.98612-1.6574 1.4785-2.8125 1.4785-1.1554 0-2.0888-0.48441-2.7969-1.459-0.70806-0.97154-1.0625-2.3663-1.0625-4.1875 0-1.8173 0.37179-3.2302 1.1133-4.2363 0.74453-1.0053 1.666-1.5098 2.7637-1.5098zm-24.977 0.23828h0.34375c1.4638 0 2.5334 0.33466 3.209 0.99805 0.6722 0.66157 1.0098 2.0859 1.0098 4.2715 0 2.1847-0.32289 3.7447-0.97656 4.6816-0.65214 0.9378-1.6059 1.4082-2.8652 1.4082-0.34218 0-0.54909-0.063339-0.61719-0.18945-0.06873-0.12672-0.10352-0.42897-0.10352-0.9082v-10.262z" fill="#fff"/> -<path d="m137.91 48.551v1.2109h0.85938v-1.2109h-0.85938zm-52.396 0.58984c-0.99736 0-1.7963 0.32424-2.3926 0.96484-0.59745 0.64576-0.89453 1.5712-0.89453 2.7773v3.0742c0 1.2329 0.31639 2.1765 0.94727 2.832 0.6333 0.66066 1.467 0.98828 2.5039 0.98828 0.78586 0 1.4321-0.16147 1.9414-0.48633 0.50993-0.32273 0.8592-0.67938 1.0488-1.0684v-3.6875h-3.0059v0.74805h2.1465v2.6934c-0.13766 0.30115-0.38143 0.55386-0.73242 0.76172-0.34978 0.2109-0.8171 0.31445-1.3984 0.31445-0.79619 0-1.4265-0.2632-1.8945-0.78711-0.46799-0.52786-0.70312-1.2936-0.70312-2.2988v-3.0918c0-0.96941 0.21778-1.7078 0.65234-2.2168 0.43578-0.51023 1.0297-0.76367 1.7812-0.76367 0.74271 0 1.3056 0.19019 1.6836 0.56641 0.38017 0.37925 0.58276 0.91542 0.61133 1.6113h0.79492l0.013672-0.041016c-0.024311-0.90802-0.30456-1.6179-0.83789-2.127-0.53484-0.50719-1.2907-0.76367-2.2656-0.76367zm7.6133 2.6641c-0.719 0-1.3111 0.22524-1.7715 0.67773-0.46222 0.45371-0.68069 0.96571-0.6582 1.5449l0.013672 0.041015 0.79688 0.007813c0-0.42696 0.14768-0.78487 0.44336-1.0781 0.2966-0.29508 0.67455-0.44141 1.1328-0.44141 0.4926 0 0.87459 0.15388 1.1523 0.45898 0.27198 0.30906 0.41016 0.73655 0.41016 1.2793v0.94531h-1.3418c-0.85666 0-1.5379 0.21084-2.0391 0.63477-0.50142 0.42392-0.75195 0.99502-0.75195 1.707 0 0.67372 0.17358 1.2075 0.51758 1.6035 0.34613 0.39445 0.83497 0.5918 1.4707 0.5918 0.45462 0 0.86723-0.12355 1.2383-0.37305 0.37166-0.24767 0.67317-0.56424 0.90625-0.94531 0 0.17413 0.01089 0.34527 0.03125 0.51758 0.02097 0.16927 0.053163 0.38614 0.095703 0.65234h0.88867c-0.062302-0.24767-0.10234-0.49621-0.12695-0.75391-0.02401-0.25436-0.037109-0.52051-0.037109-0.79492v-3.7676c0-0.80622-0.21809-1.4265-0.65234-1.8613-0.43669-0.43061-1.0083-0.64648-1.7188-0.64648zm7.1152 0c-0.45462 0-0.85109 0.11505-1.1875 0.3457-0.33519 0.23369-0.60486 0.56357-0.80664 0.99023l-0.074219-1.1934h-0.75195v7.6816h0.85352v-5.5293c0.11791-0.47346 0.31244-0.84655 0.58594-1.1191 0.27168-0.27107 0.63379-0.4082 1.082-0.4082 0.4689 0 0.83314 0.19466 1.0957 0.58789 0.26378 0.39323 0.39258 1.0508 0.39258 1.9707v4.498h0.85351v-4.6211-0.19922c0.0623-0.64455 0.23396-1.1785 0.51172-1.6055 0.27927-0.42696 0.66855-0.63672 1.166-0.63672 0.47285 0 0.83879 0.19223 1.0938 0.57422 0.25345 0.38138 0.38281 1.0443 0.38281 1.9863v4.502h0.85742v-4.4863c0-1.1332-0.18468-1.9728-0.55664-2.5195-0.37044-0.54548-0.89268-0.81836-1.5664-0.81836-0.48897 0-0.91182 0.1465-1.2598 0.43945-0.34796 0.29234-0.61537 0.69589-0.80469 1.207-0.148-0.55369-0.38151-0.966-0.69726-1.2383-0.31543-0.2732-0.70589-0.4082-1.1699-0.4082zm10.316 0c-0.74423-1e-6 -1.3797 0.32125-1.9082 0.96094-0.52725 0.64273-0.78906 1.4505-0.78906 2.4199v1.2754c0 0.96758 0.26259 1.762 0.7871 2.3828 0.52604 0.62206 1.2032 0.93359 2.0312 0.93359 0.5157 0 0.95833-0.090281 1.3242-0.26562 0.36679-0.17626 0.66658-0.41287 0.89844-0.70703l-0.34961-0.60547c-0.21728 0.27441-0.4784 0.4836-0.7832 0.63281-0.3048 0.14586-0.66987 0.2207-1.0898 0.2207-0.60443 0-1.0864-0.24489-1.4414-0.74023-0.35433-0.49412-0.53321-1.1138-0.53321-1.8574v-0.63867h4.3965v-0.84375c0-0.96667-0.22381-1.7371-0.66992-2.3105-0.44519-0.57253-1.0684-0.85742-1.873-0.85742zm9.4727 0c-0.74423-1e-6 -1.3782 0.32125-1.9082 0.96094-0.52603 0.64273-0.79101 1.4505-0.79101 2.4199v1.2754c0 0.96758 0.26241 1.762 0.78906 2.3828 0.52512 0.62206 1.2028 0.93359 2.0312 0.93359 0.51601 0 0.95639-0.090281 1.3223-0.26562 0.36741-0.17626 0.66822-0.41287 0.90039-0.70703l-0.34766-0.60547c-0.21972 0.27441-0.4811 0.4836-0.78711 0.63281-0.30389 0.14586-0.66639 0.2207-1.0879 0.2207-0.60656 0-1.0883-0.24489-1.4414-0.74023-0.35646-0.49412-0.5332-1.1138-0.5332-1.8574v-0.63867h4.3945v-0.84375c0-0.96667-0.22338-1.7371-0.66797-2.3105-0.44398-0.57253-1.0699-0.85742-1.873-0.85742zm6.8672 0c-0.45614 0-0.85274 0.12451-1.1894 0.36914-0.33975 0.24342-0.60962 0.5923-0.81445 1.043l-0.07031-1.2695h-0.76172v7.6816h0.85351v-5.4824c0.14617-0.47923 0.36569-0.85918 0.66016-1.1445 0.29325-0.28809 0.65767-0.42969 1.0938-0.42969 0.48622 0 0.85922 0.17765 1.1133 0.5332 0.25557 0.35555 0.38477 0.96807 0.38477 1.8457v4.6777h0.85937v-4.6855c0-1.0736-0.18381-1.866-0.55273-2.375-0.36497-0.50993-0.89-0.76367-1.5762-0.76367zm6.2539 0c-0.77674 0-1.386 0.32888-1.8242 0.98437-0.44186 0.65883-0.66211 1.5326-0.66211 2.6211l0.00196 1.0508c0 1.0031 0.21834 1.8072 0.65625 2.4102 0.43699 0.60413 1.0429 0.90625 1.8144 0.90625 0.41602 0 0.78387-0.091234 1.0996-0.27539 0.31695-0.18324 0.58484-0.4491 0.80273-0.79492v0.92969c0 0.75881-0.14785 1.3303-0.4414 1.7266-0.29235 0.39111-0.74301 0.58789-1.3535 0.58789-0.30359 0-0.59763-0.04082-0.88086-0.125-0.28565-0.081443-0.54279-0.19619-0.77344-0.3457l-0.23632 0.74805c0.27047 0.15164 0.57916 0.27315 0.92773 0.36523 0.34795 0.092075 0.67388 0.13867 0.97656 0.13867 0.84208 0 1.494-0.27297 1.9531-0.81055 0.45857-0.53971 0.68554-1.3009 0.68554-2.2852v-7.6895h-0.72265l-0.08399 1.0684c-0.21485-0.38533-0.48269-0.68758-0.80664-0.89453-0.32334-0.2109-0.70159-0.31641-1.1328-0.31641zm10.467 0c-0.45401 0-0.85062 0.12451-1.1895 0.36914-0.33914 0.24342-0.60902 0.5923-0.81445 1.043l-0.07031-1.2695h-0.75977v7.6816h0.85352v-5.4824c0.14556-0.47923 0.3663-0.85918 0.66016-1.1445 0.29295-0.28809 0.65797-0.42969 1.0937-0.42969 0.48775 0 0.85711 0.17765 1.1133 0.5332 0.25496 0.35555 0.38476 0.96807 0.38476 1.8457v4.6777h0.85742v-4.6855c0-1.0736-0.18081-1.866-0.54882-2.375-0.36588-0.50993-0.8939-0.76367-1.5801-0.76367zm6.4043 0c-0.74271-1e-6 -1.3778 0.32125-1.9062 0.96094-0.52724 0.64273-0.79101 1.4505-0.79101 2.4199v1.2754c0 0.96758 0.26334 1.762 0.78906 2.3828 0.52361 0.62206 1.2007 0.93359 2.0312 0.93359 0.5154 0 0.9567-0.090281 1.3223-0.26562 0.3668-0.17626 0.6667-0.41287 0.90039-0.70703l-0.34961-0.60547c-0.2194 0.27441-0.47958 0.4836-0.78711 0.63281-0.30359 0.14586-0.66597 0.2207-1.0859 0.2207-0.60717 0-1.089-0.24489-1.4434-0.74023-0.35464-0.49412-0.5332-1.1138-0.5332-1.8574v-0.63867h4.3965v-0.84375c0-0.96667-0.22369-1.7371-0.66797-2.3105-0.44551-0.57253-1.0709-0.85742-1.875-0.85742zm-12.113 0.14258v7.6816h0.85938v-7.6816h-0.85938zm-27.352 0.60938c0.53029 0 0.9445 0.20789 1.2441 0.62695 0.29781 0.41876 0.44531 0.94616 0.44531 1.5801v0.33008h-3.543c0.01429-0.71688 0.19281-1.3186 0.53711-1.8066 0.34401-0.48622 0.78217-0.73047 1.3164-0.73047zm9.4727 0c0.52998 0 0.94406 0.20789 1.2422 0.62695 0.29963 0.41876 0.44727 0.94616 0.44727 1.5801v0.33008h-3.543c0.0155-0.71688 0.19298-1.3186 0.53516-1.8066 0.3437-0.48622 0.7826-0.73047 1.3184-0.73047zm29.992 0c0.53089 0 0.94602 0.20789 1.2441 0.62695 0.29902 0.41876 0.44532 0.94616 0.44532 1.5801v0.33008h-3.543c0.01519-0.71688 0.19402-1.3186 0.53711-1.8066 0.34218-0.48622 0.78064-0.73047 1.3164-0.73047zm-16.686 0.015625c0.42119 0 0.77033 0.1246 1.0469 0.375 0.27684 0.25466 0.4967 0.58706 0.65625 0.99609v3.8047c-0.16593 0.39718-0.39 0.70872-0.67383 0.93359-0.28475 0.22488-0.63089 0.33594-1.043 0.33594-0.6014 0-1.0536-0.22975-1.3496-0.69531-0.29964-0.4613-0.44727-1.0819-0.44727-1.8613v-1.0508c0-0.84177 0.15149-1.527 0.45508-2.0527 0.30146-0.52482 0.75528-0.78516 1.3555-0.78516zm-40.057 3.3281h1.3652v1.6621c-0.15286 0.42089-0.40964 0.76752-0.77734 1.041-0.3671 0.27228-0.78783 0.40625-1.2598 0.40625-0.39262 0-0.69782-0.12824-0.91602-0.38867-0.2185-0.25952-0.32617-0.59591-0.32617-1.0059 0-0.48531 0.17262-0.89402 0.52148-1.2207 0.34795-0.32881 0.81215-0.49414 1.3926-0.49414z" fill="#e0e0e0"/> -<path d="m27 3c-3.0948 0.68801-6.1571 1.6452-9.0273 3.0898 0.06564 2.5344 0.23035 4.963 0.5625 7.4297-1.1147 0.71414-2.287 1.3281-3.3281 2.1641-1.0578 0.81382-2.1378 1.5912-3.0957 2.543-1.9136-1.2657-3.9389-2.454-6.0254-3.5039-2.2491 2.4205-4.3524 5.0317-6.0703 7.9551 1.2924 2.0908 2.6428 4.0523 4.0996 5.9121h0.041016v14.438 1.834 1.6699c0.03282 3.04e-4 0.06514 8.06e-4 0.097656 0.003906l11 1.0605c0.57617 0.05561 1.0282 0.52027 1.0684 1.0977l0.33789 4.8555 9.5957 0.68359 0.66016-4.4805c0.0857-0.58104 0.58415-1.0117 1.1719-1.0117h11.605c0.58742 0 1.0862 0.43068 1.1719 1.0117l0.66016 4.4805 9.5957-0.68359 0.33789-4.8555c0.04042-0.57739 0.49219-1.0417 1.0684-1.0977l10.996-1.0605c0.032519-3e-3 0.064836-0.003606 0.097656-0.003906v-1.4316l0.003906-0.001953v-16.508h0.041016c1.4571-1.8598 2.8066-3.8214 4.0996-5.9121-1.7173-2.9234-3.8232-5.5346-6.0723-7.9551-2.0859 1.0499-4.1118 2.2382-6.0254 3.5039-0.95756-0.95178-2.0363-1.7292-3.0957-2.543-1.0408-0.836-2.2136-1.4499-3.3262-2.1641 0.33124-2.4667 0.49656-4.8952 0.5625-7.4297-2.8706-1.4447-5.933-2.4018-9.0293-3.0898-1.2362 2.0777-2.367 4.3278-3.3516 6.5273-1.1675-0.1951-2.3391-0.26727-3.5137-0.28125v-0.0019532c-0.0082 0-0.016447 0.0019531-0.023437 0.0019532-0.0073 0-0.014194-0.0019532-0.021484-0.0019532v0.0019532c-1.1767 0.013979-2.3497 0.086153-3.5176 0.28125-0.98399-2.1996-2.1135-4.4497-3.3516-6.5273zm-22.863 45.904c0.0045599 1.063 0.019531 2.2271 0.019531 2.459 0 10.446 13.251 15.468 29.715 15.525h0.019531 0.019531c16.464-0.05774 29.711-5.0795 29.711-15.525 0-0.23612 0.014661-1.3954 0.019531-2.459l-9.8867 0.95312-0.3418 4.8809c-0.04102 0.58833-0.50933 1.0574-1.0977 1.0996l-11.717 0.83594c-0.02857 0.0021-0.055724 0.003906-0.083984 0.003906-0.58225 0-1.0859-0.42704-1.1719-1.0117l-0.67188-4.5566h-9.5586l-0.67188 4.5566c-0.09025 0.61325-0.63836 1.0531-1.2559 1.0078l-11.717-0.83594c-0.58833-0.04224-1.0566-0.51128-1.0977-1.0996l-0.3418-4.8809-9.8906-0.95312z" fill="#478cbf"/> -<path d="m18.299 29.246c-3.6594 0-6.6289 2.9669-6.6289 6.627 0 3.6625 2.9695 6.6289 6.6289 6.6289 3.6613 0 6.627-2.9664 6.627-6.6289 0-3.66-2.9657-6.627-6.627-6.627zm31.186 0c-3.6619 0-6.6289 2.9669-6.6289 6.627 0 3.6625 2.967 6.6289 6.6289 6.6289 3.6591 0 6.627-2.9664 6.627-6.6289 0-3.66-2.9678-6.627-6.627-6.627zm-15.594 3.8789c-1.1785 0-2.1348 0.86781-2.1348 1.9375v6.1035c0 1.0706 0.95628 1.9395 2.1348 1.9395s2.1348-0.86885 2.1348-1.9395v-6.1035c0-1.0697-0.95628-1.9375-2.1348-1.9375z" fill="#f6f6f6"/> -<path d="m18.932 31.865c-2.4299 0-4.4004 1.9711-4.4004 4.4004s1.9705 4.3984 4.4004 4.3984c2.4311 0 4.4004-1.9691 4.4004-4.3984s-1.9693-4.4004-4.4004-4.4004zm29.916 0c-2.4293 0-4.3984 1.9711-4.3984 4.4004s1.9691 4.3984 4.3984 4.3984c2.4317 0 4.4004-1.9691 4.4004-4.3984s-1.9687-4.4004-4.4004-4.4004z" fill="#414042"/> -</svg> +<svg height="69" viewBox="0 0 187 69" width="187" xmlns="http://www.w3.org/2000/svg"><path d="m91.912 19.51c-3.5233 0-6.278 1.1097-8.2676 3.3281-1.9911 2.2193-2.9844 5.1004-2.9844 8.6465 0 4.1636 1.0165 7.3207 3.0508 9.4707 2.0379 2.1497 4.7123 3.2227 8.0293 3.2227 1.7838 0 3.3686-.15384 4.752-.46289 1.3848-.30784 2.3038-.62367 2.7617-.94336l.13867-10.736c0-.62388-1.6471-.90785-3.4941-.93945-1.847-.02857-3.9609.35742-3.9609.35742v3.6055h2.125l-.023438 1.6055c0 .59532-.59062.89453-1.7676.89453-1.1785 0-2.2182-.4989-3.1211-1.4941-.90498-.99645-1.3555-2.4517-1.3555-4.3711 0-1.9233.43964-3.3428 1.3203-4.2578.87885-.9141 2.0322-1.3711 3.4492-1.3711.59532 0 1.2107.095008 1.8516.29102.64121.19418 1.0686.37639 1.2871.54688.21667.17534.42435.25781.61914.25781.19388 0 .50715-.22698.94141-.68555.43487-.45735.82427-1.1501 1.168-2.0742.34218-.92899.51367-1.6414.51367-2.1465 0-.50111-.011023-.84501-.033203-1.0273-.48045-.52573-1.3668-.94394-2.6602-1.2539-1.2909-.30906-2.7387-.46289-4.3398-.46289zm21.049 0c-3.2367 0-5.8788 1.0413-7.9258 3.1211-2.0464 2.0826-3.0703 5.1404-3.0703 9.1797 0 4.0369 1.0128 7.1085 3.0352 9.2129 2.0251 2.1026 4.6444 3.1543 7.8574 3.1543 3.2145 0 5.8383-1.0111 7.875-3.0332 2.0367-2.0263 3.0527-5.1142 3.0527-9.2656 0-4.1484-.99433-7.2508-2.9863-9.2969-1.9884-2.05-4.6018-3.0723-7.8379-3.0723zm45.504 0c-3.2379 0-5.8792 1.0413-7.9277 3.1211-2.0461 2.0826-3.0684 5.1404-3.0684 9.1797 0 4.0369 1.0104 7.1085 3.0352 9.2129 2.0233 2.1026 4.6432 3.1543 7.8574 3.1543 3.213 0 5.8373-1.0111 7.873-3.0332 2.0364-2.0263 3.0547-5.1142 3.0547-9.2656 0-4.1484-.9939-7.2508-2.9844-9.2969-1.9908-2.05-4.6031-3.0723-7.8398-3.0723zm-30.105.30859c-.45888 0-.82988.16637-1.1152.49609-.28717.33489-.42969.78715-.42969 1.3594v20.584c0 1.053.58624 1.5781 1.752 1.5781h5.8652c7.1824-.000001 10.773-4.2092 10.773-12.627 0-3.9348-.94335-6.8151-2.832-8.6445-1.8853-1.83-4.6472-2.7461-8.2832-2.7461h-5.7305zm42.807 0c-.38928 0-.66468.52801-.82422 1.5801-.0687.50294-.10157 1.0191-.10157 1.543 0 .52694.03287 1.0409.10157 1.543.15954 1.0548.43494 1.5801.82422 1.5801h4.1152v17.225c0 .45462 1.1351.68555 3.3984.68555 2.2655 0 3.3965-.23093 3.3965-.68555v-17.225h4.0137c.38868 0 .66225-.52528.82422-1.5801.0672-.50202.10156-1.016.10156-1.543.00001-.52391-.03436-1.04-.10156-1.543-.16197-1.0521-.43554-1.5801-.82422-1.5801h-14.924zm-58.291 6.2793c1.0989 0 2.0193.49244 2.7617 1.4746.74331.98339 1.1152 2.3913 1.1152 4.2207 0 1.8309-.35955 3.2363-1.0801 4.2188-.72053.98612-1.6597 1.4785-2.8145 1.4785-1.1554 0-2.0859-.48441-2.7949-1.459-.71019-.97154-1.0644-2.3663-1.0644-4.1875 0-1.8173.37148-3.2302 1.1133-4.2363.74574-1.0053 1.6663-1.5098 2.7637-1.5098zm45.504 0c1.0989 0 2.0181.49244 2.7617 1.4746.74331.98339 1.1152 2.3913 1.1152 4.2207 0 1.8309-.3612 3.2363-1.082 4.2188-.71961.98612-1.6574 1.4785-2.8125 1.4785-1.1554 0-2.0888-.48441-2.7969-1.459-.70806-.97154-1.0625-2.3663-1.0625-4.1875 0-1.8173.37179-3.2302 1.1133-4.2363.74453-1.0053 1.666-1.5098 2.7637-1.5098zm-24.977.23828h.34375c1.4638 0 2.5334.33466 3.209.99805.6722.66157 1.0098 2.0859 1.0098 4.2715 0 2.1847-.32289 3.7447-.97656 4.6816-.65214.9378-1.6059 1.4082-2.8652 1.4082-.34218 0-.54909-.063339-.61719-.18945-.06873-.12672-.10352-.42897-.10352-.9082v-10.262z" fill="#fff"/><path d="m137.91 48.551v1.2109h.85938v-1.2109zm-52.396.58984c-.99736 0-1.7963.32424-2.3926.96484-.59745.64576-.89453 1.5712-.89453 2.7773v3.0742c0 1.2329.31639 2.1765.94727 2.832.6333.66066 1.467.98828 2.5039.98828.78586 0 1.4321-.16147 1.9414-.48633.50993-.32273.8592-.67938 1.0488-1.0684v-3.6875h-3.0059v.74805h2.1465v2.6934c-.13766.30115-.38143.55386-.73242.76172-.34978.2109-.8171.31445-1.3984.31445-.79619 0-1.4265-.2632-1.8945-.78711-.46799-.52786-.70312-1.2936-.70312-2.2988v-3.0918c0-.96941.21778-1.7078.65234-2.2168.43578-.51023 1.0297-.76367 1.7812-.76367.74271 0 1.3056.19019 1.6836.56641.38017.37925.58276.91542.61133 1.6113h.79492l.013672-.041016c-.024311-.90802-.30456-1.6179-.83789-2.127-.53484-.50719-1.2907-.76367-2.2656-.76367zm7.6133 2.6641c-.719 0-1.3111.22524-1.7715.67773-.46222.45371-.68069.96571-.6582 1.5449l.013672.041015.79688.007813c0-.42696.14768-.78487.44336-1.0781.2966-.29508.67455-.44141 1.1328-.44141.4926 0 .87459.15388 1.1523.45898.27198.30906.41016.73655.41016 1.2793v.94531h-1.3418c-.85666 0-1.5379.21084-2.0391.63477-.50142.42392-.75195.99502-.75195 1.707 0 .67372.17358 1.2075.51758 1.6035.34613.39445.83497.5918 1.4707.5918.45462 0 .86723-.12355 1.2383-.37305.37166-.24767.67317-.56424.90625-.94531 0 .17413.01089.34527.03125.51758.02097.16927.053163.38614.095703.65234h.88867c-.062302-.24767-.10234-.49621-.12695-.75391-.02401-.25436-.037109-.52051-.037109-.79492v-3.7676c0-.80622-.21809-1.4265-.65234-1.8613-.43669-.43061-1.0083-.64648-1.7188-.64648zm7.1152 0c-.45462 0-.85109.11505-1.1875.3457-.33519.23369-.60486.56357-.80664.99023l-.074219-1.1934h-.75195v7.6816h.85352v-5.5293c.11791-.47346.31244-.84655.58594-1.1191.27168-.27107.63379-.4082 1.082-.4082.4689 0 .83314.19466 1.0957.58789.26378.39323.39258 1.0508.39258 1.9707v4.498h.85351v-4.6211-.19922c.0623-.64455.23396-1.1785.51172-1.6055.27927-.42696.66855-.63672 1.166-.63672.47285 0 .83879.19223 1.0938.57422.25345.38138.38281 1.0443.38281 1.9863v4.502h.85742v-4.4863c0-1.1332-.18468-1.9728-.55664-2.5195-.37044-.54548-.89268-.81836-1.5664-.81836-.48897 0-.91182.1465-1.2598.43945-.34796.29234-.61537.69589-.80469 1.207-.148-.55369-.38151-.966-.69726-1.2383-.31543-.2732-.70589-.4082-1.1699-.4082zm10.316 0c-.74423-.000001-1.3797.32125-1.9082.96094-.52725.64273-.78906 1.4505-.78906 2.4199v1.2754c0 .96758.26259 1.762.7871 2.3828.52604.62206 1.2032.93359 2.0312.93359.5157 0 .95833-.090281 1.3242-.26562.36679-.17626.66658-.41287.89844-.70703l-.34961-.60547c-.21728.27441-.4784.4836-.7832.63281-.3048.14586-.66987.2207-1.0898.2207-.60443 0-1.0864-.24489-1.4414-.74023-.35433-.49412-.53321-1.1138-.53321-1.8574v-.63867h4.3965v-.84375c0-.96667-.22381-1.7371-.66992-2.3105-.44519-.57253-1.0684-.85742-1.873-.85742zm9.4727 0c-.74423-.000001-1.3782.32125-1.9082.96094-.52603.64273-.79101 1.4505-.79101 2.4199v1.2754c0 .96758.26241 1.762.78906 2.3828.52512.62206 1.2028.93359 2.0312.93359.51601 0 .95639-.090281 1.3223-.26562.36741-.17626.66822-.41287.90039-.70703l-.34766-.60547c-.21972.27441-.4811.4836-.78711.63281-.30389.14586-.66639.2207-1.0879.2207-.60656 0-1.0883-.24489-1.4414-.74023-.35646-.49412-.5332-1.1138-.5332-1.8574v-.63867h4.3945v-.84375c0-.96667-.22338-1.7371-.66797-2.3105-.44398-.57253-1.0699-.85742-1.873-.85742zm6.8672 0c-.45614 0-.85274.12451-1.1894.36914-.33975.24342-.60962.5923-.81445 1.043l-.07031-1.2695h-.76172v7.6816h.85351v-5.4824c.14617-.47923.36569-.85918.66016-1.1445.29325-.28809.65767-.42969 1.0938-.42969.48622 0 .85922.17765 1.1133.5332.25557.35555.38477.96807.38477 1.8457v4.6777h.85937v-4.6855c0-1.0736-.18381-1.866-.55273-2.375-.36497-.50993-.89-.76367-1.5762-.76367zm6.2539 0c-.77674 0-1.386.32888-1.8242.98437-.44186.65883-.66211 1.5326-.66211 2.6211l.00196 1.0508c0 1.0031.21834 1.8072.65625 2.4102.43699.60413 1.0429.90625 1.8144.90625.41602 0 .78387-.091234 1.0996-.27539.31695-.18324.58484-.4491.80273-.79492v.92969c0 .75881-.14785 1.3303-.4414 1.7266-.29235.39111-.74301.58789-1.3535.58789-.30359 0-.59763-.04082-.88086-.125-.28565-.081443-.54279-.19619-.77344-.3457l-.23632.74805c.27047.15164.57916.27315.92773.36523.34795.092075.67388.13867.97656.13867.84208 0 1.494-.27297 1.9531-.81055.45857-.53971.68554-1.3009.68554-2.2852v-7.6895h-.72265l-.08399 1.0684c-.21485-.38533-.48269-.68758-.80664-.89453-.32334-.2109-.70159-.31641-1.1328-.31641zm10.467 0c-.45401 0-.85062.12451-1.1895.36914-.33914.24342-.60902.5923-.81445 1.043l-.07031-1.2695h-.75977v7.6816h.85352v-5.4824c.14556-.47923.3663-.85918.66016-1.1445.29295-.28809.65797-.42969 1.0937-.42969.48775 0 .85711.17765 1.1133.5332.25496.35555.38476.96807.38476 1.8457v4.6777h.85742v-4.6855c0-1.0736-.18081-1.866-.54882-2.375-.36588-.50993-.8939-.76367-1.5801-.76367zm6.4043 0c-.74271-.000001-1.3778.32125-1.9062.96094-.52724.64273-.79101 1.4505-.79101 2.4199v1.2754c0 .96758.26334 1.762.78906 2.3828.52361.62206 1.2007.93359 2.0312.93359.5154 0 .9567-.090281 1.3223-.26562.3668-.17626.6667-.41287.90039-.70703l-.34961-.60547c-.2194.27441-.47958.4836-.78711.63281-.30359.14586-.66597.2207-1.0859.2207-.60717 0-1.089-.24489-1.4434-.74023-.35464-.49412-.5332-1.1138-.5332-1.8574v-.63867h4.3965v-.84375c0-.96667-.22369-1.7371-.66797-2.3105-.44551-.57253-1.0709-.85742-1.875-.85742zm-12.113.14258v7.6816h.85938v-7.6816zm-27.352.60938c.53029 0 .9445.20789 1.2441.62695.29781.41876.44531.94616.44531 1.5801v.33008h-3.543c.01429-.71688.19281-1.3186.53711-1.8066.34401-.48622.78217-.73047 1.3164-.73047zm9.4727 0c.52998 0 .94406.20789 1.2422.62695.29963.41876.44727.94616.44727 1.5801v.33008h-3.543c.0155-.71688.19298-1.3186.53516-1.8066.3437-.48622.7826-.73047 1.3184-.73047zm29.992 0c.53089 0 .94602.20789 1.2441.62695.29902.41876.44532.94616.44532 1.5801v.33008h-3.543c.01519-.71688.19402-1.3186.53711-1.8066.34218-.48622.78064-.73047 1.3164-.73047zm-16.686.015625c.42119 0 .77033.1246 1.0469.375.27684.25466.4967.58706.65625.99609v3.8047c-.16593.39718-.39.70872-.67383.93359-.28475.22488-.63089.33594-1.043.33594-.6014 0-1.0536-.22975-1.3496-.69531-.29964-.4613-.44727-1.0819-.44727-1.8613v-1.0508c0-.84177.15149-1.527.45508-2.0527.30146-.52482.75528-.78516 1.3555-.78516zm-40.057 3.3281h1.3652v1.6621c-.15286.42089-.40964.76752-.77734 1.041-.3671.27228-.78783.40625-1.2598.40625-.39262 0-.69782-.12824-.91602-.38867-.2185-.25952-.32617-.59591-.32617-1.0059 0-.48531.17262-.89402.52148-1.2207.34795-.32881.81215-.49414 1.3926-.49414z" fill="#e0e0e0"/><path d="m27 3c-3.0948.68801-6.1571 1.6452-9.0273 3.0898.06564 2.5344.23035 4.963.5625 7.4297-1.1147.71414-2.287 1.3281-3.3281 2.1641-1.0578.81382-2.1378 1.5912-3.0957 2.543-1.9136-1.2657-3.9389-2.454-6.0254-3.5039-2.2491 2.4205-4.3524 5.0317-6.0703 7.9551 1.2924 2.0908 2.6428 4.0523 4.0996 5.9121h.041016v14.438 1.834 1.6699c.03282.000304.06514.000806.097656.003906l11 1.0605c.57617.05561 1.0282.52027 1.0684 1.0977l.33789 4.8555 9.5957.68359.66016-4.4805c.0857-.58104.58415-1.0117 1.1719-1.0117h11.605c.58742 0 1.0862.43068 1.1719 1.0117l.66016 4.4805 9.5957-.68359.33789-4.8555c.04042-.57739.49219-1.0417 1.0684-1.0977l10.996-1.0605c.032519-.003.064836-.003606.097656-.003906v-1.4316l.003906-.001953v-16.508h.041016c1.4571-1.8598 2.8066-3.8214 4.0996-5.9121-1.7173-2.9234-3.8232-5.5346-6.0723-7.9551-2.0859 1.0499-4.1118 2.2382-6.0254 3.5039-.95756-.95178-2.0363-1.7292-3.0957-2.543-1.0408-.836-2.2136-1.4499-3.3262-2.1641.33124-2.4667.49656-4.8952.5625-7.4297-2.8706-1.4447-5.933-2.4018-9.0293-3.0898-1.2362 2.0777-2.367 4.3278-3.3516 6.5273-1.1675-.1951-2.3391-.26727-3.5137-.28125v-.0019532c-.0082 0-.016447.0019531-.023437.0019532-.0073 0-.014194-.0019532-.021484-.0019532v.0019532c-1.1767.013979-2.3497.086153-3.5176.28125-.98399-2.1996-2.1135-4.4497-3.3516-6.5273zm-22.863 45.904c.0045599 1.063.019531 2.2271.019531 2.459 0 10.446 13.251 15.468 29.715 15.525h.019531.019531c16.464-.05774 29.711-5.0795 29.711-15.525 0-.23612.014661-1.3954.019531-2.459l-9.8867.95312-.3418 4.8809c-.04102.58833-.50933 1.0574-1.0977 1.0996l-11.717.83594c-.02857.0021-.055724.003906-.083984.003906-.58225 0-1.0859-.42704-1.1719-1.0117l-.67188-4.5566h-9.5586l-.67188 4.5566c-.09025.61325-.63836 1.0531-1.2559 1.0078l-11.717-.83594c-.58833-.04224-1.0566-.51128-1.0977-1.0996l-.3418-4.8809-9.8906-.95312z" fill="#478cbf"/><path d="m18.299 29.246c-3.6594 0-6.6289 2.9669-6.6289 6.627 0 3.6625 2.9695 6.6289 6.6289 6.6289 3.6613 0 6.627-2.9664 6.627-6.6289 0-3.66-2.9657-6.627-6.627-6.627zm31.186 0c-3.6619 0-6.6289 2.9669-6.6289 6.627 0 3.6625 2.967 6.6289 6.6289 6.6289 3.6591 0 6.627-2.9664 6.627-6.6289 0-3.66-2.9678-6.627-6.627-6.627zm-15.594 3.8789c-1.1785 0-2.1348.86781-2.1348 1.9375v6.1035c0 1.0706.95628 1.9395 2.1348 1.9395s2.1348-.86885 2.1348-1.9395v-6.1035c0-1.0697-.95628-1.9375-2.1348-1.9375z" fill="#f6f6f6"/><path d="m18.932 31.865c-2.4299 0-4.4004 1.9711-4.4004 4.4004s1.9705 4.3984 4.4004 4.3984c2.4311 0 4.4004-1.9691 4.4004-4.3984s-1.9693-4.4004-4.4004-4.4004zm29.916 0c-2.4293 0-4.3984 1.9711-4.3984 4.4004s1.9691 4.3984 4.3984 4.3984c2.4317 0 4.4004-1.9691 4.4004-4.3984s-1.9687-4.4004-4.4004-4.4004z" fill="#414042"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_loop.svg b/editor/icons/icon_loop.svg index c5dbf44238..bbb8dadc06 100644 --- a/editor/icons/icon_loop.svg +++ b/editor/icons/icon_loop.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1v2h-2a5 5 0 0 0 -5 5 5 5 0 0 0 1.0039 2.9961l1.4355-1.4355a3 3 0 0 1 -0.43945 -1.5605 3 3 0 0 1 3 -3h2v2l2-1.5 2-1.5-2-1.5-2-1.5zm5.9961 4.0039l-1.4355 1.4355a3 3 0 0 1 0.43945 1.5605 3 3 0 0 1 -3 3h-2v-2l-2 1.5-2 1.5 2 1.5 2 1.5v-2h2a5 5 0 0 0 5 -5 5 5 0 0 0 -1.0039 -2.9961z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1v2h-2a5 5 0 0 0 -5 5 5 5 0 0 0 1.0039 2.9961l1.4355-1.4355a3 3 0 0 1 -.43945-1.5605 3 3 0 0 1 3-3h2v2l2-1.5 2-1.5-2-1.5-2-1.5zm5.9961 4.0039-1.4355 1.4355a3 3 0 0 1 .43945 1.5605 3 3 0 0 1 -3 3h-2v-2l-2 1.5-2 1.5 2 1.5 2 1.5v-2h2a5 5 0 0 0 5-5 5 5 0 0 0 -1.0039-2.9961z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_loop_interpolation.svg b/editor/icons/icon_loop_interpolation.svg index 247d01b113..052a34ab36 100644 --- a/editor/icons/icon_loop_interpolation.svg +++ b/editor/icons/icon_loop_interpolation.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v2h-2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v0.046875 5.2246a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -1 -1.7305v-3.2695-2h2v2l4-3-4-3zm7 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v3.2695 2h-2v-2l-4 3 4 3v-2h2a2 2 0 0 0 1.7324 -1 2 2 0 0 0 0.26562 -1h0.001953v-5.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1v2h-2a2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.0019531v.046875 5.2246a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -1-1.7305v-3.2695-2h2v2l4-3-4-3zm7 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v3.2695 2h-2v-2l-4 3 4 3v-2h2a2 2 0 0 0 1.7324-1 2 2 0 0 0 .26562-1h.001953v-5.2715a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_main_play.svg b/editor/icons/icon_main_play.svg index 7b96840a44..5fd62b9453 100644 --- a/editor/icons/icon_main_play.svg +++ b/editor/icons/icon_main_play.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m4 1048.4v-8l7 4z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1048.4v-8l7 4z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_margin_container.svg b/editor/icons/icon_margin_container.svg index 8f33a1fe1b..f11b415c06 100644 --- a/editor/icons/icon_margin_container.svg +++ b/editor/icons/icon_margin_container.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z"/> -<path d="m4 1042.4v4l2-2z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5efac" transform="translate(0 -1036.4)"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10z" transform="translate(0 1036.4)"/><path d="m4 1042.4v4l2-2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_match_case.svg b/editor/icons/icon_match_case.svg index 2958933aca..1b348f3d46 100644 --- a/editor/icons/icon_match_case.svg +++ b/editor/icons/icon_match_case.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m4 1c-2.2091-6.6e-7 -4.069 1.7919-4 4v10h2v-4h4v4h2v-10c0-2.2091-1.7909-4-4-4zm5 11c0 1.6569 1.3431 3 3 3 0.3409-0.0014 0.67908-0.0608 1-0.17578v0.17578h2v-6c0-1.6569-1.3431-3-3-3h-1v2h1c0.55228 0 1 0.44772 1 1v0.17383c-0.32104-0.11432-0.65921-0.1731-1-0.17383-1.6569 0-3 1.3431-3 3zm-5-9c1.1046-1e-7 1.914 0.89879 2 2v4h-4v-4c0-1.1046 0.89543-2 2-2zm8 8c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1-1-0.44772-1-1 0.44772-1 1-1z" fill="#e0e0e0" stroke-width="0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1c-2.2091-.00000066-4.069 1.7919-4 4v10h2v-4h4v4h2v-10c0-2.2091-1.7909-4-4-4zm5 11c0 1.6569 1.3431 3 3 3 .3409-.0014.67908-.0608 1-.17578v.17578h2v-6c0-1.6569-1.3431-3-3-3h-1v2h1c.55228 0 1 .44772 1 1v.17383c-.32104-.11432-.65921-.1731-1-.17383-1.6569 0-3 1.3431-3 3zm-5-9c1.1046-.0000001 1.914.89879 2 2v4h-4v-4c0-1.1046.89543-2 2-2zm8 8c.55228 0 1 .44772 1 1s-.44772 1-1 1-1-.44772-1-1 .44772-1 1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_cube.svg b/editor/icons/icon_material_preview_cube.svg index 19d8c46fbe..7992ce05c1 100644 --- a/editor/icons/icon_material_preview_cube.svg +++ b/editor/icons/icon_material_preview_cube.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-7 3v8l7 3 7-3v-8l-7-3z" fill="#d5d5d5"/> -<path d="m1 1040.4 7 3 7-3-7-3z" fill="#fff"/> -<path d="m8 1051.4-7-3v-8l7 3z" fill="#e0e0e0"/> -<path d="m8 1051.4 7-3v-8l-7 3z" fill="#d5d5d5"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m8 1-7 3v8l7 3 7-3v-8z" fill="#d5d5d5" transform="translate(0 1036.4)"/><path d="m1 1040.4 7 3 7-3-7-3z" fill="#fff"/><path d="m8 1051.4-7-3v-8l7 3z" fill="#e0e0e0"/><path d="m8 1051.4 7-3v-8l-7 3z" fill="#d5d5d5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_cube_off.svg b/editor/icons/icon_material_preview_cube_off.svg index 3c61794a56..6dfe169eae 100644 --- a/editor/icons/icon_material_preview_cube_off.svg +++ b/editor/icons/icon_material_preview_cube_off.svg @@ -1,9 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-7 3v8l7 3 7-3v-8l-7-3z" fill="#d5d5d5"/> -<path d="m1 1040.4 7 3 7-3-7-3z" fill="#fff"/> -<path d="m8 1051.4-7-3v-8l7 3z" fill="#e0e0e0"/> -<path d="m8 1051.4 7-3v-8l-7 3z" fill="#d5d5d5"/> -<path d="m8 1037.4-7 3v8l7 3 7-3v-8l-7-3z" fill-opacity=".23529"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m8 1-7 3v8l7 3 7-3v-8z" fill="#d5d5d5" transform="translate(0 1036.4)"/><path d="m1 1040.4 7 3 7-3-7-3z" fill="#fff"/><path d="m8 1051.4-7-3v-8l7 3z" fill="#e0e0e0"/><path d="m8 1051.4 7-3v-8l-7 3z" fill="#d5d5d5"/><path d="m8 1037.4-7 3v8l7 3 7-3v-8z" fill-opacity=".23529"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_light_1.svg b/editor/icons/icon_material_preview_light_1.svg index ff70b1e5d4..3003793013 100644 --- a/editor/icons/icon_material_preview_light_1.svg +++ b/editor/icons/icon_material_preview_light_1.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v2h2v-2h-2zm-3.2422 1.3438l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm-1 1h2v1 5h-1v-5h-1v-1zm-6 2v2h2v-2h-2zm12 0v2h2v-2h-2zm-9.2422 3.8281l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-5.2422 2.1719v2h2v-2h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h2v-2zm-3.2422 1.3438-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm-1 1h2v1 5h-1v-5h-1zm-6 2v2h2v-2zm12 0v2h2v-2zm-9.2422 3.8281-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-5.2422 2.1719v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_light_1_off.svg b/editor/icons/icon_material_preview_light_1_off.svg index 63a2094e67..6948e3d77e 100644 --- a/editor/icons/icon_material_preview_light_1_off.svg +++ b/editor/icons/icon_material_preview_light_1_off.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v2h2v-2h-2zm-3.2422 1.3438l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm-1 1h2v1 5h-1v-5h-1v-1zm-6 2v2h2v-2h-2zm12 0v2h2v-2h-2zm-9.2422 3.8281l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-5.2422 2.1719v2h2v-2h-2z" fill-opacity=".23529"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h2v-2zm-3.2422 1.3438-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm-1 1h2v1 5h-1v-5h-1zm-6 2v2h2v-2zm12 0v2h2v-2zm-9.2422 3.8281-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-5.2422 2.1719v2h2v-2z" fill-opacity=".23529"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_light_2.svg b/editor/icons/icon_material_preview_light_2.svg index 7fdb9cccc6..08c05379e4 100644 --- a/editor/icons/icon_material_preview_light_2.svg +++ b/editor/icons/icon_material_preview_light_2.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v2h2v-2h-2zm-3.2422 1.3438l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1v-1zm-6 2v2h2v-2h-2zm12 0v2h2v-2h-2zm-9.2422 3.8281l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-5.2422 2.1719v2h2v-2h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h2v-2zm-3.2422 1.3438-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1zm-6 2v2h2v-2zm12 0v2h2v-2zm-9.2422 3.8281-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-5.2422 2.1719v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_light_2_off.svg b/editor/icons/icon_material_preview_light_2_off.svg index c614a1f62a..cc48927ece 100644 --- a/editor/icons/icon_material_preview_light_2_off.svg +++ b/editor/icons/icon_material_preview_light_2_off.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v2h2v-2h-2zm-3.2422 1.3438l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1v-1zm-6 2v2h2v-2h-2zm12 0v2h2v-2h-2zm-9.2422 3.8281l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-5.2422 2.1719v2h2v-2h-2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m7 1v2h2v-2h-2zm-3.2422 1.3438l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1v-1zm-6 2v2h2v-2h-2zm12 0v2h2v-2h-2zm-9.2422 3.8281l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm8.4844 0l-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141-1.4141-1.4141zm-5.2422 2.1719v2h2v-2h-2z" fill-opacity=".23529"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h2v-2zm-3.2422 1.3438-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1zm-6 2v2h2v-2zm12 0v2h2v-2zm-9.2422 3.8281-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-5.2422 2.1719v2h2v-2z" fill="#e0e0e0"/><path d="m7 1v2h2v-2zm-3.2422 1.3438-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-4.2422 1.6562a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm-1 1h2v2 1h-2v1h2v1h-2-1v-2-1h2v-1h-1zm-6 2v2h2v-2zm12 0v2h2v-2zm-9.2422 3.8281-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm8.4844 0-1.4141 1.4141 1.4141 1.4141 1.4141-1.4141zm-5.2422 2.1719v2h2v-2z" fill-opacity=".23529"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_sphere.svg b/editor/icons/icon_material_preview_sphere.svg index 9b30d13544..4f4ef67e20 100644 --- a/editor/icons/icon_material_preview_sphere.svg +++ b/editor/icons/icon_material_preview_sphere.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_material_preview_sphere_off.svg b/editor/icons/icon_material_preview_sphere_off.svg index 57e38534ab..f702b4fd27 100644 --- a/editor/icons/icon_material_preview_sphere_off.svg +++ b/editor/icons/icon_material_preview_sphere_off.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2 -2 2 2 0 0 1 2 -2z" fill-opacity=".23529"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-2 2a2 2 0 0 1 2 2 2 2 0 0 1 -2 2 2 2 0 0 1 -2-2 2 2 0 0 1 2-2z" fill-opacity=".23529"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_member_constant.svg b/editor/icons/icon_member_constant.svg index 0f8c6966c4..ec82749cf4 100644 --- a/editor/icons/icon_member_constant.svg +++ b/editor/icons/icon_member_constant.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m10.135 3.002c-1.5244-0.04132-2.9843 0.61528-3.9648 1.7832-1.5607 1.8591-1.5607 4.5706 0 6.4297 1.5599 1.8584 4.229 2.3286 6.3301 1.1152l-1.0039-1.7363c-0.45449 0.26416-0.97042 0.40425-1.4961 0.40625-1.6569 0-3-1.3431-3-3-1e-7 -1.6569 1.3431-3 3-3 0.5255 0.0014061 1.0414 0.14082 1.4961 0.4043l1.0039-1.7344c-0.72056-0.41598-1.5335-0.64557-2.3652-0.66797zm-7.1348 7.998c-0.55228 0-1 0.44772-1 1-1e-7 0.55228 0.44772 1 1 1s1-0.44772 1-1c1e-7 -0.55228-0.44772-1-1-1z" fill="#e0e0e0" stroke-width="0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.135 3.002c-1.5244-.04132-2.9843.61528-3.9648 1.7832-1.5607 1.8591-1.5607 4.5706 0 6.4297 1.5599 1.8584 4.229 2.3286 6.3301 1.1152l-1.0039-1.7363c-.45449.26416-.97042.40425-1.4961.40625-1.6569 0-3-1.3431-3-3-.0000001-1.6569 1.3431-3 3-3 .5255.0014061 1.0414.14082 1.4961.4043l1.0039-1.7344c-.72056-.41598-1.5335-.64557-2.3652-.66797zm-7.1348 7.998c-.55228 0-1 .44772-1 1-.0000001.55228.44772 1 1 1s1-.44772 1-1c.0000001-.55228-.44772-1-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_member_method.svg b/editor/icons/icon_member_method.svg index 57c93339b6..ea5c64482c 100644 --- a/editor/icons/icon_member_method.svg +++ b/editor/icons/icon_member_method.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6.0215 3c-0.40133-0.0028518-0.79916 0.074854-1.1699 0.22852-1.1208 0.46444-1.8516 1.5582-1.8516 2.7715v7h2v-3h2v-2h-2v-2c0-0.55228 0.44772-1 1-1 0.2652 4.01e-5 0.51953 0.10542 0.70703 0.29297l1.4141-1.4141c-0.55724-0.5574-1.3115-0.87312-2.0996-0.87891zm2.9785 3c-1.3263 2.6586-1.3404 4.3252 0 7h2c-1.3404-2.6748-1.3263-4.3414 0-7h-2zm4 0c1.3263 2.6586 1.3404 4.3252 0 7h2c1.3404-2.6748 1.3263-4.3414 0-7h-2zm-12 5a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#e0e0e0" stroke-width="0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6.0215 3c-.40133-.0028518-.79916.074854-1.1699.22852-1.1208.46444-1.8516 1.5582-1.8516 2.7715v7h2v-3h2v-2h-2v-2c0-.55228.44772-1 1-1 .2652.0000401.51953.10542.70703.29297l1.4141-1.4141c-.55724-.5574-1.3115-.87312-2.0996-.87891zm2.9785 3c-1.3263 2.6586-1.3404 4.3252 0 7h2c-1.3404-2.6748-1.3263-4.3414 0-7zm4 0c1.3263 2.6586 1.3404 4.3252 0 7h2c1.3404-2.6748 1.3263-4.3414 0-7zm-12 5a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_member_property.svg b/editor/icons/icon_member_property.svg index 918d0a64e9..4b6b7ab5df 100644 --- a/editor/icons/icon_member_property.svg +++ b/editor/icons/icon_member_property.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 4v9h2v-3h1c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3zm2 2h1c0.55228 0 1 0.44772 1 1s-0.44798 0.98275-1 1h-1zm-5 5c-0.55228 0-1 0.44772-1 1-1e-7 0.55228 0.44772 1 1 1s1-0.44772 1-1c1e-7 -0.55228-0.44772-1-1-1z" fill="#e0e0e0" stroke-width="0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 4v9h2v-3h1c1.6569 0 3-1.3431 3-3s-1.3431-3-3-3zm2 2h1c.55228 0 1 .44772 1 1s-.44798.98275-1 1h-1zm-5 5c-.55228 0-1 .44772-1 1-.0000001.55228.44772 1 1 1s1-.44772 1-1c.0000001-.55228-.44772-1-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_member_signal.svg b/editor/icons/icon_member_signal.svg index 2957cbbc50..5159e4acd7 100644 --- a/editor/icons/icon_member_signal.svg +++ b/editor/icons/icon_member_signal.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c4.4301 0 8 3.5699 8 8a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-5.511-4.489-10-10-10zm0 4a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c2.221 0 4 1.779 4 4a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-3.3018-2.6981-6-6-6zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-5 2c-0.55228 0-1 0.44772-1 1-1e-7 0.55228 0.44772 1 1 1s1-0.44772 1-1c1e-7 -0.55228-0.44772-1-1-1z" fill="#e0e0e0" stroke-width="0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c4.4301 0 8 3.5699 8 8a1 1 0 0 0 1 1 1 1 0 0 0 1-1c0-5.511-4.489-10-10-10zm0 4a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c2.221 0 4 1.779 4 4a1 1 0 0 0 1 1 1 1 0 0 0 1-1c0-3.3018-2.6981-6-6-6zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-5 2c-.55228 0-1 .44772-1 1-.0000001.55228.44772 1 1 1s1-.44772 1-1c.0000001-.55228-.44772-1-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_member_theme.svg b/editor/icons/icon_member_theme.svg index 880450abae..7aaaf2b808 100644 --- a/editor/icons/icon_member_theme.svg +++ b/editor/icons/icon_member_theme.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#e0e0e0" stroke-width="0"> -<path d="m3 11c-0.55228 0-1 0.44772-1 1-1e-7 0.55228 0.44772 1 1 1s1-0.44772 1-1c1e-7 -0.55228-0.44772-1-1-1z"/> -<path d="m10 2c-2.4 4-4 4.7909-4 7 0 2.2091 1.8297 4 4 4 2.1703 0 4-1.7909 4-4 0-2.2091-1.6-3-4-7z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke-width="0"><path d="m3 11c-.55228 0-1 .44772-1 1-.0000001.55228.44772 1 1 1s1-.44772 1-1c.0000001-.55228-.44772-1-1-1z"/><path d="m10 2c-2.4 4-4 4.7909-4 7s1.8297 4 4 4 4-1.7909 4-4-1.6-3-4-7z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_menu_button.svg b/editor/icons/icon_menu_button.svg index fa24532f24..8c23927783 100644 --- a/editor/icons/icon_menu_button.svg +++ b/editor/icons/icon_menu_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v4h14v-4h-14zm5 1h4l-2 2-2-2zm-4 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h14v-4zm5 1h4l-2 2zm-4 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mesh.svg b/editor/icons/icon_mesh.svg index f96efb0430..0fb9e74584 100644 --- a/editor/icons/icon_mesh.svg +++ b/editor/icons/icon_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -1.0312-1.75h.03125v-6.5215a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm2.4141 3h5.8574a2 2 0 0 0 .72852.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141 6.5859 6.5859h-5.8574a2 2 0 0 0 -.72852-.73047v-5.8555z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mesh_instance.svg b/editor/icons/icon_mesh_instance.svg index 2860cf6889..68344b7dbd 100644 --- a/editor/icons/icon_mesh_instance.svg +++ b/editor/icons/icon_mesh_instance.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#fc9c9c" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -1.0312-1.75h.03125v-6.5215a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm2.4141 3h5.8574a2 2 0 0 0 .72852.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141 6.5859 6.5859h-5.8574a2 2 0 0 0 -.72852-.73047v-5.8555z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mesh_instance_2d.svg b/editor/icons/icon_mesh_instance_2d.svg index 051547b524..a173d02771 100644 --- a/editor/icons/icon_mesh_instance_2d.svg +++ b/editor/icons/icon_mesh_instance_2d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -1.0312 -1.75h0.03125v-6.5215a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm2.4141 3h5.8574a2 2 0 0 0 0.72852 0.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141l6.5859 6.5859h-5.8574a2 2 0 0 0 -0.72852 -0.73047v-5.8555z" fill="#a5b7f3"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -1.0312-1.75h.03125v-6.5215a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm2.4141 3h5.8574a2 2 0 0 0 .72852.73047v5.8555l-6.5859-6.5859zm-1.4141 1.4141 6.5859 6.5859h-5.8574a2 2 0 0 0 -.72852-.73047v-5.8555z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mesh_library.svg b/editor/icons/icon_mesh_library.svg index 3683650e2e..13ae8fece7 100644 --- a/editor/icons/icon_mesh_library.svg +++ b/editor/icons/icon_mesh_library.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.2695v-2h-2.2715a2 2 0 0 0 -0.72852 -0.73047v-5.8555l3 3v-0.41406a2.0002 2.0002 0 0 1 0.80859 -1.6055l-2.3945-2.3945h5.8574a2 2 0 0 0 0.72852 0.73047v1.2695a2.0002 2.0002 0 0 1 0.99805 0.27148 2.0002 2.0002 0 0 1 1.002 -0.27148v-1.2715a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm6 7v1 5 1h5c0.55228 0 1-0.4477 1-1v-5c0-0.5523-0.44772-1-1-1v4l-1-1-1 1v-4h-3z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h2.2695v-2h-2.2715a2 2 0 0 0 -.72852-.73047v-5.8555l3 3v-.41406a2.0002 2.0002 0 0 1 .80859-1.6055l-2.3945-2.3945h5.8574a2 2 0 0 0 .72852.73047v1.2695a2.0002 2.0002 0 0 1 .99805.27148 2.0002 2.0002 0 0 1 1.002-.27148v-1.2715a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm6 7v1 5 1h5c.55228 0 1-.4477 1-1v-5c0-.5523-.44772-1-1-1v4l-1-1-1 1v-4z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mesh_texture.svg b/editor/icons/icon_mesh_texture.svg new file mode 100644 index 0000000000..b3beff05c0 --- /dev/null +++ b/editor/icons/icon_mesh_texture.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2 .0005649.71397.38169 1.3735 1 1.7305v6.541c-.61771.35663-.99874 1.0152-1 1.7285 0 1.1046.89543 2 2 2 .71397-.000565 1.3735-.38169 1.7305-1h6.541c.35663.61771 1.0152.99874 1.7285 1 1.1046 0 2-.89543 2-2 .000101-.72747-.39481-1.3976-1.0312-1.75h.03125v-6.5215c.61771-.35663.99874-1.0152 1-1.7285 0-1.1046-.89543-2-2-2-.71397.0005648-1.3735.38169-1.7305 1h-6.541c-.35663-.61771-1.0152-.99874-1.7285-1zm1.7266 3h.6875 5.168.68945c.17478.30301.42598.55488.72852.73047v.68359 5.1719.68555c-.30301.17478-.55488.42598-.73047.72852h-.68359-5.1719-.68555c-.17478-.30301-.42598-.55488-.72852-.73047v-.6875l-.0039062.003907v-5.8574c.30302-.17478.55488-.42598.73047-.72852zm4.0859 2.25v.70117h-.8125v.69922h-1.625v.69922h-.8125v.69922h-.8125v.70117h1.625 1.625 1.625 1.625v-1.4004h-.8125v-1.3984h-.8125v-.70117h-.8125z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mini_object.svg b/editor/icons/icon_mini_object.svg index ffac2061c5..0b34a9fdbb 100644 --- a/editor/icons/icon_mini_object.svg +++ b/editor/icons/icon_mini_object.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 2v8h2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3v-2zm0 5a3 3 0 0 0 -3 -3 3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3 -3zm7-3v5a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-5zm-10 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#79f3e8"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2v8h2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3v-2zm0 5a3 3 0 0 0 -3-3 3 3 0 0 0 -3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3zm7-3v5a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3-3v-5zm-10 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm5 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#79f3e8"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mirror_x.svg b/editor/icons/icon_mirror_x.svg index 2729ca5837..445a4e058d 100644 --- a/editor/icons/icon_mirror_x.svg +++ b/editor/icons/icon_mirror_x.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="none" stroke="#e0e0e0" stroke-opacity=".99608" stroke-width="2"> -<path d="m4 1042.4-2 2 2 2" stroke-linecap="round" stroke-linejoin="round"/> -<path d="m2 1044.4h11"/> -<path d="m12 1042.4 2 2-2 2" stroke-linecap="round" stroke-linejoin="round"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#e0e0e0" stroke-opacity=".99608" stroke-width="2" transform="translate(0 -1036.4)"><path d="m4 1042.4-2 2 2 2" stroke-linecap="round" stroke-linejoin="round"/><path d="m2 1044.4h11"/><path d="m12 1042.4 2 2-2 2" stroke-linecap="round" stroke-linejoin="round"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mirror_y.svg b/editor/icons/icon_mirror_y.svg index eb3c9dcc86..ebfcf8cabd 100644 --- a/editor/icons/icon_mirror_y.svg +++ b/editor/icons/icon_mirror_y.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m11.012 1048.4a1.0001 1.0001 0 0 0 -1.7168 -0.6973l-0.29297 0.293v-7.1719l0.29297 0.293a1.0001 1.0001 0 0 0 1.7148 -0.7266 1.0001 1.0001 0 0 0 -0.30078 -0.6875l-2-2a1.0001 1.0001 0 0 0 -1.4141 0l-2 2a1.0001 1.0001 0 1 0 1.4141 1.4141l0.29297-0.293v7.1719l-0.29297-0.293a1.0001 1.0001 0 1 0 -1.4141 1.4141l2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 0.30273 -0.7168z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11.012 1048.4a1.0001 1.0001 0 0 0 -1.7168-.6973l-.29297.293v-7.1719l.29297.293a1.0001 1.0001 0 0 0 1.7148-.7266 1.0001 1.0001 0 0 0 -.30078-.6875l-2-2a1.0001 1.0001 0 0 0 -1.4141 0l-2 2a1.0001 1.0001 0 1 0 1.4141 1.4141l.29297-.293v7.1719l-.29297-.293a1.0001 1.0001 0 1 0 -1.4141 1.4141l2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2a1.0001 1.0001 0 0 0 .30273-.7168z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_mouse.svg b/editor/icons/icon_mouse.svg index b7d50629d9..571288675a 100644 --- a/editor/icons/icon_mouse.svg +++ b/editor/icons/icon_mouse.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1.1016a5 5 0 0 0 -4 4.8984h4v-4.8984zm2 0.0039063v4.8945h4a5 5 0 0 0 -4 -4.8945zm-6 6.8945v2a5 5 0 0 0 5 5 5 5 0 0 0 5 -5v-2h-10z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1.1016a5 5 0 0 0 -4 4.8984h4zm2 .0039063v4.8945h4a5 5 0 0 0 -4-4.8945zm-6 6.8945v2a5 5 0 0 0 5 5 5 5 0 0 0 5-5v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_move_down.svg b/editor/icons/icon_move_down.svg index 70c5abf9e8..ba0c5d80ba 100644 --- a/editor/icons/icon_move_down.svg +++ b/editor/icons/icon_move_down.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 1a1.0001 1.0001 0 1 0 0 2h4a1.0001 1.0001 0 1 0 0 -2zm2 4c-0.55231 0-1 0.4477-1 1v5.1484l-2.2188-2.7734c-0.34504-0.4317-0.97482-0.50165-1.4062-0.15625-0.4305 0.3449-0.5004 0.9732-0.15625 1.4043l4 5c0.18868 0.2369 0.4745 0.37695 0.77734 0.37695 0.30559 9e-4 0.59477-0.13795 0.78516-0.37695l4-5c0.34415-0.4311 0.27424-1.0594-0.15625-1.4043-0.43143-0.3454-1.0612-0.27545-1.4062 0.15625l-2.2188 2.7734v-5.1484c0-0.5523-0.44769-1-1-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a1.0001 1.0001 0 1 0 0 2h4a1.0001 1.0001 0 1 0 0-2zm2 4c-.55231 0-1 .4477-1 1v5.1484l-2.2188-2.7734c-.34504-.4317-.97482-.50165-1.4062-.15625-.4305.3449-.5004.9732-.15625 1.4043l4 5c.18868.2369.4745.37695.77734.37695.30559.0009.59477-.13795.78516-.37695l4-5c.34415-.4311.27424-1.0594-.15625-1.4043-.43143-.3454-1.0612-.27545-1.4062.15625l-2.2188 2.7734v-5.1484c0-.5523-.44769-1-1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_move_left.svg b/editor/icons/icon_move_left.svg index bab817bfdf..f4ad280ae1 100644 --- a/editor/icons/icon_move_left.svg +++ b/editor/icons/icon_move_left.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m15 10a1.0001 1.0001 0 1 1 -2 0v-4a1.0001 1.0001 0 1 1 2 0zm-4-2c0 0.55231-0.4477 1-1 1h-5.1484l2.7734 2.2188c0.4317 0.34504 0.50165 0.97482 0.15625 1.4062-0.3449 0.4305-0.9732 0.5004-1.4043 0.15625l-5-4c-0.2369-0.18868-0.37695-0.4745-0.37695-0.77734-9e-4 -0.30559 0.13795-0.59477 0.37695-0.78516l5-4c0.4311-0.34415 1.0594-0.27424 1.4043 0.15625 0.3454 0.43143 0.27545 1.0612-0.15625 1.4062l-2.7734 2.2188h5.1484c0.5523 0 1 0.44769 1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m15 10a1.0001 1.0001 0 1 1 -2 0v-4a1.0001 1.0001 0 1 1 2 0zm-4-2c0 .55231-.4477 1-1 1h-5.1484l2.7734 2.2188c.4317.34504.50165.97482.15625 1.4062-.3449.4305-.9732.5004-1.4043.15625l-5-4c-.2369-.18868-.37695-.4745-.37695-.77734-.0009-.30559.13795-.59477.37695-.78516l5-4c.4311-.34415 1.0594-.27424 1.4043.15625.3454.43143.27545 1.0612-.15625 1.4062l-2.7734 2.2188h5.1484c.5523 0 1 .44769 1 1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_move_point.svg b/editor/icons/icon_move_point.svg index 337ed4c9b8..a8c11e7cb3 100644 --- a/editor/icons/icon_move_point.svg +++ b/editor/icons/icon_move_point.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 1.2129 -0.10742l-2.5996-6.3203a1.5002 1.5002 0 0 1 1.3711 -2.0703v-0.0019531a1.5002 1.5002 0 0 1 0.58594 0.11133l6.3184 2.5996a7 7 0 0 0 0.11133 -1.2109 7 7 0 0 0 -7 -7zm2.7559 9.7559l0.52344 1.2734a1.5002 1.5002 0 0 1 0.48047 -0.26953 1.5002 1.5002 0 0 1 0.26953 -0.47852l-1.2734-0.52539z" fill="#fff"/> -<path transform="translate(0 1036.4)" d="m8 3a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 0.42578 -0.021484l-1.8125-4.4063a1.5002 1.5002 0 0 1 1.3711 -2.0703v-0.0019531a1.5002 1.5002 0 0 1 0.58594 0.11133l4.4082 1.8125a5 5 0 0 0 0.021484 -0.42383 5 5 0 0 0 -5 -5zm2.7559 7.7559l0.44336 1.0801a5 5 0 0 0 0.63867 -0.63281l-1.082-0.44727z" fill="#ff8484"/> -<path d="m16 1047.7-8-3.291 3.291 8 0.9471-2.8201 1.8836 1.8835 0.9418-0.9418-1.8836-1.8835z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 1.2129-.10742l-2.5996-6.3203a1.5002 1.5002 0 0 1 1.3711-2.0703v-.0019531a1.5002 1.5002 0 0 1 .58594.11133l6.3184 2.5996a7 7 0 0 0 .11133-1.2109 7 7 0 0 0 -7-7zm2.7559 9.7559.52344 1.2734a1.5002 1.5002 0 0 1 .48047-.26953 1.5002 1.5002 0 0 1 .26953-.47852l-1.2734-.52539z" fill="#fff" transform="translate(0 1036.4)"/><path d="m8 3a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 .42578-.021484l-1.8125-4.4063a1.5002 1.5002 0 0 1 1.3711-2.0703v-.0019531a1.5002 1.5002 0 0 1 .58594.11133l4.4082 1.8125a5 5 0 0 0 .021484-.42383 5 5 0 0 0 -5-5zm2.7559 7.7559.44336 1.0801a5 5 0 0 0 .63867-.63281l-1.082-.44727z" fill="#ff8484" transform="translate(0 1036.4)"/><path d="m16 1047.7-8-3.291 3.291 8 .9471-2.8201 1.8836 1.8835.9418-.9418-1.8836-1.8835z" fill="#e0e0e0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_move_right.svg b/editor/icons/icon_move_right.svg index 7721633de5..4d1c3b1145 100644 --- a/editor/icons/icon_move_right.svg +++ b/editor/icons/icon_move_right.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m1 10a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 1 0 -2 0zm4-2c0 0.55231 0.4477 1 1 1h5.1484l-2.7734 2.2188c-0.4317 0.34504-0.50165 0.97482-0.15625 1.4062 0.3449 0.4305 0.9732 0.5004 1.4043 0.15625l5-4c0.2369-0.18868 0.37695-0.4745 0.37695-0.77734 9e-4 -0.30559-0.13795-0.59477-0.37695-0.78516l-5-4c-0.4311-0.34415-1.0594-0.27424-1.4043 0.15625-0.3454 0.43143-0.27545 1.0612 0.15625 1.4062l2.7734 2.2188h-5.1484c-0.5523 0-1 0.44769-1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 10a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 1 0 -2 0zm4-2c0 .55231.4477 1 1 1h5.1484l-2.7734 2.2188c-.4317.34504-.50165.97482-.15625 1.4062.3449.4305.9732.5004 1.4043.15625l5-4c.2369-.18868.37695-.4745.37695-.77734.0009-.30559-.13795-.59477-.37695-.78516l-5-4c-.4311-.34415-1.0594-.27424-1.4043.15625-.3454.43143-.27545 1.0612.15625 1.4062l2.7734 2.2188h-5.1484c-.5523 0-1 .44769-1 1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_move_up.svg b/editor/icons/icon_move_up.svg index 06bb26fad3..87c7834597 100644 --- a/editor/icons/icon_move_up.svg +++ b/editor/icons/icon_move_up.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 15a1.0001 1.0001 0 1 1 0 -2h4a1.0001 1.0001 0 1 1 0 2zm2-4c-0.55231 0-1-0.4477-1-1v-5.1484l-2.2188 2.7734c-0.34504 0.4317-0.97482 0.50165-1.4062 0.15625-0.4305-0.3449-0.5004-0.9732-0.15625-1.4043l4-5c0.18868-0.2369 0.4745-0.37695 0.77734-0.37695 0.30559-9e-4 0.59477 0.13795 0.78516 0.37695l4 5c0.34415 0.4311 0.27424 1.0594-0.15625 1.4043-0.43143 0.3454-1.0612 0.27545-1.4062-0.15625l-2.2188-2.7734v5.1484c0 0.5523-0.44769 1-1 1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 15a1.0001 1.0001 0 1 1 0-2h4a1.0001 1.0001 0 1 1 0 2zm2-4c-.55231 0-1-.4477-1-1v-5.1484l-2.2188 2.7734c-.34504.4317-.97482.50165-1.4062.15625-.4305-.3449-.5004-.9732-.15625-1.4043l4-5c.18868-.2369.4745-.37695.77734-.37695.30559-.0009.59477.13795.78516.37695l4 5c.34415.4311.27424 1.0594-.15625 1.4043-.43143.3454-1.0612.27545-1.4062-.15625l-2.2188-2.7734v5.1484c0 .5523-.44769 1-1 1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_multi_edit.svg b/editor/icons/icon_multi_edit.svg index 9a1cfe8e16..9a5b3237b2 100644 --- a/editor/icons/icon_multi_edit.svg +++ b/editor/icons/icon_multi_edit.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.554 0-1 0.446-1 1v2h4v-2c0-0.554-0.446-1-1-1h-2zm-1 4v7l2 3 2-3v-7h-4zm1 1h1v5h-1v-5zm8 1v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.554 0-1 .446-1 1v2h4v-2c0-.554-.446-1-1-1zm-1 4v7l2 3 2-3v-7zm1 1h1v5h-1zm8 1v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_multi_line.svg b/editor/icons/icon_multi_line.svg index d2e6d3818a..dd79bb50d8 100644 --- a/editor/icons/icon_multi_line.svg +++ b/editor/icons/icon_multi_line.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h7v-2h-7zm9 0v2h5v-2h-5zm-9 4v2h11v-2h-11zm0 4v2h4v-2h-4zm6 0v2h8v-2h-8zm-6 4v2h13v-2h-13z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h7v-2zm9 0v2h5v-2zm-9 4v2h11v-2zm0 4v2h4v-2zm6 0v2h8v-2zm-6 4v2h13v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_multi_mesh.svg b/editor/icons/icon_multi_mesh.svg index 522561bb28..d317129ef4 100644 --- a/editor/icons/icon_multi_mesh.svg +++ b/editor/icons/icon_multi_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2 .0005649.71397.38169 1.3735 1 1.7305v6.541c-.61771.35663-.99874 1.0152-1 1.7285 0 1.1046.89543 2 2 2 .71397-.000565 1.3735-.38169 1.7305-1h1.2695v-2h-1.2715c-.17478-.30301-.42598-.55488-.72852-.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c.17532.30158.42647.55205.72852.72656v1.2734h2v-1.2695c.61831-.35698.99944-1.0165 1-1.7305 0-1.1046-.89543-2-2-2-.71397.0005648-1.3735.38169-1.7305 1h-6.541c-.35663-.61771-1.0152-.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_multi_mesh_instance.svg b/editor/icons/icon_multi_mesh_instance.svg index f873ac2bf3..c114a725db 100644 --- a/editor/icons/icon_multi_mesh_instance.svg +++ b/editor/icons/icon_multi_mesh_instance.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.649e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35663-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.65e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.648e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35663-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#fc9c9c" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2 .0005649.71397.38169 1.3735 1 1.7305v6.541c-.61771.35663-.99874 1.0152-1 1.7285 0 1.1046.89543 2 2 2 .71397-.000565 1.3735-.38169 1.7305-1h1.2695v-2h-1.2715c-.17478-.30301-.42598-.55488-.72852-.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c.17532.30158.42647.55205.72852.72656v1.2734h2v-1.2695c.61831-.35698.99944-1.0165 1-1.7305 0-1.1046-.89543-2-2-2-.71397.0005648-1.3735.38169-1.7305 1h-6.541c-.35663-.61771-1.0152-.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_multi_mesh_instance_2d.svg b/editor/icons/icon_multi_mesh_instance_2d.svg index 07202ac659..6c54a63ae2 100644 --- a/editor/icons/icon_multi_mesh_instance_2d.svg +++ b/editor/icons/icon_multi_mesh_instance_2d.svg @@ -1,4 +1 @@ -<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"> -<rect x="-1" y="-1" width="582" height="402" fill="none"/> -<path d="m3 1c-1.1046 0-2 0.89543-2 2 5.6e-4 0.71397 0.38169 1.3735 1 1.7305v6.541c-0.61771 0.35664-0.99874 1.0152-1 1.7285 0 1.1046 0.89543 2 2 2 0.71397-5.6e-4 1.3735-0.38169 1.7305-1h1.2695v-2h-1.2715c-0.17478-0.30301-0.42598-0.55488-0.72852-0.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c0.17532 0.30158 0.42647 0.55205 0.72852 0.72656v1.2734h2v-1.2695c0.61831-0.35698 0.99944-1.0165 1-1.7305 0-1.1046-0.89543-2-2-2-0.71397 5.6e-4 -1.3735 0.38169-1.7305 1h-6.541c-0.35664-0.61771-1.0152-0.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</svg> +<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m-1-1h582v402h-582z" fill="none"/><path d="m3 1c-1.1046 0-2 .89543-2 2 .00056.71397.38169 1.3735 1 1.7305v6.541c-.61771.35664-.99874 1.0152-1 1.7285 0 1.1046.89543 2 2 2 .71397-.00056 1.3735-.38169 1.7305-1h1.2695v-2h-1.2715c-.17478-.30301-.42598-.55488-.72852-.73047v-5.8555l3.5859 3.5859h1.4141v-1.4141l-3.5859-3.5859h5.8574c.17532.30158.42647.55205.72852.72656v1.2734h2v-1.2695c.61831-.35698.99944-1.0165 1-1.7305 0-1.1046-.89543-2-2-2-.71397.00056-1.3735.38169-1.7305 1h-6.541c-.35664-.61771-1.0152-.99874-1.7285-1zm8 7v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#a5b7f3" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation.svg b/editor/icons/icon_navigation.svg index dddd75341f..d5a8f8618b 100644 --- a/editor/icons/icon_navigation.svg +++ b/editor/icons/icon_navigation.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m3 1050.4 5-2 5 2-5-12-5 12z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1050.4 5-2 5 2-5-12z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation_2d.svg b/editor/icons/icon_navigation_2d.svg index e08aebe1bc..79dc532aee 100644 --- a/editor/icons/icon_navigation_2d.svg +++ b/editor/icons/icon_navigation_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m3 1050.4 5-2 5 2-5-12-5 12z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1050.4 5-2 5 2-5-12z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation_mesh.svg b/editor/icons/icon_navigation_mesh.svg index 831d1a0769..9bc4a00d53 100644 --- a/editor/icons/icon_navigation_mesh.svg +++ b/editor/icons/icon_navigation_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h2.5078l.75-2h-3.2598a2 2 0 0 0 -.72852-.73047v-5.8555l4.6973 4.6973.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 .72852.73047v.27148a2.0002 2.0002 0 0 1 .023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l.12695.33789v-1.9082a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm9 6-3 8 3-2 3 2z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation_mesh_instance.svg b/editor/icons/icon_navigation_mesh_instance.svg index e6636807af..737d9c319d 100644 --- a/editor/icons/icon_navigation_mesh_instance.svg +++ b/editor/icons/icon_navigation_mesh_instance.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h2.5078l0.75-2h-3.2598a2 2 0 0 0 -0.72852 -0.73047v-5.8555l4.6973 4.6973 0.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 0.72852 0.73047v0.27148a2.0002 2.0002 0 0 1 0.023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l0.12695 0.33789v-1.9082a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285 -1zm9 6l-3 8 3-2 3 2-3-8z" fill="#fc9c9c" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v6.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h2.5078l.75-2h-3.2598a2 2 0 0 0 -.72852-.73047v-5.8555l4.6973 4.6973.77148-2.0566-4.0547-4.0547h5.8574a2 2 0 0 0 .72852.73047v.27148a2.0002 2.0002 0 0 1 .023438 0 2.0002 2.0002 0 0 1 1.8496 1.2969l.12695.33789v-1.9082a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -1.7285-1zm9 6-3 8 3-2 3 2z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation_polygon.svg b/editor/icons/icon_navigation_polygon.svg index f12f9aef34..df2ddb07f6 100644 --- a/editor/icons/icon_navigation_polygon.svg +++ b/editor/icons/icon_navigation_polygon.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g fill="#e0e0e0" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4.9023a2.1002 2.1002 0 0 1 0.13086 -0.73633l0.47461-1.2637h-4.5078v-10h8.5859l-4.293 4.293a1.0001 1.0001 0 0 0 0 1.4141l1.3262 1.3262 1.4141-3.7695a2.1002 2.1002 0 0 1 1.9922 -1.3613 2.1002 2.1002 0 0 1 0.43555 0.050781l2.2461-2.2461a1.0001 1.0001 0 0 0 -0.70703 -1.707h-12z" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m15 1051.4-3-8-3 8 3-2z"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4.9023a2.1002 2.1002 0 0 1 .13086-.73633l.47461-1.2637h-4.5078v-10h8.5859l-4.293 4.293a1.0001 1.0001 0 0 0 0 1.4141l1.3262 1.3262 1.4141-3.7695a2.1002 2.1002 0 0 1 1.9922-1.3613 2.1002 2.1002 0 0 1 .43555.050781l2.2461-2.2461a1.0001 1.0001 0 0 0 -.70703-1.707h-12z" transform="translate(0 1036.4)"/><path d="m15 1051.4-3-8-3 8 3-2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_navigation_polygon_instance.svg b/editor/icons/icon_navigation_polygon_instance.svg index d229bd8ab4..e16d10614e 100644 --- a/editor/icons/icon_navigation_polygon_instance.svg +++ b/editor/icons/icon_navigation_polygon_instance.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4.9023a2.1002 2.1002 0 0 1 0.13086 -0.73633l0.47461-1.2637h-4.5078v-10h8.5859l-4.293 4.293a1.0001 1.0001 0 0 0 0 1.4141l1.3262 1.3262 1.4141-3.7695a2.1002 2.1002 0 0 1 1.9922 -1.3613 2.1002 2.1002 0 0 1 0.43555 0.050781l2.2461-2.2461a1.0001 1.0001 0 0 0 -0.70703 -1.707h-12z" color="#000000" color-rendering="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -<path d="m15 1051.4-3-8-3 8 3-2z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h4.9023a2.1002 2.1002 0 0 1 .13086-.73633l.47461-1.2637h-4.5078v-10h8.5859l-4.293 4.293a1.0001 1.0001 0 0 0 0 1.4141l1.3262 1.3262 1.4141-3.7695a2.1002 2.1002 0 0 1 1.9922-1.3613 2.1002 2.1002 0 0 1 .43555.050781l2.2461-2.2461a1.0001 1.0001 0 0 0 -.70703-1.707h-12z" transform="translate(0 1036.4)"/><path d="m15 1051.4-3-8-3 8 3-2z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_new.svg b/editor/icons/icon_new.svg index 1f53043c24..a3199e3fba 100644 --- a/editor/icons/icon_new.svg +++ b/editor/icons/icon_new.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 -1.6949e-5)"> -<path transform="translate(0 1036.4)" d="m2 1v14h8v-1h-2v-4h2v-2h4v-2h-5v-5zm8 0v4h4z" fill="#e0e0e0"/> -<path d="m11 1045.4v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.400017)"><path d="m2 1v14h8v-1h-2v-4h2v-2h4v-2h-5v-5zm8 0v4h4z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m11 1045.4v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_new_root.svg b/editor/icons/icon_new_root.svg index 51c79f038d..d32777d507 100644 --- a/editor/icons/icon_new_root.svg +++ b/editor/icons/icon_new_root.svg @@ -1,69 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_new_root.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1474" - inkscape:window-height="755" - id="namedview10" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="9.9306919" - inkscape:cy="7.2213369" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <path - style="fill:#e0e0e0" - d="m 2,4.7813475 v 2.0494746 c -0.6177049,0.3566305 -0.998733,1.0152377 -1,1.7285 0,1.1045694 0.8954305,1.9999999 2,1.9999999 0.7139771,-5.54e-4 1.3735116,-0.381678 1.7305,-0.9999995 h 1.3545593 c 0.3566306,0.6177035 1.0152377,0.9987325 1.7285,0.9999995 1.1045696,0 1.9999996,-0.8954305 1.9999996,-1.9999999 0,-1.1045695 -0.89543,-2 -1.9999996,-2 -0.7139771,5.537e-4 -1.3735116,0.3816774 -1.7305,1 H 4.7285 C 4.5537191,7.2563119 4.3025219,7.0044423 3.99998,6.8288521 V 4.7793775 C 3.4615087,4.8084067 2.7017179,4.8161838 2,4.7813475 Z" - id="path2" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccscccccc" /> - <path - style="fill:#e0e0e0" - d="m 6.8474576,9.6288045 v 1.2020165 c -0.617705,0.35663 -0.998733,1.015237 -1,1.7285 0,1.104569 0.89543,2 2,2 0.713977,-5.54e-4 1.373512,-0.381678 1.7305,-1 h 1.2867634 c 0.35663,0.617704 1.015237,0.998733 1.7285,1 1.104569,0 1.999999,-0.895431 1.999999,-2 0,-1.10457 -0.89543,-2 -1.999999,-2 -0.713977,5.53e-4 -1.373512,0.381677 -1.7305,1 H 9.5759576 c -0.174781,-0.303011 -0.425978,-0.55488 -0.72852,-0.73047 V 9.6268345 c 0,0 -1.264363,0.03681 -1.99998,0.002 z" - id="path827" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccsccccccc" /> - <path - sodipodi:nodetypes="ccccccc" - inkscape:connector-curvature="0" - id="path829" - d="m 2.7966098,1.3559322 c -1.104569,0 -2.00000003,0.8954305 -2.00000003,2 5.54e-4,0.7139771 0.38167803,1.3735116 1.00000003,1.7305 0.757716,0.266212 0.949133,0.2840609 1.99998,-0.00197 0.617705,-0.3566306 0.998733,-1.0152377 1,-1.7285 0,-1.1045695 -0.89543,-2 -2,-2 z" - style="fill:#84ffb1;fill-opacity:1" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 4.7813475v2.0494746c-.6177049.3566305-.998733 1.0152377-1 1.7285 0 1.1045694.8954305 1.9999999 2 1.9999999.7139771-.000554 1.3735116-.381678 1.7305-.9999995h1.3545593c.3566306.6177035 1.0152377.9987325 1.7285.9999995 1.1045696 0 1.9999996-.8954305 1.9999996-1.9999999 0-1.1045695-.89543-2-1.9999996-2-.7139771.0005537-1.3735116.3816774-1.7305 1h-1.3545593c-.1747809-.3030102-.4259781-.5548798-.72852-.73047v-2.0494746c-.5384713.0290292-1.2982621.0368063-1.99998.00197z" fill="#e0e0e0"/><path d="m6.8474576 9.6288045v1.2020165c-.617705.35663-.998733 1.015237-1 1.7285 0 1.104569.89543 2 2 2 .713977-.000554 1.373512-.381678 1.7305-1h1.2867634c.35663.617704 1.015237.998733 1.7285 1 1.104569 0 1.999999-.895431 1.999999-2 0-1.10457-.89543-2-1.999999-2-.713977.000553-1.373512.381677-1.7305 1h-1.2867634c-.174781-.303011-.425978-.55488-.72852-.73047v-1.2020165s-1.264363.03681-1.99998.002z" fill="#e0e0e0"/><path d="m2.7966098 1.3559322c-1.104569 0-2.00000003.8954305-2.00000003 2 .000554.7139771.38167803 1.3735116 1.00000003 1.7305.757716.266212.949133.2840609 1.99998-.00197.617705-.3566306.998733-1.0152377 1-1.7285 0-1.1045695-.89543-2-2-2z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_nil.svg b/editor/icons/icon_nil.svg index b266161c2b..04a29abaaa 100644 --- a/editor/icons/icon_nil.svg +++ b/editor/icons/icon_nil.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 2v2h2v-2zm4 0v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-0.55228-9.6e-6 -0.99999-0.44772-1-1v-5zm-11 2v6h2v-4h1c0.55228 9.6e-6 0.99999 0.44772 1 1v3h2v-3c0-1.6569-1.3431-3-3-3zm7 2v4h2v-4z" fill="#e0e0e0"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2v2h2v-2zm4 0v5c0 1.6569 1.3431 3 3 3h1v-2h-1c-.55228-.0000096-.99999-.44772-1-1v-5zm-11 2v6h2v-4h1c.55228.0000096.99999.44772 1 1v3h2v-3c0-1.6569-1.3431-3-3-3zm7 2v4h2v-4z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_nine_patch_rect.svg b/editor/icons/icon_nine_patch_rect.svg index 4a8caa4816..c5b04ec049 100644 --- a/editor/icons/icon_nine_patch_rect.svg +++ b/editor/icons/icon_nine_patch_rect.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<rect x="1" y="1037.4" width="2" height="14"/> -<rect x="1" y="1049.4" width="14" height="2"/> -<rect x="1" y="1037.4" width="14" height="2"/> -<rect x="13" y="1037.4" width="2" height="14"/> -<rect x="1" y="1041.4" width="14" height=".99998"/> -<rect x="1" y="1046.4" width="14" height=".99998"/> -<rect transform="rotate(90)" x="1037.4" y="-6" width="14" height=".99998"/> -<rect transform="rotate(90)" x="1037.4" y="-11" width="14" height=".99998"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5efac" transform="translate(0 -1036.4)"><path d="m1 1037.4h2v14h-2z"/><path d="m1 1049.4h14v2h-14z"/><path d="m1 1037.4h14v2h-14z"/><path d="m13 1037.4h2v14h-2z"/><path d="m1 1041.4h14v.99998h-14z"/><path d="m1 1046.4h14v.99998h-14z"/><g transform="rotate(90)"><path d="m1037.4-6h14v.99998h-14z"/><path d="m1037.4-11h14v.99998h-14z"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_node.svg b/editor/icons/icon_node.svg index d7f1d5b9c3..93f0ce80b1 100644 --- a/editor/icons/icon_node.svg +++ b/editor/icons/icon_node.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_node_2d.svg b/editor/icons/icon_node_2d.svg index b9a73ab1dc..5ca5754daa 100644 --- a/editor/icons/icon_node_2d.svg +++ b/editor/icons/icon_node_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_node_path.svg b/editor/icons/icon_node_path.svg index 1697c026a3..580283b75a 100644 --- a/editor/icons/icon_node_path.svg +++ b/editor/icons/icon_node_path.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 2v8h2v-2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-2zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2h-2zm5 0v8h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3v-2h-2zm-9 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2z" fill="#6993ec"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 2v8h2v-2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3zm6 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2zm5 0v8h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3v-2zm-9 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1z" fill="#6993ec"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_node_warning.svg b/editor/icons/icon_node_warning.svg index 8a1a3bd2ea..587a49412e 100644 --- a/editor/icons/icon_node_warning.svg +++ b/editor/icons/icon_node_warning.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8.0293 2.002a1.0001 1.0001 0 0 0 -0.88672 0.48438l-6 10a1.0001 1.0001 0 0 0 0.85742 1.5137h12a1.0001 1.0001 0 0 0 0.85742 -1.5137l-6-10a1.0001 1.0001 0 0 0 -0.82812 -0.48438zm-1.0293 2.998h2v5h-2v-5zm0 6h2v2h-2v-2z" color="#000000" color-rendering="auto" fill="#ffdd65" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8.0293 2.002a1.0001 1.0001 0 0 0 -.88672.48438l-6 10a1.0001 1.0001 0 0 0 .85742 1.5137h12a1.0001 1.0001 0 0 0 .85742-1.5137l-6-10a1.0001 1.0001 0 0 0 -.82812-.48438zm-1.0293 2.998h2v5h-2zm0 6h2v2h-2z" fill="#ffdd65" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_non_favorite.svg b/editor/icons/icon_non_favorite.svg index ede81dd2c6..eb0ebf052c 100644 --- a/editor/icons/icon_non_favorite.svg +++ b/editor/icons/icon_non_favorite.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1.7246l-2.375 4.0977-4.625 1.0977 3.2363 3.4063-0.35938 4.6738 4.1387-1.9766 4.1582 1.9414-0.39648-4.6523 3.2227-3.3926-4.625-1.0977-2.375-4.0977zm0 2.2754l1.6582 2.7773 3.2324 0.74414-2.25 2.3008 0.27539 3.1543-2.9043-1.3164-2.8926 1.3398 0.25195-3.168-2.2617-2.3105 3.2324-0.74414 1.6582-2.7773z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1.7246-2.375 4.0977-4.625 1.0977 3.2363 3.4063-.35938 4.6738 4.1387-1.9766 4.1582 1.9414-.39648-4.6523 3.2227-3.3926-4.625-1.0977-2.375-4.0977zm0 2.2754 1.6582 2.7773 3.2324.74414-2.25 2.3008.27539 3.1543-2.9043-1.3164-2.8926 1.3398.25195-3.168-2.2617-2.3105 3.2324-.74414 1.6582-2.7773z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_object.svg b/editor/icons/icon_object.svg index fe8cbc6f92..c3d1b47538 100644 --- a/editor/icons/icon_object.svg +++ b/editor/icons/icon_object.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-5 3.498l4 2v3.7656l-4-2v-3.7656z" fill="#e0e0e0" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9629 1.002a1.0001 1.0001 0 0 0 -.41016.10352l-6 3a1.0001 1.0001 0 0 0 -.55273.89453v6a1.0001 1.0001 0 0 0 .55273.89453l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1.0001 1.0001 0 0 0 .55273-.89453v-6a1.0001 1.0001 0 0 0 -.55273-.89453l-6-3a1.0001 1.0001 0 0 0 -.48438-.10352zm.037109 2.1172 3.7637 1.8809-3.7637 1.8828-3.7637-1.8828zm-5 3.498 4 2v3.7656l-4-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_occluder_polygon_2d.svg b/editor/icons/icon_occluder_polygon_2d.svg index 4dfa006d38..19244f35ca 100644 --- a/editor/icons/icon_occluder_polygon_2d.svg +++ b/editor/icons/icon_occluder_polygon_2d.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path d="m1 1045.4 6 6h8v-8l-6-6h-8z" fill="#3552b1"/> -<path d="m1 1037.4h8l-3 4 3 4h-8z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd" transform="translate(0 -1036.4)"><path d="m1 1045.4 6 6h8v-8l-6-6h-8z" fill="#3552b1"/><path d="m1 1037.4h8l-3 4 3 4h-8z" fill="#a5b7f3" fill-opacity=".98824"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_omni_light.svg b/editor/icons/icon_omni_light.svg index d6c658b9e2..6fa0454e8c 100644 --- a/editor/icons/icon_omni_light.svg +++ b/editor/icons/icon_omni_light.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a5 5 0 0 0 -5 5 5 5 0 0 0 3 4.5762v2.4238h4v-2.4199a5 5 0 0 0 3 -4.5801 5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3zm-1 11v1h2v-1h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a5 5 0 0 0 -5 5 5 5 0 0 0 3 4.5762v2.4238h4v-2.4199a5 5 0 0 0 3-4.5801 5 5 0 0 0 -5-5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3-3 3 3 0 0 1 3-3zm-1 11v1h2v-1z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_onion.svg b/editor/icons/icon_onion.svg index 5bb2a99423..ff1376c316 100644 --- a/editor/icons/icon_onion.svg +++ b/editor/icons/icon_onion.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-2 2-7 4-7 8s3 6 7 6c-7-3-6.5995-7.703 0-13-2.2981 3.9516-5.4951 8.9197 0 13 4.8692-4.2391 2.7733-8.1815 1-12 5.5855 4.704 5.3995 8.6488-1 12 4 0 7-2 7-6s-5-6-7-8z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-2 2-7 4-7 8s3 6 7 6c-7-3-6.5995-7.703 0-13-2.2981 3.9516-5.4951 8.9197 0 13 4.8692-4.2391 2.7733-8.1815 1-12 5.5855 4.704 5.3995 8.6488-1 12 4 0 7-2 7-6s-5-6-7-8z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_option_button.svg b/editor/icons/icon_option_button.svg index 45aaff30c0..6b4402481d 100644 --- a/editor/icons/icon_option_button.svg +++ b/editor/icons/icon_option_button.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h5 1 1 2 1c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2h-1-2-1-1-5zm8 2.9863a1.0001 1.0001 0 0 1 0.7168 1.7207l-3 3a1.0001 1.0001 0 0 1 -1.4141 0l-3-3a1.0001 1.0001 0 0 1 0.69727 -1.7168 1.0001 1.0001 0 0 1 0.7168 0.30273l2.293 2.293 2.293-2.293a1.0001 1.0001 0 0 1 0.69727 -0.30664z" fill="#a5efac"/> -<rect x="4" y="1042.4" width="4" height="4" fill="none"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m3 3c-1.1046 0-2 .89543-2 2v6c0 1.1046.89543 2 2 2h5 1 1 2 1c1.1046 0 2-.89543 2-2v-6c0-1.1046-.89543-2-2-2h-1-2-1-1zm8 2.9863a1.0001 1.0001 0 0 1 .7168 1.7207l-3 3a1.0001 1.0001 0 0 1 -1.4141 0l-3-3a1.0001 1.0001 0 0 1 .69727-1.7168 1.0001 1.0001 0 0 1 .7168.30273l2.293 2.293 2.293-2.293a1.0001 1.0001 0 0 1 .69727-.30664z" fill="#a5efac" transform="translate(0 1036.4)"/><path d="m4 1042.4h4v4h-4z" fill="none"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_overbright_indicator.svg b/editor/icons/icon_overbright_indicator.svg new file mode 100644 index 0000000000..9e6f53b727 --- /dev/null +++ b/editor/icons/icon_overbright_indicator.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v10l10-10z" fill="#fff"/><path d="m0 12 12-12h-2l-10 10z" fill="#000003"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_override.svg b/editor/icons/icon_override.svg index 4a797af6d8..2d8a1fb309 100644 --- a/editor/icons/icon_override.svg +++ b/editor/icons/icon_override.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1c-1.108 0-2 0.89199-2 2v1h4v-1h2v1h4v-1c0-1.108-0.89199-2-2-2h-6zm-2 5c-1.108 0-2 0.89199-2 2v5c0 1.108 0.89199 2 2 2h10c1.108 0 2-0.89199 2-2v-5c0-1.108-0.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3h-4z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.108 0-2 .89199-2 2v1h4v-1h2v1h4v-1c0-1.108-.89199-2-2-2zm-2 5c-1.108 0-2 .89199-2 2v5c0 1.108.89199 2 2 2h10c1.108 0 2-.89199 2-2v-5c0-1.108-.89199-2-2-2h-4v3h2l-3 4-3-4h2v-3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_packed_data_container.svg b/editor/icons/icon_packed_data_container.svg index dd5aeafb86..18bad53f66 100644 --- a/editor/icons/icon_packed_data_container.svg +++ b/editor/icons/icon_packed_data_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1 -1v-12a1.0001 1.0001 0 0 0 -1 -1h-12zm1 2h10v10h-10v-10zm1 1v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v12a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1-1v-12a1.0001 1.0001 0 0 0 -1-1zm1 2h10v10h-10zm1 1v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-6 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-6 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_packed_scene.svg b/editor/icons/icon_packed_scene.svg index a853322537..9c1d88db1c 100644 --- a/editor/icons/icon_packed_scene.svg +++ b/editor/icons/icon_packed_scene.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m14.564 2-2.2441 0.32812 0.81836 1.9004 1.7148-0.25zm-4.2227 0.61523-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.959 0.57812-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.957 0.57812-1.7148 0.25l0.28906 1.9785 2.2441-0.32812zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h12v-8z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812zm-1.4258 3.2285v6c0 1.1046.89543 2 2 2h12v-8z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_paint_vertex.svg b/editor/icons/icon_paint_vertex.svg index b53e005dae..cab3716bf5 100644 --- a/editor/icons/icon_paint_vertex.svg +++ b/editor/icons/icon_paint_vertex.svg @@ -1,58 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg4" - sodipodi:docname="icon_paint_vertex.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - <metadata - id="metadata10"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs8" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="3066" - inkscape:window-height="1689" - id="namedview6" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="134" - inkscape:window-y="55" - inkscape:window-maximized="1" - inkscape:current-layer="svg4" /> - <ellipse - style="fill:#ffffff" - id="path12" - cx="8.3728809" - cy="8.1694918" - rx="6.6779661" - ry="6.0677967" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><ellipse cx="8.372881" cy="8.169492" fill="#fff" rx="6.677966" ry="6.067797"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panel.svg b/editor/icons/icon_panel.svg index 7bd3db7c09..10a67bae7e 100644 --- a/editor/icons/icon_panel.svg +++ b/editor/icons/icon_panel.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panel_container.svg b/editor/icons/icon_panel_container.svg index df8a2c0a0e..08c5492f7e 100644 --- a/editor/icons/icon_panel_container.svg +++ b/editor/icons/icon_panel_container.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10z" fill="#a5efac"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_1.svg b/editor/icons/icon_panels_1.svg index 9edf59b527..850aad2cff 100644 --- a/editor/icons/icon_panels_1.svg +++ b/editor/icons/icon_panels_1.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect y="1036.4" width="16" height="16" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0h16v16h-16z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_2.svg b/editor/icons/icon_panels_2.svg index 1f0fe8bc6b..5f3fc6cf48 100644 --- a/editor/icons/icon_panels_2.svg +++ b/editor/icons/icon_panels_2.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v7h16v-7h-16zm0 9v7h16v-7h-16z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h16v-7zm0 9v7h16v-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_2_alt.svg b/editor/icons/icon_panels_2_alt.svg index 78c2839f36..edee3a660f 100644 --- a/editor/icons/icon_panels_2_alt.svg +++ b/editor/icons/icon_panels_2_alt.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v16h7v-16h-7zm9 0v16h7v-16h-7z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v16h7v-16zm9 0v16h7v-16z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_3.svg b/editor/icons/icon_panels_3.svg index 37e1601f29..3ddcb5e2ef 100644 --- a/editor/icons/icon_panels_3.svg +++ b/editor/icons/icon_panels_3.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v7h16v-7h-16zm0 9v7h7v-7h-7zm9 0v7h7v-7h-7z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h16v-7zm0 9v7h7v-7zm9 0v7h7v-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_3_alt.svg b/editor/icons/icon_panels_3_alt.svg index 11ca8e2814..0f36a24da8 100644 --- a/editor/icons/icon_panels_3_alt.svg +++ b/editor/icons/icon_panels_3_alt.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v7h7v-7h-7zm9 0v16h7v-16h-7zm-9 9v7h7v-7h-7z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h7v-7zm9 0v16h7v-16zm-9 9v7h7v-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panels_4.svg b/editor/icons/icon_panels_4.svg index 8315c2a789..7b2189087f 100644 --- a/editor/icons/icon_panels_4.svg +++ b/editor/icons/icon_panels_4.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m0 0v7h7v-7h-7zm9 0v7h7v-7h-7zm-9 9v7h7v-7h-7zm9 0v7h7v-7h-7z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v7h7v-7zm9 0v7h7v-7zm-9 9v7h7v-7zm9 0v7h7v-7z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_panorama_sky.svg b/editor/icons/icon_panorama_sky.svg index 86c5af576f..bfff6840bd 100644 --- a/editor/icons/icon_panorama_sky.svg +++ b/editor/icons/icon_panorama_sky.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1038.4" y2="1050.4" gradientTransform="matrix(1.0096 0 0 1.0227 -.0096153 -22.593)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#1ec3ff" offset="0"/> -<stop stop-color="#b2e1ff" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1037.4)"> -<path d="m1 1039.4c4.2749 2.6091 10.765 2.7449 14 0v12c-3.5849-2.6849-9.7929-2.6544-14 0z" fill="url(#a)" stroke-width="15.242"/> -<path transform="translate(0 1037.4)" d="m11 6c-0.554 0-1 0.446-1 1h-1c-0.554 0-1 0.446-1 1s0.446 1 1 1h2c0.554 0 1-0.446 1-1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-2zm-8 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-1z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientTransform="matrix(1.0096 0 0 1.0227 -.009615 -22.593)" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1038.4" y2="1050.4"><stop offset="0" stop-color="#1ec3ff"/><stop offset="1" stop-color="#b2e1ff"/></linearGradient><g transform="translate(0 -1037.4)"><path d="m1 1039.4c4.2749 2.6091 10.765 2.7449 14 0v12c-3.5849-2.6849-9.7929-2.6544-14 0z" fill="url(#a)" stroke-width="15.242"/><path d="m11 6c-.554 0-1 .446-1 1h-1c-.554 0-1 .446-1 1s.446 1 1 1h2c.554 0 1-.446 1-1h1c.554 0 1-.446 1-1s-.446-1-1-1zm-8 3c-.554 0-1 .446-1 1s.446 1 1 1h1c.554 0 1-.446 1-1s-.446-1-1-1z" fill="#fff" transform="translate(0 1037.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_parallax_background.svg b/editor/icons/icon_parallax_background.svg index 822e7149a9..09e6a7d19d 100644 --- a/editor/icons/icon_parallax_background.svg +++ b/editor/icons/icon_parallax_background.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<path transform="translate(0 1036.4)" d="m2 2a1 1 0 0 0 -1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-10a1 1 0 0 0 -1 -1h-12zm0 1h12v10h-12v-10zm5 2l-3 3 3 3v-6zm2 0v6l3-3-3-3z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/><path d="m2 2a1 1 0 0 0 -1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-10a1 1 0 0 0 -1-1zm0 1h12v10h-12zm5 2-3 3 3 3zm2 0v6l3-3z" fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_parallax_layer.svg b/editor/icons/icon_parallax_layer.svg index fbdf7f0d1f..d8a5ef5e1f 100644 --- a/editor/icons/icon_parallax_layer.svg +++ b/editor/icons/icon_parallax_layer.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<ellipse cx="3" cy="1039.4" r="2" fill="#6e6e6e"/> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v10c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-10c9.6e-6 -0.55228 0.44772-0.99999 1-1zm4 3l-3 3 3 3v-6zm2 0v6l3-3-3-3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><ellipse cx="3" cy="1039.4" fill="#6e6e6e"/><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 1h10c.55228.0000096.99999.44772 1 1v10c-.00001.55228-.44772.99999-1 1h-10c-.55228-.00001-.99999-.44772-1-1v-10c.0000096-.55228.44772-.99999 1-1zm4 3-3 3 3 3zm2 0v6l3-3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_particle_attractor_2d.svg b/editor/icons/icon_particle_attractor_2d.svg index 1374304af0..85f289dc4b 100644 --- a/editor/icons/icon_particle_attractor_2d.svg +++ b/editor/icons/icon_particle_attractor_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a3 7 0 0 0 -2.0801 1.9668 7 3 45 0 0 -2.8691 0.083984 7 3 45 0 0 -0.080078 2.8633 7 3 0 0 0 -1.9707 2.0859 7 3 0 0 0 1.9668 2.0801 3 7 45 0 0 0.083984 2.8691 3 7 45 0 0 2.8633 0.080078 3 7 0 0 0 2.0859 1.9707 3 7 0 0 0 2.0801 -1.9668 7 3 45 0 0 2.8691 -0.083984 7 3 45 0 0 0.080078 -2.8633 7 3 0 0 0 1.9707 -2.0859 7 3 0 0 0 -1.9668 -2.0801 3 7 45 0 0 -0.083984 -2.8691 3 7 45 0 0 -2.8633 -0.080078 3 7 0 0 0 -2.0859 -1.9707zm0 1a2 6 0 0 1 1.2598 1.3438 3 7 45 0 0 -1.2578 0.75977 7 3 45 0 0 -1.2637 -0.75781 2 6 0 0 1 1.2617 -1.3457zm-3.6348 1.5293a6 2 45 0 1 1.2344 0.28906 3 7 0 0 0 -0.35352 1.4238 7 3 0 0 0 -1.4297 0.35742 6 2 45 0 1 -0.058594 -1.8418 6 2 45 0 1 0.60742 -0.22852zm7.0762 0.0039062a2 6 45 0 1 0.80078 0.22461 2 6 45 0 1 -0.060547 1.8418 7 3 0 0 0 -1.4238 -0.35352 3 7 0 0 0 -0.35742 -1.4297 2 6 45 0 1 1.041 -0.2832zm-4.998 0.70703a6 2 45 0 1 0.74023 0.4707 3 7 45 0 0 -0.41211 0.33984 7 3 0 0 0 -0.52344 0.048828 2 6 0 0 1 0.19531 -0.85938zm3.1152 0.0019531a2 6 0 0 1 0.18945 0.85547 7 3 0 0 0 -0.5293 -0.050781 7 3 45 0 0 -0.4043 -0.33594 2 6 45 0 1 0.74414 -0.46875zm-1.5586 1.7578a6 2 0 0 1 0.82031 0.021484 6 2 45 0 1 0.59375 0.56445 6 2 45 0 1 0.56445 0.59375 2 6 0 0 1 0.021484 0.82031 2 6 0 0 1 -0.021484 0.82031 2 6 45 0 1 -0.56445 0.59375 2 6 45 0 1 -0.59375 0.56445 6 2 0 0 1 -0.82031 0.021484 6 2 0 0 1 -0.82031 -0.021484 6 2 45 0 1 -0.59375 -0.56445 6 2 45 0 1 -0.56445 -0.59375 2 6 0 0 1 -0.021484 -0.82031 2 6 0 0 1 0.021484 -0.82031 2 6 45 0 1 0.56445 -0.59375 2 6 45 0 1 0.59375 -0.56445 6 2 0 0 1 0.82031 -0.021484zm2.9004 0.24805a6 2 0 0 1 0.85938 0.19531 2 6 45 0 1 -0.4707 0.74023 7 3 45 0 0 -0.33984 -0.41211 3 7 0 0 0 -0.048828 -0.52344zm-5.8027 0.0039062a3 7 0 0 0 -0.050781 0.5293 3 7 45 0 0 -0.33594 0.4043 6 2 45 0 1 -0.46875 -0.74414 6 2 0 0 1 0.85547 -0.18945zm7.5566 0.48633a6 2 0 0 1 1.3457 1.2617 6 2 0 0 1 -1.3438 1.2598 7 3 45 0 0 -0.75977 -1.2578 3 7 45 0 0 0.75781 -1.2637zm-9.3105 0.0019532a7 3 45 0 0 0.75977 1.2578 3 7 45 0 0 -0.75781 1.2637 6 2 0 0 1 -1.3457 -1.2617 6 2 0 0 1 1.3438 -1.2598zm4.6562 0.25977a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm3.2891 1.8145a6 2 45 0 1 0.46875 0.74414 6 2 0 0 1 -0.85547 0.18945 3 7 0 0 0 0.050781 -0.5293 3 7 45 0 0 0.33594 -0.4043zm-6.5781 0.0019531a7 3 45 0 0 0.33984 0.41211 3 7 0 0 0 0.048828 0.52344 6 2 0 0 1 -0.85938 -0.19531 2 6 45 0 1 0.4707 -0.74023zm-0.89258 1.584a7 3 0 0 0 1.4238 0.35352 3 7 0 0 0 0.35742 1.4297 2 6 45 0 1 -1.8418 0.058594 2 6 45 0 1 0.060547 -1.8418zm8.3652 0a6 2 45 0 1 0.058594 1.8418 6 2 45 0 1 -1.8418 -0.060547 3 7 0 0 0 0.35352 -1.4238 7 3 0 0 0 1.4297 -0.35742zm-2.4316 0.5a2 6 0 0 1 -0.19531 0.85938 6 2 45 0 1 -0.74023 -0.4707 3 7 45 0 0 0.41211 -0.33984 7 3 0 0 0 0.52344 -0.048828zm-3.5 0.001953a7 3 0 0 0 0.5293 0.050781 7 3 45 0 0 0.4043 0.33594 2 6 45 0 1 -0.74414 0.46875 2 6 0 0 1 -0.18945 -0.85547zm1.7461 0.99414a7 3 45 0 0 1.2637 0.75781 2 6 0 0 1 -1.2617 1.3457 2 6 0 0 1 -1.2598 -1.3438 3 7 45 0 0 1.2578 -0.75977z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a3 7 0 0 0 -2.0801 1.9668 7 3 45 0 0 -2.8691.083984 7 3 45 0 0 -.080078 2.8633 7 3 0 0 0 -1.9707 2.0859 7 3 0 0 0 1.9668 2.0801 3 7 45 0 0 .083984 2.8691 3 7 45 0 0 2.8633.080078 3 7 0 0 0 2.0859 1.9707 3 7 0 0 0 2.0801-1.9668 7 3 45 0 0 2.8691-.083984 7 3 45 0 0 .080078-2.8633 7 3 0 0 0 1.9707-2.0859 7 3 0 0 0 -1.9668-2.0801 3 7 45 0 0 -.083984-2.8691 3 7 45 0 0 -2.8633-.080078 3 7 0 0 0 -2.0859-1.9707zm0 1a2 6 0 0 1 1.2598 1.3438 3 7 45 0 0 -1.2578.75977 7 3 45 0 0 -1.2637-.75781 2 6 0 0 1 1.2617-1.3457zm-3.6348 1.5293a6 2 45 0 1 1.2344.28906 3 7 0 0 0 -.35352 1.4238 7 3 0 0 0 -1.4297.35742 6 2 45 0 1 -.058594-1.8418 6 2 45 0 1 .60742-.22852zm7.0762.0039062a2 6 45 0 1 .80078.22461 2 6 45 0 1 -.060547 1.8418 7 3 0 0 0 -1.4238-.35352 3 7 0 0 0 -.35742-1.4297 2 6 45 0 1 1.041-.2832zm-4.998.70703a6 2 45 0 1 .74023.4707 3 7 45 0 0 -.41211.33984 7 3 0 0 0 -.52344.048828 2 6 0 0 1 .19531-.85938zm3.1152.0019531a2 6 0 0 1 .18945.85547 7 3 0 0 0 -.5293-.050781 7 3 45 0 0 -.4043-.33594 2 6 45 0 1 .74414-.46875zm-1.5586 1.7578a6 2 0 0 1 .82031.021484 6 2 45 0 1 .59375.56445 6 2 45 0 1 .56445.59375 2 6 0 0 1 .021484.82031 2 6 0 0 1 -.021484.82031 2 6 45 0 1 -.56445.59375 2 6 45 0 1 -.59375.56445 6 2 0 0 1 -.82031.021484 6 2 0 0 1 -.82031-.021484 6 2 45 0 1 -.59375-.56445 6 2 45 0 1 -.56445-.59375 2 6 0 0 1 -.021484-.82031 2 6 0 0 1 .021484-.82031 2 6 45 0 1 .56445-.59375 2 6 45 0 1 .59375-.56445 6 2 0 0 1 .82031-.021484zm2.9004.24805a6 2 0 0 1 .85938.19531 2 6 45 0 1 -.4707.74023 7 3 45 0 0 -.33984-.41211 3 7 0 0 0 -.048828-.52344zm-5.8027.0039062a3 7 0 0 0 -.050781.5293 3 7 45 0 0 -.33594.4043 6 2 45 0 1 -.46875-.74414 6 2 0 0 1 .85547-.18945zm7.5566.48633a6 2 0 0 1 1.3457 1.2617 6 2 0 0 1 -1.3438 1.2598 7 3 45 0 0 -.75977-1.2578 3 7 45 0 0 .75781-1.2637zm-9.3105.0019532a7 3 45 0 0 .75977 1.2578 3 7 45 0 0 -.75781 1.2637 6 2 0 0 1 -1.3457-1.2617 6 2 0 0 1 1.3438-1.2598zm4.6562.25977a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm3.2891 1.8145a6 2 45 0 1 .46875.74414 6 2 0 0 1 -.85547.18945 3 7 0 0 0 .050781-.5293 3 7 45 0 0 .33594-.4043zm-6.5781.0019531a7 3 45 0 0 .33984.41211 3 7 0 0 0 .048828.52344 6 2 0 0 1 -.85938-.19531 2 6 45 0 1 .4707-.74023zm-.89258 1.584a7 3 0 0 0 1.4238.35352 3 7 0 0 0 .35742 1.4297 2 6 45 0 1 -1.8418.058594 2 6 45 0 1 .060547-1.8418zm8.3652 0a6 2 45 0 1 .058594 1.8418 6 2 45 0 1 -1.8418-.060547 3 7 0 0 0 .35352-1.4238 7 3 0 0 0 1.4297-.35742zm-2.4316.5a2 6 0 0 1 -.19531.85938 6 2 45 0 1 -.74023-.4707 3 7 45 0 0 .41211-.33984 7 3 0 0 0 .52344-.048828zm-3.5.001953a7 3 0 0 0 .5293.050781 7 3 45 0 0 .4043.33594 2 6 45 0 1 -.74414.46875 2 6 0 0 1 -.18945-.85547zm1.7461.99414a7 3 45 0 0 1.2637.75781 2 6 0 0 1 -1.2617 1.3457 2 6 0 0 1 -1.2598-1.3438 3 7 45 0 0 1.2578-.75977z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_particles.svg b/editor/icons/icon_particles.svg index ff58d4e47a..f1378e3f8c 100644 --- a/editor/icons/icon_particles.svg +++ b/editor/icons/icon_particles.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a4.5 5 0 0 0 -4.4141 4.0312 3 3 0 0 0 -2.5859 2.9688 3 3 0 0 0 3 3h8a3 3 0 0 0 3 -3 3 3 0 0 0 -2.5898 -2.9668 4.5 5 0 0 0 -4.4102 -4.0332zm-4 11a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm8 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-4 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a4.5 5 0 0 0 -4.4141 4.0312 3 3 0 0 0 -2.5859 2.9688 3 3 0 0 0 3 3h8a3 3 0 0 0 3-3 3 3 0 0 0 -2.5898-2.9668 4.5 5 0 0 0 -4.4102-4.0332zm-4 11a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm8 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-4 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_particles_2d.svg b/editor/icons/icon_particles_2d.svg index 397922f31f..7151194e36 100644 --- a/editor/icons/icon_particles_2d.svg +++ b/editor/icons/icon_particles_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a4.5 5 0 0 0 -4.4141 4.0312 3 3 0 0 0 -2.5859 2.9688 3 3 0 0 0 3 3h8a3 3 0 0 0 3 -3 3 3 0 0 0 -2.5898 -2.9668 4.5 5 0 0 0 -4.4102 -4.0332zm-4 11a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm8 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-4 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a4.5 5 0 0 0 -4.4141 4.0312 3 3 0 0 0 -2.5859 2.9688 3 3 0 0 0 3 3h8a3 3 0 0 0 3-3 3 3 0 0 0 -2.5898-2.9668 4.5 5 0 0 0 -4.4102-4.0332zm-4 11a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm8 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-4 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_particles_material.svg b/editor/icons/icon_particles_material.svg index 95121d8321..af45f9888a 100644 --- a/editor/icons/icon_particles_material.svg +++ b/editor/icons/icon_particles_material.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a4.5 5 0 0 0 -3.5938 2h7.1816a4.5 5 0 0 0 -3.5879 -2z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m4.4062 3a4.5 5 0 0 0 -0.81445 2h8.8105a4.5 5 0 0 0 -0.81445 -2h-7.1816z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m3.5918 5a4.5 5 0 0 0 -0.0058594 0.03125 3 3 0 0 0 -2.4121 1.9688h13.65a3 3 0 0 0 -2.4141 -1.9668 4.5 5 0 0 0 -0.007812 -0.033203h-8.8105z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1.1738 7a3 3 0 0 0 -0.17383 1 3 3 0 0 0 0.17578 1h13.65a3 3 0 0 0 0.17383 -1 3 3 0 0 0 -0.17578 -1h-13.65z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1.1758 9a3 3 0 0 0 2.8242 2h8a3 3 0 0 0 2.8262 -2h-13.65z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m3 13a1 1 0 0 0 1 1 1 1 0 0 0 1 -1h-2zm5 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm3 0a1 1 0 0 0 1 1 1 1 0 0 0 1 -1h-2z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m4 12a1 1 0 0 0 -1 1h2a1 1 0 0 0 -1 -1zm8 0a1 1 0 0 0 -1 1h2a1 1 0 0 0 -1 -1z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a4.5 5 0 0 0 -3.5938 2h7.1816a4.5 5 0 0 0 -3.5879-2z" fill="#ff7070"/><path d="m4.4062 3a4.5 5 0 0 0 -.81445 2h8.8105a4.5 5 0 0 0 -.81445-2z" fill="#ffeb70"/><path d="m3.5918 5a4.5 5 0 0 0 -.0058594.03125 3 3 0 0 0 -2.4121 1.9688h13.65a3 3 0 0 0 -2.4141-1.9668 4.5 5 0 0 0 -.007812-.033203h-8.8105z" fill="#9dff70"/><path d="m1.1738 7a3 3 0 0 0 -.17383 1 3 3 0 0 0 .17578 1h13.65a3 3 0 0 0 .17383-1 3 3 0 0 0 -.17578-1z" fill="#70ffb9"/><path d="m1.1758 9a3 3 0 0 0 2.8242 2h8a3 3 0 0 0 2.8262-2h-13.65z" fill="#70deff"/><path d="m3 13a1 1 0 0 0 1 1 1 1 0 0 0 1-1zm5 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm3 0a1 1 0 0 0 1 1 1 1 0 0 0 1-1z" fill="#ff70ac"/><path d="m4 12a1 1 0 0 0 -1 1h2a1 1 0 0 0 -1-1zm8 0a1 1 0 0 0 -1 1h2a1 1 0 0 0 -1-1z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_path.svg b/editor/icons/icon_path.svg index 254aa4b324..cde9a06903 100644 --- a/editor/icons/icon_path.svg +++ b/editor/icons/icon_path.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 0.84961 1.6328c-0.19239 0.88508-0.55317 1.3394-0.98633 1.6426-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c0.8927-0.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699 -1.8164 2 2 0 0 0 -2 -2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 .84961 1.6328c-.19239.88508-.55317 1.3394-.98633 1.6426-.64426.451-1.7129.60547-2.9629.73047s-2.6814.22053-3.9121 1.082c-.89278.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -.84961-1.6328c.19235-.88496.55306-1.3373.98633-1.6406.64426-.451 1.7129-.60547 2.9629-.73047s2.6814-.22053 3.9121-1.082c.8927-.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699-1.8164 2 2 0 0 0 -2-2z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_path_2d.svg b/editor/icons/icon_path_2d.svg index 0195bfe1d7..8aa0453b88 100644 --- a/editor/icons/icon_path_2d.svg +++ b/editor/icons/icon_path_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 0.84961 1.6328c-0.19239 0.88508-0.55317 1.3394-0.98633 1.6426-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c0.8927-0.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699 -1.8164 2 2 0 0 0 -2 -2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 1a2 2 0 0 0 -2 2 2 2 0 0 0 .84961 1.6328c-.19239.88508-.55317 1.3394-.98633 1.6426-.64426.451-1.7129.60547-2.9629.73047s-2.6814.22053-3.9121 1.082c-.89278.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -.84961-1.6328c.19235-.88496.55306-1.3373.98633-1.6406.64426-.451 1.7129-.60547 2.9629-.73047s2.6814-.22053 3.9121-1.082c.8927-.62488 1.5321-1.6538 1.8184-3.0977a2 2 0 0 0 1.1699-1.8164 2 2 0 0 0 -2-2z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_path_follow.svg b/editor/icons/icon_path_follow.svg index bd3f585e54..8e904ab5a5 100644 --- a/editor/icons/icon_path_follow.svg +++ b/editor/icons/icon_path_follow.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13 0l-3 4h1.9473c-0.1385 1.3203-0.5583 1.9074-1.084 2.2754-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c1.0528-0.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 0-3 4h1.9473c-.1385 1.3203-.5583 1.9074-1.084 2.2754-.64426.451-1.7129.60547-2.9629.73047s-2.6814.22053-3.9121 1.082c-.89278.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -.84961-1.6328c.19235-.88496.55306-1.3373.98633-1.6406.64426-.451 1.7129-.60547 2.9629-.73047s2.6814-.22053 3.9121-1.082c1.0528-.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_path_follow_2d.svg b/editor/icons/icon_path_follow_2d.svg index 7dc3015105..20a32f2d83 100644 --- a/editor/icons/icon_path_follow_2d.svg +++ b/editor/icons/icon_path_follow_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m13 0l-3 4h1.9473c-0.1385 1.3203-0.5583 1.9074-1.084 2.2754-0.64426 0.451-1.7129 0.60547-2.9629 0.73047s-2.6814 0.22053-3.9121 1.082c-0.89278 0.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -0.84961 -1.6328c0.19235-0.88496 0.55306-1.3373 0.98633-1.6406 0.64426-0.451 1.7129-0.60547 2.9629-0.73047s2.6814-0.22053 3.9121-1.082c1.0528-0.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 0-3 4h1.9473c-.1385 1.3203-.5583 1.9074-1.084 2.2754-.64426.451-1.7129.60547-2.9629.73047s-2.6814.22053-3.9121 1.082c-.89278.62493-1.5321 1.6522-1.8184 3.0957a2 2 0 0 0 -1.1699 1.8164 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -.84961-1.6328c.19235-.88496.55306-1.3373.98633-1.6406.64426-.451 1.7129-.60547 2.9629-.73047s2.6814-.22053 3.9121-1.082c1.0528-.73697 1.7552-2.032 1.9375-3.9141h2.0508l-3-4z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pause.svg b/editor/icons/icon_pause.svg index 794a610ff2..14c9971383 100644 --- a/editor/icons/icon_pause.svg +++ b/editor/icons/icon_pause.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 3a1.0001 1.0001 0 0 0 -1 1v8a1.0001 1.0001 0 0 0 1 1h2a1 1 0 0 0 1 -1v-8a1 1 0 0 0 -1 -1h-2zm6 0a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h2a1.0001 1.0001 0 0 0 1 -1v-8a1.0001 1.0001 0 0 0 -1 -1h-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 3a1.0001 1.0001 0 0 0 -1 1v8a1.0001 1.0001 0 0 0 1 1h2a1 1 0 0 0 1-1v-8a1 1 0 0 0 -1-1zm6 0a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h2a1.0001 1.0001 0 0 0 1-1v-8a1.0001 1.0001 0 0 0 -1-1z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_physical_bone.svg b/editor/icons/icon_physical_bone.svg index 2efcab3e20..0a34eb6e48 100644 --- a/editor/icons/icon_physical_bone.svg +++ b/editor/icons/icon_physical_bone.svg @@ -1,77 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg2" - inkscape:version="0.91 r13725" - sodipodi:docname="icon_physical_bone.svg"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1027" - id="namedview8" - showgrid="false" - inkscape:zoom="16" - inkscape:cx="14.674088" - inkscape:cy="7.3239349" - inkscape:window-x="-8" - inkscape:window-y="-8" - inkscape:window-maximized="1" - inkscape:current-layer="svg2" /> - <g - id="g4505" - transform="translate(-2.5625,-18.4375)"> - <path - inkscape:connector-curvature="0" - id="path6-9-8" - d="m 13.107422,19.382812 a 2.4664,2.4663 0 0 0 -1.78125,0.720704 2.4664,2.4663 0 0 0 -0.185547,0.21289 L 12.472656,22.75 10.867187,23.353516 7.453125,26.767578 a 2.4664,2.4663 0 0 0 -3.1015625,0.3125 2.4664,2.4663 0 0 0 0,3.488281 2.4664,2.4663 0 0 0 1.3964844,0.695313 2.4664,2.4663 0 0 0 0.6953125,1.396484 2.4664,2.4663 0 0 0 3.4882812,0 2.4664,2.4663 0 0 0 0.3144534,-3.103515 l 3.560547,-3.560547 a 2.4664,2.4663 0 0 0 3.099609,-0.310547 2.4664,2.4663 0 0 0 0,-3.488281 A 2.4664,2.4663 0 0 0 15.509766,21.5 2.4664,2.4663 0 0 0 14.814453,20.103516 2.4664,2.4663 0 0 0 13.107422,19.382812 Z" - style="fill:#fc9c9c" /> - <path - sodipodi:nodetypes="cccc" - id="rect4140-5-1-4-3-7-9-03" - d="m 3.7211033,21.208326 0.9608286,4.82644 1.3962404,-0.524494 z" - style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cccc" - id="rect4140-5-1-4-3-7-9-5-3" - d="m 6.4843278,19.465234 0.9608285,4.82644 1.3962404,-0.524494 z" - style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - <path - sodipodi:nodetypes="cccc" - id="rect4140-5-1-4-3-7-9-5-3-8" - d="m 9.6964655,19.33678 0.7108285,3.51394 1.39624,-0.524494 z" - style="opacity:1;fill:#fc9c9c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - inkscape:connector-curvature="0" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc9c9c" transform="translate(-2.5625 -18.4375)"><path d="m13.107422 19.382812a2.4664 2.4663 0 0 0 -1.78125.720704 2.4664 2.4663 0 0 0 -.185547.21289l1.332031 2.433594-1.605469.603516-3.414062 3.414062a2.4664 2.4663 0 0 0 -3.1015625.3125 2.4664 2.4663 0 0 0 0 3.488281 2.4664 2.4663 0 0 0 1.3964844.695313 2.4664 2.4663 0 0 0 .6953125 1.396484 2.4664 2.4663 0 0 0 3.4882812 0 2.4664 2.4663 0 0 0 .3144534-3.103515l3.560547-3.560547a2.4664 2.4663 0 0 0 3.099609-.310547 2.4664 2.4663 0 0 0 0-3.488281 2.4664 2.4663 0 0 0 -1.396484-.697266 2.4664 2.4663 0 0 0 -.695313-1.396484 2.4664 2.4663 0 0 0 -1.707031-.720704z"/><path d="m3.7211033 21.208326.9608286 4.82644 1.3962404-.524494z"/><path d="m6.4843278 19.465234.9608285 4.82644 1.3962404-.524494z"/><path d="m9.6964655 19.33678.7108285 3.51394 1.39624-.524494z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pin.svg b/editor/icons/icon_pin.svg index 332692fdd5..85cd815b64 100644 --- a/editor/icons/icon_pin.svg +++ b/editor/icons/icon_pin.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8zm1 6l-2 3h10l-2-3h-6zm2 4v2l1 2 1-2v-2h-2z" fill="#e0e0e0" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pin_joint.svg b/editor/icons/icon_pin_joint.svg index cfbb8cbbcd..147553d316 100644 --- a/editor/icons/icon_pin_joint.svg +++ b/editor/icons/icon_pin_joint.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 1.2715l-0.70703 0.70703v1.4141l-2.1211 2.123 4.2422 4.2422 2.1211-2.1211h1.4141l0.70703-0.70703-5.6562-5.6582zm-3.5352 4.9512l-3.5352 0.70703 7.0703 7.0703 0.70703-3.5352-4.2422-4.2422zm-1.4141 4.2422l-1.4141 1.4141-0.70703 2.1211 2.1211-0.70703 1.4141-1.4141-1.4141-1.4141z" fill="#fc9c9c" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1.2715-.70703.70703v1.4141l-2.1211 2.123 4.2422 4.2422 2.1211-2.1211h1.4141l.70703-.70703-5.6562-5.6582zm-3.5352 4.9512-3.5352.70703 7.0703 7.0703.70703-3.5352-4.2422-4.2422zm-1.4141 4.2422-1.4141 1.4141-.70703 2.1211 2.1211-.70703 1.4141-1.4141-1.4141-1.4141z" fill="#fc9c9c" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pin_joint_2d.svg b/editor/icons/icon_pin_joint_2d.svg index d07fb81c79..f1dcafb923 100644 --- a/editor/icons/icon_pin_joint_2d.svg +++ b/editor/icons/icon_pin_joint_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 1.2715l-0.70703 0.70703v1.4141l-2.1211 2.123 4.2422 4.2422 2.1211-2.1211h1.4141l0.70703-0.70703-5.6562-5.6582zm-3.5352 4.9512l-3.5352 0.70703 7.0703 7.0703 0.70703-3.5352-4.2422-4.2422zm-1.4141 4.2422l-1.4141 1.4141-0.70703 2.1211 2.1211-0.70703 1.4141-1.4141-1.4141-1.4141z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1.2715-.70703.70703v1.4141l-2.1211 2.123 4.2422 4.2422 2.1211-2.1211h1.4141l.70703-.70703-5.6562-5.6582zm-3.5352 4.9512-3.5352.70703 7.0703 7.0703.70703-3.5352-4.2422-4.2422zm-1.4141 4.2422-1.4141 1.4141-.70703 2.1211 2.1211-.70703 1.4141-1.4141-1.4141-1.4141z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pin_pressed.svg b/editor/icons/icon_pin_pressed.svg index 332692fdd5..85cd815b64 100644 --- a/editor/icons/icon_pin_pressed.svg +++ b/editor/icons/icon_pin_pressed.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1v1l1 1v3h6v-3l1-1v-1h-8zm1 6l-2 3h10l-2-3h-6zm2 4v2l1 2 1-2v-2h-2z" fill="#e0e0e0" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1v1l1 1v3h6v-3l1-1v-1zm1 6-2 3h10l-2-3zm2 4v2l1 2 1-2v-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_plane.svg b/editor/icons/icon_plane.svg index e02fded99f..3a943af0b3 100644 --- a/editor/icons/icon_plane.svg +++ b/editor/icons/icon_plane.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path transform="translate(0 1040.4)" d="m1 2v8h2v-2a3 3 0 0 0 3 -3 3 3 0 0 0 -3 -3h-2zm6 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5h-2zm-4 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1v-2zm8 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3h-2z" fill="#f77070"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 2v8h2v-2a3 3 0 0 0 3-3 3 3 0 0 0 -3-3zm6 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-5zm-4 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1zm8 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3z" fill="#f77070"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_plane_mesh.svg b/editor/icons/icon_plane_mesh.svg index dae7b02da5..ddcc623c67 100644 --- a/editor/icons/icon_plane_mesh.svg +++ b/editor/icons/icon_plane_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2 12h12l-3-8h-6z" fill="none" stroke="#ffd684" stroke-linejoin="round" stroke-width="2"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 12h12l-3-8h-6z" fill="none" stroke="#ffd684" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_plane_shape.svg b/editor/icons/icon_plane_shape.svg index 27395b6a42..2c90cf6d53 100644 --- a/editor/icons/icon_plane_shape.svg +++ b/editor/icons/icon_plane_shape.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m1 1044.4 7 3 7-3-7-3z" fill="#a2d2ff" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1044.4 7 3 7-3-7-3z" fill="#a2d2ff" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play.svg b/editor/icons/icon_play.svg index 47a2ca12cc..4c16215a68 100644 --- a/editor/icons/icon_play.svg +++ b/editor/icons/icon_play.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g> -<path d="m4.9883 1039.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59362-0.3959 0.59362-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_backwards.svg b/editor/icons/icon_play_backwards.svg index c6de746f05..c98f15ea50 100644 --- a/editor/icons/icon_play_backwards.svg +++ b/editor/icons/icon_play_backwards.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="matrix(-1 0 0 1 16 0)"> -<path d="m4.9883 1039.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59362-0.3959 0.59362-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#e0e0e0" fill-rule="evenodd" transform="matrix(-1 0 0 1 16 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_custom.svg b/editor/icons/icon_play_custom.svg index ddd2ee56d8..e19a8e7028 100644 --- a/editor/icons/icon_play_custom.svg +++ b/editor/icons/icon_play_custom.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m14.564 2l-2.2441 0.32812 0.81836 1.9004 1.7148-0.25-0.28906-1.9785zm-4.2227 0.61523l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.959 0.57812l-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906-0.81836-1.9023zm-3.957 0.57812l-1.7148 0.25 0.28906 1.9785 2.2441-0.32812-0.81836-1.9004zm-1.4258 3.2285v6a2 2 0 0 0 2 2h12v-8h-14zm3 1h4v1h4v5h-4-4v-5-1z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25-.28906-1.9785zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812-.81836-1.9004zm-1.4258 3.2285v6a2 2 0 0 0 2 2h12v-8zm3 1h4v1h4v5h-4-4v-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_overlay.svg b/editor/icons/icon_play_overlay.svg index eff33f1b6b..1fb2da6596 100644 --- a/editor/icons/icon_play_overlay.svg +++ b/editor/icons/icon_play_overlay.svg @@ -1,4 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> - <rect x="0" y="0" width="64" height="64" rx="5" ry="5" fill="#044B94" fill-opacity="0.6"/> - <path d="M16 16 L48 32 L16 48" fill="#f2f2f2"/> -</svg>
\ No newline at end of file +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><rect fill="#044b94" fill-opacity=".6" height="64" rx="5" width="64"/><path d="m16 16 32 16-32 16" fill="#f2f2f2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_scene.svg b/editor/icons/icon_play_scene.svg index 4ba0f88bcf..5e5097fd66 100644 --- a/editor/icons/icon_play_scene.svg +++ b/editor/icons/icon_play_scene.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m14.564 2-2.2441 0.32812 0.81836 1.9004 1.7148-0.25zm-4.2227 0.61523-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.959 0.57812-1.9785 0.28906 0.81836 1.9023 1.9785-0.28906zm-3.957 0.57812-1.7148 0.25l0.28906 1.9785 2.2441-0.32812zm-1.4258 3.2285v6c0 1.1046 0.89543 2 2 2h12v-8zm5 1 5 3-5 3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14.564 2-2.2441.32812.81836 1.9004 1.7148-.25zm-4.2227.61523-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.959.57812-1.9785.28906.81836 1.9023 1.9785-.28906zm-3.957.57812-1.7148.25.28906 1.9785 2.2441-.32812zm-1.4258 3.2285v6c0 1.1046.89543 2 2 2h12v-8zm5 1 5 3-5 3z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_start.svg b/editor/icons/icon_play_start.svg index 541a18e3d9..2ade7371e0 100644 --- a/editor/icons/icon_play_start.svg +++ b/editor/icons/icon_play_start.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1c0.55226-1e-4 0.99994-0.4477 1-1v-8c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-1zm4.9746 0c-0.54154 0.014-0.97365 0.45635-0.97461 0.99805v8c-3.92e-4 0.8389 0.97003 1.3054 1.625 0.78125l5-4c0.49938-0.4004 0.49938-1.1601 0-1.5605l-5-4c-0.18422-0.1473-0.41459-0.22485-0.65039-0.21875z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3a1 1 0 0 0 -1 1v8a1 1 0 0 0 1 1h1c.55226-.0001.99994-.4477 1-1v-8c-.000055-.5523-.44774-.9999-1-1zm4.9746 0c-.54154.014-.97365.45635-.97461.99805v8c-.000392.8389.97003 1.3054 1.625.78125l5-4c.49938-.4004.49938-1.1601 0-1.5605l-5-4c-.18422-.1473-.41459-.22485-.65039-.21875z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_start_backwards.svg b/editor/icons/icon_play_start_backwards.svg index b1acc749e0..195f9a646e 100644 --- a/editor/icons/icon_play_start_backwards.svg +++ b/editor/icons/icon_play_start_backwards.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m13 1039.4a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-1c-0.55226-1e-4 -0.99994-0.4477-1-1v-8c5.5e-5 -0.5523 0.44774-0.9999 1-1zm-4.9746 0c0.54154 0.014 0.97365 0.4563 0.97461 0.998v8c3.92e-4 0.8389-0.97003 1.3055-1.625 0.7813l-5-4c-0.49938-0.4004-0.49938-1.1601 0-1.5605l5-4c0.18422-0.1473 0.41459-0.2249 0.65039-0.2188z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 1039.4a1 1 0 0 1 1 1v8a1 1 0 0 1 -1 1h-1c-.55226-.0001-.99994-.4477-1-1v-8c.000055-.5523.44774-.9999 1-1zm-4.9746 0c.54154.014.97365.4563.97461.998v8c.000392.8389-.97003 1.3055-1.625.7813l-5-4c-.49938-.4004-.49938-1.1601 0-1.5605l5-4c.18422-.1473.41459-.2249.65039-.2188z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_play_travel.svg b/editor/icons/icon_play_travel.svg index 5cd3e07e20..d772476e15 100644 --- a/editor/icons/icon_play_travel.svg +++ b/editor/icons/icon_play_travel.svg @@ -1,85 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_play_travel.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1446" - inkscape:window-height="646" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8.2818541" - inkscape:cy="5.7694884" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="matrix(0.59321602,0,0,0.59321602,-1.2203136,-611.14809)" - id="g6"> - <g - id="g4"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <g - transform="matrix(0.59321602,0,0,0.59321602,7.5254716,-610.94451)" - id="g6-3"> - <g - id="g4-6"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2-7" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect842" - width="9.5593224" - height="0.54237264" - x="3.0058463" - y="8.1280737" - ry="0.27118632" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="matrix(.59321602 0 0 .59321602 -1.220314 -611.14809)"/><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="matrix(.59321602 0 0 .59321602 7.525472 -610.94451)"/><rect height=".542373" ry=".271186" width="9.559322" x="3.005846" y="8.128074"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_plugin_script.svg b/editor/icons/icon_plugin_script.svg index 763cca3a92..0d080c132e 100644 --- a/editor/icons/icon_plugin_script.svg +++ b/editor/icons/icon_plugin_script.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7 1l-0.56445 2.2578c-0.23643 0.075851-0.46689 0.16921-0.68945 0.2793l-1.9883-1.1934-1.4141 1.4141 1.1953 1.9941c-0.11191 0.22113-0.20723 0.45028-0.28516 0.68555l-2.2539 0.5625v2l2.2578 0.56445c0.048141 0.14946 0.11579 0.29137 0.17773 0.43555h0.58789c0.51595-0.6841 1.1988-1.2456 2.0195-1.5957-0.028019-0.13296-0.042416-0.26842-0.042969-0.4043 9.6e-6 -1.1046 0.89543-2 2-2 1.1046 9.6e-6 2 0.89543 2 2-1.737e-4 0.1345-0.013915 0.26865-0.041016 0.40039 0.82295 0.35108 1.509 0.91301 2.0254 1.5996h0.58008c0.063668-0.14463 0.13192-0.2874 0.18164-0.4375l2.2539-0.5625v-2l-2.2578-0.56445c-0.075942-0.23577-0.1693-0.46557-0.2793-0.6875l1.1934-1.9902-1.4141-1.4141-1.9941 1.1953c-0.22113-0.11191-0.45028-0.20723-0.68555-0.28516l-0.5625-2.2539h-2zm1 6a1 1 0 0 0 -0.99805 0.92969 1 1 0 0 0 -0.0019531 0.070312v2.1738a3 3 0 0 0 -2 2.8262h1v2h1v-2h2v2h1v-2h1a3 3 0 0 0 -0.015625 -0.29883 3 3 0 0 0 -1.9844 -2.5254v-2.1758a1 1 0 0 0 -1 -1z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1-.56445 2.2578c-.23643.075851-.46689.16921-.68945.2793l-1.9883-1.1934-1.4141 1.4141 1.1953 1.9941c-.11191.22113-.20723.45028-.28516.68555l-2.2539.5625v2l2.2578.56445c.048141.14946.11579.29137.17773.43555h.58789c.51595-.6841 1.1988-1.2456 2.0195-1.5957-.028019-.13296-.042416-.26842-.042969-.4043.0000096-1.1046.89543-2 2-2 1.1046.0000096 2 .89543 2 2-.0001737.1345-.013915.26865-.041016.40039.82295.35108 1.509.91301 2.0254 1.5996h.58008c.063668-.14463.13192-.2874.18164-.4375l2.2539-.5625v-2l-2.2578-.56445c-.075942-.23577-.1693-.46557-.2793-.6875l1.1934-1.9902-1.4141-1.4141-1.9941 1.1953c-.22113-.11191-.45028-.20723-.68555-.28516l-.5625-2.2539h-2zm1 6a1 1 0 0 0 -.99805.92969 1 1 0 0 0 -.0019531.070312v2.1738a3 3 0 0 0 -2 2.8262h1v2h1v-2h2v2h1v-2h1a3 3 0 0 0 -.015625-.29883 3 3 0 0 0 -1.9844-2.5254v-2.1758a1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_point_mesh.svg b/editor/icons/icon_point_mesh.svg index 8da7759daf..0504b7ff01 100644 --- a/editor/icons/icon_point_mesh.svg +++ b/editor/icons/icon_point_mesh.svg @@ -1,7 +1 @@ -<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#ffd684" stroke="#000" stroke-dasharray="null" stroke-linecap="null" stroke-linejoin="null" stroke-opacity="0" stroke-width="0"> -<ellipse cx="3.7237" cy="3.0268" rx="2.0114" ry="1.9956"/> -<ellipse cx="11.717" cy="6.1734" rx="2.0114" ry="1.9956"/> -<ellipse cx="6.5219" cy="12.477" rx="2.0114" ry="1.9956"/> -</g> -</svg> +<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#ffd684"><ellipse cx="3.7237" cy="3.0268" rx="2.0114" ry="1.9956"/><ellipse cx="11.717" cy="6.1734" rx="2.0114" ry="1.9956"/><ellipse cx="6.5219" cy="12.477" rx="2.0114" ry="1.9956"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_polygon_2_d.svg b/editor/icons/icon_polygon_2_d.svg index fe3846adcb..485109072e 100644 --- a/editor/icons/icon_polygon_2_d.svg +++ b/editor/icons/icon_polygon_2_d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1050.4h-12v-12h12l-6 6z" fill="none" stroke="#a5b7f3" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_polygon_path_finder.svg b/editor/icons/icon_polygon_path_finder.svg index 5c1cb86b84..b41067d08a 100644 --- a/editor/icons/icon_polygon_path_finder.svg +++ b/editor/icons/icon_polygon_path_finder.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 5.52e-5 -0.99994 0.44774-1 1v1h2v-2h-1zm3 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h1.4141l0.29297-0.29297c0.62956-0.62999 0.18361-1.7067-0.70703-1.707h-1zm-12 4v2h2v-2h-2zm11 2l-3 8 3-2 3 2-3-8zm-11 2v2h2v-2h-2zm0 4v1c5.52e-5 0.55226 0.44774 0.99994 1 1h1v-2h-2zm4 0v2h1.9023c-7.835e-4 -0.2513 0.043539-0.50069 0.13086-0.73633l0.47461-1.2637h-2.5078z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0000552-.99994.44774-1 1v1h2v-2zm3 0v2h2v-2zm4 0v2h2v-2zm4 0v2h1.4141l.29297-.29297c.62956-.62999.18361-1.7067-.70703-1.707h-1zm-12 4v2h2v-2zm11 2-3 8 3-2 3 2zm-11 2v2h2v-2zm0 4v1c.0000552.55226.44774.99994 1 1h1v-2zm4 0v2h1.9023c-.0007835-.2513.043539-.50069.13086-.73633l.47461-1.2637h-2.5078z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_byte_array.svg b/editor/icons/icon_pool_byte_array.svg index 29d6bfe4f0..5409a47bc4 100644 --- a/editor/icons/icon_pool_byte_array.svg +++ b/editor/icons/icon_pool_byte_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2h-2zm12 0v2h2v8h-2v2h4v-12h-2z" fill="#e0e0e0"/> -<path d="m5 3a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v4h2a3 3 0 0 0 1 -0.17578v0.17578h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2v3a1 1 0 0 1 -1 1v-4h-2z" fill="#69ec9e"/> -<path d="m6 9v-6h2v4a1 1 0 0 0 1 -1v-3h2v4a1 1 0 0 0 1 -1v-3h2v3a3 3 0 0 1 -3 3h-2v-0.1758a3 3 0 0 1 -1 0.1758z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2h-2zm12 0v2h2v8h-2v2h4v-12h-2z" fill="#e0e0e0"/><path d="m5 3a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v4h2a3 3 0 0 0 1-.17578v.17578h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1 -1 1v-4h-2v3a1 1 0 0 1 -1 1v-4h-2z" fill="#69ec9e"/><path d="m6 9v-6h2v4a1 1 0 0 0 1-1v-3h2v4a1 1 0 0 0 1-1v-3h2v3a3 3 0 0 1 -3 3h-2v-.1758a3 3 0 0 1 -1 .1758z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_color_array.svg b/editor/icons/icon_pool_color_array.svg index dcce58f9c6..7a312d0e91 100644 --- a/editor/icons/icon_pool_color_array.svg +++ b/editor/icons/icon_pool_color_array.svg @@ -1,8 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g> -<path d="m0 0v12h4v-2h-2v-8h2v-2h-4zm12 0v2h2v8h-2v2h4v-12h-4z" fill="#e0e0e0"/> -<path d="m6 3.5a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2z" fill="#ff7070"/> -<path d="m13 3.5a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1z" fill="#70bfff"/> -<path d="m7 1.5v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5z" fill="#7aff70"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m6 3.5a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2z" fill="#ff7070"/><path d="m13 3.5a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1z" fill="#70bfff"/><path d="m7 1.5v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-5z" fill="#7aff70"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_int_array.svg b/editor/icons/icon_pool_int_array.svg index d59f9e1531..a664b2d5fd 100644 --- a/editor/icons/icon_pool_int_array.svg +++ b/editor/icons/icon_pool_int_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/> -<path d="m3 2v2h2v-2zm2 2v2h-2v4h4v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3zm5 3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#7dc6ef"/> -<path d="m5 4v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m3 2v2h2v-2zm2 2v2h-2v4h4v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3zm5 3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2h-2z" fill="#7dc6ef"/><path d="m5 4v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_real_array.svg b/editor/icons/icon_pool_real_array.svg index 78a8064611..734f40cd05 100644 --- a/editor/icons/icon_pool_real_array.svg +++ b/editor/icons/icon_pool_real_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/> -<path d="m6 2a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1zm1 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5zm3 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2z" fill="#61daf4"/> -<path d="m7 2v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-5z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m6 2a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1-1zm1 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-5zm3 0v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2z" fill="#61daf4"/><path d="m7 2v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-5z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_string_array.svg b/editor/icons/icon_pool_string_array.svg index 401bfe6145..7e66f5f5e5 100644 --- a/editor/icons/icon_pool_string_array.svg +++ b/editor/icons/icon_pool_string_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/> -<path d="m7 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1h1v3a3 3 0 0 0 3 3h2v-3a1 1 0 0 1 1 -1v-2a3 3 0 0 0 -3 3v1a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2h-2z" fill="#6ba7ec"/> -<path d="m8 2v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m7 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3-3v-2a1 1 0 0 1 1-1h1v3a3 3 0 0 0 3 3h2v-3a1 1 0 0 1 1-1v-2a3 3 0 0 0 -3 3v1a1 1 0 0 1 -1-1v-1h1v-2h-1v-2h-2z" fill="#6ba7ec"/><path d="m8 2v5a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_vector2_array.svg b/editor/icons/icon_pool_vector2_array.svg index bb089a26ef..170512eb39 100644 --- a/editor/icons/icon_pool_vector2_array.svg +++ b/editor/icons/icon_pool_vector2_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/> -<path d="m9 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v2h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5zm-6 1v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4z" fill="#bd91f1"/> -<path d="m9 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.00195v2.0001h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5001z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m9 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.0019531v2h5v-2h-3a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -2.5977-1.5zm-6 1v6h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1 -1 1v-4z" fill="#bd91f1"/><path d="m9 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.00195v2.0001h5v-2h-3a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -2.5977-1.5001z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_pool_vector3_array.svg b/editor/icons/icon_pool_vector3_array.svg index 4f69183e30..cd3578182f 100644 --- a/editor/icons/icon_pool_vector3_array.svg +++ b/editor/icons/icon_pool_vector3_array.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/> -<path d="m8 1v2h2c0 0.55228-0.44772 1-1 1v2c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1h-1v2h1c1.0716-1.501e-4 2.0618-0.57193 2.5977-1.5 0.5359-0.9282 0.5359-2.0718 0-3-0.10406-0.1795-0.22646-0.34772-0.36523-0.50195 0.13856-0.15301 0.26095-0.31991 0.36523-0.49805 0.26209-0.45639 0.3995-0.97371 0.39844-1.5h0.003906v-2zm0 2h-2v3c-9.6e-6 0.55228-0.44772 0.99999-1 1v-4h-2v6h2c1.6569 0 3-1.3431 3-3z" fill="#e286f0"/> -<path d="m8 1v2h2c0 0.55228-0.44772 1-1 1v2c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1h-1v2h1c1.0716-1.501e-4 2.0618-0.57193 2.5977-1.5 0.5359-0.9282 0.5359-2.0718 0-3-0.10406-0.1795-0.22646-0.34772-0.36523-0.50195 0.13856-0.15301 0.26095-0.31991 0.36523-0.49805 0.26209-0.45639 0.3995-0.97371 0.39844-1.5h0.003906v-2z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 0v12h4v-2h-2v-8h2v-2zm12 0v2h2v8h-2v2h4v-12z" fill="#e0e0e0"/><path d="m8 1v2h2c0 .55228-.44772 1-1 1v2c.55228 0 1 .44772 1 1s-.44772 1-1 1h-1v2h1c1.0716-.0001501 2.0618-.57193 2.5977-1.5.5359-.9282.5359-2.0718 0-3-.10406-.1795-.22646-.34772-.36523-.50195.13856-.15301.26095-.31991.36523-.49805.26209-.45639.3995-.97371.39844-1.5h.003906v-2zm0 2h-2v3c-.0000096.55228-.44772.99999-1 1v-4h-2v6h2c1.6569 0 3-1.3431 3-3z" fill="#e286f0"/><path d="m8 1v2h2c0 .55228-.44772 1-1 1v2c.55228 0 1 .44772 1 1s-.44772 1-1 1h-1v2h1c1.0716-.0001501 2.0618-.57193 2.5977-1.5.5359-.9282.5359-2.0718 0-3-.10406-.1795-.22646-.34772-.36523-.50195.13856-.15301.26095-.31991.36523-.49805.26209-.45639.3995-.97371.39844-1.5h.003906v-2z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_popup.svg b/editor/icons/icon_popup.svg index bcd77b21a1..93f7e5000d 100644 --- a/editor/icons/icon_popup.svg +++ b/editor/icons/icon_popup.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm4 2h2v6h-2v-6zm0 8h2v2h-2v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm4 2h2v6h-2zm0 8h2v2h-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_popup_dialog.svg b/editor/icons/icon_popup_dialog.svg index 6fed66e8e4..d871e56a63 100644 --- a/editor/icons/icon_popup_dialog.svg +++ b/editor/icons/icon_popup_dialog.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2h-10zm9 1h1v1h-1v-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8h-14zm6 1h2v5h-2v-5zm0 6h2v2h-2v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8zm6 1h2v5h-2zm0 6h2v2h-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_popup_menu.svg b/editor/icons/icon_popup_menu.svg index 9181cb42a3..dd7b2bb0fd 100644 --- a/editor/icons/icon_popup_menu.svg +++ b/editor/icons/icon_popup_menu.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2zm0 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1 -1v-7a1 1 0 0 0 -1 -1h-12zm1 2h10v2h-10v-2zm0 3h10v2h-10v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-7a1 1 0 0 0 -1-1zm1 2h10v2h-10zm0 3h10v2h-10z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_popup_panel.svg b/editor/icons/icon_popup_panel.svg index 302b12670c..47a5448f5b 100644 --- a/editor/icons/icon_popup_panel.svg +++ b/editor/icons/icon_popup_panel.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v4h6v-4h-6zm1 1h4l-2 2-2-2zm0 4c-0.55228 0-1 0.44772-1 1v7c0 0.55228 0.44772 1 1 1h12c0.55228 0 1-0.44772 1-1v-7c0-0.55228-0.44772-1-1-1h-12z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h6v-4zm1 1h4l-2 2zm0 4c-.55228 0-1 .44772-1 1v7c0 .55228.44772 1 1 1h12c.55228 0 1-.44772 1-1v-7c0-.55228-.44772-1-1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_portal.svg b/editor/icons/icon_portal.svg index 7fc35ee298..99d626e2f4 100644 --- a/editor/icons/icon_portal.svg +++ b/editor/icons/icon_portal.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a5 7 0 0 0 -5 7 5 7 0 0 0 5 7 5 7 0 0 0 5 -7 5 7 0 0 0 -5 -7zm0 2a3 5 0 0 1 3 5 3 5 0 0 1 -3 5 3 5 0 0 1 -3 -5 3 5 0 0 1 3 -5z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a5 7 0 0 0 -5 7 5 7 0 0 0 5 7 5 7 0 0 0 5-7 5 7 0 0 0 -5-7zm0 2a3 5 0 0 1 3 5 3 5 0 0 1 -3 5 3 5 0 0 1 -3-5 3 5 0 0 1 3-5z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_position_2d.svg b/editor/icons/icon_position_2d.svg index c04484d27b..22d4ab05ca 100644 --- a/editor/icons/icon_position_2d.svg +++ b/editor/icons/icon_position_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v4h2v-4h-2zm-6 6v2h4v-2h-4zm10 0v2h4v-2h-4zm-4 4v4h2v-4h-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_position_3d.svg b/editor/icons/icon_position_3d.svg index b52657fc49..0401942d69 100644 --- a/editor/icons/icon_position_3d.svg +++ b/editor/icons/icon_position_3d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v4h2v-4h-2zm-6 6v2h4v-2h-4zm10 0v2h4v-2h-4zm-4 4v4h2v-4h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v4h2v-4zm-6 6v2h4v-2zm10 0v2h4v-2zm-4 4v4h2v-4z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_prism_mesh.svg b/editor/icons/icon_prism_mesh.svg index 8f8feb2eb6..c391652add 100644 --- a/editor/icons/icon_prism_mesh.svg +++ b/editor/icons/icon_prism_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m7.9824 1.002a1.0001 1.0001 0 0 0 -0.81445 0.44336l-5.9727 8.9609-0.027344 0.03906a1 1 0 0 0 -0.0625 0.10742 1 1 0 0 0 0.44727 1.3418l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1 1 0 0 0 0.44726 -1.3418 1 1 0 0 0 -0.0625 -0.10742l-6-9a1.0001 1.0001 0 0 0 -0.84961 -0.44336zm-0.98242 4.3008v7.0801l-3.5391-1.7715zm2 0 3.5391 5.3086l-3.5391 1.7715z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#ffd684" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9824 1.002a1.0001 1.0001 0 0 0 -.81445.44336l-5.9727 8.9609-.027344.03906a1 1 0 0 0 -.0625.10742 1 1 0 0 0 .44727 1.3418l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1 1 0 0 0 .44726-1.3418 1 1 0 0 0 -.0625-.10742l-6-9a1.0001 1.0001 0 0 0 -.84961-.44336zm-.98242 4.3008v7.0801l-3.5391-1.7715zm2 0 3.5391 5.3086-3.5391 1.7715z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_procedural_sky.svg b/editor/icons/icon_procedural_sky.svg index 47c933c202..356a966fe9 100644 --- a/editor/icons/icon_procedural_sky.svg +++ b/editor/icons/icon_procedural_sky.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> -<defs> -<linearGradient id="a" x1="8" x2="8" y1="1040.4" y2="1050.4" gradientUnits="userSpaceOnUse"> -<stop stop-color="#1ec3ff" offset="0"/> -<stop stop-color="#b2e1ff" offset="1"/> -</linearGradient> -</defs> -<g transform="translate(0 -1037.4)"> -<path d="m8 1040.4a7 7 0 0 0 -7 7 7 7 0 0 0 0.68555 3h12.631a7 7 0 0 0 0.68359 -3 7 7 0 0 0 -7 -7z" fill="url(#a)"/> -<path transform="translate(0 1037.4)" d="m10 7c-0.554 0-1 0.446-1 1h-1c-0.554 0-1 0.446-1 1s0.446 1 1 1h2c0.554 0 1-0.446 1-1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-2zm-7 3c-0.554 0-1 0.446-1 1s0.446 1 1 1h1c0.554 0 1-0.446 1-1s-0.446-1-1-1h-1z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="8" x2="8" y1="1040.4" y2="1050.4"><stop offset="0" stop-color="#1ec3ff"/><stop offset="1" stop-color="#b2e1ff"/></linearGradient><g transform="translate(0 -1037.4)"><path d="m8 1040.4a7 7 0 0 0 -7 7 7 7 0 0 0 .68555 3h12.631a7 7 0 0 0 .68359-3 7 7 0 0 0 -7-7z" fill="url(#a)"/><path d="m10 7c-.554 0-1 .446-1 1h-1c-.554 0-1 .446-1 1s.446 1 1 1h2c.554 0 1-.446 1-1h1c.554 0 1-.446 1-1s-.446-1-1-1zm-7 3c-.554 0-1 .446-1 1s.446 1 1 1h1c.554 0 1-.446 1-1s-.446-1-1-1z" fill="#fff" transform="translate(0 1037.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_1.svg b/editor/icons/icon_progress_1.svg index b793b88b45..01c2f8f334 100644 --- a/editor/icons/icon_progress_1.svg +++ b/editor/icons/icon_progress_1.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273 0.4258l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223z" fill-opacity=".99608"/> -<path transform="translate(0 1036.4)" d="m7 1.0801a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1037.4v3.0547a4 4 0 0 1 1.0273.4258l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223z" fill-opacity=".99608"/><path d="m7 1.0801a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_2.svg b/editor/icons/icon_progress_2.svg index 26595912e1..a18ceb0381 100644 --- a/editor/icons/icon_progress_2.svg +++ b/editor/icons/icon_progress_2.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm-1.3203 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm-1.3203 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m13.6 1040.2-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_3.svg b/editor/icons/icon_progress_3.svg index c618848106..55b01dad83 100644 --- a/editor/icons/icon_progress_3.svg +++ b/editor/icons/icon_progress_3.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm4.8926 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m11.867 1045.4a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm4.8926 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m11.867 1045.4a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_4.svg b/editor/icons/icon_progress_4.svg index fa71f5e484..a038bbec70 100644 --- a/editor/icons/icon_progress_4.svg +++ b/editor/icons/icon_progress_4.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578z" fill-opacity=".19608"/> -<path d="m10.027 1047.8a4 4 0 0 1 -1.0273 0.4277v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m10.027 1047.8a4 4 0 0 1 -1.0273.4277v3.0508a7 7 0 0 0 3.1855-1.3203z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_5.svg b/editor/icons/icon_progress_5.svg index 90151fb9c9..64144978af 100644 --- a/editor/icons/icon_progress_5.svg +++ b/editor/icons/icon_progress_5.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-1.8398 2.4414a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.4258z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-1.8398 2.4414a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m5.9727 1047.8-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.4258z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_6.svg b/editor/icons/icon_progress_6.svg index c1c43929ef..83b1806263 100644 --- a/editor/icons/icon_progress_6.svg +++ b/editor/icons/icon_progress_6.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-1.7324 5.1855a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm-4.5996 2.7344a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-1.7324 5.1855a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m1.0801 1045.4a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_7.svg b/editor/icons/icon_progress_7.svg index 718cb799f8..77d4321a14 100644 --- a/editor/icons/icon_progress_7.svg +++ b/editor/icons/icon_progress_7.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-2 0.0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.42773v-3.0508zm6.5996 2.7344l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-2 .0019531a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.42773v-3.0508zm6.5996 2.7344-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m2.4004 1040.2a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_8.svg b/editor/icons/icon_progress_8.svg index b6033cc527..ee76ba4499 100644 --- a/editor/icons/icon_progress_8.svg +++ b/editor/icons/icon_progress_8.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<path transform="translate(0 1036.4)" d="m9 1.0781v3.0547a4 4 0 0 1 1.0273 0.42578l2.1582-2.1582a7 7 0 0 0 -3.1855 -1.3223zm-6.5996 2.7363a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 0.42578 -1.0273l-2.1582-2.1582zm11.199 0l-2.1582 2.1582a4 4 0 0 1 0.42774 1.0273h3.0508a7 7 0 0 0 -1.3203 -3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -0.42773 -1.0273h-3.0508zm10.787 0a4 4 0 0 1 -0.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223 -3.1855h-3.0547zm-5.8945 2.4414l-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273 -0.42578zm4.0547 0a4 4 0 0 1 -1.0273 0.42774v3.0508a7 7 0 0 0 3.1855 -1.3203l-2.1582-2.1582z" fill-opacity=".19608"/> -<path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273 -0.4277v-3.0508z" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m9 1.0781v3.0547a4 4 0 0 1 1.0273.42578l2.1582-2.1582a7 7 0 0 0 -3.1855-1.3223zm-6.5996 2.7363a7 7 0 0 0 -1.3223 3.1855h3.0547a4 4 0 0 1 .42578-1.0273l-2.1582-2.1582zm11.199 0-2.1582 2.1582a4 4 0 0 1 .42774 1.0273h3.0508a7 7 0 0 0 -1.3203-3.1855zm-12.52 5.1855a7 7 0 0 0 1.3203 3.1855l2.1582-2.1582a4 4 0 0 1 -.42773-1.0273h-3.0508zm10.787 0a4 4 0 0 1 -.42578 1.0273l2.1582 2.1582a7 7 0 0 0 1.3223-3.1855h-3.0547zm-5.8945 2.4414-2.1582 2.1582a7 7 0 0 0 3.1855 1.3223v-3.0547a4 4 0 0 1 -1.0273-.42578zm4.0547 0a4 4 0 0 1 -1.0273.42774v3.0508a7 7 0 0 0 3.1855-1.3203l-2.1582-2.1582z" fill-opacity=".19608" transform="translate(0 1036.4)"/><path d="m7 1037.4a7 7 0 0 0 -3.1855 1.3203l2.1582 2.1582a4 4 0 0 1 1.0273-.4277z" fill-opacity=".99608"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_progress_bar.svg b/editor/icons/icon_progress_bar.svg index e8fe90bca2..70f99e3bbb 100644 --- a/editor/icons/icon_progress_bar.svg +++ b/editor/icons/icon_progress_bar.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2h-10zm0 2h10v6h-10v-6zm1 1v4h1v-4h-1zm2 0v4h1v-4h-1zm2 0v4h1v-4h-1z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3c-1.1046 0-2 .89543-2 2v6c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-6c0-1.1046-.89543-2-2-2zm0 2h10v6h-10zm1 1v4h1v-4zm2 0v4h1v-4zm2 0v4h1v-4z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_proximity_group.svg b/editor/icons/icon_proximity_group.svg index 4f977ca548..7df1cc9093 100644 --- a/editor/icons/icon_proximity_group.svg +++ b/editor/icons/icon_proximity_group.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h14v-14zm2 2h10v10h-10zm7.5 1c-0.82843 4.8e-6 -1.5 0.67157-1.5 1.5 4.8e-6 0.82843 0.67157 1.5 1.5 1.5 0.82842-4.8e-6 1.5-0.67157 1.5-1.5-5e-6 -0.82843-0.67158-1.5-1.5-1.5zm-5 5c-0.82843-4.8e-6 -1.5 0.67157-1.5 1.5-4.8e-6 0.82843 0.67157 1.5 1.5 1.5 0.82843 5e-6 1.5-0.67157 1.5-1.5 4.8e-6 -0.82843-0.67157-1.5-1.5-1.5zm5 0c-0.82843 4.8e-6 -1.5 0.67157-1.5 1.5 4.8e-6 0.82842 0.67157 1.5 1.5 1.5 0.82842-5e-6 1.5-0.67158 1.5-1.5-5e-6 -0.82843-0.67158-1.5-1.5-1.5z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h14v-14zm2 2h10v10h-10zm7.5 1c-.82843.0000048-1.5.67157-1.5 1.5.0000048.82843.67157 1.5 1.5 1.5.82842-.0000048 1.5-.67157 1.5-1.5-.000005-.82843-.67158-1.5-1.5-1.5zm-5 5c-.82843-.0000048-1.5.67157-1.5 1.5-.0000048.82843.67157 1.5 1.5 1.5.82843.000005 1.5-.67157 1.5-1.5.0000048-.82843-.67157-1.5-1.5-1.5zm5 0c-.82843.0000048-1.5.67157-1.5 1.5.0000048.82842.67157 1.5 1.5 1.5.82842-.000005 1.5-.67158 1.5-1.5-.000005-.82843-.67158-1.5-1.5-1.5z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_proxy_texture.svg b/editor/icons/icon_proxy_texture.svg index 15ed5e7f2b..0c19363cb4 100644 --- a/editor/icons/icon_proxy_texture.svg +++ b/editor/icons/icon_proxy_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v4h4v-4h-4zm6 0v2h6v8h-6v4h7a1 1 0 0 0 1 -1v-12a1 1 0 0 0 -1 -1h-7zm2 4v1h-1v1h-1v3h1 2 2v-2h-1v-2h-1v-1h-1zm-8 1v4h4v-4h-4zm0 5v4h4v-4h-4z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v4h4v-4zm6 0v2h6v8h-6v4h7a1 1 0 0 0 1-1v-12a1 1 0 0 0 -1-1zm2 4v1h-1v1h-1v3h1 2 2v-2h-1v-2h-1v-1zm-8 1v4h4v-4zm0 5v4h4v-4z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_quad.svg b/editor/icons/icon_quad.svg index 72a97c2cf3..4657e0b0bd 100644 --- a/editor/icons/icon_quad.svg +++ b/editor/icons/icon_quad.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2 10 2h2 12v-2-12h-12-2zm3.4141 2h8.5859v8.5859l-8.5859-8.5859zm-1.4141 1.4141l8.5859 8.5859h-8.5859v-8.5859z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2 10 2h2 12v-2-12h-12zm3.4141 2h8.5859v8.5859zm-1.4141 1.4141 8.5859 8.5859h-8.5859z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_quad_mesh.svg b/editor/icons/icon_quad_mesh.svg index 40a07b36f7..de0bd3e127 100644 --- a/editor/icons/icon_quad_mesh.svg +++ b/editor/icons/icon_quad_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m15 1v14h-14v-14zm-2 2h-8.5859l8.5859 8.5859zm-10 1.4141v8.5859h8.5859z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m15 1v14h-14v-14zm-2 2h-8.5859l8.5859 8.5859zm-10 1.4141v8.5859h8.5859z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_quat.svg b/editor/icons/icon_quat.svg index 07433920a1..8702a3041a 100644 --- a/editor/icons/icon_quat.svg +++ b/editor/icons/icon_quat.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 3a3 3 0 0 0 -3 3 3 3 0 0 0 3 3v2h2v-2.7695a3 3 0 0 0 2 0.76953h2v-6h-2v4a1 1 0 0 1 -1 -1v-3h-2zm0 2v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ec69a3"/> -<path d="m4 3v3a3 3 0 0 0 3 3h2v-6h-2v4a1 1 0 0 1 -1 -1v-3z" fill="#fff" fill-opacity=".39216"/> -<path d="m13 1v2h-2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2zm-2 4v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#ec69a3"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3a3 3 0 0 0 -3 3 3 3 0 0 0 3 3v2h2v-2.7695a3 3 0 0 0 2 .76953h2v-6h-2v4a1 1 0 0 1 -1-1v-3h-2zm0 2v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#ec69a3"/><path d="m4 3v3a3 3 0 0 0 3 3h2v-6h-2v4a1 1 0 0 1 -1-1v-3z" fill="#fff" fill-opacity=".39216"/><path d="m13 1v2h-2a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-3a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2zm-2 4v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#ec69a3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_r_i_d.svg b/editor/icons/icon_r_i_d.svg index f1709a5acc..a6ace54d12 100644 --- a/editor/icons/icon_r_i_d.svg +++ b/editor/icons/icon_r_i_d.svg @@ -1,5 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1040.4)"> -<path transform="translate(0 1040.4)" d="m7 2v2h2v-2h-2zm7 0v2h-1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1 2v-8h-2zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2h-1zm3 2v4h2v-4h-2zm6 0h1v2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#69ec9a"/> -</g> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 2v2h2v-2zm7 0v2h-1a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1 2v-8zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2zm3 2v4h2v-4zm6 0h1v2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#69ec9a"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ray_cast.svg b/editor/icons/icon_ray_cast.svg index 97901fb010..e782b27e9f 100644 --- a/editor/icons/icon_ray_cast.svg +++ b/editor/icons/icon_ray_cast.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v9h-3l4 5 4-5h-3v-9h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v9h-3l4 5 4-5h-3v-9z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ray_cast_2d.svg b/editor/icons/icon_ray_cast_2d.svg index 1451a73310..02faaa51c9 100644 --- a/editor/icons/icon_ray_cast_2d.svg +++ b/editor/icons/icon_ray_cast_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v9h-3l4 5 4-5h-3v-9h-2z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v9h-3l4 5 4-5h-3v-9z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ray_shape.svg b/editor/icons/icon_ray_shape.svg index 48c53eae70..37c2206740 100644 --- a/editor/icons/icon_ray_shape.svg +++ b/editor/icons/icon_ray_shape.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill-rule="evenodd"> -<path transform="translate(0 1036.4)" d="m8 1l-6 5 4 2.666v4.334l2 2v-5-2-7z" fill="#a2d2ff"/> -<path transform="translate(0 1036.4)" d="m8 1v7 2l-2-1.334v1.334l2 1.5v3.5l2-2v-4.334l4-2.666-6-5z" fill="#2998ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m8 1-6 5 4 2.666v4.334l2 2v-5-2z" fill="#a2d2ff"/><path d="m8 1v7 2l-2-1.334v1.334l2 1.5v3.5l2-2v-4.334l4-2.666z" fill="#2998ff"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ray_shape_2d.svg b/editor/icons/icon_ray_shape_2d.svg index 318d92e4ea..109c254fc3 100644 --- a/editor/icons/icon_ray_shape_2d.svg +++ b/editor/icons/icon_ray_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a1 1 0 0 0 -1 1v9.5859l-1.293-1.293a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 0.0039062 0.003907 1 1 0 0 0 0.050781 0.044921 1.0001 1.0001 0 0 0 0.03125 0.027344 1 1 0 0 0 0.048828 0.035156 1.0001 1.0001 0 0 0 0.023438 0.015625 1 1 0 0 0 0.076172 0.044922 1.0001 1.0001 0 0 0 0.0058593 0.003906 1 1 0 0 0 0.013672 0.007813 1.0001 1.0001 0 0 0 0.078125 0.035156 1 1 0 0 0 0.074219 0.025391 1.0001 1.0001 0 0 0 0.025391 0.009766 1 1 0 0 0 0.039062 0.009765 1.0001 1.0001 0 0 0 0.068359 0.013672 1.0001 1.0001 0 0 0 0.097656 0.011719 1.0001 1.0001 0 0 0 0.0078125 0 1 1 0 0 0 0.0625 0.003906 1 1 0 0 0 0.015625 -0.001953 1.0001 1.0001 0 0 0 0.083984 -0.003906 1 1 0 0 0 0.015625 -0.001953 1.0001 1.0001 0 0 0 0.083984 -0.013672 1.0001 1.0001 0 0 0 0.052734 -0.013672 1 1 0 0 0 0.058594 -0.015625 1.0001 1.0001 0 0 0 0.078125 -0.029297 1 1 0 0 0 0.013672 -0.00586 1.0001 1.0001 0 0 0 0.076172 -0.037109 1 1 0 0 0 0.013672 -0.007812 1.0001 1.0001 0 0 0 0.072266 -0.044922 1 1 0 0 0 0.011719 -0.007813 1.0001 1.0001 0 0 0 0.068359 -0.052734 1 1 0 0 0 0.011719 -0.009766 1.0001 1.0001 0 0 0 0.050781 -0.046875l0.0097657-0.011719 2.9902-2.9883a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -1.4141 0l-1.293 1.293v-9.5859a1 1 0 0 0 -1 -1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#68b6ff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a1 1 0 0 0 -1 1v9.5859l-1.293-1.293a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l3 3a1.0001 1.0001 0 0 0 .0039062.003907 1 1 0 0 0 .050781.044921 1.0001 1.0001 0 0 0 .03125.027344 1 1 0 0 0 .048828.035156 1.0001 1.0001 0 0 0 .023438.015625 1 1 0 0 0 .076172.044922 1.0001 1.0001 0 0 0 .0058593.003906 1 1 0 0 0 .013672.007813 1.0001 1.0001 0 0 0 .078125.035156 1 1 0 0 0 .074219.025391 1.0001 1.0001 0 0 0 .025391.009766 1 1 0 0 0 .039062.009765 1.0001 1.0001 0 0 0 .068359.013672 1.0001 1.0001 0 0 0 .097656.011719 1.0001 1.0001 0 0 0 .0078125 0 1 1 0 0 0 .0625.003906 1 1 0 0 0 .015625-.001953 1.0001 1.0001 0 0 0 .083984-.003906 1 1 0 0 0 .015625-.001953 1.0001 1.0001 0 0 0 .083984-.013672 1.0001 1.0001 0 0 0 .052734-.013672 1 1 0 0 0 .058594-.015625 1.0001 1.0001 0 0 0 .078125-.029297 1 1 0 0 0 .013672-.00586 1.0001 1.0001 0 0 0 .076172-.037109 1 1 0 0 0 .013672-.007812 1.0001 1.0001 0 0 0 .072266-.044922 1 1 0 0 0 .011719-.007813 1.0001 1.0001 0 0 0 .068359-.052734 1 1 0 0 0 .011719-.009766 1.0001 1.0001 0 0 0 .050781-.046875l.0097657-.011719 2.9902-2.9883a1 1 0 0 0 0-1.4141 1 1 0 0 0 -1.4141 0l-1.293 1.293v-9.5859a1 1 0 0 0 -1-1z" fill="#68b6ff" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rayito.svg b/editor/icons/icon_rayito.svg index 937a5cc4d7..4fd6a2827b 100644 --- a/editor/icons/icon_rayito.svg +++ b/editor/icons/icon_rayito.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1l-1 7h2.875l-0.875 7 9-8h-3.8574l0.85742-6h-7z" fill="#ffd684"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-1 7h2.875l-.875 7 9-8h-3.8574l.85742-6h-7z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rect2.svg b/editor/icons/icon_rect2.svg index 05d1022e5b..25feb52cab 100644 --- a/editor/icons/icon_rect2.svg +++ b/editor/icons/icon_rect2.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m13 2v2h-1a3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5 -1.3457 3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1h3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v1a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1 -1v-1h1v-2h-1v-2zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2z" fill="#f191a5"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13 2v2h-1a3 3 0 0 0 -2.5 1.3457 3 3 0 0 0 -2.5-1.3457 3 3 0 0 0 -3 3 3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1h3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v1a3 3 0 0 0 3 3v-2a1 1 0 0 1 -1-1v-1h1v-2h-1v-2zm-10 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2z" fill="#f191a5"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rectangle_shape_2d.svg b/editor/icons/icon_rectangle_shape_2d.svg index d5cf89f5dc..437547ece3 100644 --- a/editor/icons/icon_rectangle_shape_2d.svg +++ b/editor/icons/icon_rectangle_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="2" y="1040.4" width="12" height="8" rx="1.7383e-5" ry="1.7383e-5" color="#000000" fill="none" stroke="#68b6ff" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><rect fill="none" height="8" rx=".000017" stroke="#68b6ff" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" width="12" x="2" y="4"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reference_rect.svg b/editor/icons/icon_reference_rect.svg index 7a89e62e4e..2fd530d584 100644 --- a/editor/icons/icon_reference_rect.svg +++ b/editor/icons/icon_reference_rect.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h2v-2h-2zm3 0v2h8v-2h-8zm9 0v2h2v-2h-2zm-12 3v8h2v-8h-2zm12 0v8h2v-8h-2zm-12 9v2h2v-2h-2zm3 0v2h8v-2h-8zm9 0v2h2v-2h-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2zm-12 3v8h2v-8zm12 0v8h2v-8zm-12 9v2h2v-2zm3 0v2h8v-2zm9 0v2h2v-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reflection_probe.svg b/editor/icons/icon_reflection_probe.svg index e0f1572317..6bf9cc9013 100644 --- a/editor/icons/icon_reflection_probe.svg +++ b/editor/icons/icon_reflection_probe.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m10 2a1.0001 1.0001 0 1 0 0 2h1.5859l-4.5195 4.5195-4.2988-5.1582-1.5352 1.2793 5 6a1.0001 1.0001 0 0 0 1.4746 0.064453l5.293-5.293v1.5879a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 0 0 -1 -1h-4zm-9 7v5a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1 -1v-4h-2v3h-10v-4h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fc9c9c" fill-opacity=".99608" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10 2a1.0001 1.0001 0 1 0 0 2h1.5859l-4.5195 4.5195-4.2988-5.1582-1.5352 1.2793 5 6a1.0001 1.0001 0 0 0 1.4746.064453l5.293-5.293v1.5879a1.0001 1.0001 0 1 0 2 0v-4a1.0001 1.0001 0 0 0 -1-1h-4zm-9 7v5a1.0001 1.0001 0 0 0 1 1h12a1.0001 1.0001 0 0 0 1-1v-4h-2v3h-10v-4z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_region_edit.svg b/editor/icons/icon_region_edit.svg index c6ceef878c..8443c0e454 100644 --- a/editor/icons/icon_region_edit.svg +++ b/editor/icons/icon_region_edit.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0"> -<rect x="6" y="1042.4" width="6" height="6"/> -<path transform="translate(0 1036.4)" d="m1 1v4h4v-4h-4zm5 0v4h6v-4h-6zm7 0v4h2v-4h-2zm-12 5v6h4v-6h-4zm12 0v6h2v-6h-2zm-12 7v2h4v-2h-4zm5 0v2h6v-2h-6zm7 0v2h2v-2h-2z" fill-opacity=".32549"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(0 -1036.4)"><path d="m6 1042.4h6v6h-6z"/><path d="m1 1v4h4v-4zm5 0v4h6v-4zm7 0v4h2v-4zm-12 5v6h4v-6zm12 0v6h2v-6zm-12 7v2h4v-2zm5 0v2h6v-2zm7 0v2h2v-2z" fill-opacity=".32549" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reload.svg b/editor/icons/icon_reload.svg index ae0cf02170..223a725332 100644 --- a/editor/icons/icon_reload.svg +++ b/editor/icons/icon_reload.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4 -4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6z"/> -<path transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)" d="m4.118 1048.3-1.6771-0.9683-1.6771-0.9682 1.6771-0.9683 1.6771-0.9682-1e-7 1.9365z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reload_small.svg b/editor/icons/icon_reload_small.svg index 270c045964..ce707b645a 100644 --- a/editor/icons/icon_reload_small.svg +++ b/editor/icons/icon_reload_small.svg @@ -1,6 +1 @@ -<svg width="14" height="14" version="1.1" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1038.4)" fill="#e0e0e0" fill-opacity=".99608"> -<path d="m8 1039.4a6 6 0 0 0 -6 6h2a4 4 0 0 1 4 -4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6z"/> -<path transform="matrix(0 -1.1926 1.5492 0 -1618 1050.3)" d="m4.118 1048.3-1.6771-0.9683-1.6771-0.9682 1.6771-0.9683 1.6771-0.9682-1e-7 1.9365z"/> -</g> -</svg> +<svg height="14" viewBox="0 0 14 14" width="14" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1038.4)"><path d="m8 1039.4a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1618 1050.3)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_remote_transform.svg b/editor/icons/icon_remote_transform.svg index ab79ae2bb6..2bdf8cd858 100644 --- a/editor/icons/icon_remote_transform.svg +++ b/editor/icons/icon_remote_transform.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#fc9c9c"> -<path transform="translate(0 1036.4)" d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 0.36523 1.3672 1 1 0 0 0 1.3672 -0.36719c1.0726-1.8578 3.0501-3 5.1953-3 2.1452 0 4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672 0.36719 1 1 0 0 0 0.36523 -1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 0.70703 1.2246 1 1 0 0 0 1.2246 -0.70703c0.23553-0.8791 1.0216-1.4824 1.9316-1.4824s1.6961 0.60332 1.9316 1.4824a1 1 0 0 0 1.2246 0.70703 1 1 0 0 0 0.70703 -1.2246c-0.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-0.554 0-1 0.446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2 -3.4648h-3v-1c0-0.554-0.446-1-1-1z"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 .36523 1.3672 1 1 0 0 0 1.3672-.36719c1.0726-1.8578 3.0501-3 5.1953-3s4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672.36719 1 1 0 0 0 .36523-1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 .70703 1.2246 1 1 0 0 0 1.2246-.70703c.23553-.8791 1.0216-1.4824 1.9316-1.4824s1.6961.60332 1.9316 1.4824a1 1 0 0 0 1.2246.70703 1 1 0 0 0 .70703-1.2246c-.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-.554 0-1 .446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2-3.4648h-3v-1c0-.554-.446-1-1-1z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_remote_transform_2d.svg b/editor/icons/icon_remote_transform_2d.svg index 76b1d53cc7..51c9e084df 100644 --- a/editor/icons/icon_remote_transform_2d.svg +++ b/editor/icons/icon_remote_transform_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 0.36523 1.3672 1 1 0 0 0 1.3672 -0.36719c1.0726-1.8578 3.0501-3 5.1953-3 2.1452 0 4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672 0.36719 1 1 0 0 0 0.36523 -1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 0.70703 1.2246 1 1 0 0 0 1.2246 -0.70703c0.23553-0.8791 1.0216-1.4824 1.9316-1.4824s1.6961 0.60332 1.9316 1.4824a1 1 0 0 0 1.2246 0.70703 1 1 0 0 0 0.70703 -1.2246c-0.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-0.554 0-1 0.446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2 -3.4648h-3v-1c0-0.554-0.446-1-1-1z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-2.8565 0-5.4995 1.5262-6.9277 4a1 1 0 0 0 .36523 1.3672 1 1 0 0 0 1.3672-.36719c1.0726-1.8578 3.0501-3 5.1953-3s4.1227 1.1422 5.1953 3a1 1 0 0 0 1.3672.36719 1 1 0 0 0 .36523-1.3672c-1.4283-2.4738-4.0712-4-6.9277-4zm0 4c-1.8056 0-3.396 1.2207-3.8633 2.9648a1 1 0 0 0 .70703 1.2246 1 1 0 0 0 1.2246-.70703c.23553-.8791 1.0216-1.4824 1.9316-1.4824s1.6961.60332 1.9316 1.4824a1 1 0 0 0 1.2246.70703 1 1 0 0 0 .70703-1.2246c-.46732-1.7441-2.0577-2.9648-3.8633-2.9648zm0 4c-.554 0-1 .446-1 1v1h-3a4 4 0 0 0 2 3.4648 4 4 0 0 0 4 0 4 4 0 0 0 2-3.4648h-3v-1c0-.554-.446-1-1-1z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_remove.svg b/editor/icons/icon_remove.svg index ee988ab719..9372eb08b5 100644 --- a/editor/icons/icon_remove.svg +++ b/editor/icons/icon_remove.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1v1h-4v2h14v-2h-4v-1h-6zm-3 4v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2v-8h-12zm1 2h2v6h-2v-6zm4 0h2v6h-2v-6zm4 0h2v6h-2v-6z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1v1h-4v2h14v-2h-4v-1zm-3 4v8a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2v-8zm1 2h2v6h-2zm4 0h2v6h-2zm4 0h2v6h-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_remove_internal.svg b/editor/icons/icon_remove_internal.svg index 392003e83b..0a7e06e6cd 100644 --- a/editor/icons/icon_remove_internal.svg +++ b/editor/icons/icon_remove_internal.svg @@ -1,67 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_remove_internal.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1111" - inkscape:window-height="646" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="9.4237288" - inkscape:cy="12.255032" - inkscape:window-x="649" - inkscape:window-y="95" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <circle - style="fill:#e0e0e0;fill-opacity:1" - id="path822" - cx="10.508475" - cy="12.677966" - r="2.3728814" /> - <g - transform="matrix(0.63442593,0,0,0.63442593,0.38221965,-656.59446)" - id="g896"> - <path - style="fill:#e0e0e0" - inkscape:connector-curvature="0" - transform="translate(0,1036.4)" - d="M 3.7578,2.3438 2.3437,3.7579 6.5859,8.0001 2.3437,12.2423 3.7578,13.6564 8,9.4142 12.2422,13.6564 13.6563,12.2423 9.4141,8.0001 13.6563,3.7579 12.2422,2.3438 8,6.586 Z" - id="path894" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><circle cx="10.508475" cy="12.677966" r="2.372881"/><path d="m3.7578 2.3438-1.4141 1.4141 4.2422 4.2422-4.2422 4.2422 1.4141 1.4141 4.2422-4.2422 4.2422 4.2422 1.4141-1.4141-4.2422-4.2422 4.2422-4.2422-1.4141-1.4141-4.2422 4.2422z" transform="matrix(.63442593 0 0 .63442593 .38222 .924574)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rename.svg b/editor/icons/icon_rename.svg index d733607033..01923e3a0a 100644 --- a/editor/icons/icon_rename.svg +++ b/editor/icons/icon_rename.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 2v2h2v8h-2v2h2c0.55228 0 1-0.4477 1-1 0 0.5523 0.44772 1 1 1h2v-2h-2v-8h2v-2h-2c-0.55228 0-1 0.44772-1 1 0-0.55228-0.44772-1-1-1h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 2v2h2v8h-2v2h2c.55228 0 1-.4477 1-1 0 .5523.44772 1 1 1h2v-2h-2v-8h2v-2h-2c-.55228 0-1 .44772-1 1 0-.55228-.44772-1-1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reparent.svg b/editor/icons/icon_reparent.svg index 6f4d2908e7..39b79cd3a1 100644 --- a/editor/icons/icon_reparent.svg +++ b/editor/icons/icon_reparent.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v5.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305 -1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -0.72852 -0.73047v-5.541a2 2 0 0 0 1 -1.7285 2 2 0 0 0 -2 -2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m9 1l-4 3 4 3v-2a3 3 0 0 1 3 3v2h2v-2a5 5 0 0 0 -5 -5v-2z" fill="#84ffb1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7305v5.541a2 2 0 0 0 -1 1.7285 2 2 0 0 0 2 2 2 2 0 0 0 1.7305-1h6.541a2 2 0 0 0 1.7285 1 2 2 0 0 0 2-2 2 2 0 0 0 -2-2 2 2 0 0 0 -1.7305 1h-6.541a2 2 0 0 0 -.72852-.73047v-5.541a2 2 0 0 0 1-1.7285 2 2 0 0 0 -2-2z" fill="#e0e0e0"/><path d="m9 1-4 3 4 3v-2a3 3 0 0 1 3 3v2h2v-2a5 5 0 0 0 -5-5z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_reparent_to_new_node.svg b/editor/icons/icon_reparent_to_new_node.svg index 29db56279c..37fbee848c 100644 --- a/editor/icons/icon_reparent_to_new_node.svg +++ b/editor/icons/icon_reparent_to_new_node.svg @@ -1,83 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_reparent_to_new_node.svg" - inkscape:version="0.92.1 r15371"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1023" - id="namedview10" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="2.2588225" - inkscape:cy="3.6882199" - inkscape:window-x="0" - inkscape:window-y="0" - inkscape:window-maximized="1" - inkscape:current-layer="g6" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <path - transform="translate(0,1036.4)" - d="m 1.4915254,13 c 0,1.104569 0.8954305,2 2,2 0.7139771,-5.54e-4 1.3735116,-0.381677 1.7305,-1 H 11.2715 c 0.356631,0.617705 1.015238,0.998733 1.7285,1 1.104569,0 2,-0.895431 2,-2 0,-1.104569 -0.895431,-2 -2,-2 -0.713977,5.54e-4 -1.373512,0.381677 -1.7305,1 H 5.2200254 c -0.1747809,-0.30301 -0.8483719,-1 -1.7285,-1 -0.9027301,0 -2,0.891221 -2,2 z" - id="path2" - inkscape:connector-curvature="0" - style="fill:#e0e0e0" - sodipodi:nodetypes="cccccsccccc" /> - <path - d="m 10.421845,1038.2814 -2.7947264,2.096 2.7947264,2.0961 v -1.3974 c 2.716918,0 2.180792,1.4469 2.180792,3.9265 V 1046.4 H 14 v -1.3974 c 0,-3.863 0.13086,-5.3239 -3.578155,-5.3239 z" - id="path4" - inkscape:connector-curvature="0" - style="fill:#84ffb1;stroke-width:0.69868171" - sodipodi:nodetypes="cccccccccc" /> - <g - transform="translate(-8.5,-8)" - id="g6-7"> - <path - style="fill:#84ffb1" - inkscape:connector-curvature="0" - transform="translate(0,1036.4)" - d="m 11,9 v 2 H 9 v 2 h 2 v 2 h 2 v -2 h 2 V 11 H 13 V 9 Z" - id="path4-5" /> - </g> - <path - d="m 4.5,1047.7968 v -3.1171 H 2.4999995 v 3.1171 z" - id="path2-3" - inkscape:connector-curvature="0" - style="fill:#e0e0e0;stroke-width:0.7178387" - sodipodi:nodetypes="ccccc" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m1.4915254 13c0 1.104569.8954305 2 2 2 .7139771-.000554 1.3735116-.381677 1.7305-1h6.0494746c.356631.617705 1.015238.998733 1.7285 1 1.104569 0 2-.895431 2-2s-.895431-2-2-2c-.713977.000554-1.373512.381677-1.7305 1h-6.0494746c-.1747809-.30301-.8483719-1-1.7285-1-.9027301 0-2 .891221-2 2z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m10.421845 1038.2814-2.7947264 2.096 2.7947264 2.0961v-1.3974c2.716918 0 2.180792 1.4469 2.180792 3.9265v1.3974h1.397363v-1.3974c0-3.863.13086-5.3239-3.578155-5.3239z" fill="#84ffb1" stroke-width=".698682"/><path d="m11 9v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#84ffb1" transform="translate(-8.5 1028.4)"/><path d="m4.5 1047.7968v-3.1171h-2.0000005v3.1171z" fill="#e0e0e0" stroke-width=".717839"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_resource_preloader.svg b/editor/icons/icon_resource_preloader.svg index 2d186e17da..417e63b604 100644 --- a/editor/icons/icon_resource_preloader.svg +++ b/editor/icons/icon_resource_preloader.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-1.3809 0.69141-3.7637-1.8828 1.3809-0.68945zm-5 3.5l4 2v3.7637l-4-2v-3.7637zm10 0v3.7637l-4 2v-3.7637l4-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9629 1.002a1.0001 1.0001 0 0 0 -.41016.10352l-6 3a1.0001 1.0001 0 0 0 -.55273.89453v6a1.0001 1.0001 0 0 0 .55273.89453l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1.0001 1.0001 0 0 0 .55273-.89453v-6a1.0001 1.0001 0 0 0 -.55273-.89453l-6-3a1.0001 1.0001 0 0 0 -.48438-.10352zm.037109 2.1172 3.7637 1.8809-1.3809.69141-3.7637-1.8828 1.3809-.68945zm-5 3.5 4 2v3.7637l-4-2zm10 0v3.7637l-4 2v-3.7637z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rich_text_effect.svg b/editor/icons/icon_rich_text_effect.svg new file mode 100644 index 0000000000..afe08685bd --- /dev/null +++ b/editor/icons/icon_rich_text_effect.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h7v-2zm9 0v2h5v-2zm-9 4v2h11v-2zm0 4v2h4v-2zm6 0v2h1c-.044949-.094701-.088906-.20229-.125-.3418-.077717-.30039-.10439-.81722.16406-1.293.081489-.1441.18202-.26127.28906-.36523zm-6 4v2h8.2812c-.066517-.011548-.1231-.014758-.20117-.037109-.30195-.08645-.76491-.33245-1.0352-.80664-.23366-.4121-.24101-.84933-.18945-1.1562z" fill="#e0e0e0"/><path d="m12.216 8.598a.53334 3.2001 0 0 0 -.50976 2.2754 3.2001.53334 30 0 0 -2.2656-.71484 3.2001.53334 30 0 0 1.75 1.6016.53334 3.2001 60 0 0 -1.7461 1.5996.53334 3.2001 60 0 0 2.2578-.71094.53334 3.2001 0 0 0 .51367 2.3496.53334 3.2001 0 0 0 .51367-2.3516 3.2001.53334 30 0 0 2.2539.71094 3.2001.53334 30 0 0 -1.7441-1.5977.53334 3.2001 60 0 0 1.748-1.5996.53334 3.2001 60 0 0 -2.2617.71484.53334 3.2001 0 0 0 -.50977-2.2773z" fill="#cea4f1" stroke-width="1.0667"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rich_text_label.svg b/editor/icons/icon_rich_text_label.svg index 3227547b41..3f4b33707c 100644 --- a/editor/icons/icon_rich_text_label.svg +++ b/editor/icons/icon_rich_text_label.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h8v-2h-8zm12 0l-3 3h2v8h-2l3 3 3-3h-2v-8h2l-3-3zm-12 4v2h2v-2h-2zm4 0v2h4v-2h-4zm-4 4v2h8v-2h-8zm0 4v2h4v-2h-4zm6 0v2h2v-2h-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h8v-2zm12 0-3 3h2v8h-2l3 3 3-3h-2v-8h2zm-12 4v2h2v-2zm4 0v2h4v-2zm-4 4v2h8v-2zm0 4v2h4v-2zm6 0v2h2v-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rigid_body.svg b/editor/icons/icon_rigid_body.svg index bb87d914b6..5d766f7c3d 100644 --- a/editor/icons/icon_rigid_body.svg +++ b/editor/icons/icon_rigid_body.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 0.035156 0.69922 7 7 0 0 0 0.27734 1.3691 7 7 0 0 0 0.91016 1.8848 7 7 0 0 0 0.30273 0.4082c7.85e-4 -0.00256 0.0011667-0.005252 0.0019532-0.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422 -0.80273c0.001374 3.93e-4 0.002531 0.00156 0.003906 0.001953a7 7 0 0 0 0.035156 -0.021485 7 7 0 0 0 0.42578 -0.25 7 7 0 0 0 0.16992 -0.10352 7 7 0 0 0 0.36914 -0.26953 7 7 0 0 0 0.20508 -0.15625 7 7 0 0 0 0.3418 -0.30859 7 7 0 0 0 0.16406 -0.1543 7 7 0 0 0 0.33008 -0.36133 7 7 0 0 0 0.14062 -0.16016 7 7 0 0 0 0.27734 -0.37305 7 7 0 0 0 0.13867 -0.19531 7 7 0 0 0 0.21875 -0.36133 7 7 0 0 0 0.14258 -0.25 7 7 0 0 0 0.15625 -0.33398 7 7 0 0 0 0.13867 -0.31055 7 7 0 0 0 0.10742 -0.30859 7 7 0 0 0 0.11914 -0.35352 7 7 0 0 0 0.087891 -0.36914 7 7 0 0 0 0.066406 -0.29297 7 7 0 0 0 0.056641 -0.40039 7 7 0 0 0 0.037109 -0.3125 7 7 0 0 0 0.025391 -0.55273 7 7 0 0 0 -4.3848 -6.4883 7 7 0 0 0 -0.007812 -0.0039063 7 7 0 0 0 -0.001953 0 7 7 0 0 0 -0.61523 -0.21289 7 7 0 0 0 -0.044922 -0.015625 7 7 0 0 0 -0.0058594 -0.0019531 7 7 0 0 0 -0.55078 -0.13086 7 7 0 0 0 -0.14062 -0.03125 7 7 0 0 0 -0.55078 -0.072266 7 7 0 0 0 -0.14258 -0.017578 7 7 0 0 0 -0.55469 -0.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -0.94922 -1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c0.14632 0.65093 0.35776 1.2833 0.68359 1.8848a2 2 0 0 0 -0.80664 1.6016h-1a6 6 0 0 1 1.123 -3.4863zm1.877 1.4863a2 2 0 0 0 -0.10938 0.0039062 2 2 0 0 1 0.10938 -0.0039062zm-0.18945 0.011719a2 2 0 0 0 -0.12109 0.013672 2 2 0 0 1 0.12109 -0.013672zm-0.44141 0.09375a2 2 0 0 0 -0.056641 0.019531 2 2 0 0 1 0.056641 -0.019531zm-1.3594 2.0605a2 2 0 0 0 0.013672 0.11914 2 2 0 0 1 -0.013672 -0.11914zm0.027344 0.20898a2 2 0 0 0 0.017578 0.080078 2 2 0 0 1 -0.017578 -0.080078zm0.73438 1.1992a2 2 0 0 0 1.2285 0.42578 2 2 0 0 0 1.0508 -0.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473 0.33203 6 6 0 0 1 -5.0547 -2.7695c0.23771-0.5785 0.50336-1.1403 0.82617-1.6563z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 .035156.69922 7 7 0 0 0 .27734 1.3691 7 7 0 0 0 .91016 1.8848 7 7 0 0 0 .30273.4082c.000785-.00256.0011667-.005252.0019532-.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422-.80273c.001374.000393.002531.00156.003906.001953a7 7 0 0 0 .035156-.021485 7 7 0 0 0 .42578-.25 7 7 0 0 0 .16992-.10352 7 7 0 0 0 .36914-.26953 7 7 0 0 0 .20508-.15625 7 7 0 0 0 .3418-.30859 7 7 0 0 0 .16406-.1543 7 7 0 0 0 .33008-.36133 7 7 0 0 0 .14062-.16016 7 7 0 0 0 .27734-.37305 7 7 0 0 0 .13867-.19531 7 7 0 0 0 .21875-.36133 7 7 0 0 0 .14258-.25 7 7 0 0 0 .15625-.33398 7 7 0 0 0 .13867-.31055 7 7 0 0 0 .10742-.30859 7 7 0 0 0 .11914-.35352 7 7 0 0 0 .087891-.36914 7 7 0 0 0 .066406-.29297 7 7 0 0 0 .056641-.40039 7 7 0 0 0 .037109-.3125 7 7 0 0 0 .025391-.55273 7 7 0 0 0 -4.3848-6.4883 7 7 0 0 0 -.007812-.0039063 7 7 0 0 0 -.001953 0 7 7 0 0 0 -.61523-.21289 7 7 0 0 0 -.044922-.015625 7 7 0 0 0 -.0058594-.0019531 7 7 0 0 0 -.55078-.13086 7 7 0 0 0 -.14062-.03125 7 7 0 0 0 -.55078-.072266 7 7 0 0 0 -.14258-.017578 7 7 0 0 0 -.55469-.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -.94922-1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c.14632.65093.35776 1.2833.68359 1.8848a2 2 0 0 0 -.80664 1.6016h-1a6 6 0 0 1 1.123-3.4863zm1.877 1.4863a2 2 0 0 0 -.10938.0039062 2 2 0 0 1 .10938-.0039062zm-.18945.011719a2 2 0 0 0 -.12109.013672 2 2 0 0 1 .12109-.013672zm-.44141.09375a2 2 0 0 0 -.056641.019531 2 2 0 0 1 .056641-.019531zm-1.3594 2.0605a2 2 0 0 0 .013672.11914 2 2 0 0 1 -.013672-.11914zm.027344.20898a2 2 0 0 0 .017578.080078 2 2 0 0 1 -.017578-.080078zm.73438 1.1992a2 2 0 0 0 1.2285.42578 2 2 0 0 0 1.0508-.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473.33203 6 6 0 0 1 -5.0547-2.7695c.23771-.5785.50336-1.1403.82617-1.6563z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rigid_body_2d.svg b/editor/icons/icon_rigid_body_2d.svg index 3f67f660fc..bb97fa650b 100644 --- a/editor/icons/icon_rigid_body_2d.svg +++ b/editor/icons/icon_rigid_body_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 1.2227 3.9531 7 7 0 0 0 0.30273 0.4082c7.85e-4 -0.00256 0.0011667-0.005252 0.0019532-0.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422 -0.80273c0.001375 3.93e-4 0.002531 0.00156 0.003906 0.001953a7 7 0 0 0 0.035156 -0.021485 7 7 0 0 0 0.42578 -0.25 7 7 0 0 0 0.16992 -0.10352 7 7 0 0 0 0.36914 -0.26953 7 7 0 0 0 0.20508 -0.15625 7 7 0 0 0 0.3418 -0.30859 7 7 0 0 0 0.16406 -0.1543 7 7 0 0 0 0.33008 -0.36133 7 7 0 0 0 0.14062 -0.16016 7 7 0 0 0 0.27734 -0.37305 7 7 0 0 0 0.13867 -0.19531 7 7 0 0 0 0.21875 -0.36133 7 7 0 0 0 0.14258 -0.25 7 7 0 0 0 0.15625 -0.33398 7 7 0 0 0 0.13867 -0.31055 7 7 0 0 0 0.10742 -0.30859 7 7 0 0 0 0.11914 -0.35352 7 7 0 0 0 0.087891 -0.36914 7 7 0 0 0 0.066406 -0.29297 7 7 0 0 0 0.056641 -0.40039 7 7 0 0 0 0.037109 -0.3125 7 7 0 0 0 0.025391 -0.55273 7 7 0 0 0 -4.3926 -6.4922 7 7 0 0 0 -0.001953 0 7 7 0 0 0 -0.66016 -0.22852 7 7 0 0 0 -0.0058594 -0.0019531 7 7 0 0 0 -0.55078 -0.13086 7 7 0 0 0 -0.14062 -0.03125 7 7 0 0 0 -0.55078 -0.072266 7 7 0 0 0 -0.14258 -0.017578 7 7 0 0 0 -0.55469 -0.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -0.94922 -1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c0.14632 0.65093 0.35776 1.2833 0.68359 1.8848a2 2 0 0 0 -0.80664 1.6016h-1a6 6 0 0 1 1.123 -3.4863zm1.877 1.4863a2 2 0 0 0 -0.10938 0.0039062 2 2 0 0 1 0.10938 -0.0039062zm-0.18945 0.011719a2 2 0 0 0 -0.12109 0.013672 2 2 0 0 1 0.12109 -0.013672zm-0.44141 0.09375a2 2 0 0 0 -0.056641 0.019531 2 2 0 0 1 0.056641 -0.019531zm-1.3594 2.0605a2 2 0 0 0 0.013672 0.11914 2 2 0 0 1 -0.013672 -0.11914zm0.027344 0.20898a2 2 0 0 0 0.017578 0.080078 2 2 0 0 1 -0.017578 -0.080078zm0.73438 1.1992a2 2 0 0 0 1.2285 0.42578 2 2 0 0 0 1.0508 -0.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473 0.33203 6 6 0 0 1 -5.0547 -2.7695c0.23771-0.5785 0.50336-1.1403 0.82617-1.6563z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 1.2227 3.9531 7 7 0 0 0 .30273.4082c.000785-.00256.0011667-.005252.0019532-.007812a7 7 0 0 0 5.4727 2.6465 7 7 0 0 0 3.2422-.80273c.001375.000393.002531.00156.003906.001953a7 7 0 0 0 .035156-.021485 7 7 0 0 0 .42578-.25 7 7 0 0 0 .16992-.10352 7 7 0 0 0 .36914-.26953 7 7 0 0 0 .20508-.15625 7 7 0 0 0 .3418-.30859 7 7 0 0 0 .16406-.1543 7 7 0 0 0 .33008-.36133 7 7 0 0 0 .14062-.16016 7 7 0 0 0 .27734-.37305 7 7 0 0 0 .13867-.19531 7 7 0 0 0 .21875-.36133 7 7 0 0 0 .14258-.25 7 7 0 0 0 .15625-.33398 7 7 0 0 0 .13867-.31055 7 7 0 0 0 .10742-.30859 7 7 0 0 0 .11914-.35352 7 7 0 0 0 .087891-.36914 7 7 0 0 0 .066406-.29297 7 7 0 0 0 .056641-.40039 7 7 0 0 0 .037109-.3125 7 7 0 0 0 .025391-.55273 7 7 0 0 0 -4.3926-6.4922 7 7 0 0 0 -.001953 0 7 7 0 0 0 -.66016-.22852 7 7 0 0 0 -.0058594-.0019531 7 7 0 0 0 -.55078-.13086 7 7 0 0 0 -.14062-.03125 7 7 0 0 0 -.55078-.072266 7 7 0 0 0 -.14258-.017578 7 7 0 0 0 -.55469-.025391zm1.9512 1.334a6 6 0 0 1 4.0488 5.666h-7a2 2 0 0 0 -.94922-1.6992c1.3464-2.0289 2.6038-3.2631 3.9004-3.9668zm-6.8281 2.1797c.14632.65093.35776 1.2833.68359 1.8848a2 2 0 0 0 -.80664 1.6016h-1a6 6 0 0 1 1.123-3.4863zm1.877 1.4863a2 2 0 0 0 -.10938.0039062 2 2 0 0 1 .10938-.0039062zm-.18945.011719a2 2 0 0 0 -.12109.013672 2 2 0 0 1 .12109-.013672zm-.44141.09375a2 2 0 0 0 -.056641.019531 2 2 0 0 1 .056641-.019531zm-1.3594 2.0605a2 2 0 0 0 .013672.11914 2 2 0 0 1 -.013672-.11914zm.027344.20898a2 2 0 0 0 .017578.080078 2 2 0 0 1 -.017578-.080078zm.73438 1.1992a2 2 0 0 0 1.2285.42578 2 2 0 0 0 1.0508-.30078c1.345 2.0268 2.6013 3.2645 3.8965 3.9688a6 6 0 0 1 -1.9473.33203 6 6 0 0 1 -5.0547-2.7695c.23771-.5785.50336-1.1403.82617-1.6563z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_room.svg b/editor/icons/icon_room.svg index 5563ef965b..799be9f99a 100644 --- a/editor/icons/icon_room.svg +++ b/editor/icons/icon_room.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm1.0371 2.6172l4 2v3.7637l-4-2v-3.7637zm-1 5.5l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809z" color="#000000" color-rendering="auto" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9629 1.002a1.0001 1.0001 0 0 0 -.41016.10352l-6 3a1.0001 1.0001 0 0 0 -.55273.89453v6a1.0001 1.0001 0 0 0 .55273.89453l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1.0001 1.0001 0 0 0 .55273-.89453v-6a1.0001 1.0001 0 0 0 -.55273-.89453l-6-3a1.0001 1.0001 0 0 0 -.48438-.10352zm1.0371 2.6172 4 2v3.7637l-4-2zm-1 5.5 3.7637 1.8809-3.7637 1.8828-3.7637-1.8828z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_room_bounds.svg b/editor/icons/icon_room_bounds.svg index 4c5c3387f6..ad90944ac6 100644 --- a/editor/icons/icon_room_bounds.svg +++ b/editor/icons/icon_room_bounds.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h1v-1h1v-1zm12 0v1h1v1h1v-2zm-5.0371 0.00195c-0.14254 0.00487-0.28238 0.04016-0.41016 0.10352l-6 3c-0.33878 0.16944-0.55276 0.51574-0.55273 0.89453v6c-2.576e-5 0.37879 0.21395 0.72509 0.55273 0.89453l6 3c0.28156 0.14078 0.61297 0.14078 0.89453 0l6-3c0.33878-0.16944 0.55276-0.51574 0.55273-0.89453v-6c2.6e-5 -0.37879-0.21395-0.72509-0.55273-0.89453l-6-3c-0.15022-0.074574-0.31679-0.11017-0.48438-0.10352zm1.0371 2.6172l4 2v3.7637l-4-2zm-1 5.5l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828zm-7 3.8809v2h2v-1h-1v-1zm13 0v1h-1v1h2v-2z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h1v-1h1v-1zm12 0v1h1v1h1v-2zm-5.0371.00195c-.14254.00487-.28238.04016-.41016.10352l-6 3c-.33878.16944-.55276.51574-.55273.89453v6c-.00002576.37879.21395.72509.55273.89453l6 3c.28156.14078.61297.14078.89453 0l6-3c.33878-.16944.55276-.51574.55273-.89453v-6c.000026-.37879-.21395-.72509-.55273-.89453l-6-3c-.15022-.074574-.31679-.11017-.48438-.10352zm1.0371 2.6172 4 2v3.7637l-4-2zm-1 5.5 3.7637 1.8809-3.7637 1.8828-3.7637-1.8828zm-7 3.8809v2h2v-1h-1v-1zm13 0v1h-1v1h2v-2z" fill="#e0e0e0" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_0.svg b/editor/icons/icon_rotate_0.svg index 861e2415a5..96174ca93b 100644 --- a/editor/icons/icon_rotate_0.svg +++ b/editor/icons/icon_rotate_0.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm1 2.1016a5 5 0 0 1 4 4.8984 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 4 -4.8945v5.8945h2v-5.8984z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm1 2.1016a5 5 0 0 1 4 4.8984 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 4-4.8945v5.8945h2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_180.svg b/editor/icons/icon_rotate_180.svg index 115ef13b7a..11415e1e19 100644 --- a/editor/icons/icon_rotate_180.svg +++ b/editor/icons/icon_rotate_180.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.8541 0 7-3.1458 7-7 0-3.8541-3.1459-7-7-7zm0 2v10c-2.7733 0-5-2.2267-5-5 0-2.7732 2.2267-5 5-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7s7-3.1458 7-7c0-3.8541-3.1459-7-7-7zm0 2v10c-2.7733 0-5-2.2267-5-5 0-2.7732 2.2267-5 5-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_270.svg b/editor/icons/icon_rotate_270.svg index 8c9e8d7736..be26bc4337 100644 --- a/editor/icons/icon_rotate_270.svg +++ b/editor/icons/icon_rotate_270.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2v5h-5a5 5 0 0 1 5 -5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm0 2v5h-5a5 5 0 0 1 5-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_90.svg b/editor/icons/icon_rotate_90.svg index ed8cb1eeb6..d46c56a1fc 100644 --- a/editor/icons/icon_rotate_90.svg +++ b/editor/icons/icon_rotate_90.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.7179 0 6.7102-2.9486 6.9219-6.6152a1 1 0 0 0 0.078125 -0.38477 1 1 0 0 0 -0.078125 -0.38867 1 1 0 0 0 -0.001953 -0.0039062c-0.21589-3.6627-3.2049-6.6074-6.9199-6.6074zm0 2v5h5c0 2.7733-2.2267 5-5 5-2.7733 0-5-2.2267-5-5 0-2.7732 2.2267-5 5-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.7179 0 6.7102-2.9486 6.9219-6.6152a1 1 0 0 0 .078125-.38477 1 1 0 0 0 -.078125-.38867 1 1 0 0 0 -.001953-.0039062c-.21589-3.6627-3.2049-6.6074-6.9199-6.6074zm0 2v5h5c0 2.7733-2.2267 5-5 5s-5-2.2267-5-5c0-2.7732 2.2267-5 5-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_left.svg b/editor/icons/icon_rotate_left.svg new file mode 100644 index 0000000000..223a725332 --- /dev/null +++ b/editor/icons/icon_rotate_left.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="translate(0 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_rotate_right.svg b/editor/icons/icon_rotate_right.svg new file mode 100644 index 0000000000..2b66bae998 --- /dev/null +++ b/editor/icons/icon_rotate_right.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" fill-opacity=".99608" transform="matrix(-1 0 0 1 16.026308 -1036.4)"><path d="m9 2a6 6 0 0 0 -6 6h2a4 4 0 0 1 4-4 4 4 0 0 1 4 4 4 4 0 0 1 -4 4v2a6 6 0 0 0 6-6 6 6 0 0 0 -6-6z" transform="translate(0 1036.4)"/><path d="m4.118 1048.3-1.6771-.9683-1.6771-.9682 1.6771-.9683 1.6771-.9682-.0000001 1.9365z" transform="matrix(0 -1.1926 1.5492 0 -1617 1049.3)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ruler.svg b/editor/icons/icon_ruler.svg index a16eda000b..dbe02102ec 100644 --- a/editor/icons/icon_ruler.svg +++ b/editor/icons/icon_ruler.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333 4.2333" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -292.77)"> -<path transform="matrix(.26458 0 0 .26458 0 292.77)" d="m1 1v7.5 6.5h14l-14-14zm3 7 4 4h-4v-4z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 4.2333 4.2333" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v7.5 6.5h14zm3 7 4 4h-4z" fill="#e0e0e0" transform="scale(.26458)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sample_library.svg b/editor/icons/icon_sample_library.svg index 403ea5ff42..e83a1a3778 100644 --- a/editor/icons/icon_sample_library.svg +++ b/editor/icons/icon_sample_library.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.0215 1.002a1.0001 1.0001 0 0 0 -1 0.875l-0.58984 4.7227-0.52344-1.0469a1.0001 1.0001 0 0 0 -0.89453 -0.55273h-2a1.0001 1.0001 0 1 0 0 2h1.3828l1.7227 3.4473a1.0001 1.0001 0 0 0 1.8867 -0.32227l0.58984-4.7227 0.52344 1.0449a1.0001 1.0001 0 0 0 0.89453 0.55273h3a1.0001 1.0001 0 1 0 0 -2h-2.3809l-1.7246-3.4473a1.0001 1.0001 0 0 0 -0.88672 -0.55078zm1.9785 6.998v1 5 1h5c0.55228 0 1-0.44772 1-1v-5c0-0.55228-0.44772-1-1-1v4l-1-1-1 1v-4h-3z" fill="#ff8484"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.0215 1.002a1.0001 1.0001 0 0 0 -1 .875l-.58984 4.7227-.52344-1.0469a1.0001 1.0001 0 0 0 -.89453-.55273h-2a1.0001 1.0001 0 1 0 0 2h1.3828l1.7227 3.4473a1.0001 1.0001 0 0 0 1.8867-.32227l.58984-4.7227.52344 1.0449a1.0001 1.0001 0 0 0 .89453.55273h3a1.0001 1.0001 0 1 0 0-2h-2.3809l-1.7246-3.4473a1.0001 1.0001 0 0 0 -.88672-.55078zm1.9785 6.998v1 5 1h5c.55228 0 1-.44772 1-1v-5c0-.55228-.44772-1-1-1v4l-1-1-1 1v-4z" fill="#ff8484"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_save.svg b/editor/icons/icon_save.svg index d85b7ce452..be5d3ef6fd 100644 --- a/editor/icons/icon_save.svg +++ b/editor/icons/icon_save.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-7-1-1l-3-3h-1v5 1h-8v-6zm1 0v5h3v-5h-3zm4 8c1.1046 0 2 0.89543 2 2 0 1.1046-0.89543 2-2 2s-2-0.89543-2-2c0-1.1046 0.89543-2 2-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-7-1-1l-3-3h-1v5 1h-8zm1 0v5h3v-5zm4 8c1.1046 0 2 .89543 2 2 0 1.1046-.89543 2-2 2s-2-.89543-2-2c0-1.1046.89543-2 2-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_script.svg b/editor/icons/icon_script.svg index ad3c9d7f80..1c6ec51a48 100644 --- a/editor/icons/icon_script.svg +++ b/editor/icons/icon_script.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1a1 1 0 0 0 -1 1v10h-1v-2h-2v2a1 1 0 0 0 0.5 0.86523 1 1 0 0 0 0.5 0.13477v1h7a2 2 0 0 0 2 -2v-8h3v-2a2 2 0 0 0 -2 -2h-7z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-2-1v1 2c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1v-2z" fill="#b4b4b4"/> -<circle cx="3" cy="1048.4" rx="1" ry="1" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m6 1v1a1 1 0 0 0 -1 1v10h-1v-2h-2v2a1 1 0 0 0 .5.86523 1 1 0 0 0 .5.13477v1h7a2 2 0 0 0 2-2v-8h3v-2a2 2 0 0 0 -2-2z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m6 1c-1.1046 0-2 .89543-2 2v7h-2-1v1 2c0 1.1046.89543 2 2 2s2-.89543 2-2v-10c0-.55228.44772-1 1-1s1 .44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-.89543-2-2-2zm-4 10h2v2c0 .55228-.44772 1-1 1s-1-.44772-1-1z" fill="#b4b4b4" transform="translate(0 1036.4)"/><circle cx="3" cy="1048.4" fill="#e0e0e0"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_script_create.svg b/editor/icons/icon_script_create.svg index 231a675430..0a03907a13 100644 --- a/editor/icons/icon_script_create.svg +++ b/editor/icons/icon_script_create.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1c-0.55228 0-1 0.44772-1 1v10h-1v-2h-2v2c2.826e-4 0.35698 0.19084 0.68674 0.5 0.86523 0.15194 0.088045 0.32439 0.13452 0.5 0.13477v1h5 1v-1h-1v-4h2v-2h2v-3h3v-2c0-1.1046-0.89543-2-2-2h-7z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-2-1v1 2c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1v-2z" fill="#b4b4b4"/> -<circle cx="3" cy="1048.4" rx="1" ry="1" fill="#e0e0e0"/> -<path d="m13 1049.4h2v-2h-2v-2h-2v2h-2v2h2v2h2z" fill="#84ffb1" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m6 1v1c-.55228 0-1 .44772-1 1v10h-1v-2h-2v2c.0002826.35698.19084.68674.5.86523.15194.088045.32439.13452.5.13477v1h5 1v-1h-1v-4h2v-2h2v-3h3v-2c0-1.1046-.89543-2-2-2z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m6 1c-1.1046 0-2 .89543-2 2v7h-2-1v1 2c0 1.1046.89543 2 2 2s2-.89543 2-2v-10c0-.55228.44772-1 1-1s1 .44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-.89543-2-2-2zm-4 10h2v2c0 .55228-.44772 1-1 1s-1-.44772-1-1z" fill="#b4b4b4" transform="translate(0 1036.4)"/><circle cx="3" cy="1048.4" fill="#e0e0e0"/><path d="m13 1049.4h2v-2h-2v-2h-2v2h-2v2h2v2h2z" fill="#84ffb1" fill-rule="evenodd"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_script_create_dialog.svg b/editor/icons/icon_script_create_dialog.svg index 27d6c47d49..751b799ba9 100644 --- a/editor/icons/icon_script_create_dialog.svg +++ b/editor/icons/icon_script_create_dialog.svg @@ -1,10 +1 @@ -<svg width="17.067" height="17.067" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1c-0.55228 0-1 0.44772-1 1v10h-1v-2h-2v2c2.826e-4 0.35698 0.19084 0.68674 0.5 0.86523 0.15194 0.088045 0.32439 0.13452 0.5 0.13477v1h6v-5l3-2v-3h3v-2c0-1.1046-0.89543-2-2-2z" fill="#a5efac"/> -<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-3v3c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v3h5v-1h-4v-2c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1z" fill="#87e29f"/> -<circle cx="3" cy="1048.4" r="0" fill="#e0e0e0"/> -<ellipse cx="12" cy="1048.4" rx=".5" ry="3" fill="#87e29f"/> -<ellipse transform="rotate(60)" cx="913.91" cy="513.79" rx=".5" ry="3" fill="#87e29f"/> -<ellipse transform="rotate(120)" cx="901.91" cy="-534.57" rx=".5" ry="3" fill="#87e29f"/> -</g> -</svg> +<svg height="17.067" viewBox="0 0 16 16" width="17.067" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m6 1v1c-.55228 0-1 .44772-1 1v10h-1v-2h-2v2c.0002826.35698.19084.68674.5.86523.15194.088045.32439.13452.5.13477v1h6v-5l3-2v-3h3v-2c0-1.1046-.89543-2-2-2z" fill="#a5efac" transform="translate(0 1036.4)"/><path d="m6 1c-1.1046 0-2 .89543-2 2v7h-3v3c0 1.1046.89543 2 2 2s2-.89543 2-2v-10c0-.55228.44772-1 1-1s1 .44772 1 1v3h5v-1h-4v-2c0-1.1046-.89543-2-2-2zm-4 10h2v2c0 .55228-.44772 1-1 1s-1-.44772-1-1z" fill="#87e29f" transform="translate(0 1036.4)"/><circle cx="3" cy="1048.4" fill="#e0e0e0" r="0"/><g fill="#87e29f"><ellipse cx="12" cy="1048.4" rx=".5" ry="3"/><ellipse cx="913.91" cy="513.79" rx=".5" ry="3" transform="matrix(.5 .8660254 -.8660254 .5 0 0)"/><ellipse cx="901.91" cy="-534.57" rx=".5" ry="3" transform="matrix(-.5 .8660254 -.8660254 -.5 0 0)"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_script_extend.svg b/editor/icons/icon_script_extend.svg index ef3d48af9f..efa0077ab1 100644 --- a/editor/icons/icon_script_extend.svg +++ b/editor/icons/icon_script_extend.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1c-0.55228 0-1 0.44772-1 1v10h-1v-2h-2v2c2.826e-4 0.35698 0.19084 0.68674 0.5 0.86523 0.15194 0.088045 0.32439 0.13452 0.5 0.13477v1h7c0.73866 0 1.3763-0.40437 1.7227-1h-3.7227v-4h4v-5h3v-2c0-1.1046-0.89543-2-2-2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-2-1v1 2c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1v-2z" fill="#b4b4b4"/> -<circle cx="3" cy="1048.4" rx="1" ry="1" fill="#e0e0e0"/> -<path d="m16 1048.4-3-3v2h-4v2h4v2z" fill="#68b6ff" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m6 1v1c-.55228 0-1 .44772-1 1v10h-1v-2h-2v2c.0002826.35698.19084.68674.5.86523.15194.088045.32439.13452.5.13477v1h7c.73866 0 1.3763-.40437 1.7227-1h-3.7227v-4h4v-5h3v-2c0-1.1046-.89543-2-2-2z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m6 1c-1.1046 0-2 .89543-2 2v7h-2-1v1 2c0 1.1046.89543 2 2 2s2-.89543 2-2v-10c0-.55228.44772-1 1-1s1 .44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-.89543-2-2-2zm-4 10h2v2c0 .55228-.44772 1-1 1s-1-.44772-1-1z" fill="#b4b4b4" transform="translate(0 1036.4)"/><circle cx="3" cy="1048.4" fill="#e0e0e0"/><path d="m16 1048.4-3-3v2h-4v2h4v2z" fill="#68b6ff" fill-rule="evenodd"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_script_remove.svg b/editor/icons/icon_script_remove.svg index b5dcaff460..de67d02947 100644 --- a/editor/icons/icon_script_remove.svg +++ b/editor/icons/icon_script_remove.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1v1c-0.55228 0-1 0.44772-1 1v10h-1v-2h-2v2c2.826e-4 0.35698 0.19084 0.68674 0.5 0.86523 0.15194 0.088045 0.32439 0.13452 0.5 0.13477v1h5.6348l-1.584-1.584 1.4141-1.4141-1.4141-1.416 3.5352-3.5352 1.4141 1.4141v-0.46484-3h3v-2c0-1.1046-0.89543-2-2-2h-7z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m6 1c-1.1046 0-2 0.89543-2 2v7h-2-1v1 2c0 1.1046 0.89543 2 2 2s2-0.89543 2-2v-10c0-0.55228 0.44772-1 1-1s1 0.44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-0.89543-2-2-2zm-4 10h2v2c0 0.55228-0.44772 1-1 1s-1-0.44772-1-1v-2z" fill="#b4b4b4"/> -<circle cx="3" cy="1048.4" rx="1" ry="1" fill="#e0e0e0"/> -<path d="m13.414 1048.4 1.4142-1.4142-1.4142-1.4142l-1.4142 1.4142-1.4142-1.4142-1.4142 1.4142 1.4142 1.4142-1.4142 1.4142 1.4142 1.4142 1.4142-1.4142 1.4142 1.4142 1.4142-1.4142z" fill="#ff8484" fill-rule="evenodd"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m6 1v1c-.55228 0-1 .44772-1 1v10h-1v-2h-2v2c.0002826.35698.19084.68674.5.86523.15194.088045.32439.13452.5.13477v1h5.6348l-1.584-1.584 1.4141-1.4141-1.4141-1.416 3.5352-3.5352 1.4141 1.4141v-.46484-3h3v-2c0-1.1046-.89543-2-2-2h-7z" fill="#e0e0e0" transform="translate(0 1036.4)"/><path d="m6 1c-1.1046 0-2 .89543-2 2v7h-2-1v1 2c0 1.1046.89543 2 2 2s2-.89543 2-2v-10c0-.55228.44772-1 1-1s1 .44772 1 1v1 1 1h1 4v-1h-4v-1-1c0-1.1046-.89543-2-2-2zm-4 10h2v2c0 .55228-.44772 1-1 1s-1-.44772-1-1z" fill="#b4b4b4" transform="translate(0 1036.4)"/><circle cx="3" cy="1048.4" fill="#e0e0e0"/><path d="m13.414 1048.4 1.4142-1.4142-1.4142-1.4142-1.4142 1.4142-1.4142-1.4142-1.4142 1.4142 1.4142 1.4142-1.4142 1.4142 1.4142 1.4142 1.4142-1.4142 1.4142 1.4142 1.4142-1.4142z" fill="#ff8484" fill-rule="evenodd"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_scroll_container.svg b/editor/icons/icon_scroll_container.svg index 786bae39ef..738748ca91 100644 --- a/editor/icons/icon_scroll_container.svg +++ b/editor/icons/icon_scroll_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm5 1l-2 2h4l-2-2zm2 2v4l2-2-2-2zm0 4h-4l2 2 2-2zm-4 0v-4l-2 2 2 2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm5 1-2 2h4zm2 2v4l2-2zm0 4h-4l2 2zm-4 0v-4l-2 2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_search.svg b/editor/icons/icon_search.svg index 9178e6c51c..04dc4f7372 100644 --- a/editor/icons/icon_search.svg +++ b/editor/icons/icon_search.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.7539 -0.83203l4.3164 4.3164 1.4141-1.4141-4.3164-4.3164a5 5 0 0 0 0.83203 -2.7539 5 5 0 0 0 -5 -5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.7539-.83203l4.3164 4.3164 1.4141-1.4141-4.3164-4.3164a5 5 0 0 0 .83203-2.7539 5 5 0 0 0 -5-5zm0 2a3 3 0 0 1 3 3 3 3 0 0 1 -3 3 3 3 0 0 1 -3-3 3 3 0 0 1 3-3z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_segment_shape_2d.svg b/editor/icons/icon_segment_shape_2d.svg index beb1dd3d3f..e4c04ae7c6 100644 --- a/editor/icons/icon_segment_shape_2d.svg +++ b/editor/icons/icon_segment_shape_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1050.4 12-12" color="#000000" fill="none" stroke="#68b6ff" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4 12-12" style="fill:none;stroke:#68b6ff;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-width:2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_shader.svg b/editor/icons/icon_shader.svg index 659d81519a..479379d235 100644 --- a/editor/icons/icon_shader.svg +++ b/editor/icons/icon_shader.svg @@ -1,12 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g> -<path d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v12c5.52e-5 0.5523 0.44774 0.9999 1 1h12c0.55226-1e-4 0.99994-0.4477 1-1v-8l-5-5zm1 2h6v3c0 0.554 0.44599 1 1 1h3v6h-10z" fill="#e0e0e0"/> -<path d="m10 11h2v1h-2z" fill="#9f70ff"/> -<path d="m4 6h2v1h-2z" fill="#ffeb70"/> -<path d="m8 8h4v1h-4z" fill="#9dff70"/> -<path d="m7 6h1v1h-1z" fill="#70deff"/> -<path d="m4 11h5v1h-5z" fill="#ff70ac"/> -<path d="m4 4h3v1h-3z" fill="#ff7070"/> -<path d="m4 8h3v1h-3z" fill="#70ffb9"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0001-.99994.4477-1 1v12c.0000552.5523.44774.9999 1 1h12c.55226-.0001.99994-.4477 1-1v-8l-5-5zm1 2h6v3c0 .554.44599 1 1 1h3v6h-10z" fill="#e0e0e0"/><path d="m10 11h2v1h-2z" fill="#9f70ff"/><path d="m4 6h2v1h-2z" fill="#ffeb70"/><path d="m8 8h4v1h-4z" fill="#9dff70"/><path d="m7 6h1v1h-1z" fill="#70deff"/><path d="m4 11h5v1h-5z" fill="#ff70ac"/><path d="m4 4h3v1h-3z" fill="#ff7070"/><path d="m4 8h3v1h-3z" fill="#70ffb9"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_shader_material.svg b/editor/icons/icon_shader_material.svg index f77aa837c5..37c1610f29 100644 --- a/editor/icons/icon_shader_material.svg +++ b/editor/icons/icon_shader_material.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v1h2 6 3l-2-2h-8z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m1 3v2h2v-2h-2zm8 0v2h5l-2-2h-3z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1 5v2h2v-2h-2zm8 0v1c0 0.554 0.44599 1 1 1h3 2v-1l-1-1h-5z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1 7v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1 13v1c5.52e-5 0.5523 0.44774 0.9999 1 1h12c0.55226-1e-4 0.99994-0.4477 1-1v-1h-2-10-2z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1 11v2h2v-2h-2zm12 0v2h2v-2h-2z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0001-.99994.4477-1 1v1h2 6 3l-2-2z" fill="#ff7070"/><path d="m1 3v2h2v-2zm8 0v2h5l-2-2z" fill="#ffeb70"/><path d="m1 5v2h2v-2zm8 0v1c0 .554.44599 1 1 1h3 2v-1l-1-1z" fill="#9dff70"/><path d="m1 7v2h2v-2zm12 0v2h2v-2z" fill="#70ffb9"/><path d="m1 9v2h2v-2zm12 0v2h2v-2z" fill="#70deff"/><path d="m1 13v1c.0000552.5523.44774.9999 1 1h12c.55226-.0001.99994-.4477 1-1v-1h-2-10z" fill="#ff70ac"/><path d="m1 11v2h2v-2zm12 0v2h2v-2z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_short_cut.svg b/editor/icons/icon_short_cut.svg index 8c7978e522..f4e302efdb 100644 --- a/editor/icons/icon_short_cut.svg +++ b/editor/icons/icon_short_cut.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 2c-0.55228 0-1 0.4477-1 1v9.084c4.015e-4 0.506 0.448 0.91602 1 0.91602h8c0.552 0 0.9996-0.41002 1-0.91602v-9.084c0-0.5523-0.44772-1-1-1h-8zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-9h-1v9a0.99998 0.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-9h-1zm6 0h3l-1 3h2l-4 4 1-3h-2l1-4z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 2c-.55228 0-1 .4477-1 1v9.084c.0004015.506.448.91602 1 .91602h8c.552 0 .9996-.41002 1-.91602v-9.084c0-.5523-.44772-1-1-1zm-3 2v9a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-9h-1v9a.99998.99998 0 0 1 -1 1h-10a1 1 0 0 1 -1-1v-9zm6 0h3l-1 3h2l-4 4 1-3h-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_signal.svg b/editor/icons/icon_signal.svg index 85411702cd..82fdf2b059 100644 --- a/editor/icons/icon_signal.svg +++ b/editor/icons/icon_signal.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 3v10h2 4v-2h-4v-6h4v-2h-4-2zm9 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#ff8484"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 3v10h2 4v-2h-4v-6h4v-2h-4zm9 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z" fill="#ff8484"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_signals.svg b/editor/icons/icon_signals.svg index 97859370b7..9c09546f84 100644 --- a/editor/icons/icon_signals.svg +++ b/editor/icons/icon_signals.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c4.4301 0 8 3.5699 8 8a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-5.511-4.489-10-10-10zm0 4a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c2.221 0 4 1.779 4 4a1 1 0 0 0 1 1 1 1 0 0 0 1 -1c0-3.3018-2.6981-6-6-6zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c4.4301 0 8 3.5699 8 8a1 1 0 0 0 1 1 1 1 0 0 0 1-1c0-5.511-4.489-10-10-10zm0 4a1 1 0 0 0 -1 1 1 1 0 0 0 1 1c2.221 0 4 1.779 4 4a1 1 0 0 0 1 1 1 1 0 0 0 1-1c0-3.3018-2.6981-6-6-6zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_signals_and_groups.svg b/editor/icons/icon_signals_and_groups.svg index 5dedbaa433..d568296d5f 100644 --- a/editor/icons/icon_signals_and_groups.svg +++ b/editor/icons/icon_signals_and_groups.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 0c-0.55228 0-1 0.4477-1 1s0.44772 1 1 1c4.4301 0 8 3.5699 8 8 0 0.5523 0.44772 1 1 1s1-0.4477 1-1c0-5.511-4.489-10-10-10zm0 4c-0.55228 0-1 0.4477-1 1s0.44772 1 1 1c2.221 0 4 1.779 4 4 0 0.5523 0.44772 1 1 1s1-0.4477 1-1c0-3.3018-2.6981-6-6-6zm-5 4a1.0001 1.0001 0 0 0 -1 1v6a1.0001 1.0001 0 0 0 1 1h6a1.0001 1.0001 0 0 0 1 -1v-6a1.0001 1.0001 0 0 0 -1 -1h-6zm1 2h4v4h-4v-4z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0c-.55228 0-1 .4477-1 1s.44772 1 1 1c4.4301 0 8 3.5699 8 8 0 .5523.44772 1 1 1s1-.4477 1-1c0-5.511-4.489-10-10-10zm0 4c-.55228 0-1 .4477-1 1s.44772 1 1 1c2.221 0 4 1.779 4 4 0 .5523.44772 1 1 1s1-.4477 1-1c0-3.3018-2.6981-6-6-6zm-5 4a1.0001 1.0001 0 0 0 -1 1v6a1.0001 1.0001 0 0 0 1 1h6a1.0001 1.0001 0 0 0 1-1v-6a1.0001 1.0001 0 0 0 -1-1zm1 2h4v4h-4z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_skeleton.svg b/editor/icons/icon_skeleton.svg index ef563338c8..015c842125 100644 --- a/editor/icons/icon_skeleton.svg +++ b/editor/icons/icon_skeleton.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#fc9c9c" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 .26562v.001953h4v-.001953a2 2 0 0 0 1-.26562 2 2 0 0 0 1-1.7324v-3.5469a4 4 0 0 0 2-3.4531 4 4 0 0 0 -4-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-4 2h2v1h-2zm-2 2h1v1h1v-1h1 1v1h1v-1h1v.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-.86914z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_skeleton_2d.svg b/editor/icons/icon_skeleton_2d.svg index 1ee9bde2a6..8e38b5c971 100644 --- a/editor/icons/icon_skeleton_2d.svg +++ b/editor/icons/icon_skeleton_2d.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 0.26562v0.001953h4v-0.001953a2 2 0 0 0 1 -0.26562 2 2 0 0 0 1 -1.7324v-3.5469a4 4 0 0 0 2 -3.4531 4 4 0 0 0 -4 -4h-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-4 2h2v1h-2v-1zm-2 2h1v1h1v-1h1 1v1h1v-1h1v0.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-0.86914z" fill="#a5b7f3"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 .26562v.001953h4v-.001953a2 2 0 0 0 1-.26562 2 2 0 0 0 1-1.7324v-3.5469a4 4 0 0 0 2-3.4531 4 4 0 0 0 -4-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-4 2h2v1h-2zm-2 2h1v1h1v-1h1 1v1h1v-1h1v.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-.86914z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_skeleton_i_k.svg b/editor/icons/icon_skeleton_i_k.svg new file mode 100644 index 0000000000..e69f6e8bf3 --- /dev/null +++ b/editor/icons/icon_skeleton_i_k.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 .26562v.001953h4v-.001953a2 2 0 0 0 1-.26562 2 2 0 0 0 1-1.7324v-3.5469a4 4 0 0 0 2-3.4531 4 4 0 0 0 -4-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-4 2h2v1h-2zm-2 2h1v1h1v-1h1 1v1h1v-1h1v.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-.86914z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_slider_joint.svg b/editor/icons/icon_slider_joint.svg index d1469058d1..fdd7487bbf 100644 --- a/editor/icons/icon_slider_joint.svg +++ b/editor/icons/icon_slider_joint.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h3l-7 7v3l12-12zm10 2-12 12h8c0.55228 0 1-0.44772 1-1s-0.44772-1-1-1h-3l7-7z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-.55228 0-1 .44772-1 1s.44772 1 1 1h3l-7 7v3l12-12zm10 2-12 12h8c.55228 0 1-.44772 1-1s-.44772-1-1-1h-3l7-7z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_slot.svg b/editor/icons/icon_slot.svg index b31d7bfbc2..24d54297a8 100644 --- a/editor/icons/icon_slot.svg +++ b/editor/icons/icon_slot.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 3v2h4v6h-4v2h4 2v-10h-2-4zm-3 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2-2.5-2z" fill="#84ffb1"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 3v2h4v6h-4v2h4 2v-10h-2zm-3 1v3h-5v2h5v3l2.5-2 2.5-2-2.5-2z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_snap.svg b/editor/icons/icon_snap.svg index 0e535b11ce..632cf6c27d 100644 --- a/editor/icons/icon_snap.svg +++ b/editor/icons/icon_snap.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3v2h2v-2h-2zm6 0v2h2v-2h-2zm-6 6v2h2v-2h-2zm4 4v2h2v-2h-2zm6 0v2h2v-2h-2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2 -2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4 -4z" fill="#fff" fill-opacity=".68627"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3v2h2v-2zm6 0v2h2v-2zm-6 6v2h2v-2zm4 4v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/><path d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2-2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4-4z" fill="#fff" fill-opacity=".68627"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_snap_grid.svg b/editor/icons/icon_snap_grid.svg index 7124bd918e..a4a1f33053 100644 --- a/editor/icons/icon_snap_grid.svg +++ b/editor/icons/icon_snap_grid.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 0v3h-3v2h3v4h-3v2h3v3h2v-9h9v-2h-3v-3h-2v3h-4v-3zm4 13v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/> -<path transform="translate(0 1036.4)" d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2 -2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4 -4z" fill="#fff" fill-opacity=".68627"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 0v3h-3v2h3v4h-3v2h3v3h2v-9h9v-2h-3v-3h-2v3h-4v-3zm4 13v2h2v-2zm6 0v2h2v-2z" fill="#e0e0e0"/><path d="m11 7a4 4 0 0 0 -4 4v2h2v-2a2 2 0 0 1 2-2 2 2 0 0 1 2 2v2h2v-2a4 4 0 0 0 -4-4z" fill="#fff" fill-opacity=".68627"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_soft_body.svg b/editor/icons/icon_soft_body.svg index 9930026b61..2c907df847 100644 --- a/editor/icons/icon_soft_body.svg +++ b/editor/icons/icon_soft_body.svg @@ -1,56 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg2" - inkscape:version="0.91 r13725" - sodipodi:docname="icon_soft_body.svg"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1027" - id="namedview10" - showgrid="false" - inkscape:zoom="18.792233" - inkscape:cx="2.8961304" - inkscape:cy="4.3816933" - inkscape:window-x="-8" - inkscape:window-y="-8" - inkscape:window-maximized="1" - inkscape:current-layer="svg2" /> - <path - style="opacity:1;fill:#fc9c9c;fill-opacity:0.99607843;fill-rule:nonzero;stroke:none;stroke-width:1.42799997;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" - d="m 2.3447105,1.6091897 c -0.011911,1.9816766 -1.4168958,3.9344766 0,5.9495986 1.4168957,2.0151221 0,6.6693597 0,6.6693597 l 10.9510055,0 c 0,0 1.780829,-4.4523824 0,-6.489075 -1.780829,-2.0366925 -0.183458,-4.119112 0,-6.1298833 z m 1.8894067,0.7549031 7.4390658,0 c -0.431995,1.5996085 -1.62289,4.0426807 0,5.3749802 1.622888,1.3322996 0,5.887932 0,5.887932 l -7.4390658,0 c 0,0 1.3903413,-4.3680495 0,-5.9780743 -1.3903412,-1.6100247 -0.3951213,-3.7149271 0,-5.2848379 z" - id="rect4142" - inkscape:connector-curvature="0" - sodipodi:nodetypes="czcczcccczcczc" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1s-3 5 0 7-1 7-1 7h13s3-6 0-8 1-6 1-6zm2 2h7s-2 3 1 5 0 5 0 5h-7s2-4-1-6 0-4 0-4z" fill="#fc9c9c" fill-opacity=".996078"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sort.svg b/editor/icons/icon_sort.svg index 1e2e16f459..0b2f7f7ea9 100644 --- a/editor/icons/icon_sort.svg +++ b/editor/icons/icon_sort.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 1v2h6v-2h-6zm-5.0156 0.0019531a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l0.29297-0.29297v7.1719l-0.29297-0.29297a1 1 0 0 0 -0.7207 -0.29102 1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -1.4141 0l-0.29297 0.29297v-7.1719l0.29297 0.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102zm5.0156 5.998v2h4v-2h-4zm0 6v2h2v-2h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1v2h6v-2zm-5.0156.0019531a1.0001 1.0001 0 0 0 -.69141.29102l-2 2a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l.29297-.29297v7.1719l-.29297-.29297a1 1 0 0 0 -.7207-.29102 1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2a1 1 0 0 0 0-1.4141 1 1 0 0 0 -1.4141 0l-.29297.29297v-7.1719l.29297.29297a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-2-2a1.0001 1.0001 0 0 0 -.72266-.29102zm5.0156 5.998v2h4v-2zm0 6v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_spatial.svg b/editor/icons/icon_spatial.svg index f0b4e65c21..6a469dde13 100644 --- a/editor/icons/icon_spatial.svg +++ b/editor/icons/icon_spatial.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6 -6 6 6 0 0 0 -6 -6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 2a6 6 0 0 0 -6 6 6 6 0 0 0 6 6 6 6 0 0 0 6-6 6 6 0 0 0 -6-6zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_spatial_material.svg b/editor/icons/icon_spatial_material.svg index aa8bfc9a5b..cfd994a0fe 100644 --- a/editor/icons/icon_spatial_material.svg +++ b/editor/icons/icon_spatial_material.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-3.7891 1.8945h8.4727l-3.7891-1.8945a1.0001 1.0001 0 0 0 -0.48438 -0.10352z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m3.7637 3l-2.2109 1.1055a1.0001 1.0001 0 0 0 -0.55273 0.89453h3.2363l3.7637-1.8809 3.7637 1.8809h3.2363a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-2.2109-1.1055h-8.4727z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1 5v2h2v-0.38086l0.76172 0.38086h8.4766l0.76172-0.38086v0.38086h2v-2h-3.2363l-3.7637 1.8828-3.7637-1.8828h-3.2363z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1 7v2h2v-2h-2zm2.7617 0l3.2383 1.6191v0.38086h2v-0.38086l3.2383-1.6191h-8.4766zm9.2383 0v2h2v-2h-2z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h3.2344l-1.2344-0.61719v-1.3828h-2zm6 0v2h2v-2h-2zm6 0v1.3828l-1.2344 0.61719h3.2344v-2h-2z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m3.7637 13l3.7891 1.8945a1.0001 1.0001 0 0 0 0.48438 0.10547 1.0001 1.0001 0 0 0 0.41016 -0.10547l3.7891-1.8945h-8.4727z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1 11a1.0001 1.0001 0 0 0 0.55273 0.89453l2.2109 1.1055h8.4727l2.2109-1.1055a1.0001 1.0001 0 0 0 0.55273 -0.89453h-3.2344l-2.7656 1.3828v-1.3828h-2v1.3828l-2.7656-1.3828h-3.2344z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9629 1.002a1.0001 1.0001 0 0 0 -.41016.10352l-3.7891 1.8945h8.4727l-3.7891-1.8945a1.0001 1.0001 0 0 0 -.48438-.10352z" fill="#ff7070"/><path d="m3.7637 3-2.2109 1.1055a1.0001 1.0001 0 0 0 -.55273.89453h3.2363l3.7637-1.8809 3.7637 1.8809h3.2363a1.0001 1.0001 0 0 0 -.55273-.89453l-2.2109-1.1055h-8.4727z" fill="#ffeb70"/><path d="m1 5v2h2v-.38086l.76172.38086h8.4766l.76172-.38086v.38086h2v-2h-3.2363l-3.7637 1.8828-3.7637-1.8828h-3.2363z" fill="#9dff70"/><path d="m1 7v2h2v-2zm2.7617 0 3.2383 1.6191v.38086h2v-.38086l3.2383-1.6191zm9.2383 0v2h2v-2z" fill="#70ffb9"/><path d="m1 9v2h3.2344l-1.2344-.61719v-1.3828h-2zm6 0v2h2v-2zm6 0v1.3828l-1.2344.61719h3.2344v-2h-2z" fill="#70deff"/><path d="m3.7637 13 3.7891 1.8945a1.0001 1.0001 0 0 0 .48438.10547 1.0001 1.0001 0 0 0 .41016-.10547l3.7891-1.8945h-8.4727z" fill="#ff70ac"/><path d="m1 11a1.0001 1.0001 0 0 0 .55273.89453l2.2109 1.1055h8.4727l2.2109-1.1055a1.0001 1.0001 0 0 0 .55273-.89453h-3.2344l-2.7656 1.3828v-1.3828h-2v1.3828l-2.7656-1.3828h-3.2344z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sphere_mesh.svg b/editor/icons/icon_sphere_mesh.svg index e298bbef3d..b01ba46bcf 100644 --- a/editor/icons/icon_sphere_mesh.svg +++ b/editor/icons/icon_sphere_mesh.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7 3.8541 0 7-3.1458 7-7 0-3.8541-3.1459-7-7-7zm-1 2.0977v4.8711c-1.2931-0.071342-2.6061-0.29819-3.9434-0.69141 0.30081-2.0978 1.8852-3.7665 3.9434-4.1797zm2 0c2.0549 0.41253 3.637 2.0767 3.9414 4.1699-1.3046 0.36677-2.6158 0.60259-3.9414 0.6875v-4.8574zm3.7852 6.2812c-0.50864 1.7788-1.9499 3.1531-3.7852 3.5215v-2.9512c1.2792-0.072301 2.5419-0.26704 3.7852-0.57031zm-9.5645 0.017578c1.2733 0.31892 2.5337 0.50215 3.7793 0.5625v2.9414c-1.8291-0.36719-3.266-1.7339-3.7793-3.5039z" fill="#ffd684"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.8541 0-7 3.1459-7 7 0 3.8542 3.1459 7 7 7s7-3.1458 7-7c0-3.8541-3.1459-7-7-7zm-1 2.0977v4.8711c-1.2931-.071342-2.6061-.29819-3.9434-.69141.30081-2.0978 1.8852-3.7665 3.9434-4.1797zm2 0c2.0549.41253 3.637 2.0767 3.9414 4.1699-1.3046.36677-2.6158.60259-3.9414.6875zm3.7852 6.2812c-.50864 1.7788-1.9499 3.1531-3.7852 3.5215v-2.9512c1.2792-.072301 2.5419-.26704 3.7852-.57031zm-9.5645.017578c1.2733.31892 2.5337.50215 3.7793.5625v2.9414c-1.8291-.36719-3.266-1.7339-3.7793-3.5039z" fill="#ffd684"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sphere_shape.svg b/editor/icons/icon_sphere_shape.svg index f2995ae96a..4da18a1a38 100644 --- a/editor/icons/icon_sphere_shape.svg +++ b/editor/icons/icon_sphere_shape.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<circle cx="8" cy="1044.4" r="7" fill="#68b6ff"/> -<circle cx="6" cy="1041.4" r="2" fill="#a2d2ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" fill="#68b6ff" r="7"/><circle cx="6" cy="5" fill="#a2d2ff" r="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_spin_box.svg b/editor/icons/icon_spin_box.svg index c033df2c85..728710e440 100644 --- a/editor/icons/icon_spin_box.svg +++ b/editor/icons/icon_spin_box.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h7v-2-6-2h-7zm10 1l-2 3h4l-2-3zm-10 1h5v6h-5v-6zm8 4l2 3 2-3h-4z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 3c-1.1046 0-2 .89543-2 2v6c0 1.1046.89543 2 2 2h7v-2-6-2zm10 1-2 3h4zm-10 1h5v6h-5zm8 4 2 3 2-3z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_spot_light.svg b/editor/icons/icon_spot_light.svg index 93d4247405..6a35ee3890 100644 --- a/editor/icons/icon_spot_light.svg +++ b/editor/icons/icon_spot_light.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1a1 1 0 0 0 -1 1v3.6934c-1.7861 0.86608-3 2.4605-3 4.3066h4a2 2 0 0 0 2 2 2 2 0 0 0 2 -2h4c0-1.8462-1.2139-3.4406-3-4.3066v-3.6934a1 1 0 0 0 -1 -1h-4zm-1.0977 9.6348l-1.7324 1 1 1.7305 1.7324-1-1-1.7305zm6.1953 0l-1 1.7305 1.7324 1 1-1.7305-1.7324-1zm-4.0977 2.3652v2h2v-2h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a1 1 0 0 0 -1 1v3.6934c-1.7861.86608-3 2.4605-3 4.3066h4a2 2 0 0 0 2 2 2 2 0 0 0 2-2h4c0-1.8462-1.2139-3.4406-3-4.3066v-3.6934a1 1 0 0 0 -1-1zm-1.0977 9.6348-1.7324 1 1 1.7305 1.7324-1zm6.1953 0-1 1.7305 1.7324 1 1-1.7305zm-4.0977 2.3652v2h2v-2z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_spring_arm.svg b/editor/icons/icon_spring_arm.svg new file mode 100644 index 0000000000..eb0c1ebd7d --- /dev/null +++ b/editor/icons/icon_spring_arm.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" stroke="#fc9c9c" stroke-width="2"><path d="m8 14 6-6"/><path d="m2 2 7 7"/><path d="m10 9h-6"/><path d="m9 9v-5"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sprite.svg b/editor/icons/icon_sprite.svg index 11ad42ec98..26a10625fc 100644 --- a/editor/icons/icon_sprite.svg +++ b/editor/icons/icon_sprite.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4h-6zm-1 5c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm8 0c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 0.7168 1.7207c-0.74987 0.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-0.422-2.8281-1.1719a1.0001 1.0001 0 0 1 0.69727 -1.7168 1.0001 1.0001 0 0 1 0.7168 0.30273c0.37534 0.37535 0.88325 0.58594 1.4141 0.58594s1.0387-0.21059 1.4141-0.58594a1.0001 1.0001 0 0 1 0.69727 -0.30664z" fill="#a5b7f3"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4zm-1 5c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1v-2c0-.554.446-1 1-1zm8 0c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1v-2c0-.554.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 .7168 1.7207c-.74987.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-.422-2.8281-1.1719a1.0001 1.0001 0 0 1 .69727-1.7168 1.0001 1.0001 0 0 1 .7168.30273c.37534.37535.88325.58594 1.4141.58594s1.0387-.21059 1.4141-.58594a1.0001 1.0001 0 0 1 .69727-.30664z" fill="#a5b7f3"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sprite_3d.svg b/editor/icons/icon_sprite_3d.svg index eb163e3f43..385bb8f87d 100644 --- a/editor/icons/icon_sprite_3d.svg +++ b/editor/icons/icon_sprite_3d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g fill="#fc9c9c"> -<path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4zm-1 5c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm8 0c0.554 0 1 0.446 1 1v2c0 0.554-0.446 1-1 1s-1-0.446-1-1v-2c0-0.554 0.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 0.7168 1.7207c-0.74987 0.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-0.422-2.8281-1.1719a1.0001 1.0001 0 0 1 0.69727 -1.7168 1.0001 1.0001 0 0 1 0.7168 0.30273c0.37534 0.37535 0.88325 0.58594 1.4141 0.58594s1.0387-0.21059 1.4141-0.58594a1.0001 1.0001 0 0 1 0.69727 -0.30664z" fill="#fc9c9c"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-2.216 0-4 1.784-4 4v6c0 2.216 1.784 4 4 4h6c2.216 0 4-1.784 4-4v-6c0-2.216-1.784-4-4-4zm-1 5c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1v-2c0-.554.446-1 1-1zm8 0c.554 0 1 .446 1 1v2c0 .554-.446 1-1 1s-1-.446-1-1v-2c0-.554.446-1 1-1zm-1.8887 5.1074a1.0001 1.0001 0 0 1 .7168 1.7207c-.74987.74987-1.7676 1.1719-2.8281 1.1719s-2.0783-.422-2.8281-1.1719a1.0001 1.0001 0 0 1 .69727-1.7168 1.0001 1.0001 0 0 1 .7168.30273c.37534.37535.88325.58594 1.4141.58594s1.0387-.21059 1.4141-.58594a1.0001 1.0001 0 0 1 .69727-.30664z" fill="#fc9c9c"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sprite_frames.svg b/editor/icons/icon_sprite_frames.svg index 8123cbd6b4..f27adcb78c 100644 --- a/editor/icons/icon_sprite_frames.svg +++ b/editor/icons/icon_sprite_frames.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 1c-1.108 0-2 0.89199-2 2v6c0 1.108 0.89199 2 2 2h6c1.108 0 2-0.89199 2-2v-6c0-1.108-0.89199-2-2-2h-6zm10 0v2h2v-2h-2zm-10 4c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm6 0c0.554 0 1 0.446 1 1v1c0 0.554-0.446 1-1 1s-1-0.446-1-1v-1c0-0.554 0.446-1 1-1zm4 0v2h2v-2h-2zm-9 4h2 2a2 1 0 0 1 -1 0.86523 2 1 0 0 1 -2 0 2 1 0 0 1 -1 -0.86523zm9 0v2h2v-2h-2zm-12 4v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-2h-2z" fill="#e0e0e0"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.108 0-2 .89199-2 2v6c0 1.108.89199 2 2 2h6c1.108 0 2-.89199 2-2v-6c0-1.108-.89199-2-2-2zm10 0v2h2v-2zm-10 4c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm6 0c.554 0 1 .446 1 1v1c0 .554-.446 1-1 1s-1-.446-1-1v-1c0-.554.446-1 1-1zm4 0v2h2v-2zm-9 4h2 2a2 1 0 0 1 -1 .86523 2 1 0 0 1 -2 0 2 1 0 0 1 -1-.86523zm9 0v2h2v-2zm-12 4v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_sprite_sheet.svg b/editor/icons/icon_sprite_sheet.svg index eeb804f8b9..9b3eda3287 100644 --- a/editor/icons/icon_sprite_sheet.svg +++ b/editor/icons/icon_sprite_sheet.svg @@ -1,61 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_sprite_sheet.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="773" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="551" - inkscape:window-y="278" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g4"> - <path - transform="translate(0 1036.4)" - d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2zm-8 4h2v2h-2v-2zm4 0h2v2h-2v-2zm4 0h2v2h-2v-2z" - fill="#a5efac" - id="path2" - style="fill:#e0e0e0;fill-opacity:1" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2zm-8 4h2v2h-2zm4 0h2v2h-2zm4 0h2v2h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_static_body.svg b/editor/icons/icon_static_body.svg index e8ba9bff6f..de819bd76b 100644 --- a/editor/icons/icon_static_body.svg +++ b/editor/icons/icon_static_body.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -1.4141 0.58594 2 2 0 0 0 -0.58594 1.4141v10a2 2 0 0 0 0.58594 1.4141 2 2 0 0 0 1.4141 0.58594h10a2 2 0 0 0 2 -2v-10a2 2 0 0 0 -2 -2h-10zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-10a1 1 0 0 1 1 -1zm0 1v2h2v-2h-2zm8 0v2h2v-2h-2zm-8 8v2h2v-2h-2zm8 0v2h2v-2h-2z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -1.4141.58594 2 2 0 0 0 -.58594 1.4141v10a2 2 0 0 0 .58594 1.4141 2 2 0 0 0 1.4141.58594h10a2 2 0 0 0 2-2v-10a2 2 0 0 0 -2-2h-10zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-10a1 1 0 0 1 -1-1v-10a1 1 0 0 1 1-1zm0 1v2h2v-2zm8 0v2h2v-2zm-8 8v2h2v-2zm8 0v2h2v-2z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_static_body_2d.svg b/editor/icons/icon_static_body_2d.svg index 9c2b85ac10..2d846c5471 100644 --- a/editor/icons/icon_static_body_2d.svg +++ b/editor/icons/icon_static_body_2d.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="29" y="1042.4" width="1" height="1" fill="#fefeff"/> -<path transform="translate(0 1036.4)" d="m3 1a2 2 0 0 0 -1.4141 0.58594 2 2 0 0 0 -0.58594 1.4141v10a2 2 0 0 0 0.58594 1.4141 2 2 0 0 0 1.4141 0.58594h10a2 2 0 0 0 2 -2v-10a2 2 0 0 0 -2 -2h-10zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-10a1 1 0 0 1 -1 -1v-10a1 1 0 0 1 1 -1zm0 1v2h2v-2h-2zm8 0v2h2v-2h-2zm-8 8v2h2v-2h-2zm8 0v2h2v-2h-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m29 1042.4h1v1h-1z" fill="#fefeff"/><path d="m3 1a2 2 0 0 0 -1.4141.58594 2 2 0 0 0 -.58594 1.4141v10a2 2 0 0 0 .58594 1.4141 2 2 0 0 0 1.4141.58594h10a2 2 0 0 0 2-2v-10a2 2 0 0 0 -2-2h-10zm0 1h10a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-10a1 1 0 0 1 -1-1v-10a1 1 0 0 1 1-1zm0 1v2h2v-2zm8 0v2h2v-2zm-8 8v2h2v-2zm8 0v2h2v-2z" fill="#a5b7f3" fill-opacity=".98824" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_status_error.svg b/editor/icons/icon_status_error.svg index 072964b02d..ac3060e155 100644 --- a/editor/icons/icon_status_error.svg +++ b/editor/icons/icon_status_error.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7 3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7zm-2.8281 2.7578l2.8281 2.8281 2.8281-2.8281 1.4141 1.4141-2.8281 2.8281 2.8281 2.8281-1.4141 1.4141-2.8281-2.8281-2.8281 2.8281-1.4141-1.4141 2.8281-2.8281-2.8281-2.8281 1.4141-1.4141z" fill="#ff5d5d"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.866 0-7 3.134-7 7s3.134 7 7 7 7-3.134 7-7-3.134-7-7-7zm-2.8281 2.7578 2.8281 2.8281 2.8281-2.8281 1.4141 1.4141-2.8281 2.8281 2.8281 2.8281-1.4141 1.4141-2.8281-2.8281-2.8281 2.8281-1.4141-1.4141 2.8281-2.8281-2.8281-2.8281 1.4141-1.4141z" fill="#ff5d5d"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_status_success.svg b/editor/icons/icon_status_success.svg index d1ddc08579..4a22c6fc7f 100644 --- a/editor/icons/icon_status_success.svg +++ b/editor/icons/icon_status_success.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1c-3.866 0-7 3.134-7 7 0 3.866 3.134 7 7 7 3.866 0 7-3.134 7-7 0-3.866-3.134-7-7-7zm3.293 3.877 1.4141 1.4141-5.707 5.709-3.707-3.709 1.4141-1.4141 2.293 2.293z" fill="#45ff8b"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3.866 0-7 3.134-7 7s3.134 7 7 7 7-3.134 7-7-3.134-7-7-7zm3.293 3.877 1.4141 1.4141-5.707 5.709-3.707-3.709 1.4141-1.4141 2.293 2.293z" fill="#45ff8b"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_status_warning.svg b/editor/icons/icon_status_warning.svg index 28364bb274..4ec16008d7 100644 --- a/editor/icons/icon_status_warning.svg +++ b/editor/icons/icon_status_warning.svg @@ -1,3 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 2h2v7h-2v-7zm0 8h2v2h-2v-2z" fill="#ffdd65"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-1 2h2v7h-2zm0 8h2v2h-2z" fill="#ffdd65"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_stop.svg b/editor/icons/icon_stop.svg index 640b2998f6..2cb013c0df 100644 --- a/editor/icons/icon_stop.svg +++ b/editor/icons/icon_stop.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m4 1048.4v-8h8v8z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1048.4v-8h8v8z" fill="#e0e0e0" fill-rule="evenodd" stroke="#e0e0e0" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_stream_texture.svg b/editor/icons/icon_stream_texture.svg index 0210142b7e..e7845e10f3 100644 --- a/editor/icons/icon_stream_texture.svg +++ b/editor/icons/icon_stream_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h6v-2h2v-2h-2-5v-8h5v-2h-6zm6 2v2h2v-2h-2zm2 0h2v-2h-2v2zm2 0v2h2v-2h-2zm0 2h-2v2h2v-2zm0 2v2h2v-2h-2zm0 2h-2v2h2v-2zm0 2v2h2v-2h-2zm0 2h-2v2h2v-2zm-2-4v-2h-2v-1h-1v1h-1v1h-1v1h-1v1h2 2v-1h2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1 1 0 0 0 -1 1v12a1 1 0 0 0 1 1h6v-2h2v-2h-2-5v-8h5v-2zm6 2v2h2v-2zm2 0h2v-2h-2zm2 0v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm0 2v2h2v-2zm0 2h-2v2h2zm-2-4v-2h-2v-1h-1v1h-1v1h-1v1h-1v1h2 2v-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_string.svg b/editor/icons/icon_string.svg index 6618f3b7f9..9f3bb0b011 100644 --- a/editor/icons/icon_string.svg +++ b/editor/icons/icon_string.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m5 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3 -3v-2a1 1 0 0 1 1 -1h1v-2zm2 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1v-1h2v-2h-2v-2zm8 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1 -1h1v-2z" fill="#6ba7ec"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 2a3 3 0 0 0 -3 3v2a1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 3-3v-2a1 1 0 0 1 1-1h1v-2zm2 0v5a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1v-1h2v-2h-2v-2zm8 2a3 3 0 0 0 -3 3v3h2v-3a1 1 0 0 1 1-1h1v-2z" fill="#6ba7ec"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_style_box_empty.svg b/editor/icons/icon_style_box_empty.svg index aa14bd4ead..0268b03ef2 100644 --- a/editor/icons/icon_style_box_empty.svg +++ b/editor/icons/icon_style_box_empty.svg @@ -1,10 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v1h2v-2h-1zm3 0v2h2v-2h-2zm4 0v2h2v-2h-2zm4 0v2h2v-1c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-1z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m1 5v2h2v-2h-2zm12 0v0.23242c0.31584 0.1783 0.57817 0.43795 0.75977 0.75195 0.19142 0.33153 0.43699 0.67036 0.69922 1.0156h0.54102v-2h-2z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m12 7c-0.43047 0.7456-0.94451 1.3867-1.4355 2h2.8711c-0.49104-0.6133-1.0051-1.2544-1.4355-2zm2.459 0c0.17438 0.2296 0.352 0.46082 0.54102 0.69922v-0.69922h-0.54102z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h2v-2h-2zm9.5645 0c-0.55248 0.69003-1.0583 1.3421-1.334 2h5.5391c-0.2757-0.65786-0.78151-1.31-1.334-2h-2.8711z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1 13v1c5.52e-5 0.5523 0.44774 0.9999 1 1h1v-2h-2zm4 0v2h2v-2h-2zm4.1836 0c0.41312 1.1628 1.5119 2 2.8164 2s2.4033-0.83718 2.8164-2h-5.6328z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m9.2305 11c-0.13656 0.32585-0.23047 0.65576-0.23047 1 0 0.35235 0.07201 0.68593 0.18359 1h5.6328c0.11158-0.31407 0.18359-0.64765 0.18359-1 0-0.34424-0.093909-0.67415-0.23047-1h-5.5391z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0001-.99994.4477-1 1v1h2v-2zm3 0v2h2v-2zm4 0v2h2v-2zm4 0v2h2v-1c-.000055-.5523-.44774-.9999-1-1z" fill="#ff7070"/><path d="m1 5v2h2v-2zm12 0v.23242c.31584.1783.57817.43795.75977.75195.19142.33153.43699.67036.69922 1.0156h.54102v-2h-2z" fill="#9dff70"/><path d="m12 7c-.43047.7456-.94451 1.3867-1.4355 2h2.8711c-.49104-.6133-1.0051-1.2544-1.4355-2zm2.459 0c.17438.2296.352.46082.54102.69922v-.69922z" fill="#70ffb9"/><path d="m1 9v2h2v-2zm9.5645 0c-.55248.69003-1.0583 1.3421-1.334 2h5.5391c-.2757-.65786-.78151-1.31-1.334-2z" fill="#70deff"/><path d="m1 13v1c.0000552.5523.44774.9999 1 1h1v-2zm4 0v2h2v-2zm4.1836 0c.41312 1.1628 1.5119 2 2.8164 2s2.4033-.83718 2.8164-2z" fill="#ff70ac"/><path d="m9.2305 11c-.13656.32585-.23047.65576-.23047 1 0 .35235.07201.68593.18359 1h5.6328c.11158-.31407.18359-.64765.18359-1 0-.34424-.093909-.67415-.23047-1h-5.5391z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_style_box_flat.svg b/editor/icons/icon_style_box_flat.svg index d76ec8d7f1..a6f43be4c8 100644 --- a/editor/icons/icon_style_box_flat.svg +++ b/editor/icons/icon_style_box_flat.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v1h14v-1c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-12z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m1 3v2h14v-2h-14z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1 5v2h8.582c0.25686-0.33847 0.49465-0.66934 0.68555-1 0.33885-0.5859 0.95103-0.96109 1.627-0.99609 0.7512-0.04 1.4613 0.34489 1.8379 0.99609 0.18899 0.32737 0.42831 0.66049 0.68555 1h0.58203v-2h-14z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1 7v2h7.0547c0.14116-0.20345 0.28508-0.40233 0.42383-0.58398 0.38601-0.5053 0.76348-0.96794 1.1035-1.416h-8.582zm11 0c-0.43047 0.7456-0.94451 1.3867-1.4355 2h2.8711c-0.49104-0.6133-1.0051-1.2544-1.4355-2zm2.418 0c0.18626 0.24583 0.37928 0.49419 0.58203 0.75v-0.75h-0.58203z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h6.1172c0.17955-0.78395 0.54577-1.4354 0.9375-2h-7.0547zm9.5645 0c-0.55248 0.69003-1.0583 1.3421-1.334 2h5.5391c-0.2757-0.65786-0.78151-1.31-1.334-2h-2.8711z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1 13v1c5.52e-5 0.5523 0.44774 0.9999 1 1h6.0371c-0.44511-0.58388-0.76161-1.2639-0.91992-2h-6.1172zm8.1836 0c0.41312 1.1628 1.5119 2 2.8164 2s2.4033-0.83718 2.8164-2h-5.6328z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1 11v2h6.1172c-0.06966-0.3239-0.11719-0.65596-0.11719-1 0-0.35655 0.045474-0.68688 0.11719-1h-6.1172zm8.2305 0c-0.13656 0.32585-0.23047 0.65576-0.23047 1 0 0.35235 0.07201 0.68593 0.18359 1h5.6328c0.11158-0.31407 0.18359-0.64765 0.18359-1 0-0.34424-0.093909-0.67415-0.23047-1h-5.5391z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1c-.55226.0001-.99994.4477-1 1v1h14v-1c-.000055-.5523-.44774-.9999-1-1z" fill="#ff7070"/><path d="m1 3v2h14v-2z" fill="#ffeb70"/><path d="m1 5v2h8.582c.25686-.33847.49465-.66934.68555-1 .33885-.5859.95103-.96109 1.627-.99609.7512-.04 1.4613.34489 1.8379.99609.18899.32737.42831.66049.68555 1h.58203v-2h-14z" fill="#9dff70"/><path d="m1 7v2h7.0547c.14116-.20345.28508-.40233.42383-.58398.38601-.5053.76348-.96794 1.1035-1.416h-8.582zm11 0c-.43047.7456-.94451 1.3867-1.4355 2h2.8711c-.49104-.6133-1.0051-1.2544-1.4355-2zm2.418 0c.18626.24583.37928.49419.58203.75v-.75z" fill="#70ffb9"/><path d="m1 9v2h6.1172c.17955-.78395.54577-1.4354.9375-2zm9.5645 0c-.55248.69003-1.0583 1.3421-1.334 2h5.5391c-.2757-.65786-.78151-1.31-1.334-2z" fill="#70deff"/><path d="m1 13v1c.0000552.5523.44774.9999 1 1h6.0371c-.44511-.58388-.76161-1.2639-.91992-2h-6.1172zm8.1836 0c.41312 1.1628 1.5119 2 2.8164 2s2.4033-.83718 2.8164-2z" fill="#ff70ac"/><path d="m1 11v2h6.1172c-.06966-.3239-.11719-.65596-.11719-1 0-.35655.045474-.68688.11719-1zm8.2305 0c-.13656.32585-.23047.65576-.23047 1 0 .35235.07201.68593.18359 1h5.6328c.11158-.31407.18359-.64765.18359-1 0-.34424-.093909-.67415-.23047-1h-5.5391z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_style_box_line.svg b/editor/icons/icon_style_box_line.svg new file mode 100644 index 0000000000..d7c26aac9d --- /dev/null +++ b/editor/icons/icon_style_box_line.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.303 1c-.4344 0-.86973.16881-1.2012.50586l-1.4688 1.4941h4.3418c.082839-.52789-.072596-1.0872-.47266-1.4941-.33144-.33705-.76482-.50586-1.1992-.50586z" fill="#ff7070"/><path d="m10.633 3-1.9668 2h4.8008l1.0352-1.0527c.2628-.2673.41824-.60049.47266-.94727h-4.3418z" fill="#ffeb70"/><path d="m8.666 5-1.9648 2h2.8809c.25686-.33847.49465-.66934.68555-1 .33885-.5859.95098-.96109 1.627-.99609.44399-.023642.86385.115 1.2188.35547l.35352-.35938h-4.8008z" fill="#9dff70"/><path d="m1.2617 13c-.08284.52789.072596 1.0872.47266 1.4941.33144.33705.76484.50586 1.1992.50586.4344 0 .8697-.16881 1.2012-.50586l1.4688-1.4941h-4.3418zm7.9219 0c.41312 1.1628 1.5119 2 2.8164 2s2.4033-.83718 2.8164-2z" fill="#ff70ac"/><path d="m2.7695 11-1.0352 1.0527c-.2628.2673-.41824.60049-.47266.94727h4.3418l1.4238-1.4473c.020288-.18998.04923-.37542.089844-.55273h-4.3477zm6.4609 0c-.13656.32585-.23047.65576-.23047 1 0 .35235.072014.68593.18359 1h5.6328c.11158-.31407.18359-.64765.18359-1 0-.34424-.093909-.67415-.23047-1h-5.5391z" fill="#9f70ff"/><path d="m4.7363 9-1.9668 2h4.3477c.17955-.78395.54577-1.4354.9375-2zm5.8281 0c-.55248.69003-1.0583 1.3421-1.334 2h5.5391c-.2757-.65786-.78149-1.31-1.334-2z" fill="#70deff"/><path d="m6.7012 7-1.9648 2h3.3184c.14116-.20345.28508-.40233.42383-.58398.38601-.5053.7635-.96796 1.1035-1.416h-2.8809zm5.2988 0c-.43047.7456-.94456 1.3867-1.4355 2h2.8711c-.49104-.6133-1.0051-1.2544-1.4355-2z" fill="#70ffb9"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_style_box_texture.svg b/editor/icons/icon_style_box_texture.svg index b9eaad8df7..6f067a4db4 100644 --- a/editor/icons/icon_style_box_texture.svg +++ b/editor/icons/icon_style_box_texture.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m2 1a1.0001 1.0001 0 0 0 -1 1v1h2 10 2v-1a1.0001 1.0001 0 0 0 -1 -1h-12z" fill="#ff7070"/> -<path transform="translate(0 1036.4)" d="m1 3v2h2v-2h-2zm12 0v2h2v-2h-2zm-4 1v1h1v-1h-1z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m1 5v2h2v-2h-2zm7 0v1h-2v1h3.543c0.26215-0.34438 0.50373-0.68039 0.69727-1.0156a2.0315 2.0315 0 0 1 0.75977 -0.75195v-0.23242h-1-1-1zm5 0v0.23242a2.0315 2.0315 0 0 1 0.75977 0.75195c0.19142 0.33153 0.43699 0.67033 0.69922 1.0156h0.54102v-2h-2z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m1 7v2h2v-2h-2zm4 0v1h-1v1h4.0156c0.14585-0.2113 0.29419-0.41592 0.4375-0.60352 0.38121-0.49904 0.75394-0.95521 1.0898-1.3965h-3.543-1zm7 0c-0.43047 0.7456-0.94451 1.3867-1.4355 2h2.8711c-0.49104-0.6133-1.0051-1.2544-1.4355-2zm2.459 0c0.17438 0.22962 0.352 0.46082 0.54102 0.69922v-0.69922h-0.54102z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m1 9v2h2v-2h-2zm9.5645 0c-0.55248 0.69003-1.0583 1.3421-1.334 2h5.5391c-0.2757-0.65786-0.78151-1.31-1.334-2h-2.8711z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m1 13v1a1.0001 1.0001 0 0 0 1 1h5.998c-0.4429-0.5864-0.77294-1.2592-0.92578-2h-4.0723-2zm8.1836 0c0.41312 1.1628 1.5119 2 2.8164 2s2.4033-0.83718 2.8164-2h-5.6328z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m1 11v2h2v-2h-2zm8.2305 0c-0.13656 0.32585-0.23047 0.65576-0.23047 1 0 0.35235 0.07201 0.68593 0.18359 1h5.6328c0.11158-0.31407 0.18359-0.64765 0.18359-1 0-0.34424-0.093909-0.67415-0.23047-1h-5.5391z" fill="#9f70ff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1a1.0001 1.0001 0 0 0 -1 1v1h2 10 2v-1a1.0001 1.0001 0 0 0 -1-1z" fill="#ff7070"/><path d="m1 3v2h2v-2zm12 0v2h2v-2zm-4 1v1h1v-1z" fill="#ffeb70"/><path d="m1 5v2h2v-2zm7 0v1h-2v1h3.543c.26215-.34438.50373-.68039.69727-1.0156a2.0315 2.0315 0 0 1 .75977-.75195v-.23242h-1-1-1zm5 0v.23242a2.0315 2.0315 0 0 1 .75977.75195c.19142.33153.43699.67033.69922 1.0156h.54102v-2h-2z" fill="#9dff70"/><path d="m1 7v2h2v-2zm4 0v1h-1v1h4.0156c.14585-.2113.29419-.41592.4375-.60352.38121-.49904.75394-.95521 1.0898-1.3965h-3.543-1zm7 0c-.43047.7456-.94451 1.3867-1.4355 2h2.8711c-.49104-.6133-1.0051-1.2544-1.4355-2zm2.459 0c.17438.22962.352.46082.54102.69922v-.69922z" fill="#70ffb9"/><path d="m1 9v2h2v-2zm9.5645 0c-.55248.69003-1.0583 1.3421-1.334 2h5.5391c-.2757-.65786-.78151-1.31-1.334-2z" fill="#70deff"/><path d="m1 13v1a1.0001 1.0001 0 0 0 1 1h5.998c-.4429-.5864-.77294-1.2592-.92578-2h-4.0723-2zm8.1836 0c.41312 1.1628 1.5119 2 2.8164 2s2.4033-.83718 2.8164-2z" fill="#ff70ac"/><path d="m1 11v2h2v-2zm8.2305 0c-.13656.32585-.23047.65576-.23047 1 0 .35235.07201.68593.18359 1h5.6328c.11158-.31407.18359-.64765.18359-1 0-.34424-.093909-.67415-.23047-1h-5.5391z" fill="#9f70ff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tab_container.svg b/editor/icons/icon_tab_container.svg index b6489e9fbf..fe0e426ef9 100644 --- a/editor/icons/icon_tab_container.svg +++ b/editor/icons/icon_tab_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h5v2 2h5v6h-10v-10zm7 0h3v2h-3v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h5v2 2h5v6h-10zm7 0h3v2h-3z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tabs.svg b/editor/icons/icon_tabs.svg index dfcc20a133..ad1e9069d0 100644 --- a/editor/icons/icon_tabs.svg +++ b/editor/icons/icon_tabs.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 4c-1.108 0-1.8178 0.9071-2 2l-1 6h-1v2h4 6 4v-2h-2l-1-6c-0.18216-1.0929-0.89199-2-2-2h-5z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 4c-1.108 0-1.8178.9071-2 2l-1 6h-1v2h4 6 4v-2h-2l-1-6c-.18216-1.0929-.89199-2-2-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_test_cube.svg b/editor/icons/icon_test_cube.svg index 8400a9617a..16cf68520f 100644 --- a/editor/icons/icon_test_cube.svg +++ b/editor/icons/icon_test_cube.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(0 1.1802e-5)" stroke="#fc9c9c" stroke-opacity=".99608"> -<path transform="translate(0 1036.4)" d="m7.9629 1.002a1.0001 1.0001 0 0 0 -0.41016 0.10352l-6 3a1.0001 1.0001 0 0 0 -0.55273 0.89453v6a1.0001 1.0001 0 0 0 0.55273 0.89453l6 3a1.0001 1.0001 0 0 0 0.89453 0l6-3a1.0001 1.0001 0 0 0 0.55273 -0.89453v-6a1.0001 1.0001 0 0 0 -0.55273 -0.89453l-6-3a1.0001 1.0001 0 0 0 -0.48438 -0.10352zm0.037109 2.1172l3.7637 1.8809-3.7637 1.8828-3.7637-1.8828 3.7637-1.8809zm-5 3.5l4 2v3.7637l-4-2v-3.7637zm10 0v3.7637l-4 2v-3.7637l4-2z" color="#000000" color-rendering="auto" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" stroke="none" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9629 1.002a1.0001 1.0001 0 0 0 -.41016.10352l-6 3a1.0001 1.0001 0 0 0 -.55273.89453v6a1.0001 1.0001 0 0 0 .55273.89453l6 3a1.0001 1.0001 0 0 0 .89453 0l6-3a1.0001 1.0001 0 0 0 .55273-.89453v-6a1.0001 1.0001 0 0 0 -.55273-.89453l-6-3a1.0001 1.0001 0 0 0 -.48438-.10352zm.037109 2.1172 3.7637 1.8809-3.7637 1.8828-3.7637-1.8828zm-5 3.5 4 2v3.7637l-4-2zm10 0v3.7637l-4 2v-3.7637z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" transform="translate(0 .000012)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_text_edit.svg b/editor/icons/icon_text_edit.svg index d3485a0b62..66f2fca4ba 100644 --- a/editor/icons/icon_text_edit.svg +++ b/editor/icons/icon_text_edit.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<rect x="29" y="1042.4" width="1" height="1" fill="#fefeff"/> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v10h-10v-10zm1 1v4h1v-4h-1z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m29 1042.4h1v1h-1z" fill="#fefeff"/><path d="m3 1c-1.1046 0-2 .8954-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm1 1v4h1v-4z" fill="#a5efac" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_text_file.svg b/editor/icons/icon_text_file.svg index 342a407b79..d381048212 100644 --- a/editor/icons/icon_text_file.svg +++ b/editor/icons/icon_text_file.svg @@ -1,57 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_text_file.svg" - inkscape:version="0.92.2 2405546, 2018-03-11" - enable-background="new"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="2560" - inkscape:window-height="1440" - id="namedview10" - showgrid="false" - inkscape:zoom="64" - inkscape:cx="-0.11275433" - inkscape:cy="5.0633688" - inkscape:window-x="1920" - inkscape:window-y="0" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" - inkscape:snap-grids="true" /> - <path - style="display:inline;fill:#e0e0e0" - d="m 13.370548,12.198712 c 0.359546,-0.0075 0.719092,-0.015 1.078638,-0.0225 -0.004,-0.738576 -0.008,-1.477152 -0.01198,-2.215728 -1.429703,0.011985 -2.859406,0.02397 -4.289109,0.035955 0.004,0.759672 0.008,1.519344 0.01198,2.279016 0.40349,-0.01135 0.806981,-0.02271 1.210471,-0.03406 0,1.251681 0,2.503363 0,3.755044 0.666667,0 1.333333,0 2,0 M 6.1005477,12.247152 c 0.332722,0.21587 0.665444,0.431741 0.998166,0.647611 -0.3328629,0.218648 -0.6657258,0.437297 -0.9985887,0.655945 -1e-7,0.818044 -2e-7,1.636088 -3e-7,2.454132 0.5662705,-0.533749 1.1325409,-1.067498 1.6988114,-1.601247 0.6353035,0.532396 1.2706071,1.064791 1.9059106,1.597187 -9.5e-4,-0.757409 -0.0019,-1.514817 -0.00285,-2.272226 -0.2987204,-0.278501 -0.5974407,-0.557002 -0.8961611,-0.835503 0.2983766,-0.205775 0.5967531,-0.41155 0.8951297,-0.617325 0.00283,-0.73844 0.00565,-1.476881 0.00848,-2.215321 -0.63732,0.474447 -1.27464,0.948893 -1.91196,1.42334 C 7.2318406,10.979446 6.6661958,10.475146 6.1005511,9.9708468 M 4.6399123,12.202271 c 0.3595459,-0.0075 0.7190917,-0.015 1.0786376,-0.0225 -0.00399,-0.738576 -0.00799,-1.477152 -0.011985,-2.2157276 -1.4297028,0.011985 -2.8594057,0.02397 -4.2891085,0.035955 0.00399,0.7596716 0.00799,1.5193436 0.011985,2.2790156 0.4034903,-0.01135 0.8069806,-0.02271 1.2104709,-0.03406 0,1.251681 0,2.503363 0,3.755044 0.6666667,0 1.3333333,0 2,0 M 7,1 C 6.81185,1.7526 6.6237,2.5052 6.43555,3.2578 6.0521572,3.3957205 5.6943609,3.6619566 5.3589944,3.3047548 4.8252629,2.9844032 4.2915315,2.6640516 3.7578,2.3437 3.2864333,2.8150667 2.8150667,3.2864333 2.3437,3.7578 2.7421333,4.4225 3.1405667,5.0872 3.539,5.7519 3.3683054,6.121632 3.3058712,6.5625877 2.8157946,6.5467719 2.2105097,6.6978312 1.6052249,6.8488906 0.99994,6.99995 c 0,0.6666667 0,1.3333333 0,2 1.7571667,0 3.5143333,0 5.2715,0 C 5.5845118,7.9199003 6.2580962,6.3373839 7.5001288,6.0629153 8.7083679,5.7047153 10.045643,6.7406952 9.99996,7.99995 c 0.104409,0.4657408 -0.6052318,1.1778026 0.181951,1 1.606006,0 3.212013,0 4.818019,0 0,-0.6666667 0,-1.3333333 0,-2 C 14.24733,6.8118 13.49473,6.62365 12.74213,6.4355 12.603459,6.0528244 12.33852,5.6958457 12.695012,5.3607965 13.015418,4.8264643 13.335824,4.2921322 13.65623,3.7578 13.184863,3.2864333 12.713497,2.8150667 12.24213,2.3437 11.57743,2.7421333 10.91273,3.1405667 10.24803,3.539 9.8782981,3.3683053 9.4373423,3.3058712 9.4531581,2.8157946 9.3020988,2.2105097 9.1510394,1.6052249 8.99998,0.99994 8.3333478,0.99998002 7.6664935,0.99985998 7,1 Z" - id="path4781-7" - inkscape:connector-curvature="0" /> -</svg> +<svg enable-background="new" height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m13.370548 12.198712 1.078638-.0225c-.004-.738576-.008-1.477152-.01198-2.215728-1.429703.011985-2.859406.02397-4.289109.035955.004.759672.008 1.519344.01198 2.279016.40349-.01135.806981-.02271 1.210471-.03406v3.755044h2m-7.2700003-3.749287c.332722.21587.665444.431741.998166.647611-.3328629.218648-.6657258.437297-.9985887.655945-.0000001.818044-.0000002 1.636088-.0000003 2.454132.5662705-.533749 1.1325409-1.067498 1.6988114-1.601247.6353035.532396 1.2706071 1.064791 1.9059106 1.597187-.00095-.757409-.0019-1.514817-.00285-2.272226-.2987204-.278501-.5974407-.557002-.8961611-.835503.2983766-.205775.5967531-.41155.8951297-.617325.00283-.73844.00565-1.476881.00848-2.215321-.63732.474447-1.27464.948893-1.91196 1.42334-.5656447-.504299-1.1312895-1.008599-1.6969342-1.5128982m-1.4606388 2.2314242c.3595459-.0075.7190917-.015 1.0786376-.0225-.00399-.738576-.00799-1.477152-.011985-2.2157276-1.4297028.011985-2.8594057.02397-4.2891085.035955.00399.7596716.00799 1.5193436.011985 2.2790156.4034903-.01135.8069806-.02271 1.2104709-.03406v3.755044h2m2.3600877-14.999998c-.18815.7526-.3763 1.5052-.56445 2.2578-.3833928.1379205-.7411891.4041566-1.0765556.0469548-.5337315-.3203516-1.0674629-.6407032-1.6011944-.9610548-.4713667.4713667-.9427333.9427333-1.4141 1.4141.3984333.6647.7968667 1.3294 1.1953 1.9941-.1706946.369732-.2331288.8106877-.7232054.7948719-.6052849.1510593-1.2105697.3021187-1.8158546.4531781v2h5.2715c-.6869282-1.0800497-.0133438-2.6625661 1.2286888-2.9370347 1.2082391-.3582 2.5455142.6777799 2.4998312 1.9370347.104409.4657408-.6052318 1.1778026.181951 1h4.818019c0-.6666667 0-1.3333333 0-2-.7526-.18815-1.5052-.3763-2.2578-.56445-.138671-.3826756-.40361-.7396543-.047118-1.0747035.320406-.5343322.640812-1.0686643.961218-1.6029965-.471367-.4713667-.942733-.9427333-1.4141-1.4141-.6647.3984333-1.3294.7968667-1.9941 1.1953-.3697319-.1706947-.8106877-.2331288-.7948719-.7232054-.1510593-.6052849-.3021187-1.2105697-.4531781-1.8158546-.6666322.00004002-1.3334865-.00008002-1.99998.00006z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_texture_3_d.svg b/editor/icons/icon_texture_3_d.svg index dafdc8c68d..ed8ce3e4ef 100644 --- a/editor/icons/icon_texture_3_d.svg +++ b/editor/icons/icon_texture_3_d.svg @@ -1,75 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_texture_3_d.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1853" - inkscape:window-height="1016" - id="namedview8" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="15.226978" - inkscape:cy="9.4909723" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="1" - inkscape:current-layer="svg6" /> - <g - id="g830" - transform="translate(0.35954582,-0.28763666)"> - <path - d="M 2,1 C 1.4477153,1 1,1.4477153 1,2 v 12 c 0,0.552285 0.4477153,1 1,1 h 12 c 0.552285,0 1,-0.447715 1,-1 V 2 C 15,1.4477153 14.552285,1 14,1 Z m 1,2 h 10 v 8 H 3 Z" - id="path2" - inkscape:connector-curvature="0" - style="fill:#e0e0e0;fill-opacity:0.99607999" - sodipodi:nodetypes="sssssssssccccc" /> - </g> - <g - aria-label="3D" - transform="scale(0.9167105,1.0908569)" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.12847996px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';letter-spacing:0px;word-spacing:0px;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:0.20321201" - id="text834"> - <path - d="m 5.8175194,8.9717502 q -0.2194689,0 -0.4633233,-0.032514 Q 5.1103417,8.9148508 4.8827442,8.86608 4.6551468,8.8173091 4.4681918,8.7604097 4.2812367,8.7035104 4.1755665,8.6547395 L 4.4112924,7.646808 q 0.2113405,0.089413 0.5364797,0.1950835 0.3332677,0.097542 0.8209765,0.097542 0.5608651,0 0.8209764,-0.2113404 0.2601114,-0.2113405 0.2601114,-0.5689936 0,-0.219469 -0.097542,-0.3657816 Q 6.6628814,6.6388764 6.5003118,6.5494632 6.3377422,6.4519214 6.1101447,6.4194075 5.8906758,6.3787651 5.6386929,6.3787651 H 5.167241 V 5.4033475 h 0.5364797 q 0.1788266,0 0.3413962,-0.032514 0.1706981,-0.032514 0.3007537,-0.1056703 0.1300557,-0.081285 0.203212,-0.2113404 0.081285,-0.1381842 0.081285,-0.3413962 0,-0.1544411 -0.065028,-0.2682398 Q 6.5003118,4.3303881 6.3946415,4.2572318 6.2970998,4.1840755 6.1589156,4.1515616 6.0288599,4.1109192 5.8906758,4.1109192 q -0.3495247,0 -0.6502784,0.1056702 Q 4.9477721,4.3222597 4.7039177,4.4767008 L 4.2731082,3.5906965 Q 4.4031639,3.5094117 4.573862,3.4199984 4.7526886,3.3305851 4.964029,3.2574288 5.1753695,3.1842725 5.4110954,3.1355016 q 0.2438544,-0.048771 0.5120943,-0.048771 0.4958373,0 0.8534904,0.1219272 0.3657816,0.1137987 0.6015075,0.3332677 0.2357259,0.2113405 0.3495246,0.5039657 0.1137987,0.2844968 0.1137987,0.625893 0,0.3332677 -0.186955,0.6502784 -0.186955,0.3088822 -0.5039657,0.4714518 0.4389379,0.1788266 0.6746638,0.5364797 0.2438544,0.3495246 0.2438544,0.8453619 0,0.3901671 -0.1300557,0.7234347 Q 7.808997,8.22393 7.5326287,8.4677844 7.2562604,8.7035104 6.825451,8.8416945 6.40277,8.9717502 5.8175194,8.9717502 Z" - style="fill:#e0e0e0;fill-opacity:0.99607843;stroke-width:0.20321201" - id="path836" /> - <path - d="m 10.502445,7.817506 q 0.08941,0.00813 0.203212,0.016257 0.121927,0 0.284497,0 0.951032,0 1.406227,-0.4795803 0.463323,-0.4795803 0.463323,-1.3249422 0,-0.8860044 -0.438938,-1.3411992 -0.438938,-0.4551949 -1.38997,-0.4551949 -0.130055,0 -0.26824,0.00813 -0.138184,0 -0.260111,0.016257 z M 14.16839,6.0292405 q 0,0.7315631 -0.227598,1.2761713 -0.227597,0.5446082 -0.650278,0.9022613 -0.414553,0.3576531 -1.01606,0.5364797 -0.601508,0.1788265 -1.349328,0.1788265 -0.341396,0 -0.796591,-0.032514 Q 9.6733402,8.86608 9.2344022,8.7766667 v -5.486724 q 0.438938,-0.081285 0.9103898,-0.1056702 0.47958,-0.032514 0.820976,-0.032514 0.723435,0 1.308686,0.1625696 0.593379,0.1625696 1.01606,0.5120943 0.422681,0.3495246 0.650278,0.8941328 0.227598,0.5446081 0.227598,1.3086853 z" - style="fill:#e0e0e0;fill-opacity:0.99607843;stroke-width:0.20321201" - id="path838" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".203212" transform="scale(.9167105 1.0908569)"><path d="m5.8175194 8.9717502q-.2194689 0-.4633233-.032514-.2438544-.0243854-.4714519-.0731562-.2275974-.0487709-.4145524-.1056703-.1869551-.0568993-.2926253-.1056702l.2357259-1.0079315q.2113405.089413.5364797.1950835.3332677.097542.8209765.097542.5608651 0 .8209764-.2113404.2601114-.2113405.2601114-.5689936 0-.219469-.097542-.3657816-.089413-.1544415-.2519826-.2438547-.1625696-.0975418-.3901671-.1300557-.2194689-.0406424-.4714518-.0406424h-.4714519v-.9754176h.5364797q.1788266 0 .3413962-.032514.1706981-.032514.3007537-.1056703.1300557-.081285.203212-.2113404.081285-.1381842.081285-.3413962 0-.1544411-.065028-.2682398-.0650278-.1137987-.1706981-.186955-.0975417-.0731563-.2357259-.1056702-.1300557-.0406424-.2682398-.0406424-.3495247 0-.6502784.1056702-.2926253.1056703-.5364797.2601114l-.4308095-.8860043q.1300557-.0812848.3007538-.1706981.1788266-.0894133.390167-.1625696.2113405-.0731563.4470664-.1219272.2438544-.048771.5120943-.048771.4958373 0 .8534904.1219272.3657816.1137987.6015075.3332677.2357259.2113405.3495246.5039657.1137987.2844968.1137987.625893 0 .3332677-.186955.6502784-.186955.3088822-.5039657.4714518.4389379.1788266.6746638.5364797.2438544.3495246.2438544.8453619 0 .3901671-.1300557.7234347-.1300557.3251393-.406424.5689937-.2763683.235726-.7071777.3739101-.422681.1300557-1.0079316.1300557z"/><path d="m10.502445 7.817506q.08941.00813.203212.016257.121927 0 .284497 0 .951032 0 1.406227-.4795803.463323-.4795803.463323-1.3249422 0-.8860044-.438938-1.3411992-.438938-.4551949-1.38997-.4551949-.130055 0-.26824.00813-.138184 0-.260111.016257zm3.665945-1.7882655q0 .7315631-.227598 1.2761713-.227597.5446082-.650278.9022613-.414553.3576531-1.01606.5364797-.601508.1788265-1.349328.1788265-.341396 0-.796591-.032514-.4551948-.0243853-.8941328-.1137986v-5.486724q.438938-.081285.9103898-.1056702.47958-.032514.820976-.032514.723435 0 1.308686.1625696.593379.1625696 1.01606.5120943.422681.3495246.650278.8941328.227598.5446081.227598 1.3086853z"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_texture_array.svg b/editor/icons/icon_texture_array.svg index 8297fc0f5d..4631b1449c 100644 --- a/editor/icons/icon_texture_array.svg +++ b/editor/icons/icon_texture_array.svg @@ -1,77 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_texture_array.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1526" - inkscape:window-height="766" - id="namedview8" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="8.3117238" - inkscape:cy="9.4909723" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <g - id="g830" - transform="translate(0.35954582,-0.28763666)"> - <path - d="M 2,1 C 1.4477153,1 1,1.4477153 1,2 v 12 c 0,0.552285 0.4477153,1 1,1 h 12 c 0.552285,0 1,-0.447715 1,-1 V 2 C 15,1.4477153 14.552285,1 14,1 Z m 1,2 h 10 v 8 H 3 Z" - id="path2" - inkscape:connector-curvature="0" - style="fill:#e0e0e0;fill-opacity:0.99607999" - sodipodi:nodetypes="sssssssssccccc" /> - </g> - <g - aria-label="[]" - transform="matrix(1.6197742,0,0,0.750929,-3.7231532,1.8329569)" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:8.29580784px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Bold';letter-spacing:0px;word-spacing:0px;fill:#e0e0e0;fill-opacity:0.99607843;stroke:none;stroke-width:0.2073952" - id="text834"> - <path - d="M 4.7302951,2.4553483 H 6.978459 V 3.4425495 H 5.9082998 V 9.4984892 H 6.978459 V 10.48569 H 4.7302951 Z" - style="fill:#e0e0e0;fill-opacity:0.99607843;stroke-width:0.2073952" - id="path862" - inkscape:connector-curvature="0" /> - <path - d="M 10.138643,10.48569 H 7.8904794 V 9.4984892 H 8.9606386 V 3.4425495 H 7.8904794 V 2.4553483 h 2.2481636 z" - style="fill:#e0e0e0;fill-opacity:0.99607843;stroke-width:0.2073952" - id="path864" - inkscape:connector-curvature="0" /> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2 1c-.5522847 0-1 .4477153-1 1v12c0 .552285.4477153 1 1 1h12c.552285 0 1-.447715 1-1v-12c0-.5522847-.447715-1-1-1zm1 2h10v8h-10z" fill-opacity=".99608" transform="translate(.359546 -.287637)"/><g fill-opacity=".996078" stroke-width=".207395" transform="matrix(1.6197742 0 0 .750929 -3.723153 1.832957)"><path d="m4.7302951 2.4553483h2.2481639v.9872012h-1.0701592v6.0559397h1.0701592v.9872008h-2.2481639z"/><path d="m10.138643 10.48569h-2.2481636v-.9872008h1.0701592v-6.0559397h-1.0701592v-.9872012h2.2481636z"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_texture_button.svg b/editor/icons/icon_texture_button.svg index 19f5e8d5c9..6e1d1b6436 100644 --- a/editor/icons/icon_texture_button.svg +++ b/editor/icons/icon_texture_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1v2h6v10h-4v2h6v-14h-8zm-5 1v3.1328l-1.4453-0.96484-1.1094 1.6641 3 2c0.3359 0.2239 0.77347 0.2239 1.1094 0l3-2-1.1094-1.6641-1.4453 0.96484v-3.1328h-2zm7 4v1h-1v1h-1v1h1v2h2 2v-2h-1v-2h-1v-1h-1zm-7.5 4c-0.831 0-1.5 0.669-1.5 1.5v0.5 1h-1v2h8v-2h-1v-1-0.5c0-0.831-0.669-1.5-1.5-1.5h-3z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1v2h6v10h-4v2h6v-14zm-5 1v3.1328l-1.4453-.96484-1.1094 1.6641 3 2c.3359.2239.77347.2239 1.1094 0l3-2-1.1094-1.6641-1.4453.96484v-3.1328zm7 4v1h-1v1h-1v1h1v2h2 2v-2h-1v-2h-1v-1zm-7.5 4c-.831 0-1.5.669-1.5 1.5v.5 1h-1v2h8v-2h-1v-1-.5c0-.831-.669-1.5-1.5-1.5z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_texture_progress.svg b/editor/icons/icon_texture_progress.svg index 03aa3965ba..5763fde840 100644 --- a/editor/icons/icon_texture_progress.svg +++ b/editor/icons/icon_texture_progress.svg @@ -1,8 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" fill="#a5efac"> -<path transform="translate(0 1036.4)" d="m3 3c-1.1046 0-2 0.89543-2 2v6c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-6c0-1.1046-0.89543-2-2-2zm0 2h10v6h-10z"/> -<rect x="4" y="1042.4" width="1" height="2"/> -<rect x="6" y="1043.4" width="1" height="3"/> -<rect x="8" y="1042.4" width="1" height="4"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#a5efac" transform="translate(0 -1036.4)"><path d="m3 3c-1.1046 0-2 .89543-2 2v6c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-6c0-1.1046-.89543-2-2-2zm0 2h10v6h-10z" transform="translate(0 1036.4)"/><path d="m4 1042.4h1v2h-1z"/><path d="m6 1043.4h1v3h-1z"/><path d="m8 1042.4h1v4h-1z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_texture_rect.svg b/editor/icons/icon_texture_rect.svg index 2dbbe7f247..1d1b5ed8f7 100644 --- a/editor/icons/icon_texture_rect.svg +++ b/editor/icons/icon_texture_rect.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h14v-14h-14zm2 2h10v10h-10v-10zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1h-1z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h14v-14zm2 2h10v10h-10zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-2h-1v-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_theme.svg b/editor/icons/icon_theme.svg index f44529c4cb..e16acbfb72 100644 --- a/editor/icons/icon_theme.svg +++ b/editor/icons/icon_theme.svg @@ -1,11 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-width="0"> -<path transform="translate(0 1036.4)" d="m6.7246 3c-0.52985 0.78935-0.96267 1.4021-1.3945 2h5.3398c-0.43187-0.59786-0.86468-1.2107-1.3945-2h-2.5508z" fill="#ffeb70"/> -<path transform="translate(0 1036.4)" d="m5.3301 5c-0.52617 0.72841-1.0198 1.4208-1.375 2h8.0898c-0.35516-0.57924-0.84883-1.2716-1.375-2h-5.3398z" fill="#9dff70"/> -<path transform="translate(0 1036.4)" d="m3.9551 7c-0.41451 0.67603-0.71534 1.3082-0.85547 2h9.8008c-0.14013-0.69181-0.44096-1.324-0.85547-2h-8.0898z" fill="#70ffb9"/> -<path transform="translate(0 1036.4)" d="m3.0996 9c-0.063989 0.3159-0.099609 0.64498-0.099609 1 0 0.34242 0.034776 0.67693 0.10156 1h9.7969c0.066786-0.32307 0.10156-0.65758 0.10156-1 0-0.35502-0.03562-0.6841-0.099609-1h-9.8008z" fill="#70deff"/> -<path transform="translate(0 1036.4)" d="m3.1016 11c0.15381 0.74405 0.48967 1.4159 0.93555 2h7.9258c0.44588-0.5841 0.78173-1.2559 0.93555-2h-9.7969z" fill="#9f70ff"/> -<path transform="translate(0 1036.4)" d="m4.0371 13c0.9218 1.2076 2.3612 2 3.9629 2s3.0411-0.79243 3.9629-2h-7.9258z" fill="#ff70ac"/> -<path transform="translate(0 1036.4)" d="m8 1c-0.45196 0.75327-0.87224 1.3994-1.2754 2h2.5508c-0.40315-0.6006-0.82343-1.2467-1.2754-2z" fill="#ff7070"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-width="0"><path d="m6.7246 3c-.52985.78935-.96267 1.4021-1.3945 2h5.3398c-.43187-.59786-.86468-1.2107-1.3945-2z" fill="#ffeb70"/><path d="m5.3301 5c-.52617.72841-1.0198 1.4208-1.375 2h8.0898c-.35516-.57924-.84883-1.2716-1.375-2z" fill="#9dff70"/><path d="m3.9551 7c-.41451.67603-.71534 1.3082-.85547 2h9.8008c-.14013-.69181-.44096-1.324-.85547-2h-8.0898z" fill="#70ffb9"/><path d="m3.0996 9c-.063989.3159-.099609.64498-.099609 1 0 .34242.034776.67693.10156 1h9.7969c.066786-.32307.10156-.65758.10156-1 0-.35502-.03562-.6841-.099609-1h-9.8008z" fill="#70deff"/><path d="m3.1016 11c.15381.74405.48967 1.4159.93555 2h7.9258c.44588-.5841.78173-1.2559.93555-2h-9.7969z" fill="#9f70ff"/><path d="m4.0371 13c.9218 1.2076 2.3612 2 3.9629 2s3.0411-.79243 3.9629-2z" fill="#ff70ac"/><path d="m8 1c-.45196.75327-.87224 1.3994-1.2754 2h2.5508c-.40315-.6006-.82343-1.2467-1.2754-2z" fill="#ff7070"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_thumbnail_wait.svg b/editor/icons/icon_thumbnail_wait.svg index c38ea1de0c..fe242e81fb 100644 --- a/editor/icons/icon_thumbnail_wait.svg +++ b/editor/icons/icon_thumbnail_wait.svg @@ -1,5 +1 @@ -<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -988.36)"> -<path transform="translate(0 988.36)" d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8h-48zm0 2h48c3.324 0 6 2.676 6 6v48c0 3.324-2.676 6-6 6h-48c-3.324 0-6-2.676-6-6v-48c0-3.324 2.676-6 6-6zm-0.013672 5.002a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l8 8a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-8-8a1 1 0 0 0 -0.7207 -0.29102zm48 0a1 1 0 0 0 -0.69336 0.29102l-8 8a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l8-8a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102zm-33.986 10.998a2.0002 2.0002 0 0 0 -0.37891 0.039062c-0.005702 0.001087-0.011894 8.19e-4 -0.017578 0.001954-0.01402 0.002798-0.027106 0.006677-0.041016 0.009765a2.0002 2.0002 0 0 0 -0.30859 0.095703c-0.024592 0.009869-0.048174 0.020446-0.072265 0.03125a2.0002 2.0002 0 0 0 -0.24609 0.13281c-0.021344 0.013452-0.043669 0.024834-0.064453 0.039062-0.008816 0.006036-0.016678 0.013359-0.025391 0.019532a2.0002 2.0002 0 0 0 -0.21484 0.17578c-0.0215 0.020231-0.04387 0.039386-0.064453 0.060547a2.0002 2.0002 0 0 0 -0.001953 0.001953 2.0002 2.0002 0 0 0 -0.18555 0.22461c-0.017788 0.024669-0.036063 0.048717-0.052734 0.074219a2.0002 2.0002 0 0 0 -0.14258 0.26562c-0.013621 0.029909-0.026892 0.059158-0.039063 0.089844a2.0002 2.0002 0 0 0 -0.09375 0.30078c-0.004203 0.018931-0.008053 0.037509-0.011719 0.056641a2.0002 2.0002 0 0 0 -0.039062 0.38086c0 3 1.9339 5.2454 3.7461 7.3164 1.5217 1.7392 2.8322 3.2888 3.75 4.6836-0.91778 1.3948-2.2283 2.9444-3.75 4.6836-1.8122 2.071-3.7461 4.3164-3.7461 7.3164a2.0002 2.0002 0 0 0 0.041016 0.4043 2.0002 2.0002 0 0 0 0.10547 0.3418c0.008774 0.021862 0.017831 0.042985 0.027344 0.064453a2.0002 2.0002 0 0 0 0.14648 0.27344c0.010017 0.015513 0.018867 0.031664 0.029297 0.046875l0.001953 0.001953a2.0002 2.0002 0 0 0 0.19336 0.23633c0.020231 0.0215 0.039386 0.04387 0.060547 0.064453a2.0002 2.0002 0 0 0 0.001953 0.001953 2.0002 2.0002 0 0 0 0.23438 0.19336c0.021387 0.01522 0.042447 0.030536 0.064453 0.044922a2.0002 2.0002 0 0 0 0.27734 0.15039c0.019743 0.008822 0.038513 0.019147 0.058594 0.027343a2.0002 2.0002 0 0 0 0.33789 0.10352c0.005331 0.001131 0.010278 0.002818 0.015625 0.003906a2.0002 2.0002 0 0 0 0.009766 0 2.0002 2.0002 0 0 0 0.39453 0.041016h20a2.0002 2.0002 0 0 0 0.4043 -0.041016 2.0002 2.0002 0 0 0 0.375 -0.11523 2.0002 2.0002 0 0 0 0.29297 -0.1582c0.018831-0.011984 0.038248-0.022566 0.05664-0.035156a2.0002 2.0002 0 0 0 0.021485 -0.015625 2.0002 2.0002 0 0 0 0.23633 -0.19531c0.013296-0.012808 0.028079-0.023939 0.041015-0.037109a2.0002 2.0002 0 0 0 0.20508 -0.25c0.012127-0.017168 0.025518-0.033217 0.03711-0.050782a2.0002 2.0002 0 0 0 0.15234 -0.28125c0.01106-0.024605 0.021165-0.049089 0.03125-0.074218a2.0002 2.0002 0 0 0 0.097656 -0.31445c0.003563-0.016291 0.0066-0.03239 0.009766-0.048829a2.0002 2.0002 0 0 0 0.039062 -0.38281c0-3-1.9339-5.2454-3.7461-7.3164-1.5217-1.7392-2.8322-3.2888-3.75-4.6836 0.91778-1.3948 2.2283-2.9444 3.75-4.6836 1.8122-2.071 3.7461-4.3164 3.7461-7.3164a2.0002 2.0002 0 0 0 -0.041016 -0.4043v-0.001953a2.0002 2.0002 0 0 0 -0.10156 -0.32617c-0.011965-0.03044-0.023719-0.060163-0.03711-0.089844a2.0002 2.0002 0 0 0 -0.13476 -0.25c-0.011984-0.018831-0.022566-0.038248-0.035156-0.05664a2.0002 2.0002 0 0 0 -0.023438 -0.03125 2.0002 2.0002 0 0 0 -0.1582 -0.19336c-0.025026-0.027154-0.049686-0.054353-0.076172-0.080078a2.0002 2.0002 0 0 0 -0.027344 -0.02539 2.0002 2.0002 0 0 0 -0.18945 -0.1543c-0.031037-0.022641-0.061384-0.04555-0.09375-0.066407l-0.001953-0.001953a2.0002 2.0002 0 0 0 -0.24219 -0.13086c-0.031326-0.014467-0.061564-0.030098-0.09375-0.042969a2.0002 2.0002 0 0 0 -0.29883 -0.091797c-0.021554-0.004877-0.042636-0.009492-0.064453-0.013672a2.0002 2.0002 0 0 0 -0.38086 -0.039062h-20zm3.1758 4h13.648c-0.4756 0.8814-0.611 1.5782-1.5781 2.6836-1.6878 1.929-3.7966 3.9449-5.0352 6.4219a2.0002 2.0002 0 0 0 -0.20898 0.89453h-0.003906a2.0002 2.0002 0 0 0 -0.20898 -0.89453c-1.2385-2.477-3.3473-4.4929-5.0352-6.4219-0.96713-1.1054-1.1025-1.8022-1.5781-2.6836zm-9.1895 25.002a1 1 0 0 0 -0.69336 0.29102l-8 8a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l8-8a1 1 0 0 0 0 -1.4141 1 1 0 0 0 -0.7207 -0.29102zm32 0a1 1 0 0 0 -0.69336 0.29102 1 1 0 0 0 0 1.4141l8 8a1 1 0 0 0 1.4141 0 1 1 0 0 0 0 -1.4141l-8-8a1 1 0 0 0 -0.7207 -0.29102z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="64" viewBox="0 0 64 64" width="64" xmlns="http://www.w3.org/2000/svg"><path d="m8 0c-4.432 0-8 3.568-8 8v48c0 4.432 3.568 8 8 8h48c4.432 0 8-3.568 8-8v-48c0-4.432-3.568-8-8-8zm0 2h48c3.324 0 6 2.676 6 6v48c0 3.324-2.676 6-6 6h-48c-3.324 0-6-2.676-6-6v-48c0-3.324 2.676-6 6-6zm-.013672 5.002a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l8 8a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-8-8a1 1 0 0 0 -.7207-.29102zm48 0a1 1 0 0 0 -.69336.29102l-8 8a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l8-8a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102zm-33.986 10.998a2.0002 2.0002 0 0 0 -.37891.039062c-.005702.001087-.011894.000819-.017578.001954-.01402.002798-.027106.006677-.041016.009765a2.0002 2.0002 0 0 0 -.30859.095703c-.024592.009869-.048174.020446-.072265.03125a2.0002 2.0002 0 0 0 -.24609.13281c-.021344.013452-.043669.024834-.064453.039062-.008816.006036-.016678.013359-.025391.019532a2.0002 2.0002 0 0 0 -.21484.17578c-.0215.020231-.04387.039386-.064453.060547a2.0002 2.0002 0 0 0 -.001953.001953 2.0002 2.0002 0 0 0 -.18555.22461c-.017788.024669-.036063.048717-.052734.074219a2.0002 2.0002 0 0 0 -.14258.26562c-.013621.029909-.026892.059158-.039063.089844a2.0002 2.0002 0 0 0 -.09375.30078c-.004203.018931-.008053.037509-.011719.056641a2.0002 2.0002 0 0 0 -.039062.38086c0 3 1.9339 5.2454 3.7461 7.3164 1.5217 1.7392 2.8322 3.2888 3.75 4.6836-.91778 1.3948-2.2283 2.9444-3.75 4.6836-1.8122 2.071-3.7461 4.3164-3.7461 7.3164a2.0002 2.0002 0 0 0 .041016.4043 2.0002 2.0002 0 0 0 .10547.3418c.008774.021862.017831.042985.027344.064453a2.0002 2.0002 0 0 0 .14648.27344c.010017.015513.018867.031664.029297.046875l.001953.001953a2.0002 2.0002 0 0 0 .19336.23633c.020231.0215.039386.04387.060547.064453a2.0002 2.0002 0 0 0 .001953.001953 2.0002 2.0002 0 0 0 .23438.19336c.021387.01522.042447.030536.064453.044922a2.0002 2.0002 0 0 0 .27734.15039c.019743.008822.038513.019147.058594.027343a2.0002 2.0002 0 0 0 .33789.10352c.005331.001131.010278.002818.015625.003906a2.0002 2.0002 0 0 0 .009766 0 2.0002 2.0002 0 0 0 .39453.041016h20a2.0002 2.0002 0 0 0 .4043-.041016 2.0002 2.0002 0 0 0 .375-.11523 2.0002 2.0002 0 0 0 .29297-.1582c.018831-.011984.038248-.022566.05664-.035156a2.0002 2.0002 0 0 0 .021485-.015625 2.0002 2.0002 0 0 0 .23633-.19531c.013296-.012808.028079-.023939.041015-.037109a2.0002 2.0002 0 0 0 .20508-.25c.012127-.017168.025518-.033217.03711-.050782a2.0002 2.0002 0 0 0 .15234-.28125c.01106-.024605.021165-.049089.03125-.074218a2.0002 2.0002 0 0 0 .097656-.31445c.003563-.016291.0066-.03239.009766-.048829a2.0002 2.0002 0 0 0 .039062-.38281c0-3-1.9339-5.2454-3.7461-7.3164-1.5217-1.7392-2.8322-3.2888-3.75-4.6836.91778-1.3948 2.2283-2.9444 3.75-4.6836 1.8122-2.071 3.7461-4.3164 3.7461-7.3164a2.0002 2.0002 0 0 0 -.041016-.4043v-.001953a2.0002 2.0002 0 0 0 -.10156-.32617c-.011965-.03044-.023719-.060163-.03711-.089844a2.0002 2.0002 0 0 0 -.13476-.25c-.011984-.018831-.022566-.038248-.035156-.05664a2.0002 2.0002 0 0 0 -.023438-.03125 2.0002 2.0002 0 0 0 -.1582-.19336c-.025026-.027154-.049686-.054353-.076172-.080078a2.0002 2.0002 0 0 0 -.027344-.02539 2.0002 2.0002 0 0 0 -.18945-.1543c-.031037-.022641-.061384-.04555-.09375-.066407l-.001953-.001953a2.0002 2.0002 0 0 0 -.24219-.13086c-.031326-.014467-.061564-.030098-.09375-.042969a2.0002 2.0002 0 0 0 -.29883-.091797c-.021554-.004877-.042636-.009492-.064453-.013672a2.0002 2.0002 0 0 0 -.38086-.039062h-20zm3.1758 4h13.648c-.4756.8814-.611 1.5782-1.5781 2.6836-1.6878 1.929-3.7966 3.9449-5.0352 6.4219a2.0002 2.0002 0 0 0 -.20898.89453h-.003906a2.0002 2.0002 0 0 0 -.20898-.89453c-1.2385-2.477-3.3473-4.4929-5.0352-6.4219-.96713-1.1054-1.1025-1.8022-1.5781-2.6836zm-9.1895 25.002a1 1 0 0 0 -.69336.29102l-8 8a1 1 0 0 0 0 1.4141 1 1 0 0 0 1.4141 0l8-8a1 1 0 0 0 0-1.4141 1 1 0 0 0 -.7207-.29102zm32 0a1 1 0 0 0 -.69336.29102 1 1 0 0 0 0 1.4141l8 8a1 1 0 0 0 1.4141 0 1 1 0 0 0 0-1.4141l-8-8a1 1 0 0 0 -.7207-.29102z" fill="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tile_map.svg b/editor/icons/icon_tile_map.svg index 826b515025..afdaeea7e8 100644 --- a/editor/icons/icon_tile_map.svg +++ b/editor/icons/icon_tile_map.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-12 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-12 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-12 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-12 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tile_set.svg b/editor/icons/icon_tile_set.svg index 935afea397..0948e6dae1 100644 --- a/editor/icons/icon_tile_set.svg +++ b/editor/icons/icon_tile_set.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm5 1v7h5c0.55228 0 1-0.44772 1-1v-5c0-0.55228-0.44772-1-1-1v4l-1-1-1 1v-4zm-8 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm3 0v2h2v-2zm-12 3v2h2v-2zm3 0v2h2v-2zm5 1v7h5c.55228 0 1-.44772 1-1v-5c0-.55228-.44772-1-1-1v4l-1-1-1 1v-4zm-8 2v2h2v-2zm3 0v2h2v-2zm-3 3v2h2v-2zm3 0v2h2v-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_time.svg b/editor/icons/icon_time.svg index d50c9570b3..eb411c6858 100644 --- a/editor/icons/icon_time.svg +++ b/editor/icons/icon_time.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg6" - sodipodi:docname="icon_time.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="836" - inkscape:window-height="480" - id="namedview8" - showgrid="false" - inkscape:zoom="7.375" - inkscape:cx="4.4999435" - inkscape:cy="13.04848" - inkscape:window-x="744" - inkscape:window-y="280" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g4"> - <g - id="g8" - style="fill:#e0e0e0;fill-opacity:1" - transform="matrix(0.0279396,0,0,0.02755726,0.91401567,1037.1343)"> - <g - id="g6" - style="fill:#e0e0e0;fill-opacity:1"> - <path - d="M 276.193,58.507 V 40.389 h 14.578 c 11.153,0 20.194,-9.042 20.194,-20.194 C 310.965,9.043 301.923,0 290.771,0 h -69.544 c -11.153,0 -20.194,9.042 -20.194,20.194 0,11.152 9.042,20.194 20.194,20.194 h 14.578 V 58.506 C 119.952,68.76 28.799,166.327 28.799,284.799 28.799,410.078 130.721,512 256,512 381.279,512 483.201,410.078 483.201,284.799 483.2,166.327 392.046,68.76 276.193,58.507 Z m 0,412.009 v -20.124 c 0,-11.153 -9.042,-20.194 -20.194,-20.194 -11.153,0 -20.194,9.042 -20.194,20.194 v 20.124 C 148.895,461.131 79.668,391.902 70.283,304.994 h 20.124 c 11.153,0 20.194,-9.042 20.194,-20.194 0,-11.152 -9.042,-20.194 -20.194,-20.194 H 70.282 c 9.385,-86.91 78.614,-156.137 165.522,-165.523 v 20.124 c 0,11.153 9.042,20.194 20.194,20.194 11.153,0 20.194,-9.042 20.194,-20.194 V 99.081 c 86.91,9.385 156.137,78.614 165.522,165.523 H 421.59 c -11.153,0 -20.194,9.042 -20.194,20.194 0,11.152 9.042,20.194 20.194,20.194 h 20.126 c -9.385,86.911 -78.613,156.14 -165.523,165.524 z" - id="path2" - style="fill:#e0e0e0;fill-opacity:1" - inkscape:connector-curvature="0" /> - <path - d="m 317.248,194.99 -58.179,58.18 c -1.011,-0.097 -2.034,-0.151 -3.071,-0.151 -17.552,0 -31.779,14.229 -31.779,31.779 0,17.552 14.228,31.779 31.779,31.779 17.551,0 31.779,-14.229 31.779,-31.779 0,-1.037 -0.054,-2.06 -0.151,-3.07 l 58.178,-58.18 c 7.887,-7.885 7.887,-20.672 0,-28.559 -7.882,-7.886 -20.669,-7.886 -28.556,0.001 z" - id="path4" - style="fill:#e0e0e0;fill-opacity:1" - inkscape:connector-curvature="0" /> - </g> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="matrix(.0279396 0 0 .02755726 .914016 .7343)"><path d="m276.193 58.507v-18.118h14.578c11.153 0 20.194-9.042 20.194-20.194s-9.042-20.195-20.194-20.195h-69.544c-11.153 0-20.194 9.042-20.194 20.194s9.042 20.194 20.194 20.194h14.578v18.118c-115.853 10.254-207.006 107.821-207.006 226.293 0 125.279 101.922 227.201 227.201 227.201s227.201-101.922 227.201-227.201c-.001-118.472-91.155-216.039-207.008-226.292zm0 412.009v-20.124c0-11.153-9.042-20.194-20.194-20.194-11.153 0-20.194 9.042-20.194 20.194v20.124c-86.91-9.385-156.137-78.614-165.522-165.522h20.124c11.153 0 20.194-9.042 20.194-20.194s-9.042-20.194-20.194-20.194h-20.125c9.385-86.91 78.614-156.137 165.522-165.523v20.124c0 11.153 9.042 20.194 20.194 20.194 11.153 0 20.194-9.042 20.194-20.194v-20.126c86.91 9.385 156.137 78.614 165.522 165.523h-20.124c-11.153 0-20.194 9.042-20.194 20.194s9.042 20.194 20.194 20.194h20.126c-9.385 86.911-78.613 156.14-165.523 165.524z"/><path d="m317.248 194.99-58.179 58.18c-1.011-.097-2.034-.151-3.071-.151-17.552 0-31.779 14.229-31.779 31.779 0 17.552 14.228 31.779 31.779 31.779s31.779-14.229 31.779-31.779c0-1.037-.054-2.06-.151-3.07l58.178-58.18c7.887-7.885 7.887-20.672 0-28.559-7.882-7.886-20.669-7.886-28.556.001z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_timer.svg b/editor/icons/icon_timer.svg index 6bf4a29158..d445eeb1dd 100644 --- a/editor/icons/icon_timer.svg +++ b/editor/icons/icon_timer.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a1.0001 1.0001 0 0 0 -0.38672 0.078125 1.0001 1.0001 0 0 0 -0.0019531 0c-0.0022762 9.545e-4 -0.0035918 0.0029354-0.0058593 0.0039062a1.0001 1.0001 0 0 0 -0.31055 0.20898c-0.0012857 0.0012787-0.0026276 0.0026206-0.0039063 0.0039063a1.0001 1.0001 0 0 0 -0.20508 0.30469c-0.0029915 0.0068502-0.0069239 0.012601-0.0097656 0.019531a1.0001 1.0001 0 0 0 -0.076172 0.38086c0 1.5 0.96697 2.6247 1.873 3.6602 0.76081 0.8695 1.4161 1.6425 1.875 2.3398-0.45889 0.6974-1.1141 1.4723-1.875 2.3418-0.90608 1.0355-1.873 2.1582-1.873 3.6582a1.0001 1.0001 0 0 0 0.078125 0.38867v0.001953c9.292e-4 0.002204 0.0029617 0.003663 0.0039062 0.005859a1.0001 1.0001 0 0 0 0.20898 0.30664c0.0010185 0.001027 0.0028834 0.004836 0.0039063 0.005859a1.0001 1.0001 0 0 0 0.30078 0.20312c0.0093182 0.004119 0.017877 0.007879 0.027344 0.011719a1.0001 1.0001 0 0 0 0.37695 0.076172h10a1.0001 1.0001 0 0 0 0.375 -0.074219c0.010174-0.0041 0.019294-0.009251 0.029297-0.013672a1.0001 1.0001 0 0 0 0.29297 -0.19922c0.004786-0.004679 0.00898-0.008899 0.013672-0.013672a1.0001 1.0001 0 0 0 0.20117 -0.29492c0.004119-0.009318 0.007879-0.017877 0.011719-0.027344a1.0001 1.0001 0 0 0 0.076172 -0.37695c0-1.5-0.96697-2.6227-1.873-3.6582-0.76087-0.8695-1.4161-1.6444-1.875-2.3418 0.4589-0.6973 1.1142-1.4703 1.875-2.3398 0.90608-1.0355 1.873-2.1602 1.873-3.6602a1.0001 1.0001 0 0 0 -0.078125 -0.39062 1.0001 1.0001 0 0 0 -0.21484 -0.31641 1.0001 1.0001 0 0 0 -0.31055 -0.21094 1.0001 1.0001 0 0 0 -0.011718 -0.0058593 1.0001 1.0001 0 0 0 -0.38477 -0.076172h-10zm1.5879 2h6.8242c-0.2378 0.4408-0.3055 0.7892-0.78906 1.3418-0.84392 0.9645-1.8983 1.9723-2.5176 3.2109a1.0001 1.0001 0 0 0 -0.10547 0.44727 1.0001 1.0001 0 0 0 -0.10547 -0.44727c-0.61926-1.2386-1.6737-2.2464-2.5176-3.2109-0.48356-0.5526-0.55126-0.901-0.78906-1.3418z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a1.0001 1.0001 0 0 0 -.38672.078125 1.0001 1.0001 0 0 0 -.0019531 0c-.0022762.0009545-.0035918.0029354-.0058593.0039062a1.0001 1.0001 0 0 0 -.31055.20898c-.0012857.0012787-.0026276.0026206-.0039063.0039063a1.0001 1.0001 0 0 0 -.20508.30469c-.0029915.0068502-.0069239.012601-.0097656.019531a1.0001 1.0001 0 0 0 -.076172.38086c0 1.5.96697 2.6247 1.873 3.6602.76081.8695 1.4161 1.6425 1.875 2.3398-.45889.6974-1.1141 1.4723-1.875 2.3418-.90608 1.0355-1.873 2.1582-1.873 3.6582a1.0001 1.0001 0 0 0 .078125.38867v.001953c.0009292.002204.0029617.003663.0039062.005859a1.0001 1.0001 0 0 0 .20898.30664c.0010185.001027.0028834.004836.0039063.005859a1.0001 1.0001 0 0 0 .30078.20312c.0093182.004119.017877.007879.027344.011719a1.0001 1.0001 0 0 0 .37695.076172h10a1.0001 1.0001 0 0 0 .375-.074219c.010174-.0041.019294-.009251.029297-.013672a1.0001 1.0001 0 0 0 .29297-.19922c.004786-.004679.00898-.008899.013672-.013672a1.0001 1.0001 0 0 0 .20117-.29492c.004119-.009318.007879-.017877.011719-.027344a1.0001 1.0001 0 0 0 .076172-.37695c0-1.5-.96697-2.6227-1.873-3.6582-.76087-.8695-1.4161-1.6444-1.875-2.3418.4589-.6973 1.1142-1.4703 1.875-2.3398.90608-1.0355 1.873-2.1602 1.873-3.6602a1.0001 1.0001 0 0 0 -.078125-.39062 1.0001 1.0001 0 0 0 -.21484-.31641 1.0001 1.0001 0 0 0 -.31055-.21094 1.0001 1.0001 0 0 0 -.011718-.0058593 1.0001 1.0001 0 0 0 -.38477-.076172h-10zm1.5879 2h6.8242c-.2378.4408-.3055.7892-.78906 1.3418-.84392.9645-1.8983 1.9723-2.5176 3.2109a1.0001 1.0001 0 0 0 -.10547.44727 1.0001 1.0001 0 0 0 -.10547-.44727c-.61926-1.2386-1.6737-2.2464-2.5176-3.2109-.48356-.5526-.55126-.901-.78906-1.3418z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_add_node.svg b/editor/icons/icon_tool_add_node.svg index a4ff4d08a0..71599c0b0d 100644 --- a/editor/icons/icon_tool_add_node.svg +++ b/editor/icons/icon_tool_add_node.svg @@ -1,80 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_tool_add_node.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1516" - inkscape:window-height="747" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <g - transform="translate(-26.001 -9.8683)" - id="g4"> - <path - style="fill:#e0e0e0;fill-opacity:1" - d="m 27.917081,1047.5557 c -0.422624,0 -0.763672,0.3411 -0.763672,0.7637 v 11.8301 c 0,0.4226 0.341048,0.7637 0.763672,0.7637 h 12.507813 c 0.422624,0 0.761719,-0.3411 0.761719,-0.7637 v -11.8301 c 0,-0.4226 -0.339095,-0.7637 -0.761719,-0.7637 z m 1.898438,1.6954 h 8.642578 c 0.422624,0 0.763672,0.341 0.763672,0.7636 v 8.5078 c 0,0.4227 -0.341048,0.7618 -0.763672,0.7618 h -8.642578 c -0.422625,0 -0.763672,-0.3391 -0.763672,-0.7618 v -8.5078 c 0,-0.4226 0.341047,-0.7636 0.763672,-0.7636 z" - id="rect821" - inkscape:connector-curvature="0" /> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect826" - width="7.7966104" - height="2.3728814" - x="30.20439" - y="1052.9802" - ry="0.76286" /> - <rect - style="fill:#e0e0e0;fill-opacity:1;stroke-width:0.88253576" - id="rect828" - width="2.3728814" - height="7.5254235" - x="32.916256" - y="1050.3361" - ry="0.72997814" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-26.001 -1046.2683)"><path d="m27.917081 1047.5557c-.422624 0-.763672.3411-.763672.7637v11.8301c0 .4226.341048.7637.763672.7637h12.507813c.422624 0 .761719-.3411.761719-.7637v-11.8301c0-.4226-.339095-.7637-.761719-.7637zm1.898438 1.6954h8.642578c.422624 0 .763672.341.763672.7636v8.5078c0 .4227-.341048.7618-.763672.7618h-8.642578c-.422625 0-.763672-.3391-.763672-.7618v-8.5078c0-.4226.341047-.7636.763672-.7636z"/><rect height="2.372881" ry=".76286" width="7.79661" x="30.20439" y="1052.9802"/><rect height="7.525424" ry=".729978" stroke-width=".882536" width="2.372881" x="32.916256" y="1050.3361"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_button.svg b/editor/icons/icon_tool_button.svg index 4f0c3797f8..98a41d2a08 100644 --- a/editor/icons/icon_tool_button.svg +++ b/editor/icons/icon_tool_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m11 1.1738c-1.1979 0.4235-1.999 1.5557-2 2.8262 9.552e-4 1.2705 0.80214 2.4027 2 2.8262v7.1738c0 0.554 0.446 1 1 1s1-0.446 1-1v-7.1758c1.1972-0.4232 1.9982-1.5544 2-2.8242-0.0018-1.2698-0.80282-2.401-2-2.8242v2.8242c0 0.5523-0.44772 1-1 1s-1-0.4477-1-1zm-7 1.8262v3.1328l-1.4453-0.96484-1.1094 1.6641 3 2c0.3359 0.22389 0.77347 0.22389 1.1094 0l3-2-1.1094-1.6641-1.4453 0.96484v-3.1328zm-0.5 8c-0.831 0-1.5 0.669-1.5 1.5v0.5h-1v2h8v-2h-1v-0.5c0-0.831-0.669-1.5-1.5-1.5z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m11 1.1738c-1.1979.4235-1.999 1.5557-2 2.8262.0009552 1.2705.80214 2.4027 2 2.8262v7.1738c0 .554.446 1 1 1s1-.446 1-1v-7.1758c1.1972-.4232 1.9982-1.5544 2-2.8242-.0018-1.2698-.80282-2.401-2-2.8242v2.8242c0 .5523-.44772 1-1 1s-1-.4477-1-1zm-7 1.8262v3.1328l-1.4453-.96484-1.1094 1.6641 3 2c.3359.22389.77347.22389 1.1094 0l3-2-1.1094-1.6641-1.4453.96484v-3.1328zm-.5 8c-.831 0-1.5.669-1.5 1.5v.5h-1v2h8v-2h-1v-.5c0-.831-.669-1.5-1.5-1.5z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_connect.svg b/editor/icons/icon_tool_connect.svg index 91d5893163..321f68654a 100644 --- a/editor/icons/icon_tool_connect.svg +++ b/editor/icons/icon_tool_connect.svg @@ -1,72 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_tool_connect.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1516" - inkscape:window-height="747" - id="namedview10" - showgrid="false" - inkscape:zoom="3.6875" - inkscape:cx="8.5909556" - inkscape:cy="7.8012075" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <g - transform="translate(-26.001 -9.8683)" - id="g4"> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect849" - width="14.305085" - height="2.1694915" - x="26.766621" - y="1053.1389" - ry="0.76286" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1.16725671px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 30.596131,1046.927 v 14.8861 l 8.228847,-7.5722 z" - id="path853" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" transform="translate(-26.001 -1046.2683)"><rect height="2.169492" ry=".76286" width="14.305085" x="26.766621" y="1053.1389"/><path d="m30.596131 1046.927v14.8861l8.228847-7.5722z"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_move.svg b/editor/icons/icon_tool_move.svg index 79fd083669..a02296fed6 100644 --- a/editor/icons/icon_tool_move.svg +++ b/editor/icons/icon_tool_move.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7.9844 1.002a1.0001 1.0001 0 0 0 -0.69141 0.29102l-2 2 1.4141 1.4141 1.293-1.293 1.293 1.293 1.4141-1.4141-2-2a1.0001 1.0001 0 0 0 -0.72266 -0.29102zm-4.6914 4.291l-2 2a1.0001 1.0001 0 0 0 0 1.4141l2 2 1.4141-1.4141-1.293-1.293 1.293-1.293-1.4141-1.4141zm9.4141 0l-1.4141 1.4141 1.293 1.293-1.293 1.293 1.4141 1.4141 2-2a1.0001 1.0001 0 0 0 0 -1.4141l-2-2zm-4.707 0.70703a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-1.293 5.293l-1.4141 1.4141 2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2-1.4141-1.4141-1.293 1.293-1.293-1.293z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.9844 1.002a1.0001 1.0001 0 0 0 -.69141.29102l-2 2 1.4141 1.4141 1.293-1.293 1.293 1.293 1.4141-1.4141-2-2a1.0001 1.0001 0 0 0 -.72266-.29102zm-4.6914 4.291-2 2a1.0001 1.0001 0 0 0 0 1.4141l2 2 1.4141-1.4141-1.293-1.293 1.293-1.293-1.4141-1.4141zm9.4141 0-1.4141 1.4141 1.293 1.293-1.293 1.293 1.4141 1.4141 2-2a1.0001 1.0001 0 0 0 0-1.4141l-2-2zm-4.707.70703a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-1.293 5.293-1.4141 1.4141 2 2a1.0001 1.0001 0 0 0 1.4141 0l2-2-1.4141-1.4141-1.293 1.293-1.293-1.293z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_pan.svg b/editor/icons/icon_tool_pan.svg index 4c4866b999..e195542687 100644 --- a/editor/icons/icon_tool_pan.svg +++ b/editor/icons/icon_tool_pan.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m10 1a1 1 0 0 0 -1 1v6h-1v-5a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1v8 0.033203l-2.4746-1.8086c-0.52015-0.3803-1.1948-0.4556-1.6504 0-0.45566 0.4556-0.45561 1.1948 0 1.6504l4.125 4.125h6a2 2 0 0 0 2 -2v-5-4a1 1 0 0 0 -1 -1 1 1 0 0 0 -1 1v4h-1v-6a1 1 0 0 0 -1 -1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10 1a1 1 0 0 0 -1 1v6h-1v-5a1 1 0 0 0 -1-1 1 1 0 0 0 -1 1v8 .033203l-2.4746-1.8086c-.52015-.3803-1.1948-.4556-1.6504 0-.45566.4556-.45561 1.1948 0 1.6504l4.125 4.125h6a2 2 0 0 0 2-2v-5-4a1 1 0 0 0 -1-1 1 1 0 0 0 -1 1v4h-1v-6a1 1 0 0 0 -1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_rotate.svg b/editor/icons/icon_tool_rotate.svg index 0a5c0fc340..e25b08cd07 100644 --- a/editor/icons/icon_tool_rotate.svg +++ b/editor/icons/icon_tool_rotate.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8.0879 1.002a7 7 0 0 0 -0.30469 0.0019531 7 7 0 0 0 -0.69727 0.056641 7 7 0 0 0 -5.9512 5.5742 7 7 0 0 0 1.9707 6.3652h-1.1055v2h4a1.0001 1.0001 0 0 0 0.9707 -1.2422l-1-4-1.9414 0.48633 0.28125 1.1211a5 5 0 0 1 -1.3105 -3.3652 5 5 0 0 1 5 -5 5 5 0 0 1 5 5 5 5 0 0 1 -1.4668 3.5332l1.416 1.416a7 7 0 0 0 1.3281 -8.0449 7 7 0 0 0 -6.1895 -3.9023zm-0.087891 4.998a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2z" fill="#e0e0e0" fill-opacity=".99608" stroke-width="0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8.0879 1.002a7 7 0 0 0 -.30469.0019531 7 7 0 0 0 -.69727.056641 7 7 0 0 0 -5.9512 5.5742 7 7 0 0 0 1.9707 6.3652h-1.1055v2h4a1.0001 1.0001 0 0 0 .9707-1.2422l-1-4-1.9414.48633.28125 1.1211a5 5 0 0 1 -1.3105-3.3652 5 5 0 0 1 5-5 5 5 0 0 1 5 5 5 5 0 0 1 -1.4668 3.5332l1.416 1.416a7 7 0 0 0 1.3281-8.0449 7 7 0 0 0 -6.1895-3.9023zm-.087891 4.998a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_scale.svg b/editor/icons/icon_tool_scale.svg index 3d771651bd..8fc1527296 100644 --- a/editor/icons/icon_tool_scale.svg +++ b/editor/icons/icon_tool_scale.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m9 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2.5859l-1.293 1.293 1.4141 1.4141 1.293-1.293v2.5859a1 1 0 0 0 1 1 1 1 0 0 0 1 -1v-5a1.0001 1.0001 0 0 0 -1 -1h-5zm-1 5a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-6 2a1 1 0 0 0 -1 1v5a1.0001 1.0001 0 0 0 1 1h5a1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1h-2.5859l1.293-1.293-1.4141-1.4141-1.293 1.293v-2.5859a1 1 0 0 0 -1 -1z" fill="#e0e0e0" fill-opacity=".99608" stroke-width="0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m9 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1h2.5859l-1.293 1.293 1.4141 1.4141 1.293-1.293v2.5859a1 1 0 0 0 1 1 1 1 0 0 0 1-1v-5a1.0001 1.0001 0 0 0 -1-1zm-1 5a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-6 2a1 1 0 0 0 -1 1v5a1.0001 1.0001 0 0 0 1 1h5a1 1 0 0 0 1-1 1 1 0 0 0 -1-1h-2.5859l1.293-1.293-1.4141-1.4141-1.293 1.293v-2.5859a1 1 0 0 0 -1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_select.svg b/editor/icons/icon_tool_select.svg index fc8931cd0e..4285b3181b 100644 --- a/editor/icons/icon_tool_select.svg +++ b/editor/icons/icon_tool_select.svg @@ -1,7 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<g transform="translate(-26.001 -9.8683)"> -<path d="m40.001 1053.2-12-4.9365 4.9365 12 1.4207-4.2301 2.8254 2.8252 1.4127-1.4127-2.8254-2.8252z" fill="#e0e0e0"/> -</g> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m40.001 1053.2-12-4.9365 4.9365 12 1.4207-4.2301 2.8254 2.8252 1.4127-1.4127-2.8254-2.8252z" fill="#e0e0e0" transform="translate(-26.001 -1046.2683)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tool_triangle.svg b/editor/icons/icon_tool_triangle.svg index 5696008767..17ce12265e 100644 --- a/editor/icons/icon_tool_triangle.svg +++ b/editor/icons/icon_tool_triangle.svg @@ -1,82 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_tool_triangle.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1204" - inkscape:window-height="703" - id="namedview10" - showgrid="false" - inkscape:zoom="29.5" - inkscape:cx="8.0650451" - inkscape:cy="7.0341257" - inkscape:window-x="542" - inkscape:window-y="205" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(0 -1036.4)" - id="g6"> - <g - transform="translate(-26.001 -9.8683)" - id="g4"> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 27.695915,1056.3022 c 0,0 7.457627,-8.0678 7.118644,-7.8644 -0.338983,0.2034 5.830509,11.7288 5.830509,11.7288 z" - id="path821" - inkscape:connector-curvature="0" /> - <circle - style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path825" - cx="34.662014" - cy="1048.5903" - r="1.607564" /> - <circle - style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path825-3" - cx="39.933205" - cy="1059.6581" - r="1.607564" /> - <circle - style="fill:#4b4b4b;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.51200002;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="path825-3-6" - cx="28.17049" - cy="1056.2683" - r="1.607564" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-26.001 -1046.2683)"><path d="m27.695915 1056.3022s7.457627-8.0678 7.118644-7.8644 5.830509 11.7288 5.830509 11.7288z" fill="#e0e0e0"/><g fill="#4b4b4b" stroke="#e0e0e0" stroke-width=".512"><circle cx="34.662014" cy="1048.5903" r="1.607564"/><circle cx="39.933205" cy="1059.6581" r="1.607564"/><circle cx="28.17049" cy="1056.2683" r="1.607564"/></g></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tools.svg b/editor/icons/icon_tools.svg index 854cc08e79..dc002d6a4d 100644 --- a/editor/icons/icon_tools.svg +++ b/editor/icons/icon_tools.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1l-1 2 1 2v4h-2v3 0.5c0 1.385 1.115 2.5 2.5 2.5s2.5-1.115 2.5-2.5v-1-2.5h-2v-4l1-2-1-2h-1zm6 0.17383a3 3 0 0 0 -2 2.8262 3 3 0 0 0 2 2.8262v6.1738 1c0 0.554 0.446 1 1 1s1-0.446 1-1v-4-3.1758a3 3 0 0 0 2 -2.8242 3 3 0 0 0 -2 -2.8242v2.8242a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-2.8262z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-1 2 1 2v4h-2v3 .5c0 1.385 1.115 2.5 2.5 2.5s2.5-1.115 2.5-2.5v-1-2.5h-2v-4l1-2-1-2zm6 .17383a3 3 0 0 0 -2 2.8262 3 3 0 0 0 2 2.8262v6.1738 1c0 .554.446 1 1 1s1-.446 1-1v-4-3.1758a3 3 0 0 0 2-2.8242 3 3 0 0 0 -2-2.8242v2.8242a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1v-2.8262z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_touch_screen_button.svg b/editor/icons/icon_touch_screen_button.svg index 21a8f16ee6..d29e411f05 100644 --- a/editor/icons/icon_touch_screen_button.svg +++ b/editor/icons/icon_touch_screen_button.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h2v-1h-1-1v-2h8v2h-2v1h2a1 1 0 0 0 1 -1v-2a1 1 0 0 0 -1 -1h-8zm4 2a1 1 0 0 0 -1 1v7 0.033203l-2.4746-1.8086c-0.52015-0.3803-1.1948-0.4556-1.6504 0-0.45566 0.4556-0.45561 1.1948 0 1.6504l4.125 4.125h6c1.1046 0 2-0.8954 2-2v-5h-6v-4a1 1 0 0 0 -1 -1z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a1 1 0 0 0 -1 1v2a1 1 0 0 0 1 1h2v-1h-1-1v-2h8v2h-2v1h2a1 1 0 0 0 1-1v-2a1 1 0 0 0 -1-1zm4 2a1 1 0 0 0 -1 1v7 .033203l-2.4746-1.8086c-.52015-.3803-1.1948-.4556-1.6504 0-.45566.4556-.45561 1.1948 0 1.6504l4.125 4.125h6c1.1046 0 2-.8954 2-2v-5h-6v-4a1 1 0 0 0 -1-1z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_add_key.svg b/editor/icons/icon_track_add_key.svg index e59de70348..582003cd9b 100644 --- a/editor/icons/icon_track_add_key.svg +++ b/editor/icons/icon_track_add_key.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#84ffb1"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#84ffb1"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_add_key_hl.svg b/editor/icons/icon_track_add_key_hl.svg index 01ef661adc..7f3c60a562 100644 --- a/editor/icons/icon_track_add_key_hl.svg +++ b/editor/icons/icon_track_add_key_hl.svg @@ -1,6 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#84ffb1"/> -<path transform="translate(0 1044.4)" d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z" fill="#fff" fill-opacity=".42424"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><path d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#84ffb1"/><path d="m3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3z" fill="#fff" fill-opacity=".42424"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_capture.svg b/editor/icons/icon_track_capture.svg index da6a662746..51a38ff1fb 100644 --- a/editor/icons/icon_track_capture.svg +++ b/editor/icons/icon_track_capture.svg @@ -1,61 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="8" - version="1.1" - viewBox="0 0 16 8" - id="svg6" - sodipodi:docname="icon_track_capture.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata12"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs10" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1350" - inkscape:window-height="593" - id="namedview8" - showgrid="false" - inkscape:zoom="27.577164" - inkscape:cx="8.347146" - inkscape:cy="4.4012076" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg6" /> - <path - style="fill:#e0e0e0;fill-opacity:1" - d="m 2.1665128,0.99764963 c -0.422625,0 -0.763672,0.34104737 -0.763672,0.76367187 v 4.5742187 c 0,0.4226242 0.341047,0.7617192 0.763672,0.7617192 h 4.472656 c 0.422625,0 0.763672,-0.339095 0.763672,-0.7617192 V 5.347259 h -3.300781 c -0.1662,0 -0.298828,-0.3390943 -0.298828,-0.7617188 V 3.3609308 c 0,-0.4226244 0.132628,-0.7636718 0.298828,-0.7636718 h 3.300781 V 1.7613215 c 0,-0.4226245 -0.341047,-0.76367187 -0.763672,-0.76367187 z" - id="rect1389" - inkscape:connector-curvature="0" /> - <path - style="fill:#e0e0e0;fill-opacity:1;stroke:#e0e0e0;stroke-width:0.80299997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - d="M 9.1827441,4.7953408 C 9.6993662,3.7537783 10.278269,2.5835979 10.469195,2.1949398 l 0.347137,-0.7066511 0.679654,0.00665 0.679654,0.00665 0.956945,2.3125 c 0.526319,1.271875 1.007254,2.4334375 1.068744,2.5812497 l 0.1118,0.26875 H 13.715914 13.1187 L 12.785851,6.0203387 12.453002,5.3765887 H 11.319176 10.185351 L 9.8066761,6.032702 9.4280014,6.6888154 l -0.5922856,1.37e-4 -0.592285,1.36e-4 z m 3.1779349,-0.369483 c 0.0042,-0.00346 -0.233487,-0.4884588 -0.528245,-1.0777779 l -0.535922,-1.0714891 -0.03691,0.0875 c -0.0203,0.048125 -0.183516,0.425 -0.362699,0.8375 -0.179182,0.4125 -0.355738,0.85125 -0.392346,0.975 -0.03661,0.12375 -0.07127,0.2390723 -0.07703,0.2562715 -0.0083,0.024853 0.188215,0.027989 0.957503,0.015278 0.532385,-0.0088 0.971429,-0.018823 0.975651,-0.022283 z" - id="path1424" - inkscape:connector-curvature="0" /> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2.1665128.99764963c-.422625 0-.763672.34104737-.763672.76367187v4.5742187c0 .4226242.341047.7617192.763672.7617192h4.472656c.422625 0 .763672-.339095.763672-.7617192v-.9882812h-3.300781c-.1662 0-.298828-.3390943-.298828-.7617188v-1.2246094c0-.4226244.132628-.7636718.298828-.7636718h3.300781v-.8359375c0-.4226245-.341047-.76367187-.763672-.76367187z"/><path d="m9.1827441 4.7953408c.5166221-1.0415625 1.0955249-2.2117429 1.2864509-2.600401l.347137-.7066511.679654.00665.679654.00665.956945 2.3125c.526319 1.271875 1.007254 2.4334375 1.068744 2.5812497l.1118.26875h-.597215-.597214l-.332849-.6437497-.332849-.64375h-1.133826-1.133825l-.3786749.6561133-.3786747.6561134-.5922856.000137-.592285.000136zm3.1779349-.369483c.0042-.00346-.233487-.4884588-.528245-1.0777779l-.535922-1.0714891-.03691.0875c-.0203.048125-.183516.425-.362699.8375-.179182.4125-.355738.85125-.392346.975-.03661.12375-.07127.2390723-.07703.2562715-.0083.024853.188215.027989.957503.015278.532385-.0088.971429-.018823.975651-.022283z" stroke="#e0e0e0" stroke-width=".803"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_continuous.svg b/editor/icons/icon_track_continuous.svg index 635b558758..2e89cdd821 100644 --- a/editor/icons/icon_track_continuous.svg +++ b/editor/icons/icon_track_continuous.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path d="m2 1050.4c6 0 6-4 12-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1050.4c6 0 6-4 12-4" fill="none" stroke="#e0e0e0" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1044.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_discrete.svg b/editor/icons/icon_track_discrete.svg index 6000d55e99..a0550822bf 100644 --- a/editor/icons/icon_track_discrete.svg +++ b/editor/icons/icon_track_discrete.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m14 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m14 1a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_track_trigger.svg b/editor/icons/icon_track_trigger.svg index fd2505463f..5572b254a2 100644 --- a/editor/icons/icon_track_trigger.svg +++ b/editor/icons/icon_track_trigger.svg @@ -1,5 +1 @@ -<svg width="16" height="8" version="1.1" viewBox="0 0 16 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<path transform="translate(0 1044.4)" d="m1 1v2h2v4h2v-4h2v-2h-6zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="8" viewBox="0 0 16 8" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v2h2v4h2v-4h2v-2zm13 0a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-3 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transform.svg b/editor/icons/icon_transform.svg index 7645622c28..0ed5377ed7 100644 --- a/editor/icons/icon_transform.svg +++ b/editor/icons/icon_transform.svg @@ -1,4 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 2 2 4-2 4h2l0.9082-2.1816 1.0918 2.1816h2l-2-4 2-4h-2l-0.9082 2.1816-1.0918-2.1816zm6 8h2v-2h1v-2h-1v-1c9.6e-6 -0.55228 0.44772-0.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm4-6v6h2v-2l1 1 1-1v2h2v-6h-2l-1 2-1-2z" fill="#f6a86e"/> -<path d="m9 2a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1 -1h1v-2z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 2 2 4-2 4h2l.9082-2.1816 1.0918 2.1816h2l-2-4 2-4h-2l-.9082 2.1816-1.0918-2.1816zm6 8h2v-2h1v-2h-1v-1c.0000096-.55228.44772-.99999 1-1h1v-2h-1c-1.6569 0-3 1.3431-3 3zm4-6v6h2v-2l1 1 1-1v2h2v-6h-2l-1 2-1-2z" fill="#f6a86e"/><path d="m9 2a3 3 0 0 0 -3 3v5h2v-2h1v-2h-1v-1a1 1 0 0 1 1-1h1v-2z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transform_2_D.svg b/editor/icons/icon_transform_2_D.svg index de05160dac..a57587ba06 100644 --- a/editor/icons/icon_transform_2_D.svg +++ b/editor/icons/icon_transform_2_D.svg @@ -1,4 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m0 2v2h2v6h2v-6h2v-2zm7 0v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.0019531v2h7a4 4 0 0 0 3.4648 -2 4 4 0 0 0 0 -4 4 4 0 0 0 -3.4648 -2h-2v6h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5zm5 2a2 2 0 0 1 1.7324 1 2 2 0 0 1 0 2 2 2 0 0 1 -1.7324 1z" fill="#c4ec69"/> -<path d="m7 2v2c0.55228 0 1 0.44772 1 1s-0.44772 1-1 1c-0.71466-1.326e-4 -1.3751 0.38108-1.7324 1-0.17472 0.30426-0.26633 0.64914-0.26562 1h-0.0019531v2h5v-2h-3c1.0716-1.5e-4 2.0618-0.57193 2.5977-1.5 0.5359-0.9282 0.5359-2.0718 0-3-0.53582-0.92807-1.526-1.4998-2.5977-1.5z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m0 2v2h2v6h2v-6h2v-2zm7 0v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.0019531v2h7a4 4 0 0 0 3.4648-2 4 4 0 0 0 0-4 4 4 0 0 0 -3.4648-2h-2v6h-3a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -2.5977-1.5zm5 2a2 2 0 0 1 1.7324 1 2 2 0 0 1 0 2 2 2 0 0 1 -1.7324 1z" fill="#c4ec69"/><path d="m7 2v2c.55228 0 1 .44772 1 1s-.44772 1-1 1c-.71466-.0001326-1.3751.38108-1.7324 1-.17472.30426-.26633.64914-.26562 1h-.0019531v2h5v-2h-3c1.0716-.00015 2.0618-.57193 2.5977-1.5.5359-.9282.5359-2.0718 0-3-.53582-.92807-1.526-1.4998-2.5977-1.5z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_end.svg b/editor/icons/icon_transition_end.svg index 8a1937670a..8d6857432f 100644 --- a/editor/icons/icon_transition_end.svg +++ b/editor/icons/icon_transition_end.svg @@ -1,72 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_end.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="10.204146" - inkscape:cy="5.3391396" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="translate(-2,-1036.4)" - id="g6"> - <g - id="g4"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect862" - width="3.0681243" - height="10.067283" - x="11.16989" - y="3.0084109" - ry="0.76286" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="translate(-2 -1036.4)"/><rect height="10.067283" ry=".76286" width="3.068124" x="11.16989" y="3.008411"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_end_auto.svg b/editor/icons/icon_transition_end_auto.svg index 18927bc4ef..fbfa7b03db 100644 --- a/editor/icons/icon_transition_end_auto.svg +++ b/editor/icons/icon_transition_end_auto.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_automatic.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="0.56831798" - inkscape:cy="5.1473818" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="translate(-2,-1036.4)" - id="g6" - style="fill:#77ce57;fill-opacity:1"> - <g - id="g4" - style="fill:#77ce57;fill-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#77ce57;fill-opacity:1" - id="rect862" - width="3.0681243" - height="10.067283" - x="11.16989" - y="3.0084109" - ry="0.76286" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="translate(-2 -1036.4)"/><rect height="10.067283" ry=".76286" width="3.068124" x="11.16989" y="3.008411"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_end_auto_big.svg b/editor/icons/icon_transition_end_auto_big.svg index aaedafaf04..fcc894a3e6 100644 --- a/editor/icons/icon_transition_end_auto_big.svg +++ b/editor/icons/icon_transition_end_auto_big.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_automatic_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="0.3064671" - inkscape:cy="14.348448" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="matrix(1.4099529,0,0,1.4099529,-4.1975887,-1462.5094)" - id="g6" - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> - <g - id="g4" - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-width:1.409953;stroke-opacity:1" - id="rect862" - width="4.3259106" - height="14.194397" - x="14.371336" - y="3.0076122" - ry="1.0755967" /> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57" stroke="#41562e"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="matrix(1.4099529 0 0 1.4099529 -4.197589 -1462.5094)"/><rect height="14.194397" ry="1.075597" stroke-width="1.409953" width="4.325911" x="14.371336" y="3.007612"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_end_big.svg b/editor/icons/icon_transition_end_big.svg index 46d42e95e3..cc93dd5808 100644 --- a/editor/icons/icon_transition_end_big.svg +++ b/editor/icons/icon_transition_end_big.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_end_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="-1.1122019" - inkscape:cy="10.839132" - inkscape:window-x="517" - inkscape:window-y="261" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="matrix(1.4203458,0,0,1.4203458,-4.29479,-1473.1325)" - id="g6" - style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> - <g - id="g4" - style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#e0e0e0;fill-opacity:1;stroke:#424242;stroke-width:1.42026603;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect862" - width="4.3577976" - height="14.299023" - x="14.411009" - y="3.1868868" - ry="1.0835251" /> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke="#424242"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" stroke-width=".999944" transform="matrix(1.4203458 0 0 1.4203458 -4.29479 -1473.1325)"/><rect height="14.299023" ry="1.083525" stroke-width="1.420266" width="4.357798" x="14.411009" y="3.186887"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_immediate.svg b/editor/icons/icon_transition_immediate.svg index ba16a33c91..56e9b6c0f3 100644 --- a/editor/icons/icon_transition_immediate.svg +++ b/editor/icons/icon_transition_immediate.svg @@ -1,64 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_immediate.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="4.0199579" - inkscape:cy="5.3391396" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(-2,-1036.4)" - id="g6"> - <g - id="g4"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(-2 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_immediate_auto.svg b/editor/icons/icon_transition_immediate_auto.svg index c127560145..8453bcff08 100644 --- a/editor/icons/icon_transition_immediate_auto.svg +++ b/editor/icons/icon_transition_immediate_auto.svg @@ -1,64 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_immediate_auto.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="-9.2592678" - inkscape:cy="5.3391396" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="translate(-2,-1036.4)" - id="g6"> - <g - id="g4"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east_asian:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#77ce57" fill-rule="evenodd" transform="translate(-2 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_immediate_auto_big.svg b/editor/icons/icon_transition_immediate_auto_big.svg index 80d35a36f3..77f7ba592e 100644 --- a/editor/icons/icon_transition_immediate_auto_big.svg +++ b/editor/icons/icon_transition_immediate_auto_big.svg @@ -1,66 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_immediate_auto_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="11.321237" - inkscape:cy="3.5752171" - inkscape:window-x="517" - inkscape:window-y="261" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="matrix(1.571031,0,0,1.571031,-2.7257681,-1630.6239)" - id="g6" - style="stroke:#404040;stroke-opacity:1"> - <g - id="g4" - style="stroke:#404040;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#77ce57" fill-rule="evenodd" stroke="#41562e" transform="matrix(1.571031 0 0 1.571031 -2.725768 -1630.6239)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_immediate_big.svg b/editor/icons/icon_transition_immediate_big.svg index 108dcdd500..94584c45f7 100644 --- a/editor/icons/icon_transition_immediate_big.svg +++ b/editor/icons/icon_transition_immediate_big.svg @@ -1,66 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_immediate_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="0.19928629" - inkscape:cy="4.534006" - inkscape:window-x="517" - inkscape:window-y="261" - inkscape:window-maximized="0" - inkscape:current-layer="g4" /> - <g - transform="matrix(1.571031,0,0,1.571031,-2.7257681,-1630.6239)" - id="g6" - style="stroke:#404040;stroke-opacity:1"> - <g - id="g4" - style="stroke:#404040;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#404040;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;fill-opacity:1" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#e0e0e0" fill-rule="evenodd" stroke="#404040" transform="matrix(1.571031 0 0 1.571031 -2.725768 -1630.6239)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_sync.svg b/editor/icons/icon_transition_sync.svg index 267d806615..affa353100 100644 --- a/editor/icons/icon_transition_sync.svg +++ b/editor/icons/icon_transition_sync.svg @@ -1,72 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_sync.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="10.204146" - inkscape:cy="5.3391396" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="translate(2.5542471,-1036.4)" - id="g6"> - <g - id="g4"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#e0e0e0;fill-opacity:1" - id="rect862" - width="3.0681243" - height="10.067283" - x="1.9655174" - y="3.0084109" - ry="0.76286" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="translate(2.554247 -1036.4)"/><rect height="10.067283" ry=".76286" width="3.068124" x="1.965517" y="3.008411"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_sync_auto.svg b/editor/icons/icon_transition_sync_auto.svg index 5ce61e3a6a..767773a000 100644 --- a/editor/icons/icon_transition_sync_auto.svg +++ b/editor/icons/icon_transition_sync_auto.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg8" - sodipodi:docname="icon_transition_sync_auto.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="20.85965" - inkscape:cx="0.56831798" - inkscape:cy="5.1473818" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="translate(3.0815809,-1036.4)" - id="g6" - style="fill:#77ce57;fill-opacity:1"> - <g - id="g4" - style="fill:#77ce57;fill-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#77ce57;fill-opacity:1" - id="rect862" - width="3.0681243" - height="10.067283" - x="1.9655174" - y="3.0084109" - ry="0.76286" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="translate(3.081581 -1036.4)"/><rect height="10.067283" ry=".76286" width="3.068124" x="1.965517" y="3.008411"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_sync_auto_big.svg b/editor/icons/icon_transition_sync_auto_big.svg index 3e84d76398..c9735a2653 100644 --- a/editor/icons/icon_transition_sync_auto_big.svg +++ b/editor/icons/icon_transition_sync_auto_big.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_sync_auto_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="0.3064671" - inkscape:cy="14.348448" - inkscape:window-x="67" - inkscape:window-y="27" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="matrix(1.4099529,0,0,1.4099529,2.1752927,-1462.5094)" - id="g6" - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> - <g - id="g4" - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#77ce57;fill-opacity:1;fill-rule:evenodd;stroke:#41562e;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#77ce57;fill-opacity:1;stroke:#41562e;stroke-width:1.409953;stroke-opacity:1" - id="rect862" - width="4.3259106" - height="14.194397" - x="1.6255733" - y="3.0076122" - ry="1.0755967" /> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#77ce57" stroke="#41562e"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" transform="matrix(1.4099529 0 0 1.4099529 2.175293 -1462.5094)"/><rect height="14.194397" ry="1.075597" stroke-width="1.409953" width="4.325911" x="1.625573" y="3.007612"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transition_sync_big.svg b/editor/icons/icon_transition_sync_big.svg index e7cf63e0b3..959f26c6f1 100644 --- a/editor/icons/icon_transition_sync_big.svg +++ b/editor/icons/icon_transition_sync_big.svg @@ -1,74 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="20" - height="20" - version="1.1" - viewBox="0 0 20 20" - id="svg8" - sodipodi:docname="icon_transition_sync_big.svg" - inkscape:version="0.92.3 (2405546, 2018-03-11)"> - <metadata - id="metadata14"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs12" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1403" - inkscape:window-height="782" - id="namedview10" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="19.226781" - inkscape:cy="9.27981" - inkscape:window-x="302" - inkscape:window-y="226" - inkscape:window-maximized="0" - inkscape:current-layer="svg8" /> - <g - transform="matrix(1.4203458,0,0,1.4203458,1.8747015,-1473.1325)" - id="g6" - style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> - <g - id="g4" - style="stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> - <path - d="m 4.9883,1039.4 c -0.5469,0.01 -0.98717,0.4511 -0.98828,0.998 v 8 c 1.163e-4,0.7986 0.89011,1.275 1.5547,0.8321 l 6,-4 c 0.59362,-0.3959 0.59362,-1.2682 0,-1.6641 l -6,-4 c -0.1678,-0.1111 -0.3652,-0.1689 -0.56641,-0.166 z" - dominant-baseline="auto" - style="color:#000000;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;text-transform:none;text-orientation:mixed;dominant-baseline:auto;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000000;fill:#e0e0e0;fill-rule:evenodd;stroke:#424242;stroke-width:0.99994373;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto" - id="path2" - inkscape:connector-curvature="0" /> - </g> - </g> - <rect - style="fill:#e0e0e0;fill-opacity:1;stroke:#424242;stroke-width:1.42026603;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - id="rect862" - width="4.3577976" - height="14.299023" - x="1.4618562" - y="3.1868868" - ry="1.0835251" /> -</svg> +<svg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0" stroke="#424242"><path d="m4.9883 1039.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59362-.3959.59362-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill-rule="evenodd" stroke-width=".999944" transform="matrix(1.4203458 0 0 1.4203458 1.874702 -1473.1325)"/><rect height="14.299023" ry="1.083525" stroke-width="1.420266" width="4.357798" x="1.461856" y="3.186887"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_translation.svg b/editor/icons/icon_translation.svg index fa6d7e1ff2..4195ce04a9 100644 --- a/editor/icons/icon_translation.svg +++ b/editor/icons/icon_translation.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1c-1.645 0-3 1.355-3 3s1.355 3 3 3c0.46079 0 0.89328-0.11549 1.2852-0.30469 0.18147 0.1867 0.43274 0.30469 0.71484 0.30469 0.554 0 1-0.446 1-1v-2-2c0-0.554-0.446-1-1-1-0.28152 0-0.53345 0.11683-0.71484 0.30273-0.39187-0.1892-0.82436-0.30273-1.2852-0.30273zm0 2c0.56412 0 1 0.4359 1 1s-0.43588 1-1 1-1-0.4359-1-1 0.43588-1 1-1zm6.8867 3.5293l-1.7891 0.89453 0.28906 0.57617h-2.3867v2h0.82031c0.13264 0.9292 0.4994 1.8938 1.1992 2.7305-0.61509 0.163-1.3569 0.26523-2.2656 0.26953l0.0097657 2c1.6777-0.01 3.0414-0.31328 4.1113-0.83398 1.07 0.5208 2.4336 0.82608 4.1113 0.83398l0.009766-2c-0.90873 0-1.6505-0.10653-2.2656-0.26953 0.7-0.8367 1.068-1.8013 1.2012-2.7305h1.0684v-2h-3.3789l-0.73438-1.4707zm-1.0234 3.4707h2.0234c-0.12578 0.5801-0.37537 1.147-0.83594 1.623-0.05313 0.055-0.11651 0.10676-0.17578 0.16016-0.05927-0.053-0.12265-0.10516-0.17578-0.16016-0.46056-0.476-0.71015-1.0429-0.83594-1.623z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#e0e0e0" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1c-1.645 0-3 1.355-3 3s1.355 3 3 3c.46079 0 .89328-.11549 1.2852-.30469.18147.1867.43274.30469.71484.30469.554 0 1-.446 1-1v-2-2c0-.554-.446-1-1-1-.28152 0-.53345.11683-.71484.30273-.39187-.1892-.82436-.30273-1.2852-.30273zm0 2c.56412 0 1 .4359 1 1s-.43588 1-1 1-1-.4359-1-1 .43588-1 1-1zm6.8867 3.5293-1.7891.89453.28906.57617h-2.3867v2h.82031c.13264.9292.4994 1.8938 1.1992 2.7305-.61509.163-1.3569.26523-2.2656.26953l.0097657 2c1.6777-.01 3.0414-.31328 4.1113-.83398 1.07.5208 2.4336.82608 4.1113.83398l.009766-2c-.90873 0-1.6505-.10653-2.2656-.26953.7-.8367 1.068-1.8013 1.2012-2.7305h1.0684v-2h-3.3789l-.73438-1.4707zm-1.0234 3.4707h2.0234c-.12578.5801-.37537 1.147-.83594 1.623-.05313.055-.11651.10676-.17578.16016-.05927-.053-.12265-.10516-.17578-.16016-.46056-.476-.71015-1.0429-.83594-1.623z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_transpose.svg b/editor/icons/icon_transpose.svg index 7dd194d724..e63c679323 100644 --- a/editor/icons/icon_transpose.svg +++ b/editor/icons/icon_transpose.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v14h7v-7h7v-7zm2 2h3v3h-3zm0 5h3v5h-3zm12 2-5 5h5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v14h7v-7h7v-7zm2 2h3v3h-3zm0 5h3v5h-3zm12 2-5 5h5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tree.svg b/editor/icons/icon_tree.svg index 15be220451..8e450948ce 100644 --- a/editor/icons/icon_tree.svg +++ b/editor/icons/icon_tree.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v13c5.52e-5 0.55226 0.44774 0.99994 1 1h13v-2h-12v-6h2v3c5.52e-5 0.55226 0.44774 0.99994 1 1h9v-2h-8v-2h8v-2h-12v-2h12v-2z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v13c.0000552.55226.44774.99994 1 1h13v-2h-12v-6h2v3c.0000552.55226.44774.99994 1 1h9v-2h-8v-2h8v-2h-12v-2h12v-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_tween.svg b/editor/icons/icon_tween.svg index 202dd9eb65..c311cbd05e 100644 --- a/editor/icons/icon_tween.svg +++ b/editor/icons/icon_tween.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m7 1v2h6v6h2v-8h-8zm-1 4l1.793 1.793-4.793 4.793v-4.5859h-2v8h8v-2h-4.5859l4.793-4.793 1.793 1.793v-5h-5z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#cea4f1" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7 1v2h6v6h2v-8zm-1 4 1.793 1.793-4.793 4.793v-4.5859h-2v8h8v-2h-4.5859l4.793-4.793 1.793 1.793v-5h-5z" fill="#cea4f1" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_unbone.svg b/editor/icons/icon_unbone.svg index 06dfe67030..75df7e6ce9 100644 --- a/editor/icons/icon_unbone.svg +++ b/editor/icons/icon_unbone.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m10.479 1a2.4664 2.4663 0 0 0 -1.7813 0.7207 2.4664 2.4663 0 0 0 -0.31445 3.1035l-1.0723 1.0723 2.791 2.791 1.0762-1.0742a2.4664 2.4663 0 0 0 3.0996 -0.31055 2.4664 2.4663 0 0 0 0 -3.4883 2.4664 2.4663 0 0 0 -1.3965 -0.69727 2.4664 2.4663 0 0 0 -0.69531 -1.3965 2.4664 2.4663 0 0 0 -1.707 -0.7207zm-4.582 6.3105l-1.0723 1.0742a2.4664 2.4663 0 0 0 -3.1016 0.3125 2.4664 2.4663 0 0 0 0 3.4883 2.4664 2.4663 0 0 0 1.3965 0.69531 2.4664 2.4663 0 0 0 0.69531 1.3965 2.4664 2.4663 0 0 0 3.4883 0 2.4664 2.4663 0 0 0 0.31445 -3.1035l1.0703-1.0723-2.791-2.791z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m10.479 1a2.4664 2.4663 0 0 0 -1.7813.7207 2.4664 2.4663 0 0 0 -.31445 3.1035l-1.0723 1.0723 2.791 2.791 1.0762-1.0742a2.4664 2.4663 0 0 0 3.0996-.31055 2.4664 2.4663 0 0 0 0-3.4883 2.4664 2.4663 0 0 0 -1.3965-.69727 2.4664 2.4663 0 0 0 -.69531-1.3965 2.4664 2.4663 0 0 0 -1.707-.7207zm-4.582 6.3105-1.0723 1.0742a2.4664 2.4663 0 0 0 -3.1016.3125 2.4664 2.4663 0 0 0 0 3.4883 2.4664 2.4663 0 0 0 1.3965.69531 2.4664 2.4663 0 0 0 .69531 1.3965 2.4664 2.4663 0 0 0 3.4883 0 2.4664 2.4663 0 0 0 .31445-3.1035l1.0703-1.0723-2.791-2.791z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_ungroup.svg b/editor/icons/icon_ungroup.svg index cdda5d3dbf..c6e235f47d 100644 --- a/editor/icons/icon_ungroup.svg +++ b/editor/icons/icon_ungroup.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m7 1037.4v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0" fill-opacity=".39216"/> -<path transform="translate(0 1036.4)" d="m7 1v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm6 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.341e-5 -0.446 0-1 0s-1-2.341e-5 -1 0zm-12 6v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.34e-5 -0.446 0-1 0s-1-2.34e-5 -1 0zm6 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.34e-5 -0.446 0-1 0s-1-2.34e-5 -1 0zm6 0v2c0 2.34e-5 0.446 0 1 0s1 2.34e-5 1 0v-2c0-2.34e-5 -0.446 0-1 0s-1-2.34e-5 -1 0zm-12 6v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0zm6 0v2c0 2.3e-5 0.446 0 1 0s1 2.3e-5 1 0v-2c0-2.3e-5 -0.446 0-1 0s-1-2.3e-5 -1 0z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0 -1036.4)"><path d="m7 1037.4v6h-6v8h8v-6h6v-8zm2 2h4v4h-4z" fill="#e0e0e0" fill-opacity=".39216"/><path d="m7 1v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm6 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.00002341-.446 0-1 0s-1-.00002341-1 0zm-12 6v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.0000234-.446 0-1 0s-1-.0000234-1 0zm6 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.0000234-.446 0-1 0s-1-.0000234-1 0zm6 0v2c0 .0000234.446 0 1 0s1 .0000234 1 0v-2c0-.0000234-.446 0-1 0s-1-.0000234-1 0zm-12 6v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0zm6 0v2c0 .000023.446 0 1 0s1 .000023 1 0v-2c0-.000023-.446 0-1 0s-1-.000023-1 0z" fill="#fff" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_unlock.svg b/editor/icons/icon_unlock.svg index 591b3d0102..52be7e2233 100644 --- a/editor/icons/icon_unlock.svg +++ b/editor/icons/icon_unlock.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1c-0.87738 0.001545-1.7389 0.23394-2.498 0.67383l1 1.7324c0.45506-0.26449 0.97171-0.40459 1.498-0.40625 1.6569 0 3 1.3431 3 3v2h-9v7h12v-7h-1v-2c0-2.7614-2.2386-5-5-5zm-1 9h2v3h-2v-3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-.87738.001545-1.7389.23394-2.498.67383l1 1.7324c.45506-.26449.97171-.40459 1.498-.40625 1.6569 0 3 1.3431 3 3v2h-9v7h12v-7h-1v-2c0-2.7614-2.2386-5-5-5zm-1 9h2v3h-2z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_unpaint_vertex.svg b/editor/icons/icon_unpaint_vertex.svg index a4633ee80b..7bb94f06be 100644 --- a/editor/icons/icon_unpaint_vertex.svg +++ b/editor/icons/icon_unpaint_vertex.svg @@ -1,58 +1 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="16" - height="16" - version="1.1" - viewBox="0 0 16 16" - id="svg4" - sodipodi:docname="icon_unpaint_vertex.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - <metadata - id="metadata10"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs8" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="3066" - inkscape:window-height="1689" - id="namedview6" - showgrid="false" - inkscape:zoom="14.75" - inkscape:cx="8" - inkscape:cy="8" - inkscape:window-x="134" - inkscape:window-y="55" - inkscape:window-maximized="1" - inkscape:current-layer="svg4" /> - <ellipse - style="fill:#000000" - id="path12" - cx="8.3728809" - cy="8.1694918" - rx="6.6779661" - ry="6.0677967" /> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><ellipse cx="8.372881" cy="8.169492" rx="6.677966" ry="6.067797"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_uv.svg b/editor/icons/icon_uv.svg index 13744d496a..f68ea2c984 100644 --- a/editor/icons/icon_uv.svg +++ b/editor/icons/icon_uv.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 5v4a3 3 0 0 0 1.5 2.5977 3 3 0 0 0 3 0 3 3 0 0 0 1.5 -2.5977v-4h-2v4a1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1v-4h-2zm8 0l2 7h1 1 1l2-7h-2l-1.5 5.25-1.5-5.25h-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 5v4a3 3 0 0 0 1.5 2.5977 3 3 0 0 0 3 0 3 3 0 0 0 1.5-2.5977v-4h-2v4a1 1 0 0 1 -1 1 1 1 0 0 1 -1-1v-4zm8 0 2 7h1 1 1l2-7h-2l-1.5 5.25-1.5-5.25z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_v_box_container.svg b/editor/icons/icon_v_box_container.svg index 07c2b230c0..17b83ced0a 100644 --- a/editor/icons/icon_v_box_container.svg +++ b/editor/icons/icon_v_box_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m15 1039.4c0-1.1046-0.89543-2-2-2h-10c-1.1046 0-2 0.8954-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-10zm-2 0v2h-10v-2h10zm0 4v2h-10v-2h10zm0 4v2h-10v-2h10z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m15 1039.4c0-1.1046-.89543-2-2-2h-10c-1.1046 0-2 .8954-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2zm-2 0v2h-10v-2zm0 4v2h-10v-2zm0 4v2h-10v-2z" fill="#a5efac" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_v_scroll_bar.svg b/editor/icons/icon_v_scroll_bar.svg index 49b2f5e851..285e54fbd1 100644 --- a/editor/icons/icon_v_scroll_bar.svg +++ b/editor/icons/icon_v_scroll_bar.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1c-1.108 0-2 0.89199-2 2v10c0 1.108 0.89199 2 2 2h6c1.108 0 2-0.89199 2-2v-10c0-1.108-0.89199-2-2-2h-6zm2.9883 1a1.0001 1.0001 0 0 1 0.56641 0.16797l3 2a1.0001 1.0001 0 1 1 -1.1094 1.6641l-2.4453-1.6289-2.4453 1.6289a1.0001 1.0001 0 1 1 -1.1094 -1.6641l3-2a1.0001 1.0001 0 0 1 0.54297 -0.16797zm-2.998 7.9922a1.0001 1.0001 0 0 1 0.56445 0.17578l2.4453 1.6309 2.4453-1.6309a1.0001 1.0001 0 1 1 1.1094 1.6641l-3 2a1.0001 1.0001 0 0 1 -1.1094 0l-3-2a1.0001 1.0001 0 0 1 0.54492 -1.8398z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1c-1.108 0-2 .89199-2 2v10c0 1.108.89199 2 2 2h6c1.108 0 2-.89199 2-2v-10c0-1.108-.89199-2-2-2zm2.9883 1a1.0001 1.0001 0 0 1 .56641.16797l3 2a1.0001 1.0001 0 1 1 -1.1094 1.6641l-2.4453-1.6289-2.4453 1.6289a1.0001 1.0001 0 1 1 -1.1094-1.6641l3-2a1.0001 1.0001 0 0 1 .54297-.16797zm-2.998 7.9922a1.0001 1.0001 0 0 1 .56445.17578l2.4453 1.6309 2.4453-1.6309a1.0001 1.0001 0 1 1 1.1094 1.6641l-3 2a1.0001 1.0001 0 0 1 -1.1094 0l-3-2a1.0001 1.0001 0 0 1 .54492-1.8398z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_v_separator.svg b/editor/icons/icon_v_separator.svg index b12bbd1ca6..6476ea5ad7 100644 --- a/editor/icons/icon_v_separator.svg +++ b/editor/icons/icon_v_separator.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1047.4h3v-6h-3v6zm5 4h2v-14h-2v14zm4-4h3v-6h-3v6z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1047.4h3v-6h-3zm5 4h2v-14h-2zm4-4h3v-6h-3z" fill="#a5efac" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_v_slider.svg b/editor/icons/icon_v_slider.svg index 45a61147ab..c6fc1e6e0f 100644 --- a/editor/icons/icon_v_slider.svg +++ b/editor/icons/icon_v_slider.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm5 0c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h2c0.55228 0 1-0.44772 1-1s-0.44772-1-1-1h-2zm-4 5.8672c-0.32639 0.086294-0.6624 0.13092-1 0.13281-0.33752-0.0012549-0.67352-0.045224-1-0.13086v5 1.1309 1c-0.019125 1.3523 2.0191 1.3523 2 0v-1-1.1328-5zm5 0.13281c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1 1-0.44772 1-1-0.44772-1-1-1zm-1 6c-0.55228 0-1 0.44772-1 1s0.44772 1 1 1h2c0.55228 0 1-0.44772 1-1s-0.44772-1-1-1h-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 1a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm5 0c-.55228 0-1 .44772-1 1s.44772 1 1 1h2c.55228 0 1-.44772 1-1s-.44772-1-1-1zm-4 5.8672c-.32639.086294-.6624.13092-1 .13281-.33752-.0012549-.67352-.045224-1-.13086v5 1.1309 1c-.019125 1.3523 2.0191 1.3523 2 0v-1-1.1328-5zm5 .13281c-.55228 0-1 .44772-1 1s.44772 1 1 1 1-.44772 1-1-.44772-1-1-1zm-1 6c-.55228 0-1 .44772-1 1s.44772 1 1 1h2c.55228 0 1-.44772 1-1s-.44772-1-1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_v_split_container.svg b/editor/icons/icon_v_split_container.svg index 3f47d9cade..b9bbb4bfc3 100644 --- a/editor/icons/icon_v_split_container.svg +++ b/editor/icons/icon_v_split_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2h-10zm0 2h10v4h-3l-2-2-2 2h-3v-4zm0 6h3l2 2 2-2h3v4h-10v-4z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v4h-3l-2-2-2 2h-3zm0 6h3l2 2 2-2h3v4h-10z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_variant.svg b/editor/icons/icon_variant.svg index 859578243c..7c2e4559d1 100644 --- a/editor/icons/icon_variant.svg +++ b/editor/icons/icon_variant.svg @@ -1,3 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m3 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6zm3 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3 -3zm5 3a3 3 0 0 0 3 3v2h2v-8h-2v4a1 1 0 0 1 -1 -1v-3h-2zm-8-1v2a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#69ecbd"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 4a3 3 0 0 0 -3 3 3 3 0 0 0 3 3h2v-6zm3 0v6h2v-4a1 1 0 0 1 1 1v3h2v-3a3 3 0 0 0 -3-3zm5 3a3 3 0 0 0 3 3v2h2v-8h-2v4a1 1 0 0 1 -1-1v-3h-2zm-8-1v2a1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#69ecbd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_vector2.svg b/editor/icons/icon_vector2.svg index 9fa798df5d..b4e9b44c03 100644 --- a/editor/icons/icon_vector2.svg +++ b/editor/icons/icon_vector2.svg @@ -1,4 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.001953v2h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5zm-11 2v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#bd91f1"/> -<path d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -0.26562 1h-0.001953v2h5v-2h-3a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -2.5977 -1.5z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.001953v2h5v-2h-3a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -2.5977-1.5zm-11 2v6h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1 -1 1v-4zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#bd91f1"/><path d="m12 2v2h1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 2 2 0 0 0 -1.7324 1 2 2 0 0 0 -.26562 1h-.001953v2h5v-2h-3a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -2.5977-1.5z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_vector3.svg b/editor/icons/icon_vector3.svg index cf1d0d0136..74861160d6 100644 --- a/editor/icons/icon_vector3.svg +++ b/editor/icons/icon_vector3.svg @@ -1,4 +1 @@ -<svg width="16" height="12" version="1.1" viewBox="0 0 16 12" xmlns="http://www.w3.org/2000/svg"> -<path d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2zm-11 2v6h2a3 3 0 0 0 3 -3v-3h-2v3a1 1 0 0 1 -1 1v-4zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#e286f0"/> -<path d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977 -1.5 3 3 0 0 0 0 -3 3 3 0 0 0 -0.36523 -0.50195 3 3 0 0 0 0.36523 -0.49805 3 3 0 0 0 0.39844 -1.5h0.003906v-2z" fill="#fff" fill-opacity=".39216"/> -</svg> +<svg height="12" viewBox="0 0 16 12" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -.36523-.50195 3 3 0 0 0 .36523-.49805 3 3 0 0 0 .39844-1.5h.003906v-2zm-11 2v6h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1 -1 1v-4zm5 3a3 3 0 0 0 3 3h1v-2h-1a1 1 0 0 1 -1-1 1 1 0 0 1 1-1h1v-2h-1a3 3 0 0 0 -3 3z" fill="#e286f0"/><path d="m12 2v2h2a1 1 0 0 1 -1 1v2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1h-1v2h1a3 3 0 0 0 2.5977-1.5 3 3 0 0 0 0-3 3 3 0 0 0 -.36523-.50195 3 3 0 0 0 .36523-.49805 3 3 0 0 0 .39844-1.5h.003906v-2z" fill="#fff" fill-opacity=".39216"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_vehicle_body.svg b/editor/icons/icon_vehicle_body.svg index 01eb1798eb..a509730602 100644 --- a/editor/icons/icon_vehicle_body.svg +++ b/editor/icons/icon_vehicle_body.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m5 3a1 1 0 0 0 -1 1l-1 3h-2v4h1.0508c0.23167-1.1411 1.2398-2 2.4492-2s2.2175 0.85893 2.4492 2h2.1016c0.23167-1.1411 1.2398-2 2.4492-2s2.2175 0.85893 2.4492 2h1.0508v-4h-4v-4h-6zm1 1h4v3h-4v-3zm-1.5 6a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5zm7 0a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5 -1.5 1.5 1.5 0 0 0 -1.5 -1.5z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5 3a1 1 0 0 0 -1 1l-1 3h-2v4h1.0508c.23167-1.1411 1.2398-2 2.4492-2s2.2175.85893 2.4492 2h2.1016c.23167-1.1411 1.2398-2 2.4492-2s2.2175.85893 2.4492 2h1.0508v-4h-4v-4zm1 1h4v3h-4zm-1.5 6a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5zm7 0a1.5 1.5 0 0 0 -1.5 1.5 1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0 1.5-1.5 1.5 1.5 0 0 0 -1.5-1.5z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_vehicle_wheel.svg b/editor/icons/icon_vehicle_wheel.svg index cbd33653e0..bd870c0118 100644 --- a/editor/icons/icon_vehicle_wheel.svg +++ b/editor/icons/icon_vehicle_wheel.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5 -5 5 5 0 0 1 5 -5zm0 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4 -4 4 4 0 0 0 -4 -4zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1 -1 1 1 0 0 1 1 -1z" fill="#fc9c9c" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm0 2a5 5 0 0 1 5 5 5 5 0 0 1 -5 5 5 5 0 0 1 -5-5 5 5 0 0 1 5-5zm0 1a4 4 0 0 0 -4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0 -4-4zm0 1a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm4 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-2 2a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#fc9c9c" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_video_player.svg b/editor/icons/icon_video_player.svg index 84aae1f1e1..4e8dcf0ec2 100644 --- a/editor/icons/icon_video_player.svg +++ b/editor/icons/icon_video_player.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.0907 0-2 0.9093-2 2v10c0 1.0907 0.90929 2 2 2h10c1.0907 0 2-0.9093 2-2v-10c0-1.0907-0.90929-2-2-2h-10zm0 2h10v8h-10v-8zm3 2v4l4-2-4-2z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#a5efac" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="filter-blend-mode:normal;filter-gaussianBlur-deviation:0;font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.0907 0-2 .9093-2 2v10c0 1.0907.90929 2 2 2h10c1.0907 0 2-.9093 2-2v-10c0-1.0907-.90929-2-2-2zm0 2h10v8h-10zm3 2v4l4-2z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_viewport.svg b/editor/icons/icon_viewport.svg index 4c3069adc2..7cd5d73cde 100644 --- a/editor/icons/icon_viewport.svg +++ b/editor/icons/icon_viewport.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2c-0.5304 8.01e-5 -1.0391 0.21085-1.4141 0.58594-0.37509 0.37501-0.58586 0.88366-0.58594 1.4141v8c8.03e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.37509 0.88366 0.58586 1.4141 0.58594h10c1.1046 0 2-0.89543 2-2v-8c0-1.1046-0.89543-2-2-2zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v8c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-8c9.6e-6 -0.55228 0.44772-0.99999 1-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2c-.5304.0000801-1.0391.21085-1.4141.58594-.37509.37501-.58586.88366-.58594 1.4141v8c.0000803.5304.21085 1.0391.58594 1.4141.37501.37509.88366.58586 1.4141.58594h10c1.1046 0 2-.89543 2-2v-8c0-1.1046-.89543-2-2-2zm0 1h10c.55228.0000096.99999.44772 1 1v8c-.00001.55228-.44772.99999-1 1h-10c-.55228-.00001-.99999-.44772-1-1v-8c.0000096-.55228.44772-.99999 1-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_viewport_container.svg b/editor/icons/icon_viewport_container.svg index 28df39af51..18dcddc15f 100644 --- a/editor/icons/icon_viewport_container.svg +++ b/editor/icons/icon_viewport_container.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.89543-2 2v10c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.89543 2-2v-10c0-1.1046-0.89543-2-2-2zm0 2h10v10h-10zm3 1c-0.5304 1e-4 -1.0391 0.21084-1.4141 0.58594-0.37509 0.375-0.58586 0.88366-0.58594 1.4141v4c8e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.3751 0.88366 0.58584 1.4141 0.58594h4c1.1046 0 2-0.8954 2-2v-4c0-1.1046-0.89543-2-2-2zm0 1h4c0.55228 0 0.99999 0.4477 1 1v4c-1e-5 0.5523-0.44772 1-1 1h-4c-0.55228 0-0.99999-0.4477-1-1v-4c1e-5 -0.5523 0.44772-1 1-1z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .89543-2 2v10c0 1.1046.89543 2 2 2h10c1.1046 0 2-.89543 2-2v-10c0-1.1046-.89543-2-2-2zm0 2h10v10h-10zm3 1c-.5304.0001-1.0391.21084-1.4141.58594-.37509.375-.58586.88366-.58594 1.4141v4c.00008.5304.21085 1.0391.58594 1.4141.37501.3751.88366.58584 1.4141.58594h4c1.1046 0 2-.8954 2-2v-4c0-1.1046-.89543-2-2-2zm0 1h4c.55228 0 .99999.4477 1 1v4c-.00001.5523-.44772 1-1 1h-4c-.55228 0-.99999-.4477-1-1v-4c.00001-.5523.44772-1 1-1z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_viewport_speed.svg b/editor/icons/icon_viewport_speed.svg index e64b5a8059..364eb4969b 100644 --- a/editor/icons/icon_viewport_speed.svg +++ b/editor/icons/icon_viewport_speed.svg @@ -1,4 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333333 4.2333333" xmlns="http://www.w3.org/2000/svg"> -<path d="m1.5875 0c-0.28858 0-0.52917 0.24059-0.52917 0.52917v0.61132c-0.085589-0.051-0.18113-0.0891-0.28525-0.0853-0.34849 0.0127-0.5952 0.37346-0.48059 0.70278l0.26355 0.79066c0.048664 0.14623 0.15979 0.24805 0.29249 0.30644l-0.60927 0.40669c-0.13121 0.0845-0.22102 0.22389-0.24133 0.3633-0.020312 0.13941 0.017471 0.26985 0.087333 0.37465s0.17614 0.19045 0.31264 0.22532c0.13634 0.0348 0.29946 6e-3 0.42788-0.0827h5.159e-4l1.0852-0.72348 0.26097 0.52192c0.11682 0.23391 0.39274 0.34829 0.64079 0.26561l0.79375-0.26458-0.00775 3e-3c0.15105-0.0454 0.27732-0.15615 0.33486-0.2863 0.057538-0.13015 0.055144-0.26773 0.014986-0.38809-0.03156-0.0946-0.10972-0.1687-0.19275-0.23617 0.069099-0.0546 0.1445-0.10364 0.18035-0.19325 0.051761-0.12941 0.045257-0.29292-0.02377-0.43098l-0.26459-0.52946c-0.089407-0.17933-0.27348-0.29308-0.47335-0.29305h-0.1111c0.052029-0.0817 0.1111-0.16214 0.1111-0.26458v-0.79375c0-0.28858-0.24059-0.52917-0.52917-0.52917z" color="#000000" color-rendering="auto" dominant-baseline="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path d="m1.5875 0.26458c-0.14658 0-0.26458 0.118-0.26458 0.26459v0.79375c0 0.14658 0.118 0.26458 0.26458 0.26458h0.26458v0.262a0.26461 0.26461 0 0 0 -0.083716 0.0165l-0.5426 0.18086-0.18087-0.5426a0.26461 0.26461 0 0 0 -0.262 -0.18448 0.26461 0.26461 0 0 0 -0.2403 0.3514l0.26458 0.79375a0.26461 0.26461 0 0 0 0.33486 0.16743l0.44545-0.14831v0.16174c0 0.0108 0.00495 0.02 0.0062 0.0305l-1.2113 0.80771a0.26461 0.26461 0 1 0 0.29352 0.44028l1.3379-0.89194 0.39532 0.79014a0.26461 0.26461 0 0 0 0.32039 0.1328l0.79375-0.26458a0.26461 0.26461 0 1 0 -0.16743 -0.50175l-0.57619 0.19172-0.25787-0.51625c0.072998-0.047 0.12402-0.12495 0.12402-0.21859v-0.26458h0.36587l0.1912 0.38292a0.26461 0.26461 0 1 0 0.47336 -0.23668l-0.26458-0.52916a0.26461 0.26461 0 0 0 -0.23668 -0.14625h-0.79375v-0.26458h0.26458c0.14658 0 0.26458-0.118 0.26458-0.26458v-0.79375c0-0.14659-0.118-0.26459-0.26458-0.26459zm0 0.52917h0.26458v0.52917h-0.26458z" fill="#fff" fill-opacity=".99608"/> -</svg> +<svg height="16" viewBox="0 0 4.2333333 4.2333333" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1.5875 0c-.28858 0-.52917.24059-.52917.52917v.61132c-.085589-.051-.18113-.0891-.28525-.0853-.34849.0127-.5952.37346-.48059.70278l.26355.79066c.048664.14623.15979.24805.29249.30644l-.60927.40669c-.13121.0845-.22102.22389-.24133.3633-.020312.13941.017471.26985.087333.37465s.17614.19045.31264.22532c.13634.0348.29946.006.42788-.0827h.0005159l1.0852-.72348.26097.52192c.11682.23391.39274.34829.64079.26561l.79375-.26458-.00775.003c.15105-.0454.27732-.15615.33486-.2863.057538-.13015.055144-.26773.014986-.38809-.03156-.0946-.10972-.1687-.19275-.23617.069099-.0546.1445-.10364.18035-.19325.051761-.12941.045257-.29292-.02377-.43098l-.26459-.52946c-.089407-.17933-.27348-.29308-.47335-.29305h-.1111c.052029-.0817.1111-.16214.1111-.26458v-.79375c0-.28858-.24059-.52917-.52917-.52917z"/><path d="m1.5875.26458c-.14658 0-.26458.118-.26458.26459v.79375c0 .14658.118.26458.26458.26458h.26458v.262a.26461.26461 0 0 0 -.083716.0165l-.5426.18086-.18087-.5426a.26461.26461 0 0 0 -.262-.18448.26461.26461 0 0 0 -.2403.3514l.26458.79375a.26461.26461 0 0 0 .33486.16743l.44545-.14831v.16174c0 .0108.00495.02.0062.0305l-1.2113.80771a.26461.26461 0 1 0 .29352.44028l1.3379-.89194.39532.79014a.26461.26461 0 0 0 .32039.1328l.79375-.26458a.26461.26461 0 1 0 -.16743-.50175l-.57619.19172-.25787-.51625c.072998-.047.12402-.12495.12402-.21859v-.26458h.36587l.1912.38292a.26461.26461 0 1 0 .47336-.23668l-.26458-.52916a.26461.26461 0 0 0 -.23668-.14625h-.79375v-.26458h.26458c.14658 0 .26458-.118.26458-.26458v-.79375c0-.14659-.118-.26459-.26458-.26459zm0 .52917h.26458v.52917h-.26458z" fill="#fff" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_viewport_texture.svg b/editor/icons/icon_viewport_texture.svg index 57cb08b32c..145beff6bc 100644 --- a/editor/icons/icon_viewport_texture.svg +++ b/editor/icons/icon_viewport_texture.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 2c-0.5304 8.01e-5 -1.0391 0.21085-1.4141 0.58594-0.37509 0.37501-0.58586 0.88366-0.58594 1.4141v8c8.03e-5 0.5304 0.21085 1.0391 0.58594 1.4141 0.37501 0.37509 0.88366 0.58586 1.4141 0.58594h10c1.1046 0 2-0.89543 2-2v-8c0-1.1046-0.89543-2-2-2h-10zm0 1h10c0.55228 9.6e-6 0.99999 0.44772 1 1v8c-1e-5 0.55228-0.44772 0.99999-1 1h-10c-0.55228-1e-5 -0.99999-0.44772-1-1v-8c9.6e-6 -0.55228 0.44772-0.99999 1-1zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-1-1h-1v-1h-1z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 2c-.5304.0000801-1.0391.21085-1.4141.58594-.37509.37501-.58586.88366-.58594 1.4141v8c.0000803.5304.21085 1.0391.58594 1.4141.37501.37509.88366.58586 1.4141.58594h10c1.1046 0 2-.89543 2-2v-8c0-1.1046-.89543-2-2-2h-10zm0 1h10c.55228.0000096.99999.44772 1 1v8c-.00001.55228-.44772.99999-1 1h-10c-.55228-.00001-.99999-.44772-1-1v-8c.0000096-.55228.44772-.99999 1-1zm6 3v1h-1v1h-2v1h-1v1h-1v1h2 2 2 2v-2h-1v-1-1h-1v-1z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_viewport_zoom.svg b/editor/icons/icon_viewport_zoom.svg index 18d4ec32ce..6d64d1b8a4 100644 --- a/editor/icons/icon_viewport_zoom.svg +++ b/editor/icons/icon_viewport_zoom.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g> -<path d="m6 0c-3.3019 0-6 2.6981-6 6s2.6981 6 6 6h0.00195c0.88828 0 1.737-0.2588 2.5332-0.6367l3.8281 3.8281c0.39053 0.3904 1.0235 0.3904 1.4141 0l1.4141-1.4141c0.39033-0.3905 0.39033-1.0235 0-1.414l-3.791-3.791c0.02779-0.058 0.06588-0.1109 0.0918-0.17 0.05554-0.1268 0.08414-0.2638 0.08398-0.4023h1.4238c0.55226-1e-4 0.99994-0.4477 1-1v-1h1c0.55226-1e-4 0.99994-0.4477 1-1v-2c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-1v-1c-5.5e-5 -0.5523-0.44774-0.9999-1-1h-2c-0.55226 1e-4 -0.99994 0.4477-1 1v1h-0.00977c1.44e-4 -0.3151-0.14822-0.6118-0.40039-0.8008-1.0353-0.7764-2.2938-1.1967-3.5879-1.1992h-0.00195z" color="#000000" color-rendering="auto" dominant-baseline="auto" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -<path d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.752 -0.83398l4.3184 4.3184 1.4141-1.4141-4.3184-4.3184a5 5 0 0 0 0.41016 -0.75195h-0.57617v-2h-1a3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3 3 3 0 0 1 2 0.76758v-1.7676h0.99023a5 5 0 0 0 -2.9902 -1zm5 0v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#fff"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 0c-3.3019 0-6 2.6981-6 6s2.6981 6 6 6h.00195c.88828 0 1.737-.2588 2.5332-.6367l3.8281 3.8281c.39053.3904 1.0235.3904 1.4141 0l1.4141-1.4141c.39033-.3905.39033-1.0235 0-1.414l-3.791-3.791c.02779-.058.06588-.1109.0918-.17.05554-.1268.08414-.2638.08398-.4023h1.4238c.55226-.0001.99994-.4477 1-1v-1h1c.55226-.0001.99994-.4477 1-1v-2c-.000055-.5523-.44774-.9999-1-1h-1v-1c-.000055-.5523-.44774-.9999-1-1h-2c-.55226.0001-.99994.4477-1 1v1h-.00977c.000144-.3151-.14822-.6118-.40039-.8008-1.0353-.7764-2.2938-1.1967-3.5879-1.1992h-.00195z"/><path d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.752-.83398l4.3184 4.3184 1.4141-1.4141-4.3184-4.3184a5 5 0 0 0 .41016-.75195h-.57617v-2h-1a3 3 0 0 1 -3 3 3 3 0 0 1 -3-3 3 3 0 0 1 3-3 3 3 0 0 1 2 .76758v-1.7676h.99023a5 5 0 0 0 -2.9902-1zm5 0v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#fff"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visibility_enabler.svg b/editor/icons/icon_visibility_enabler.svg index 868437108a..70e4f081c2 100644 --- a/editor/icons/icon_visibility_enabler.svg +++ b/editor/icons/icon_visibility_enabler.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v3h1v-2h2v-1h-3zm11 0v1h2v2h1v-3h-3zm-4 1c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.0058594 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0 -0.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-7 6v3h3v-1h-2v-2h-1zm13 0v2h-2v1h3v-3h-1z" color="#000000" color-rendering="auto" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v3h1v-2h2v-1zm11 0v1h2v2h1v-3zm-4 1c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.0058594.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0-.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-7 6v3h3v-1h-2v-2zm13 0v2h-2v1h3v-3z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visibility_enabler_2d.svg b/editor/icons/icon_visibility_enabler_2d.svg index 1cde98da61..2976e468ed 100644 --- a/editor/icons/icon_visibility_enabler_2d.svg +++ b/editor/icons/icon_visibility_enabler_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m1 1v3h1v-2h2v-1h-3zm11 0v1h2v2h1v-3h-3zm-4 1c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.0058594 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0 -0.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm-7 6v3h3v-1h-2v-2h-1zm13 0v2h-2v1h3v-3h-1z" color="#000000" color-rendering="auto" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m1 1v3h1v-2h2v-1zm11 0v1h2v2h1v-3zm-4 1c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.0058594.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246s5.8365-1.7892 6.9609-5.7246a1.0001 1.0001 0 0 0 0-.55273c-1.1003-3.7876-4.4066-5.7227-6.9609-5.7227zm0 2a4 4 0 0 1 4 4 4 4 0 0 1 -4 4 4 4 0 0 1 -4-4 4 4 0 0 1 4-4zm0 2a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm-7 6v3h3v-1h-2v-2zm13 0v2h-2v1h3v-3z" fill="#a5b7f3" fill-opacity=".98824" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visibility_notifier.svg b/editor/icons/icon_visibility_notifier.svg index 2a631f9216..c908d5c99d 100644 --- a/editor/icons/icon_visibility_notifier.svg +++ b/editor/icons/icon_visibility_notifier.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m12 1v6h2v-6h-2zm-4 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.0058594 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246 1.4907 0 3.2717-0.65207 4.7109-2h-0.71094-2v-0.54102a4 4 0 0 1 -2 0.54102 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4 4 4 0 0 1 2 0.54102v-2.1816c-0.68312-0.23834-1.3644-0.35938-2-0.35938zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm4 2v2h2v-2h-2z" color="#000000" color-rendering="auto" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 1v6h2v-6zm-4 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.0058594.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246 1.4907 0 3.2717-.65207 4.7109-2h-.71094-2v-.54102a4 4 0 0 1 -2 .54102 4 4 0 0 1 -4-4 4 4 0 0 1 4-4 4 4 0 0 1 2 .54102v-2.1816c-.68312-.23834-1.3644-.35938-2-.35938zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm4 2v2h2v-2z" fill="#fc9c9c" fill-opacity=".99608" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visibility_notifier_2d.svg b/editor/icons/icon_visibility_notifier_2d.svg index e7eac0c715..e05d7d3887 100644 --- a/editor/icons/icon_visibility_notifier_2d.svg +++ b/editor/icons/icon_visibility_notifier_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m12 1v6h2v-6h-2zm-4 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -0.0058594 0.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246 1.4907 0 3.2717-0.65207 4.7109-2h-0.71094-2v-0.54102a4 4 0 0 1 -2 0.54102 4 4 0 0 1 -4 -4 4 4 0 0 1 4 -4 4 4 0 0 1 2 0.54102v-2.1816c-0.68312-0.23834-1.3644-0.35938-2-0.35938zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 -2 2 2 0 0 0 -2 -2zm4 2v2h2v-2h-2z" color="#000000" color-rendering="auto" fill="#a5b7f3" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 1v6h2v-6zm-4 2c-2.5567 0-5.7907 1.9477-6.9551 5.7051a1.0001 1.0001 0 0 0 -.0058594.57031c1.1244 3.9354 4.4609 5.7246 6.9609 5.7246 1.4907 0 3.2717-.65207 4.7109-2h-.71094-2v-.54102a4 4 0 0 1 -2 .54102 4 4 0 0 1 -4-4 4 4 0 0 1 4-4 4 4 0 0 1 2 .54102v-2.1816c-.68312-.23834-1.3644-.35938-2-.35938zm0 4a2 2 0 0 0 -2 2 2 2 0 0 0 2 2 2 2 0 0 0 2-2 2 2 0 0 0 -2-2zm4 2v2h2v-2z" fill="#a5b7f3" fill-rule="evenodd"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visual_shader.svg b/editor/icons/icon_visual_shader.svg index ded54276f4..15cb60d2e3 100644 --- a/editor/icons/icon_visual_shader.svg +++ b/editor/icons/icon_visual_shader.svg @@ -1,10 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<path d="m2.8642 9.9954v6h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1-1 1v-4z" fill="#e0e0e0"/> -<path d="m10.864 9.9954a2 2 0 0 0-1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v2h2a2 2 0 0 0 1.7324-1 2 2 0 0 0 0-2 2 2 0 0 0-1.7324-1h2v-2z" fill="#e0e0e0"/> -<path d="m2 1c-0.55226 1e-4 -0.99994 0.4477-1 1v7h2v-6h6v3c0 0.554 0.44599 1 1 1h3v2h2v-3l-5-5z" fill="#e0e0e0"/> -<path d="m4 6h2v1h-2z" fill="#ffeb70"/> -<path d="m8 8h4v1h-4z" fill="#9dff70"/> -<path d="m7 6h1v1h-1z" fill="#70deff"/> -<path d="m4 4h3v1h-3z" fill="#ff7070"/> -<path d="m4 8h3v1h-3z" fill="#70ffb9"/> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#e0e0e0"><path d="m2.8642 9.9954v6h2a3 3 0 0 0 3-3v-3h-2v3a1 1 0 0 1 -1 1v-4z"/><path d="m10.864 9.9954a2 2 0 0 0 -1.7324 1 2 2 0 0 0 0 2 2 2 0 0 0 1.7324 1h-2v2h2a2 2 0 0 0 1.7324-1 2 2 0 0 0 0-2 2 2 0 0 0 -1.7324-1h2v-2z"/><path d="m2 1c-.55226.0001-.99994.4477-1 1v7h2v-6h6v3c0 .554.44599 1 1 1h3v2h2v-3l-5-5z"/></g><path d="m4 6h2v1h-2z" fill="#ffeb70"/><path d="m8 8h4v1h-4z" fill="#9dff70"/><path d="m7 6h1v1h-1z" fill="#70deff"/><path d="m4 4h3v1h-3z" fill="#ff7070"/><path d="m4 8h3v1h-3z" fill="#70ffb9"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_visual_shader_port.svg b/editor/icons/icon_visual_shader_port.svg index da94e48a21..9df6344fe2 100644 --- a/editor/icons/icon_visual_shader_port.svg +++ b/editor/icons/icon_visual_shader_port.svg @@ -1,7 +1 @@ -<svg width="10" height="10" version="1.1" viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1042.4)"> -<g> -<path d="m1.9883 1042.4c-0.5469 0.01-0.98717 0.4511-0.98828 0.998v8c1.163e-4 0.7986 0.89011 1.275 1.5547 0.8321l6-4c0.59363-0.3959 0.59363-1.2682 0-1.6641l-6-4c-0.1678-0.1111-0.3652-0.1689-0.56641-0.166z" color="#000000" color-rendering="auto" dominant-baseline="auto" fill="#fff" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="font-feature-settings:normal;font-variant-alternates:normal;font-variant-caps:normal;font-variant-east-asian:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-position:normal;isolation:auto;mix-blend-mode:normal;shape-padding:0;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-orientation:mixed;text-transform:none;white-space:normal"/> -</g> -</g> -</svg> +<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><path d="m1.9883 1042.4c-.5469.01-.98717.4511-.98828.998v8c.0001163.7986.89011 1.275 1.5547.8321l6-4c.59363-.3959.59363-1.2682 0-1.6641l-6-4c-.1678-.1111-.3652-.1689-.56641-.166z" fill="#fff" fill-rule="evenodd" transform="translate(0 -1042.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_warning.svg b/editor/icons/icon_warning.svg index 8f6bf2184a..698288d5a9 100644 --- a/editor/icons/icon_warning.svg +++ b/editor/icons/icon_warning.svg @@ -1,5 +1 @@ -<svg width="8" height="8" version="1.1" viewBox="0 0 8 8" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1044.4)"> -<rect y="1044.4" width="8" height="8" ry="4" fill="#ffdd65"/> -</g> -</svg> +<svg height="8" viewBox="0 0 8 8" width="8" xmlns="http://www.w3.org/2000/svg"><rect fill="#ffdd65" height="8" ry="4" width="8"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_window_dialog.svg b/editor/icons/icon_window_dialog.svg index 2b450dee33..3c7be2a58d 100644 --- a/editor/icons/icon_window_dialog.svg +++ b/editor/icons/icon_window_dialog.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m3 1c-1.1046 0-2 0.8954-2 2v1h14v-1c0-1.1046-0.89543-2-2-2h-10zm9 1h1v1h-1v-1zm-11 3v8c0 1.1046 0.89543 2 2 2h10c1.1046 0 2-0.8954 2-2v-8h-14z" fill="#a5efac"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1c-1.1046 0-2 .8954-2 2v1h14v-1c0-1.1046-.89543-2-2-2zm9 1h1v1h-1zm-11 3v8c0 1.1046.89543 2 2 2h10c1.1046 0 2-.8954 2-2v-8z" fill="#a5efac"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_world.svg b/editor/icons/icon_world.svg index cf9b23b61b..3db96a75a6 100644 --- a/editor/icons/icon_world.svg +++ b/editor/icons/icon_world.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m12 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 -1 1 1 0 0 0 -1 -1zm-6 3a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 5 -5 5 5 0 0 0 -5 -5z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m12 2a1 1 0 0 0 -1 1 1 1 0 0 0 1 1 1 1 0 0 0 1-1 1 1 0 0 0 -1-1zm-6 3a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5 5 5 0 0 0 -5-5z" fill="#e0e0e0"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_world_2d.svg b/editor/icons/icon_world_2d.svg index e2b9e62703..862242ec44 100644 --- a/editor/icons/icon_world_2d.svg +++ b/editor/icons/icon_world_2d.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path d="m2 1037.4a1.0001 1.0001 0 0 0 -1 1v10a1.0001 1.0001 0 0 0 1 1c2.3667 0 3.9746 0.4629 5.7246 0.9629s3.6421 1.0371 6.2754 1.0371a1.0001 1.0001 0 0 0 1 -1v-10a1.0001 1.0001 0 0 0 -1 -1c-2.3667 0-3.9746-0.4609-5.7246-0.9609-1.75-0.5-3.6421-1.0391-6.2754-1.0391zm1 2.0957c1.7984 0.1158 3.2574 0.448 4.7246 0.8672 1.4977 0.4279 3.194 0.8188 5.2754 0.9414v8.002c-1.7985-0.1158-3.2574-0.448-4.7246-0.8672-1.4977-0.4279-3.194-0.8208-5.2754-0.9434v-8z" color="#000000" color-rendering="auto" fill="#e0e0e0" fill-rule="evenodd" image-rendering="auto" shape-rendering="auto" solid-color="#000000" style="block-progression:tb;isolation:auto;mix-blend-mode:normal;text-decoration-color:#000000;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none;white-space:normal"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m2 1037.4a1.0001 1.0001 0 0 0 -1 1v10a1.0001 1.0001 0 0 0 1 1c2.3667 0 3.9746.4629 5.7246.9629s3.6421 1.0371 6.2754 1.0371a1.0001 1.0001 0 0 0 1-1v-10a1.0001 1.0001 0 0 0 -1-1c-2.3667 0-3.9746-.4609-5.7246-.9609s-3.6421-1.0391-6.2754-1.0391zm1 2.0957c1.7984.1158 3.2574.448 4.7246.8672 1.4977.4279 3.194.8188 5.2754.9414v8.002c-1.7985-.1158-3.2574-.448-4.7246-.8672-1.4977-.4279-3.194-.8208-5.2754-.9434z" fill="#e0e0e0" fill-rule="evenodd" transform="translate(0 -1036.4)"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_world_environment.svg b/editor/icons/icon_world_environment.svg index d7dbd4d73e..e87a4b5b0c 100644 --- a/editor/icons/icon_world_environment.svg +++ b/editor/icons/icon_world_environment.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1.7305 2.3125c-0.83125 1.5372-1.2685 3.1037-1.2695 4.6816-0.64057-0.11251-1.3005-0.27158-1.9766-0.47266a5 5 0 0 1 3.2461 -4.209zm3.4629 0.0039062a5 5 0 0 1 3.2383 4.1875c-0.65187 0.17448-1.3077 0.32867-1.9727 0.44922-0.00845-1.5627-0.44294-3.1141-1.2656-4.6367zm-1.7324 0.0078126c1.0126 1.593 1.5 3.1425 1.5 4.6758 0 0.054042-0.0066161 0.10803-0.0078125 0.16211-0.96392 0.096801-1.9566 0.1103-2.9844 0.027344-0.0016335-0.063192-0.0078125-0.12632-0.0078125-0.18945 0-1.5333 0.48744-3.0828 1.5-4.6758zm4.8789 5.7578a5 5 0 0 1 -3.1484 3.6055c0.57106-1.0564 0.95277-2.1268 1.1367-3.2051 0.68204-0.10905 1.3556-0.23789 2.0117-0.40039zm-9.7461 0.033203c0.68377 0.18153 1.3555 0.33345 2.0098 0.43164 0.18781 1.0551 0.56647 2.1026 1.125 3.1367a5 5 0 0 1 -3.1348 -3.5684zm6.168 0.55469c-0.22615 0.98866-0.65424 1.9884-1.3008 3.0059-0.63811-1.0042-1.0645-1.9908-1.293-2.9668 0.89027 0.054126 1.7517 0.029377 2.5938-0.039062z" fill="#fc9c9c" fill-opacity=".99608"/> -<path transform="translate(0 1036.4)" d="m8 1v2.3242c1.0126 1.593 1.5 3.1425 1.5 4.6758 0 0.054042-0.0066161 0.10803-0.0078125 0.16211-0.4894 0.049148-0.98713 0.077552-1.4922 0.082031v1.4922c0.43915-0.0075968 0.87287-0.031628 1.3008-0.066406-0.22615 0.98866-0.65424 1.9884-1.3008 3.0059v2.3242a7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm1.7324 2.3164a5 5 0 0 1 3.2383 4.1875c-0.65187 0.17448-1.3077 0.32867-1.9727 0.44922-0.00845-1.5627-0.44294-3.1141-1.2656-4.6367zm3.1465 5.7656a5 5 0 0 1 -3.1484 3.6055c0.57106-1.0564 0.95277-2.1268 1.1367-3.2051 0.68204-0.10905 1.3556-0.23789 2.0117-0.40039z" fill="#a5b7f3"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-1.7305 2.3125c-.83125 1.5372-1.2685 3.1037-1.2695 4.6816-.64057-.11251-1.3005-.27158-1.9766-.47266a5 5 0 0 1 3.2461-4.209zm3.4629.0039062a5 5 0 0 1 3.2383 4.1875c-.65187.17448-1.3077.32867-1.9727.44922-.00845-1.5627-.44294-3.1141-1.2656-4.6367zm-1.7324.0078126c1.0126 1.593 1.5 3.1425 1.5 4.6758 0 .054042-.0066161.10803-.0078125.16211-.96392.096801-1.9566.1103-2.9844.027344-.0016335-.063192-.0078125-.12632-.0078125-.18945 0-1.5333.48744-3.0828 1.5-4.6758zm4.8789 5.7578a5 5 0 0 1 -3.1484 3.6055c.57106-1.0564.95277-2.1268 1.1367-3.2051.68204-.10905 1.3556-.23789 2.0117-.40039zm-9.7461.033203c.68377.18153 1.3555.33345 2.0098.43164.18781 1.0551.56647 2.1026 1.125 3.1367a5 5 0 0 1 -3.1348-3.5684zm6.168.55469c-.22615.98866-.65424 1.9884-1.3008 3.0059-.63811-1.0042-1.0645-1.9908-1.293-2.9668.89027.054126 1.7517.029377 2.5938-.039062z" fill="#fc9c9c" fill-opacity=".99608"/><path d="m8 1v2.3242c1.0126 1.593 1.5 3.1425 1.5 4.6758 0 .054042-.0066161.10803-.0078125.16211-.4894.049148-.98713.077552-1.4922.082031v1.4922c.43915-.0075968.87287-.031628 1.3008-.066406-.22615.98866-.65424 1.9884-1.3008 3.0059v2.3242a7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm1.7324 2.3164a5 5 0 0 1 3.2383 4.1875c-.65187.17448-1.3077.32867-1.9727.44922-.00845-1.5627-.44294-3.1141-1.2656-4.6367zm3.1465 5.7656a5 5 0 0 1 -3.1484 3.6055c.57106-1.0564.95277-2.1268 1.1367-3.2051.68204-.10905 1.3556-.23789 2.0117-.40039z" fill="#a5b7f3"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_x509_certificate.svg b/editor/icons/icon_x509_certificate.svg new file mode 100644 index 0000000000..e175fa3234 --- /dev/null +++ b/editor/icons/icon_x509_certificate.svg @@ -0,0 +1 @@ +<svg height="16" viewBox="0 0 4.233 4.233" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3.967.263-3.704.001v2.646h1.427a.993.993 0 0 1 -.022-.096.993.993 0 0 1 -.012-.099.993.993 0 0 1 -.002-.07.993.993 0 0 1 .005-.1.993.993 0 0 1 .014-.097.993.993 0 0 1 .025-.096.993.993 0 0 1 .034-.093.993.993 0 0 1 .043-.09.993.993 0 0 1 .052-.085.993.993 0 0 1 .06-.079.993.993 0 0 1 .068-.072.993.993 0 0 1 .074-.066.993.993 0 0 1 .08-.057.993.993 0 0 1 .087-.05.993.993 0 0 1 .09-.04.993.993 0 0 1 .095-.031.993.993 0 0 1 .096-.022.993.993 0 0 1 .099-.012.993.993 0 0 1 .07-.003.993.993 0 0 1 .099.006.993.993 0 0 1 .098.014.993.993 0 0 1 .096.025.993.993 0 0 1 .094.034.993.993 0 0 1 .089.043.993.993 0 0 1 .084.052.993.993 0 0 1 .08.06.993.993 0 0 1 .072.068.993.993 0 0 1 .065.074.993.993 0 0 1 .058.08.993.993 0 0 1 .05.087.993.993 0 0 1 .04.09.993.993 0 0 1 .031.095.993.993 0 0 1 .022.096.993.993 0 0 1 .012.099.993.993 0 0 1 .002.07.993.993 0 0 1 -.004.1.993.993 0 0 1 -.015.097.993.993 0 0 1 -.017.068h.365z" fill="#e0e0e0"/><g fill="#ff8484"><path d="m2.116 3.175v.793l.53-.253.529.253v-.793z"/><circle cx="2.646" cy="2.645" r=".794"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_y_sort.svg b/editor/icons/icon_y_sort.svg index 1b48f4b8e3..dbcefef216 100644 --- a/editor/icons/icon_y_sort.svg +++ b/editor/icons/icon_y_sort.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m4 1l-3 3h2v8h-2l3 3 3-3h-2v-8h2l-3-3zm5 1v2h6v-2h-6zm0 5v2h4v-2h-4zm0 5v2h2v-2h-2z" fill="#a5b7f3" fill-opacity=".98824"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m4 1-3 3h2v8h-2l3 3 3-3h-2v-8h2zm5 1v2h6v-2zm0 5v2h4v-2zm0 5v2h2v-2z" fill="#a5b7f3" fill-opacity=".98824"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_zoom.svg b/editor/icons/icon_zoom.svg index 2b355574a0..aa517b6ae2 100644 --- a/editor/icons/icon_zoom.svg +++ b/editor/icons/icon_zoom.svg @@ -1,5 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)"> -<path transform="translate(0 1036.4)" d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.752 -0.83398l4.3184 4.3184 1.4141-1.4141-4.3184-4.3184a5 5 0 0 0 0.41016 -0.75195h-0.57617v-2h-1a3 3 0 0 1 -3 3 3 3 0 0 1 -3 -3 3 3 0 0 1 3 -3 3 3 0 0 1 2 0.76758v-1.7676h0.99023a5 5 0 0 0 -2.9902 -1zm5 0v2h-2v2h2v2h2v-2h2v-2h-2v-2h-2z" fill="#e0e0e0" fill-opacity=".99608"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 1a5 5 0 0 0 -5 5 5 5 0 0 0 5 5 5 5 0 0 0 2.752-.83398l4.3184 4.3184 1.4141-1.4141-4.3184-4.3184a5 5 0 0 0 .41016-.75195h-.57617v-2h-1a3 3 0 0 1 -3 3 3 3 0 0 1 -3-3 3 3 0 0 1 3-3 3 3 0 0 1 2 .76758v-1.7676h.99023a5 5 0 0 0 -2.9902-1zm5 0v2h-2v2h2v2h2v-2h2v-2h-2v-2z" fill="#e0e0e0" fill-opacity=".99608"/></svg>
\ No newline at end of file diff --git a/editor/icons/icon_zoom_less.svg b/editor/icons/icon_zoom_less.svg index aebadf443f..cf3b4475c9 100644 --- a/editor/icons/icon_zoom_less.svg +++ b/editor/icons/icon_zoom_less.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-4 6h8v2h-8v-2z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"><circle cx="8" cy="1044.4" fill-opacity=".39216" r="8" stroke-opacity=".98824"/><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-4 6h8v2h-8z" fill="#e0e0e0" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_zoom_more.svg b/editor/icons/icon_zoom_more.svg index be1e13d145..8847eea53f 100644 --- a/editor/icons/icon_zoom_more.svg +++ b/editor/icons/icon_zoom_more.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-1 3h2v3h3v2h-3v3h-2v-3h-3v-2h3v-3z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"><circle cx="8" cy="1044.4" fill-opacity=".39216" r="8" stroke-opacity=".98824"/><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-1 3h2v3h3v2h-3v3h-2v-3h-3v-2h3z" fill="#e0e0e0" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/icons/icon_zoom_reset.svg b/editor/icons/icon_zoom_reset.svg index aa5ad03727..6ecb4111fe 100644 --- a/editor/icons/icon_zoom_reset.svg +++ b/editor/icons/icon_zoom_reset.svg @@ -1,6 +1 @@ -<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> -<g transform="translate(0 -1036.4)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"> -<circle cx="8" cy="1044.4" r="8" fill-opacity=".39216" stroke-opacity=".98824"/> -<path transform="translate(0 1036.4)" d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7 -7 7 7 0 0 0 -7 -7zm-0.029297 3.002a1.0001 1.0001 0 0 1 1.0293 0.99805v7h-2v-5.1309l-1.4453 0.96289-1.1094-1.6641 3-2a1.0001 1.0001 0 0 1 0.52539 -0.16602z" fill="#e0e0e0"/> -</g> -</svg> +<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g stroke-linecap="round" stroke-linejoin="round" stroke-width="2" transform="translate(0 -1036.4)"><circle cx="8" cy="1044.4" fill-opacity=".39216" r="8" stroke-opacity=".98824"/><path d="m8 1a7 7 0 0 0 -7 7 7 7 0 0 0 7 7 7 7 0 0 0 7-7 7 7 0 0 0 -7-7zm-.029297 3.002a1.0001 1.0001 0 0 1 1.0293.99805v7h-2v-5.1309l-1.4453.96289-1.1094-1.6641 3-2a1.0001 1.0001 0 0 1 .52539-.16602z" fill="#e0e0e0" transform="translate(0 1036.4)"/></g></svg>
\ No newline at end of file diff --git a/editor/import/editor_import_collada.cpp b/editor/import/editor_import_collada.cpp index 449124acec..d604a95320 100644 --- a/editor/import/editor_import_collada.cpp +++ b/editor/import/editor_import_collada.cpp @@ -176,7 +176,6 @@ Error ColladaImport::_create_scene_skeletons(Collada::Node *p_node) { Skeleton *sk = memnew(Skeleton); int bone = 0; - sk->set_use_bones_in_world_transform(true); // This improves compatibility in Collada for (int i = 0; i < p_node->children.size(); i++) { _populate_skeleton(sk, p_node->children[i], bone, -1); @@ -1208,7 +1207,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres const Collada::MeshData &meshdata = collada.state.mesh_data_map[meshid]; mesh->set_name(meshdata.name); Error err = _create_mesh_surfaces(morphs.size() == 0, mesh, ng2->material_map, meshdata, apply_xform, bone_remap, skin, morph, morphs, p_use_compression, use_mesh_builtin_materials); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err, err, "Cannot create mesh surface."); mesh_cache[meshid] = mesh; } else { @@ -1260,7 +1259,7 @@ Error ColladaImport::_create_resources(Collada::Node *p_node, bool p_use_compres Error ColladaImport::load(const String &p_path, int p_flags, bool p_force_make_tangents, bool p_use_compression) { Error err = collada.load(p_path, p_flags); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err, err, "Cannot load file '" + p_path + "'."); force_make_tangents = p_force_make_tangents; ERR_FAIL_COND_V(!collada.state.visual_scene_map.has(collada.state.root_visual_scene), ERR_INVALID_DATA); @@ -1778,7 +1777,7 @@ Node *EditorSceneImporterCollada::import_scene(const String &p_path, uint32_t p_ Error err = state.load(p_path, flags, p_flags & EditorSceneImporter::IMPORT_GENERATE_TANGENT_ARRAYS, p_flags & EditorSceneImporter::IMPORT_USE_COMPRESSION); - ERR_FAIL_COND_V(err != OK, NULL); + ERR_FAIL_COND_V_MSG(err != OK, NULL, "Cannot load scene from file '" + p_path + "'."); if (state.missing_textures.size()) { @@ -1831,7 +1830,7 @@ Ref<Animation> EditorSceneImporterCollada::import_animation(const String &p_path state.use_mesh_builtin_materials = false; Error err = state.load(p_path, Collada::IMPORT_FLAG_ANIMATION, p_flags & EditorSceneImporter::IMPORT_GENERATE_TANGENT_ARRAYS); - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Cannot load animation from file '" + p_path + "'."); state.create_animations(p_flags & EditorSceneImporter::IMPORT_ANIMATION_FORCE_ALL_TRACKS_IN_ALL_CLIPS, p_flags & EditorSceneImporter::IMPORT_ANIMATION_KEEP_VALUE_TRACKS); if (state.scene) diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp index 9ea7c86e0c..fcf0e4af6f 100644 --- a/editor/import/editor_scene_importer_gltf.cpp +++ b/editor/import/editor_scene_importer_gltf.cpp @@ -31,9 +31,12 @@ #include "editor_scene_importer_gltf.h" #include "core/crypto/crypto_core.h" #include "core/io/json.h" +#include "core/math/disjoint_set.h" #include "core/math/math_defs.h" #include "core/os/file_access.h" #include "core/os/os.h" +#include "modules/regex/regex.h" +#include "scene/3d/bone_attachment.h" #include "scene/3d/camera.h" #include "scene/3d/mesh_instance.h" #include "scene/animation/animation_player.h" @@ -152,14 +155,21 @@ static Transform _arr_to_xform(const Array &p_array) { return xform; } +String EditorSceneImporterGLTF::_sanitize_scene_name(const String &name) { + RegEx regex("([^a-zA-Z0-9_ -]+)"); + String p_name = regex.sub(name, "", true); + return p_name; +} + String EditorSceneImporterGLTF::_gen_unique_name(GLTFState &state, const String &p_name) { - int index = 1; + const String s_name = _sanitize_scene_name(p_name); String name; + int index = 1; while (true) { + name = s_name; - name = p_name; if (index > 1) { name += " " + itos(index); } @@ -174,20 +184,63 @@ String EditorSceneImporterGLTF::_gen_unique_name(GLTFState &state, const String return name; } +String EditorSceneImporterGLTF::_sanitize_bone_name(const String &name) { + String p_name = name.camelcase_to_underscore(true); + + RegEx pattern_del("([^a-zA-Z0-9_ ])+"); + p_name = pattern_del.sub(p_name, "", true); + + RegEx pattern_nospace(" +"); + p_name = pattern_nospace.sub(p_name, "_", true); + + RegEx pattern_multiple("_+"); + p_name = pattern_multiple.sub(p_name, "_", true); + + RegEx pattern_padded("0+(\\d+)"); + p_name = pattern_padded.sub(p_name, "$1", true); + + return p_name; +} + +String EditorSceneImporterGLTF::_gen_unique_bone_name(GLTFState &state, const GLTFSkeletonIndex skel_i, const String &p_name) { + + const String s_name = _sanitize_bone_name(p_name); + + String name; + int index = 1; + while (true) { + name = s_name; + + if (index > 1) { + name += "_" + itos(index); + } + if (!state.skeletons[skel_i].unique_names.has(name)) { + break; + } + index++; + } + + state.skeletons.write[skel_i].unique_names.insert(name); + + return name; +} + Error EditorSceneImporterGLTF::_parse_scenes(GLTFState &state) { ERR_FAIL_COND_V(!state.json.has("scenes"), ERR_FILE_CORRUPT); - Array scenes = state.json["scenes"]; + const Array &scenes = state.json["scenes"]; for (int i = 0; i < 1; i++) { //only first scene is imported - Dictionary s = scenes[i]; + const Dictionary &s = scenes[i]; ERR_FAIL_COND_V(!s.has("nodes"), ERR_UNAVAILABLE); - Array nodes = s["nodes"]; + const Array &nodes = s["nodes"]; for (int j = 0; j < nodes.size(); j++) { state.root_nodes.push_back(nodes[j]); } - if (s.has("name")) { - state.scene_name = s["name"]; + if (s.has("name") && s["name"] != "") { + state.scene_name = _gen_unique_name(state, s["name"]); + } else { + state.scene_name = _gen_unique_name(state, "Scene"); } } @@ -197,11 +250,11 @@ Error EditorSceneImporterGLTF::_parse_scenes(GLTFState &state) { Error EditorSceneImporterGLTF::_parse_nodes(GLTFState &state) { ERR_FAIL_COND_V(!state.json.has("nodes"), ERR_FILE_CORRUPT); - Array nodes = state.json["nodes"]; + const Array &nodes = state.json["nodes"]; for (int i = 0; i < nodes.size(); i++) { GLTFNode *node = memnew(GLTFNode); - Dictionary n = nodes[i]; + const Dictionary &n = nodes[i]; if (n.has("name")) { node->name = n["name"]; @@ -214,13 +267,6 @@ Error EditorSceneImporterGLTF::_parse_nodes(GLTFState &state) { } if (n.has("skin")) { node->skin = n["skin"]; - /* - if (!state.skin_users.has(node->skin)) { - state.skin_users[node->skin] = Vector<int>(); - } - - state.skin_users[node->skin].push_back(i); - */ } if (n.has("matrix")) { node->xform = _arr_to_xform(n["matrix"]); @@ -242,7 +288,7 @@ Error EditorSceneImporterGLTF::_parse_nodes(GLTFState &state) { } if (n.has("children")) { - Array children = n["children"]; + const Array &children = n["children"]; for (int j = 0; j < children.size(); j++) { node->children.push_back(children[j]); } @@ -251,22 +297,46 @@ Error EditorSceneImporterGLTF::_parse_nodes(GLTFState &state) { state.nodes.push_back(node); } - //build the hierarchy + // build the hierarchy + for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); node_i++) { - for (int i = 0; i < state.nodes.size(); i++) { + for (int j = 0; j < state.nodes[node_i]->children.size(); j++) { + GLTFNodeIndex child_i = state.nodes[node_i]->children[j]; - for (int j = 0; j < state.nodes[i]->children.size(); j++) { - int child = state.nodes[i]->children[j]; - ERR_FAIL_INDEX_V(child, state.nodes.size(), ERR_FILE_CORRUPT); - ERR_CONTINUE(state.nodes[child]->parent != -1); //node already has a parent, wtf. + ERR_FAIL_INDEX_V(child_i, state.nodes.size(), ERR_FILE_CORRUPT); + ERR_CONTINUE(state.nodes[child_i]->parent != -1); //node already has a parent, wtf. - state.nodes[child]->parent = i; + state.nodes[child_i]->parent = node_i; } } + _compute_node_heights(state); + return OK; } +void EditorSceneImporterGLTF::_compute_node_heights(GLTFState &state) { + + state.root_nodes.clear(); + for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); ++node_i) { + GLTFNode *node = state.nodes[node_i]; + node->height = 0; + + GLTFNodeIndex current_i = node_i; + while (current_i >= 0) { + const GLTFNodeIndex parent_i = state.nodes[current_i]->parent; + if (parent_i >= 0) { + ++node->height; + } + current_i = parent_i; + } + + if (node->height == 0) { + state.root_nodes.push_back(node_i); + } + } +} + static Vector<uint8_t> _parse_base64_uri(const String &uri) { int start = uri.find(","); @@ -292,14 +362,14 @@ Error EditorSceneImporterGLTF::_parse_buffers(GLTFState &state, const String &p_ if (!state.json.has("buffers")) return OK; - Array buffers = state.json["buffers"]; - for (int i = 0; i < buffers.size(); i++) { + const Array &buffers = state.json["buffers"]; + for (GLTFBufferIndex i = 0; i < buffers.size(); i++) { if (i == 0 && state.glb_data.size()) { state.buffers.push_back(state.glb_data); } else { - Dictionary buffer = buffers[i]; + const Dictionary &buffer = buffers[i]; if (buffer.has("uri")) { Vector<uint8_t> buffer_data; @@ -331,10 +401,10 @@ Error EditorSceneImporterGLTF::_parse_buffers(GLTFState &state, const String &p_ Error EditorSceneImporterGLTF::_parse_buffer_views(GLTFState &state) { ERR_FAIL_COND_V(!state.json.has("bufferViews"), ERR_FILE_CORRUPT); - Array buffers = state.json["bufferViews"]; - for (int i = 0; i < buffers.size(); i++) { + const Array &buffers = state.json["bufferViews"]; + for (GLTFBufferViewIndex i = 0; i < buffers.size(); i++) { - Dictionary d = buffers[i]; + const Dictionary &d = buffers[i]; GLTFBufferView buffer_view; @@ -352,7 +422,7 @@ Error EditorSceneImporterGLTF::_parse_buffer_views(GLTFState &state) { } if (d.has("target")) { - int target = d["target"]; + const int target = d["target"]; buffer_view.indices = target == ELEMENT_ARRAY_BUFFER; } @@ -389,10 +459,10 @@ EditorSceneImporterGLTF::GLTFType EditorSceneImporterGLTF::_get_type_from_str(co Error EditorSceneImporterGLTF::_parse_accessors(GLTFState &state) { ERR_FAIL_COND_V(!state.json.has("accessors"), ERR_FILE_CORRUPT); - Array accessors = state.json["accessors"]; - for (int i = 0; i < accessors.size(); i++) { + const Array &accessors = state.json["accessors"]; + for (GLTFAccessorIndex i = 0; i < accessors.size(); i++) { - Dictionary d = accessors[i]; + const Dictionary &d = accessors[i]; GLTFAccessor accessor; @@ -422,12 +492,12 @@ Error EditorSceneImporterGLTF::_parse_accessors(GLTFState &state) { if (d.has("sparse")) { //eeh.. - Dictionary s = d["sparse"]; + const Dictionary &s = d["sparse"]; - ERR_FAIL_COND_V(!d.has("count"), ERR_PARSE_ERROR); - accessor.sparse_count = d["count"]; - ERR_FAIL_COND_V(!d.has("indices"), ERR_PARSE_ERROR); - Dictionary si = d["indices"]; + ERR_FAIL_COND_V(!s.has("count"), ERR_PARSE_ERROR); + accessor.sparse_count = s["count"]; + ERR_FAIL_COND_V(!s.has("indices"), ERR_PARSE_ERROR); + const Dictionary &si = s["indices"]; ERR_FAIL_COND_V(!si.has("bufferView"), ERR_PARSE_ERROR); accessor.sparse_indices_buffer_view = si["bufferView"]; @@ -438,8 +508,8 @@ Error EditorSceneImporterGLTF::_parse_accessors(GLTFState &state) { accessor.sparse_indices_byte_offset = si["byteOffset"]; } - ERR_FAIL_COND_V(!d.has("values"), ERR_PARSE_ERROR); - Dictionary sv = d["values"]; + ERR_FAIL_COND_V(!s.has("values"), ERR_PARSE_ERROR); + const Dictionary &sv = s["values"]; ERR_FAIL_COND_V(!sv.has("bufferView"), ERR_PARSE_ERROR); accessor.sparse_values_buffer_view = sv["bufferView"]; @@ -456,7 +526,7 @@ Error EditorSceneImporterGLTF::_parse_accessors(GLTFState &state) { return OK; } -String EditorSceneImporterGLTF::_get_component_type_name(uint32_t p_component) { +String EditorSceneImporterGLTF::_get_component_type_name(const uint32_t p_component) { switch (p_component) { case COMPONENT_TYPE_BYTE: return "Byte"; @@ -470,7 +540,7 @@ String EditorSceneImporterGLTF::_get_component_type_name(uint32_t p_component) { return "<Error>"; } -String EditorSceneImporterGLTF::_get_type_name(GLTFType p_component) { +String EditorSceneImporterGLTF::_get_type_name(const GLTFType p_component) { static const char *names[] = { "float", @@ -485,7 +555,7 @@ String EditorSceneImporterGLTF::_get_type_name(GLTFType p_component) { return names[p_component]; } -Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffer_view, double *dst, int skip_every, int skip_bytes, int element_size, int count, GLTFType type, int component_count, int component_type, int component_size, bool normalized, int byte_offset, bool for_vertex) { +Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, double *dst, const GLTFBufferViewIndex p_buffer_view, const int skip_every, const int skip_bytes, const int element_size, const int count, const GLTFType type, const int component_count, const int component_type, const int component_size, const bool normalized, const int byte_offset, const bool for_vertex) { const GLTFBufferView &bv = state.buffer_views[p_buffer_view]; @@ -496,7 +566,7 @@ Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffe ERR_FAIL_INDEX_V(bv.buffer, state.buffers.size(), ERR_PARSE_ERROR); - uint32_t offset = bv.byte_offset + byte_offset; + const uint32_t offset = bv.byte_offset + byte_offset; Vector<uint8_t> buffer = state.buffers[bv.buffer]; //copy on write, so no performance hit const uint8_t *bufptr = buffer.ptr(); @@ -504,7 +574,7 @@ Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffe print_verbose("glTF: type " + _get_type_name(type) + " component type: " + _get_component_type_name(component_type) + " stride: " + itos(stride) + " amount " + itos(count)); print_verbose("glTF: accessor offset" + itos(byte_offset) + " view offset: " + itos(bv.byte_offset) + " total buffer len: " + itos(buffer.size()) + " view len " + itos(bv.byte_length)); - int buffer_end = (stride * (count - 1)) + element_size; + const int buffer_end = (stride * (count - 1)) + element_size; ERR_FAIL_COND_V(buffer_end > bv.byte_length, ERR_PARSE_ERROR); ERR_FAIL_COND_V((int)(offset + buffer_end) > buffer.size(), ERR_PARSE_ERROR); @@ -573,7 +643,7 @@ Error EditorSceneImporterGLTF::_decode_buffer_view(GLTFState &state, int p_buffe return OK; } -int EditorSceneImporterGLTF::_get_component_type_size(int component_type) { +int EditorSceneImporterGLTF::_get_component_type_size(const int component_type) { switch (component_type) { case COMPONENT_TYPE_BYTE: return 1; break; @@ -589,7 +659,7 @@ int EditorSceneImporterGLTF::_get_component_type_size(int component_type) { return 0; } -Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p_accessor, bool p_for_vertex) { +Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { //spec, for reference: //https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment @@ -598,12 +668,12 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p const GLTFAccessor &a = state.accessors[p_accessor]; - int component_count_for_type[7] = { + const int component_count_for_type[7] = { 1, 2, 3, 4, 4, 9, 16 }; - int component_count = component_count_for_type[a.type]; - int component_size = _get_component_type_size(a.component_type); + const int component_count = component_count_for_type[a.type]; + const int component_size = _get_component_type_size(a.component_type); ERR_FAIL_COND_V(component_size == 0, Vector<double>()); int element_size = component_count * component_size; @@ -646,7 +716,7 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p ERR_FAIL_INDEX_V(a.buffer_view, state.buffer_views.size(), Vector<double>()); - Error err = _decode_buffer_view(state, a.buffer_view, dst, skip_every, skip_bytes, element_size, a.count, a.type, component_count, a.component_type, component_size, a.normalized, a.byte_offset, p_for_vertex); + const Error err = _decode_buffer_view(state, dst, a.buffer_view, skip_every, skip_bytes, element_size, a.count, a.type, component_count, a.component_type, component_size, a.normalized, a.byte_offset, p_for_vertex); if (err != OK) return Vector<double>(); @@ -661,20 +731,20 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p // I could not find any file using this, so this code is so far untested Vector<double> indices; indices.resize(a.sparse_count); - int indices_component_size = _get_component_type_size(a.sparse_indices_component_type); + const int indices_component_size = _get_component_type_size(a.sparse_indices_component_type); - Error err = _decode_buffer_view(state, a.sparse_indices_buffer_view, indices.ptrw(), 0, 0, indices_component_size, a.sparse_count, TYPE_SCALAR, 1, a.sparse_indices_component_type, indices_component_size, false, a.sparse_indices_byte_offset, false); + Error err = _decode_buffer_view(state, indices.ptrw(), a.sparse_indices_buffer_view, 0, 0, indices_component_size, a.sparse_count, TYPE_SCALAR, 1, a.sparse_indices_component_type, indices_component_size, false, a.sparse_indices_byte_offset, false); if (err != OK) return Vector<double>(); Vector<double> data; data.resize(component_count * a.sparse_count); - err = _decode_buffer_view(state, a.sparse_values_buffer_view, data.ptrw(), skip_every, skip_bytes, element_size, a.sparse_count, a.type, component_count, a.component_type, component_size, a.normalized, a.sparse_values_byte_offset, p_for_vertex); + err = _decode_buffer_view(state, data.ptrw(), a.sparse_values_buffer_view, skip_every, skip_bytes, element_size, a.sparse_count, a.type, component_count, a.component_type, component_size, a.normalized, a.sparse_values_byte_offset, p_for_vertex); if (err != OK) return Vector<double>(); for (int i = 0; i < indices.size(); i++) { - int write_offset = int(indices[i]) * component_count; + const int write_offset = int(indices[i]) * component_count; for (int j = 0; j < component_count; j++) { dst[write_offset + j] = data[i * component_count + j]; @@ -685,14 +755,16 @@ Vector<double> EditorSceneImporterGLTF::_decode_accessor(GLTFState &state, int p return dst_buffer; } -PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &state, int p_accessor, bool p_for_vertex) { +PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); PoolVector<int> ret; + if (attribs.size() == 0) return ret; + const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size(); + const int ret_size = attribs.size(); ret.resize(ret_size); { PoolVector<int>::Write w = ret.write(); @@ -703,14 +775,16 @@ PoolVector<int> EditorSceneImporterGLTF::_decode_accessor_as_ints(GLTFState &sta return ret; } -PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState &state, int p_accessor, bool p_for_vertex) { +PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); PoolVector<float> ret; + if (attribs.size() == 0) return ret; + const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size(); + const int ret_size = attribs.size(); ret.resize(ret_size); { PoolVector<float>::Write w = ret.write(); @@ -721,15 +795,17 @@ PoolVector<float> EditorSceneImporterGLTF::_decode_accessor_as_floats(GLTFState return ret; } -PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState &state, int p_accessor, bool p_for_vertex) { +PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); PoolVector<Vector2> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 2 != 0, ret); const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size() / 2; + const int ret_size = attribs.size() / 2; ret.resize(ret_size); { PoolVector<Vector2>::Write w = ret.write(); @@ -740,15 +816,17 @@ PoolVector<Vector2> EditorSceneImporterGLTF::_decode_accessor_as_vec2(GLTFState return ret; } -PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState &state, int p_accessor, bool p_for_vertex) { +PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); PoolVector<Vector3> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 3 != 0, ret); const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size() / 3; + const int ret_size = attribs.size() / 3; ret.resize(ret_size); { PoolVector<Vector3>::Write w = ret.write(); @@ -758,13 +836,16 @@ PoolVector<Vector3> EditorSceneImporterGLTF::_decode_accessor_as_vec3(GLTFState } return ret; } -PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &state, int p_accessor, bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); +PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { + + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); PoolVector<Color> ret; + if (attribs.size() == 0) return ret; - int type = state.accessors[p_accessor].type; + + const int type = state.accessors[p_accessor].type; ERR_FAIL_COND_V(!(type == TYPE_VEC3 || type == TYPE_VEC4), ret); int components; if (type == TYPE_VEC3) { @@ -772,9 +853,10 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState & } else { // TYPE_VEC4 components = 4; } + ERR_FAIL_COND_V(attribs.size() % components != 0, ret); const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size() / components; + const int ret_size = attribs.size() / components; ret.resize(ret_size); { PoolVector<Color>::Write w = ret.write(); @@ -784,15 +866,17 @@ PoolVector<Color> EditorSceneImporterGLTF::_decode_accessor_as_color(GLTFState & } return ret; } -Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, int p_accessor, bool p_for_vertex) { +Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); Vector<Quat> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); const double *attribs_ptr = attribs.ptr(); - int ret_size = attribs.size() / 4; + const int ret_size = attribs.size() / 4; ret.resize(ret_size); { for (int i = 0; i < ret_size; i++) { @@ -801,12 +885,14 @@ Vector<Quat> EditorSceneImporterGLTF::_decode_accessor_as_quat(GLTFState &state, } return ret; } -Vector<Transform2D> EditorSceneImporterGLTF::_decode_accessor_as_xform2d(GLTFState &state, int p_accessor, bool p_for_vertex) { +Vector<Transform2D> EditorSceneImporterGLTF::_decode_accessor_as_xform2d(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); Vector<Transform2D> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 4 != 0, ret); ret.resize(attribs.size() / 4); for (int i = 0; i < ret.size(); i++) { @@ -816,12 +902,14 @@ Vector<Transform2D> EditorSceneImporterGLTF::_decode_accessor_as_xform2d(GLTFSta return ret; } -Vector<Basis> EditorSceneImporterGLTF::_decode_accessor_as_basis(GLTFState &state, int p_accessor, bool p_for_vertex) { +Vector<Basis> EditorSceneImporterGLTF::_decode_accessor_as_basis(GLTFState &state, const GLTFAccessorIndex p_accessor, bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); Vector<Basis> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 9 != 0, ret); ret.resize(attribs.size() / 9); for (int i = 0; i < ret.size(); i++) { @@ -831,12 +919,15 @@ Vector<Basis> EditorSceneImporterGLTF::_decode_accessor_as_basis(GLTFState &stat } return ret; } -Vector<Transform> EditorSceneImporterGLTF::_decode_accessor_as_xform(GLTFState &state, int p_accessor, bool p_for_vertex) { - Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); +Vector<Transform> EditorSceneImporterGLTF::_decode_accessor_as_xform(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex) { + + const Vector<double> attribs = _decode_accessor(state, p_accessor, p_for_vertex); Vector<Transform> ret; + if (attribs.size() == 0) return ret; + ERR_FAIL_COND_V(attribs.size() % 16 != 0, ret); ret.resize(attribs.size() / 16); for (int i = 0; i < ret.size(); i++) { @@ -854,7 +945,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { return OK; Array meshes = state.json["meshes"]; - for (int i = 0; i < meshes.size(); i++) { + for (GLTFMeshIndex i = 0; i < meshes.size(); i++) { print_verbose("glTF: Parsing mesh: " + itos(i)); Dictionary d = meshes[i]; @@ -865,7 +956,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { ERR_FAIL_COND_V(!d.has("primitives"), ERR_PARSE_ERROR); Array primitives = d["primitives"]; - Dictionary extras = d.has("extras") ? (Dictionary)d["extras"] : Dictionary(); + const Dictionary &extras = d.has("extras") ? (Dictionary)d["extras"] : Dictionary(); for (int j = 0; j < primitives.size(); j++) { @@ -880,7 +971,7 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { Mesh::PrimitiveType primitive = Mesh::PRIMITIVE_TRIANGLES; if (p.has("mode")) { - int mode = p["mode"]; + const int mode = p["mode"]; ERR_FAIL_INDEX_V(mode, 7, ERR_FILE_CORRUPT); static const Mesh::PrimitiveType primitives2[7] = { Mesh::PRIMITIVE_POINTS, @@ -899,7 +990,6 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { if (a.has("POSITION")) { array[Mesh::ARRAY_VERTEX] = _decode_accessor_as_vec3(state, a["POSITION"], true); } - if (a.has("NORMAL")) { array[Mesh::ARRAY_NORMAL] = _decode_accessor_as_vec3(state, a["NORMAL"], true); } @@ -924,9 +1014,6 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { int wc = weights.size(); PoolVector<float>::Write w = weights.write(); - //PoolVector<int> v = array[Mesh::ARRAY_BONES]; - //PoolVector<int>::Read r = v.read(); - for (int k = 0; k < wc; k += 4) { float total = 0.0; total += w[k + 0]; @@ -939,36 +1026,34 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { w[k + 2] /= total; w[k + 3] /= total; } - - //print_verbose(itos(j / 4) + ": " + itos(r[j + 0]) + ":" + rtos(w[j + 0]) + ", " + itos(r[j + 1]) + ":" + rtos(w[j + 1]) + ", " + itos(r[j + 2]) + ":" + rtos(w[j + 2]) + ", " + itos(r[j + 3]) + ":" + rtos(w[j + 3])); } } array[Mesh::ARRAY_WEIGHTS] = weights; } if (p.has("indices")) { - PoolVector<int> indices = _decode_accessor_as_ints(state, p["indices"], false); if (primitive == Mesh::PRIMITIVE_TRIANGLES) { //swap around indices, convert ccw to cw for front face - int is = indices.size(); - PoolVector<int>::Write w = indices.write(); + const int is = indices.size(); + const PoolVector<int>::Write w = indices.write(); for (int k = 0; k < is; k += 3) { SWAP(w[k + 1], w[k + 2]); } } array[Mesh::ARRAY_INDEX] = indices; + } else if (primitive == Mesh::PRIMITIVE_TRIANGLES) { //generate indices because they need to be swapped for CW/CCW - PoolVector<Vector3> vertices = array[Mesh::ARRAY_VERTEX]; + const PoolVector<Vector3> &vertices = array[Mesh::ARRAY_VERTEX]; ERR_FAIL_COND_V(vertices.size() == 0, ERR_PARSE_ERROR); PoolVector<int> indices; - int vs = vertices.size(); + const int vs = vertices.size(); indices.resize(vs); { - PoolVector<int>::Write w = indices.write(); + const PoolVector<int>::Write w = indices.write(); for (int k = 0; k < vs; k += 3) { w[k] = k; w[k + 1] = k + 2; @@ -1002,23 +1087,23 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { //blend shapes if (p.has("targets")) { print_verbose("glTF: Mesh has targets"); - Array targets = p["targets"]; + const Array &targets = p["targets"]; //ideally BLEND_SHAPE_MODE_RELATIVE since gltf2 stores in displacement //but it could require a larger refactor? mesh.mesh->set_blend_shape_mode(Mesh::BLEND_SHAPE_MODE_NORMALIZED); if (j == 0) { - Array target_names = extras.has("targetNames") ? (Array)extras["targetNames"] : Array(); + const Array &target_names = extras.has("targetNames") ? (Array)extras["targetNames"] : Array(); for (int k = 0; k < targets.size(); k++) { - String name = k < target_names.size() ? (String)target_names[k] : String("morph_") + itos(k); + const String name = k < target_names.size() ? (String)target_names[k] : String("morph_") + itos(k); mesh.mesh->add_blend_shape(name); } } for (int k = 0; k < targets.size(); k++) { - Dictionary t = targets[k]; + const Dictionary &t = targets[k]; Array array_copy; array_copy.resize(Mesh::ARRAY_MAX); @@ -1031,17 +1116,17 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { if (t.has("POSITION")) { PoolVector<Vector3> varr = _decode_accessor_as_vec3(state, t["POSITION"], true); - PoolVector<Vector3> src_varr = array[Mesh::ARRAY_VERTEX]; - int size = src_varr.size(); + const PoolVector<Vector3> src_varr = array[Mesh::ARRAY_VERTEX]; + const int size = src_varr.size(); ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); { - int max_idx = varr.size(); + const int max_idx = varr.size(); varr.resize(size); - PoolVector<Vector3>::Write w_varr = varr.write(); - PoolVector<Vector3>::Read r_varr = varr.read(); - PoolVector<Vector3>::Read r_src_varr = src_varr.read(); + const PoolVector<Vector3>::Write w_varr = varr.write(); + const PoolVector<Vector3>::Read r_varr = varr.read(); + const PoolVector<Vector3>::Read r_src_varr = src_varr.read(); for (int l = 0; l < size; l++) { if (l < max_idx) { w_varr[l] = r_varr[l] + r_src_varr[l]; @@ -1054,16 +1139,16 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { } if (t.has("NORMAL")) { PoolVector<Vector3> narr = _decode_accessor_as_vec3(state, t["NORMAL"], true); - PoolVector<Vector3> src_narr = array[Mesh::ARRAY_NORMAL]; + const PoolVector<Vector3> src_narr = array[Mesh::ARRAY_NORMAL]; int size = src_narr.size(); ERR_FAIL_COND_V(size == 0, ERR_PARSE_ERROR); { int max_idx = narr.size(); narr.resize(size); - PoolVector<Vector3>::Write w_narr = narr.write(); - PoolVector<Vector3>::Read r_narr = narr.read(); - PoolVector<Vector3>::Read r_src_narr = src_narr.read(); + const PoolVector<Vector3>::Write w_narr = narr.write(); + const PoolVector<Vector3>::Read r_narr = narr.read(); + const PoolVector<Vector3>::Read r_src_narr = src_narr.read(); for (int l = 0; l < size; l++) { if (l < max_idx) { w_narr[l] = r_narr[l] + r_src_narr[l]; @@ -1075,21 +1160,22 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { array_copy[Mesh::ARRAY_NORMAL] = narr; } if (t.has("TANGENT")) { - PoolVector<Vector3> tangents_v3 = _decode_accessor_as_vec3(state, t["TANGENT"], true); - PoolVector<float> tangents_v4; - PoolVector<float> src_tangents = array[Mesh::ARRAY_TANGENT]; + const PoolVector<Vector3> tangents_v3 = _decode_accessor_as_vec3(state, t["TANGENT"], true); + const PoolVector<float> src_tangents = array[Mesh::ARRAY_TANGENT]; ERR_FAIL_COND_V(src_tangents.size() == 0, ERR_PARSE_ERROR); + PoolVector<float> tangents_v4; + { int max_idx = tangents_v3.size(); int size4 = src_tangents.size(); tangents_v4.resize(size4); - PoolVector<float>::Write w4 = tangents_v4.write(); + const PoolVector<float>::Write w4 = tangents_v4.write(); - PoolVector<Vector3>::Read r3 = tangents_v3.read(); - PoolVector<float>::Read r4 = src_tangents.read(); + const PoolVector<Vector3>::Read r3 = tangents_v3.read(); + const PoolVector<float>::Read r4 = src_tangents.read(); for (int l = 0; l < size4 / 4; l++) { @@ -1127,16 +1213,16 @@ Error EditorSceneImporterGLTF::_parse_meshes(GLTFState &state) { mesh.mesh->add_surface_from_arrays(primitive, array, morphs); if (p.has("material")) { - int material = p["material"]; + const int material = p["material"]; ERR_FAIL_INDEX_V(material, state.materials.size(), ERR_FILE_CORRUPT); - Ref<Material> mat = state.materials[material]; + const Ref<Material> &mat = state.materials[material]; mesh.mesh->surface_set_material(mesh.mesh->get_surface_count() - 1, mat); } } if (d.has("weights")) { - Array weights = d["weights"]; + const Array &weights = d["weights"]; ERR_FAIL_COND_V(mesh.mesh->get_blend_shape_count() != weights.size(), ERR_PARSE_ERROR); mesh.blend_weights.resize(weights.size()); for (int j = 0; j < weights.size(); j++) { @@ -1157,10 +1243,10 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b if (!state.json.has("images")) return OK; - Array images = state.json["images"]; + const Array &images = state.json["images"]; for (int i = 0; i < images.size(); i++) { - Dictionary d = images[i]; + const Dictionary &d = images[i]; String mimetype; if (d.has("mimeType")) { @@ -1190,13 +1276,13 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b } if (d.has("bufferView")) { - int bvi = d["bufferView"]; + const GLTFBufferViewIndex bvi = d["bufferView"]; ERR_FAIL_INDEX_V(bvi, state.buffer_views.size(), ERR_PARAMETER_RANGE_ERROR); const GLTFBufferView &bv = state.buffer_views[bvi]; - int bi = bv.buffer; + const GLTFBufferIndex bi = bv.buffer; ERR_FAIL_INDEX_V(bi, state.buffers.size(), ERR_PARAMETER_RANGE_ERROR); ERR_FAIL_COND_V(bv.byte_offset + bv.byte_length > state.buffers[bi].size(), ERR_FILE_CORRUPT); @@ -1209,7 +1295,7 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b if (mimetype.findn("png") != -1) { //is a png - Ref<Image> img = Image::_png_mem_loader_func(data_ptr, data_size); + const Ref<Image> img = Image::_png_mem_loader_func(data_ptr, data_size); ERR_FAIL_COND_V(img.is_null(), ERR_FILE_CORRUPT); @@ -1223,7 +1309,7 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b if (mimetype.findn("jpeg") != -1) { //is a jpg - Ref<Image> img = Image::_jpg_mem_loader_func(data_ptr, data_size); + const Ref<Image> img = Image::_jpg_mem_loader_func(data_ptr, data_size); ERR_FAIL_COND_V(img.is_null(), ERR_FILE_CORRUPT); @@ -1249,10 +1335,10 @@ Error EditorSceneImporterGLTF::_parse_textures(GLTFState &state) { if (!state.json.has("textures")) return OK; - Array textures = state.json["textures"]; - for (int i = 0; i < textures.size(); i++) { + const Array &textures = state.json["textures"]; + for (GLTFTextureIndex i = 0; i < textures.size(); i++) { - Dictionary d = textures[i]; + const Dictionary &d = textures[i]; ERR_FAIL_COND_V(!d.has("source"), ERR_PARSE_ERROR); @@ -1264,9 +1350,9 @@ Error EditorSceneImporterGLTF::_parse_textures(GLTFState &state) { return OK; } -Ref<Texture> EditorSceneImporterGLTF::_get_texture(GLTFState &state, int p_texture) { +Ref<Texture> EditorSceneImporterGLTF::_get_texture(GLTFState &state, const GLTFTextureIndex p_texture) { ERR_FAIL_INDEX_V(p_texture, state.textures.size(), Ref<Texture>()); - int image = state.textures[p_texture].src_image; + const GLTFImageIndex image = state.textures[p_texture].src_image; ERR_FAIL_INDEX_V(image, state.images.size(), Ref<Texture>()); @@ -1278,10 +1364,10 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (!state.json.has("materials")) return OK; - Array materials = state.json["materials"]; - for (int i = 0; i < materials.size(); i++) { + const Array &materials = state.json["materials"]; + for (GLTFMaterialIndex i = 0; i < materials.size(); i++) { - Dictionary d = materials[i]; + const Dictionary &d = materials[i]; Ref<SpatialMaterial> material; material.instance(); @@ -1291,17 +1377,17 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { if (d.has("pbrMetallicRoughness")) { - Dictionary mr = d["pbrMetallicRoughness"]; + const Dictionary &mr = d["pbrMetallicRoughness"]; if (mr.has("baseColorFactor")) { - Array arr = mr["baseColorFactor"]; + const Array &arr = mr["baseColorFactor"]; ERR_FAIL_COND_V(arr.size() != 4, ERR_PARSE_ERROR); - Color c = Color(arr[0], arr[1], arr[2], arr[3]).to_srgb(); + const Color c = Color(arr[0], arr[1], arr[2], arr[3]).to_srgb(); material->set_albedo(c); } if (mr.has("baseColorTexture")) { - Dictionary bct = mr["baseColorTexture"]; + const Dictionary &bct = mr["baseColorTexture"]; if (bct.has("index")) { material->set_texture(SpatialMaterial::TEXTURE_ALBEDO, _get_texture(state, bct["index"])); } @@ -1323,9 +1409,9 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } if (mr.has("metallicRoughnessTexture")) { - Dictionary bct = mr["metallicRoughnessTexture"]; + const Dictionary &bct = mr["metallicRoughnessTexture"]; if (bct.has("index")) { - Ref<Texture> t = _get_texture(state, bct["index"]); + const Ref<Texture> t = _get_texture(state, bct["index"]); material->set_texture(SpatialMaterial::TEXTURE_METALLIC, t); material->set_metallic_texture_channel(SpatialMaterial::TEXTURE_CHANNEL_BLUE); material->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, t); @@ -1341,7 +1427,7 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } if (d.has("normalTexture")) { - Dictionary bct = d["normalTexture"]; + const Dictionary &bct = d["normalTexture"]; if (bct.has("index")) { material->set_texture(SpatialMaterial::TEXTURE_NORMAL, _get_texture(state, bct["index"])); material->set_feature(SpatialMaterial::FEATURE_NORMAL_MAPPING, true); @@ -1351,7 +1437,7 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } } if (d.has("occlusionTexture")) { - Dictionary bct = d["occlusionTexture"]; + const Dictionary &bct = d["occlusionTexture"]; if (bct.has("index")) { material->set_texture(SpatialMaterial::TEXTURE_AMBIENT_OCCLUSION, _get_texture(state, bct["index"])); material->set_ao_texture_channel(SpatialMaterial::TEXTURE_CHANNEL_RED); @@ -1360,16 +1446,16 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } if (d.has("emissiveFactor")) { - Array arr = d["emissiveFactor"]; + const Array &arr = d["emissiveFactor"]; ERR_FAIL_COND_V(arr.size() != 3, ERR_PARSE_ERROR); - Color c = Color(arr[0], arr[1], arr[2]).to_srgb(); + const Color c = Color(arr[0], arr[1], arr[2]).to_srgb(); material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); material->set_emission(c); } if (d.has("emissiveTexture")) { - Dictionary bct = d["emissiveTexture"]; + const Dictionary &bct = d["emissiveTexture"]; if (bct.has("index")) { material->set_texture(SpatialMaterial::TEXTURE_EMISSION, _get_texture(state, bct["index"])); material->set_feature(SpatialMaterial::FEATURE_EMISSION, true); @@ -1378,16 +1464,17 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { } if (d.has("doubleSided")) { - bool ds = d["doubleSided"]; + const bool ds = d["doubleSided"]; if (ds) { material->set_cull_mode(SpatialMaterial::CULL_DISABLED); } } if (d.has("alphaMode")) { - String am = d["alphaMode"]; + const String &am = d["alphaMode"]; if (am != "OPAQUE") { material->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + material->set_depth_draw_mode(SpatialMaterial::DEPTH_DRAW_ALPHA_OPAQUE_PREPASS); } } @@ -1399,131 +1486,785 @@ Error EditorSceneImporterGLTF::_parse_materials(GLTFState &state) { return OK; } +EditorSceneImporterGLTF::GLTFNodeIndex EditorSceneImporterGLTF::_find_highest_node(GLTFState &state, const Vector<GLTFNodeIndex> &subset) { + int heighest = -1; + GLTFNodeIndex best_node = -1; + + for (int i = 0; i < subset.size(); ++i) { + const GLTFNodeIndex node_i = subset[i]; + const GLTFNode *node = state.nodes[node_i]; + + if (heighest == -1 || node->height < heighest) { + heighest = node->height; + best_node = node_i; + } + } + + return best_node; +} + +bool EditorSceneImporterGLTF::_capture_nodes_in_skin(GLTFState &state, GLTFSkin &skin, const GLTFNodeIndex node_index) { + + bool found_joint = false; + + for (int i = 0; i < state.nodes[node_index]->children.size(); ++i) { + found_joint |= _capture_nodes_in_skin(state, skin, state.nodes[node_index]->children[i]); + } + + if (found_joint) { + // Mark it if we happen to find another skins joint... + if (state.nodes[node_index]->joint && skin.joints.find(node_index) < 0) { + skin.joints.push_back(node_index); + } else if (skin.non_joints.find(node_index) < 0) { + skin.non_joints.push_back(node_index); + } + } + + if (skin.joints.find(node_index) > 0) { + return true; + } + + return false; +} + +void EditorSceneImporterGLTF::_capture_nodes_for_multirooted_skin(GLTFState &state, GLTFSkin &skin) { + + DisjointSet<GLTFNodeIndex> disjoint_set; + + for (int i = 0; i < skin.joints.size(); ++i) { + const GLTFNodeIndex node_index = skin.joints[i]; + const GLTFNodeIndex parent = state.nodes[node_index]->parent; + disjoint_set.insert(node_index); + + if (skin.joints.find(parent) >= 0) { + disjoint_set.create_union(parent, node_index); + } + } + + Vector<GLTFNodeIndex> roots; + disjoint_set.get_representatives(roots); + + if (roots.size() <= 1) { + return; + } + + int maxHeight = -1; + + // Determine the max height rooted tree + for (int i = 0; i < roots.size(); ++i) { + const GLTFNodeIndex root = roots[i]; + + if (maxHeight == -1 || state.nodes[root]->height < maxHeight) { + maxHeight = state.nodes[root]->height; + } + } + + // Go up the tree till all of the multiple roots of the skin are at the same hierarchy level. + // This sucks, but 99% of all game engines (not just Godot) would have this same issue. + for (int i = 0; i < roots.size(); ++i) { + + GLTFNodeIndex current_node = roots[i]; + while (state.nodes[current_node]->height > maxHeight) { + GLTFNodeIndex parent = state.nodes[current_node]->parent; + + if (state.nodes[parent]->joint && skin.joints.find(parent) < 0) { + skin.joints.push_back(parent); + } else if (skin.non_joints.find(parent) < 0) { + skin.non_joints.push_back(parent); + } + + current_node = parent; + } + + // replace the roots + roots.write[i] = current_node; + } + + // Climb up the tree until they all have the same parent + bool all_same; + + do { + all_same = true; + const GLTFNodeIndex first_parent = state.nodes[roots[0]]->parent; + + for (int i = 1; i < roots.size(); ++i) { + all_same &= (first_parent == state.nodes[roots[i]]->parent); + } + + if (!all_same) { + for (int i = 0; i < roots.size(); ++i) { + const GLTFNodeIndex current_node = roots[i]; + const GLTFNodeIndex parent = state.nodes[current_node]->parent; + + if (state.nodes[parent]->joint && skin.joints.find(parent) < 0) { + skin.joints.push_back(parent); + } else if (skin.non_joints.find(parent) < 0) { + skin.non_joints.push_back(parent); + } + + roots.write[i] = parent; + } + } + + } while (!all_same); +} + +Error EditorSceneImporterGLTF::_expand_skin(GLTFState &state, GLTFSkin &skin) { + + _capture_nodes_for_multirooted_skin(state, skin); + + // Grab all nodes that lay in between skin joints/nodes + DisjointSet<GLTFNodeIndex> disjoint_set; + + Vector<GLTFNodeIndex> all_skin_nodes; + all_skin_nodes.append_array(skin.joints); + all_skin_nodes.append_array(skin.non_joints); + + for (int i = 0; i < all_skin_nodes.size(); ++i) { + const GLTFNodeIndex node_index = all_skin_nodes[i]; + const GLTFNodeIndex parent = state.nodes[node_index]->parent; + disjoint_set.insert(node_index); + + if (all_skin_nodes.find(parent) >= 0) { + disjoint_set.create_union(parent, node_index); + } + } + + Vector<GLTFNodeIndex> out_owners; + disjoint_set.get_representatives(out_owners); + + Vector<GLTFNodeIndex> out_roots; + + for (int i = 0; i < out_owners.size(); ++i) { + Vector<GLTFNodeIndex> set; + disjoint_set.get_members(set, out_owners[i]); + + const GLTFNodeIndex root = _find_highest_node(state, set); + ERR_FAIL_COND_V(root < 0, FAILED); + out_roots.push_back(root); + } + + out_roots.sort(); + + for (int i = 0; i < out_roots.size(); ++i) { + _capture_nodes_in_skin(state, skin, out_roots[i]); + } + + skin.roots = out_roots; + + return OK; +} + +Error EditorSceneImporterGLTF::_verify_skin(GLTFState &state, GLTFSkin &skin) { + + // This may seem duplicated from expand_skins, but this is really a sanity check! (so it kinda is) + // In case additional interpolating logic is added to the skins, this will help ensure that you + // do not cause it to self implode into a fiery blaze + + // We are going to re-calculate the root nodes and compare them to the ones saved in the skin, + // then ensure the multiple trees (if they exist) are on the same sublevel + + // Grab all nodes that lay in between skin joints/nodes + DisjointSet<GLTFNodeIndex> disjoint_set; + + Vector<GLTFNodeIndex> all_skin_nodes; + all_skin_nodes.append_array(skin.joints); + all_skin_nodes.append_array(skin.non_joints); + + for (int i = 0; i < all_skin_nodes.size(); ++i) { + const GLTFNodeIndex node_index = all_skin_nodes[i]; + const GLTFNodeIndex parent = state.nodes[node_index]->parent; + disjoint_set.insert(node_index); + + if (all_skin_nodes.find(parent) >= 0) { + disjoint_set.create_union(parent, node_index); + } + } + + Vector<GLTFNodeIndex> out_owners; + disjoint_set.get_representatives(out_owners); + + Vector<GLTFNodeIndex> out_roots; + + for (int i = 0; i < out_owners.size(); ++i) { + Vector<GLTFNodeIndex> set; + disjoint_set.get_members(set, out_owners[i]); + + const GLTFNodeIndex root = _find_highest_node(state, set); + ERR_FAIL_COND_V(root < 0, FAILED); + out_roots.push_back(root); + } + + out_roots.sort(); + + ERR_FAIL_COND_V(out_roots.size() == 0, FAILED); + + // Make sure the roots are the exact same (they better be) + ERR_FAIL_COND_V(out_roots.size() != skin.roots.size(), FAILED); + for (int i = 0; i < out_roots.size(); ++i) { + ERR_FAIL_COND_V(out_roots[i] != skin.roots[i], FAILED); + } + + // Single rooted skin? Perfectly ok! + if (out_roots.size() == 1) { + return OK; + } + + // Make sure all parents of a multi-rooted skin are the SAME + const GLTFNodeIndex parent = state.nodes[out_roots[0]]->parent; + for (int i = 1; i < out_roots.size(); ++i) { + if (state.nodes[out_roots[i]]->parent != parent) { + return FAILED; + } + } + + return OK; +} + Error EditorSceneImporterGLTF::_parse_skins(GLTFState &state) { if (!state.json.has("skins")) return OK; - Array skins = state.json["skins"]; + const Array &skins = state.json["skins"]; + + // Create the base skins, and mark nodes that are joints for (int i = 0; i < skins.size(); i++) { - Dictionary d = skins[i]; + const Dictionary &d = skins[i]; GLTFSkin skin; ERR_FAIL_COND_V(!d.has("joints"), ERR_PARSE_ERROR); - Array joints = d["joints"]; - Vector<Transform> bind_matrices; + const Array &joints = d["joints"]; if (d.has("inverseBindMatrices")) { - bind_matrices = _decode_accessor_as_xform(state, d["inverseBindMatrices"], false); - ERR_FAIL_COND_V(bind_matrices.size() != joints.size(), ERR_PARSE_ERROR); + skin.inverse_binds = _decode_accessor_as_xform(state, d["inverseBindMatrices"], false); + ERR_FAIL_COND_V(skin.inverse_binds.size() != joints.size(), ERR_PARSE_ERROR); } for (int j = 0; j < joints.size(); j++) { - int index = joints[j]; - ERR_FAIL_INDEX_V(index, state.nodes.size(), ERR_PARSE_ERROR); - GLTFNode::Joint joint; - joint.skin = state.skins.size(); - joint.bone = j; - state.nodes[index]->joints.push_back(joint); - GLTFSkin::Bone bone; - bone.node = index; - if (bind_matrices.size()) { - bone.inverse_bind = bind_matrices[j]; - } + const GLTFNodeIndex node = joints[j]; + ERR_FAIL_INDEX_V(node, state.nodes.size(), ERR_PARSE_ERROR); + + skin.joints.push_back(node); + skin.joints_original.push_back(node); - skin.bones.push_back(bone); + state.nodes[node]->joint = true; + } + + if (d.has("name")) { + skin.name = d["name"]; } - print_verbose("glTF: Skin has skeleton? " + itos(d.has("skeleton"))); if (d.has("skeleton")) { - int skeleton = d["skeleton"]; - ERR_FAIL_INDEX_V(skeleton, state.nodes.size(), ERR_PARSE_ERROR); - print_verbose("glTF: Setting skeleton skin to" + itos(skeleton)); - skin.skeleton = skeleton; - if (!state.skeleton_nodes.has(skeleton)) { - state.skeleton_nodes[skeleton] = Vector<int>(); + skin.skin_root = d["skeleton"]; + } + + state.skins.push_back(skin); + } + + for (GLTFSkinIndex i = 0; i < state.skins.size(); ++i) { + GLTFSkin &skin = state.skins.write[i]; + + // Expand the skin to capture all the extra non-joints that lie in between the actual joints, + // and expand the hierarchy to ensure multi-rooted trees lie on the same height level + ERR_FAIL_COND_V(_expand_skin(state, skin), ERR_PARSE_ERROR); + ERR_FAIL_COND_V(_verify_skin(state, skin), ERR_PARSE_ERROR); + } + + print_verbose("glTF: Total skins: " + itos(state.skins.size())); + + return OK; +} + +Error EditorSceneImporterGLTF::_determine_skeletons(GLTFState &state) { + + // Using a disjoint set, we are going to potentially combine all skins that are actually branches + // of a main skeleton, or treat skins defining the same set of nodes as ONE skeleton. + // This is another unclear issue caused by the current glTF specification. + + DisjointSet<GLTFNodeIndex> skeleton_sets; + + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + const GLTFSkin &skin = state.skins[skin_i]; + + Vector<GLTFNodeIndex> all_skin_nodes; + all_skin_nodes.append_array(skin.joints); + all_skin_nodes.append_array(skin.non_joints); + + for (int i = 0; i < all_skin_nodes.size(); ++i) { + const GLTFNodeIndex node_index = all_skin_nodes[i]; + const GLTFNodeIndex parent = state.nodes[node_index]->parent; + skeleton_sets.insert(node_index); + + if (all_skin_nodes.find(parent) >= 0) { + skeleton_sets.create_union(parent, node_index); } - state.skeleton_nodes[skeleton].push_back(i); } - if (d.has("name")) { - skin.name = d["name"]; + // We are going to connect the separate skin subtrees in each skin together + // so that the final roots are entire sets of valid skin trees + for (int i = 1; i < skin.roots.size(); ++i) { + skeleton_sets.create_union(skin.roots[0], skin.roots[i]); } + } - //locate the right place to put a Skeleton node - /* - if (state.skin_users.has(i)) { - Vector<int> users = state.skin_users[i]; - int skin_node = -1; - for (int j = 0; j < users.size(); j++) { - int user = state.nodes[users[j]]->parent; //always go from parent - if (j == 0) { - skin_node = user; - } else if (skin_node != -1) { - bool found = false; - while (skin_node >= 0) { - - int cuser = user; - while (cuser != -1) { - if (cuser == skin_node) { - found = true; - break; - } - cuser = state.nodes[skin_node]->parent; - } - if (found) - break; - skin_node = state.nodes[skin_node]->parent; - } + { // attempt to joint all touching subsets (siblings/parent are part of another skin) + Vector<GLTFNodeIndex> groups_representatives; + skeleton_sets.get_representatives(groups_representatives); + + Vector<GLTFNodeIndex> highest_group_members; + Vector<Vector<GLTFNodeIndex> > groups; + for (int i = 0; i < groups_representatives.size(); ++i) { + Vector<GLTFNodeIndex> group; + skeleton_sets.get_members(group, groups_representatives[i]); + highest_group_members.push_back(_find_highest_node(state, group)); + groups.push_back(group); + } - if (!found) { - skin_node = -1; //just leave where it is + for (int i = 0; i < highest_group_members.size(); ++i) { + const GLTFNodeIndex node_i = highest_group_members[i]; + + // Attach any siblings together (this needs to be done n^2/2 times) + for (int j = i + 1; j < highest_group_members.size(); ++j) { + const GLTFNodeIndex node_j = highest_group_members[j]; + + // Even if they are siblings under the root! :) + if (state.nodes[node_i]->parent == state.nodes[node_j]->parent) { + skeleton_sets.create_union(node_i, node_j); + } + } + + // Attach any parenting going on together (we need to do this n^2 times) + const GLTFNodeIndex node_i_parent = state.nodes[node_i]->parent; + if (node_i_parent >= 0) { + for (int j = 0; j < groups.size() && i != j; ++j) { + const Vector<GLTFNodeIndex> &group = groups[j]; + + if (group.find(node_i_parent) >= 0) { + const GLTFNodeIndex node_j = highest_group_members[j]; + skeleton_sets.create_union(node_i, node_j); } + } + } + } + } + + // At this point, the skeleton groups should be finalized + Vector<GLTFNodeIndex> skeleton_owners; + skeleton_sets.get_representatives(skeleton_owners); + + // Mark all the skins actual skeletons, after we have merged them + for (GLTFSkeletonIndex skel_i = 0; skel_i < skeleton_owners.size(); ++skel_i) { + + const GLTFNodeIndex skeleton_owner = skeleton_owners[skel_i]; + GLTFSkeleton skeleton; + + Vector<GLTFNodeIndex> skeleton_nodes; + skeleton_sets.get_members(skeleton_nodes, skeleton_owner); + + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + GLTFSkin &skin = state.skins.write[skin_i]; - //find a common parent + // If any of the the skeletons nodes exist in a skin, that skin now maps to the skeleton + for (int i = 0; i < skeleton_nodes.size(); ++i) { + GLTFNodeIndex skel_node_i = skeleton_nodes[i]; + if (skin.joints.find(skel_node_i) >= 0 || skin.non_joints.find(skel_node_i) >= 0) { + skin.skeleton = skel_i; + continue; } } + } + + Vector<GLTFNodeIndex> non_joints; + for (int i = 0; i < skeleton_nodes.size(); ++i) { + const GLTFNodeIndex node_i = skeleton_nodes[i]; + + if (state.nodes[node_i]->joint) { + skeleton.joints.push_back(node_i); + } else { + non_joints.push_back(node_i); + } + } + + state.skeletons.push_back(skeleton); + + _reparent_non_joint_skeleton_subtrees(state, state.skeletons.write[skel_i], non_joints); + } + + for (GLTFSkeletonIndex skel_i = 0; skel_i < state.skeletons.size(); ++skel_i) { + GLTFSkeleton &skeleton = state.skeletons.write[skel_i]; + + for (int i = 0; i < skeleton.joints.size(); ++i) { + const GLTFNodeIndex node_i = skeleton.joints[i]; + GLTFNode *node = state.nodes[node_i]; + + ERR_FAIL_COND_V(!node->joint, ERR_PARSE_ERROR); + ERR_FAIL_COND_V(node->skeleton >= 0, ERR_PARSE_ERROR); + node->skeleton = skel_i; + } + + ERR_FAIL_COND_V(_determine_skeleton_roots(state, skel_i), ERR_PARSE_ERROR); + } + + return OK; +} + +Error EditorSceneImporterGLTF::_reparent_non_joint_skeleton_subtrees(GLTFState &state, GLTFSkeleton &skeleton, const Vector<GLTFNodeIndex> &non_joints) { + + DisjointSet<GLTFNodeIndex> subtree_set; + + // Populate the disjoint set with ONLY non joints that are in the skeleton hierarchy (non_joints vector) + // This way we can find any joints that lie in between joints, as the current glTF specification + // mentions nothing about non-joints being in between joints of the same skin. Hopefully one day we + // can remove this code. + + // skinD depicted here explains this issue: + // https://github.com/KhronosGroup/glTF-Asset-Generator/blob/master/Output/Positive/Animation_Skin - if (skin_node != -1) { - for (int j = 0; j < users.size(); j++) { - state.nodes[users[j]]->child_of_skeleton = i; + for (int i = 0; i < non_joints.size(); ++i) { + const GLTFNodeIndex node_i = non_joints[i]; + + subtree_set.insert(node_i); + + const GLTFNodeIndex parent_i = state.nodes[node_i]->parent; + if (parent_i >= 0 && non_joints.find(parent_i) >= 0 && !state.nodes[parent_i]->joint) { + subtree_set.create_union(parent_i, node_i); + } + } + + // Find all the non joint subtrees and re-parent them to a new "fake" joint + + Vector<GLTFNodeIndex> non_joint_subtree_roots; + subtree_set.get_representatives(non_joint_subtree_roots); + + for (int root_i = 0; root_i < non_joint_subtree_roots.size(); ++root_i) { + const GLTFNodeIndex subtree_root = non_joint_subtree_roots[root_i]; + + Vector<GLTFNodeIndex> subtree_nodes; + subtree_set.get_members(subtree_nodes, subtree_root); + + for (int subtree_i = 0; subtree_i < subtree_nodes.size(); ++subtree_i) { + ERR_FAIL_COND_V(_reparent_to_fake_joint(state, skeleton, subtree_nodes[subtree_i]), FAILED); + + // We modified the tree, recompute all the heights + _compute_node_heights(state); + } + } + + return OK; +} + +Error EditorSceneImporterGLTF::_reparent_to_fake_joint(GLTFState &state, GLTFSkeleton &skeleton, const GLTFNodeIndex node_index) { + GLTFNode *node = state.nodes[node_index]; + + // Can we just "steal" this joint if it is just a spatial node? + if (node->skin < 0 && node->mesh < 0 && node->camera < 0) { + node->joint = true; + // Add the joint to the skeletons joints + skeleton.joints.push_back(node_index); + return OK; + } + + GLTFNode *fake_joint = memnew(GLTFNode); + const GLTFNodeIndex fake_joint_index = state.nodes.size(); + state.nodes.push_back(fake_joint); + + // We better not be a joint, or we messed up in our logic + if (node->joint) + return FAILED; + + fake_joint->translation = node->translation; + fake_joint->rotation = node->rotation; + fake_joint->scale = node->scale; + fake_joint->xform = node->xform; + fake_joint->joint = true; + + // We can use the exact same name here, because the joint will be inside a skeleton and not the scene + fake_joint->name = node->name; + + // Clear the nodes transforms, since it will be parented to the fake joint + node->translation = Vector3(0, 0, 0); + node->rotation = Quat(); + node->scale = Vector3(1, 1, 1); + node->xform = Transform(); + + // Transfer the node children to the fake joint + for (int child_i = 0; child_i < node->children.size(); ++child_i) { + GLTFNode *child = state.nodes[node->children[child_i]]; + child->parent = fake_joint_index; + } + + fake_joint->children = node->children; + node->children.clear(); + + // add the fake joint to the parent and remove the original joint + if (node->parent >= 0) { + GLTFNode *parent = state.nodes[node->parent]; + parent->children.erase(node_index); + parent->children.push_back(fake_joint_index); + fake_joint->parent = node->parent; + } + + // Add the node to the fake joint + fake_joint->children.push_back(node_index); + node->parent = fake_joint_index; + node->fake_joint_parent = fake_joint_index; + + // Add the fake joint to the skeletons joints + skeleton.joints.push_back(fake_joint_index); + + // Replace skin_skeletons with fake joints if we must. + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + GLTFSkin &skin = state.skins.write[skin_i]; + if (skin.skin_root == node_index) { + skin.skin_root = fake_joint_index; + } + } + + return OK; +} + +Error EditorSceneImporterGLTF::_determine_skeleton_roots(GLTFState &state, const GLTFSkeletonIndex skel_i) { + + DisjointSet<GLTFNodeIndex> disjoint_set; + + for (GLTFNodeIndex i = 0; i < state.nodes.size(); ++i) { + const GLTFNode *node = state.nodes[i]; + + if (node->skeleton != skel_i) { + continue; + } + + disjoint_set.insert(i); + + if (node->parent >= 0 && state.nodes[node->parent]->skeleton == skel_i) { + disjoint_set.create_union(node->parent, i); + } + } + + GLTFSkeleton &skeleton = state.skeletons.write[skel_i]; + + Vector<GLTFNodeIndex> owners; + disjoint_set.get_representatives(owners); + + Vector<GLTFNodeIndex> roots; + + for (int i = 0; i < owners.size(); ++i) { + Vector<GLTFNodeIndex> set; + disjoint_set.get_members(set, owners[i]); + const GLTFNodeIndex root = _find_highest_node(state, set); + ERR_FAIL_COND_V(root < 0, FAILED); + roots.push_back(root); + } + + roots.sort(); + + skeleton.roots = roots; + + if (roots.size() == 0) { + return FAILED; + } else if (roots.size() == 1) { + return OK; + } + + // Check that the subtrees have the same parent root + const GLTFNodeIndex parent = state.nodes[roots[0]]->parent; + for (int i = 1; i < roots.size(); ++i) { + if (state.nodes[roots[i]]->parent != parent) { + return FAILED; + } + } + + return OK; +} + +Error EditorSceneImporterGLTF::_create_skeletons(GLTFState &state) { + for (GLTFSkeletonIndex skel_i = 0; skel_i < state.skeletons.size(); ++skel_i) { + + GLTFSkeleton &gltf_skeleton = state.skeletons.write[skel_i]; + + Skeleton *skeleton = memnew(Skeleton); + gltf_skeleton.godot_skeleton = skeleton; + + // Make a unique name, no gltf node represents this skeleton + skeleton->set_name(_gen_unique_name(state, "Skeleton")); + + List<GLTFNodeIndex> bones; + + for (int i = 0; i < gltf_skeleton.roots.size(); ++i) { + bones.push_back(gltf_skeleton.roots[i]); + } + + // Make the skeleton creation deterministic by going through the roots in + // a sorted order, and DEPTH FIRST + bones.sort(); + + while (!bones.empty()) { + const GLTFNodeIndex node_i = bones.front()->get(); + bones.pop_front(); + + GLTFNode *node = state.nodes[node_i]; + ERR_FAIL_COND_V(node->skeleton != skel_i, FAILED); + + { // Add all child nodes to the stack (deterministically) + Vector<GLTFNodeIndex> child_nodes; + for (int i = 0; i < node->children.size(); ++i) { + const GLTFNodeIndex child_i = node->children[i]; + if (state.nodes[child_i]->skeleton == skel_i) { + child_nodes.push_back(child_i); + } + } + + // Depth first insertion + child_nodes.sort(); + for (int i = child_nodes.size() - 1; i >= 0; --i) { + bones.push_front(child_nodes[i]); } + } - state.nodes[skin_node]->skeleton_children.push_back(i); + const int bone_index = skeleton->get_bone_count(); + + if (node->name.empty()) { + node->name = "bone"; } + + node->name = _gen_unique_bone_name(state, skel_i, node->name); + + skeleton->add_bone(node->name); + skeleton->set_bone_rest(bone_index, node->xform); + skeleton->set_bone_pose(bone_index, node->xform); + + if (node->parent >= 0 && state.nodes[node->parent]->skeleton == skel_i) { + const int bone_parent = skeleton->find_bone(state.nodes[node->parent]->name); + ERR_FAIL_COND_V(bone_parent < 0, FAILED); + skeleton->set_bone_parent(bone_index, skeleton->find_bone(state.nodes[node->parent]->name)); + } + + state.scene_nodes.insert(node_i, skeleton); } - */ - state.skins.push_back(skin); } - print_verbose("glTF: Total skins: " + itos(state.skins.size())); - //now + ERR_FAIL_COND_V(_map_skin_joints_indices_to_skeleton_bone_indices(state), ERR_PARSE_ERROR); return OK; } +Error EditorSceneImporterGLTF::_map_skin_joints_indices_to_skeleton_bone_indices(GLTFState &state) { + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + GLTFSkin &skin = state.skins.write[skin_i]; + + const GLTFSkeleton &skeleton = state.skeletons[skin.skeleton]; + + for (int joint_index = 0; joint_index < skin.joints_original.size(); ++joint_index) { + const GLTFNodeIndex node_i = skin.joints_original[joint_index]; + const GLTFNode *node = state.nodes[node_i]; + + const int bone_index = skeleton.godot_skeleton->find_bone(node->name); + ERR_FAIL_COND_V(bone_index < 0, FAILED); + + skin.joint_i_to_bone_i.insert(joint_index, bone_index); + } + } + + return OK; +} + +Error EditorSceneImporterGLTF::_create_skins(GLTFState &state) { + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + GLTFSkin &gltf_skin = state.skins.write[skin_i]; + + Ref<Skin> skin; + skin.instance(); + + // Some skins don't have IBM's! What absolute monsters! + const bool has_ibms = !gltf_skin.inverse_binds.empty(); + + for (int joint_i = 0; joint_i < gltf_skin.joints_original.size(); ++joint_i) { + int bone_i = gltf_skin.joint_i_to_bone_i[joint_i]; + + if (has_ibms) { + skin->add_bind(bone_i, gltf_skin.inverse_binds[joint_i]); + } else { + skin->add_bind(bone_i, Transform()); + } + } + + gltf_skin.godot_skin = skin; + } + + // Purge the duplicates! + _remove_duplicate_skins(state); + + // Create unique names now, after removing duplicates + for (GLTFSkinIndex skin_i = 0; skin_i < state.skins.size(); ++skin_i) { + Ref<Skin> skin = state.skins[skin_i].godot_skin; + if (skin->get_name().empty()) { + // Make a unique name, no gltf node represents this skin + skin->set_name(_gen_unique_name(state, "Skin")); + } + } + + return OK; +} + +bool EditorSceneImporterGLTF::_skins_are_same(const Ref<Skin> &skin_a, const Ref<Skin> &skin_b) { + if (skin_a->get_bind_count() != skin_b->get_bind_count()) { + return false; + } + + for (int i = 0; i < skin_a->get_bind_count(); ++i) { + + if (skin_a->get_bind_bone(i) != skin_b->get_bind_bone(i)) { + return false; + } + + Transform a_xform = skin_a->get_bind_pose(i); + Transform b_xform = skin_b->get_bind_pose(i); + + if (a_xform != b_xform) { + return false; + } + } + + return true; +} + +void EditorSceneImporterGLTF::_remove_duplicate_skins(GLTFState &state) { + for (int i = 0; i < state.skins.size(); ++i) { + for (int j = i + 1; j < state.skins.size(); ++j) { + const Ref<Skin> &skin_i = state.skins[i].godot_skin; + const Ref<Skin> &skin_j = state.skins[j].godot_skin; + + if (_skins_are_same(skin_i, skin_j)) { + // replace it and delete the old + state.skins.write[j].godot_skin = skin_i; + } + } + } +} + Error EditorSceneImporterGLTF::_parse_cameras(GLTFState &state) { if (!state.json.has("cameras")) return OK; - Array cameras = state.json["cameras"]; + const Array &cameras = state.json["cameras"]; - for (int i = 0; i < cameras.size(); i++) { + for (GLTFCameraIndex i = 0; i < cameras.size(); i++) { - Dictionary d = cameras[i]; + const Dictionary &d = cameras[i]; GLTFCamera camera; ERR_FAIL_COND_V(!d.has("type"), ERR_PARSE_ERROR); - String type = d["type"]; + const String &type = d["type"]; if (type == "orthographic") { camera.perspective = false; if (d.has("orthographic")) { - Dictionary og = d["orthographic"]; + const Dictionary &og = d["orthographic"]; camera.fov_size = og["ymag"]; camera.zfar = og["zfar"]; camera.znear = og["znear"]; @@ -1535,7 +2276,7 @@ Error EditorSceneImporterGLTF::_parse_cameras(GLTFState &state) { camera.perspective = true; if (d.has("perspective")) { - Dictionary ppt = d["perspective"]; + const Dictionary &ppt = d["perspective"]; // GLTF spec is in radians, Godot's camera is in degrees. camera.fov_size = (double)ppt["yfov"] * 180.0 / Math_PI; camera.zfar = ppt["zfar"]; @@ -1560,11 +2301,11 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { if (!state.json.has("animations")) return OK; - Array animations = state.json["animations"]; + const Array &animations = state.json["animations"]; - for (int i = 0; i < animations.size(); i++) { + for (GLTFAnimationIndex i = 0; i < animations.size(); i++) { - Dictionary d = animations[i]; + const Dictionary &d = animations[i]; GLTFAnimation animation; @@ -1580,25 +2321,25 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { for (int j = 0; j < channels.size(); j++) { - Dictionary c = channels[j]; + const Dictionary &c = channels[j]; if (!c.has("target")) continue; - Dictionary t = c["target"]; + const Dictionary &t = c["target"]; if (!t.has("node") || !t.has("path")) { continue; } ERR_FAIL_COND_V(!c.has("sampler"), ERR_PARSE_ERROR); - int sampler = c["sampler"]; + const int sampler = c["sampler"]; ERR_FAIL_INDEX_V(sampler, samplers.size(), ERR_PARSE_ERROR); - int node = t["node"]; + GLTFNodeIndex node = t["node"]; String path = t["path"]; ERR_FAIL_INDEX_V(node, state.nodes.size(), ERR_PARSE_ERROR); - GLTFAnimation::Track *track = NULL; + GLTFAnimation::Track *track = nullptr; if (!animation.tracks.has(node)) { animation.tracks[node] = GLTFAnimation::Track(); @@ -1606,17 +2347,17 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { track = &animation.tracks[node]; - Dictionary s = samplers[sampler]; + const Dictionary &s = samplers[sampler]; ERR_FAIL_COND_V(!s.has("input"), ERR_PARSE_ERROR); ERR_FAIL_COND_V(!s.has("output"), ERR_PARSE_ERROR); - int input = s["input"]; - int output = s["output"]; + const int input = s["input"]; + const int output = s["output"]; GLTFAnimation::Interpolation interp = GLTFAnimation::INTERP_LINEAR; if (s.has("interpolation")) { - String in = s["interpolation"]; + const String &in = s["interpolation"]; if (in == "STEP") { interp = GLTFAnimation::INTERP_STEP; } else if (in == "LINEAR") { @@ -1628,33 +2369,33 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { } } - PoolVector<float> times = _decode_accessor_as_floats(state, input, false); + const PoolVector<float> times = _decode_accessor_as_floats(state, input, false); if (path == "translation") { - PoolVector<Vector3> translations = _decode_accessor_as_vec3(state, output, false); + const PoolVector<Vector3> translations = _decode_accessor_as_vec3(state, output, false); track->translation_track.interpolation = interp; track->translation_track.times = Variant(times); //convert via variant track->translation_track.values = Variant(translations); //convert via variant } else if (path == "rotation") { - Vector<Quat> rotations = _decode_accessor_as_quat(state, output, false); + const Vector<Quat> rotations = _decode_accessor_as_quat(state, output, false); track->rotation_track.interpolation = interp; track->rotation_track.times = Variant(times); //convert via variant track->rotation_track.values = rotations; //convert via variant } else if (path == "scale") { - PoolVector<Vector3> scales = _decode_accessor_as_vec3(state, output, false); + const PoolVector<Vector3> scales = _decode_accessor_as_vec3(state, output, false); track->scale_track.interpolation = interp; track->scale_track.times = Variant(times); //convert via variant track->scale_track.values = Variant(scales); //convert via variant } else if (path == "weights") { - PoolVector<float> weights = _decode_accessor_as_floats(state, output, false); + const PoolVector<float> weights = _decode_accessor_as_floats(state, output, false); ERR_FAIL_INDEX_V(state.nodes[node]->mesh, state.meshes.size(), ERR_PARSE_ERROR); const GLTFMesh *mesh = &state.meshes[state.nodes[node]->mesh]; ERR_FAIL_COND_V(mesh->blend_weights.size() == 0, ERR_PARSE_ERROR); - int wc = mesh->blend_weights.size(); + const int wc = mesh->blend_weights.size(); track->weight_tracks.resize(wc); - int wlen = weights.size() / wc; + const int wlen = weights.size() / wc; PoolVector<float>::Read r = weights.read(); for (int k = 0; k < wc; k++) { //separate tracks, having them together is not such a good idea GLTFAnimation::Channel<float> cf; @@ -1670,14 +2411,14 @@ Error EditorSceneImporterGLTF::_parse_animations(GLTFState &state) { track->weight_tracks.write[k] = cf; } } else { - WARN_PRINTS("Invalid path: " + path); + WARN_PRINTS("Invalid path '" + path + "'."); } } state.animations.push_back(animation); } - print_verbose("glTF: Total animations: " + itos(state.animations.size())); + print_verbose("glTF: Total animations '" + itos(state.animations.size()) + "'."); return OK; } @@ -1686,11 +2427,16 @@ void EditorSceneImporterGLTF::_assign_scene_names(GLTFState &state) { for (int i = 0; i < state.nodes.size(); i++) { GLTFNode *n = state.nodes[i]; - if (n->name == "") { + + // Any joints get unique names generated when the skeleton is made, unique to the skeleton + if (n->skeleton >= 0) + continue; + + if (n->name.empty()) { if (n->mesh >= 0) { n->name = "Mesh"; - } else if (n->joints.size()) { - n->name = "Bone"; + } else if (n->camera >= 0) { + n->name = "Camera"; } else { n->name = "Node"; } @@ -1700,127 +2446,131 @@ void EditorSceneImporterGLTF::_assign_scene_names(GLTFState &state) { } } -void EditorSceneImporterGLTF::_reparent_skeleton(GLTFState &state, int p_node, Vector<Skeleton *> &skeletons, Node *p_parent_node) { - //reparent skeletons to proper place - Vector<int> nodes = state.skeleton_nodes[p_node]; - for (int i = 0; i < nodes.size(); i++) { - Skeleton *skeleton = skeletons[nodes[i]]; - Node *owner = skeleton->get_owner(); - skeleton->get_parent()->remove_child(skeleton); - p_parent_node->add_child(skeleton); - skeleton->set_owner(owner); - //may have meshes as children, set owner in them too - for (int j = 0; j < skeleton->get_child_count(); j++) { - skeleton->get_child(j)->set_owner(owner); - } - } -} +BoneAttachment *EditorSceneImporterGLTF::_generate_bone_attachment(GLTFState &state, Skeleton *skeleton, const GLTFNodeIndex node_index) { -void EditorSceneImporterGLTF::_generate_node(GLTFState &state, int p_node, Node *p_parent, Node *p_owner, Vector<Skeleton *> &skeletons) { - ERR_FAIL_INDEX(p_node, state.nodes.size()); + const GLTFNode *gltf_node = state.nodes[node_index]; + const GLTFNode *bone_node = state.nodes[gltf_node->parent]; - GLTFNode *n = state.nodes[p_node]; - Spatial *node; + BoneAttachment *bone_attachment = memnew(BoneAttachment); + print_verbose("glTF: Creating bone attachment for: " + gltf_node->name); - if (n->mesh >= 0) { - ERR_FAIL_INDEX(n->mesh, state.meshes.size()); - MeshInstance *mi = memnew(MeshInstance); - print_verbose("glTF: Creating mesh for: " + n->name); - GLTFMesh &mesh = state.meshes.write[n->mesh]; - mi->set_mesh(mesh.mesh); - if (mesh.mesh->get_name() == "") { - mesh.mesh->set_name(n->name); - } - for (int i = 0; i < mesh.blend_weights.size(); i++) { - mi->set("blend_shapes/" + mesh.mesh->get_blend_shape_name(i), mesh.blend_weights[i]); - } + ERR_FAIL_COND_V(!bone_node->joint, nullptr); - node = mi; + bone_attachment->set_bone_name(bone_node->name); - } else if (n->camera >= 0) { - ERR_FAIL_INDEX(n->camera, state.cameras.size()); - Camera *camera = memnew(Camera); + return bone_attachment; +} - const GLTFCamera &c = state.cameras[n->camera]; - if (c.perspective) { - camera->set_perspective(c.fov_size, c.znear, c.znear); - } else { - camera->set_orthogonal(c.fov_size, c.znear, c.znear); - } +MeshInstance *EditorSceneImporterGLTF::_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { + const GLTFNode *gltf_node = state.nodes[node_index]; - node = camera; - } else { - node = memnew(Spatial); + ERR_FAIL_INDEX_V(gltf_node->mesh, state.meshes.size(), nullptr); + + MeshInstance *mi = memnew(MeshInstance); + print_verbose("glTF: Creating mesh for: " + gltf_node->name); + + GLTFMesh &mesh = state.meshes.write[gltf_node->mesh]; + mi->set_mesh(mesh.mesh); + + if (mesh.mesh->get_name() == "") { + mesh.mesh->set_name(gltf_node->name); + } + + for (int i = 0; i < mesh.blend_weights.size(); i++) { + mi->set("blend_shapes/" + mesh.mesh->get_blend_shape_name(i), mesh.blend_weights[i]); } - node->set_name(n->name); + return mi; +} - n->godot_nodes.push_back(node); +Camera *EditorSceneImporterGLTF::_generate_camera(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { + const GLTFNode *gltf_node = state.nodes[node_index]; - if (n->skin >= 0 && n->skin < skeletons.size() && Object::cast_to<MeshInstance>(node)) { - MeshInstance *mi = Object::cast_to<MeshInstance>(node); + ERR_FAIL_INDEX_V(gltf_node->camera, state.cameras.size(), nullptr); - Skeleton *s = skeletons[n->skin]; - s->add_child(node); //According to spec, mesh should actually act as a child of the skeleton, as it inherits its transform - mi->set_skeleton_path(String("..")); + Camera *camera = memnew(Camera); + print_verbose("glTF: Creating camera for: " + gltf_node->name); + const GLTFCamera &c = state.cameras[gltf_node->camera]; + if (c.perspective) { + camera->set_perspective(c.fov_size, c.znear, c.znear); } else { - p_parent->add_child(node); - node->set_transform(n->xform); + camera->set_orthogonal(c.fov_size, c.znear, c.znear); } - node->set_owner(p_owner); + return camera; +} -#if 0 - for (int i = 0; i < n->skeleton_children.size(); i++) { +Spatial *EditorSceneImporterGLTF::_generate_spatial(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index) { + const GLTFNode *gltf_node = state.nodes[node_index]; - Skeleton *s = skeletons[n->skeleton_children[i]]; - s->get_parent()->remove_child(s); - node->add_child(s); - s->set_owner(p_owner); - } -#endif - for (int i = 0; i < n->children.size(); i++) { - if (state.nodes[n->children[i]]->joints.size()) { - _generate_bone(state, n->children[i], skeletons, node); - } else { - _generate_node(state, n->children[i], node, p_owner, skeletons); - } - } + Spatial *spatial = memnew(Spatial); + print_verbose("glTF: Creating spatial for: " + gltf_node->name); - if (state.skeleton_nodes.has(p_node)) { - _reparent_skeleton(state, p_node, skeletons, node); - } + return spatial; } -void EditorSceneImporterGLTF::_generate_bone(GLTFState &state, int p_node, Vector<Skeleton *> &skeletons, Node *p_parent_node) { - ERR_FAIL_INDEX(p_node, state.nodes.size()); +void EditorSceneImporterGLTF::_generate_scene_node(GLTFState &state, Node *scene_parent, Spatial *scene_root, const GLTFNodeIndex node_index) { + + const GLTFNode *gltf_node = state.nodes[node_index]; + + Spatial *current_node = nullptr; + + // Is our parent a skeleton + Skeleton *active_skeleton = Object::cast_to<Skeleton>(scene_parent); - if (state.skeleton_nodes.has(p_node)) { - _reparent_skeleton(state, p_node, skeletons, p_parent_node); + if (gltf_node->skeleton >= 0) { + Skeleton *skeleton = state.skeletons[gltf_node->skeleton].godot_skeleton; + + if (active_skeleton != skeleton) { + ERR_FAIL_COND_MSG(active_skeleton != nullptr, "glTF: Generating scene detected direct parented Skeletons"); + + // Add it to the scene if it has not already been added + if (skeleton->get_parent() == nullptr) { + scene_parent->add_child(skeleton); + skeleton->set_owner(scene_root); + } + } + + active_skeleton = skeleton; + current_node = skeleton; } - GLTFNode *n = state.nodes[p_node]; + // If we have an active skeleton, and the node is node skinned, we need to create a bone attachment + if (current_node == nullptr && active_skeleton != nullptr && gltf_node->skin < 0) { + BoneAttachment *bone_attachment = _generate_bone_attachment(state, active_skeleton, node_index); - for (int i = 0; i < n->joints.size(); i++) { - const int skin = n->joints[i].skin; - ERR_FAIL_COND(skin < 0); + scene_parent->add_child(bone_attachment); + bone_attachment->set_owner(scene_root); - Skeleton *s = skeletons[skin]; - const GLTFNode *gltf_bone_node = state.nodes[state.skins[skin].bones[n->joints[i].bone].node]; - const String bone_name = gltf_bone_node->name; - const int parent = gltf_bone_node->parent; - const int parent_index = s->find_bone(state.nodes[parent]->name); + // There is no gltf_node that represent this, so just directly create a unique name + bone_attachment->set_name(_gen_unique_name(state, "BoneAttachment")); - const int bone_index = s->find_bone(bone_name); - s->set_bone_parent(bone_index, parent_index); + // We change the scene_parent to our bone attachment now. We do not set current_node because we want to make the node + // and attach it to the bone_attachment + scene_parent = bone_attachment; + } - n->godot_nodes.push_back(s); - n->joints.write[i].godot_bone_index = bone_index; + // We still have not managed to make a node + if (current_node == nullptr) { + if (gltf_node->mesh >= 0) { + current_node = _generate_mesh_instance(state, scene_parent, node_index); + } else if (gltf_node->camera >= 0) { + current_node = _generate_camera(state, scene_parent, node_index); + } else { + current_node = _generate_spatial(state, scene_parent, node_index); + } + + scene_parent->add_child(current_node); + current_node->set_owner(scene_root); + current_node->set_transform(gltf_node->xform); + current_node->set_name(gltf_node->name); } - for (int i = 0; i < n->children.size(); i++) { - _generate_bone(state, n->children[i], skeletons, p_parent_node); + state.scene_nodes.insert(node_index, current_node); + + for (int i = 0; i < gltf_node->children.size(); ++i) { + _generate_scene_node(state, current_node, scene_root, gltf_node->children[i]); } } @@ -1834,43 +2584,43 @@ struct EditorSceneImporterGLTFInterpolate { T catmull_rom(const T &p0, const T &p1, const T &p2, const T &p3, float t) { - float t2 = t * t; - float t3 = t2 * t; + const float t2 = t * t; + const float t3 = t2 * t; return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); } T bezier(T start, T control_1, T control_2, T end, float t) { /* Formula from Wikipedia article on Bezier curves. */ - real_t omt = (1.0 - t); - real_t omt2 = omt * omt; - real_t omt3 = omt2 * omt; - real_t t2 = t * t; - real_t t3 = t2 * t; + const real_t omt = (1.0 - t); + const real_t omt2 = omt * omt; + const real_t omt3 = omt2 * omt; + const real_t t2 = t * t; + const real_t t3 = t2 * t; return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3; } }; -//thank you for existing, partial specialization +// thank you for existing, partial specialization template <> struct EditorSceneImporterGLTFInterpolate<Quat> { - Quat lerp(const Quat &a, const Quat &b, float c) const { + Quat lerp(const Quat &a, const Quat &b, const float c) const { ERR_FAIL_COND_V(!a.is_normalized(), Quat()); ERR_FAIL_COND_V(!b.is_normalized(), Quat()); return a.slerp(b, c).normalized(); } - Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, float c) { + Quat catmull_rom(const Quat &p0, const Quat &p1, const Quat &p2, const Quat &p3, const float c) { ERR_FAIL_COND_V(!p1.is_normalized(), Quat()); ERR_FAIL_COND_V(!p2.is_normalized(), Quat()); return p1.slerp(p2, c).normalized(); } - Quat bezier(Quat start, Quat control_1, Quat control_2, Quat end, float t) { + Quat bezier(const Quat start, const Quat control_1, const Quat control_2, const Quat end, const float t) { ERR_FAIL_COND_V(!start.is_normalized(), Quat()); ERR_FAIL_COND_V(!end.is_normalized(), Quat()); @@ -1879,7 +2629,7 @@ struct EditorSceneImporterGLTFInterpolate<Quat> { }; template <class T> -T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, float p_time, GLTFAnimation::Interpolation p_interp) { +T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, const float p_time, const GLTFAnimation::Interpolation p_interp) { //could use binary search, worth it? int idx = -1; @@ -1900,7 +2650,7 @@ T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, cons return p_values[p_times.size() - 1]; } - float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); + const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); return interp.lerp(p_values[idx], p_values[idx + 1], c); @@ -1924,7 +2674,7 @@ T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, cons return p_values[1 + p_times.size() - 1]; } - float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); + const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); return interp.catmull_rom(p_values[idx - 1], p_values[idx], p_values[idx + 1], p_values[idx + 3], c); @@ -1937,12 +2687,12 @@ T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, cons return p_values[(p_times.size() - 1) * 3 + 1]; } - float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); + const float c = (p_time - p_times[idx]) / (p_times[idx + 1] - p_times[idx]); - T from = p_values[idx * 3 + 1]; - T c1 = from + p_values[idx * 3 + 2]; - T to = p_values[idx * 3 + 4]; - T c2 = to + p_values[idx * 3 + 3]; + const T from = p_values[idx * 3 + 1]; + const T c1 = from + p_values[idx * 3 + 2]; + const T to = p_values[idx * 3 + 4]; + const T c2 = to + p_values[idx * 3 + 3]; return interp.bezier(from, c1, c2, to, c); @@ -1952,12 +2702,13 @@ T EditorSceneImporterGLTF::_interpolate_track(const Vector<float> &p_times, cons ERR_FAIL_V(p_values[0]); } -void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlayer *ap, int index, int bake_fps, Vector<Skeleton *> skeletons) { +void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlayer *ap, const GLTFAnimationIndex index, const int bake_fps) { const GLTFAnimation &anim = state.animations[index]; String name = anim.name; - if (name == "") { + if (name.empty()) { + // No node represent these, and they are not in the hierarchy, so just make a unique name name = _gen_unique_name(state, "Animation"); } @@ -1973,102 +2724,143 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye //need to find the path NodePath node_path; - GLTFNode *node = state.nodes[E->key()]; - for (int n = 0; n < node->godot_nodes.size(); n++) { + GLTFNodeIndex node_index = E->key(); + if (state.nodes[node_index]->fake_joint_parent >= 0) { + // Should be same as parent + node_index = state.nodes[node_index]->fake_joint_parent; + } - if (node->joints.size()) { - Skeleton *sk = (Skeleton *)node->godot_nodes[n]; - String path = ap->get_parent()->get_path_to(sk); - String bone = sk->get_bone_name(node->joints[n].godot_bone_index); - node_path = path + ":" + bone; - } else { - node_path = ap->get_parent()->get_path_to(node->godot_nodes[n]); - } + const GLTFNode *node = state.nodes[E->key()]; + + if (node->skeleton >= 0) { + const Skeleton *sk = Object::cast_to<Skeleton>(state.scene_nodes.find(node_index)->get()); + ERR_FAIL_COND(sk == nullptr); + + const String path = ap->get_parent()->get_path_to(sk); + const String bone = node->name; + node_path = path + ":" + bone; + } else { + node_path = ap->get_parent()->get_path_to(state.scene_nodes.find(node_index)->get()); + } + + for (int i = 0; i < track.rotation_track.times.size(); i++) { + length = MAX(length, track.rotation_track.times[i]); + } + for (int i = 0; i < track.translation_track.times.size(); i++) { + length = MAX(length, track.translation_track.times[i]); + } + for (int i = 0; i < track.scale_track.times.size(); i++) { + length = MAX(length, track.scale_track.times[i]); + } - for (int i = 0; i < track.rotation_track.times.size(); i++) { - length = MAX(length, track.rotation_track.times[i]); + for (int i = 0; i < track.weight_tracks.size(); i++) { + for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { + length = MAX(length, track.weight_tracks[i].times[j]); } - for (int i = 0; i < track.translation_track.times.size(); i++) { - length = MAX(length, track.translation_track.times[i]); + } + + if (track.rotation_track.values.size() || track.translation_track.values.size() || track.scale_track.values.size()) { + //make transform track + int track_idx = animation->get_track_count(); + animation->add_track(Animation::TYPE_TRANSFORM); + animation->track_set_path(track_idx, node_path); + //first determine animation length + + const float increment = 1.0 / float(bake_fps); + float time = 0.0; + + Vector3 base_pos; + Quat base_rot; + Vector3 base_scale = Vector3(1, 1, 1); + + if (!track.rotation_track.values.size()) { + base_rot = state.nodes[E->key()]->rotation.normalized(); } - for (int i = 0; i < track.scale_track.times.size(); i++) { - length = MAX(length, track.scale_track.times[i]); + + if (!track.translation_track.values.size()) { + base_pos = state.nodes[E->key()]->translation; } - for (int i = 0; i < track.weight_tracks.size(); i++) { - for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { - length = MAX(length, track.weight_tracks[i].times[j]); - } + if (!track.scale_track.values.size()) { + base_scale = state.nodes[E->key()]->scale; } - if (track.rotation_track.values.size() || track.translation_track.values.size() || track.scale_track.values.size()) { - //make transform track - int track_idx = animation->get_track_count(); - animation->add_track(Animation::TYPE_TRANSFORM); - animation->track_set_path(track_idx, node_path); - //first determine animation length + bool last = false; + while (true) { - float increment = 1.0 / float(bake_fps); - float time = 0.0; + Vector3 pos = base_pos; + Quat rot = base_rot; + Vector3 scale = base_scale; - Vector3 base_pos; - Quat base_rot; - Vector3 base_scale = Vector3(1, 1, 1); - - if (!track.rotation_track.values.size()) { - base_rot = state.nodes[E->key()]->rotation.normalized(); + if (track.translation_track.times.size()) { + pos = _interpolate_track<Vector3>(track.translation_track.times, track.translation_track.values, time, track.translation_track.interpolation); } - if (!track.translation_track.values.size()) { - base_pos = state.nodes[E->key()]->translation; + if (track.rotation_track.times.size()) { + rot = _interpolate_track<Quat>(track.rotation_track.times, track.rotation_track.values, time, track.rotation_track.interpolation); } - if (!track.scale_track.values.size()) { - base_scale = state.nodes[E->key()]->scale; + if (track.scale_track.times.size()) { + scale = _interpolate_track<Vector3>(track.scale_track.times, track.scale_track.values, time, track.scale_track.interpolation); } - bool last = false; - while (true) { - - Vector3 pos = base_pos; - Quat rot = base_rot; - Vector3 scale = base_scale; + if (node->skeleton >= 0) { - if (track.translation_track.times.size()) { + Transform xform; + xform.basis.set_quat_scale(rot, scale); + xform.origin = pos; - pos = _interpolate_track<Vector3>(track.translation_track.times, track.translation_track.values, time, track.translation_track.interpolation); - } - - if (track.rotation_track.times.size()) { - - rot = _interpolate_track<Quat>(track.rotation_track.times, track.rotation_track.values, time, track.rotation_track.interpolation); - } + const Skeleton *skeleton = state.skeletons[node->skeleton].godot_skeleton; + const int bone_idx = skeleton->find_bone(node->name); + xform = skeleton->get_bone_rest(bone_idx).affine_inverse() * xform; - if (track.scale_track.times.size()) { - - scale = _interpolate_track<Vector3>(track.scale_track.times, track.scale_track.values, time, track.scale_track.interpolation); - } + rot = xform.basis.get_rotation_quat(); + rot.normalize(); + scale = xform.basis.get_scale(); + pos = xform.origin; + } - if (node->joints.size()) { + animation->transform_track_insert_key(track_idx, time, pos, rot, scale); - Transform xform; - //xform.basis = Basis(rot); - //xform.basis.scale(scale); - xform.basis.set_quat_scale(rot, scale); - xform.origin = pos; + if (last) { + break; + } + time += increment; + if (time >= length) { + last = true; + time = length; + } + } + } - Skeleton *skeleton = skeletons[node->joints[n].skin]; - int bone = node->joints[n].godot_bone_index; - xform = skeleton->get_bone_rest(bone).affine_inverse() * xform; + for (int i = 0; i < track.weight_tracks.size(); i++) { + ERR_CONTINUE(node->mesh < 0 || node->mesh >= state.meshes.size()); + const GLTFMesh &mesh = state.meshes[node->mesh]; + const String prop = "blend_shapes/" + mesh.mesh->get_blend_shape_name(i); - rot = xform.basis.get_rotation_quat(); - rot.normalize(); - scale = xform.basis.get_scale(); - pos = xform.origin; - } + const String blend_path = String(node_path) + ":" + prop; - animation->transform_track_insert_key(track_idx, time, pos, rot, scale); + const int track_idx = animation->get_track_count(); + animation->add_track(Animation::TYPE_VALUE); + animation->track_set_path(track_idx, blend_path); + // Only LINEAR and STEP (NEAREST) can be supported out of the box by Godot's Animation, + // the other modes have to be baked. + GLTFAnimation::Interpolation gltf_interp = track.weight_tracks[i].interpolation; + if (gltf_interp == GLTFAnimation::INTERP_LINEAR || gltf_interp == GLTFAnimation::INTERP_STEP) { + animation->track_set_interpolation_type(track_idx, gltf_interp == GLTFAnimation::INTERP_STEP ? Animation::INTERPOLATION_NEAREST : Animation::INTERPOLATION_LINEAR); + for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { + const float t = track.weight_tracks[i].times[j]; + const float w = track.weight_tracks[i].values[j]; + animation->track_insert_key(track_idx, t, w); + } + } else { + // CATMULLROMSPLINE or CUBIC_SPLINE have to be baked, apologies. + const float increment = 1.0 / float(bake_fps); + float time = 0.0; + bool last = false; + while (true) { + _interpolate_track<float>(track.weight_tracks[i].times, track.weight_tracks[i].values, time, gltf_interp); if (last) { break; } @@ -2079,86 +2871,54 @@ void EditorSceneImporterGLTF::_import_animation(GLTFState &state, AnimationPlaye } } } - - for (int i = 0; i < track.weight_tracks.size(); i++) { - ERR_CONTINUE(node->mesh < 0 || node->mesh >= state.meshes.size()); - const GLTFMesh &mesh = state.meshes[node->mesh]; - String prop = "blend_shapes/" + mesh.mesh->get_blend_shape_name(i); - node_path = String(node_path) + ":" + prop; - - int track_idx = animation->get_track_count(); - animation->add_track(Animation::TYPE_VALUE); - animation->track_set_path(track_idx, node_path); - - // Only LINEAR and STEP (NEAREST) can be supported out of the box by Godot's Animation, - // the other modes have to be baked. - GLTFAnimation::Interpolation gltf_interp = track.weight_tracks[i].interpolation; - if (gltf_interp == GLTFAnimation::INTERP_LINEAR || gltf_interp == GLTFAnimation::INTERP_STEP) { - animation->track_set_interpolation_type(track_idx, gltf_interp == GLTFAnimation::INTERP_STEP ? Animation::INTERPOLATION_NEAREST : Animation::INTERPOLATION_LINEAR); - for (int j = 0; j < track.weight_tracks[i].times.size(); j++) { - float t = track.weight_tracks[i].times[j]; - float w = track.weight_tracks[i].values[j]; - animation->track_insert_key(track_idx, t, w); - } - } else { - // CATMULLROMSPLINE or CUBIC_SPLINE have to be baked, apologies. - float increment = 1.0 / float(bake_fps); - float time = 0.0; - bool last = false; - while (true) { - _interpolate_track<float>(track.weight_tracks[i].times, track.weight_tracks[i].values, time, gltf_interp); - if (last) { - break; - } - time += increment; - if (time >= length) { - last = true; - time = length; - } - } - } - } } } + animation->set_length(length); ap->add_animation(name, animation); } -Spatial *EditorSceneImporterGLTF::_generate_scene(GLTFState &state, int p_bake_fps) { +void EditorSceneImporterGLTF::_process_mesh_instances(GLTFState &state, Spatial *scene_root) { + for (GLTFNodeIndex node_i = 0; node_i < state.nodes.size(); ++node_i) { + const GLTFNode *node = state.nodes[node_i]; - Spatial *root = memnew(Spatial); - root->set_name(state.scene_name); - //generate skeletons - Vector<Skeleton *> skeletons; - for (int i = 0; i < state.skins.size(); i++) { - Skeleton *s = memnew(Skeleton); - s->set_use_bones_in_world_transform(false); //GLTF does not need this since meshes are always local - String name = state.skins[i].name; - if (name == "") { - name = _gen_unique_name(state, "Skeleton"); - } - for (int j = 0; j < state.skins[i].bones.size(); j++) { - s->add_bone(state.nodes[state.skins[i].bones[j].node]->name); - s->set_bone_rest(j, state.skins[i].bones[j].inverse_bind.affine_inverse()); - } - s->set_name(name); - root->add_child(s); - s->set_owner(root); - skeletons.push_back(s); - } - for (int i = 0; i < state.root_nodes.size(); i++) { - if (state.nodes[state.root_nodes[i]]->joints.size()) { - _generate_bone(state, state.root_nodes[i], skeletons, root); - } else { - _generate_node(state, state.root_nodes[i], root, root, skeletons); + if (node->skin >= 0 && node->mesh >= 0) { + const GLTFSkinIndex skin_i = node->skin; + + Map<GLTFNodeIndex, Node *>::Element *mi_element = state.scene_nodes.find(node_i); + MeshInstance *mi = Object::cast_to<MeshInstance>(mi_element->get()); + ERR_FAIL_COND(mi == nullptr); + + const GLTFSkeletonIndex skel_i = state.skins[node->skin].skeleton; + const GLTFSkeleton &gltf_skeleton = state.skeletons[skel_i]; + Skeleton *skeleton = gltf_skeleton.godot_skeleton; + ERR_FAIL_COND(skeleton == nullptr); + + mi->get_parent()->remove_child(mi); + skeleton->add_child(mi); + mi->set_owner(scene_root); + + mi->set_skin(state.skins[skin_i].godot_skin); + mi->set_skeleton_path(mi->get_path_to(skeleton)); + mi->set_transform(Transform()); } } +} + +Spatial *EditorSceneImporterGLTF::_generate_scene(GLTFState &state, const int p_bake_fps) { + + Spatial *root = memnew(Spatial); - for (int i = 0; i < skeletons.size(); i++) { - skeletons[i]->localize_rests(); + // scene_name is already unique + root->set_name(state.scene_name); + + for (int i = 0; i < state.root_nodes.size(); ++i) { + _generate_scene_node(state, root, root, state.root_nodes[i]); } + _process_mesh_instances(state, root); + if (state.animations.size()) { AnimationPlayer *ap = memnew(AnimationPlayer); ap->set_name("AnimationPlayer"); @@ -2166,7 +2926,7 @@ Spatial *EditorSceneImporterGLTF::_generate_scene(GLTFState &state, int p_bake_f ap->set_owner(root); for (int i = 0; i < state.animations.size(); i++) { - _import_animation(state, ap, i, p_bake_fps, skeletons); + _import_animation(state, ap, i, p_bake_fps); } } @@ -2241,30 +3001,45 @@ Node *EditorSceneImporterGLTF::import_scene(const String &p_path, uint32_t p_fla if (err != OK) return NULL; - /* STEP 8 PARSE MESHES (we have enough info now) */ - err = _parse_meshes(state); + /* STEP 9 PARSE SKINS */ + err = _parse_skins(state); if (err != OK) return NULL; - /* STEP 9 PARSE SKINS */ - err = _parse_skins(state); + /* STEP 10 DETERMINE SKELETONS */ + err = _determine_skeletons(state); + if (err != OK) + return NULL; + + /* STEP 11 CREATE SKELETONS */ + err = _create_skeletons(state); + if (err != OK) + return NULL; + + /* STEP 12 CREATE SKINS */ + err = _create_skins(state); + if (err != OK) + return NULL; + + /* STEP 13 PARSE MESHES (we have enough info now) */ + err = _parse_meshes(state); if (err != OK) return NULL; - /* STEP 10 PARSE CAMERAS */ + /* STEP 14 PARSE CAMERAS */ err = _parse_cameras(state); if (err != OK) return NULL; - /* STEP 11 PARSE ANIMATIONS */ + /* STEP 15 PARSE ANIMATIONS */ err = _parse_animations(state); if (err != OK) return NULL; - /* STEP 12 ASSIGN SCENE NAMES */ + /* STEP 16 ASSIGN SCENE NAMES */ _assign_scene_names(state); - /* STEP 13 MAKE SCENE! */ + /* STEP 17 MAKE SCENE! */ Spatial *scene = _generate_scene(state, p_bake_fps); return scene; diff --git a/editor/import/editor_scene_importer_gltf.h b/editor/import/editor_scene_importer_gltf.h index ebf20e122a..6021bf10c8 100644 --- a/editor/import/editor_scene_importer_gltf.h +++ b/editor/import/editor_scene_importer_gltf.h @@ -36,11 +36,26 @@ #include "scene/3d/spatial.h" class AnimationPlayer; +class BoneAttachment; +class MeshInstance; class EditorSceneImporterGLTF : public EditorSceneImporter { GDCLASS(EditorSceneImporterGLTF, EditorSceneImporter); + typedef int GLTFAccessorIndex; + typedef int GLTFAnimationIndex; + typedef int GLTFBufferIndex; + typedef int GLTFBufferViewIndex; + typedef int GLTFCameraIndex; + typedef int GLTFImageIndex; + typedef int GLTFMaterialIndex; + typedef int GLTFMeshIndex; + typedef int GLTFNodeIndex; + typedef int GLTFSkeletonIndex; + typedef int GLTFSkinIndex; + typedef int GLTFTextureIndex; + enum { ARRAY_BUFFER = 34962, ELEMENT_ARRAY_BUFFER = 34963, @@ -61,8 +76,8 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { }; - String _get_component_type_name(uint32_t p_component); - int _get_component_type_size(int component_type); + String _get_component_type_name(const uint32_t p_component); + int _get_component_type_size(const int component_type); enum GLTFType { TYPE_SCALAR, @@ -74,60 +89,48 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { TYPE_MAT4, }; - String _get_type_name(GLTFType p_component); + String _get_type_name(const GLTFType p_component); struct GLTFNode { + //matrices need to be transformed to this - int parent; + GLTFNodeIndex parent; + int height; Transform xform; String name; - //Node *godot_node; - //int godot_bone_index; - - int mesh; - int camera; - int skin; - //int skeleton_skin; - //int child_of_skeleton; // put as children of skeleton - //Vector<int> skeleton_children; //skeleton put as children of this - - struct Joint { - int skin; - int bone; - int godot_bone_index; - - Joint() { - skin = -1; - bone = -1; - godot_bone_index = -1; - } - }; - Vector<Joint> joints; + GLTFMeshIndex mesh; + GLTFCameraIndex camera; + GLTFSkinIndex skin; + + GLTFSkeletonIndex skeleton; + bool joint; - //keep them for animation Vector3 translation; Quat rotation; Vector3 scale; Vector<int> children; - Vector<Node *> godot_nodes; + + GLTFNodeIndex fake_joint_parent; GLTFNode() : parent(-1), + height(-1), mesh(-1), camera(-1), skin(-1), - //skeleton_skin(-1), - //child_of_skeleton(-1), - scale(Vector3(1, 1, 1)) { - } + skeleton(-1), + joint(false), + translation(0, 0, 0), + scale(Vector3(1, 1, 1)), + fake_joint_parent(-1) {} }; struct GLTFBufferView { - int buffer; + GLTFBufferIndex buffer; int byte_offset; int byte_length; int byte_stride; @@ -135,7 +138,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { //matrices need to be transformed to this GLTFBufferView() : - buffer(0), + buffer(-1), byte_offset(0), byte_length(0), byte_stride(0), @@ -145,7 +148,7 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { struct GLTFAccessor { - int buffer_view; + GLTFBufferViewIndex buffer_view; int byte_offset; int component_type; bool normalized; @@ -160,8 +163,6 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { int sparse_values_buffer_view; int sparse_values_byte_offset; - //matrices need to be transformed to this - GLTFAccessor() { buffer_view = 0; byte_offset = 0; @@ -176,27 +177,67 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { } }; struct GLTFTexture { - int src_image; + GLTFImageIndex src_image; }; - struct GLTFSkin { + struct GLTFSkeleton { + // The *synthesized* skeletons joints + Vector<GLTFNodeIndex> joints; - String name; - struct Bone { - Transform inverse_bind; - int node; - }; + // The roots of the skeleton. If there are multiple, each root must have the same parent + // (ie roots are siblings) + Vector<GLTFNodeIndex> roots; - int skeleton; - Vector<Bone> bones; + // The created Skeleton for the scene + Skeleton *godot_skeleton; - //matrices need to be transformed to this + // Set of unique bone names for the skeleton + Set<String> unique_names; - GLTFSkin() { - skeleton = -1; + GLTFSkeleton() : + godot_skeleton(nullptr) { } }; + struct GLTFSkin { + String name; + + // The "skeleton" property defined in the gltf spec. -1 = Scene Root + GLTFNodeIndex skin_root; + + Vector<GLTFNodeIndex> joints_original; + Vector<Transform> inverse_binds; + + // Note: joints + non_joints should form a complete subtree, or subtrees with a common parent + + // All nodes that are skins that are caught in-between the original joints + // (inclusive of joints_original) + Vector<GLTFNodeIndex> joints; + + // All Nodes that are caught in-between skin joint nodes, and are not defined + // as joints by any skin + Vector<GLTFNodeIndex> non_joints; + + // The roots of the skin. In the case of multiple roots, their parent *must* + // be the same (the roots must be siblings) + Vector<GLTFNodeIndex> roots; + + // The GLTF Skeleton this Skin points to (after we determine skeletons) + GLTFSkeletonIndex skeleton; + + // A mapping from the joint indices (in the order of joints_original) to the + // Godot Skeleton's bone_indices + Map<int, int> joint_i_to_bone_i; + + // The Actual Skin that will be created as a mapping between the IBM's of this skin + // to the generated skeleton for the mesh instances. + Ref<Skin> godot_skin; + + GLTFSkin() : + skin_root(-1), + skeleton(-1) {} + }; + struct GLTFMesh { Ref<ArrayMesh> mesh; Vector<float> blend_weights; @@ -272,11 +313,10 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Set<String> unique_names; + Vector<GLTFSkeleton> skeletons; Vector<GLTFAnimation> animations; - Map<int, Vector<int> > skeleton_nodes; - - //Map<int, Vector<int> > skin_users; //cache skin users + Map<GLTFNodeIndex, Node *> scene_nodes; ~GLTFState() { for (int i = 0; i < nodes.size(); i++) { @@ -285,37 +325,38 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { } }; + String _sanitize_scene_name(const String &name); String _gen_unique_name(GLTFState &state, const String &p_name); - Ref<Texture> _get_texture(GLTFState &state, int p_texture); + String _sanitize_bone_name(const String &name); + String _gen_unique_bone_name(GLTFState &state, const GLTFSkeletonIndex skel_i, const String &p_name); + + Ref<Texture> _get_texture(GLTFState &state, const GLTFTextureIndex p_texture); Error _parse_json(const String &p_path, GLTFState &state); Error _parse_glb(const String &p_path, GLTFState &state); Error _parse_scenes(GLTFState &state); Error _parse_nodes(GLTFState &state); + + void _compute_node_heights(GLTFState &state); + Error _parse_buffers(GLTFState &state, const String &p_base_path); Error _parse_buffer_views(GLTFState &state); GLTFType _get_type_from_str(const String &p_string); Error _parse_accessors(GLTFState &state); - Error _decode_buffer_view(GLTFState &state, int p_buffer_view, double *dst, int skip_every, int skip_bytes, int element_size, int count, GLTFType type, int component_count, int component_type, int component_size, bool normalized, int byte_offset, bool for_vertex); - Vector<double> _decode_accessor(GLTFState &state, int p_accessor, bool p_for_vertex); - PoolVector<float> _decode_accessor_as_floats(GLTFState &state, int p_accessor, bool p_for_vertex); - PoolVector<int> _decode_accessor_as_ints(GLTFState &state, int p_accessor, bool p_for_vertex); - PoolVector<Vector2> _decode_accessor_as_vec2(GLTFState &state, int p_accessor, bool p_for_vertex); - PoolVector<Vector3> _decode_accessor_as_vec3(GLTFState &state, int p_accessor, bool p_for_vertex); - PoolVector<Color> _decode_accessor_as_color(GLTFState &state, int p_accessor, bool p_for_vertex); - Vector<Quat> _decode_accessor_as_quat(GLTFState &state, int p_accessor, bool p_for_vertex); - Vector<Transform2D> _decode_accessor_as_xform2d(GLTFState &state, int p_accessor, bool p_for_vertex); - Vector<Basis> _decode_accessor_as_basis(GLTFState &state, int p_accessor, bool p_for_vertex); - Vector<Transform> _decode_accessor_as_xform(GLTFState &state, int p_accessor, bool p_for_vertex); - - void _reparent_skeleton(GLTFState &state, int p_node, Vector<Skeleton *> &skeletons, Node *p_parent_node); - void _generate_bone(GLTFState &state, int p_node, Vector<Skeleton *> &skeletons, Node *p_parent_node); - void _generate_node(GLTFState &state, int p_node, Node *p_parent, Node *p_owner, Vector<Skeleton *> &skeletons); - void _import_animation(GLTFState &state, AnimationPlayer *ap, int index, int bake_fps, Vector<Skeleton *> skeletons); - - Spatial *_generate_scene(GLTFState &state, int p_bake_fps); + Error _decode_buffer_view(GLTFState &state, double *dst, const GLTFBufferViewIndex p_buffer_view, const int skip_every, const int skip_bytes, const int element_size, const int count, const GLTFType type, const int component_count, const int component_type, const int component_size, const bool normalized, const int byte_offset, const bool for_vertex); + + Vector<double> _decode_accessor(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + PoolVector<float> _decode_accessor_as_floats(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + PoolVector<int> _decode_accessor_as_ints(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + PoolVector<Vector2> _decode_accessor_as_vec2(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + PoolVector<Vector3> _decode_accessor_as_vec3(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + PoolVector<Color> _decode_accessor_as_color(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Quat> _decode_accessor_as_quat(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Transform2D> _decode_accessor_as_xform2d(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Basis> _decode_accessor_as_basis(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); + Vector<Transform> _decode_accessor_as_xform(GLTFState &state, const GLTFAccessorIndex p_accessor, const bool p_for_vertex); Error _parse_meshes(GLTFState &state); Error _parse_images(GLTFState &state, const String &p_base_path); @@ -323,16 +364,46 @@ class EditorSceneImporterGLTF : public EditorSceneImporter { Error _parse_materials(GLTFState &state); + GLTFNodeIndex _find_highest_node(GLTFState &state, const Vector<GLTFNodeIndex> &subset); + + bool _capture_nodes_in_skin(GLTFState &state, GLTFSkin &skin, const GLTFNodeIndex node_index); + void _capture_nodes_for_multirooted_skin(GLTFState &state, GLTFSkin &skin); + Error _expand_skin(GLTFState &state, GLTFSkin &skin); + Error _verify_skin(GLTFState &state, GLTFSkin &skin); Error _parse_skins(GLTFState &state); + Error _determine_skeletons(GLTFState &state); + Error _reparent_non_joint_skeleton_subtrees(GLTFState &state, GLTFSkeleton &skeleton, const Vector<GLTFNodeIndex> &non_joints); + Error _reparent_to_fake_joint(GLTFState &state, GLTFSkeleton &skeleton, const GLTFNodeIndex node_index); + Error _determine_skeleton_roots(GLTFState &state, const GLTFSkeletonIndex skel_i); + + Error _create_skeletons(GLTFState &state); + Error _map_skin_joints_indices_to_skeleton_bone_indices(GLTFState &state); + + Error _create_skins(GLTFState &state); + bool _skins_are_same(const Ref<Skin> &skin_a, const Ref<Skin> &skin_b); + void _remove_duplicate_skins(GLTFState &state); + Error _parse_cameras(GLTFState &state); Error _parse_animations(GLTFState &state); + BoneAttachment *_generate_bone_attachment(GLTFState &state, Skeleton *skeleton, const GLTFNodeIndex node_index); + MeshInstance *_generate_mesh_instance(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); + Camera *_generate_camera(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); + Spatial *_generate_spatial(GLTFState &state, Node *scene_parent, const GLTFNodeIndex node_index); + + void _generate_scene_node(GLTFState &state, Node *scene_parent, Spatial *scene_root, const GLTFNodeIndex node_index); + Spatial *_generate_scene(GLTFState &state, const int p_bake_fps); + + void _process_mesh_instances(GLTFState &state, Spatial *scene_root); + void _assign_scene_names(GLTFState &state); template <class T> - T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, float p_time, GLTFAnimation::Interpolation p_interp); + T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, const float p_time, const GLTFAnimation::Interpolation p_interp); + + void _import_animation(GLTFState &state, AnimationPlayer *ap, const GLTFAnimationIndex index, const int bake_fps); public: virtual uint32_t get_import_flags() const; diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp index 301422a25a..d988e1dcc3 100644 --- a/editor/import/resource_importer_csv_translation.cpp +++ b/editor/import/resource_importer_csv_translation.cpp @@ -90,7 +90,7 @@ Error ResourceImporterCSVTranslation::import(const String &p_source_file, const FileAccessRef f = FileAccess::open(p_source_file, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot open file from path '" + p_source_file + "'."); Vector<String> line = f->get_csv_line(delimiter); ERR_FAIL_COND_V(line.size() <= 1, ERR_PARSE_ERROR); diff --git a/editor/import/resource_importer_image.cpp b/editor/import/resource_importer_image.cpp index ed8ea5497a..3d7663ba8f 100644 --- a/editor/import/resource_importer_image.cpp +++ b/editor/import/resource_importer_image.cpp @@ -78,7 +78,7 @@ Error ResourceImporterImage::import(const String &p_source_file, const String &p FileAccess *f = FileAccess::open(p_source_file, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot open file from path '" + p_source_file + "'."); size_t len = f->get_len(); @@ -90,6 +90,7 @@ Error ResourceImporterImage::import(const String &p_source_file, const String &p memdelete(f); f = FileAccess::open(p_save_path + ".image", FileAccess::WRITE); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_CREATE, "Cannot create file in path '" + p_save_path + ".image'."); //save the header GDIM const uint8_t header[4] = { 'G', 'D', 'I', 'M' }; diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp index 9061c92f6e..31a099ef83 100644 --- a/editor/import/resource_importer_obj.cpp +++ b/editor/import/resource_importer_obj.cpp @@ -509,7 +509,7 @@ Error ResourceImporterOBJ::import(const String &p_source_file, const String &p_s err = ResourceSaver::save(save_path, meshes.front()->get()); - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot save Mesh to file '" + save_path + "'."); r_gen_files->push_back(save_path); diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h index b96bc1b656..adad21da61 100644 --- a/editor/import/resource_importer_obj.h +++ b/editor/import/resource_importer_obj.h @@ -31,7 +31,7 @@ #ifndef RESOURCEIMPORTEROBJ_H #define RESOURCEIMPORTEROBJ_H -#include "import/resource_importer_scene.h" +#include "resource_importer_scene.h" class EditorOBJImporter : public EditorSceneImporter { diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 64994e21b0..3a99968192 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -1178,7 +1178,7 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/import", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/fps", PROPERTY_HINT_RANGE, "1,120,1"), 15)); r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "animation/filter_script", PROPERTY_HINT_MULTILINE_TEXT), "")); - r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "animation/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.anim),Files (.tres)"), animations_out ? true : false)); + r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "animation/storage", PROPERTY_HINT_ENUM, "Built-In,Files (.anim),Files (.tres)", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), animations_out)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/keep_custom_tracks"), animations_out)); r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "animation/optimizer/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), true)); r_options->push_back(ImportOption(PropertyInfo(Variant::REAL, "animation/optimizer/max_linear_error"), 0.05)); @@ -1418,7 +1418,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p DirAccess *da = DirAccess::open(base_path); Error err2 = da->make_dir(subdir_name); memdelete(da); - ERR_FAIL_COND_V(err2 != OK && err2 != ERR_ALREADY_EXISTS, err2); + ERR_FAIL_COND_V_MSG(err2 != OK && err2 != ERR_ALREADY_EXISTS, err2, "Cannot make directory '" + subdir_name + "'."); base_path = base_path.plus_file(subdir_name); } } @@ -1514,7 +1514,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p Ref<PackedScene> packer = memnew(PackedScene); packer->pack(child); err = ResourceSaver::save(path, packer); //do not take over, let the changed files reload themselves - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot save scene to file '" + path + "'."); } } @@ -1522,7 +1522,7 @@ Error ResourceImporterScene::import(const String &p_source_file, const String &p packer->pack(scene); print_verbose("Saving scene to: " + p_save_path + ".scn"); err = ResourceSaver::save(p_save_path + ".scn", packer); //do not take over, let the changed files reload themselves - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot save scene to file '" + p_save_path + ".scn'."); memdelete(scene); @@ -1549,7 +1549,7 @@ Node *EditorSceneImporterESCN::import_scene(const String &p_path, uint32_t p_fla Error error; Ref<PackedScene> ps = ResourceFormatLoaderText::singleton->load(p_path, p_path, &error); - ERR_FAIL_COND_V(!ps.is_valid(), NULL); + ERR_FAIL_COND_V_MSG(!ps.is_valid(), NULL, "Cannot load scene as text resource from path '" + p_path + "'."); Node *scene = ps->instance(); ERR_FAIL_COND_V(!scene, NULL); diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp index f1de71e25e..74586a4100 100644 --- a/editor/import/resource_importer_wav.cpp +++ b/editor/import/resource_importer_wav.cpp @@ -96,7 +96,7 @@ Error ResourceImporterWAV::import(const String &p_source_file, const String &p_s Error err; FileAccess *file = FileAccess::open(p_source_file, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(err != OK, ERR_CANT_OPEN, "Cannot open file '" + p_source_file + "'."); /* CHECK RIFF */ char riff[5]; diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp index 6918fe7977..1d72e370b3 100644 --- a/editor/import_dock.cpp +++ b/editor/import_dock.cpp @@ -132,6 +132,7 @@ void ImportDock::set_edit_path(const String &p_path) { params->paths.push_back(p_path); import->set_disabled(false); import_as->set_disabled(false); + preset->set_disabled(false); imported->set_text(p_path.get_file()); } @@ -287,6 +288,7 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) { params->paths = p_paths; import->set_disabled(false); import_as->set_disabled(false); + preset->set_disabled(false); imported->set_text(itos(p_paths.size()) + TTR(" Files")); } @@ -367,6 +369,7 @@ void ImportDock::clear() { import->set_disabled(true); import_as->clear(); import_as->set_disabled(true); + preset->set_disabled(true); params->values.clear(); params->properties.clear(); params->update(); @@ -528,11 +531,13 @@ ImportDock::ImportDock() { HBoxContainer *hb = memnew(HBoxContainer); add_margin_child(TTR("Import As:"), hb); import_as = memnew(OptionButton); + import_as->set_disabled(true); import_as->connect("item_selected", this, "_importer_selected"); hb->add_child(import_as); import_as->set_h_size_flags(SIZE_EXPAND_FILL); preset = memnew(MenuButton); - preset->set_text(TTR("Preset...")); + preset->set_text(TTR("Preset")); + preset->set_disabled(true); preset->get_popup()->connect("index_pressed", this, "_preset_selected"); hb->add_child(preset); @@ -545,6 +550,7 @@ ImportDock::ImportDock() { add_child(hb); import = memnew(Button); import->set_text(TTR("Reimport")); + import->set_disabled(true); import->connect("pressed", this, "_reimport_attempt"); hb->add_spacer(); hb->add_child(import); diff --git a/editor/inspector_dock.cpp b/editor/inspector_dock.cpp index 8ba7d9fba7..02b0159241 100644 --- a/editor/inspector_dock.cpp +++ b/editor/inspector_dock.cpp @@ -253,13 +253,11 @@ void InspectorDock::_prepare_history() { text = obj->get_class(); } - if (i == editor_history->get_history_pos()) { + if (i == editor_history->get_history_pos() && current) { text = "[" + text + "]"; } history_menu->get_popup()->add_icon_item(icon, text, i); } - - editor_path->update_path(); } void InspectorDock::_select_history(int p_idx) const { @@ -296,7 +294,7 @@ void InspectorDock::_edit_forward() { } void InspectorDock::_edit_back() { EditorHistory *editor_history = EditorNode::get_singleton()->get_editor_history(); - if (editor_history->previous() || editor_history->get_path_size() == 1) + if ((current && editor_history->previous()) || editor_history->get_path_size() == 1) editor->edit_current(); } @@ -408,6 +406,7 @@ void InspectorDock::update(Object *p_object) { warning->hide(); search->set_editable(false); + editor_path->set_disabled(true); editor_path->set_text(""); editor_path->set_tooltip(""); editor_path->set_icon(NULL); @@ -420,6 +419,7 @@ void InspectorDock::update(Object *p_object) { object_menu->set_disabled(false); search->set_editable(true); + editor_path->set_disabled(false); resource_save_button->set_disabled(!is_resource); PopupMenu *p = object_menu->get_popup(); diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp index d6df3bd369..7ba1796600 100644 --- a/editor/node_dock.cpp +++ b/editor/node_dock.cpp @@ -129,6 +129,7 @@ NodeDock::NodeDock() { select_a_node = memnew(Label); select_a_node->set_text(TTR("Select a single node to edit its signals and groups.")); + select_a_node->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); select_a_node->set_v_size_flags(SIZE_EXPAND_FILL); select_a_node->set_valign(Label::VALIGN_CENTER); select_a_node->set_align(Label::ALIGN_CENTER); diff --git a/editor/output_strings.cpp b/editor/output_strings.cpp deleted file mode 100644 index baabaff9a8..0000000000 --- a/editor/output_strings.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/*************************************************************************/ -/* output_strings.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 "output_strings.h" - -void OutputStrings::update_scrollbars() { - - Size2 hmin = h_scroll->get_combined_minimum_size(); - Size2 vmin = v_scroll->get_combined_minimum_size(); - - v_scroll->set_anchor(MARGIN_LEFT, ANCHOR_END); - v_scroll->set_anchor(MARGIN_RIGHT, ANCHOR_END); - v_scroll->set_anchor(MARGIN_BOTTOM, ANCHOR_END); - - v_scroll->set_begin(Point2(-vmin.width, 0)); - v_scroll->set_end(Point2(0, 0)); - - h_scroll->set_anchor(MARGIN_RIGHT, ANCHOR_END); - h_scroll->set_anchor(MARGIN_TOP, ANCHOR_END); - h_scroll->set_anchor(MARGIN_BOTTOM, ANCHOR_END); - - h_scroll->set_begin(Point2(0, -hmin.y)); - h_scroll->set_end(Point2(-vmin.x, 0)); - - margin.y = hmin.y; - margin.x = vmin.x; - - Ref<StyleBox> tree_st = get_stylebox("bg", "Tree"); - int page = ((size_height - (int)margin.y - tree_st->get_margin(MARGIN_TOP)) / font_height); - v_scroll->set_page(page); -} - -void OutputStrings::_notification(int p_what) { - - switch (p_what) { - - case NOTIFICATION_DRAW: { - - if (following) { - - updating = true; - v_scroll->set_value(v_scroll->get_max() - v_scroll->get_page()); - updating = false; - } - - RID ci = get_canvas_item(); - Size2 size = get_size(); - - Ref<Font> font = get_font("font", "Tree"); - Ref<StyleBox> tree_st = get_stylebox("bg", "Tree"); - tree_st->draw(ci, Rect2(Point2(), size)); - Color color = get_color("font_color", "Tree"); - Ref<Texture> icon_error = get_icon("Error", "EditorIcons"); - Ref<Texture> icon_warning = get_icon("Warning", "EditorIcons"); - - //int lines = (size_height-(int)margin.y) / font_height; - Point2 ofs = tree_st->get_offset(); - - LineMap::Element *E = line_map.find(v_scroll->get_value()); - float h_ofs = (int)h_scroll->get_value(); - Point2 icon_ofs = Point2(0, (font_height - (int)icon_error->get_height()) / 2); - - FontDrawer drawer(font, Color(1, 1, 1)); - while (E && ofs.y < (size_height - (int)margin.y)) { - - String str = E->get().text; - Point2 line_ofs = ofs; - - switch (E->get().type) { - - case LINE_WARNING: { - icon_warning->draw(ci, line_ofs + icon_ofs); - - } break; - case LINE_ERROR: { - icon_error->draw(ci, line_ofs + icon_ofs); - } break; - case LINE_LINK: { - - } break; - default: { - } - } - - line_ofs.y += font->get_ascent(); - line_ofs.x += icon_error->get_width() + 4; - - for (int i = 0; i < str.length(); i++) { - if (line_ofs.x - h_ofs < 0) { - line_ofs.x += font->get_char_size(str[i], str[i + 1]).width; - } else if (line_ofs.x - h_ofs > size.width - margin.width) { - break; - } else { - line_ofs.x += font->draw_char(ci, Point2(line_ofs.x - h_ofs, line_ofs.y), str[i], str[i + 1], color); - } - } - - ofs.y += font_height; - E = E->next(); - } - - } break; - - case NOTIFICATION_ENTER_TREE: - case NOTIFICATION_RESIZED: { - - font_height = get_font("font", "Tree")->get_height(); - size_height = get_size().height; - update_scrollbars(); - } break; - } -} - -void OutputStrings::_hscroll_changed(float p_value) { - - if (updating) - return; - - update(); -} -void OutputStrings::_vscroll_changed(float p_value) { - - if (updating) - return; - //user changed scroll - following = (p_value + v_scroll->get_page()) >= v_scroll->get_max(); - update(); -} - -void OutputStrings::add_line(const String &p_text, const Variant &p_meta, const LineType p_type) { - - Vector<String> strings = p_text.split("\n"); - - for (int i = 0; i < strings.size(); i++) { - - if (strings[i].length() == 0) - continue; - - int last = line_map.empty() ? 0 : (line_map.back()->key() + 1); - - Line l; - l.text = strings[i]; - l.meta = p_meta; - l.type = p_type; - line_map.insert(last, l); - - updating = true; - v_scroll->set_max(last + 1); - v_scroll->set_min(line_map.front()->key()); - updating = false; - } - - while (line_map.size() > line_max_count) { - - line_map.erase(line_map.front()); - } - - update(); -} - -void OutputStrings::_bind_methods() { - - ClassDB::bind_method("_vscroll_changed", &OutputStrings::_vscroll_changed); - ClassDB::bind_method("_hscroll_changed", &OutputStrings::_hscroll_changed); -} - -OutputStrings::OutputStrings() { - - following = true; - updating = false; - line_max_count = 4096; - h_scroll = memnew(HScrollBar); - v_scroll = memnew(VScrollBar); - add_child(h_scroll); - add_child(v_scroll); - size_height = 1; - font_height = 1; - update_scrollbars(); - h_scroll->connect("value_changed", this, "_hscroll_changed"); - v_scroll->connect("value_changed", this, "_vscroll_changed"); -} diff --git a/editor/plugin_config_dialog.cpp b/editor/plugin_config_dialog.cpp index 23056d25c0..971e746509 100644 --- a/editor/plugin_config_dialog.cpp +++ b/editor/plugin_config_dialog.cpp @@ -131,7 +131,7 @@ void PluginConfigDialog::config(const String &p_config_path) { if (p_config_path.length()) { Ref<ConfigFile> cf = memnew(ConfigFile); Error err = cf->load(p_config_path); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot load config file from path '" + p_config_path + "'."); name_edit->set_text(cf->get_value("plugin", "name", "")); subfolder_edit->set_text(p_config_path.get_base_dir().get_basename().get_file()); diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp index 173079b6de..80353bab01 100644 --- a/editor/plugins/animation_player_editor_plugin.cpp +++ b/editor/plugins/animation_player_editor_plugin.cpp @@ -38,7 +38,7 @@ #include "editor/animation_track_editor.h" #include "editor/editor_settings.h" -// For onion skinning +// For onion skinning. #include "editor/plugins/canvas_item_editor_plugin.h" #include "editor/plugins/spatial_editor_plugin.h" #include "scene/main/viewport.h" @@ -122,7 +122,7 @@ void AnimationPlayerEditor::_notification(int p_what) { stop->set_icon(get_icon("Stop", "EditorIcons")); onion_toggle->set_icon(get_icon("Onion", "EditorIcons")); - onion_skinning->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + onion_skinning->set_icon(get_icon("GuiTabMenu", "EditorIcons")); pin->set_icon(get_icon("Pin", "EditorIcons")); @@ -304,6 +304,7 @@ void AnimationPlayerEditor::_animation_selected(int p_which) { AnimationPlayerEditor::singleton->get_track_editor()->update_keying(); EditorNode::get_singleton()->update_keying(); + _animation_key_editor_seek(timeline_position, false); } void AnimationPlayerEditor::_animation_new() { @@ -483,6 +484,8 @@ double AnimationPlayerEditor::_get_editor_step() const { if (track_editor->is_snap_enabled()) { const String current = player->get_assigned_animation(); const Ref<Animation> anim = player->get_animation(current); + ERR_FAIL_COND_V(!anim.is_valid(), 0.0); + // Use more precise snapping when holding Shift return Input::get_singleton()->is_key_pressed(KEY_SHIFT) ? anim->get_step() * 0.25 : anim->get_step(); } @@ -690,8 +693,10 @@ void AnimationPlayerEditor::set_state(const Dictionary &p_state) { if (p_state.has("animation")) { String anim = p_state["animation"]; - _select_anim_by_name(anim); - _animation_edit(); + if (!anim.empty() && player->has_animation(anim)) { + _select_anim_by_name(anim); + _animation_edit(); + } } } } @@ -734,8 +739,8 @@ void AnimationPlayerEditor::_dialog_action(String p_file) { ERR_FAIL_COND(!player); Ref<Resource> res = ResourceLoader::load(p_file, "Animation"); - ERR_FAIL_COND(res.is_null()); - ERR_FAIL_COND(!res->is_class("Animation")); + ERR_FAIL_COND_MSG(res.is_null(), "Cannot load Animation from file '" + p_file + "'."); + ERR_FAIL_COND_MSG(!res->is_class("Animation"), "Loaded resource from file '" + p_file + "' is not Animation."); if (p_file.find_last("/") != -1) { p_file = p_file.substr(p_file.find_last("/") + 1, p_file.length()); @@ -1070,14 +1075,20 @@ void AnimationPlayerEditor::_animation_key_editor_anim_len_changed(float p_len) void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_drag) { + timeline_position = p_pos; + if (!is_visible_in_tree()) return; + if (!player) return; if (player->is_playing()) return; + if (!player->has_animation(player->get_assigned_animation())) + return; + Ref<Animation> anim = player->get_animation(player->get_assigned_animation()); updating = true; @@ -1088,20 +1099,6 @@ void AnimationPlayerEditor::_animation_key_editor_seek(float p_pos, bool p_drag) EditorNode::get_singleton()->get_inspector()->refresh(); } -void AnimationPlayerEditor::_hide_anim_editors() { - - player = NULL; - hide(); - set_process(false); - - track_editor->set_animation(Ref<Animation>()); - track_editor->set_root(NULL); - track_editor->show_select_node_warning(true); -} - -void AnimationPlayerEditor::_animation_about_to_show_menu() { -} - void AnimationPlayerEditor::_animation_tool_menu(int p_option) { String current; @@ -1489,7 +1486,7 @@ void AnimationPlayerEditor::_prepare_onion_layers_2() { player->seek(cpos, false); player->restore_animated_values(values_backup); - // Restor state of main editors. + // Restore state of main editors. if (SpatialEditor::get_singleton()->is_visible()) { // 3D SpatialEditor::get_singleton()->set_state(spatial_edit_state); @@ -1519,7 +1516,7 @@ void AnimationPlayerEditor::_stop_onion_skinning() { _free_onion_layers(); - // Clean up the overlay + // Clean up the overlay. onion.can_overlay = false; plugin->update_overlays(); } @@ -1557,7 +1554,6 @@ void AnimationPlayerEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_list_changed"), &AnimationPlayerEditor::_list_changed); ClassDB::bind_method(D_METHOD("_animation_key_editor_seek"), &AnimationPlayerEditor::_animation_key_editor_seek); ClassDB::bind_method(D_METHOD("_animation_key_editor_anim_len_changed"), &AnimationPlayerEditor::_animation_key_editor_anim_len_changed); - ClassDB::bind_method(D_METHOD("_hide_anim_editors"), &AnimationPlayerEditor::_hide_anim_editors); ClassDB::bind_method(D_METHOD("_animation_duplicate"), &AnimationPlayerEditor::_animation_duplicate); ClassDB::bind_method(D_METHOD("_blend_editor_next_changed"), &AnimationPlayerEditor::_blend_editor_next_changed); ClassDB::bind_method(D_METHOD("_unhandled_key_input"), &AnimationPlayerEditor::_unhandled_key_input); @@ -1766,6 +1762,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay renaming = false; last_active = false; + timeline_position = 0; set_process_unhandled_key_input(true); @@ -1776,7 +1773,7 @@ AnimationPlayerEditor::AnimationPlayerEditor(EditorNode *p_editor, AnimationPlay _update_player(); - // Onion skinning + // Onion skinning. track_editor->connect("visibility_changed", this, "_editor_visibility_changed"); diff --git a/editor/plugins/animation_player_editor_plugin.h b/editor/plugins/animation_player_editor_plugin.h index 4ad30675ec..663ffd57f3 100644 --- a/editor/plugins/animation_player_editor_plugin.h +++ b/editor/plugins/animation_player_editor_plugin.h @@ -107,6 +107,7 @@ class AnimationPlayerEditor : public VBoxContainer { UndoRedo *undo_redo; Ref<Texture> autoplay_icon; bool last_active; + float timeline_position; EditorFileDialog *file; AcceptDialog *accept; @@ -130,9 +131,9 @@ class AnimationPlayerEditor : public VBoxContainer { AnimationTrackEditor *track_editor; - // Onion skinning + // Onion skinning. struct { - // Settings + // Settings. bool enabled; bool past; bool future; @@ -142,11 +143,11 @@ class AnimationPlayerEditor : public VBoxContainer { bool include_gizmos; int get_needed_capture_count() const { - // 'Differences only' needs a capture of the present + // 'Differences only' needs a capture of the present. return (past && future ? 2 * steps : steps) + (differences_only ? 1 : 0); } - // Rendering + // Rendering. int64_t last_frame; int can_overlay; Size2 capture_size; @@ -195,8 +196,6 @@ class AnimationPlayerEditor : public VBoxContainer { void _update_player(); void _blend_edited(); - void _hide_anim_editors(); - void _animation_player_changed(Object *p_pl); void _animation_key_editor_seek(float p_pos, bool p_drag); @@ -205,7 +204,6 @@ class AnimationPlayerEditor : public VBoxContainer { void _unhandled_key_input(const Ref<InputEvent> &p_ev); void _animation_tool_menu(int p_option); void _onion_skinning_menu(int p_option); - void _animation_about_to_show_menu(); void _editor_visibility_changed(); bool _are_onion_layers_valid(); diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp index bc22d9315e..ce400ad6dd 100644 --- a/editor/plugins/animation_state_machine_editor.cpp +++ b/editor/plugins/animation_state_machine_editor.cpp @@ -1117,15 +1117,17 @@ void AnimationNodeStateMachineEditor::_name_edited(const String &p_text) { undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); + name_edit->hide(); updating = false; state_machine_draw->update(); - - name_edit->hide(); } void AnimationNodeStateMachineEditor::_name_edited_focus_out() { + if (updating) + return; + _name_edited(name_edit->get_text()); } diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 3d161dc5b9..95767a96d8 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -32,8 +32,8 @@ #include "core/io/json.h" #include "core/version.h" -#include "editor_node.h" -#include "editor_settings.h" +#include "editor/editor_node.h" +#include "editor/editor_settings.h" void EditorAssetLibraryItem::configure(const String &p_title, int p_asset_id, const String &p_category, int p_category_id, const String &p_author, int p_author_id, const String &p_cost) { @@ -1137,9 +1137,12 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const initial_loading = false; - // The loading text only needs to be displayed before the first page is loaded + // The loading text only needs to be displayed before the first page is loaded. + // Therefore, we don't need to show it again. library_loading->hide(); + library_error->hide(); + if (asset_items) { memdelete(asset_items); } @@ -1187,6 +1190,11 @@ void EditorAssetLibrary::_http_request_completed(int p_status, int p_code, const asset_bottom_page = _make_pages(page, pages, page_len, total_items, result.size()); library_vb->add_child(asset_bottom_page); + if (result.empty()) { + library_error->set_text(vformat(TTR("No results for \"%s\"."), filter->get_text())); + library_error->show(); + } + for (int i = 0; i < result.size(); i++) { Dictionary r = result[i]; @@ -1453,6 +1461,11 @@ EditorAssetLibrary::EditorAssetLibrary(bool p_templates_only) { library_loading->set_align(Label::ALIGN_CENTER); library_vb->add_child(library_loading); + library_error = memnew(Label); + library_error->set_align(Label::ALIGN_CENTER); + library_error->hide(); + library_vb->add_child(library_error); + asset_top_page = memnew(HBoxContainer); library_vb->add_child(asset_top_page); diff --git a/editor/plugins/asset_library_editor_plugin.h b/editor/plugins/asset_library_editor_plugin.h index 7e934ac6cb..70ffbd9eed 100644 --- a/editor/plugins/asset_library_editor_plugin.h +++ b/editor/plugins/asset_library_editor_plugin.h @@ -31,24 +31,22 @@ #ifndef ASSET_LIBRARY_EDITOR_PLUGIN_H #define ASSET_LIBRARY_EDITOR_PLUGIN_H -#include "editor_plugin.h" +#include "editor/editor_asset_installer.h" +#include "editor/editor_plugin.h" +#include "editor/editor_plugin_settings.h" #include "scene/gui/box_container.h" #include "scene/gui/check_box.h" +#include "scene/gui/grid_container.h" #include "scene/gui/line_edit.h" #include "scene/gui/link_button.h" #include "scene/gui/option_button.h" #include "scene/gui/panel_container.h" #include "scene/gui/progress_bar.h" -#include "scene/gui/separator.h" -#include "scene/gui/tab_container.h" - -#include "editor_plugin_settings.h" -#include "scene/gui/grid_container.h" #include "scene/gui/rich_text_label.h" #include "scene/gui/scroll_container.h" +#include "scene/gui/separator.h" +#include "scene/gui/tab_container.h" #include "scene/gui/texture_button.h" - -#include "editor_asset_installer.h" #include "scene/main/http_request.h" class EditorAssetLibraryItem : public PanelContainer { @@ -186,6 +184,7 @@ class EditorAssetLibrary : public PanelContainer { ScrollContainer *library_scroll; VBoxContainer *library_vb; Label *library_loading; + Label *library_error; LineEdit *filter; OptionButton *categories; OptionButton *repository; diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index e4cd71fec0..d84a67dba1 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -67,13 +67,18 @@ class SnapDialog : public ConfirmationDialog { SpinBox *grid_offset_y; SpinBox *grid_step_x; SpinBox *grid_step_y; + SpinBox *primary_grid_steps; SpinBox *rotation_offset; SpinBox *rotation_step; + SpinBox *scale_step; public: SnapDialog() { - const int SPIN_BOX_GRID_RANGE = 256; + const int SPIN_BOX_GRID_RANGE = 16384; const int SPIN_BOX_ROTATION_RANGE = 360; + const float SPIN_BOX_SCALE_MIN = 0.01f; + const float SPIN_BOX_SCALE_MAX = 100; + Label *label; VBoxContainer *container; GridContainer *child_container; @@ -96,6 +101,8 @@ public: grid_offset_x = memnew(SpinBox); grid_offset_x->set_min(-SPIN_BOX_GRID_RANGE); grid_offset_x->set_max(SPIN_BOX_GRID_RANGE); + grid_offset_x->set_allow_lesser(true); + grid_offset_x->set_allow_greater(true); grid_offset_x->set_suffix("px"); grid_offset_x->set_h_size_flags(SIZE_EXPAND_FILL); child_container->add_child(grid_offset_x); @@ -103,6 +110,8 @@ public: grid_offset_y = memnew(SpinBox); grid_offset_y->set_min(-SPIN_BOX_GRID_RANGE); grid_offset_y->set_max(SPIN_BOX_GRID_RANGE); + grid_offset_y->set_allow_lesser(true); + grid_offset_y->set_allow_greater(true); grid_offset_y->set_suffix("px"); grid_offset_y->set_h_size_flags(SIZE_EXPAND_FILL); child_container->add_child(grid_offset_y); @@ -115,6 +124,7 @@ public: grid_step_x = memnew(SpinBox); grid_step_x->set_min(0.01); grid_step_x->set_max(SPIN_BOX_GRID_RANGE); + grid_step_x->set_allow_greater(true); grid_step_x->set_suffix("px"); grid_step_x->set_h_size_flags(SIZE_EXPAND_FILL); child_container->add_child(grid_step_x); @@ -122,12 +132,33 @@ public: grid_step_y = memnew(SpinBox); grid_step_y->set_min(0.01); grid_step_y->set_max(SPIN_BOX_GRID_RANGE); + grid_step_y->set_allow_greater(true); grid_step_y->set_suffix("px"); grid_step_y->set_h_size_flags(SIZE_EXPAND_FILL); child_container->add_child(grid_step_y); + child_container = memnew(GridContainer); + child_container->set_columns(2); + container->add_child(child_container); + + label = memnew(Label); + label->set_text(TTR("Primary Line Every:")); + label->set_h_size_flags(SIZE_EXPAND_FILL); + child_container->add_child(label); + + primary_grid_steps = memnew(SpinBox); + primary_grid_steps->set_min(0); + primary_grid_steps->set_step(1); + primary_grid_steps->set_max(100); + primary_grid_steps->set_allow_greater(true); + primary_grid_steps->set_suffix(TTR("steps")); + primary_grid_steps->set_h_size_flags(SIZE_EXPAND_FILL); + child_container->add_child(primary_grid_steps); + container->add_child(memnew(HSeparator)); + // We need to create another GridContainer with the same column count, + // so we can put an HSeparator above child_container = memnew(GridContainer); child_container->set_columns(2); container->add_child(child_container); @@ -155,22 +186,44 @@ public: rotation_step->set_suffix("deg"); rotation_step->set_h_size_flags(SIZE_EXPAND_FILL); child_container->add_child(rotation_step); + + container->add_child(memnew(HSeparator)); + + child_container = memnew(GridContainer); + child_container->set_columns(2); + container->add_child(child_container); + label = memnew(Label); + label->set_text(TTR("Scale Step:")); + child_container->add_child(label); + label->set_h_size_flags(SIZE_EXPAND_FILL); + + scale_step = memnew(SpinBox); + scale_step->set_min(SPIN_BOX_SCALE_MIN); + scale_step->set_max(SPIN_BOX_SCALE_MAX); + scale_step->set_allow_greater(true); + scale_step->set_h_size_flags(SIZE_EXPAND_FILL); + scale_step->set_step(0.01f); + child_container->add_child(scale_step); } - void set_fields(const Point2 p_grid_offset, const Point2 p_grid_step, const float p_rotation_offset, const float p_rotation_step) { + void set_fields(const Point2 p_grid_offset, const Point2 p_grid_step, const int p_primary_grid_steps, const float p_rotation_offset, const float p_rotation_step, const float p_scale_step) { grid_offset_x->set_value(p_grid_offset.x); grid_offset_y->set_value(p_grid_offset.y); grid_step_x->set_value(p_grid_step.x); grid_step_y->set_value(p_grid_step.y); + primary_grid_steps->set_value(p_primary_grid_steps); rotation_offset->set_value(p_rotation_offset * (180 / Math_PI)); rotation_step->set_value(p_rotation_step * (180 / Math_PI)); + scale_step->set_value(p_scale_step); } - void get_fields(Point2 &p_grid_offset, Point2 &p_grid_step, float &p_rotation_offset, float &p_rotation_step) { + void get_fields(Point2 &p_grid_offset, Point2 &p_grid_step, int &p_primary_grid_steps, float &p_rotation_offset, float &p_rotation_step, float &p_scale_step) { p_grid_offset = Point2(grid_offset_x->get_value(), grid_offset_y->get_value()); p_grid_step = Point2(grid_step_x->get_value(), grid_step_y->get_value()); + p_primary_grid_steps = int(primary_grid_steps->get_value()); p_rotation_offset = rotation_offset->get_value() / (180 / Math_PI); p_rotation_step = rotation_step->get_value() / (180 / Math_PI); + p_scale_step = scale_step->get_value(); } }; @@ -278,7 +331,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig snap_target[0] = SNAP_TARGET_NONE; snap_target[1] = SNAP_TARGET_NONE; - bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); + bool is_snap_active = smart_snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); // Smart snap using the canvas position Vector2 output = p_target; @@ -378,7 +431,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig } } - if (((is_snap_active && snap_grid && (p_modes & SNAP_GRID)) || (p_forced_modes & SNAP_GRID)) && fmod(rotation, (real_t)360.0) == 0.0) { + if (((grid_snap_active && (p_modes & SNAP_GRID)) || (p_forced_modes & SNAP_GRID)) && fmod(rotation, (real_t)360.0) == 0.0) { // Grid Point2 offset = grid_offset; if (snap_relative) { @@ -406,7 +459,7 @@ Point2 CanvasItemEditor::snap_point(Point2 p_target, unsigned int p_modes, unsig } float CanvasItemEditor::snap_angle(float p_target, float p_start) const { - return (((snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL)) && snap_rotation_step != 0) ? Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset : p_target; + return (((smart_snap_active || snap_rotation) ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL)) && snap_rotation_step != 0) ? Math::stepify(p_target - snap_rotation_offset, snap_rotation_step) + snap_rotation_offset : p_target; } void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { @@ -421,11 +474,11 @@ void CanvasItemEditor::_unhandled_key_input(const Ref<InputEvent> &p_ev) { } if (k->is_pressed() && !k->get_control() && !k->is_echo()) { - if ((snap_grid || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { + if ((grid_snap_active || show_grid) && multiply_grid_step_shortcut.is_valid() && multiply_grid_step_shortcut->is_shortcut(p_ev)) { // Multiply the grid size grid_step_multiplier = MIN(grid_step_multiplier + 1, 12); viewport->update(); - } else if ((snap_grid || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { + } else if ((grid_snap_active || show_grid) && divide_grid_step_shortcut.is_valid() && divide_grid_step_shortcut->is_shortcut(p_ev)) { // Divide the grid size Point2 new_grid_step = grid_step * Math::pow(2.0, grid_step_multiplier - 1); if (new_grid_step.x >= 1.0 && new_grid_step.y >= 1.0) @@ -892,7 +945,7 @@ void CanvasItemEditor::_commit_canvas_item_state(List<CanvasItem *> p_canvas_ite } void CanvasItemEditor::_snap_changed() { - ((SnapDialog *)snap_dialog)->get_fields(grid_offset, grid_step, snap_rotation_offset, snap_rotation_step); + ((SnapDialog *)snap_dialog)->get_fields(grid_offset, grid_step, primary_grid_steps, snap_rotation_offset, snap_rotation_step, snap_scale_step); grid_step_multiplier = 0; viewport->update(); } @@ -1174,8 +1227,8 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo } if (panning) { - if (!b->is_pressed()) { - // Stop panning the viewport (for any mouse button press) + if (!b->is_pressed() && (pan_on_scroll || (b->get_button_index() != BUTTON_WHEEL_DOWN && b->get_button_index() != BUTTON_WHEEL_UP))) { + // Stop panning the viewport (for any mouse button press except zooming) panning = false; } } @@ -1191,7 +1244,7 @@ bool CanvasItemEditor::_gui_input_zoom_or_pan(const Ref<InputEvent> &p_event, bo //Pan the viewport panning = true; } - } else if (panning) { + } else { if (!k->is_pressed()) { // Stop panning the viewport (for any mouse button press) panning = false; @@ -1262,6 +1315,7 @@ bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) { // Start dragging if we still have nodes if (drag_selection.size() > 0) { + _save_canvas_item_state(drag_selection); drag_from = transform.affine_inverse().xform((b.is_valid()) ? b->get_position() : viewport->get_local_mouse_position()); Vector2 new_pos; if (drag_selection.size() == 1) { @@ -1275,7 +1329,6 @@ bool CanvasItemEditor::_gui_input_pivot(const Ref<InputEvent> &p_event) { } drag_type = DRAG_PIVOT; - _save_canvas_item_state(drag_selection); } return true; } @@ -1749,6 +1802,9 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { if (key_auto_insert_button->is_pressed()) { _insert_animation_keys(false, false, true, true); } + + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; drag_type = DRAG_NONE; viewport->update(); return true; @@ -1757,6 +1813,8 @@ bool CanvasItemEditor::_gui_input_resize(const Ref<InputEvent> &p_event) { // Cancel a drag if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { _restore_canvas_item_state(drag_selection); + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; drag_type = DRAG_NONE; viewport->update(); return true; @@ -1780,7 +1838,7 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { if (_is_node_movable(canvas_item)) { Transform2D xform = transform * canvas_item->get_global_transform_with_canvas(); - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; drag_type = DRAG_SCALE_BOTH; @@ -1814,10 +1872,11 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { drag_to = transform.affine_inverse().xform(m->get_position()); Transform2D parent_xform = canvas_item->get_global_transform_with_canvas() * canvas_item->get_transform().affine_inverse(); - Transform2D unscaled_transform = (transform * parent_xform * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D unscaled_transform = (transform * parent_xform * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = (viewport->get_transform() * unscaled_transform).affine_inverse() * transform; bool uniform = m->get_shift(); + bool is_ctrl = Input::get_singleton()->is_key_pressed(KEY_CONTROL); Point2 drag_from_local = simple_xform.xform(drag_from); Point2 drag_to_local = simple_xform.xform(drag_to); @@ -1848,6 +1907,12 @@ bool CanvasItemEditor::_gui_input_scale(const Ref<InputEvent> &p_event) { } } } + + if (snap_scale && !is_ctrl) { + scale.x = roundf(scale.x / snap_scale_step) * snap_scale_step; + scale.y = roundf(scale.y / snap_scale_step) * snap_scale_step; + } + canvas_item->call("set_scale", scale); return true; } @@ -1967,6 +2032,11 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { if (key_auto_insert_button->is_pressed()) { _insert_animation_keys(true, false, false, true); } + + //Make sure smart snapping lines disappear. + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; + drag_type = DRAG_NONE; viewport->update(); return true; @@ -1975,6 +2045,8 @@ bool CanvasItemEditor::_gui_input_move(const Ref<InputEvent> &p_event) { // Cancel a drag if (b.is_valid() && b->get_button_index() == BUTTON_RIGHT && b->is_pressed()) { _restore_canvas_item_state(drag_selection, true); + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; drag_type = DRAG_NONE; viewport->update(); return true; @@ -2256,7 +2328,7 @@ bool CanvasItemEditor::_gui_input_ruler_tool(const Ref<InputEvent> &p_event) { Point2 previous_origin = ruler_tool_origin; if (!ruler_tool_active) - ruler_tool_origin = snap_point(viewport->get_local_mouse_position() / zoom + view_offset) * zoom; + ruler_tool_origin = snap_point(viewport->get_local_mouse_position() / zoom + view_offset); if (b.is_valid() && b->get_button_index() == BUTTON_LEFT) { if (b->is_pressed()) { @@ -2269,9 +2341,7 @@ bool CanvasItemEditor::_gui_input_ruler_tool(const Ref<InputEvent> &p_event) { return true; } - bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); - - if (m.is_valid() && (ruler_tool_active || (is_snap_active && previous_origin != ruler_tool_origin))) { + if (m.is_valid() && (ruler_tool_active || (grid_snap_active && previous_origin != ruler_tool_origin))) { viewport->update(); return true; @@ -2540,11 +2610,10 @@ void CanvasItemEditor::_draw_rulers() { Color font_color = get_color("font_color", "Editor"); font_color.a = 0.8; Ref<Font> font = get_font("rulers", "EditorFonts"); - bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); // The rule transform Transform2D ruler_transform = Transform2D(); - if (show_grid || (is_snap_active && snap_grid)) { + if (show_grid || grid_snap_active) { List<CanvasItem *> selection = _get_edited_canvas_items(); if (snap_relative && selection.size() > 0) { ruler_transform.translate(_get_encompassing_rect_from_list(selection).position); @@ -2624,41 +2693,72 @@ void CanvasItemEditor::_draw_rulers() { } void CanvasItemEditor::_draw_grid() { - if (show_grid) { - //Draw the grid - Size2 s = viewport->get_size(); - int last_cell = 0; - Transform2D xform = transform.affine_inverse(); + if (show_grid || grid_snap_active) { + // Draw the grid Vector2 real_grid_offset; - List<CanvasItem *> selection = _get_edited_canvas_items(); + const List<CanvasItem *> selection = _get_edited_canvas_items(); + if (snap_relative && selection.size() > 0) { - Vector2 topleft = _get_encompassing_rect_from_list(selection).position; + const Vector2 topleft = _get_encompassing_rect_from_list(selection).position; real_grid_offset.x = fmod(topleft.x, grid_step.x * (real_t)Math::pow(2.0, grid_step_multiplier)); real_grid_offset.y = fmod(topleft.y, grid_step.y * (real_t)Math::pow(2.0, grid_step_multiplier)); } else { real_grid_offset = grid_offset; } - const Color grid_color = EditorSettings::get_singleton()->get("editors/2d/grid_color"); + // Draw a "primary" line every several lines to make measurements easier. + // The step is configurable in the Configure Snap dialog. + const Color secondary_grid_color = EditorSettings::get_singleton()->get("editors/2d/grid_color"); + const Color primary_grid_color = + Color(secondary_grid_color.r, secondary_grid_color.g, secondary_grid_color.b, secondary_grid_color.a * 2.5); + + const Size2 viewport_size = viewport->get_size(); + const Transform2D xform = transform.affine_inverse(); + int last_cell = 0; + if (grid_step.x != 0) { - for (int i = 0; i < s.width; i++) { - int cell = Math::fast_ftoi(Math::floor((xform.xform(Vector2(i, 0)).x - real_grid_offset.x) / (grid_step.x * Math::pow(2.0, grid_step_multiplier)))); - if (i == 0) + for (int i = 0; i < viewport_size.width; i++) { + const int cell = + Math::fast_ftoi(Math::floor((xform.xform(Vector2(i, 0)).x - real_grid_offset.x) / (grid_step.x * Math::pow(2.0, grid_step_multiplier)))); + + if (i == 0) { last_cell = cell; - if (last_cell != cell) - viewport->draw_line(Point2(i, 0), Point2(i, s.height), grid_color, Math::round(EDSCALE)); + } + + if (last_cell != cell) { + Color grid_color; + if (primary_grid_steps == 0) { + grid_color = secondary_grid_color; + } else { + grid_color = cell % primary_grid_steps == 0 ? primary_grid_color : secondary_grid_color; + } + + viewport->draw_line(Point2(i, 0), Point2(i, viewport_size.height), grid_color, Math::round(EDSCALE)); + } last_cell = cell; } } if (grid_step.y != 0) { - for (int i = 0; i < s.height; i++) { - int cell = Math::fast_ftoi(Math::floor((xform.xform(Vector2(0, i)).y - real_grid_offset.y) / (grid_step.y * Math::pow(2.0, grid_step_multiplier)))); - if (i == 0) + for (int i = 0; i < viewport_size.height; i++) { + const int cell = + Math::fast_ftoi(Math::floor((xform.xform(Vector2(0, i)).y - real_grid_offset.y) / (grid_step.y * Math::pow(2.0, grid_step_multiplier)))); + + if (i == 0) { last_cell = cell; - if (last_cell != cell) - viewport->draw_line(Point2(0, i), Point2(s.width, i), grid_color, Math::round(EDSCALE)); + } + + if (last_cell != cell) { + Color grid_color; + if (primary_grid_steps == 0) { + grid_color = secondary_grid_color; + } else { + grid_color = cell % primary_grid_steps == 0 ? primary_grid_color : secondary_grid_color; + } + + viewport->draw_line(Point2(0, i), Point2(viewport_size.width, i), grid_color, Math::round(EDSCALE)); + } last_cell = cell; } } @@ -2670,19 +2770,17 @@ void CanvasItemEditor::_draw_ruler_tool() { if (tool != TOOL_RULER) return; - bool is_snap_active = snap_active ^ Input::get_singleton()->is_key_pressed(KEY_CONTROL); - if (ruler_tool_active) { Color ruler_primary_color = get_color("accent_color", "Editor"); Color ruler_secondary_color = ruler_primary_color; ruler_secondary_color.a = 0.5; - Point2 begin = ruler_tool_origin - view_offset * zoom; + Point2 begin = (ruler_tool_origin - view_offset) * zoom; Point2 end = snap_point(viewport->get_local_mouse_position() / zoom + view_offset) * zoom - view_offset * zoom; Point2 corner = Point2(begin.x, end.y); Vector2 length_vector = (begin - end).abs() / zoom; - bool draw_secondary_lines = (begin.y != corner.y && end.x != corner.x); + bool draw_secondary_lines = !(Math::is_equal_approx(begin.y, corner.y) || Math::is_equal_approx(end.x, corner.x)); viewport->draw_line(begin, end, ruler_primary_color, Math::round(EDSCALE * 3), true); if (draw_secondary_lines) { @@ -2696,6 +2794,7 @@ void CanvasItemEditor::_draw_ruler_tool() { font_secondary_color.a = 0.5; float text_height = font->get_height(); const float text_width = 76; + const float angle_text_width = 54; Point2 text_pos = (begin + end) / 2 - Vector2(text_width / 2, text_height / 2); text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); @@ -2703,17 +2802,71 @@ void CanvasItemEditor::_draw_ruler_tool() { viewport->draw_string(font, text_pos, vformat("%.2f px", length_vector.length()), font_color); if (draw_secondary_lines) { + const float horizontal_angle_rad = atan2(length_vector.y, length_vector.x); + const float vertical_angle_rad = Math_PI / 2.0 - horizontal_angle_rad; + const int horizontal_angle = round(180 * horizontal_angle_rad / Math_PI); + const int vertical_angle = round(180 * vertical_angle_rad / Math_PI); Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.y), font_secondary_color); + Point2 v_angle_text_pos = Point2(); + v_angle_text_pos.x = CLAMP(begin.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); + v_angle_text_pos.y = begin.y < end.y ? MIN(text_pos2.y - 2 * text_height, begin.y - text_height * 0.5) : MAX(text_pos2.y + text_height * 3, begin.y + text_height * 1.5); + viewport->draw_string(font, v_angle_text_pos, vformat("%d deg", vertical_angle), font_secondary_color); + text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y - text_height / 2) : MAX(text_pos.y + text_height * 2, end.y - text_height / 2); viewport->draw_string(font, text_pos2, vformat("%.2f px", length_vector.x), font_secondary_color); + + Point2 h_angle_text_pos = Point2(); + h_angle_text_pos.x = CLAMP(end.x - angle_text_width / 2, angle_text_width / 2, viewport->get_rect().size.x - angle_text_width); + if (begin.y < end.y) { + h_angle_text_pos.y = end.y + text_height * 1.5; + if (ABS(text_pos2.x - h_angle_text_pos.x) < text_width) { + int height_multiplier = 1.5 + (int)grid_snap_active; + h_angle_text_pos.y = MAX(text_pos.y + height_multiplier * text_height, MAX(end.y + text_height * 1.5, text_pos2.y + height_multiplier * text_height)); + } + } else { + h_angle_text_pos.y = end.y - text_height * 0.5; + if (ABS(text_pos2.x - h_angle_text_pos.x) < text_width) { + int height_multiplier = 1 + (int)grid_snap_active; + h_angle_text_pos.y = MIN(text_pos.y - height_multiplier * text_height, MIN(end.y - text_height * 0.5, text_pos2.y - height_multiplier * text_height)); + } + } + viewport->draw_string(font, h_angle_text_pos, vformat("%d deg", horizontal_angle), font_secondary_color); + + // Angle arcs + int arc_point_count = 8; + float arc_radius_max_length_percent = 0.1; + float ruler_length = length_vector.length() * zoom; + float arc_max_radius = 50.0; + float arc_line_width = 2.0; + + const Vector2 end_to_begin = (end - begin); + + float arc_1_start_angle = + end_to_begin.x < 0 ? + (end_to_begin.y < 0 ? 3.0 * Math_PI / 2.0 - vertical_angle_rad : Math_PI / 2.0) : + (end_to_begin.y < 0 ? 3.0 * Math_PI / 2.0 : Math_PI / 2.0 - vertical_angle_rad); + float arc_1_end_angle = arc_1_start_angle + vertical_angle_rad; + // Constrain arc to triangle height & max size + float arc_1_radius = MIN(MIN(arc_radius_max_length_percent * ruler_length, ABS(end_to_begin.y)), arc_max_radius); + + float arc_2_start_angle = + end_to_begin.x < 0 ? + (end_to_begin.y < 0 ? 0.0 : -horizontal_angle_rad) : + (end_to_begin.y < 0 ? Math_PI - horizontal_angle_rad : Math_PI); + float arc_2_end_angle = arc_2_start_angle + horizontal_angle_rad; + // Constrain arc to triangle width & max size + float arc_2_radius = MIN(MIN(arc_radius_max_length_percent * ruler_length, ABS(end_to_begin.x)), arc_max_radius); + + viewport->draw_arc(begin, arc_1_radius, arc_1_start_angle, arc_1_end_angle, arc_point_count, ruler_primary_color, Math::round(EDSCALE * arc_line_width)); + viewport->draw_arc(end, arc_2_radius, arc_2_start_angle, arc_2_end_angle, arc_point_count, ruler_primary_color, Math::round(EDSCALE * arc_line_width)); } - if (is_snap_active) { + if (grid_snap_active) { text_pos = (begin + end) / 2 + Vector2(-text_width / 2, text_height / 2); text_pos.x = CLAMP(text_pos.x, text_width / 2, viewport->get_rect().size.x - text_width * 1.5); @@ -2724,20 +2877,20 @@ void CanvasItemEditor::_draw_ruler_tool() { Point2 text_pos2 = text_pos; text_pos2.x = begin.x < text_pos.x ? MIN(text_pos.x - text_width, begin.x - text_width / 2) : MAX(text_pos.x + text_width, begin.x - text_width / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", (int)(length_vector.y / grid_step.y)), font_secondary_color); + viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.y / grid_step.y)), font_secondary_color); text_pos2 = text_pos; text_pos2.y = end.y < text_pos.y ? MIN(text_pos.y - text_height * 2, end.y + text_height / 2) : MAX(text_pos.y + text_height * 2, end.y + text_height / 2); - viewport->draw_string(font, text_pos2, vformat("%d units", (int)(length_vector.x / grid_step.x)), font_secondary_color); + viewport->draw_string(font, text_pos2, vformat("%d units", roundf(length_vector.x / grid_step.x)), font_secondary_color); } else { viewport->draw_string(font, text_pos, vformat("%d units", roundf((length_vector / grid_step).length())), font_color); } } } else { - if (is_snap_active) { + if (grid_snap_active) { Ref<Texture> position_icon = get_icon("EditorPosition", "EditorIcons"); - viewport->draw_texture(get_icon("EditorPosition", "EditorIcons"), ruler_tool_origin - view_offset * zoom - position_icon->get_size() / 2); + viewport->draw_texture(get_icon("EditorPosition", "EditorIcons"), (ruler_tool_origin - view_offset) * zoom - position_icon->get_size() / 2); } } } @@ -3006,7 +3159,7 @@ void CanvasItemEditor::_draw_selection() { } } else { - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; viewport->draw_set_transform_matrix(simple_xform); viewport->draw_texture(position_icon, -(position_icon->get_size() / 2)); @@ -3018,7 +3171,7 @@ void CanvasItemEditor::_draw_selection() { if (canvas_item->_edit_use_pivot()) { // Draw the node's pivot - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position() + canvas_item->_edit_get_pivot())).orthonormalized(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; viewport->draw_set_transform_matrix(simple_xform); @@ -3063,7 +3216,7 @@ void CanvasItemEditor::_draw_selection() { bool is_alt = Input::get_singleton()->is_key_pressed(KEY_ALT); if ((is_alt && is_ctrl) || tool == TOOL_SCALE || drag_type == DRAG_SCALE_X || drag_type == DRAG_SCALE_Y) { if (_is_node_movable(canvas_item)) { - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; Size2 scale_factor = Size2(SCALE_HANDLE_DISTANCE, SCALE_HANDLE_DISTANCE); @@ -3084,14 +3237,12 @@ void CanvasItemEditor::_draw_selection() { viewport->draw_set_transform_matrix(simple_xform); Rect2 x_handle_rect = Rect2(scale_factor.x * EDSCALE, -5 * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - Color x_axis_color(1.0, 0.4, 0.4, 0.6); - viewport->draw_rect(x_handle_rect, x_axis_color); - viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), x_axis_color, Math::round(EDSCALE), true); + viewport->draw_rect(x_handle_rect, get_color("axis_x_color", "Editor")); + viewport->draw_line(Point2(), Point2(scale_factor.x * EDSCALE, 0), get_color("axis_x_color", "Editor"), Math::round(EDSCALE), true); Rect2 y_handle_rect = Rect2(-5 * EDSCALE, -(scale_factor.y + 10) * EDSCALE, 10 * EDSCALE, 10 * EDSCALE); - Color y_axis_color(0.4, 1.0, 0.4, 0.6); - viewport->draw_rect(y_handle_rect, y_axis_color); - viewport->draw_line(Point2(), Point2(0, -scale_factor.y * EDSCALE), y_axis_color, Math::round(EDSCALE), true); + viewport->draw_rect(y_handle_rect, get_color("axis_y_color", "Editor")); + viewport->draw_line(Point2(), Point2(0, -scale_factor.y * EDSCALE), get_color("axis_y_color", "Editor"), Math::round(EDSCALE), true); viewport->draw_set_transform_matrix(viewport->get_transform()); } @@ -3171,11 +3322,8 @@ void CanvasItemEditor::_draw_axis() { if (show_origin) { - Color x_axis_color(1.0, 0.4, 0.4, 0.6); - Color y_axis_color(0.4, 1.0, 0.4, 0.6); - - _draw_straight_line(Point2(), Point2(1, 0), x_axis_color); - _draw_straight_line(Point2(), Point2(0, 1), y_axis_color); + _draw_straight_line(Point2(), Point2(1, 0), get_color("axis_x_color", "Editor") * Color(1, 1, 1, 0.75)); + _draw_straight_line(Point2(), Point2(0, 1), get_color("axis_y_color", "Editor") * Color(1, 1, 1, 0.75)); } if (show_viewport) { @@ -3287,7 +3435,7 @@ void CanvasItemEditor::_draw_invisible_nodes_positions(Node *p_node, const Trans // Draw the node's position Ref<Texture> position_icon = get_icon("EditorPositionUnselected", "EditorIcons"); - Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * Transform2D(canvas_item->_edit_get_rotation(), canvas_item->_edit_get_position())).orthonormalized(); + Transform2D unscaled_transform = (xform * canvas_item->get_transform().affine_inverse() * canvas_item->_edit_get_transform()).orthonormalized(); Transform2D simple_xform = viewport->get_transform() * unscaled_transform; viewport->draw_set_transform_matrix(simple_xform); viewport->draw_texture(position_icon, -position_icon->get_size() / 2, Color(1.0, 1.0, 1.0, 0.5)); @@ -3659,8 +3807,9 @@ void CanvasItemEditor::_notification(int p_what) { move_button->set_icon(get_icon("ToolMove", "EditorIcons")); scale_button->set_icon(get_icon("ToolScale", "EditorIcons")); rotate_button->set_icon(get_icon("ToolRotate", "EditorIcons")); - snap_button->set_icon(get_icon("Snap", "EditorIcons")); - snap_config_menu->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + smart_snap_button->set_icon(get_icon("Snap", "EditorIcons")); + grid_snap_button->set_icon(get_icon("SnapGrid", "EditorIcons")); + snap_config_menu->set_icon(get_icon("GuiTabMenu", "EditorIcons")); skeleton_menu->set_icon(get_icon("Bone", "EditorIcons")); pan_button->set_icon(get_icon("ToolPan", "EditorIcons")); ruler_button->set_icon(get_icon("Ruler", "EditorIcons")); @@ -3678,7 +3827,6 @@ void CanvasItemEditor::_notification(int p_what) { key_auto_insert_button->set_icon(get_icon("AutoKey", "EditorIcons")); zoom_minus->set_icon(get_icon("ZoomLess", "EditorIcons")); - zoom_reset->set_icon(get_icon("ZoomReset", "EditorIcons")); zoom_plus->set_icon(get_icon("ZoomMore", "EditorIcons")); presets_menu->set_icon(get_icon("ControlLayout", "EditorIcons")); @@ -4036,9 +4184,22 @@ void CanvasItemEditor::_zoom_on_position(float p_zoom, Point2 p_position) { view_offset.x = Math::round(view_offset.x + ofs.x); view_offset.y = Math::round(view_offset.y + ofs.y); + _update_zoom_label(); update_viewport(); } +void CanvasItemEditor::_update_zoom_label() { + String zoom_text; + if (zoom >= 10) { + // Don't show a decimal when the zoom level is higher than 1000 % + zoom_text = rtos(Math::round(zoom * 100)) + " %"; + } else { + zoom_text = rtos(Math::stepify(zoom * 100, 0.1)) + " %"; + } + + zoom_reset->set_text(zoom_text); +} + void CanvasItemEditor::_button_zoom_minus() { _zoom_on_position(zoom / Math_SQRT2, viewport_scrollable->get_size() / 2.0); } @@ -4051,8 +4212,13 @@ void CanvasItemEditor::_button_zoom_plus() { _zoom_on_position(zoom * Math_SQRT2, viewport_scrollable->get_size() / 2.0); } -void CanvasItemEditor::_button_toggle_snap(bool p_status) { - snap_active = p_status; +void CanvasItemEditor::_button_toggle_smart_snap(bool p_status) { + smart_snap_active = p_status; + viewport->update(); +} + +void CanvasItemEditor::_button_toggle_grid_snap(bool p_status) { + grid_snap_active = p_status; viewport->update(); } @@ -4211,16 +4377,16 @@ void CanvasItemEditor::_popup_callback(int p_op) { int idx = smartsnap_config_popup->get_item_index(SNAP_USE_GUIDES); smartsnap_config_popup->set_item_checked(idx, snap_guides); } break; - case SNAP_USE_GRID: { - snap_grid = !snap_grid; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_GRID); - snap_config_menu->get_popup()->set_item_checked(idx, snap_grid); - } break; case SNAP_USE_ROTATION: { snap_rotation = !snap_rotation; int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_ROTATION); snap_config_menu->get_popup()->set_item_checked(idx, snap_rotation); } break; + case SNAP_USE_SCALE: { + snap_scale = !snap_scale; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_SCALE); + snap_config_menu->get_popup()->set_item_checked(idx, snap_scale); + } break; case SNAP_RELATIVE: { snap_relative = !snap_relative; int idx = snap_config_menu->get_popup()->get_item_index(SNAP_RELATIVE); @@ -4233,8 +4399,8 @@ void CanvasItemEditor::_popup_callback(int p_op) { snap_config_menu->get_popup()->set_item_checked(idx, snap_pixel); } break; case SNAP_CONFIGURE: { - ((SnapDialog *)snap_dialog)->set_fields(grid_offset, grid_step, snap_rotation_offset, snap_rotation_step); - snap_dialog->popup_centered(Size2(220, 160)); + ((SnapDialog *)snap_dialog)->set_fields(grid_offset, grid_step, primary_grid_steps, snap_rotation_offset, snap_rotation_step, snap_scale_step); + snap_dialog->popup_centered(Size2(220, 160) * EDSCALE); } break; case SKELETON_SHOW_BONES: { skeleton_show_bones = !skeleton_show_bones; @@ -4747,7 +4913,8 @@ void CanvasItemEditor::_bind_methods() { ClassDB::bind_method("_button_zoom_minus", &CanvasItemEditor::_button_zoom_minus); ClassDB::bind_method("_button_zoom_reset", &CanvasItemEditor::_button_zoom_reset); ClassDB::bind_method("_button_zoom_plus", &CanvasItemEditor::_button_zoom_plus); - ClassDB::bind_method("_button_toggle_snap", &CanvasItemEditor::_button_toggle_snap); + ClassDB::bind_method("_button_toggle_smart_snap", &CanvasItemEditor::_button_toggle_smart_snap); + ClassDB::bind_method("_button_toggle_grid_snap", &CanvasItemEditor::_button_toggle_grid_snap); ClassDB::bind_method("_button_toggle_anchor_mode", &CanvasItemEditor::_button_toggle_anchor_mode); ClassDB::bind_method("_update_scroll", &CanvasItemEditor::_update_scroll); ClassDB::bind_method("_update_scrollbars", &CanvasItemEditor::_update_scrollbars); @@ -4780,15 +4947,17 @@ Dictionary CanvasItemEditor::get_state() const { state["ofs"] = view_offset; state["grid_offset"] = grid_offset; state["grid_step"] = grid_step; + state["primary_grid_steps"] = primary_grid_steps; state["snap_rotation_offset"] = snap_rotation_offset; state["snap_rotation_step"] = snap_rotation_step; - state["snap_active"] = snap_active; + state["snap_scale_step"] = snap_scale_step; + state["smart_snap_active"] = smart_snap_active; + state["grid_snap_active"] = grid_snap_active; state["snap_node_parent"] = snap_node_parent; state["snap_node_anchors"] = snap_node_anchors; state["snap_node_sides"] = snap_node_sides; state["snap_node_center"] = snap_node_center; state["snap_other_nodes"] = snap_other_nodes; - state["snap_grid"] = snap_grid; state["snap_guides"] = snap_guides; state["show_grid"] = show_grid; state["show_origin"] = show_origin; @@ -4799,6 +4968,7 @@ Dictionary CanvasItemEditor::get_state() const { state["show_zoom_control"] = zoom_hb->is_visible(); state["show_edit_locks"] = show_edit_locks; state["snap_rotation"] = snap_rotation; + state["snap_scale"] = snap_scale; state["snap_relative"] = snap_relative; state["snap_pixel"] = snap_pixel; state["skeleton_show_bones"] = skeleton_show_bones; @@ -4811,6 +4981,7 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { Dictionary state = p_state; if (state.has("zoom")) { zoom = p_state["zoom"]; + _update_zoom_label(); } if (state.has("ofs")) { @@ -4827,6 +4998,10 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { grid_step = state["grid_step"]; } + if (state.has("primary_grid_steps")) { + primary_grid_steps = state["primary_grid_steps"]; + } + if (state.has("snap_rotation_step")) { snap_rotation_step = state["snap_rotation_step"]; } @@ -4835,9 +5010,18 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { snap_rotation_offset = state["snap_rotation_offset"]; } - if (state.has("snap_active")) { - snap_active = state["snap_active"]; - snap_button->set_pressed(snap_active); + if (state.has("snap_scale_step")) { + snap_scale_step = state["snap_scale_step"]; + } + + if (state.has("smart_snap_active")) { + smart_snap_active = state["smart_snap_active"]; + smart_snap_button->set_pressed(smart_snap_active); + } + + if (state.has("grid_snap_active")) { + grid_snap_active = state["grid_snap_active"]; + grid_snap_button->set_pressed(grid_snap_active); } if (state.has("snap_node_parent")) { @@ -4876,12 +5060,6 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { smartsnap_config_popup->set_item_checked(idx, snap_guides); } - if (state.has("snap_grid")) { - snap_grid = state["snap_grid"]; - int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_GRID); - snap_config_menu->get_popup()->set_item_checked(idx, snap_grid); - } - if (state.has("show_grid")) { show_grid = state["show_grid"]; int idx = view_menu->get_popup()->get_item_index(SHOW_GRID); @@ -4936,6 +5114,12 @@ void CanvasItemEditor::set_state(const Dictionary &p_state) { snap_config_menu->get_popup()->set_item_checked(idx, snap_rotation); } + if (state.has("snap_scale")) { + snap_scale = state["snap_scale"]; + int idx = snap_config_menu->get_popup()->get_item_index(SNAP_USE_SCALE); + snap_config_menu->get_popup()->set_item_checked(idx, snap_scale); + } + if (state.has("snap_relative")) { snap_relative = state["snap_relative"]; int idx = snap_config_menu->get_popup()->get_item_index(SNAP_RELATIVE); @@ -5017,20 +5201,24 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { previous_update_view_offset = view_offset; // Moves the view a little bit to the left so that (0,0) is visible. The values a relative to a 16/10 screen grid_offset = Point2(); grid_step = Point2(10, 10); + primary_grid_steps = 8; // A power-of-two value works better as a default grid_step_multiplier = 0; snap_rotation_offset = 0; snap_rotation_step = 15 / (180 / Math_PI); - snap_active = false; + snap_scale_step = 0.1f; + smart_snap_active = false; + grid_snap_active = false; snap_node_parent = true; snap_node_anchors = true; snap_node_sides = true; snap_node_center = true; snap_other_nodes = true; - snap_grid = true; snap_guides = true; snap_rotation = false; snap_relative = false; snap_pixel = false; + snap_target[0] = SNAP_TARGET_NONE; + snap_target[1] = SNAP_TARGET_NONE; anchors_mode = false; @@ -5113,6 +5301,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { warning_child_of_container = memnew(Label); warning_child_of_container->hide(); warning_child_of_container->set_text(TTR("Warning: Children of a container get their position and size determined only by their parent.")); + warning_child_of_container->add_color_override("font_color", EditorNode::get_singleton()->get_gui_base()->get_color("warning_color", "Editor")); + warning_child_of_container->add_font_override("font", EditorNode::get_singleton()->get_gui_base()->get_font("main", "EditorFonts")); add_control_to_info_overlay(warning_child_of_container); h_scroll = memnew(HScrollBar); @@ -5128,6 +5318,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_hb = memnew(HBoxContainer); viewport->add_child(zoom_hb); zoom_hb->set_begin(Point2(5, 5)); + // Bring the zoom percentage closer to the zoom buttons + zoom_hb->add_constant_override("separation", Math::round(-8 * EDSCALE)); zoom_minus = memnew(ToolButton); zoom_hb->add_child(zoom_minus); @@ -5140,6 +5332,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { zoom_reset->connect("pressed", this, "_button_zoom_reset"); zoom_reset->set_shortcut(ED_SHORTCUT("canvas_item_editor/zoom_reset", TTR("Zoom Reset"), KEY_MASK_CMD | KEY_0)); zoom_reset->set_focus_mode(FOCUS_NONE); + zoom_reset->set_text_align(Button::TextAlign::ALIGN_CENTER); + // Prevent the button's size from changing when the text size changes + zoom_reset->set_custom_minimum_size(Size2(75 * EDSCALE, 0)); zoom_plus = memnew(ToolButton); zoom_hb->add_child(zoom_plus); @@ -5209,12 +5404,19 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { hb->add_child(memnew(VSeparator)); - snap_button = memnew(ToolButton); - hb->add_child(snap_button); - snap_button->set_toggle_mode(true); - snap_button->connect("toggled", this, "_button_toggle_snap"); - snap_button->set_tooltip(TTR("Toggle snapping.")); - snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_snap", TTR("Use Snap"), KEY_MASK_SHIFT | KEY_S)); + smart_snap_button = memnew(ToolButton); + hb->add_child(smart_snap_button); + smart_snap_button->set_toggle_mode(true); + smart_snap_button->connect("toggled", this, "_button_toggle_smart_snap"); + smart_snap_button->set_tooltip(TTR("Toggle smart snapping.")); + smart_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_smart_snap", TTR("Use Smart Snap"), KEY_MASK_SHIFT | KEY_S)); + + grid_snap_button = memnew(ToolButton); + hb->add_child(grid_snap_button); + grid_snap_button->set_toggle_mode(true); + grid_snap_button->connect("toggled", this, "_button_toggle_grid_snap"); + grid_snap_button->set_tooltip(TTR("Toggle grid snapping.")); + grid_snap_button->set_shortcut(ED_SHORTCUT("canvas_item_editor/use_grid_snap", TTR("Use Grid Snap"), KEY_MASK_SHIFT | KEY_G)); snap_config_menu = memnew(MenuButton); hb->add_child(snap_config_menu); @@ -5225,8 +5427,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { PopupMenu *p = snap_config_menu->get_popup(); p->connect("id_pressed", this, "_popup_callback"); p->set_hide_on_checkable_item_selection(false); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_grid", TTR("Snap to Grid")), SNAP_USE_GRID); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/use_rotation_snap", TTR("Use Rotation Snap")), SNAP_USE_ROTATION); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/use_scale_snap", TTR("Use Scale Snap")), SNAP_USE_SCALE); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/snap_relative", TTR("Snap Relative")), SNAP_RELATIVE); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/use_pixel_snap", TTR("Use Pixel Snap")), SNAP_USE_PIXEL); p->add_submenu_item(TTR("Smart Snapping"), "SmartSnapping"); @@ -5297,9 +5499,9 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) { p = view_menu->get_popup(); p->set_hide_on_checkable_item_selection(false); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Show Grid"), KEY_G), SHOW_GRID); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_grid", TTR("Always Show Grid"), KEY_G), SHOW_GRID); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_helpers", TTR("Show Helpers"), KEY_H), SHOW_HELPERS); - p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers"), KEY_MASK_CMD | KEY_R), SHOW_RULERS); + p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_rulers", TTR("Show Rulers")), SHOW_RULERS); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_guides", TTR("Show Guides"), KEY_Y), SHOW_GUIDES); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_origin", TTR("Show Origin")), SHOW_ORIGIN); p->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/show_viewport", TTR("Show Viewport")), SHOW_VIEWPORT); @@ -5501,6 +5703,7 @@ void CanvasItemEditorViewport::_create_preview(const Vector<String> &files) cons for (int i = 0; i < files.size(); i++) { String path = files[i]; RES res = ResourceLoader::load(path); + ERR_FAIL_COND(res.is_null()); Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(*res)); Ref<PackedScene> scene = Ref<PackedScene>(Object::cast_to<PackedScene>(*res)); if (texture != NULL || scene != NULL) { diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h index 4e030c63da..058f9a77d3 100644 --- a/editor/plugins/canvas_item_editor_plugin.h +++ b/editor/plugins/canvas_item_editor_plugin.h @@ -108,6 +108,7 @@ private: SNAP_USE_GRID, SNAP_USE_GUIDES, SNAP_USE_ROTATION, + SNAP_USE_SCALE, SNAP_RELATIVE, SNAP_CONFIGURE, SNAP_USE_PIXEL, @@ -255,19 +256,23 @@ private: Point2 grid_offset; Point2 grid_step; + int primary_grid_steps; int grid_step_multiplier; float snap_rotation_step; float snap_rotation_offset; - bool snap_active; + float snap_scale_step; + bool smart_snap_active; + bool grid_snap_active; + bool snap_node_parent; bool snap_node_anchors; bool snap_node_sides; bool snap_node_center; bool snap_other_nodes; - bool snap_grid; bool snap_guides; bool snap_rotation; + bool snap_scale; bool snap_relative; bool snap_pixel; bool skeleton_show_bones; @@ -347,7 +352,8 @@ private: ToolButton *ruler_button; - ToolButton *snap_button; + ToolButton *smart_snap_button; + ToolButton *grid_snap_button; MenuButton *snap_config_menu; PopupMenu *smartsnap_config_popup; @@ -525,10 +531,12 @@ private: HBoxContainer *zoom_hb; void _zoom_on_position(float p_zoom, Point2 p_position = Point2()); + void _update_zoom_label(); void _button_zoom_minus(); void _button_zoom_reset(); void _button_zoom_plus(); - void _button_toggle_snap(bool p_status); + void _button_toggle_smart_snap(bool p_status); + void _button_toggle_grid_snap(bool p_status); void _button_tool_select(int p_index); HSplitContainer *palette_split; diff --git a/editor/plugins/cpu_particles_2d_editor_plugin.cpp b/editor/plugins/cpu_particles_2d_editor_plugin.cpp index 9d625af959..374900d4c7 100644 --- a/editor/plugins/cpu_particles_2d_editor_plugin.cpp +++ b/editor/plugins/cpu_particles_2d_editor_plugin.cpp @@ -87,7 +87,7 @@ void CPUParticles2DEditorPlugin::_generate_emission_mask() { Ref<Image> img; img.instance(); Error err = ImageLoader::load_image(source_emission_file, img); - ERR_FAIL_COND_MSG(err != OK, "Error loading image: " + source_emission_file + "."); + ERR_FAIL_COND_MSG(err != OK, "Error loading image '" + source_emission_file + "'."); if (img->is_compressed()) { img->decompress(); diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp index c2b6031e60..727d92ba05 100644 --- a/editor/plugins/curve_editor_plugin.cpp +++ b/editor/plugins/curve_editor_plugin.cpp @@ -456,6 +456,9 @@ void CurveEditor::remove_point(int index) { if (index == _selected_point) set_selected_point(-1); + if (index == _hover_point) + set_hover_point_index(-1); + ur.commit_action(); } @@ -733,6 +736,9 @@ void CurveEditor::_draw() { if (_selected_point > 0 && _selected_point + 1 < curve.get_point_count()) { text_color.a *= 0.4; draw_string(font, Vector2(50, font_height), TTR("Hold Shift to edit tangents individually"), text_color); + } else if (curve.get_point_count() == 0) { + text_color.a *= 0.4; + draw_string(font, Vector2(50, font_height), TTR("Right click to add point"), text_color); } } @@ -779,7 +785,7 @@ bool CurvePreviewGenerator::handles(const String &p_type) const { Ref<Texture> CurvePreviewGenerator::generate(const Ref<Resource> &p_from, const Size2 &p_size) const { Ref<Curve> curve_ref = p_from; - ERR_FAIL_COND_V(curve_ref.is_null(), Ref<Texture>()); + ERR_FAIL_COND_V_MSG(curve_ref.is_null(), Ref<Texture>(), "It's not a reference to a valid Resource object."); Curve &curve = **curve_ref; // FIXME: Should be ported to use p_size as done in b2633a97 diff --git a/editor/plugins/mesh_instance_editor_plugin.cpp b/editor/plugins/mesh_instance_editor_plugin.cpp index 635b934333..22df8fd8f4 100644 --- a/editor/plugins/mesh_instance_editor_plugin.cpp +++ b/editor/plugins/mesh_instance_editor_plugin.cpp @@ -180,6 +180,7 @@ void MeshInstanceEditor::_menu_option(int p_option) { CollisionShape *cshape = memnew(CollisionShape); cshape->set_shape(shapes[i]); + cshape->set_transform(node->get_transform()); Node *owner = node->get_owner(); diff --git a/editor/plugins/mesh_library_editor_plugin.cpp b/editor/plugins/mesh_library_editor_plugin.cpp index 1fc6dae978..7fbb35e565 100644 --- a/editor/plugins/mesh_library_editor_plugin.cpp +++ b/editor/plugins/mesh_library_editor_plugin.cpp @@ -201,7 +201,7 @@ void MeshLibraryEditor::_import_scene_cbk(const String &p_str) { ERR_FAIL_COND(ps.is_null()); Node *scene = ps->instance(); - ERR_FAIL_COND(!scene); + ERR_FAIL_COND_MSG(!scene, "Cannot create an instance from PackedScene '" + p_str + "'."); _import_scene(scene, mesh_library, option == MENU_OPTION_UPDATE_FROM_SCENE); diff --git a/editor/plugins/particles_2d_editor_plugin.cpp b/editor/plugins/particles_2d_editor_plugin.cpp index 8025e12885..957ce42304 100644 --- a/editor/plugins/particles_2d_editor_plugin.cpp +++ b/editor/plugins/particles_2d_editor_plugin.cpp @@ -160,7 +160,7 @@ void Particles2DEditorPlugin::_generate_emission_mask() { Ref<Image> img; img.instance(); Error err = ImageLoader::load_image(source_emission_file, img); - ERR_FAIL_COND_MSG(err != OK, "Error loading image: " + source_emission_file + "."); + ERR_FAIL_COND_MSG(err != OK, "Error loading image '" + source_emission_file + "'."); if (img->is_compressed()) { img->decompress(); diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp index 8b6bab374c..f7e997a269 100644 --- a/editor/plugins/script_editor_plugin.cpp +++ b/editor/plugins/script_editor_plugin.cpp @@ -43,6 +43,7 @@ #include "editor/plugins/shader_editor_plugin.h" #include "editor/script_editor_debugger.h" #include "scene/main/viewport.h" +#include "scene/scene_string_names.h" #include "script_text_editor.h" #include "text_editor.h" @@ -538,9 +539,13 @@ void ScriptEditor::_open_recent_script(int p_idx) { // if it's a path then it's most likely a deleted file not help } else if (path.find("::") != -1) { // built-in script - String scene_path = path.get_slice("::", 0); - if (!EditorNode::get_singleton()->is_scene_open(scene_path)) { - EditorNode::get_singleton()->load_scene(scene_path); + String res_path = path.get_slice("::", 0); + if (ResourceLoader::get_resource_type(res_path) == "PackedScene") { + if (!EditorNode::get_singleton()->is_scene_open(res_path)) { + EditorNode::get_singleton()->load_scene(res_path); + } + } else { + EditorNode::get_singleton()->load_resource(res_path); } Ref<Script> script = ResourceLoader::load(path); if (script.is_valid()) { @@ -1028,12 +1033,16 @@ void ScriptEditor::_menu_option(int p_option) { if (extensions.find(path.get_extension()) || built_in) { if (built_in) { - String scene_path = path.get_slice("::", 0); - if (!EditorNode::get_singleton()->is_scene_open(scene_path)) { - EditorNode::get_singleton()->load_scene(scene_path); - script_editor->call_deferred("_menu_option", p_option); - previous_scripts.push_back(path); //repeat the operation - return; + String res_path = path.get_slice("::", 0); + if (ResourceLoader::get_resource_type(res_path) == "PackedScene") { + if (!EditorNode::get_singleton()->is_scene_open(res_path)) { + EditorNode::get_singleton()->load_scene(res_path); + script_editor->call_deferred("_menu_option", p_option); + previous_scripts.push_back(path); //repeat the operation + return; + } + } else { + EditorNode::get_singleton()->load_resource(res_path); } } @@ -1317,6 +1326,9 @@ void ScriptEditor::_menu_option(int p_option) { case HELP_SEARCH_FIND_NEXT: { help->search_again(); } break; + case HELP_SEARCH_FIND_PREVIOUS: { + help->search_again(true); + } break; case FILE_CLOSE: { _close_current_tab(); } break; @@ -1409,16 +1421,6 @@ void ScriptEditor::_notification(int p_what) { members_overview->connect("item_selected", this, "_members_overview_selected"); help_overview->connect("item_selected", this, "_help_overview_selected"); script_split->connect("dragged", this, "_script_split_dragged"); - autosave_timer->connect("timeout", this, "_autosave_scripts"); - { - float autosave_time = EditorSettings::get_singleton()->get("text_editor/files/autosave_interval_secs"); - if (autosave_time > 0) { - autosave_timer->set_wait_time(autosave_time); - autosave_timer->start(); - } else { - autosave_timer->stop(); - } - } EditorSettings::get_singleton()->connect("settings_changed", this, "_editor_settings_changed"); FALLTHROUGH; @@ -1965,7 +1967,7 @@ Ref<TextFile> ScriptEditor::_load_text_file(const String &p_path, Error *r_error Ref<TextFile> text_res(text_file); Error err = text_file->load_text(path); - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Cannot load text file '" + path + "'."); text_file->set_file_path(local_path); text_file->set_path(local_path, true); @@ -1990,10 +1992,7 @@ Error ScriptEditor::_save_text_file(Ref<TextFile> p_text_file, const String &p_p Error err; FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); - if (err) { - - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot save text file '" + p_path + "'."); file->store_string(source); if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { @@ -2327,13 +2326,7 @@ void ScriptEditor::_editor_settings_changed() { _update_members_overview_visibility(); _update_help_overview_visibility(); - float autosave_time = EditorSettings::get_singleton()->get("text_editor/files/autosave_interval_secs"); - if (autosave_time > 0) { - autosave_timer->set_wait_time(autosave_time); - autosave_timer->start(); - } else { - autosave_timer->stop(); - } + _update_autosave_timer(); if (current_theme == "") { current_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme"); @@ -2361,6 +2354,21 @@ void ScriptEditor::_autosave_scripts() { save_all_scripts(); } +void ScriptEditor::_update_autosave_timer() { + + if (!autosave_timer->is_inside_tree()) { + return; + } + + float autosave_time = EditorSettings::get_singleton()->get("text_editor/files/autosave_interval_secs"); + if (autosave_time > 0) { + autosave_timer->set_wait_time(autosave_time); + autosave_timer->start(); + } else { + autosave_timer->stop(); + } +} + void ScriptEditor::_tree_changed() { if (waiting_update_names) @@ -2822,6 +2830,7 @@ void ScriptEditor::_update_selected_editor_menu() { script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find..."), KEY_MASK_CMD | KEY_F), HELP_SEARCH_FIND); script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), HELP_SEARCH_FIND_NEXT); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT | KEY_F3), HELP_SEARCH_FIND_PREVIOUS); script_search_menu->get_popup()->add_separator(); script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_in_files", TTR("Find in Files"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_F), SEARCH_IN_FILES); script_search_menu->show(); @@ -3083,6 +3092,7 @@ void ScriptEditor::_bind_methods() { ClassDB::bind_method("_show_debugger", &ScriptEditor::_show_debugger); ClassDB::bind_method("_get_debug_tooltip", &ScriptEditor::_get_debug_tooltip); ClassDB::bind_method("_autosave_scripts", &ScriptEditor::_autosave_scripts); + ClassDB::bind_method("_update_autosave_timer", &ScriptEditor::_update_autosave_timer); ClassDB::bind_method("_editor_settings_changed", &ScriptEditor::_editor_settings_changed); ClassDB::bind_method("_update_script_names", &ScriptEditor::_update_script_names); ClassDB::bind_method("_update_script_connections", &ScriptEditor::_update_script_connections); @@ -3300,8 +3310,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { debug_menu->set_text(TTR("Debug")); debug_menu->set_switch_on_hover(true); debug_menu->get_popup()->set_hide_on_window_lose_focus(true); - debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); debug_menu->get_popup()->add_separator(); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/break", TTR("Break")), DEBUG_BREAK); debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/continue", TTR("Continue"), KEY_F12), DEBUG_CONTINUE); @@ -3419,6 +3429,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { autosave_timer = memnew(Timer); autosave_timer->set_one_shot(false); + autosave_timer->connect(SceneStringNames::get_singleton()->tree_entered, this, "_update_autosave_timer"); + autosave_timer->connect("timeout", this, "_autosave_scripts"); add_child(autosave_timer); grab_focus_block = false; @@ -3463,15 +3475,18 @@ void ScriptEditorPlugin::edit(Object *p_object) { if (Object::cast_to<Script>(p_object)) { Script *p_script = Object::cast_to<Script>(p_object); - String scene_path = p_script->get_path().get_slice("::", 0); - - if (_is_built_in_script(p_script) && !EditorNode::get_singleton()->is_scene_open(scene_path)) { - EditorNode::get_singleton()->load_scene(scene_path); + String res_path = p_script->get_path().get_slice("::", 0); - script_editor->call_deferred("edit", p_script); - } else { - script_editor->edit(p_script); + if (_is_built_in_script(p_script)) { + if (ResourceLoader::get_resource_type(res_path) == "PackedScene") { + if (!EditorNode::get_singleton()->is_scene_open(res_path)) { + EditorNode::get_singleton()->load_scene(res_path); + } + } else { + EditorNode::get_singleton()->load_resource(res_path); + } } + script_editor->edit(p_script); } else if (Object::cast_to<TextFile>(p_object)) { script_editor->edit(Object::cast_to<TextFile>(p_object)); } diff --git a/editor/plugins/script_editor_plugin.h b/editor/plugins/script_editor_plugin.h index 0c876108a5..294294fc56 100644 --- a/editor/plugins/script_editor_plugin.h +++ b/editor/plugins/script_editor_plugin.h @@ -168,6 +168,7 @@ class ScriptEditor : public PanelContainer { REQUEST_DOCS, HELP_SEARCH_FIND, HELP_SEARCH_FIND_NEXT, + HELP_SEARCH_FIND_PREVIOUS, WINDOW_MOVE_UP, WINDOW_MOVE_DOWN, WINDOW_NEXT, @@ -342,6 +343,7 @@ class ScriptEditor : public PanelContainer { void _save_layout(); void _editor_settings_changed(); void _autosave_scripts(); + void _update_autosave_timer(); void _update_members_overview_visibility(); void _update_members_overview(); diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp index 3b300a7ad5..f63445dab8 100644 --- a/editor/plugins/script_text_editor.cpp +++ b/editor/plugins/script_text_editor.cpp @@ -224,6 +224,7 @@ void ScriptTextEditor::_load_theme_settings() { Color keyword_color = EDITOR_GET("text_editor/highlighting/keyword_color"); Color basetype_color = EDITOR_GET("text_editor/highlighting/base_type_color"); Color type_color = EDITOR_GET("text_editor/highlighting/engine_type_color"); + Color usertype_color = EDITOR_GET("text_editor/highlighting/user_type_color"); Color comment_color = EDITOR_GET("text_editor/highlighting/comment_color"); Color string_color = EDITOR_GET("text_editor/highlighting/string_color"); @@ -262,6 +263,7 @@ void ScriptTextEditor::_load_theme_settings() { colors_cache.keyword_color = keyword_color; colors_cache.basetype_color = basetype_color; colors_cache.type_color = type_color; + colors_cache.usertype_color = usertype_color; colors_cache.comment_color = comment_color; colors_cache.string_color = string_color; @@ -325,6 +327,29 @@ void ScriptTextEditor::_set_theme_for_script() { } _update_member_keywords(); + //colorize user types + List<StringName> global_classes; + ScriptServer::get_global_class_list(&global_classes); + + for (List<StringName>::Element *E = global_classes.front(); E; E = E->next()) { + + text_edit->add_keyword_color(E->get(), colors_cache.usertype_color); + } + + //colorize singleton autoloads (as types, just as engine singletons are) + List<PropertyInfo> props; + ProjectSettings::get_singleton()->get_property_list(&props); + for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { + String s = E->get().name; + if (!s.begins_with("autoload/")) { + continue; + } + String path = ProjectSettings::get_singleton()->get(s); + if (path.begins_with("*")) { + text_edit->add_keyword_color(s.get_slice("/", 1), colors_cache.usertype_color); + } + } + //colorize comments List<String> comments; script->get_language()->get_comment_delimiters(&comments); @@ -546,6 +571,7 @@ void ScriptTextEditor::_validate_script() { String error_text = "error(" + itos(line) + "," + itos(col) + "): " + errortxt; code_editor->set_error(error_text); code_editor->set_error_pos(line - 1, col - 1); + script_is_valid = false; } else { code_editor->set_error(""); line = -1; @@ -560,6 +586,7 @@ void ScriptTextEditor::_validate_script() { functions.push_back(E->get()); } + script_is_valid = true; } _update_connected_methods(); @@ -789,7 +816,7 @@ void ScriptTextEditor::_code_complete_script(const String &p_code, List<ScriptCo } String hint; Error err = script->get_language()->complete_code(p_code, script->get_path(), base, r_options, r_force, hint); - if (err == OK && hint != "") { + if (err == OK) { code_editor->get_text_edit()->set_code_hint(hint); } } @@ -942,12 +969,17 @@ void ScriptTextEditor::_update_connected_methods() { text_edit->clear_info_icons(); missing_connections.clear(); + if (!script_is_valid) { + return; + } + Node *base = get_tree()->get_edited_scene_root(); if (!base) { return; } Vector<Node *> nodes = _find_all_node_for_script(base, base, script); + Set<StringName> methods_found; for (int i = 0; i < nodes.size(); i++) { List<Connection> connections; nodes[i]->get_signals_connected_to_this(&connections); @@ -964,28 +996,41 @@ void ScriptTextEditor::_update_connected_methods() { continue; } - if (!ClassDB::has_method(script->get_instance_base_type(), connection.method)) { + if (methods_found.has(connection.method)) { + continue; + } - int line = script->get_language()->find_function(connection.method, text_edit->get_text()); - if (line < 0) { - // There is a chance that the method is inherited from another script. - bool found_inherited_function = false; - Ref<Script> inherited_script = script->get_base_script(); - while (!inherited_script.is_null()) { - line = inherited_script->get_language()->find_function(connection.method, inherited_script->get_source_code()); - if (line != -1) { - found_inherited_function = true; - break; - } - - inherited_script = inherited_script->get_base_script(); + if (!ClassDB::has_method(script->get_instance_base_type(), connection.method)) { + int line = -1; + + for (int j = 0; j < functions.size(); j++) { + String name = functions[j].get_slice(":", 0); + if (name == connection.method) { + line = functions[j].get_slice(":", 1).to_int(); + text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.method); + methods_found.insert(connection.method); + break; } + } - if (!found_inherited_function) { - missing_connections.push_back(connection); + if (line >= 0) { + continue; + } + + // There is a chance that the method is inherited from another script. + bool found_inherited_function = false; + Ref<Script> inherited_script = script->get_base_script(); + while (!inherited_script.is_null()) { + if (inherited_script->has_method(connection.method)) { + found_inherited_function = true; + break; } - } else { - text_edit->set_line_info_icon(line - 1, get_parent_control()->get_icon("Slot", "EditorIcons"), connection.method); + + inherited_script = inherited_script->get_base_script(); + } + + if (!found_inherited_function) { + missing_connections.push_back(connection); } } } @@ -1161,7 +1206,7 @@ void ScriptTextEditor::_edit_option(int p_op) { if (expression.parse(line) == OK) { Variant result = expression.execute(Array(), Variant(), false); if (expression.get_error_text() == "") { - results.append(whitespace + (String)result); + results.append(whitespace + result.get_construct_string()); } else { results.append(line); } @@ -1532,93 +1577,98 @@ void ScriptTextEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data void ScriptTextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) { Ref<InputEventMouseButton> mb = ev; + Ref<InputEventKey> k = ev; + Point2 local_pos; + bool create_menu = false; - if (mb.is_valid()) { - - if (mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { - int col, row; - TextEdit *tx = code_editor->get_text_edit(); - tx->_get_mouse_pos(mb->get_global_position() - tx->get_global_position(), row, col); - Vector2 mpos = mb->get_global_position() - tx->get_global_position(); - - tx->set_right_click_moves_caret(EditorSettings::get_singleton()->get("text_editor/cursor/right_click_moves_caret")); - if (tx->is_right_click_moving_caret()) { - if (tx->is_selection_active()) { + TextEdit *tx = code_editor->get_text_edit(); + if (mb.is_valid() && mb->get_button_index() == BUTTON_RIGHT && mb->is_pressed()) { + local_pos = mb->get_global_position() - tx->get_global_position(); + create_menu = true; + } else if (k.is_valid() && k->get_scancode() == KEY_MENU) { + local_pos = tx->_get_cursor_pixel_pos(); + create_menu = true; + } - int from_line = tx->get_selection_from_line(); - int to_line = tx->get_selection_to_line(); - int from_column = tx->get_selection_from_column(); - int to_column = tx->get_selection_to_column(); + if (create_menu) { + int col, row; + tx->_get_mouse_pos(local_pos, row, col); - if (row < from_line || row > to_line || (row == from_line && col < from_column) || (row == to_line && col > to_column)) { - // Right click is outside the selected text - tx->deselect(); - } - } - if (!tx->is_selection_active()) { - tx->cursor_set_line(row, true, false); - tx->cursor_set_column(col); + tx->set_right_click_moves_caret(EditorSettings::get_singleton()->get("text_editor/cursor/right_click_moves_caret")); + if (tx->is_right_click_moving_caret()) { + if (tx->is_selection_active()) { + int from_line = tx->get_selection_from_line(); + int to_line = tx->get_selection_to_line(); + int from_column = tx->get_selection_from_column(); + int to_column = tx->get_selection_to_column(); + + if (row < from_line || row > to_line || (row == from_line && col < from_column) || (row == to_line && col > to_column)) { + // Right click is outside the selected text + tx->deselect(); } } + if (!tx->is_selection_active()) { + tx->cursor_set_line(row, true, false); + tx->cursor_set_column(col); + } + } - String word_at_mouse = tx->get_word_at_pos(mpos); - if (word_at_mouse == "") - word_at_mouse = tx->get_word_under_cursor(); - if (word_at_mouse == "") - word_at_mouse = tx->get_selection_text(); + String word_at_pos = tx->get_word_at_pos(local_pos); + if (word_at_pos == "") + word_at_pos = tx->get_word_under_cursor(); + if (word_at_pos == "") + word_at_pos = tx->get_selection_text(); - bool has_color = (word_at_mouse == "Color"); - bool foldable = tx->can_fold(row) || tx->is_folded(row); - bool open_docs = false; - bool goto_definition = false; + bool has_color = (word_at_pos == "Color"); + bool foldable = tx->can_fold(row) || tx->is_folded(row); + bool open_docs = false; + bool goto_definition = false; - if (word_at_mouse.is_resource_file()) { + if (word_at_pos.is_resource_file()) { + open_docs = true; + } else { + Node *base = get_tree()->get_edited_scene_root(); + if (base) { + base = _find_node_for_script(base, base, script); + } + ScriptLanguage::LookupResult result; + if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), word_at_pos, script->get_path(), base, result) == OK) { open_docs = true; - } else { - - Node *base = get_tree()->get_edited_scene_root(); - if (base) { - base = _find_node_for_script(base, base, script); - } - ScriptLanguage::LookupResult result; - if (script->get_language()->lookup_code(code_editor->get_text_edit()->get_text_for_lookup_completion(), word_at_mouse, script->get_path(), base, result) == OK) { - open_docs = true; - } } + } - if (has_color) { - String line = tx->get_line(row); - color_position.x = row; - color_position.y = col; - - int begin = 0; - int end = 0; - bool valid = false; - for (int i = col; i < line.length(); i++) { - if (line[i] == '(') { - begin = i; - continue; - } else if (line[i] == ')') { - end = i + 1; - valid = true; - break; - } + if (has_color) { + String line = tx->get_line(row); + color_position.x = row; + color_position.y = col; + + int begin = 0; + int end = 0; + bool valid = false; + for (int i = col; i < line.length(); i++) { + if (line[i] == '(') { + begin = i; + continue; + } else if (line[i] == ')') { + end = i + 1; + valid = true; + break; } - if (valid) { - color_args = line.substr(begin, end - begin); - String stripped = color_args.replace(" ", "").replace("(", "").replace(")", ""); - Vector<float> color = stripped.split_floats(","); - if (color.size() > 2) { - float alpha = color.size() > 3 ? color[3] : 1.0f; - color_picker->set_pick_color(Color(color[0], color[1], color[2], alpha)); - } - color_panel->set_position(get_global_transform().xform(get_local_mouse_position())); - } else { - has_color = false; + } + if (valid) { + color_args = line.substr(begin, end - begin); + String stripped = color_args.replace(" ", "").replace("(", "").replace(")", ""); + Vector<float> color = stripped.split_floats(","); + if (color.size() > 2) { + float alpha = color.size() > 3 ? color[3] : 1.0f; + color_picker->set_pick_color(Color(color[0], color[1], color[2], alpha)); } + color_panel->set_position(get_global_transform().xform(local_pos)); + } else { + has_color = false; } - _make_context_menu(tx->is_selection_active(), has_color, foldable, open_docs, goto_definition); } + _make_context_menu(tx->is_selection_active(), has_color, foldable, open_docs, goto_definition, local_pos); } } @@ -1643,7 +1693,7 @@ void ScriptTextEditor::_color_changed(const Color &p_color) { code_editor->get_text_edit()->update(); } -void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition) { +void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition, Vector2 p_pos) { context_menu->clear(); context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/undo"), EDIT_UNDO); @@ -1680,7 +1730,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p context_menu->add_item(TTR("Pick Color"), EDIT_PICK_COLOR); } - context_menu->set_position(get_global_transform().xform(get_local_mouse_position())); + context_menu->set_position(get_global_transform().xform(p_pos)); context_menu->set_size(Vector2(1, 1)); context_menu->popup(); } @@ -1688,6 +1738,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p ScriptTextEditor::ScriptTextEditor() { theme_loaded = false; + script_is_valid = false; VSplitContainer *editor_box = memnew(VSplitContainer); add_child(editor_box); diff --git a/editor/plugins/script_text_editor.h b/editor/plugins/script_text_editor.h index 38c6da5c33..2ba0be8feb 100644 --- a/editor/plugins/script_text_editor.h +++ b/editor/plugins/script_text_editor.h @@ -59,6 +59,7 @@ class ScriptTextEditor : public ScriptEditorBase { RichTextLabel *warnings_panel; Ref<Script> script; + bool script_is_valid; Vector<String> functions; @@ -91,6 +92,7 @@ class ScriptTextEditor : public ScriptEditorBase { Color keyword_color; Color basetype_color; Color type_color; + Color usertype_color; Color comment_color; Color string_color; } colors_cache; @@ -169,7 +171,7 @@ protected: void _edit_option(int p_op); void _edit_option_toggle_inline_comment(); - void _make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition); + void _make_context_menu(bool p_selection, bool p_color, bool p_foldable, bool p_open_docs, bool p_goto_definition, Vector2 p_pos); void _text_edit_gui_input(const Ref<InputEvent> &ev); void _color_changed(const Color &p_color); diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp index e81c97d5dd..97f194e40f 100644 --- a/editor/plugins/shader_editor_plugin.cpp +++ b/editor/plugins/shader_editor_plugin.cpp @@ -198,13 +198,9 @@ void ShaderTextEditor::_code_complete_script(const String &p_code, List<ScriptCo ShaderLanguage sl; String calltip; - Error err = sl.complete(p_code, ShaderTypes::get_singleton()->get_functions(VisualServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(VisualServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types(), r_options, calltip); - if (err != OK) - ERR_PRINT("Shaderlang complete failed"); + sl.complete(p_code, ShaderTypes::get_singleton()->get_functions(VisualServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_modes(VisualServer::ShaderMode(shader->get_mode())), ShaderTypes::get_singleton()->get_types(), r_options, calltip); - if (calltip != "") { - get_text_edit()->set_code_hint(calltip); - } + get_text_edit()->set_code_hint(calltip); } void ShaderTextEditor::_validate_script() { @@ -523,9 +519,16 @@ void ShaderEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) { tx->cursor_set_column(col); } } - _make_context_menu(tx->is_selection_active()); + _make_context_menu(tx->is_selection_active(), get_local_mouse_position()); } } + + Ref<InputEventKey> k = ev; + if (k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_MENU) { + TextEdit *tx = shader_editor->get_text_edit(); + _make_context_menu(tx->is_selection_active(), (get_global_transform().inverse() * tx->get_global_transform()).xform(tx->_get_cursor_pixel_pos())); + context_menu->grab_focus(); + } } void ShaderEditor::_update_bookmark_list() { @@ -565,7 +568,7 @@ void ShaderEditor::_bookmark_item_pressed(int p_idx) { } } -void ShaderEditor::_make_context_menu(bool p_selection) { +void ShaderEditor::_make_context_menu(bool p_selection, Vector2 p_position) { context_menu->clear(); if (p_selection) { @@ -585,7 +588,7 @@ void ShaderEditor::_make_context_menu(bool p_selection) { context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_comment"), EDIT_TOGGLE_COMMENT); context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE); - context_menu->set_position(get_global_transform().xform(get_local_mouse_position())); + context_menu->set_position(get_global_transform().xform(p_position)); context_menu->set_size(Vector2(1, 1)); context_menu->popup(); } diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h index 8d3f4d4fe8..ca9f489713 100644 --- a/editor/plugins/shader_editor_plugin.h +++ b/editor/plugins/shader_editor_plugin.h @@ -122,7 +122,7 @@ class ShaderEditor : public PanelContainer { protected: void _notification(int p_what); static void _bind_methods(); - void _make_context_menu(bool p_selection); + void _make_context_menu(bool p_selection, Vector2 p_position); void _text_edit_gui_input(const Ref<InputEvent> &ev); void _update_bookmark_list(); diff --git a/editor/plugins/spatial_editor_plugin.cpp b/editor/plugins/spatial_editor_plugin.cpp index ecc631d045..eb39496106 100644 --- a/editor/plugins/spatial_editor_plugin.cpp +++ b/editor/plugins/spatial_editor_plugin.cpp @@ -2049,12 +2049,11 @@ void SpatialEditorViewport::_update_freelook(real_t delta) { return; } - Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1)); - Vector3 right = camera->get_transform().basis.xform(Vector3(1, 0, 0)); - Vector3 up = camera->get_transform().basis.xform(Vector3(0, 1, 0)); + const Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1)); + const Vector3 right = camera->get_transform().basis.xform(Vector3(1, 0, 0)); + const Vector3 up = camera->get_transform().basis.xform(Vector3(0, 1, 0)); Vector3 direction; - bool speed_modifier = false; if (is_shortcut_pressed("spatial_editor/freelook_left")) { direction -= right; @@ -2074,17 +2073,17 @@ void SpatialEditorViewport::_update_freelook(real_t delta) { if (is_shortcut_pressed("spatial_editor/freelook_down")) { direction -= up; } - if (is_shortcut_pressed("spatial_editor/freelook_speed_modifier")) { - speed_modifier = true; - } real_t speed = freelook_speed; - if (speed_modifier) { - real_t modifier_speed_factor = EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_modifier_speed_factor"); - speed *= modifier_speed_factor; + + if (is_shortcut_pressed("spatial_editor/freelook_speed_modifier")) { + speed *= 3.0; + } + if (is_shortcut_pressed("spatial_editor/freelook_slow_modifier")) { + speed *= 0.333333; } - Vector3 motion = direction * speed * delta; + const Vector3 motion = direction * speed * delta; cursor.pos += motion; cursor.eye_pos += motion; } @@ -2172,7 +2171,7 @@ void SpatialEditorViewport::_notification(int p_what) { VisualInstance *vi = Object::cast_to<VisualInstance>(sp); - se->aabb = vi ? vi->get_aabb() : AABB(Vector3(-0.2, -0.2, -0.2), Vector3(0.4, 0.4, 0.4)); + se->aabb = vi ? vi->get_aabb() : _calculate_spatial_bounds(sp); Transform t = sp->get_global_gizmo_transform(); t.translate(se->aabb.position); @@ -2304,7 +2303,7 @@ void SpatialEditorViewport::_notification(int p_what) { if (p_what == NOTIFICATION_THEME_CHANGED) { - view_menu->set_icon(get_icon("GuiMiniTabMenu", "EditorIcons")); + view_menu->set_icon(get_icon("GuiTabMenu", "EditorIcons")); preview_camera->set_icon(get_icon("Camera", "EditorIcons")); view_menu->add_style_override("normal", editor->get_gui_base()->get_stylebox("Information3dViewport", "EditorStyles")); @@ -2761,6 +2760,7 @@ void SpatialEditorViewport::_menu_option(int p_option) { void SpatialEditorViewport::_preview_exited_scene() { + preview_camera->disconnect("toggled", this, "_toggle_camera_preview"); preview_camera->set_pressed(false); _toggle_camera_preview(false); view_menu->show(); @@ -3032,6 +3032,9 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { view_menu->get_popup()->set_item_checked(idx, previewing_cinema); } + if (preview_camera->is_connected("toggled", this, "_toggle_camera_preview")) { + preview_camera->disconnect("toggled", this, "_toggle_camera_preview"); + } if (p_state.has("previewing")) { Node *pv = EditorNode::get_singleton()->get_edited_scene()->get_node(p_state["previewing"]); if (Object::cast_to<Camera>(pv)) { @@ -3044,6 +3047,7 @@ void SpatialEditorViewport::set_state(const Dictionary &p_state) { preview_camera->show(); } } + preview_camera->connect("toggled", this, "_toggle_camera_preview"); } Dictionary SpatialEditorViewport::get_state() const { @@ -3209,20 +3213,35 @@ Vector3 SpatialEditorViewport::_get_instance_position(const Point2 &p_pos) const return point + offset; } -AABB SpatialEditorViewport::_calculate_spatial_bounds(const Spatial *p_parent, const AABB &p_bounds) { - AABB bounds = p_bounds; +AABB SpatialEditorViewport::_calculate_spatial_bounds(const Spatial *p_parent, bool p_exclude_toplevel_transform) { + AABB bounds; + + const MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(p_parent); + if (mesh_instance) { + bounds = mesh_instance->get_aabb(); + } + for (int i = 0; i < p_parent->get_child_count(); i++) { Spatial *child = Object::cast_to<Spatial>(p_parent->get_child(i)); if (child) { - MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(child); - if (mesh_instance) { - AABB mesh_instance_bounds = mesh_instance->get_aabb(); - mesh_instance_bounds.position += mesh_instance->get_global_gizmo_transform().origin - p_parent->get_global_gizmo_transform().origin; - bounds.merge_with(mesh_instance_bounds); + AABB child_bounds = _calculate_spatial_bounds(child, false); + + if (bounds.size == Vector3() && p_parent->get_class_name() == StringName("Spatial")) { + bounds = child_bounds; + } else { + bounds.merge_with(child_bounds); } - bounds = _calculate_spatial_bounds(child, bounds); } } + + if (bounds.size == Vector3() && p_parent->get_class_name() != StringName("Spatial")) { + bounds = AABB(Vector3(-0.2, -0.2, -0.2), Vector3(0.4, 0.4, 0.4)); + } + + if (!p_exclude_toplevel_transform) { + bounds = p_parent->get_transform().xform(bounds); + } + return bounds; } @@ -3230,6 +3249,7 @@ void SpatialEditorViewport::_create_preview(const Vector<String> &files) const { for (int i = 0; i < files.size(); i++) { String path = files[i]; RES res = ResourceLoader::load(path); + ERR_CONTINUE(res.is_null()); Ref<PackedScene> scene = Ref<PackedScene>(Object::cast_to<PackedScene>(*res)); Ref<Mesh> mesh = Ref<Mesh>(Object::cast_to<Mesh>(*res)); if (mesh != NULL || scene != NULL) { @@ -3248,7 +3268,7 @@ void SpatialEditorViewport::_create_preview(const Vector<String> &files) const { editor->get_scene_root()->add_child(preview_node); } } - *preview_bounds = _calculate_spatial_bounds(preview_node, AABB()); + *preview_bounds = _calculate_spatial_bounds(preview_node); } void SpatialEditorViewport::_remove_preview() { @@ -3279,6 +3299,7 @@ bool SpatialEditorViewport::_cyclical_dependency_exists(const String &p_target_s bool SpatialEditorViewport::_create_instance(Node *parent, String &path, const Point2 &p_point) { RES res = ResourceLoader::load(path); + ERR_FAIL_COND_V(res.is_null(), false); Ref<PackedScene> scene = Ref<PackedScene>(Object::cast_to<PackedScene>(*res)); Ref<Mesh> mesh = Ref<Mesh>(Object::cast_to<Mesh>(*res)); @@ -3571,13 +3592,13 @@ SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, Ed ED_SHORTCUT("spatial_editor/freelook_up", TTR("Freelook Up"), KEY_E); ED_SHORTCUT("spatial_editor/freelook_down", TTR("Freelook Down"), KEY_Q); ED_SHORTCUT("spatial_editor/freelook_speed_modifier", TTR("Freelook Speed Modifier"), KEY_SHIFT); + ED_SHORTCUT("spatial_editor/freelook_slow_modifier", TTR("Freelook Slow Modifier"), KEY_ALT); preview_camera = memnew(CheckBox); preview_camera->set_text(TTR("Preview")); vbox->add_child(preview_camera); preview_camera->set_h_size_flags(0); preview_camera->hide(); - preview_camera->connect("toggled", this, "_toggle_camera_preview"); previewing = NULL; gizmo_scale = 1.0; @@ -4061,7 +4082,9 @@ void _update_all_gizmos(Node *p_node) { } void SpatialEditor::update_all_gizmos(Node *p_node) { - if (!p_node) p_node = SceneTree::get_singleton()->get_root(); + if (!p_node) { + p_node = SceneTree::get_singleton()->get_root(); + } _update_all_gizmos(p_node); } @@ -4080,23 +4103,6 @@ Object *SpatialEditor::_get_editor_data(Object *p_what) { return si; } -Color SpatialEditor::_get_axis_color(int axis) { - - switch (axis) { - case 0: - // X axis - return Color(0.96, 0.20, 0.32); - case 1: - // Y axis - return Color(0.53, 0.84, 0.01); - case 2: - // Z axis - return Color(0.16, 0.55, 0.96); - default: - return Color(0, 0, 0); - } -} - void SpatialEditor::_generate_selection_box() { AABB aabb(Vector3(), Vector3(1, 1, 1)); @@ -4648,7 +4654,21 @@ void SpatialEditor::_init_indicators() { for (int i = 0; i < 3; i++) { Vector3 axis; axis[i] = 1; - Color origin_color = _get_axis_color(i); + Color origin_color; + switch (i) { + case 0: + origin_color = get_color("axis_x_color", "Editor"); + break; + case 1: + origin_color = get_color("axis_y_color", "Editor"); + break; + case 2: + origin_color = get_color("axis_z_color", "Editor"); + break; + default: + origin_color = Color(); + break; + } grid_enable[i] = false; grid_visible[i] = false; @@ -4685,7 +4705,22 @@ void SpatialEditor::_init_indicators() { for (int i = 0; i < 3; i++) { - Color col = _get_axis_color(i); + Color col; + switch (i) { + case 0: + col = get_color("axis_x_color", "Editor"); + break; + case 1: + col = get_color("axis_y_color", "Editor"); + break; + case 2: + col = get_color("axis_z_color", "Editor"); + break; + default: + col = Color(); + break; + } + col.a = EditorSettings::get_singleton()->get("editors/3d/manipulator_gizmo_opacity"); move_gizmo[i] = Ref<ArrayMesh>(memnew(ArrayMesh)); @@ -5186,7 +5221,7 @@ void SpatialEditor::snap_selected_nodes_to_floor() { // The maximum height an object can travel to be snapped const float max_snap_height = 20.0; - // Will be set to `true` if at least one node from the selection was sucessfully snapped + // Will be set to `true` if at least one node from the selection was successfully snapped bool snapped_to_floor = false; if (keys.size()) { @@ -6254,5 +6289,7 @@ EditorSpatialGizmoPlugin::~EditorSpatialGizmoPlugin() { current_gizmos[i]->set_plugin(NULL); current_gizmos[i]->get_spatial_node()->set_gizmo(NULL); } - SpatialEditor::get_singleton()->update_all_gizmos(); + if (SpatialEditor::get_singleton()) { + SpatialEditor::get_singleton()->update_all_gizmos(); + } } diff --git a/editor/plugins/spatial_editor_plugin.h b/editor/plugins/spatial_editor_plugin.h index 728b67f6fa..fe91c33642 100644 --- a/editor/plugins/spatial_editor_plugin.h +++ b/editor/plugins/spatial_editor_plugin.h @@ -58,6 +58,7 @@ public: RID instance; Ref<ArrayMesh> mesh; Ref<Material> material; + Ref<SkinReference> skin_reference; RID skeleton; bool billboard; bool unscaled; @@ -101,7 +102,7 @@ protected: public: void add_lines(const Vector<Vector3> &p_lines, const Ref<Material> &p_material, bool p_billboard = false); - void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const RID &p_skeleton = RID(), const Ref<Material> &p_material = Ref<Material>()); + void add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard = false, const Ref<SkinReference> &p_skin_reference = Ref<SkinReference>(), const Ref<Material> &p_material = Ref<Material>()); void add_collision_segments(const Vector<Vector3> &p_lines); void add_collision_triangles(const Ref<TriangleMesh> &p_tmesh); void add_unscaled_billboard(const Ref<Material> &p_material, float p_scale = 1); @@ -374,7 +375,7 @@ private: Point2i _get_warped_mouse_motion(const Ref<InputEventMouseMotion> &p_ev_mouse_motion) const; Vector3 _get_instance_position(const Point2 &p_pos) const; - static AABB _calculate_spatial_bounds(const Spatial *p_parent, const AABB &p_bounds); + static AABB _calculate_spatial_bounds(const Spatial *p_parent, bool p_exclude_toplevel_transform = true); void _create_preview(const Vector<String> &files) const; void _remove_preview(); bool _cyclical_dependency_exists(const String &p_target_scene_path, Node *p_desired_node); @@ -633,7 +634,6 @@ private: Node *custom_camera; Object *_get_editor_data(Object *p_what); - Color _get_axis_color(int axis); Ref<Environment> viewport_environment; diff --git a/editor/plugins/sprite_editor_plugin.cpp b/editor/plugins/sprite_editor_plugin.cpp index 2deb2090e2..40734cffc4 100644 --- a/editor/plugins/sprite_editor_plugin.cpp +++ b/editor/plugins/sprite_editor_plugin.cpp @@ -102,7 +102,7 @@ Vector<Vector2> expand(const Vector<Vector2> &points, const Rect2i &rect, float int lasti = p2->Contour.size() - 1; Vector2 prev = Vector2(p2->Contour[lasti].X / PRECISION, p2->Contour[lasti].Y / PRECISION); - for (unsigned int i = 0; i < p2->Contour.size(); i++) { + for (uint64_t i = 0; i < p2->Contour.size(); i++) { Vector2 cur = Vector2(p2->Contour[i].X / PRECISION, p2->Contour[i].Y / PRECISION); if (cur.distance_to(prev) > 0.5) { @@ -178,6 +178,7 @@ void SpriteEditor::_update_mesh_data() { err_dialog->popup_centered_minsize(); return; } + Ref<Image> image = texture->get_data(); ERR_FAIL_COND(image.is_null()); Rect2 rect; @@ -190,7 +191,12 @@ void SpriteEditor::_update_mesh_data() { bm.instance(); bm->create_from_image_alpha(image); - int grow = island_merging->get_value(); + int shrink = shrink_pixels->get_value(); + if (shrink > 0) { + bm->shrink_mask(shrink, rect); + } + + int grow = grow_pixels->get_value(); if (grow > 0) { bm->grow_mask(grow, rect); } @@ -338,6 +344,13 @@ void SpriteEditor::_convert_to_mesh_2d_node() { } void SpriteEditor::_convert_to_polygon_2d_node() { + + if (computed_outline_lines.empty()) { + err_dialog->set_text(TTR("Invalid geometry, can't create polygon.")); + err_dialog->popup_centered_minsize(); + return; + } + Polygon2D *polygon_2d_instance = memnew(Polygon2D); int total_point_count = 0; @@ -362,12 +375,6 @@ void SpriteEditor::_convert_to_polygon_2d_node() { Vector<Vector2> outline = computed_outline_lines[i]; Vector<Vector2> uv_outline = outline_lines[i]; - if (outline.size() < 3) { - err_dialog->set_text(TTR("Invalid geometry, can't create polygon.")); - err_dialog->popup_centered_minsize(); - return; - } - PoolIntArray pia; pia.resize(outline.size()); PoolIntArray::Write pia_write = pia.write(); @@ -396,16 +403,17 @@ void SpriteEditor::_convert_to_polygon_2d_node() { } void SpriteEditor::_create_collision_polygon_2d_node() { + + if (computed_outline_lines.empty()) { + err_dialog->set_text(TTR("Invalid geometry, can't create collision polygon.")); + err_dialog->popup_centered_minsize(); + return; + } + for (int i = 0; i < computed_outline_lines.size(); i++) { Vector<Vector2> outline = computed_outline_lines[i]; - if (outline.size() < 3) { - err_dialog->set_text(TTR("Invalid geometry, can't create collision polygon.")); - err_dialog->popup_centered_minsize(); - continue; - } - CollisionPolygon2D *collision_polygon_2d_instance = memnew(CollisionPolygon2D); collision_polygon_2d_instance->set_polygon(outline); @@ -419,16 +427,17 @@ void SpriteEditor::_create_collision_polygon_2d_node() { } void SpriteEditor::_create_light_occluder_2d_node() { + + if (computed_outline_lines.empty()) { + err_dialog->set_text(TTR("Invalid geometry, can't create light occluder.")); + err_dialog->popup_centered_minsize(); + return; + } + for (int i = 0; i < computed_outline_lines.size(); i++) { Vector<Vector2> outline = computed_outline_lines[i]; - if (outline.size() < 3) { - err_dialog->set_text(TTR("Invalid geometry, can't create light occluder.")); - err_dialog->popup_centered_minsize(); - continue; - } - Ref<OccluderPolygon2D> polygon; polygon.instance(); @@ -531,10 +540,14 @@ void SpriteEditor::_debug_uv_draw() { Ref<Texture> tex = node->get_texture(); ERR_FAIL_COND(!tex.is_valid()); + + Point2 draw_pos_offset = Point2(1.0, 1.0); + Size2 draw_size_offset = Size2(2.0, 2.0); + debug_uv->set_clip_contents(true); - debug_uv->draw_texture(tex, Point2()); - debug_uv->set_custom_minimum_size(tex->get_size()); - //debug_uv->draw_set_transform(Vector2(), 0, debug_uv->get_size()); + debug_uv->draw_texture(tex, draw_pos_offset); + debug_uv->set_custom_minimum_size(tex->get_size() + draw_size_offset); + debug_uv->draw_set_transform(draw_pos_offset, 0, Size2(1.0, 1.0)); Color color = Color(1.0, 0.8, 0.7); @@ -604,13 +617,21 @@ SpriteEditor::SpriteEditor() { simplification->set_value(2); hb->add_child(simplification); hb->add_spacer(); + hb->add_child(memnew(Label(TTR("Shrink (Pixels): ")))); + shrink_pixels = memnew(SpinBox); + shrink_pixels->set_min(0); + shrink_pixels->set_max(10); + shrink_pixels->set_step(1); + shrink_pixels->set_value(0); + hb->add_child(shrink_pixels); + hb->add_spacer(); hb->add_child(memnew(Label(TTR("Grow (Pixels): ")))); - island_merging = memnew(SpinBox); - island_merging->set_min(0); - island_merging->set_max(10); - island_merging->set_step(1); - island_merging->set_value(2); - hb->add_child(island_merging); + grow_pixels = memnew(SpinBox); + grow_pixels->set_min(0); + grow_pixels->set_max(10); + grow_pixels->set_step(1); + grow_pixels->set_value(2); + hb->add_child(grow_pixels); hb->add_spacer(); update_preview = memnew(Button); update_preview->set_text(TTR("Update Preview")); diff --git a/editor/plugins/sprite_editor_plugin.h b/editor/plugins/sprite_editor_plugin.h index 81be4a19e9..4ca7bca1a8 100644 --- a/editor/plugins/sprite_editor_plugin.h +++ b/editor/plugins/sprite_editor_plugin.h @@ -67,7 +67,8 @@ class SpriteEditor : public Control { Vector<int> computed_indices; SpinBox *simplification; - SpinBox *island_merging; + SpinBox *grow_pixels; + SpinBox *shrink_pixels; Button *update_preview; void _menu_option(int p_option); diff --git a/editor/plugins/sprite_frames_editor_plugin.cpp b/editor/plugins/sprite_frames_editor_plugin.cpp index d91de6cbf6..394122d91d 100644 --- a/editor/plugins/sprite_frames_editor_plugin.cpp +++ b/editor/plugins/sprite_frames_editor_plugin.cpp @@ -464,9 +464,11 @@ void SpriteFramesEditor::_animation_select() { if (updating) return; - double value = anim_speed->get_line_edit()->get_text().to_double(); - if (!Math::is_equal_approx(value, frames->get_animation_speed(edited_anim))) - _animation_fps_changed(value); + if (frames->has_animation(edited_anim)) { + double value = anim_speed->get_line_edit()->get_text().to_double(); + if (!Math::is_equal_approx(value, frames->get_animation_speed(edited_anim))) + _animation_fps_changed(value); + } TreeItem *selected = animations->get_selected(); ERR_FAIL_COND(!selected); @@ -548,6 +550,7 @@ void SpriteFramesEditor::_animation_name_edited() { undo_redo->commit_action(); } + void SpriteFramesEditor::_animation_add() { String name = "New Anim"; @@ -578,13 +581,21 @@ void SpriteFramesEditor::_animation_add() { undo_redo->commit_action(); animations->grab_focus(); } + void SpriteFramesEditor::_animation_remove() { + if (updating) return; if (!frames->has_animation(edited_anim)) return; + delete_dialog->set_text(TTR("Delete Animation?")); + delete_dialog->popup_centered_minsize(); +} + +void SpriteFramesEditor::_animation_remove_confirmed() { + undo_redo->create_action(TTR("Remove Animation")); undo_redo->add_do_method(frames, "remove_animation", edited_anim); undo_redo->add_undo_method(frames, "add_animation", edited_anim); @@ -598,6 +609,8 @@ void SpriteFramesEditor::_animation_remove() { undo_redo->add_do_method(this, "_update_library"); undo_redo->add_undo_method(this, "_update_library"); + edited_anim = StringName(); + undo_redo->commit_action(); } @@ -743,7 +756,9 @@ Variant SpriteFramesEditor::get_drag_data_fw(const Point2 &p_point, Control *p_f if (frame.is_null()) return Variant(); - return EditorNode::get_singleton()->drag_resource(frame, p_from); + Dictionary drag_data = EditorNode::get_singleton()->drag_resource(frame, p_from); + drag_data["frame"] = idx; // store the frame, incase we want to reorder frames inside 'drop_data_fw' + return drag_data; } bool SpriteFramesEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { @@ -753,8 +768,9 @@ bool SpriteFramesEditor::can_drop_data_fw(const Point2 &p_point, const Variant & if (!d.has("type")) return false; + // reordering frames if (d.has("from") && (Object *)(d["from"]) == tree) - return false; + return true; if (String(d["type"]) == "resource" && d.has("resource")) { RES r = d["resource"]; @@ -806,13 +822,31 @@ void SpriteFramesEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da Ref<Texture> texture = r; if (texture.is_valid()) { - - undo_redo->create_action(TTR("Add Frame")); - undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, at_pos == -1 ? -1 : at_pos); - undo_redo->add_undo_method(frames, "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) : at_pos); - undo_redo->add_do_method(this, "_update_library"); - undo_redo->add_undo_method(this, "_update_library"); - undo_redo->commit_action(); + bool reorder = false; + if (d.has("from") && (Object *)(d["from"]) == tree) + reorder = true; + + if (reorder) { //drop is from reordering frames + int from_frame = -1; + if (d.has("frame")) + from_frame = d["frame"]; + + undo_redo->create_action(TTR("Move Frame")); + undo_redo->add_do_method(frames, "remove_frame", edited_anim, from_frame == -1 ? frames->get_frame_count(edited_anim) : from_frame); + undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, at_pos == -1 ? -1 : at_pos); + undo_redo->add_undo_method(frames, "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) - 1 : at_pos); + undo_redo->add_undo_method(frames, "add_frame", edited_anim, texture, from_frame); + undo_redo->add_do_method(this, "_update_library"); + undo_redo->add_undo_method(this, "_update_library"); + undo_redo->commit_action(); + } else { + undo_redo->create_action(TTR("Add Frame")); + undo_redo->add_do_method(frames, "add_frame", edited_anim, texture, at_pos == -1 ? -1 : at_pos); + undo_redo->add_undo_method(frames, "remove_frame", edited_anim, at_pos == -1 ? frames->get_frame_count(edited_anim) : at_pos); + undo_redo->add_do_method(this, "_update_library"); + undo_redo->add_undo_method(this, "_update_library"); + undo_redo->commit_action(); + } } } @@ -840,6 +874,7 @@ void SpriteFramesEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_animation_name_edited"), &SpriteFramesEditor::_animation_name_edited); ClassDB::bind_method(D_METHOD("_animation_add"), &SpriteFramesEditor::_animation_add); ClassDB::bind_method(D_METHOD("_animation_remove"), &SpriteFramesEditor::_animation_remove); + ClassDB::bind_method(D_METHOD("_animation_remove_confirmed"), &SpriteFramesEditor::_animation_remove_confirmed); ClassDB::bind_method(D_METHOD("_animation_loop_changed"), &SpriteFramesEditor::_animation_loop_changed); ClassDB::bind_method(D_METHOD("_animation_fps_changed"), &SpriteFramesEditor::_animation_fps_changed); ClassDB::bind_method(D_METHOD("get_drag_data_fw"), &SpriteFramesEditor::get_drag_data_fw); @@ -870,7 +905,6 @@ SpriteFramesEditor::SpriteFramesEditor() { new_anim = memnew(ToolButton); new_anim->set_tooltip(TTR("New Animation")); hbc_animlist->add_child(new_anim); - new_anim->set_h_size_flags(SIZE_EXPAND_FILL); new_anim->connect("pressed", this, "_animation_add"); remove_anim = memnew(ToolButton); @@ -926,7 +960,7 @@ SpriteFramesEditor::SpriteFramesEditor() { paste->set_tooltip(TTR("Paste")); hbc->add_child(paste); - hbc->add_spacer(false); + hbc->add_child(memnew(VSeparator)); empty = memnew(ToolButton); empty->set_tooltip(TTR("Insert Empty (Before)")); @@ -987,6 +1021,10 @@ SpriteFramesEditor::SpriteFramesEditor() { edited_anim = "default"; + delete_dialog = memnew(ConfirmationDialog); + add_child(delete_dialog); + delete_dialog->connect("confirmed", this, "_animation_remove_confirmed"); + split_sheet_dialog = memnew(ConfirmationDialog); add_child(split_sheet_dialog); VBoxContainer *split_sheet_vb = memnew(VBoxContainer); diff --git a/editor/plugins/sprite_frames_editor_plugin.h b/editor/plugins/sprite_frames_editor_plugin.h index d64431cde7..f20b54f910 100644 --- a/editor/plugins/sprite_frames_editor_plugin.h +++ b/editor/plugins/sprite_frames_editor_plugin.h @@ -73,6 +73,8 @@ class SpriteFramesEditor : public HSplitContainer { StringName edited_anim; + ConfirmationDialog *delete_dialog; + ConfirmationDialog *split_sheet_dialog; ScrollContainer *splite_sheet_scroll; TextureRect *split_sheet_preview; @@ -98,6 +100,7 @@ class SpriteFramesEditor : public HSplitContainer { void _animation_name_edited(); void _animation_add(); void _animation_remove(); + void _animation_remove_confirmed(); void _animation_loop_changed(); void _animation_fps_changed(double p_value); diff --git a/editor/plugins/style_box_editor_plugin.cpp b/editor/plugins/style_box_editor_plugin.cpp index defc0a40ea..c4a9803ff4 100644 --- a/editor/plugins/style_box_editor_plugin.cpp +++ b/editor/plugins/style_box_editor_plugin.cpp @@ -64,21 +64,24 @@ void StyleBoxPreview::edit(const Ref<StyleBox> &p_stylebox) { void StyleBoxPreview::_sb_changed() { preview->update(); +} + +void StyleBoxPreview::_redraw() { if (stylebox.is_valid()) { - Size2 ms = stylebox->get_minimum_size() * 4 / 3; - ms.height = MAX(ms.height, 150 * EDSCALE); - preview->set_custom_minimum_size(ms); + preview->draw_style_box(stylebox, preview->get_rect()); } } void StyleBoxPreview::_bind_methods() { ClassDB::bind_method("_sb_changed", &StyleBoxPreview::_sb_changed); + ClassDB::bind_method("_redraw", &StyleBoxPreview::_redraw); } StyleBoxPreview::StyleBoxPreview() { - - preview = memnew(Panel); + preview = memnew(Control); + preview->set_custom_minimum_size(Size2(0, 150 * EDSCALE)); + preview->connect("draw", this, "_redraw"); add_margin_child(TTR("Preview:"), preview); } diff --git a/editor/plugins/style_box_editor_plugin.h b/editor/plugins/style_box_editor_plugin.h index d31a28b3e4..fead8e0de8 100644 --- a/editor/plugins/style_box_editor_plugin.h +++ b/editor/plugins/style_box_editor_plugin.h @@ -41,10 +41,11 @@ class StyleBoxPreview : public VBoxContainer { GDCLASS(StyleBoxPreview, VBoxContainer); - Panel *preview; + Control *preview; Ref<StyleBox> stylebox; void _sb_changed(); + void _redraw(); protected: static void _bind_methods(); diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp index 89e419ede8..0cef5a8b6f 100644 --- a/editor/plugins/text_editor.cpp +++ b/editor/plugins/text_editor.cpp @@ -30,7 +30,8 @@ #include "text_editor.h" -#include "editor_node.h" +#include "core/os/keyboard.h" +#include "editor/editor_node.h" void TextEditor::add_syntax_highlighter(SyntaxHighlighter *p_highlighter) { highlighters[p_highlighter->get_name()] = p_highlighter; @@ -577,13 +578,21 @@ void TextEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) { } if (!mb->is_pressed()) { - _make_context_menu(tx->is_selection_active(), can_fold, is_folded); + _make_context_menu(tx->is_selection_active(), can_fold, is_folded, get_local_mouse_position()); } } } + + Ref<InputEventKey> k = ev; + if (k.is_valid() && k->is_pressed() && k->get_scancode() == KEY_MENU) { + TextEdit *tx = code_editor->get_text_edit(); + int line = tx->cursor_get_line(); + _make_context_menu(tx->is_selection_active(), tx->can_fold(line), tx->is_folded(line), (get_global_transform().inverse() * tx->get_global_transform()).xform(tx->_get_cursor_pixel_pos())); + context_menu->grab_focus(); + } } -void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is_folded) { +void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is_folded, Vector2 p_position) { context_menu->clear(); if (p_selection) { @@ -609,7 +618,7 @@ void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is if (p_can_fold || p_is_folded) context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_fold_line"), EDIT_TOGGLE_FOLD_LINE); - context_menu->set_position(get_global_transform().xform(get_local_mouse_position())); + context_menu->set_position(get_global_transform().xform(p_position)); context_menu->set_size(Vector2(1, 1)); context_menu->popup(); } diff --git a/editor/plugins/text_editor.h b/editor/plugins/text_editor.h index c8b49a61e0..7d441a187d 100644 --- a/editor/plugins/text_editor.h +++ b/editor/plugins/text_editor.h @@ -101,7 +101,7 @@ protected: void _notification(int p_what); void _edit_option(int p_op); - void _make_context_menu(bool p_selection, bool p_can_fold, bool p_is_folded); + void _make_context_menu(bool p_selection, bool p_can_fold, bool p_is_folded, Vector2 p_position); void _text_edit_gui_input(const Ref<InputEvent> &ev); Map<String, SyntaxHighlighter *> highlighters; diff --git a/editor/plugins/texture_region_editor_plugin.cpp b/editor/plugins/texture_region_editor_plugin.cpp index 4d349f06b7..bda3d142fa 100644 --- a/editor/plugins/texture_region_editor_plugin.cpp +++ b/editor/plugins/texture_region_editor_plugin.cpp @@ -625,9 +625,12 @@ void TextureRegionEditor::_update_rect() { rect = node_sprite->get_region_rect(); else if (node_sprite_3d) rect = node_sprite_3d->get_region_rect(); - else if (node_ninepatch) + else if (node_ninepatch) { rect = node_ninepatch->get_region_rect(); - else if (obj_styleBox.is_valid()) + if (rect == Rect2()) { + rect = Rect2(Vector2(), node_ninepatch->get_texture()->get_size()); + } + } else if (obj_styleBox.is_valid()) rect = obj_styleBox->get_region_rect(); else if (atlas_tex.is_valid()) rect = atlas_tex->get_region(); @@ -863,8 +866,8 @@ void TextureRegionEditor::_edit_region() { Vector2 TextureRegionEditor::snap_point(Vector2 p_target) const { if (snap_mode == SNAP_GRID) { - p_target.x = Math::snap_scalar_seperation(snap_offset.x, snap_step.x, p_target.x, snap_separation.x); - p_target.y = Math::snap_scalar_seperation(snap_offset.y, snap_step.y, p_target.y, snap_separation.y); + p_target.x = Math::snap_scalar_separation(snap_offset.x, snap_step.x, p_target.x, snap_separation.x); + p_target.y = Math::snap_scalar_separation(snap_offset.y, snap_step.y, p_target.y, snap_separation.y); } return p_target; diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp index 3055a9382c..d501a04016 100644 --- a/editor/plugins/theme_editor_plugin.cpp +++ b/editor/plugins/theme_editor_plugin.cpp @@ -192,7 +192,7 @@ void ThemeEditor::_save_template_cbk(String fname) { FileAccess *file = FileAccess::open(filename, FileAccess::WRITE); - ERR_FAIL_COND_MSG(!file, "Can't save theme to file: " + filename + "."); + ERR_FAIL_COND_MSG(!file, "Can't save theme to file '" + filename + "'."); file->store_line("; ******************* "); file->store_line("; Template Theme File "); diff --git a/editor/plugins/tile_map_editor_plugin.cpp b/editor/plugins/tile_map_editor_plugin.cpp index 26fae96025..10567557d6 100644 --- a/editor/plugins/tile_map_editor_plugin.cpp +++ b/editor/plugins/tile_map_editor_plugin.cpp @@ -71,8 +71,8 @@ void TileMapEditor::_notification(int p_what) { picker_button->set_icon(get_icon("ColorPick", "EditorIcons")); select_button->set_icon(get_icon("ActionCopy", "EditorIcons")); - rotate_left_button->set_icon(get_icon("Rotate270", "EditorIcons")); - rotate_right_button->set_icon(get_icon("Rotate90", "EditorIcons")); + rotate_left_button->set_icon(get_icon("RotateLeft", "EditorIcons")); + rotate_right_button->set_icon(get_icon("RotateRight", "EditorIcons")); flip_horizontal_button->set_icon(get_icon("MirrorX", "EditorIcons")); flip_vertical_button->set_icon(get_icon("MirrorY", "EditorIcons")); clear_transform_button->set_icon(get_icon("Clear", "EditorIcons")); @@ -376,7 +376,7 @@ void TileMapEditor::_sbox_input(const Ref<InputEvent> &p_ie) { } // Implementation detail of TileMapEditor::_update_palette(); -// in modern C++ this could have been inside its body +// In modern C++ this could have been inside its body. namespace { struct _PaletteEntry { int id; @@ -393,10 +393,10 @@ void TileMapEditor::_update_palette() { if (!node) return; - // Update the clear button + // Update the clear button. clear_transform_button->set_disabled(!flip_h && !flip_v && !transpose); - // Update the palette + // Update the palette. Vector<int> selected = get_selected_tiles(); int selected_single = palette->get_current(); int selected_manual = manual_palette->get_current(); @@ -405,8 +405,15 @@ void TileMapEditor::_update_palette() { manual_palette->hide(); Ref<TileSet> tileset = node->get_tileset(); - if (tileset.is_null()) + if (tileset.is_null()) { + search_box->set_text(""); + search_box->set_editable(false); + info_message->show(); return; + } + + search_box->set_editable(true); + info_message->hide(); List<int> tiles; tileset->get_tile_list(&tiles); @@ -421,7 +428,6 @@ void TileMapEditor::_update_palette() { bool sort_by_name = bool(EDITOR_DEF("editors/tile_map/sort_tiles_by_name", true)); palette->add_constant_override("hseparation", hseparation * EDSCALE); - palette->add_constant_override("vseparation", 8 * EDSCALE); palette->set_fixed_icon_size(Size2(min_size, min_size)); palette->set_fixed_column_width(min_size * MAX(size_slider->get_value(), 1)); @@ -479,7 +485,7 @@ void TileMapEditor::_update_palette() { region.position += (region.size + Vector2(spacing, spacing)) * tileset->autotile_get_icon_coordinate(entries[i].id); } - // Transpose and flip + // Transpose and flip. palette->set_item_icon_transposed(palette->get_item_count() - 1, transpose); if (flip_h) { region.size.x = -region.size.x; @@ -488,14 +494,14 @@ void TileMapEditor::_update_palette() { region.size.y = -region.size.y; } - // Set region + // Set region. if (region.size != Size2()) palette->set_item_icon_region(palette->get_item_count() - 1, region); - // Set icon + // Set icon. palette->set_item_icon(palette->get_item_count() - 1, tex); - // Modulation + // Modulation. Color color = tileset->tile_get_modulate(entries[i].id); palette->set_item_icon_modulate(palette->get_item_count() - 1, color); } @@ -511,50 +517,47 @@ void TileMapEditor::_update_palette() { palette->select(0); } - if (sel_tile != TileMap::INVALID_CELL) { - if ((manual_autotile && tileset->tile_get_tile_mode(sel_tile) == TileSet::AUTO_TILE) || - (!priority_atlastile && tileset->tile_get_tile_mode(sel_tile) == TileSet::ATLAS_TILE)) { + if (sel_tile != TileMap::INVALID_CELL && ((manual_autotile && tileset->tile_get_tile_mode(sel_tile) == TileSet::AUTO_TILE) || (!priority_atlastile && tileset->tile_get_tile_mode(sel_tile) == TileSet::ATLAS_TILE))) { - const Map<Vector2, uint32_t> &tiles2 = tileset->autotile_get_bitmask_map(sel_tile); + const Map<Vector2, uint32_t> &tiles2 = tileset->autotile_get_bitmask_map(sel_tile); - Vector<Vector2> entries2; - for (const Map<Vector2, uint32_t>::Element *E = tiles2.front(); E; E = E->next()) { - entries2.push_back(E->key()); + Vector<Vector2> entries2; + for (const Map<Vector2, uint32_t>::Element *E = tiles2.front(); E; E = E->next()) { + entries2.push_back(E->key()); + } + // Sort tiles in row-major order. + struct SwapComparator { + _FORCE_INLINE_ bool operator()(const Vector2 &v_l, const Vector2 &v_r) const { + return v_l.y != v_r.y ? v_l.y < v_r.y : v_l.x < v_r.x; } - // Sort tiles in row-major order - struct SwapComparator { - _FORCE_INLINE_ bool operator()(const Vector2 &v_l, const Vector2 &v_r) const { - return v_l.y != v_r.y ? v_l.y < v_r.y : v_l.x < v_r.x; - } - }; - entries2.sort_custom<SwapComparator>(); - - Ref<Texture> tex = tileset->tile_get_texture(sel_tile); + }; + entries2.sort_custom<SwapComparator>(); - for (int i = 0; i < entries2.size(); i++) { + Ref<Texture> tex = tileset->tile_get_texture(sel_tile); - manual_palette->add_item(String()); + for (int i = 0; i < entries2.size(); i++) { - if (tex.is_valid()) { + manual_palette->add_item(String()); - Rect2 region = tileset->tile_get_region(sel_tile); - int spacing = tileset->autotile_get_spacing(sel_tile); - region.size = tileset->autotile_get_size(sel_tile); // !! - region.position += (region.size + Vector2(spacing, spacing)) * entries2[i]; + if (tex.is_valid()) { - if (!region.has_no_area()) - manual_palette->set_item_icon_region(manual_palette->get_item_count() - 1, region); + Rect2 region = tileset->tile_get_region(sel_tile); + int spacing = tileset->autotile_get_spacing(sel_tile); + region.size = tileset->autotile_get_size(sel_tile); // !! + region.position += (region.size + Vector2(spacing, spacing)) * entries2[i]; - manual_palette->set_item_icon(manual_palette->get_item_count() - 1, tex); - } + if (!region.has_no_area()) + manual_palette->set_item_icon_region(manual_palette->get_item_count() - 1, region); - manual_palette->set_item_metadata(manual_palette->get_item_count() - 1, entries2[i]); + manual_palette->set_item_icon(manual_palette->get_item_count() - 1, tex); } + + manual_palette->set_item_metadata(manual_palette->get_item_count() - 1, entries2[i]); } } if (manual_palette->get_item_count() > 0) { - // Only show the manual palette if at least tile exists in it + // Only show the manual palette if at least tile exists in it. if (selected_manual == -1 || selected_single != palette->get_current()) selected_manual = 0; if (selected_manual < manual_palette->get_item_count()) @@ -986,7 +989,7 @@ bool TileMapEditor::forward_gui_input(const Ref<InputEvent> &p_event) { if (mb->is_pressed()) { if (Input::get_singleton()->is_key_pressed(KEY_SPACE)) - return false; //drag + return false; // Drag. if (tool == TOOL_NONE) { @@ -1590,7 +1593,7 @@ void TileMapEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { } } - int max_lines = 10000; //avoid crash if size too smal + int max_lines = 10000; //avoid crash if size too small if (node->get_half_offset() != TileMap::HALF_OFFSET_Y && node->get_half_offset() != TileMap::HALF_OFFSET_NEGATIVE_Y) { @@ -1642,7 +1645,7 @@ void TileMapEditor::forward_canvas_draw_over_viewport(Control *p_overlay) { p_overlay->draw_colored_polygon(points, Color(0.2, 0.8, 1, 0.4)); } - if (mouse_over) { + if (mouse_over && node->get_tileset().is_valid()) { Vector2 endpoints[4] = { node->map_to_world(over_tile, true), @@ -1951,6 +1954,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { add_child(priority_button); search_box = memnew(LineEdit); + search_box->set_placeholder(TTR("Filter tiles")); search_box->set_h_size_flags(SIZE_EXPAND_FILL); search_box->connect("text_entered", this, "_text_entered"); search_box->connect("text_changed", this, "_text_changed"); @@ -1973,7 +1977,7 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { palette_container->set_custom_minimum_size(Size2(mw, 0)); add_child(palette_container); - // Add tile palette + // Add tile palette. palette = memnew(ItemList); palette->set_h_size_flags(SIZE_EXPAND_FILL); palette->set_v_size_flags(SIZE_EXPAND_FILL); @@ -1981,11 +1985,22 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { palette->set_icon_mode(ItemList::ICON_MODE_TOP); palette->set_max_text_lines(2); palette->set_select_mode(ItemList::SELECT_MULTI); + palette->add_constant_override("vseparation", 8 * EDSCALE); palette->connect("item_selected", this, "_palette_selected"); palette->connect("multi_selected", this, "_palette_multi_selected"); palette_container->add_child(palette); - // Add autotile override palette + // Add message for when no texture is selected. + info_message = memnew(Label); + info_message->set_text(TTR("Give a TileSet resource to this TileMap to use its tiles.")); + info_message->set_valign(Label::VALIGN_CENTER); + info_message->set_align(Label::ALIGN_CENTER); + info_message->set_autowrap(true); + info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + palette->add_child(info_message); + + // Add autotile override palette. manual_palette = memnew(ItemList); manual_palette->set_h_size_flags(SIZE_EXPAND_FILL); manual_palette->set_v_size_flags(SIZE_EXPAND_FILL); @@ -1995,15 +2010,14 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { manual_palette->hide(); palette_container->add_child(manual_palette); - // Add menu items + // Add menu items. toolbar = memnew(HBoxContainer); toolbar->hide(); CanvasItemEditor::get_singleton()->add_control_to_menu_panel(toolbar); - // Separator toolbar->add_child(memnew(VSeparator)); - // Tools + // Tools. paint_button = memnew(ToolButton); paint_button->set_shortcut(ED_SHORTCUT("tile_map_editor/paint_tile", TTR("Paint Tile"), KEY_P)); paint_button->set_tooltip(TTR("Shift+LMB: Line Draw\nShift+Ctrl+LMB: Rectangle Paint")); @@ -2031,18 +2045,18 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) { _update_button_tool(); - // Container to the right of the toolbar + // Container to the right of the toolbar. toolbar_right = memnew(HBoxContainer); toolbar_right->hide(); toolbar_right->set_h_size_flags(SIZE_EXPAND_FILL); toolbar_right->set_alignment(BoxContainer::ALIGN_END); CanvasItemEditor::get_singleton()->add_control_to_menu_panel(toolbar_right); - // Tile position + // Tile position. tile_info = memnew(Label); toolbar_right->add_child(tile_info); - // Menu + // Menu. options = memnew(MenuButton); options->set_text("TileMap"); options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("TileMap", "EditorIcons")); @@ -2136,7 +2150,8 @@ void TileMapEditorPlugin::make_visible(bool p_visible) { tile_map_editor->show(); tile_map_editor->get_toolbar()->show(); tile_map_editor->get_toolbar_right()->show(); - CanvasItemEditor::get_singleton()->set_current_tool(CanvasItemEditor::TOOL_SELECT); //Change to TOOL_SELECT when TileMap node is selected, to prevent accidental movement. + // Change to TOOL_SELECT when TileMap node is selected, to prevent accidental movement. + CanvasItemEditor::get_singleton()->set_current_tool(CanvasItemEditor::TOOL_SELECT); } else { tile_map_editor->hide(); diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h index c841eb1f98..e3d678c2fd 100644 --- a/editor/plugins/tile_map_editor_plugin.h +++ b/editor/plugins/tile_map_editor_plugin.h @@ -82,6 +82,8 @@ class TileMapEditor : public VBoxContainer { ItemList *palette; ItemList *manual_palette; + Label *info_message; + HBoxContainer *toolbar; HBoxContainer *toolbar_right; diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp index 9096a0e0be..cc4c21cc04 100644 --- a/editor/plugins/tile_set_editor_plugin.cpp +++ b/editor/plugins/tile_set_editor_plugin.cpp @@ -579,6 +579,15 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { scroll->set_v_size_flags(SIZE_EXPAND_FILL); scroll->set_clip_contents(true); + empty_message = memnew(Label); + empty_message->set_text(TTR("Add or select a texture on the left panel to edit the tiles bound to it.")); + empty_message->set_valign(Label::VALIGN_CENTER); + empty_message->set_align(Label::ALIGN_CENTER); + empty_message->set_autowrap(true); + empty_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + empty_message->set_v_size_flags(SIZE_EXPAND_FILL); + main_vb->add_child(empty_message); + workspace_container = memnew(Control); scroll->add_child(workspace_container); @@ -627,7 +636,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) { helper = memnew(TilesetEditorContext(this)); tile_names_visible = false; - // config scale + // Config scale. max_scale = 10.0f; min_scale = 0.1f; scale_ratio = 1.2f; @@ -3030,8 +3039,8 @@ Vector2 TileSetEditor::snap_point(const Vector2 &point) { } if (tools[TOOL_GRID_SNAP]->is_pressed()) { - p.x = Math::snap_scalar_seperation(snap_offset.x, snap_step.x, p.x, snap_separation.x); - p.y = Math::snap_scalar_seperation(snap_offset.y, snap_step.y, p.y, snap_separation.y); + p.x = Math::snap_scalar_separation(snap_offset.x, snap_step.x, p.x, snap_separation.x); + p.y = Math::snap_scalar_separation(snap_offset.y, snap_step.y, p.y, snap_separation.y); } if (tools[SHAPE_KEEP_INSIDE_TILE]->is_pressed()) { if (p.x < region.position.x) @@ -3123,12 +3132,28 @@ void TileSetEditor::update_workspace_tile_mode() { } tools[SELECT_NEXT]->set_disabled(true); tools[SELECT_PREVIOUS]->set_disabled(true); + + tools[ZOOM_OUT]->hide(); + tools[ZOOM_1]->hide(); + tools[ZOOM_IN]->hide(); + tools[VISIBLE_INFO]->hide(); + + scroll->hide(); + empty_message->show(); } else { for (int i = 1; i < WORKSPACE_MODE_MAX; i++) { tool_workspacemode[i]->set_disabled(false); } tools[SELECT_NEXT]->set_disabled(false); tools[SELECT_PREVIOUS]->set_disabled(false); + + tools[ZOOM_OUT]->show(); + tools[ZOOM_1]->show(); + tools[ZOOM_IN]->show(); + tools[VISIBLE_INFO]->show(); + + scroll->show(); + empty_message->hide(); } if (workspace_mode != WORKSPACE_EDIT) { diff --git a/editor/plugins/tile_set_editor_plugin.h b/editor/plugins/tile_set_editor_plugin.h index fff9ef7731..944dc04e4e 100644 --- a/editor/plugins/tile_set_editor_plugin.h +++ b/editor/plugins/tile_set_editor_plugin.h @@ -138,6 +138,7 @@ class TileSetEditor : public HSplitContainer { int current_item_index; Sprite *preview; ScrollContainer *scroll; + Label *empty_message; Control *workspace_container; bool draw_handles; Control *workspace_overlay; diff --git a/editor/plugins/version_control_editor_plugin.cpp b/editor/plugins/version_control_editor_plugin.cpp index c059977487..66b16b82a0 100644 --- a/editor/plugins/version_control_editor_plugin.cpp +++ b/editor/plugins/version_control_editor_plugin.cpp @@ -59,14 +59,6 @@ void VersionControlEditorPlugin::_selected_a_vcs(int p_id) { List<StringName> available_addons = get_available_vcs_names(); const StringName selected_vcs = set_up_choice->get_item_text(p_id); - - if (available_addons.find(selected_vcs) != NULL) { - - set_up_init_button->set_disabled(false); - } else { - - set_up_init_button->set_disabled(true); - } } void VersionControlEditorPlugin::_populate_available_vcs_names() { @@ -75,9 +67,6 @@ void VersionControlEditorPlugin::_populate_available_vcs_names() { if (!called) { - set_up_choice->add_item("Select an available VCS"); - - fetch_available_vcs_addon_names(); List<StringName> available_addons = get_available_vcs_names(); for (int i = 0; i < available_addons.size(); i++) { @@ -95,19 +84,22 @@ VersionControlEditorPlugin *VersionControlEditorPlugin::get_singleton() { void VersionControlEditorPlugin::popup_vcs_set_up_dialog(const Control *p_gui_base) { - Size2 popup_size = Size2(400, 100); - Size2 window_size = p_gui_base->get_viewport_rect().size; - popup_size.x = MIN(window_size.x * 0.5, popup_size.x); - popup_size.y = MIN(window_size.y * 0.5, popup_size.y); + fetch_available_vcs_addon_names(); + List<StringName> available_addons = get_available_vcs_names(); + if (available_addons.size() >= 1) { - if (get_is_vcs_intialized()) { + Size2 popup_size = Size2(400, 100); + Size2 window_size = p_gui_base->get_viewport_rect().size; + popup_size.x = MIN(window_size.x * 0.5, popup_size.x); + popup_size.y = MIN(window_size.y * 0.5, popup_size.y); - set_up_init_button->set_disabled(true); - } + _populate_available_vcs_names(); - _populate_available_vcs_names(); + set_up_dialog->popup_centered_clamped(popup_size * EDSCALE); + } else { - set_up_dialog->popup_centered_clamped(popup_size * EDSCALE); + EditorNode::get_singleton()->show_warning(TTR("No VCS addons are available."), TTR("Error")); + } } void VersionControlEditorPlugin::_initialize_vcs() { @@ -120,7 +112,7 @@ void VersionControlEditorPlugin::_initialize_vcs() { return; } - int id = set_up_choice->get_selected_id(); + const int id = set_up_choice->get_selected_id(); String selected_addon = set_up_choice->get_item_text(id); String path = ScriptServer::get_global_class_path(selected_addon); @@ -381,7 +373,20 @@ void VersionControlEditorPlugin::register_editor() { void VersionControlEditorPlugin::fetch_available_vcs_addon_names() { - ScriptServer::get_global_class_list(&available_addons); + List<StringName> global_classes; + ScriptServer::get_global_class_list(&global_classes); + + for (int i = 0; i != global_classes.size(); i++) { + + String path = ScriptServer::get_global_class_path(global_classes[i]); + Ref<Script> script = ResourceLoader::load(path); + ERR_FAIL_COND(script.is_null()); + + if (script->get_instance_base_type() == "EditorVCSInterface") { + + available_addons.push_back(global_classes[i]); + } + } } void VersionControlEditorPlugin::clear_stage_area() { @@ -392,8 +397,9 @@ void VersionControlEditorPlugin::clear_stage_area() { void VersionControlEditorPlugin::shut_down() { if (EditorVCSInterface::get_singleton()) { - - EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "_refresh_stage_area"); + if (EditorFileSystem::get_singleton()->is_connected("filesystem_changed", this, "_refresh_stage_area")) { + EditorFileSystem::get_singleton()->disconnect("filesystem_changed", this, "_refresh_stage_area"); + } EditorVCSInterface::get_singleton()->shut_down(); memdelete(EditorVCSInterface::get_singleton()); EditorVCSInterface::set_singleton(NULL); @@ -427,7 +433,6 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { version_control_actions->add_child(set_up_dialog); set_up_ok_button = set_up_dialog->get_ok(); - set_up_ok_button->set_disabled(false); set_up_ok_button->set_text(TTR("Close")); set_up_vbc = memnew(VBoxContainer); @@ -454,7 +459,6 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { set_up_init_settings = NULL; set_up_init_button = memnew(Button); - set_up_init_button->set_disabled(true); set_up_init_button->set_text(TTR("Initialize")); set_up_init_button->connect("pressed", this, "_initialize_vcs"); set_up_vbc->add_child(set_up_init_button); @@ -564,7 +568,7 @@ VersionControlEditorPlugin::VersionControlEditorPlugin() { diff_heading = memnew(Label); diff_heading->set_text(TTR("Status")); - diff_heading->set_tooltip(TTR("View file diffs before commiting them to the latest version")); + diff_heading->set_tooltip(TTR("View file diffs before committing them to the latest version")); diff_hbc->add_child(diff_heading); diff_file_name = memnew(Label); diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp index 82baa99da2..90eb3045df 100644 --- a/editor/plugins/visual_shader_editor_plugin.cpp +++ b/editor/plugins/visual_shader_editor_plugin.cpp @@ -88,7 +88,6 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) { } else { if (changed) { // to avoid tree collapse _clear_buffer(); - _update_custom_nodes(); _update_options_menu(); _update_preview(); } @@ -110,11 +109,12 @@ void VisualShaderEditor::clear_custom_types() { for (int i = 0; i < add_options.size(); i++) { if (add_options[i].is_custom) { add_options.remove(i); + i--; } } } -void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_sub_category) { +void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory) { ERR_FAIL_COND(!p_name.is_valid_identifier()); ERR_FAIL_COND(!p_script.is_valid()); @@ -132,9 +132,25 @@ void VisualShaderEditor::add_custom_type(const String &p_name, const Ref<Script> ao.return_type = p_return_icon_type; ao.description = p_description; ao.category = p_category; - ao.sub_category = p_sub_category; + ao.sub_category = p_subcategory; ao.is_custom = true; + bool begin = false; + + for (int i = 0; i < add_options.size(); i++) { + if (add_options[i].is_custom) { + if (add_options[i].category == p_category) { + if (!begin) { + begin = true; + } + } else { + if (begin) { + add_options.insert(i, ao); + return; + } + } + } + } add_options.push_back(ao); } @@ -178,10 +194,14 @@ bool VisualShaderEditor::_is_available(int p_mode) { return (p_mode == -1 || (p_mode & current_mode) != 0); } -void VisualShaderEditor::_update_custom_nodes() { +void VisualShaderEditor::update_custom_nodes() { + if (members_dialog->is_visible()) { + return; + } clear_custom_types(); List<StringName> class_list; ScriptServer::get_global_class_list(&class_list); + Dictionary added; for (int i = 0; i < class_list.size(); i++) { if (ScriptServer::get_global_class_native_base(class_list[i]) == "VisualShaderNodeCustom") { @@ -220,14 +240,45 @@ void VisualShaderEditor::_update_custom_nodes() { category = "Custom"; } - String sub_category = ""; + String subcategory = ""; if (ref->has_method("_get_subcategory")) { - sub_category = (String)ref->call("_get_subcategory"); + subcategory = (String)ref->call("_get_subcategory"); } - add_custom_type(name, script, description, return_icon_type, category, sub_category); + Dictionary dict; + dict["name"] = name; + dict["script"] = script; + dict["description"] = description; + dict["return_icon_type"] = return_icon_type; + dict["category"] = category; + dict["subcategory"] = subcategory; + + String key; + key = category; + key += "/"; + if (subcategory != "") { + key += subcategory; + key += "/"; + } + key += name; + + added[key] = dict; } } + + Array keys = added.keys(); + keys.sort(); + + for (int i = 0; i < keys.size(); i++) { + + const Variant &key = keys.get(i); + + const Dictionary &value = (Dictionary)added[key]; + + add_custom_type(value["name"], value["script"], value["description"], value["return_icon_type"], value["category"], value["subcategory"]); + } + + _update_options_menu(); } String VisualShaderEditor::_get_description(int p_idx) { @@ -359,8 +410,8 @@ void VisualShaderEditor::_update_options_menu() { case VisualShaderNode::PORT_TYPE_TRANSFORM: item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons")); break; - case VisualShaderNode::PORT_TYPE_ICON_COLOR: - item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("Color", "EditorIcons")); + case VisualShaderNode::PORT_TYPE_SAMPLER: + item->set_icon(0, EditorNode::get_singleton()->get_gui_base()->get_icon("ImageTexture", "EditorIcons")); break; default: break; @@ -437,11 +488,12 @@ void VisualShaderEditor::_update_graph() { } } - static const Color type_color[4] = { + static const Color type_color[5] = { Color(0.38, 0.85, 0.96), // scalar Color(0.84, 0.49, 0.93), // vector Color(0.55, 0.65, 0.94), // boolean - Color(0.96, 0.66, 0.43) // transform + Color(0.96, 0.66, 0.43), // transform + Color(1.0, 1.0, 0.0) // sampler }; List<VisualShader::Connection> connections; @@ -546,14 +598,14 @@ void VisualShaderEditor::_update_graph() { HBoxContainer *hb2 = memnew(HBoxContainer); Button *add_input_btn = memnew(Button); - add_input_btn->set_text(TTR("Add input +")); + add_input_btn->set_text(TTR("Add Input")); add_input_btn->connect("pressed", this, "_add_input_port", varray(nodes[n_i], group_node->get_free_input_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "input" + itos(group_node->get_free_input_port_id())), CONNECT_DEFERRED); hb2->add_child(add_input_btn); hb2->add_spacer(); Button *add_output_btn = memnew(Button); - add_output_btn->set_text(TTR("Add output +")); + add_output_btn->set_text(TTR("Add Output")); add_output_btn->connect("pressed", this, "_add_output_port", varray(nodes[n_i], group_node->get_free_output_port_id(), VisualShaderNode::PORT_TYPE_VECTOR, "output" + itos(group_node->get_free_output_port_id())), CONNECT_DEFERRED); hb2->add_child(add_output_btn); @@ -640,6 +692,7 @@ void VisualShaderEditor::_update_graph() { type_box->add_item(TTR("Vector")); type_box->add_item(TTR("Boolean")); type_box->add_item(TTR("Transform")); + type_box->add_item(TTR("Sampler")); type_box->select(group_node->get_input_port_type(i)); type_box->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); type_box->connect("item_selected", this, "_change_input_port_type", varray(nodes[n_i], i), CONNECT_DEFERRED); @@ -663,6 +716,15 @@ void VisualShaderEditor::_update_graph() { label->set_text(name_left); label->add_style_override("normal", label_style); //more compact hb->add_child(label); + + if (vsnode->get_input_port_default_hint(i) != "" && !port_left_used) { + + Label *hint_label = memnew(Label); + hint_label->set_text("[" + vsnode->get_input_port_default_hint(i) + "]"); + hint_label->add_color_override("font_color", get_color("font_color_readonly", "TextEdit")); + hint_label->add_style_override("normal", label_style); + hb->add_child(hint_label); + } } } @@ -704,7 +766,7 @@ void VisualShaderEditor::_update_graph() { } } - if (valid_right && edit_type->get_selected() == VisualShader::TYPE_FRAGMENT && port_right != VisualShaderNode::PORT_TYPE_TRANSFORM) { + if (valid_right && edit_type->get_selected() == VisualShader::TYPE_FRAGMENT && port_right != VisualShaderNode::PORT_TYPE_TRANSFORM && port_right != VisualShaderNode::PORT_TYPE_SAMPLER) { TextureButton *preview = memnew(TextureButton); preview->set_toggle_mode(true); preview->set_normal_texture(get_icon("GuiVisibilityHidden", "EditorIcons")); @@ -731,15 +793,19 @@ void VisualShaderEditor::_update_graph() { node->set_slot(i + port_offset, valid_left, port_left, type_color[port_left], valid_right, port_right, type_color[port_right]); } - if (vsnode->get_output_port_for_preview() >= 0 && vsnode->get_output_port_type(vsnode->get_output_port_for_preview()) != VisualShaderNode::PORT_TYPE_TRANSFORM) { - offset = memnew(Control); - offset->set_custom_minimum_size(Size2(0, 5 * EDSCALE)); - node->add_child(offset); + if (vsnode->get_output_port_for_preview() >= 0) { + int port_type = vsnode->get_output_port_type(vsnode->get_output_port_for_preview()); + + if (port_type != VisualShaderNode::PORT_TYPE_TRANSFORM && port_type != VisualShaderNode::PORT_TYPE_SAMPLER) { + offset = memnew(Control); + offset->set_custom_minimum_size(Size2(0, 5 * EDSCALE)); + node->add_child(offset); - VisualShaderNodePortPreview *port_preview = memnew(VisualShaderNodePortPreview); - port_preview->setup(visual_shader, type, nodes[n_i], vsnode->get_output_port_for_preview()); - port_preview->set_h_size_flags(SIZE_SHRINK_CENTER); - node->add_child(port_preview); + VisualShaderNodePortPreview *port_preview = memnew(VisualShaderNodePortPreview); + port_preview->setup(visual_shader, type, nodes[n_i], vsnode->get_output_port_for_preview()); + port_preview->set_h_size_flags(SIZE_SHRINK_CENTER); + node->add_child(port_preview); + } } offset = memnew(Control); @@ -1213,9 +1279,31 @@ void VisualShaderEditor::_edit_port_default_input(Object *p_button, int p_node, editing_port = p_port; } -void VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { +void VisualShaderEditor::_add_custom_node(const String &p_path) { + + int idx = -1; + + for (int i = custom_node_option_idx; i < add_options.size(); i++) { + if (add_options[i].script.is_valid()) { + if (add_options[i].script->get_path() == p_path) { + idx = i; + break; + } + } + } + if (idx != -1) { + _add_node(idx); + } +} + +void VisualShaderEditor::_add_texture_node(const String &p_path) { + VisualShaderNodeTexture *texture = (VisualShaderNodeTexture *)_add_node(texture_node_option_idx, -1); + texture->set_texture(ResourceLoader::load(p_path)); +} + +VisualShaderNode *VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { - ERR_FAIL_INDEX(p_idx, add_options.size()); + ERR_FAIL_INDEX_V(p_idx, add_options.size(), NULL); Ref<VisualShaderNode> vsnode; @@ -1223,7 +1311,7 @@ void VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { if (!is_custom && add_options[p_idx].type != String()) { VisualShaderNode *vsn = Object::cast_to<VisualShaderNode>(ClassDB::instance(add_options[p_idx].type)); - ERR_FAIL_COND(!vsn); + ERR_FAIL_COND_V(!vsn, NULL); VisualShaderNodeScalarConstant *constant = Object::cast_to<VisualShaderNodeScalarConstant>(vsn); @@ -1309,10 +1397,10 @@ void VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { vsnode = Ref<VisualShaderNode>(vsn); } else { - ERR_FAIL_COND(add_options[p_idx].script.is_null()); + ERR_FAIL_COND_V(add_options[p_idx].script.is_null(), NULL); String base_type = add_options[p_idx].script->get_instance_base_type(); VisualShaderNode *vsn = Object::cast_to<VisualShaderNode>(ClassDB::instance(base_type)); - ERR_FAIL_COND(!vsn); + ERR_FAIL_COND_V(!vsn, NULL); vsnode = Ref<VisualShaderNode>(vsn); vsnode->set_script(add_options[p_idx].script.get_ref_ptr()); } @@ -1367,6 +1455,7 @@ void VisualShaderEditor::_add_node(int p_idx, int p_op_idx) { undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); + return vsnode.ptr(); } void VisualShaderEditor::_node_dragged(const Vector2 &p_from, const Vector2 &p_to, int p_node) { @@ -2038,6 +2127,9 @@ bool VisualShaderEditor::can_drop_data_fw(const Point2 &p_point, const Variant & if (d.has("id")) { return true; } + if (d.has("files")) { + return true; + } } return false; @@ -2054,6 +2146,30 @@ void VisualShaderEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da saved_node_pos = p_point; saved_node_pos_dirty = true; _add_node(idx, add_options[idx].sub_func); + } else if (d.has("files")) { + if (d["files"].get_type() == Variant::POOL_STRING_ARRAY) { + + int j = 0; + PoolStringArray arr = d["files"]; + for (int i = 0; i < arr.size(); i++) { + + String type = ResourceLoader::get_resource_type(arr[i]); + if (type == "GDScript") { + Ref<Script> script = ResourceLoader::load(arr[i]); + if (script->get_instance_base_type() == "VisualShaderNodeCustom") { + saved_node_pos = p_point + Vector2(0, j * 210 * EDSCALE); + saved_node_pos_dirty = true; + _add_custom_node(arr[i]); + j++; + } + } else if (ClassDB::get_parent_class(type) == "Texture") { + saved_node_pos = p_point + Vector2(0, j * 210 * EDSCALE); + saved_node_pos_dirty = true; + _add_texture_node(arr[i]); + j++; + } + } + } } } } @@ -2191,6 +2307,7 @@ VisualShaderEditor::VisualShaderEditor() { graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_BOOLEAN); graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_VECTOR); graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_TRANSFORM); + graph->add_valid_right_disconnect_type(VisualShaderNode::PORT_TYPE_SAMPLER); //graph->add_valid_left_disconnect_type(0); graph->set_v_size_flags(SIZE_EXPAND_FILL); graph->connect("connection_request", this, "_connection_request", varray(), CONNECT_DEFERRED); @@ -2214,6 +2331,7 @@ VisualShaderEditor::VisualShaderEditor() { graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_VECTOR); graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShaderNode::PORT_TYPE_BOOLEAN); graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShaderNode::PORT_TYPE_TRANSFORM); + graph->add_valid_connection_type(VisualShaderNode::PORT_TYPE_SAMPLER, VisualShaderNode::PORT_TYPE_SAMPLER); VSeparator *vs = memnew(VSeparator); graph->get_zoom_hbox()->add_child(vs); @@ -2350,8 +2468,8 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Screen", "Color", "Operators", "VisualShaderNodeColorOp", TTR("Screen operator."), VisualShaderNodeColorOp::OP_SCREEN, VisualShaderNode::PORT_TYPE_VECTOR)); add_options.push_back(AddOption("SoftLight", "Color", "Operators", "VisualShaderNodeColorOp", TTR("SoftLight operator."), VisualShaderNodeColorOp::OP_SOFT_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR)); - add_options.push_back(AddOption("ColorConstant", "Color", "Variables", "VisualShaderNodeColorConstant", TTR("Color constant."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); - add_options.push_back(AddOption("ColorUniform", "Color", "Variables", "VisualShaderNodeColorUniform", TTR("Color uniform."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); + add_options.push_back(AddOption("ColorConstant", "Color", "Variables", "VisualShaderNodeColorConstant", TTR("Color constant."), -1, -1)); + add_options.push_back(AddOption("ColorUniform", "Color", "Variables", "VisualShaderNodeColorUniform", TTR("Color uniform."), -1, -1)); // CONDITIONAL @@ -2413,9 +2531,11 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("Alpha", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "alpha"), "alpha", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Binormal", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "binormal"), "binormal", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Color", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "color"), "color", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("DepthTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "depth_texture"), "depth_texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("FragCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("FrontFacing", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "front_facing"), "front_facing", VisualShaderNode::PORT_TYPE_BOOLEAN, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("PointCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("ScreenTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_texture"), "screen_texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("ScreenUV", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Side", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "side"), "side", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); add_options.push_back(AddOption("Tangent", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "tangent"), "tangent", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_SPATIAL)); @@ -2449,9 +2569,12 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("FragCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightPass", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("NormalTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "normal_texture"), "normal_texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("PointCoord", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenPixelSize", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_pixel_size"), "screen_pixel_size", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("ScreenTexture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_shader_mode, "screen_texture"), "screen_texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Texture", "Input", "Fragment", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_FRAGMENT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("FragCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "fragcoord"), "fragcoord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightAlpha", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "light_alpha"), "light_alpha", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); @@ -2463,6 +2586,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("PointCoord", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "point_coord"), "point_coord", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ScreenUV", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "screen_uv"), "screen_uv", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("ShadowColor", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_light_shader_mode, "shadow_color"), "shadow_color", VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); + add_options.push_back(AddOption("Texture", "Input", "Light", "VisualShaderNodeInput", vformat(input_param_for_fragment_and_light_shader_modes, "texture"), "texture", VisualShaderNode::PORT_TYPE_SAMPLER, VisualShader::TYPE_LIGHT, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("Extra", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_shader_mode, "extra"), "extra", VisualShaderNode::PORT_TYPE_TRANSFORM, VisualShader::TYPE_VERTEX, Shader::MODE_CANVAS_ITEM)); add_options.push_back(AddOption("LightPass", "Input", "Vertex", "VisualShaderNodeInput", vformat(input_param_for_vertex_and_fragment_shader_modes, "light_pass"), "light_pass", VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_VERTEX, Shader::MODE_CANVAS_ITEM)); @@ -2557,12 +2681,13 @@ VisualShaderEditor::VisualShaderEditor() { // TEXTURES - add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubeMap", TTR("Perform the cubic texture lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); - add_options.push_back(AddOption("Texture", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); + add_options.push_back(AddOption("CubeMap", "Textures", "Functions", "VisualShaderNodeCubeMap", TTR("Perform the cubic texture lookup."), -1, -1)); + texture_node_option_idx = add_options.size(); + add_options.push_back(AddOption("Texture", "Textures", "Functions", "VisualShaderNodeTexture", TTR("Perform the texture lookup."), -1, -1)); - add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubeMapUniform", TTR("Cubic texture uniform lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); - add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR)); - add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, VisualShaderNode::PORT_TYPE_ICON_COLOR, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL)); + add_options.push_back(AddOption("CubeMapUniform", "Textures", "Variables", "VisualShaderNodeCubeMapUniform", TTR("Cubic texture uniform lookup."), -1, -1)); + add_options.push_back(AddOption("TextureUniform", "Textures", "Variables", "VisualShaderNodeTextureUniform", TTR("2D texture uniform lookup."), -1, -1)); + add_options.push_back(AddOption("TextureUniformTriplanar", "Textures", "Variables", "VisualShaderNodeTextureUniformTriplanar", TTR("2D texture uniform lookup with triplanar."), -1, -1, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, Shader::MODE_SPATIAL)); // TRANSFORM @@ -2666,6 +2791,7 @@ VisualShaderEditor::VisualShaderEditor() { add_options.push_back(AddOption("DdYS", "Special", "Derivative", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Derivative in 'y' using local differencing."), VisualShaderNodeScalarDerivativeFunc::FUNC_Y, VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, -1, -1, true)); add_options.push_back(AddOption("Sum", "Special", "Derivative", "VisualShaderNodeVectorDerivativeFunc", TTR("(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and 'y'."), VisualShaderNodeVectorDerivativeFunc::FUNC_SUM, VisualShaderNode::PORT_TYPE_VECTOR, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, -1, -1, true)); add_options.push_back(AddOption("SumS", "Special", "Derivative", "VisualShaderNodeScalarDerivativeFunc", TTR("(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and 'y'."), VisualShaderNodeScalarDerivativeFunc::FUNC_SUM, VisualShaderNode::PORT_TYPE_SCALAR, VisualShader::TYPE_FRAGMENT | VisualShader::TYPE_LIGHT, -1, -1, true)); + custom_node_option_idx = add_options.size(); ///////////////////////////////////////////////////////////////////// @@ -2707,6 +2833,7 @@ void VisualShaderEditorPlugin::make_visible(bool p_visible) { //editor->animation_panel_make_visible(true); button->show(); editor->make_bottom_panel_item_visible(visual_shader_editor); + visual_shader_editor->update_custom_nodes(); visual_shader_editor->set_process_input(true); //visual_shader_editor->set_process(true); } else { @@ -2757,11 +2884,12 @@ public: void setup(const Ref<VisualShaderNodeInput> &p_input) { input = p_input; - Ref<Texture> type_icon[4] = { + Ref<Texture> type_icon[5] = { EditorNode::get_singleton()->get_gui_base()->get_icon("float", "EditorIcons"), EditorNode::get_singleton()->get_gui_base()->get_icon("Vector3", "EditorIcons"), EditorNode::get_singleton()->get_gui_base()->get_icon("bool", "EditorIcons"), EditorNode::get_singleton()->get_gui_base()->get_icon("Transform", "EditorIcons"), + EditorNode::get_singleton()->get_gui_base()->get_icon("ImageTexture", "EditorIcons"), }; add_item("[None]"); diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h index cd5efc366b..5197f8c77f 100644 --- a/editor/plugins/visual_shader_editor_plugin.h +++ b/editor/plugins/visual_shader_editor_plugin.h @@ -137,6 +137,7 @@ class VisualShaderEditor : public VBoxContainer { category = p_category; sub_category = p_sub_category; description = p_description; + sub_func = 0; sub_func_str = p_sub_func; return_type = p_return_type; mode = p_mode; @@ -148,12 +149,15 @@ class VisualShaderEditor : public VBoxContainer { }; Vector<AddOption> add_options; + int texture_node_option_idx; + int custom_node_option_idx; List<String> keyword_list; void _draw_color_over_button(Object *obj, Color p_color); - void _add_node(int p_idx, int p_op_idx = -1); - void _update_custom_nodes(); + void _add_custom_node(const String &p_path); + void _add_texture_node(const String &p_path); + VisualShaderNode *_add_node(int p_idx, int p_op_idx = -1); void _update_options_menu(); void _show_preview_text(); @@ -253,13 +257,14 @@ protected: static void _bind_methods(); public: + void update_custom_nodes(); void add_plugin(const Ref<VisualShaderNodePlugin> &p_plugin); void remove_plugin(const Ref<VisualShaderNodePlugin> &p_plugin); static VisualShaderEditor *get_singleton() { return singleton; } void clear_custom_types(); - void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_sub_category); + void add_custom_type(const String &p_name, const Ref<Script> &p_script, const String &p_description, int p_return_icon_type, const String &p_category, const String &p_subcategory); virtual Size2 get_minimum_size() const; void edit(VisualShader *p_visual_shader); diff --git a/editor/progress_dialog.cpp b/editor/progress_dialog.cpp index 8dac5fa6b5..04b863f3aa 100644 --- a/editor/progress_dialog.cpp +++ b/editor/progress_dialog.cpp @@ -38,7 +38,7 @@ void BackgroundProgress::_add_task(const String &p_task, const String &p_label, int p_steps) { _THREAD_SAFE_METHOD_ - ERR_FAIL_COND(tasks.has(p_task)); + ERR_FAIL_COND_MSG(tasks.has(p_task), "Task '" + p_task + "' already exists."); BackgroundProgress::Task t; t.hb = memnew(HBoxContainer); Label *l = memnew(Label); @@ -172,7 +172,7 @@ void ProgressDialog::add_task(const String &p_task, const String &p_label, int p return; } - ERR_FAIL_COND(tasks.has(p_task)); + ERR_FAIL_COND_MSG(tasks.has(p_task), "Task '" + p_task + "' already exists."); ProgressDialog::Task t; t.vb = memnew(VBoxContainer); VBoxContainer *vb2 = memnew(VBoxContainer); diff --git a/editor/project_export.cpp b/editor/project_export.cpp index c54103f6f7..adcbddfb04 100644 --- a/editor/project_export.cpp +++ b/editor/project_export.cpp @@ -286,11 +286,13 @@ void ProjectExportDialog::_edit_preset(int p_index) { export_templates_error->hide(); export_button->set_disabled(true); + get_ok()->set_disabled(true); } else { export_error->hide(); export_templates_error->hide(); export_button->set_disabled(false); + get_ok()->set_disabled(false); } custom_features->set_text(current->get_custom_features()); @@ -623,6 +625,7 @@ void ProjectExportDialog::_delete_preset_confirm() { int idx = presets->get_current(); _edit_preset(-1); export_button->set_disabled(true); + get_ok()->set_disabled(true); EditorExport::get_singleton()->remove_export_preset(idx); _update_presets(); } @@ -1149,11 +1152,15 @@ ProjectExportDialog::ProjectExportDialog() { include_files->connect("item_edited", this, "_tree_changed"); include_filters = memnew(LineEdit); - resources_vb->add_margin_child(TTR("Filters to export non-resource files (comma separated, e.g: *.json, *.txt)"), include_filters); + resources_vb->add_margin_child( + TTR("Filters to export non-resource files/folders\n(comma-separated, e.g: *.json, *.txt, docs/*)"), + include_filters); include_filters->connect("text_changed", this, "_filter_changed"); exclude_filters = memnew(LineEdit); - resources_vb->add_margin_child(TTR("Filters to exclude files from project (comma separated, e.g: *.json, *.txt)"), exclude_filters); + resources_vb->add_margin_child( + TTR("Filters to exclude files/folders from project\n(comma-separated, e.g: *.json, *.txt, docs/*)"), + exclude_filters); exclude_filters->connect("text_changed", this, "_filter_changed"); VBoxContainer *patch_vb = memnew(VBoxContainer); @@ -1245,6 +1252,7 @@ ProjectExportDialog::ProjectExportDialog() { export_button->connect("pressed", this, "_export_project"); // Disable initially before we select a valid preset export_button->set_disabled(true); + get_ok()->set_disabled(true); export_all_dialog = memnew(ConfirmationDialog); add_child(export_all_dialog); diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp index c6e3dc1e32..ab62a59be1 100644 --- a/editor/project_manager.cpp +++ b/editor/project_manager.cpp @@ -928,16 +928,36 @@ public: TextureButton *favorite_button; TextureRect *icon; bool icon_needs_reload; + bool hover; ProjectListItemControl() { favorite_button = NULL; icon = NULL; icon_needs_reload = true; + hover = false; } void set_is_favorite(bool fav) { favorite_button->set_modulate(fav ? Color(1, 1, 1, 1) : Color(1, 1, 1, 0.2)); } + + void _notification(int p_what) { + switch (p_what) { + case NOTIFICATION_MOUSE_ENTER: { + hover = true; + update(); + } break; + case NOTIFICATION_MOUSE_EXIT: { + hover = false; + update(); + } break; + case NOTIFICATION_DRAW: { + if (hover) { + draw_style_box(get_stylebox("hover", "Tree"), Rect2(Point2(), get_size() - Size2(10, 0) * EDSCALE)); + } + } break; + } + } }; class ProjectList : public ScrollContainer { @@ -1003,6 +1023,7 @@ public: ProjectList(); ~ProjectList(); + void update_dock_menu(); void load_projects(); void set_search_term(String p_search_term); void set_order_option(ProjectListFilter::FilterOption p_option); @@ -1190,7 +1211,6 @@ void ProjectList::load_projects() { _projects.clear(); _last_clicked = ""; _selected_project_keys.clear(); - OS::get_singleton()->global_menu_clear("_dock"); // Load data // TODO Would be nice to change how projects and favourites are stored... it complicates things a bit. @@ -1228,14 +1248,38 @@ void ProjectList::load_projects() { create_project_item_control(i); } - OS::get_singleton()->global_menu_add_separator("_dock"); - OS::get_singleton()->global_menu_add_item("_dock", TTR("New Window"), GLOBAL_NEW_WINDOW, Variant()); - sort_projects(); set_v_scroll(0); update_icons_async(); + + update_dock_menu(); +} + +void ProjectList::update_dock_menu() { + OS::get_singleton()->global_menu_clear("_dock"); + + int favs_added = 0; + int total_added = 0; + for (int i = 0; i < _projects.size(); ++i) { + if (!_projects[i].grayed && !_projects[i].missing) { + if (_projects[i].favorite) { + favs_added++; + } else { + if (favs_added != 0) { + OS::get_singleton()->global_menu_add_separator("_dock"); + } + favs_added = 0; + } + OS::get_singleton()->global_menu_add_item("_dock", _projects[i].project_name + " ( " + _projects[i].path + " )", GLOBAL_OPEN_PROJECT, Variant(_projects[i].path.plus_file("project.godot"))); + total_added++; + } + } + if (total_added != 0) { + OS::get_singleton()->global_menu_add_separator("_dock"); + } + OS::get_singleton()->global_menu_add_item("_dock", TTR("New Window"), GLOBAL_NEW_WINDOW, Variant()); } void ProjectList::create_project_item_control(int p_index) { @@ -1260,6 +1304,8 @@ void ProjectList::create_project_item_control(int p_index) { TextureButton *favorite = memnew(TextureButton); favorite->set_name("FavoriteButton"); favorite->set_normal_texture(favorite_icon); + // This makes the project's "hover" style display correctly when hovering the favorite icon + favorite->set_mouse_filter(MOUSE_FILTER_PASS); favorite->connect("pressed", this, "_favorite_pressed", varray(hb)); favorite_box->add_child(favorite); favorite_box->set_alignment(BoxContainer::ALIGN_CENTER); @@ -1319,7 +1365,6 @@ void ProjectList::create_project_item_control(int p_index) { fpath->set_clip_text(true); _scroll_children->add_child(hb); - OS::get_singleton()->global_menu_add_item("_dock", item.project_name + " ( " + item.path + " )", GLOBAL_OPEN_PROJECT, Variant(item.path.plus_file("project.godot"))); item.control = hb; } @@ -1372,6 +1417,8 @@ void ProjectList::sort_projects() { // Rewind the coroutine because order of projects changed update_icons_async(); + + update_dock_menu(); } const Set<String> &ProjectList::get_selected_project_keys() const { @@ -1448,6 +1495,8 @@ void ProjectList::remove_project(int p_index, bool p_update_settings) { EditorSettings::get_singleton()->erase("favorite_projects/" + item.project_key); // Not actually saving the file, in case you are doing more changes to settings } + + update_dock_menu(); } bool ProjectList::is_any_project_missing() const { @@ -1546,6 +1595,7 @@ int ProjectList::refresh_project(const String &dir_path) { ensure_project_visible(i); } load_project_icon(i); + index = i; break; } @@ -1620,6 +1670,8 @@ void ProjectList::erase_selected_projects() { _selected_project_keys.clear(); _last_clicked = ""; + + update_dock_menu(); } // Draws selected project highlight @@ -1667,7 +1719,7 @@ void ProjectList::_panel_input(const Ref<InputEvent> &p_ev, Node *p_hb) { emit_signal(SIGNAL_SELECTION_CHANGED); - if (mb->is_doubleclick()) { + if (!mb->get_control() && mb->is_doubleclick()) { emit_signal(SIGNAL_PROJECT_ASK_OPEN); } } @@ -1703,6 +1755,8 @@ void ProjectList::_favorite_pressed(Node *p_hb) { } } } + + update_dock_menu(); } void ProjectList::_show_project(const String &p_path) { @@ -1731,10 +1785,22 @@ void ProjectManager::_notification(int p_what) { Engine::get_singleton()->set_editor_hint(false); } break; + case NOTIFICATION_RESIZED: { + + if (open_templates->is_visible()) { + open_templates->popup_centered_minsize(); + } + } break; case NOTIFICATION_READY: { if (_project_list->get_project_count() == 0 && StreamPeerSSL::is_available()) open_templates->popup_centered_minsize(); + + if (_project_list->get_project_count() >= 1) { + // Focus on the search box immediately to allow the user + // to search without having to reach for their mouse + project_filter->search_box->grab_focus(); + } } break; case NOTIFICATION_VISIBILITY_CHANGED: { @@ -1895,6 +1961,8 @@ void ProjectManager::_on_projects_updated() { if (index != -1) { _project_list->ensure_project_visible(index); } + + _project_list->update_dock_menu(); } void ProjectManager::_on_project_created(const String &dir) { @@ -1903,6 +1971,8 @@ void ProjectManager::_on_project_created(const String &dir) { _project_list->select_project(i); _project_list->ensure_project_visible(i); _open_selected_projects_ask(); + + _project_list->update_dock_menu(); } void ProjectManager::_confirm_update_settings() { diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index a0d2332ffc..9ac775e456 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -74,6 +74,26 @@ static const char *_axis_names[JOY_AXIS_MAX * 2] = { "", " (R2)" }; +void ProjectSettingsEditor::_unhandled_input(const Ref<InputEvent> &p_event) { + + const Ref<InputEventKey> k = p_event; + + if (k.is_valid() && is_window_modal_on_top() && k->is_pressed()) { + + if (k->get_scancode_with_modifiers() == (KEY_MASK_CMD | KEY_F)) { + if (search_button->is_pressed()) { + search_box->grab_focus(); + search_box->select_all(); + } else { + // This toggles the search bar display while giving the button its "pressed" appearance + search_button->set_pressed(true); + } + + accept_event(); + } + } +} + void ProjectSettingsEditor::_notification(int p_what) { switch (p_what) { @@ -116,6 +136,7 @@ void ProjectSettingsEditor::_notification(int p_what) { } break; case NOTIFICATION_POPUP_HIDE: { EditorSettings::get_singleton()->set_project_metadata("dialog_bounds", "project_settings", get_rect()); + set_process_unhandled_input(false); } break; case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { search_button->set_icon(get_icon("Search", "EditorIcons")); @@ -421,15 +442,7 @@ void ProjectSettingsEditor::_wait_for_key(const Ref<InputEvent> &p_event) { if (k.is_valid() && k->is_pressed() && k->get_scancode() != 0) { last_wait_for_key = p_event; - String str = keycode_get_string(k->get_scancode()).capitalize(); - if (k->get_metakey()) - str = vformat("%s+", find_keycode_name(KEY_META)) + str; - if (k->get_shift()) - str = TTR("Shift+") + str; - if (k->get_alt()) - str = TTR("Alt+") + str; - if (k->get_control()) - str = TTR("Control+") + str; + const String str = keycode_get_string(k->get_scancode_with_modifiers()); press_a_key_label->set_text(str); press_a_key->accept_event(); @@ -719,15 +732,7 @@ void ProjectSettingsEditor::_update_actions() { Ref<InputEventKey> k = event; if (k.is_valid()) { - String str = keycode_get_string(k->get_scancode()).capitalize(); - if (k->get_metakey()) - str = vformat("%s+", find_keycode_name(KEY_META)) + str; - if (k->get_shift()) - str = TTR("Shift+") + str; - if (k->get_alt()) - str = TTR("Alt+") + str; - if (k->get_control()) - str = TTR("Control+") + str; + const String str = keycode_get_string(k->get_scancode_with_modifiers()); action2->set_text(0, str); action2->set_icon(0, get_icon("Keyboard", "EditorIcons")); @@ -800,6 +805,7 @@ void ProjectSettingsEditor::popup_project_settings() { _update_translations(); autoload_settings->update_autoload(); plugin_settings->update_plugins(); + set_process_unhandled_input(true); } void ProjectSettingsEditor::update_plugins() { @@ -823,13 +829,10 @@ void ProjectSettingsEditor::_item_adds(String) { void ProjectSettingsEditor::_item_add() { - Variant value; - switch (type->get_selected()) { - case 0: value = false; break; - case 1: value = 0; break; - case 2: value = 0.0; break; - case 3: value = ""; break; - } + // Initialize the property with the default value for the given type. + // The type list starts at 1 (as we exclude Nil), so add 1 to the selected value. + Variant::CallError ce; + const Variant value = Variant::construct(Variant::Type(type->get_selected() + 1), NULL, 0, ce); String catname = category->get_text().strip_edges(); String propname = property->get_text().strip_edges(); @@ -1007,8 +1010,12 @@ void ProjectSettingsEditor::_copy_to_platform_about_to_show() { presets.insert("pvrtc"); presets.insert("debug"); presets.insert("release"); + presets.insert("editor"); + presets.insert("standalone"); presets.insert("32"); presets.insert("64"); + // Not available as an export platform yet, so it needs to be added manually + presets.insert("Server"); for (int i = 0; i < EditorExport::get_singleton()->get_export_platform_count(); i++) { List<String> p; @@ -1043,6 +1050,86 @@ void ProjectSettingsEditor::_copy_to_platform_about_to_show() { } } +Variant ProjectSettingsEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { + + TreeItem *selected = input_editor->get_selected(); + if (!selected || selected->get_parent() != input_editor->get_root()) + return Variant(); + + String name = selected->get_text(0); + VBoxContainer *vb = memnew(VBoxContainer); + HBoxContainer *hb = memnew(HBoxContainer); + Label *label = memnew(Label(name)); + hb->set_modulate(Color(1, 1, 1, 1.0f)); + hb->add_child(label); + vb->add_child(hb); + set_drag_preview(vb); + + Dictionary drag_data; + drag_data["type"] = "nodes"; + + input_editor->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); + + return drag_data; +} + +bool ProjectSettingsEditor::can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const { + + Dictionary d = p_data; + if (!d.has("type") || d["type"] != "nodes") + return false; + + TreeItem *selected = input_editor->get_selected(); + TreeItem *item = input_editor->get_item_at_position(p_point); + if (!selected || !item || item == selected || item->get_parent() == selected) + return false; + + return true; +} + +void ProjectSettingsEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { + + if (!can_drop_data_fw(p_point, p_data, p_from)) + return; + + TreeItem *selected = input_editor->get_selected(); + TreeItem *item = input_editor->get_item_at_position(p_point); + if (!item) + return; + TreeItem *target = item->get_parent() == input_editor->get_root() ? item : item->get_parent(); + + String selected_name = "input/" + selected->get_text(0); + int old_order = ProjectSettings::get_singleton()->get_order(selected_name); + String target_name = "input/" + target->get_text(0); + int target_order = ProjectSettings::get_singleton()->get_order(target_name); + + int order = old_order; + bool is_below = target_order > old_order; + TreeItem *iterator = is_below ? selected->get_next() : selected->get_prev(); + + undo_redo->create_action(TTR("Moved Input Action Event")); + while (iterator != target) { + + String iterator_name = "input/" + iterator->get_text(0); + int iterator_order = ProjectSettings::get_singleton()->get_order(iterator_name); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", iterator_name, order); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", iterator_name, iterator_order); + order = iterator_order; + iterator = is_below ? iterator->get_next() : iterator->get_prev(); + } + + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", target_name, order); + undo_redo->add_do_method(ProjectSettings::get_singleton(), "set_order", selected_name, target_order); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", target_name, target_order); + undo_redo->add_undo_method(ProjectSettings::get_singleton(), "set_order", selected_name, old_order); + + undo_redo->add_do_method(this, "_update_actions"); + undo_redo->add_undo_method(this, "_update_actions"); + undo_redo->add_do_method(this, "_settings_changed"); + undo_redo->add_undo_method(this, "_settings_changed"); + undo_redo->commit_action(); +} + void ProjectSettingsEditor::_copy_to_platform(int p_which) { String path = globals_editor->get_inspector()->get_selected_path(); @@ -1227,7 +1314,7 @@ void ProjectSettingsEditor::_translation_res_option_changed() { ERR_FAIL_COND(!remaps.has(key)); PoolStringArray r = remaps[key]; ERR_FAIL_INDEX(idx, r.size()); - if (translation_locales_idxs_remap.size() > 0) { + if (translation_locales_idxs_remap.size() > which) { r.set(idx, path + ":" + langs[translation_locales_idxs_remap[which]]); } else { r.set(idx, path + ":" + langs[which]); @@ -1310,7 +1397,7 @@ void ProjectSettingsEditor::_translation_res_option_delete(Object *p_item, int p void ProjectSettingsEditor::_translation_filter_option_changed() { int sel_id = translation_locale_filter_mode->get_selected_id(); - TreeItem *t = translation_filter->get_selected(); + TreeItem *t = translation_filter->get_edited(); String locale = t->get_tooltip(0); bool checked = t->is_checked(0); @@ -1443,28 +1530,33 @@ void ProjectSettingsEditor::_update_translations() { Array l_filter = l_filter_all[1]; int s = names.size(); - if (!translation_locales_list_created) { + bool is_short_list_when_show_all_selected = filter_mode == SHOW_ALL_LOCALES && translation_filter_treeitems.size() < s; + bool is_full_list_when_show_only_selected = filter_mode == SHOW_ONLY_SELECTED_LOCALES && translation_filter_treeitems.size() == s; + bool should_recreate_locales_list = is_short_list_when_show_all_selected || is_full_list_when_show_only_selected; + + if (!translation_locales_list_created || should_recreate_locales_list) { translation_locales_list_created = true; translation_filter->clear(); root = translation_filter->create_item(NULL); translation_filter->set_hide_root(true); - translation_filter_treeitems.resize(s); - + translation_filter_treeitems.clear(); for (int i = 0; i < s; i++) { String n = names[i]; String l = langs[i]; + bool is_checked = l_filter.has(l); + if (filter_mode == SHOW_ONLY_SELECTED_LOCALES && !is_checked) continue; + TreeItem *t = translation_filter->create_item(root); t->set_cell_mode(0, TreeItem::CELL_MODE_CHECK); t->set_text(0, n); t->set_editable(0, true); t->set_tooltip(0, l); - t->set_checked(0, l_filter.has(l)); - translation_filter_treeitems.write[i] = t; + t->set_checked(0, is_checked); + translation_filter_treeitems.push_back(t); } } else { - for (int i = 0; i < s; i++) { - + for (int i = 0; i < translation_filter_treeitems.size(); i++) { TreeItem *t = translation_filter_treeitems[i]; t->set_checked(0, l_filter.has(t->get_tooltip(0))); } @@ -1615,6 +1707,7 @@ void ProjectSettingsEditor::_editor_restart_close() { void ProjectSettingsEditor::_bind_methods() { + ClassDB::bind_method(D_METHOD("_unhandled_input"), &ProjectSettingsEditor::_unhandled_input); ClassDB::bind_method(D_METHOD("_item_selected"), &ProjectSettingsEditor::_item_selected); ClassDB::bind_method(D_METHOD("_item_add"), &ProjectSettingsEditor::_item_add); ClassDB::bind_method(D_METHOD("_item_adds"), &ProjectSettingsEditor::_item_adds); @@ -1662,6 +1755,10 @@ void ProjectSettingsEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("_editor_restart_close"), &ProjectSettingsEditor::_editor_restart_close); ClassDB::bind_method(D_METHOD("get_tabs"), &ProjectSettingsEditor::get_tabs); + + ClassDB::bind_method(D_METHOD("get_drag_data_fw"), &ProjectSettingsEditor::get_drag_data_fw); + ClassDB::bind_method(D_METHOD("can_drop_data_fw"), &ProjectSettingsEditor::can_drop_data_fw); + ClassDB::bind_method(D_METHOD("drop_data_fw"), &ProjectSettingsEditor::drop_data_fw); } ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { @@ -1725,10 +1822,11 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { type = memnew(OptionButton); type->set_h_size_flags(Control::SIZE_EXPAND_FILL); add_prop_bar->add_child(type); - type->add_item("bool"); - type->add_item("int"); - type->add_item("float"); - type->add_item("string"); + + // Start at 1 to avoid adding "Nil" as an option + for (int i = 1; i < Variant::VARIANT_MAX; i++) { + type->add_item(Variant::get_type_name(Variant::Type(i))); + } Button *add = memnew(Button); add_prop_bar->add_child(add); @@ -1844,6 +1942,8 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) { input_editor->connect("item_activated", this, "_action_activated"); input_editor->connect("cell_selected", this, "_action_selected"); input_editor->connect("button_pressed", this, "_action_button_pressed"); + input_editor->set_drag_forwarding(this); + popup_add = memnew(PopupMenu); add_child(popup_add); popup_add->connect("id_pressed", this, "_add_item"); diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index d302c0d34b..c164b49d0e 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -158,6 +158,10 @@ class ProjectSettingsEditor : public AcceptDialog { void _toggle_search_bar(bool p_pressed); + Variant get_drag_data_fw(const Point2 &p_point, Control *p_from); + bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const; + void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from); + void _copy_to_platform_about_to_show(); ProjectSettingsEditor(); @@ -174,6 +178,7 @@ class ProjectSettingsEditor : public AcceptDialog { void _editor_restart_close(); protected: + void _unhandled_input(const Ref<InputEvent> &p_event); void _notification(int p_what); static void _bind_methods(); diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp index ecb272876d..ce82d44164 100644 --- a/editor/property_editor.cpp +++ b/editor/property_editor.cpp @@ -246,7 +246,13 @@ void CustomPropertyEditor::_menu_option(int p_which) { case OBJ_MENU_NEW_SCRIPT: { if (Object::cast_to<Node>(owner)) - EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(owner)); + EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(owner), false); + + } break; + case OBJ_MENU_EXTEND_SCRIPT: { + + if (Object::cast_to<Node>(owner)) + EditorNode::get_singleton()->get_scene_tree_dock()->open_script_dialog(Object::cast_to<Node>(owner), true); } break; case OBJ_MENU_SHOW_IN_FILE_SYSTEM: { diff --git a/editor/property_editor.h b/editor/property_editor.h index 029c2211d5..b1c61c5e25 100644 --- a/editor/property_editor.h +++ b/editor/property_editor.h @@ -77,7 +77,8 @@ class CustomPropertyEditor : public Popup { OBJ_MENU_COPY = 4, OBJ_MENU_PASTE = 5, OBJ_MENU_NEW_SCRIPT = 6, - OBJ_MENU_SHOW_IN_FILE_SYSTEM = 7, + OBJ_MENU_EXTEND_SCRIPT = 7, + OBJ_MENU_SHOW_IN_FILE_SYSTEM = 8, TYPE_BASE_ID = 100, CONVERT_BASE_ID = 1000 }; diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp index 16f1575757..71e93750f0 100644 --- a/editor/scene_tree_dock.cpp +++ b/editor/scene_tree_dock.cpp @@ -250,22 +250,37 @@ void SceneTreeDock::_replace_with_branch_scene(const String &p_file, Node *base) return; } + UndoRedo *undo_redo = editor->get_undo_redo(); + undo_redo->create_action(TTR("Replace with Branch Scene")); + Node *parent = base->get_parent(); int pos = base->get_index(); - parent->remove_child(base); - parent->add_child(instanced_scene); - parent->move_child(instanced_scene, pos); - instanced_scene->set_owner(edited_scene); - editor_selection->clear(); - editor_selection->add_node(instanced_scene); - scene_tree->set_selected(instanced_scene); - - // Delete the node as late as possible because before another one is selected - // an editor plugin could be referencing it to do something with it before - // switching to another (or to none); and since some steps of changing the - // editor state are deferred, the safest thing is to do this is as the last - // step of this function and also by enqueing instead of memdelete()-ing it here - base->queue_delete(); + undo_redo->add_do_method(parent, "remove_child", base); + undo_redo->add_undo_method(parent, "remove_child", instanced_scene); + undo_redo->add_do_method(parent, "add_child", instanced_scene); + undo_redo->add_undo_method(parent, "add_child", base); + undo_redo->add_do_method(parent, "move_child", instanced_scene, pos); + undo_redo->add_undo_method(parent, "move_child", base, pos); + + List<Node *> owned; + base->get_owned_by(base->get_owner(), &owned); + Array owners; + for (List<Node *>::Element *F = owned.front(); F; F = F->next()) { + owners.push_back(F->get()); + } + undo_redo->add_do_method(instanced_scene, "set_owner", edited_scene); + undo_redo->add_undo_method(this, "_set_owners", edited_scene, owners); + + undo_redo->add_do_method(editor_selection, "clear"); + undo_redo->add_undo_method(editor_selection, "clear"); + undo_redo->add_do_method(editor_selection, "add_node", instanced_scene); + undo_redo->add_undo_method(editor_selection, "add_node", base); + undo_redo->add_do_property(scene_tree, "set_selected", instanced_scene); + undo_redo->add_undo_property(scene_tree, "set_selected", base); + + undo_redo->add_do_reference(instanced_scene); + undo_redo->add_undo_reference(base); + undo_redo->commit_action(); } bool SceneTreeDock::_cyclical_dependency_exists(const String &p_target_scene_path, Node *p_desired_node) { @@ -325,8 +340,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (!profile_allow_editing) { break; } - Tree *tree = scene_tree->get_scene_tree(); - if (tree->is_anything_selected()) { + if (editor_selection->get_selected_node_list().size() > 1) { rename_dialog->popup_centered(); } } break; @@ -406,53 +420,11 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { create_dialog->popup_create(false, true, selected->get_class()); } break; + case TOOL_EXTEND_SCRIPT: { + attach_script_to_selected(true); + } break; case TOOL_ATTACH_SCRIPT: { - - if (!profile_allow_script_editing) { - break; - } - - List<Node *> selection = editor_selection->get_selected_node_list(); - if (selection.empty()) - break; - - Node *selected = scene_tree->get_selected(); - if (!selected) - selected = selection.front()->get(); - - Ref<Script> existing = selected->get_script(); - - String path = selected->get_filename(); - if (path == "") { - String root_path = editor_data->get_edited_scene_root()->get_filename(); - if (root_path == "") { - path = String("res://").plus_file(selected->get_name()); - } else { - path = root_path.get_base_dir().plus_file(selected->get_name()); - } - } - - String inherits = selected->get_class(); - if (existing.is_valid()) { - for (int i = 0; i < ScriptServer::get_language_count(); i++) { - ScriptLanguage *l = ScriptServer::get_language(i); - if (l->get_type() == existing->get_class()) { - String name = l->get_global_class_name(existing->get_path()); - if (ScriptServer::is_global_class(name) && EDITOR_GET("interface/editors/derive_script_globals_by_name").operator bool()) { - inherits = name; - } else if (l->can_inherit_from_file()) { - inherits = "\"" + existing->get_path() + "\""; - } - break; - } - } - } - script_create_dialog->connect("script_created", this, "_script_created"); - script_create_dialog->connect("popup_hide", this, "_script_creation_closed"); - script_create_dialog->set_inheritance_base_type("Node"); - script_create_dialog->config(inherits, path); - script_create_dialog->popup_centered(); - + attach_script_to_selected(false); } break; case TOOL_CLEAR_SCRIPT: { @@ -699,9 +671,8 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().create_action(TTR("Make node as Root")); editor_data->get_undo_redo().add_do_method(node->get_parent(), "remove_child", node); - editor_data->get_undo_redo().add_do_method(root->get_parent(), "remove_child", root); - editor_data->get_undo_redo().add_do_method(node, "add_child", root); editor_data->get_undo_redo().add_do_method(editor, "set_edited_scene", node); + editor_data->get_undo_redo().add_do_method(node, "add_child", root); editor_data->get_undo_redo().add_do_method(node, "set_filename", root->get_filename()); editor_data->get_undo_redo().add_do_method(root, "set_filename", String()); editor_data->get_undo_redo().add_do_method(node, "set_owner", (Object *)NULL); @@ -713,14 +684,13 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { editor_data->get_undo_redo().add_undo_method(node, "remove_child", root); editor_data->get_undo_redo().add_undo_method(editor, "set_edited_scene", root); editor_data->get_undo_redo().add_undo_method(node->get_parent(), "add_child", node); + editor_data->get_undo_redo().add_undo_method(node->get_parent(), "move_child", node, node->get_index()); editor_data->get_undo_redo().add_undo_method(root, "set_owner", (Object *)NULL); editor_data->get_undo_redo().add_undo_method(node, "set_owner", root); - _node_replace_owner(root, root, root, MODE_UNDO); editor_data->get_undo_redo().add_do_method(scene_tree, "update_tree"); editor_data->get_undo_redo().add_undo_method(scene_tree, "update_tree"); - editor_data->get_undo_redo().add_undo_reference(root); editor_data->get_undo_redo().commit_action(); } break; case TOOL_MULTI_EDIT: { @@ -759,8 +729,13 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { _delete_confirm(); } else { - if (remove_list.size() > 1) { + if (remove_list.size() >= 2) { delete_dialog->set_text(vformat(TTR("Delete %d nodes?"), remove_list.size())); + } else if (remove_list.size() == 1 && remove_list[0] == editor_data->get_edited_scene_root()) { + delete_dialog->set_text(vformat(TTR("Delete the root node \"%s\"?"), remove_list[0]->get_name())); + } else if (remove_list.size() == 1 && remove_list[0]->get_filename() == "" && remove_list[0]->get_child_count() >= 1) { + // Display this message only for non-instanced scenes + delete_dialog->set_text(vformat(TTR("Delete node \"%s\" and its children?"), remove_list[0]->get_name())); } else { delete_dialog->set_text(vformat(TTR("Delete node \"%s\"?"), remove_list[0]->get_name())); } @@ -890,16 +865,22 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) { if (e) { Node *node = e->get(); if (node) { + bool editable = EditorNode::get_singleton()->get_edited_scene()->is_editable_instance(node); bool placeholder = node->get_scene_instance_load_placeholder(); + + // Fire confirmation dialog when children are editable. + if (editable && !placeholder) { + placeholder_editable_instance_remove_dialog->set_text(TTR("Enabling \"Load As Placeholder\" will disable \"Editable Children\" and cause all properties of the node to be reverted to their default.")); + placeholder_editable_instance_remove_dialog->popup_centered_minsize(); + break; + } + placeholder = !placeholder; - int editable_item_idx = menu->get_item_idx_from_text(TTR("Editable Children")); - int placeholder_item_idx = menu->get_item_idx_from_text(TTR("Load As Placeholder")); + if (placeholder) EditorNode::get_singleton()->get_edited_scene()->set_editable_instance(node, false); node->set_scene_instance_load_placeholder(placeholder); - menu->set_item_checked(editable_item_idx, false); - menu->set_item_checked(placeholder_item_idx, placeholder); scene_tree->update_tree(); } } @@ -1504,7 +1485,7 @@ bool SceneTreeDock::_validate_no_foreign() { // When edited_scene inherits from another one the root Node will be the parent Scene, // we don't want to consider that Node a foreign one otherwise we would not be able to - // delete it + // delete it. if (edited_scene->get_scene_inherited_state().is_valid() && edited_scene == E->get()) { continue; } @@ -1528,7 +1509,7 @@ void SceneTreeDock::_node_reparent(NodePath p_path, bool p_keep_global_xform) { List<Node *> selection = editor_selection->get_selected_node_list(); if (selection.empty()) - return; //nothing to reparent + return; // Nothing to reparent. Vector<Node *> nodes; @@ -1544,18 +1525,32 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V Node *new_parent = p_new_parent; ERR_FAIL_COND(!new_parent); + if (p_nodes.size() == 0) + return; // Nothing to reparent. + + p_nodes.sort_custom<Node::Comparator>(); //Makes result reliable. + + bool no_change = true; + for (int ni = 0; ni < p_nodes.size(); ni++) { + + if (p_nodes[ni] == p_new_parent) + return; // Attempt to reparent to itself. + + if (p_nodes[ni]->get_parent() != p_new_parent || p_position_in_parent + ni != p_nodes[ni]->get_position_in_parent()) + no_change = false; + } + + if (no_change) + return; // Position and parent didn't change. + Node *validate = new_parent; while (validate) { - ERR_FAIL_COND_MSG(p_nodes.find(validate) != -1, "Selection changed at some point.. can't reparent."); + ERR_FAIL_COND_MSG(p_nodes.find(validate) != -1, "Selection changed at some point. Can't reparent."); validate = validate->get_parent(); } - //ok all valid - if (p_nodes.size() == 0) - return; //nothing to reparent - - //sort by tree order, so re-adding is easy + // Sort by tree order, so re-adding is easy. p_nodes.sort_custom<Node::Comparator>(); editor_data->get_undo_redo().create_action(TTR("Reparent Node")); @@ -1567,7 +1562,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V for (int ni = 0; ni < p_nodes.size(); ni++) { - //no undo for now, sorry + // No undo implemented for this yet. Node *node = p_nodes[ni]; fill_path_renames(node, new_parent, &path_renames); @@ -1577,14 +1572,11 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V node->get_owned_by(node->get_owner(), &owned); Array owners; for (List<Node *>::Element *E = owned.front(); E; E = E->next()) { - owners.push_back(E->get()); } - if (new_parent == node->get_parent() && node->get_index() < p_position_in_parent + ni) { - //if child will generate a gap when moved, adjust - inc--; - } + if (new_parent == node->get_parent() && node->get_index() < p_position_in_parent + ni) + inc--; // If the child will generate a gap when moved, adjust. editor_data->get_undo_redo().add_do_method(node->get_parent(), "remove_child", node); editor_data->get_undo_redo().add_do_method(new_parent, "add_child", node); @@ -1596,17 +1588,17 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V String old_name = former_names[ni]; String new_name = new_parent->validate_child_name(node); - // name was modified, fix the path renames + // Name was modified, fix the path renames. if (old_name.casecmp_to(new_name) != 0) { - // Fix the to name to have the new name + // Fix the to name to have the new name. NodePath old_new_name = path_renames[ni].second; NodePath new_path; Vector<StringName> unfixed_new_names = old_new_name.get_names(); Vector<StringName> fixed_new_names; - // Get last name and replace with fixed new name + // Get last name and replace with fixed new name. for (int a = 0; a < (unfixed_new_names.size() - 1); a++) { fixed_new_names.push_back(unfixed_new_names[a]); } @@ -1640,8 +1632,7 @@ void SceneTreeDock::_do_reparent(Node *p_new_parent, int p_position_in_parent, V inc++; } - //add and move in a second step.. (so old order is preserved) - + // Add and move in a second step (so old order is preserved). for (int ni = 0; ni < p_nodes.size(); ni++) { Node *node = p_nodes[ni]; @@ -1761,6 +1752,25 @@ void SceneTreeDock::_toggle_editable_children_from_selection() { } } +void SceneTreeDock::_toggle_placeholder_from_selection() { + + List<Node *> selection = editor_selection->get_selected_node_list(); + List<Node *>::Element *e = selection.front(); + + if (e) { + Node *node = e->get(); + if (node) { + _toggle_editable_children(node); + + bool placeholder = node->get_scene_instance_load_placeholder(); + placeholder = !placeholder; + + node->set_scene_instance_load_placeholder(placeholder); + scene_tree->update_tree(); + } + } +} + void SceneTreeDock::_toggle_editable_children(Node *p_node) { if (p_node) { @@ -2393,6 +2403,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { } List<Node *> selection = editor_selection->get_selected_node_list(); + List<Node *> full_selection = editor_selection->get_full_selected_node_list(); // Above method only returns nodes with common parent. if (selection.size() == 0) return; @@ -2427,22 +2438,40 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { } if (profile_allow_script_editing) { + bool add_separator = false; - if (selection.size() == 1) { - if (!existing_script.is_valid()) { - menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT); - } else { - menu->add_icon_shortcut(get_icon("ScriptExtend", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/extend_script"), TOOL_ATTACH_SCRIPT); + if (full_selection.size() == 1) { + add_separator = true; + menu->add_icon_shortcut(get_icon("ScriptCreate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/attach_script"), TOOL_ATTACH_SCRIPT); + if (existing_script.is_valid()) { + menu->add_icon_shortcut(get_icon("ScriptExtend", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/extend_script"), TOOL_EXTEND_SCRIPT); } } - if (selection.size() > 1 || (existing_script.is_valid() && exisiting_script_removable)) { + if (existing_script.is_valid() && exisiting_script_removable) { + add_separator = true; menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); + } else if (full_selection.size() > 1) { + bool script_exists = false; + for (List<Node *>::Element *E = full_selection.front(); E; E = E->next()) { + if (!E->get()->get_script().is_null()) { + script_exists = true; + break; + } + } + + if (script_exists) { + add_separator = true; + menu->add_icon_shortcut(get_icon("ScriptRemove", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/clear_script"), TOOL_CLEAR_SCRIPT); + } + } + + if (add_separator) { + menu->add_separator(); } - menu->add_separator(); } if (profile_allow_editing) { - if (selection.size() == 1) { + if (full_selection.size() == 1) { menu->add_icon_shortcut(get_icon("Rename", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/rename"), TOOL_RENAME); } menu->add_icon_shortcut(get_icon("Reload", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/change_node_type"), TOOL_REPLACE); @@ -2454,7 +2483,9 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_icon_shortcut(get_icon("Duplicate", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/duplicate"), TOOL_DUPLICATE); menu->add_icon_shortcut(get_icon("Reparent", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/reparent"), TOOL_REPARENT); menu->add_icon_shortcut(get_icon("ReparentToNewNode", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/reparent_to_new_node"), TOOL_REPARENT_TO_NEW_NODE); - menu->add_icon_shortcut(get_icon("NewRoot", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/make_root"), TOOL_MAKE_ROOT); + if (selection.size() == 1) { + menu->add_icon_shortcut(get_icon("NewRoot", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/make_root"), TOOL_MAKE_ROOT); + } } } if (selection.size() == 1) { @@ -2463,9 +2494,11 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) { menu->add_separator(); menu->add_icon_shortcut(get_icon("Blend", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/merge_from_scene"), TOOL_MERGE_FROM_SCENE); menu->add_icon_shortcut(get_icon("CreateNewSceneFrom", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/save_branch_as_scene"), TOOL_NEW_SCENE_FROM); + } + if (full_selection.size() == 1) { menu->add_separator(); + menu->add_icon_shortcut(get_icon("CopyNodePath", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/copy_node_path"), TOOL_COPY_NODE_PATH); } - menu->add_icon_shortcut(get_icon("CopyNodePath", "EditorIcons"), ED_GET_SHORTCUT("scene_tree/copy_node_path"), TOOL_COPY_NODE_PATH); bool is_external = (selection[0]->get_filename() != ""); if (is_external) { @@ -2542,10 +2575,64 @@ void SceneTreeDock::_focus_node() { } } -void SceneTreeDock::open_script_dialog(Node *p_for_node) { +void SceneTreeDock::attach_script_to_selected(bool p_extend) { + if (!profile_allow_script_editing) { + return; + } + + List<Node *> selection = editor_selection->get_selected_node_list(); + if (selection.empty()) + return; + + Node *selected = scene_tree->get_selected(); + if (!selected) + selected = selection.front()->get(); + + Ref<Script> existing = selected->get_script(); + + String path = selected->get_filename(); + if (path == "") { + String root_path = editor_data->get_edited_scene_root()->get_filename(); + if (root_path == "") { + path = String("res://").plus_file(selected->get_name()); + } else { + path = root_path.get_base_dir().plus_file(selected->get_name()); + } + } + + String inherits = selected->get_class(); + + if (p_extend && existing.is_valid()) { + for (int i = 0; i < ScriptServer::get_language_count(); i++) { + ScriptLanguage *l = ScriptServer::get_language(i); + if (l->get_type() == existing->get_class()) { + String name = l->get_global_class_name(existing->get_path()); + if (ScriptServer::is_global_class(name) && EDITOR_GET("interface/editors/derive_script_globals_by_name").operator bool()) { + inherits = name; + } else if (l->can_inherit_from_file()) { + inherits = "\"" + existing->get_path() + "\""; + } + break; + } + } + } + + script_create_dialog->connect("script_created", this, "_script_created"); + script_create_dialog->connect("popup_hide", this, "_script_creation_closed"); + script_create_dialog->set_inheritance_base_type("Node"); + script_create_dialog->config(inherits, path); + script_create_dialog->popup_centered(); +} + +void SceneTreeDock::open_script_dialog(Node *p_for_node, bool p_extend) { scene_tree->set_selected(p_for_node, false); - _tool_selected(TOOL_ATTACH_SCRIPT); + + if (p_extend) { + _tool_selected(TOOL_EXTEND_SCRIPT); + } else { + _tool_selected(TOOL_ATTACH_SCRIPT); + } } void SceneTreeDock::add_remote_tree_editor(Control *p_remote) { @@ -2698,6 +2785,7 @@ void SceneTreeDock::_bind_methods() { ClassDB::bind_method(D_METHOD("_nodes_drag_begin"), &SceneTreeDock::_nodes_drag_begin); ClassDB::bind_method(D_METHOD("_delete_confirm"), &SceneTreeDock::_delete_confirm); ClassDB::bind_method(D_METHOD("_toggle_editable_children_from_selection"), &SceneTreeDock::_toggle_editable_children_from_selection); + ClassDB::bind_method(D_METHOD("_toggle_placeholder_from_selection"), &SceneTreeDock::_toggle_placeholder_from_selection); ClassDB::bind_method(D_METHOD("_node_prerenamed"), &SceneTreeDock::_node_prerenamed); ClassDB::bind_method(D_METHOD("_import_subscene"), &SceneTreeDock::_import_subscene); ClassDB::bind_method(D_METHOD("_selection_changed"), &SceneTreeDock::_selection_changed); @@ -2871,6 +2959,10 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel add_child(editable_instance_remove_dialog); editable_instance_remove_dialog->connect("confirmed", this, "_toggle_editable_children_from_selection"); + placeholder_editable_instance_remove_dialog = memnew(ConfirmationDialog); + add_child(placeholder_editable_instance_remove_dialog); + placeholder_editable_instance_remove_dialog->connect("confirmed", this, "_toggle_placeholder_from_selection"); + import_subscene_dialog = memnew(EditorSubScene); add_child(import_subscene_dialog); import_subscene_dialog->connect("subscene_selected", this, "_import_subscene"); @@ -2903,5 +2995,6 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel profile_allow_script_editing = true; EDITOR_DEF("interface/editors/show_scene_tree_root_selection", true); + EDITOR_DEF("interface/editors/derive_script_globals_by_name", true); EDITOR_DEF("_use_favorites_root_selection", false); } diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h index cd582fdf57..4e78b84c53 100644 --- a/editor/scene_tree_dock.h +++ b/editor/scene_tree_dock.h @@ -64,6 +64,7 @@ class SceneTreeDock : public VBoxContainer { TOOL_RENAME, TOOL_BATCH_RENAME, TOOL_REPLACE, + TOOL_EXTEND_SCRIPT, TOOL_ATTACH_SCRIPT, TOOL_CLEAR_SCRIPT, TOOL_MOVE_UP, @@ -127,6 +128,7 @@ class SceneTreeDock : public VBoxContainer { AcceptDialog *accept; ConfirmationDialog *delete_dialog; ConfirmationDialog *editable_instance_remove_dialog; + ConfirmationDialog *placeholder_editable_instance_remove_dialog; ReparentDialog *reparent_dialog; EditorQuickOpen *quick_open; @@ -184,6 +186,8 @@ class SceneTreeDock : public VBoxContainer { void _toggle_editable_children_from_selection(); void _toggle_editable_children(Node *p_node); + void _toggle_placeholder_from_selection(); + void _node_prerenamed(Node *p_node, const String &p_new_name); void _nodes_drag_begin(); @@ -256,7 +260,8 @@ public: void replace_node(Node *p_node, Node *p_by_node, bool p_keep_properties = true, bool p_remove_old = true); - void open_script_dialog(Node *p_for_node); + void attach_script_to_selected(bool p_extend); + void open_script_dialog(Node *p_for_node, bool p_extend); ScriptCreateDialog *get_script_create_dialog() { return script_create_dialog; } diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp index f1fc4eb950..dc5eb4bbd0 100644 --- a/editor/scene_tree_editor.cpp +++ b/editor/scene_tree_editor.cpp @@ -959,6 +959,7 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from HBoxContainer *hb = memnew(HBoxContainer); TextureRect *tf = memnew(TextureRect); tf->set_texture(icons[i]); + tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); hb->add_child(tf); Label *label = memnew(Label(selected[i]->get_name())); hb->add_child(label); diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp index ffb3f5feab..6522cf4d02 100644 --- a/editor/script_create_dialog.cpp +++ b/editor/script_create_dialog.cpp @@ -55,6 +55,15 @@ void ScriptCreateDialog::_notification(int p_what) { String last_lang = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); Ref<Texture> last_lang_icon; if (!last_lang.empty()) { + + for (int i = 0; i < language_menu->get_item_count(); i++) { + if (language_menu->get_item_text(i) == last_lang) { + language_menu->select(i); + current_language = i; + break; + } + } + last_lang_icon = get_icon(last_lang, "EditorIcons"); } else { last_lang_icon = language_menu->get_item_icon(default_language); @@ -593,7 +602,7 @@ void ScriptCreateDialog::_path_entered(const String &p_path) { void ScriptCreateDialog::_msg_script_valid(bool valid, const String &p_msg) { - error_label->set_text(TTR(p_msg)); + error_label->set_text("- " + TTR(p_msg)); if (valid) { error_label->add_color_override("font_color", get_color("success_color", "Editor")); } else { @@ -603,7 +612,7 @@ void ScriptCreateDialog::_msg_script_valid(bool valid, const String &p_msg) { void ScriptCreateDialog::_msg_path_valid(bool valid, const String &p_msg) { - path_error_label->set_text(TTR(p_msg)); + path_error_label->set_text("- " + TTR(p_msg)); if (valid) { path_error_label->add_color_override("font_color", get_color("success_color", "Editor")); } else { @@ -735,29 +744,14 @@ ScriptCreateDialog::ScriptCreateDialog() { VBoxContainer *vb = memnew(VBoxContainer); - HBoxContainer *hb = memnew(HBoxContainer); - Label *l = memnew(Label); - l->set_text(" - "); - hb->add_child(l); error_label = memnew(Label); - error_label->set_text(TTR("Error!")); - error_label->set_align(Label::ALIGN_LEFT); - hb->add_child(error_label); - vb->add_child(hb); + vb->add_child(error_label); - hb = memnew(HBoxContainer); - l = memnew(Label); - l->set_text(" - "); - hb->add_child(l); path_error_label = memnew(Label); - path_error_label->set_text(TTR("Error!")); - path_error_label->set_align(Label::ALIGN_LEFT); - hb->add_child(path_error_label); - vb->add_child(hb); + vb->add_child(path_error_label); status_panel = memnew(PanelContainer); status_panel->set_h_size_flags(Control::SIZE_FILL); - status_panel->add_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_stylebox("bg", "Tree")); status_panel->add_child(vb); /* Spacing */ @@ -769,7 +763,7 @@ ScriptCreateDialog::ScriptCreateDialog() { vb->add_child(gc); vb->add_child(spacing); vb->add_child(status_panel); - hb = memnew(HBoxContainer); + HBoxContainer *hb = memnew(HBoxContainer); hb->add_child(vb); add_child(hb); @@ -779,9 +773,7 @@ ScriptCreateDialog::ScriptCreateDialog() { language_menu = memnew(OptionButton); language_menu->set_custom_minimum_size(Size2(250, 0) * EDSCALE); language_menu->set_h_size_flags(SIZE_EXPAND_FILL); - l = memnew(Label(TTR("Language"))); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); + gc->add_child(memnew(Label(TTR("Language:")))); gc->add_child(language_menu); default_language = 0; @@ -794,19 +786,8 @@ ScriptCreateDialog::ScriptCreateDialog() { } } - String last_selected_language = EditorSettings::get_singleton()->get_project_metadata("script_setup", "last_selected_language", ""); - if (last_selected_language != "") { - for (int i = 0; i < language_menu->get_item_count(); i++) { - if (language_menu->get_item_text(i) == last_selected_language) { - language_menu->select(i); - current_language = i; - break; - } - } - } else { - language_menu->select(default_language); - current_language = default_language; - } + language_menu->select(default_language); + current_language = default_language; language_menu->connect("item_selected", this, "_lang_changed"); @@ -828,9 +809,7 @@ ScriptCreateDialog::ScriptCreateDialog() { parent_browse_button->set_flat(true); parent_browse_button->connect("pressed", this, "_browse_path", varray(true, false)); hb->add_child(parent_browse_button); - l = memnew(Label(TTR("Inherits"))); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); + gc->add_child(memnew(Label(TTR("Inherits:")))); gc->add_child(hb); is_browsing_parent = false; @@ -839,17 +818,13 @@ ScriptCreateDialog::ScriptCreateDialog() { class_name = memnew(LineEdit); class_name->connect("text_changed", this, "_class_name_changed"); class_name->set_h_size_flags(SIZE_EXPAND_FILL); - l = memnew(Label(TTR("Class Name"))); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); + gc->add_child(memnew(Label(TTR("Class Name:")))); gc->add_child(class_name); /* Templates */ template_menu = memnew(OptionButton); - l = memnew(Label(TTR("Template"))); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); + gc->add_child(memnew(Label(TTR("Template:")))); gc->add_child(template_menu); template_menu->connect("item_selected", this, "_template_changed"); @@ -858,8 +833,7 @@ ScriptCreateDialog::ScriptCreateDialog() { internal = memnew(CheckBox); internal->set_text(TTR("On")); internal->connect("pressed", this, "_built_in_pressed"); - internal_label = memnew(Label(TTR("Built-in Script"))); - internal_label->set_align(Label::ALIGN_RIGHT); + internal_label = memnew(Label(TTR("Built-in Script:"))); gc->add_child(internal_label); gc->add_child(internal); @@ -876,9 +850,7 @@ ScriptCreateDialog::ScriptCreateDialog() { path_button->set_flat(true); path_button->connect("pressed", this, "_browse_path", varray(false, true)); hb->add_child(path_button); - l = memnew(Label(TTR("Path"))); - l->set_align(Label::ALIGN_RIGHT); - gc->add_child(l); + gc->add_child(memnew(Label(TTR("Path:")))); gc->add_child(hb); /* Dialog Setup */ diff --git a/editor/script_editor_debugger.cpp b/editor/script_editor_debugger.cpp index 6ee09012a5..06acdcd4e2 100644 --- a/editor/script_editor_debugger.cpp +++ b/editor/script_editor_debugger.cpp @@ -423,10 +423,12 @@ void ScriptEditorDebugger::_scene_tree_request() { int ScriptEditorDebugger::_update_scene_tree(TreeItem *parent, const Array &nodes, int current_index) { String filter = EditorNode::get_singleton()->get_scene_tree_dock()->get_filter(); String item_text = nodes[current_index + 1]; + String item_type = nodes[current_index + 2]; bool keep = filter.is_subsequence_ofi(item_text); TreeItem *item = inspect_scene_tree->create_item(parent); item->set_text(0, item_text); + item->set_tooltip(0, TTR("Type:") + " " + item_type); ObjectID id = ObjectID(nodes[current_index + 3]); Ref<Texture> icon = EditorNode::get_singleton()->get_class_icon(nodes[current_index + 2], ""); if (icon.is_valid()) { @@ -434,6 +436,15 @@ int ScriptEditorDebugger::_update_scene_tree(TreeItem *parent, const Array &node } item->set_metadata(0, id); + if (id == inspected_object_id) { + TreeItem *cti = item->get_parent(); + while (cti) { + cti->set_collapsed(false); + cti = cti->get_parent(); + } + item->select(0); + } + // Set current item as collapsed if necessary if (parent) { if (!unfold_cache.has(id)) { @@ -586,10 +597,30 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da if (var.is_zero()) { var = RES(); } else if (var.get_type() == Variant::STRING) { - var = ResourceLoader::load(var); - - if (pinfo.hint_string == "Script") - debugObj->set_script(var); + String path = var; + if (path.find("::") != -1) { + // built-in resource + String base_path = path.get_slice("::", 0); + if (ResourceLoader::get_resource_type(base_path) == "PackedScene") { + if (!EditorNode::get_singleton()->is_scene_open(base_path)) { + EditorNode::get_singleton()->load_scene(base_path); + } + } else { + EditorNode::get_singleton()->load_resource(base_path); + } + } + var = ResourceLoader::load(path); + + if (pinfo.hint_string == "Script") { + if (debugObj->get_script() != var) { + debugObj->set_script(RefPtr()); + Ref<Script> script(var); + if (!script.is_null()) { + ScriptInstance *script_instance = script->placeholder_instance_create(debugObj); + debugObj->set_script_and_instance(var, script_instance); + } + } + } } else if (var.get_type() == Variant::OBJECT) { if (((Object *)var)->is_class("EncodedObjectAsID")) { var = Object::cast_to<EncodedObjectAsID>(var)->get_object_id(); @@ -717,6 +748,10 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da } variables->add_property("Members/" + n, v, h, hs); + + if (n == "self") { + _scene_tree_property_select_object(v); + } } ofs += mcount * 2; @@ -795,60 +830,102 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da } else if (p_msg == "error") { - Array err = p_data[0]; - - Array vals; - vals.push_back(err[0]); - vals.push_back(err[1]); - vals.push_back(err[2]); - vals.push_back(err[3]); + // Should have at least two elements, error array and stack items count. + ERR_FAIL_COND_MSG(p_data.size() < 2, "Malformed error message from script debugger."); - bool warning = err[9]; + // Error or warning data. + Array err = p_data[0]; + ERR_FAIL_COND_MSG(err.size() < 10, "Malformed error message from script debugger."); + + // Format time. + Array time_vals; + time_vals.push_back(err[0]); + time_vals.push_back(err[1]); + time_vals.push_back(err[2]); + time_vals.push_back(err[3]); bool e; - String time = String("%d:%02d:%02d:%04d").sprintf(vals, &e); - String txt = err[8].is_zero() ? String(err[7]) : String(err[8]); + String time = String("%d:%02d:%02d:%04d").sprintf(time_vals, &e); + // Rest of the error data. + String method = err[4]; + String source_file = err[5]; + String source_line = err[6]; + String error_cond = err[7]; + String error_msg = err[8]; + bool is_warning = err[9]; + bool has_method = !method.empty(); + bool has_error_msg = !error_msg.empty(); + bool source_is_project_file = source_file.begins_with("res://"); + + // Metadata to highlight error line in scripts. + Array source_meta; + source_meta.push_back(source_file); + source_meta.push_back(source_line); + + // Create error tree to display above error or warning details. TreeItem *r = error_tree->get_root(); if (!r) { r = error_tree->create_item(); } + // Also provide the relevant details as tooltip to quickly check without + // uncollapsing the tree. + String tooltip = is_warning ? TTR("Warning:") : TTR("Error:"); + TreeItem *error = error_tree->create_item(r); error->set_collapsed(true); - error->set_icon(0, get_icon(warning ? "Warning" : "Error", "EditorIcons")); + error->set_icon(0, get_icon(is_warning ? "Warning" : "Error", "EditorIcons")); error->set_text(0, time); error->set_text_align(0, TreeItem::ALIGN_LEFT); - error->set_text(1, txt); + String error_title; + // Include method name, when given, in error title. + if (has_method) + error_title += method + ": "; + // If we have a (custom) error message, use it as title, and add a C++ Error + // item with the original error condition. + error_title += error_msg.empty() ? error_cond : error_msg; + error->set_text(1, error_title); + tooltip += " " + error_title + "\n"; + + if (has_error_msg) { + // Add item for C++ error condition. + TreeItem *cpp_cond = error_tree->create_item(error); + cpp_cond->set_text(0, "<" + TTR("C++ Error") + ">"); + cpp_cond->set_text(1, error_cond); + cpp_cond->set_text_align(0, TreeItem::ALIGN_LEFT); + tooltip += TTR("C++ Error:") + " " + error_cond + "\n"; + if (source_is_project_file) + cpp_cond->set_metadata(0, source_meta); + } - String source(err[5]); - bool source_is_project_file = source.begins_with("res://"); - if (source_is_project_file) - txt = source.get_file() + ":" + String(err[6]); - else - txt = source + ":" + String(err[6]); + // Source of the error. + String source_txt = (source_is_project_file ? source_file.get_file() : source_file) + ":" + source_line; + if (has_method) + source_txt += " @ " + method + "()"; - String method = err[4]; - if (method.length() > 0) - txt += " @ " + method + "()"; - - TreeItem *c_info = error_tree->create_item(error); - c_info->set_text(0, "<" + TTR(source_is_project_file ? "Source" : "C Source") + ">"); - c_info->set_text(1, txt); - c_info->set_text_align(0, TreeItem::ALIGN_LEFT); + TreeItem *cpp_source = error_tree->create_item(error); + cpp_source->set_text(0, "<" + (source_is_project_file ? TTR("Source") : TTR("C++ Source")) + ">"); + cpp_source->set_text(1, source_txt); + cpp_source->set_text_align(0, TreeItem::ALIGN_LEFT); + tooltip += (source_is_project_file ? TTR("Source:") : TTR("C++ Source:")) + " " + source_txt + "\n"; + // Set metadata to highlight error line in scripts. if (source_is_project_file) { - Array meta; - meta.push_back(source); - meta.push_back(err[6]); - error->set_metadata(0, meta); - c_info->set_metadata(0, meta); + error->set_metadata(0, source_meta); + cpp_source->set_metadata(0, source_meta); } - int scc = p_data[1]; + error->set_tooltip(0, tooltip); + error->set_tooltip(1, tooltip); - for (int i = 0; i < scc; i += 3) { + // Format stack trace. + // stack_items_count is the number of elements to parse, with 3 items per frame + // of the stack trace (script, method, line). + int stack_items_count = p_data[1]; + + for (int i = 0; i < stack_items_count; i += 3) { String script = p_data[2 + i]; String method2 = p_data[3 + i]; int line = p_data[4 + i]; @@ -867,7 +944,7 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da stack_trace->set_text(1, script.get_file() + ":" + itos(line) + " @ " + method2 + "()"); } - if (warning) + if (is_warning) warning_count++; else error_count++; @@ -1042,17 +1119,15 @@ void ScriptEditorDebugger::_performance_draw() { which.push_back(i); } - Ref<Font> graph_font = get_font("font", "TextEdit"); - if (which.empty()) { - String text = TTR("Pick one or more items from the list to display the graph."); - - perf_draw->draw_string(graph_font, Point2i(MAX(0, perf_draw->get_size().x - graph_font->get_string_size(text).x), perf_draw->get_size().y + graph_font->get_ascent()) / 2, text, get_color("font_color", "Label"), perf_draw->get_size().x); - + info_message->show(); return; } + info_message->hide(); + Ref<StyleBox> graph_sb = get_stylebox("normal", "TextEdit"); + Ref<Font> graph_font = get_font("font", "TextEdit"); int cols = Math::ceil(Math::sqrt((float)which.size())); int rows = Math::ceil((float)which.size() / cols); @@ -1121,7 +1196,6 @@ void ScriptEditorDebugger::_notification(int p_what) { forward->set_icon(get_icon("Forward", "EditorIcons")); dobreak->set_icon(get_icon("Pause", "EditorIcons")); docontinue->set_icon(get_icon("DebugContinue", "EditorIcons")); - //scene_tree_refresh->set_icon( get_icon("Reload","EditorIcons")); le_set->connect("pressed", this, "_live_edit_set"); le_clear->connect("pressed", this, "_live_edit_clear"); error_tree->connect("item_selected", this, "_error_selected"); @@ -1193,7 +1267,7 @@ void ScriptEditorDebugger::_notification(int p_what) { if (connection.is_null()) break; - EditorNode::get_log()->add_message("** Debug Process Started **"); + EditorNode::get_log()->add_message("--- Debugging process started ---", EditorLog::MSG_TYPE_EDITOR); ppeer->set_stream_peer(connection); @@ -1203,7 +1277,7 @@ void ScriptEditorDebugger::_notification(int p_what) { dobreak->set_disabled(false); tabs->set_current_tab(0); - _set_reason_text(TTR("Child Process Connected"), MESSAGE_SUCCESS); + _set_reason_text(TTR("Child process connected."), MESSAGE_SUCCESS); profiler->clear(); inspect_scene_tree->clear(); @@ -1391,7 +1465,7 @@ void ScriptEditorDebugger::stop() { ppeer->set_stream_peer(Ref<StreamPeer>()); if (connection.is_valid()) { - EditorNode::get_log()->add_message("** Debug Process Stopped **"); + EditorNode::get_log()->add_message("--- Debugging process stopped ---", EditorLog::MSG_TYPE_EDITOR); connection.unref(); reason->set_text(""); @@ -2142,11 +2216,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { step = memnew(ToolButton); hbc->add_child(step); step->set_tooltip(TTR("Step Into")); + step->set_shortcut(ED_GET_SHORTCUT("debugger/step_into")); step->connect("pressed", this, "debug_step"); next = memnew(ToolButton); hbc->add_child(next); next->set_tooltip(TTR("Step Over")); + next->set_shortcut(ED_GET_SHORTCUT("debugger/step_over")); next->connect("pressed", this, "debug_next"); hbc->add_child(memnew(VSeparator)); @@ -2154,11 +2230,13 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { dobreak = memnew(ToolButton); hbc->add_child(dobreak); dobreak->set_tooltip(TTR("Break")); + dobreak->set_shortcut(ED_GET_SHORTCUT("debugger/break")); dobreak->connect("pressed", this, "debug_break"); docontinue = memnew(ToolButton); hbc->add_child(docontinue); docontinue->set_tooltip(TTR("Continue")); + docontinue->set_shortcut(ED_GET_SHORTCUT("debugger/continue")); docontinue->connect("pressed", this, "debug_continue"); back = memnew(Button); @@ -2299,11 +2377,14 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { perf_monitors->set_column_title(0, TTR("Monitor")); perf_monitors->set_column_title(1, TTR("Value")); perf_monitors->set_column_titles_visible(true); - hsp->add_child(perf_monitors); perf_monitors->connect("item_edited", this, "_performance_select"); + hsp->add_child(perf_monitors); + perf_draw = memnew(Control); + perf_draw->set_clip_contents(true); perf_draw->connect("draw", this, "_performance_draw"); hsp->add_child(perf_draw); + hsp->set_name(TTR("Monitors")); hsp->set_split_offset(340 * EDSCALE); tabs->add_child(hsp); @@ -2337,6 +2418,15 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { perf_items.push_back(it); perf_max.write[i] = 0; } + + info_message = memnew(Label); + info_message->set_text(TTR("Pick one or more items from the list to display the graph.")); + info_message->set_valign(Label::VALIGN_CENTER); + info_message->set_align(Label::ALIGN_CENTER); + info_message->set_autowrap(true); + info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + perf_draw->add_child(info_message); } { //vmem inspect @@ -2348,7 +2438,7 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) { vmem_hb->add_child(memnew(Label(TTR("Total:") + " "))); vmem_total = memnew(LineEdit); vmem_total->set_editable(false); - vmem_total->set_custom_minimum_size(Size2(100, 1) * EDSCALE); + vmem_total->set_custom_minimum_size(Size2(100, 0) * EDSCALE); vmem_hb->add_child(vmem_total); vmem_refresh = memnew(ToolButton); vmem_hb->add_child(vmem_refresh); diff --git a/editor/script_editor_debugger.h b/editor/script_editor_debugger.h index ce48edfe89..cc284476c0 100644 --- a/editor/script_editor_debugger.h +++ b/editor/script_editor_debugger.h @@ -135,6 +135,7 @@ class ScriptEditorDebugger : public Control { Tree *perf_monitors; Control *perf_draw; + Label *info_message; Tree *vmem_tree; Button *vmem_refresh; diff --git a/editor/settings_config_dialog.cpp b/editor/settings_config_dialog.cpp index b4643231d7..a38c6b98cc 100644 --- a/editor/settings_config_dialog.cpp +++ b/editor/settings_config_dialog.cpp @@ -110,7 +110,7 @@ void EditorSettingsDialog::_filter_shortcuts(const String &p_filter) { } void EditorSettingsDialog::_undo_redo_callback(void *p_self, const String &p_name) { - EditorNode::get_log()->add_message(p_name); + EditorNode::get_log()->add_message(p_name, EditorLog::MSG_TYPE_EDITOR); } void EditorSettingsDialog::_notification(int p_what) { @@ -140,32 +140,35 @@ void EditorSettingsDialog::_notification(int p_what) { void EditorSettingsDialog::_unhandled_input(const Ref<InputEvent> &p_event) { - Ref<InputEventKey> k = p_event; + const Ref<InputEventKey> k = p_event; - if (k.is_valid() && is_window_modal_on_top()) { + if (k.is_valid() && is_window_modal_on_top() && k->is_pressed()) { - if (k->is_pressed()) { + bool handled = false; - bool handled = false; + if (ED_IS_SHORTCUT("editor/undo", p_event)) { + String action = undo_redo->get_current_action_name(); + if (action != "") + EditorNode::get_log()->add_message("Undo: " + action, EditorLog::MSG_TYPE_EDITOR); + undo_redo->undo(); + handled = true; + } - if (ED_IS_SHORTCUT("editor/undo", p_event)) { - String action = undo_redo->get_current_action_name(); - if (action != "") - EditorNode::get_log()->add_message("UNDO: " + action); - undo_redo->undo(); - handled = true; - } - if (ED_IS_SHORTCUT("editor/redo", p_event)) { - undo_redo->redo(); - String action = undo_redo->get_current_action_name(); - if (action != "") - EditorNode::get_log()->add_message("REDO: " + action); - handled = true; - } + if (ED_IS_SHORTCUT("editor/redo", p_event)) { + undo_redo->redo(); + String action = undo_redo->get_current_action_name(); + if (action != "") + EditorNode::get_log()->add_message("Redo: " + action, EditorLog::MSG_TYPE_EDITOR); + handled = true; + } - if (handled) { - accept_event(); - } + if (k->get_scancode_with_modifiers() == (KEY_MASK_CMD | KEY_F)) { + _focus_current_search_box(); + handled = true; + } + + if (handled) { + accept_event(); } } } @@ -307,15 +310,7 @@ void EditorSettingsDialog::_wait_for_key(const Ref<InputEvent> &p_event) { if (k.is_valid() && k->is_pressed() && k->get_scancode() != 0) { last_wait_for_key = k; - String str = keycode_get_string(k->get_scancode()).capitalize(); - if (k->get_metakey()) - str = vformat("%s+", find_keycode_name(KEY_META)) + str; - if (k->get_shift()) - str = TTR("Shift+") + str; - if (k->get_alt()) - str = TTR("Alt+") + str; - if (k->get_control()) - str = TTR("Control+") + str; + const String str = keycode_get_string(k->get_scancode_with_modifiers()); press_a_key_label->set_text(str); press_a_key->accept_event(); @@ -408,7 +403,6 @@ EditorSettingsDialog::EditorSettingsDialog() { tabs->set_tab_align(TabContainer::ALIGN_LEFT); tabs->connect("tab_changed", this, "_tabs_tab_changed"); add_child(tabs); - //set_child_rect(tabs); // General Tab @@ -425,7 +419,6 @@ EditorSettingsDialog::EditorSettingsDialog() { hbc->add_child(search_box); inspector = memnew(SectionedInspector); - //inspector->hide_top_label(); inspector->get_inspector()->set_use_filter(true); inspector->register_search_box(search_box); inspector->set_v_size_flags(Control::SIZE_EXPAND_FILL); @@ -474,7 +467,6 @@ EditorSettingsDialog::EditorSettingsDialog() { shortcuts->set_v_size_flags(SIZE_EXPAND_FILL); shortcuts->set_columns(2); shortcuts->set_hide_root(true); - //shortcuts->set_hide_folding(true); shortcuts->set_column_titles_visible(true); shortcuts->set_column_title(0, TTR("Name")); shortcuts->set_column_title(1, TTR("Binding")); @@ -495,9 +487,7 @@ EditorSettingsDialog::EditorSettingsDialog() { press_a_key->connect("gui_input", this, "_wait_for_key"); press_a_key->connect("confirmed", this, "_press_a_key_confirm"); - //get_ok()->set_text("Apply"); set_hide_on_ok(true); - //get_cancel()->set_text("Close"); timer = memnew(Timer); timer->set_wait_time(1.5); diff --git a/editor/spatial_editor_gizmos.cpp b/editor/spatial_editor_gizmos.cpp index 4c5371769f..16da2771b9 100644 --- a/editor/spatial_editor_gizmos.cpp +++ b/editor/spatial_editor_gizmos.cpp @@ -172,8 +172,8 @@ void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base, bool p_hidde instance = VS::get_singleton()->instance_create2(mesh->get_rid(), p_base->get_world()->get_scenario()); VS::get_singleton()->instance_attach_object_instance_id(instance, p_base->get_instance_id()); - if (skeleton.is_valid()) - VS::get_singleton()->instance_attach_skeleton(instance, skeleton); + if (skin_reference.is_valid()) + VS::get_singleton()->instance_attach_skeleton(instance, skin_reference->get_skeleton()); if (extra_margin) VS::get_singleton()->instance_set_extra_visibility_margin(instance, 1); VS::get_singleton()->instance_geometry_set_cast_shadows_setting(instance, VS::SHADOW_CASTING_SETTING_OFF); @@ -181,14 +181,14 @@ void EditorSpatialGizmo::Instance::create_instance(Spatial *p_base, bool p_hidde VS::get_singleton()->instance_set_layer_mask(instance, layer); //gizmos are 26 } -void EditorSpatialGizmo::add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard, const RID &p_skeleton, const Ref<Material> &p_material) { +void EditorSpatialGizmo::add_mesh(const Ref<ArrayMesh> &p_mesh, bool p_billboard, const Ref<SkinReference> &p_skin_reference, const Ref<Material> &p_material) { ERR_FAIL_COND(!spatial_node); Instance ins; ins.billboard = p_billboard; ins.mesh = p_mesh; - ins.skeleton = p_skeleton; + ins.skin_reference = p_skin_reference; ins.material = p_material; if (valid) { ins.create_instance(spatial_node, hidden); @@ -729,7 +729,7 @@ void EditorSpatialGizmo::set_plugin(EditorSpatialGizmoPlugin *p_plugin) { void EditorSpatialGizmo::_bind_methods() { ClassDB::bind_method(D_METHOD("add_lines", "lines", "material", "billboard"), &EditorSpatialGizmo::add_lines, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("add_mesh", "mesh", "billboard", "skeleton", "material"), &EditorSpatialGizmo::add_mesh, DEFVAL(false), DEFVAL(RID()), DEFVAL(Variant())); + ClassDB::bind_method(D_METHOD("add_mesh", "mesh", "billboard", "skeleton", "material"), &EditorSpatialGizmo::add_mesh, DEFVAL(false), DEFVAL(Ref<SkinReference>()), DEFVAL(Variant())); ClassDB::bind_method(D_METHOD("add_collision_segments", "segments"), &EditorSpatialGizmo::add_collision_segments); ClassDB::bind_method(D_METHOD("add_collision_triangles", "triangles"), &EditorSpatialGizmo::add_collision_triangles); ClassDB::bind_method(D_METHOD("add_unscaled_billboard", "material", "default_scale"), &EditorSpatialGizmo::add_unscaled_billboard, DEFVAL(1)); @@ -783,9 +783,10 @@ Vector3 EditorSpatialGizmo::get_handle_pos(int p_idx) const { LightSpatialGizmoPlugin::LightSpatialGizmoPlugin() { - Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/light", Color(1, 1, 0.2)); + Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/light", Color(1, 1, 0.7)); - create_material("lines", gizmo_color); + create_material("lines_primary", gizmo_color); + create_material("lines_secondary", gizmo_color * Color(1, 1, 1, 0.35)); create_material("lines_billboard", gizmo_color, true); create_icon_material("light_directional_icon", SpatialEditor::get_singleton()->get_icon("GizmoDirectionalLight", "EditorIcons")); @@ -937,7 +938,7 @@ void LightSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (Object::cast_to<DirectionalLight>(light)) { - Ref<Material> material = get_material("lines", p_gizmo); + Ref<Material> material = get_material("lines_primary", p_gizmo); Ref<Material> icon = get_material("light_directional_icon", p_gizmo); const int arrow_points = 7; @@ -975,31 +976,39 @@ void LightSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (Object::cast_to<OmniLight>(light)) { - Ref<Material> material = get_material("lines_billboard", p_gizmo); - Ref<Material> icon = get_material("light_omni_icon", p_gizmo); + // Use both a billboard circle and 3 non-billboard circles for a better sphere-like representation + const Ref<Material> lines_material = get_material("lines_secondary", p_gizmo); + const Ref<Material> lines_billboard_material = get_material("lines_billboard", p_gizmo); + const Ref<Material> icon = get_material("light_omni_icon", p_gizmo); OmniLight *on = Object::cast_to<OmniLight>(light); - - float r = on->get_param(Light::PARAM_RANGE); - + const float r = on->get_param(Light::PARAM_RANGE); Vector<Vector3> points; + Vector<Vector3> points_billboard; - for (int i = 0; i <= 360; i++) { + for (int i = 0; i < 120; i++) { - float ra = Math::deg2rad((float)i); - float rb = Math::deg2rad((float)i + 1); - Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * r; - Point2 b = Vector2(Math::sin(rb), Math::cos(rb)) * r; + // Create a circle + const float ra = Math::deg2rad((float)(i * 3)); + const float rb = Math::deg2rad((float)((i + 1) * 3)); + const Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * r; + const Point2 b = Vector2(Math::sin(rb), Math::cos(rb)) * r; - /*points.push_back(Vector3(a.x,0,a.y)); - points.push_back(Vector3(b.x,0,b.y)); - points.push_back(Vector3(0,a.x,a.y)); - points.push_back(Vector3(0,b.x,b.y));*/ + // Draw axis-aligned circles + points.push_back(Vector3(a.x, 0, a.y)); + points.push_back(Vector3(b.x, 0, b.y)); + points.push_back(Vector3(0, a.x, a.y)); + points.push_back(Vector3(0, b.x, b.y)); points.push_back(Vector3(a.x, a.y, 0)); points.push_back(Vector3(b.x, b.y, 0)); + + // Draw a billboarded circle + points_billboard.push_back(Vector3(a.x, a.y, 0)); + points_billboard.push_back(Vector3(b.x, b.y, 0)); } - p_gizmo->add_lines(points, material, true); + p_gizmo->add_lines(points, lines_material, true); + p_gizmo->add_lines(points_billboard, lines_billboard_material, true); p_gizmo->add_unscaled_billboard(icon, 0.05); Vector<Vector3> handles; @@ -1009,40 +1018,44 @@ void LightSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { if (Object::cast_to<SpotLight>(light)) { - Ref<Material> material = get_material("lines", p_gizmo); - Ref<Material> icon = get_material("light_spot_icon", p_gizmo); + const Ref<Material> material_primary = get_material("lines_primary", p_gizmo); + const Ref<Material> material_secondary = get_material("lines_secondary", p_gizmo); + const Ref<Material> icon = get_material("light_spot_icon", p_gizmo); - Vector<Vector3> points; + Vector<Vector3> points_primary; + Vector<Vector3> points_secondary; SpotLight *sl = Object::cast_to<SpotLight>(light); float r = sl->get_param(Light::PARAM_RANGE); float w = r * Math::sin(Math::deg2rad(sl->get_param(Light::PARAM_SPOT_ANGLE))); float d = r * Math::cos(Math::deg2rad(sl->get_param(Light::PARAM_SPOT_ANGLE))); - for (int i = 0; i < 360; i++) { - - float ra = Math::deg2rad((float)i); - float rb = Math::deg2rad((float)i + 1); - Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * w; - Point2 b = Vector2(Math::sin(rb), Math::cos(rb)) * w; + for (int i = 0; i < 120; i++) { - points.push_back(Vector3(a.x, a.y, -d)); - points.push_back(Vector3(b.x, b.y, -d)); + // Draw a circle + const float ra = Math::deg2rad((float)(i * 3)); + const float rb = Math::deg2rad((float)((i + 1) * 3)); + const Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * w; + const Point2 b = Vector2(Math::sin(rb), Math::cos(rb)) * w; - if (i % 90 == 0) { + points_primary.push_back(Vector3(a.x, a.y, -d)); + points_primary.push_back(Vector3(b.x, b.y, -d)); - points.push_back(Vector3(a.x, a.y, -d)); - points.push_back(Vector3()); + if (i % 15 == 0) { + // Draw 8 lines from the cone origin to the sides of the circle + points_secondary.push_back(Vector3(a.x, a.y, -d)); + points_secondary.push_back(Vector3()); } } - points.push_back(Vector3(0, 0, -r)); - points.push_back(Vector3()); + points_primary.push_back(Vector3(0, 0, -r)); + points_primary.push_back(Vector3()); - p_gizmo->add_lines(points, material); + p_gizmo->add_lines(points_primary, material_primary); + p_gizmo->add_lines(points_secondary, material_secondary); - float ra = 16 * Math_PI * 2.0 / 64.0; - Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * w; + const float ra = 16 * Math_PI * 2.0 / 64.0; + const Point2 a = Vector2(Math::sin(ra), Math::cos(ra)) * w; Vector<Vector3> handles; handles.push_back(Vector3(0, 0, -r)); @@ -1061,7 +1074,8 @@ AudioStreamPlayer3DSpatialGizmoPlugin::AudioStreamPlayer3DSpatialGizmoPlugin() { Color gizmo_color = EDITOR_DEF("editors/3d_gizmos/gizmo_colors/stream_player_3d", Color(0.4, 0.8, 1)); create_icon_material("stream_player_3d_icon", SpatialEditor::get_singleton()->get_icon("GizmoSpatialSamplePlayer", "EditorIcons")); - create_material("stream_player_3d_material", gizmo_color); + create_material("stream_player_3d_material_primary", gizmo_color); + create_material("stream_player_3d_material_secondary", gizmo_color * Color(1, 1, 1, 0.35)); create_handle_material("handles"); } @@ -1147,50 +1161,53 @@ void AudioStreamPlayer3DSpatialGizmoPlugin::commit_handle(EditorSpatialGizmo *p_ void AudioStreamPlayer3DSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { - AudioStreamPlayer3D *player = Object::cast_to<AudioStreamPlayer3D>(p_gizmo->get_spatial_node()); + const AudioStreamPlayer3D *player = Object::cast_to<AudioStreamPlayer3D>(p_gizmo->get_spatial_node()); p_gizmo->clear(); - Ref<Material> icon = get_material("stream_player_3d_icon", p_gizmo); + const Ref<Material> icon = get_material("stream_player_3d_icon", p_gizmo); if (player->is_emission_angle_enabled()) { - Ref<Material> material = get_material("stream_player_3d_material", p_gizmo); - - float pc = player->get_emission_angle(); - - Vector<Vector3> points; - points.resize(208); + const float pc = player->get_emission_angle(); + const float ofs = -Math::cos(Math::deg2rad(pc)); + const float radius = Math::sin(Math::deg2rad(pc)); - float ofs = -Math::cos(Math::deg2rad(pc)); - float radius = Math::sin(Math::deg2rad(pc)); + Vector<Vector3> points_primary; + points_primary.resize(200); for (int i = 0; i < 100; i++) { - float a = i * 2.0 * Math_PI / 100.0; - float an = (i + 1) * 2.0 * Math_PI / 100.0; + const float a = i * 2.0 * Math_PI / 100.0; + const float an = (i + 1) * 2.0 * Math_PI / 100.0; - Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); - Vector3 to(Math::sin(an) * radius, Math::cos(an) * radius, ofs); + const Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); + const Vector3 to(Math::sin(an) * radius, Math::cos(an) * radius, ofs); - points.write[i * 2 + 0] = from; - points.write[i * 2 + 1] = to; + points_primary.write[i * 2 + 0] = from; + points_primary.write[i * 2 + 1] = to; } - for (int i = 0; i < 4; i++) { + const Ref<Material> material_primary = get_material("stream_player_3d_material_primary", p_gizmo); + p_gizmo->add_lines(points_primary, material_primary); + + Vector<Vector3> points_secondary; + points_secondary.resize(16); - float a = i * 2.0 * Math_PI / 4.0; + for (int i = 0; i < 8; i++) { - Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); + const float a = i * 2.0 * Math_PI / 8.0; + const Vector3 from(Math::sin(a) * radius, Math::cos(a) * radius, ofs); - points.write[200 + i * 2 + 0] = from; - points.write[200 + i * 2 + 1] = Vector3(); + points_secondary.write[i * 2 + 0] = from; + points_secondary.write[i * 2 + 1] = Vector3(); } - p_gizmo->add_lines(points, material); + const Ref<Material> material_secondary = get_material("stream_player_3d_material_secondary", p_gizmo); + p_gizmo->add_lines(points_secondary, material_secondary); Vector<Vector3> handles; - float ha = Math::deg2rad(player->get_emission_angle()); + const float ha = Math::deg2rad(player->get_emission_angle()); handles.push_back(Vector3(Math::sin(ha), 0, -Math::cos(ha))); p_gizmo->add_handles(handles, get_material("handles")); } @@ -1543,12 +1560,12 @@ Position3DSpatialGizmoPlugin::Position3DSpatialGizmoPlugin() { cursor_points.push_back(Vector3(0, -cs, 0)); cursor_points.push_back(Vector3(0, 0, +cs)); cursor_points.push_back(Vector3(0, 0, -cs)); - cursor_colors.push_back(Color(1, 0.5, 0.5, 0.7)); - cursor_colors.push_back(Color(1, 0.5, 0.5, 0.7)); - cursor_colors.push_back(Color(0.5, 1, 0.5, 0.7)); - cursor_colors.push_back(Color(0.5, 1, 0.5, 0.7)); - cursor_colors.push_back(Color(0.5, 0.5, 1, 0.7)); - cursor_colors.push_back(Color(0.5, 0.5, 1, 0.7)); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_x_color", "Editor")); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_x_color", "Editor")); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_y_color", "Editor")); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_y_color", "Editor")); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor")); + cursor_colors.push_back(EditorNode::get_singleton()->get_gui_base()->get_color("axis_z_color", "Editor")); Ref<SpatialMaterial> mat = memnew(SpatialMaterial); mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); @@ -1789,7 +1806,7 @@ void SkeletonSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { } Ref<ArrayMesh> m = surface_tool->commit(); - p_gizmo->add_mesh(m, false, skel->get_skeleton()); + p_gizmo->add_mesh(m, false, skel->register_skin(Ref<Skin>())); } //// @@ -3712,7 +3729,8 @@ void CollisionShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { Ref<ConcavePolygonShape> cs2 = s; Ref<ArrayMesh> mesh = cs2->get_debug_mesh(); - p_gizmo->add_mesh(mesh, false, RID(), material); + p_gizmo->add_mesh(mesh, false, Ref<SkinReference>(), material); + p_gizmo->add_collision_segments(cs2->get_debug_mesh_lines()); } if (Object::cast_to<RayShape>(*s)) { @@ -3734,7 +3752,7 @@ void CollisionShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { Ref<HeightMapShape> hms = s; Ref<ArrayMesh> mesh = hms->get_debug_mesh(); - p_gizmo->add_mesh(mesh, false, RID(), material); + p_gizmo->add_mesh(mesh, false, Ref<SkinReference>(), material); } } diff --git a/editor/translations/af.po b/editor/translations/af.po index 5c4eb539a8..131ecd5c0d 100644 --- a/editor/translations/af.po +++ b/editor/translations/af.po @@ -60,6 +60,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Bevry" @@ -348,6 +376,7 @@ msgstr "Skep %d NUWE bane en voeg sleutels by?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Skep" @@ -479,15 +508,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Dupliseer Seleksie" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Selekteer 'n AnimasieSpeler van die Toeneel Boom om animasies te redigeer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -625,8 +650,9 @@ msgid "Scale Ratio:" msgstr "Skaal Verhouding:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Stel Oorgange na:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -637,6 +663,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Dupliseer Seleksie" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -823,7 +854,8 @@ msgstr "Koppel tans Sein:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -933,7 +965,8 @@ msgstr "Soek:" msgid "Matches:" msgstr "Passendes:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -976,7 +1009,7 @@ msgid "Resource" msgstr "Hulpbron" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Pad" @@ -1256,7 +1289,8 @@ msgid "Delete Bus Effect" msgstr "Skrap Bus Effek" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Oudio-Bus, Sleep-en-los om dit te herrangskik." #: editor/editor_audio_buses.cpp @@ -1455,7 +1489,9 @@ msgid "Add AutoLoad" msgstr "Voeg AutoLaai By" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pad:" @@ -1510,7 +1546,7 @@ msgstr "Skep Vouer" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Naam:" @@ -1690,6 +1726,7 @@ msgstr "Maak Funksie" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1767,6 +1804,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Verfris" @@ -1920,6 +1958,7 @@ msgid "Class:" msgstr "Klas:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Erf:" @@ -1928,7 +1967,8 @@ msgid "Inherited by:" msgstr "Geërf deur:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Kort Beskrywing:" #: editor/editor_help.cpp @@ -1936,41 +1976,19 @@ msgid "Properties" msgstr "Eienskappe" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metodes" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metodes" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Eienskappe" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Eienskappe" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Seine:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Opnoemings" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Opnoemings:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1979,21 +1997,12 @@ msgid "Constants" msgstr "Konstantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstantes:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Beskrywing" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "Beskrywing:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -2012,11 +2021,6 @@ msgid "Property Descriptions" msgstr "Eienskap Beskrywing:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Eienskap Beskrywing:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2030,11 +2034,6 @@ msgid "Method Descriptions" msgstr "Metode Beskrywing:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Metode Beskrywing:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2112,8 +2111,8 @@ msgstr "Afvoer:" msgid "Copy Selection" msgstr "Verwyder Seleksie" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2127,6 +2126,48 @@ msgstr "Vee uit" msgid "Clear Output" msgstr "Afvoer:" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2674,6 +2715,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2877,10 +2930,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2932,14 +2981,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2957,15 +3002,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3028,6 +3079,11 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Hulpbron" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3037,6 +3093,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Afhanklikheid Bewerker" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -3065,11 +3126,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3168,6 +3224,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3194,14 +3254,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Afhanklikheid Bewerker" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3885,9 +3937,10 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Herset Zoem" #: editor/import_dock.cpp msgid "Reimport" @@ -4016,7 +4069,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4158,6 +4211,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Afhanklikheid Bewerker" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4337,6 +4397,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4519,7 +4580,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4697,6 +4757,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4904,6 +4966,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Ek sien..." @@ -4917,10 +4983,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5195,20 +5257,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Wissel Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5299,8 +5369,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5569,6 +5638,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6208,6 +6281,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6263,7 +6340,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6372,6 +6450,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Eienskappe" @@ -6479,11 +6562,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6566,7 +6649,7 @@ msgstr "" msgid "Connections to method:" msgstr "Koppel aan Nodus:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Hulpbron" @@ -6652,6 +6735,11 @@ msgstr "Skep" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6710,10 +6798,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Vind" @@ -7046,6 +7130,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7079,6 +7167,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7311,6 +7403,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7362,6 +7458,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Skuif Byvoeg Sleutel" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animasie Zoem." @@ -7687,6 +7788,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Eienskappe" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7825,6 +7935,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Skuif huidige baan op." @@ -7994,19 +8109,115 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Skep Nuwe" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Verander Skikking Waarde-Soort" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Nodus Naam:" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Skrap" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Skaal Seleksie" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Vervang Alles" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "Afvoer:" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8019,6 +8230,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Gunstelinge:" @@ -8241,6 +8456,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8890,12 +9110,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9446,6 +9668,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9584,6 +9810,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9752,10 +9982,6 @@ msgstr "" msgid "Reset" msgstr "Herset Zoem" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9811,6 +10037,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9851,10 +10081,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Skrap" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Skrap" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9873,11 +10117,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9954,6 +10196,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Opnoemings" @@ -9972,10 +10222,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Skep Nuwe" @@ -10213,43 +10459,65 @@ msgid "Will load an existing script file." msgstr "Laai 'n bestaande Bus Uitleg." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Klas:" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Afhanklikheid Bewerker" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Fout terwyl laai:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "C++ Source" +msgstr "Hulpbron" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Hulpbron" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Hulpbron" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10257,14 +10525,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Ontkoppel" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Skep" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10281,6 +10555,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Skep Vouer" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10293,6 +10572,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10490,10 +10773,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10502,6 +10781,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10656,6 +10939,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Eienskappe" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10795,6 +11087,10 @@ msgid "Create a new variable." msgstr "Skep Nuwe" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Seine:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Skep Intekening" @@ -10824,6 +11120,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Hernoem AutoLaai" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10832,6 +11133,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Gunstelinge:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Gunstelinge:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Hernoem AutoLaai" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Verwyder Seleksie" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10872,10 +11193,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10901,6 +11232,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Ontkoppel" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Koppel aan Nodus:" @@ -10934,6 +11270,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Skep Nuwe" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10954,7 +11311,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10962,7 +11319,7 @@ msgid "Members:" msgstr "Lede:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10987,6 +11344,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Maak Funksie" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Verfris" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Lede" @@ -11082,6 +11449,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11103,7 +11474,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11182,6 +11554,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11730,10 +12106,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11763,6 +12135,32 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metodes" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Eienskappe" + +#~ msgid "Enumerations:" +#~ msgstr "Opnoemings:" + +#~ msgid "Constants:" +#~ msgstr "Konstantes:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Beskrywing:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Eienskap Beskrywing:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Metode Beskrywing:" + +#, fuzzy #~ msgid "Error: could not load file." #~ msgstr "Kon nie vouer skep nie." @@ -11865,9 +12263,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Skuif Anim Baan Af" -#~ msgid "Set Transitions to:" -#~ msgstr "Stel Oorgange na:" - #~ msgid "Anim Track Rename" #~ msgstr "Anim Baan Hernoem" diff --git a/editor/translations/ar.po b/editor/translations/ar.po index 341617c1b8..a4133403a1 100644 --- a/editor/translations/ar.po +++ b/editor/translations/ar.po @@ -34,8 +34,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-15 10:23+0000\n" -"Last-Translator: Rachid Graphicos <graphicos1d@gmail.com>\n" +"PO-Revision-Date: 2019-10-04 03:15+0000\n" +"Last-Translator: Omar Aglan <omar.aglan91@yahoo.com>\n" "Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/" "godot/ar/>\n" "Language: ar\n" @@ -44,12 +44,12 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 3.8\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "نوع برهان خاطئ للتØÙˆÙŠÙ„()ØŒ إستخدم ثابت TYPE_*." +msgstr "نوع معامل خاطئ للدالة convert()ØŒ إستخدم ثوابت TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -59,72 +59,99 @@ msgstr "لا يوجد ما يكÙÙŠ من البايتات من أجل ÙÙƒ Ø§Ù„Ø #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "إدخال خاطيء i% (لم يتم تمريره) ÙÙŠ التصريØ" +msgstr "مدخلات خاطئة i% (لم يتم تمريره) ÙÙŠ التعبير" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "لا يمكن استخدام Ø§Ù„ØØ§Ù„Ø© لأن Ù„ØØ¸Ø© التشغيل عدم (لم بتم ارسالها)" +msgstr "لا يمكن إستخدامه Ù†ÙØ³Ù‡ لأن Ø§Ù„ØØ§Ù„Ø© ÙØ§Ø±ØºØ© (لم ÙŠÙمرر)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "معاملات غير ØµØ§Ù„ØØ© للتشغل s,%s% Ùˆ s%." +msgstr "معاملات غير ØµØ§Ù„ØØ© للمشغل sØŒ%s% Ùˆ s%." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "الرمز غير Ù…ØªØ§Ø Ù„Ù„Ù†ÙˆØ¹ %s للنوع %s" +msgstr "Ùهرس غير صØÙŠØ للنوع %s التابع للنوع الأساسي %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "أسم غير صØÙŠØ للÙهرس '%s' للنوع الأساسي %s" +msgstr "أسم Ùهرس غير صØÙŠØ '%s' للنوع الأساسي %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "نقاش غير ØµØ§Ù„ØØ© للبناء '%s'" +msgstr "معامل غير ØµØ§Ù„Ø Ù„Ù„Ø¥Ù†Ø´Ø§Ø¡ '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "عند الأستدعاء إلى '%s':" +msgstr "عند استدعاء '%s':" + +#: core/ustring.cpp +msgid "B" +msgstr "بايت" + +#: core/ustring.cpp +msgid "KiB" +msgstr "كيلوبايت" + +#: core/ustring.cpp +msgid "MiB" +msgstr "ميجابايت" + +#: core/ustring.cpp +msgid "GiB" +msgstr "جيجابايت" + +#: core/ustring.cpp +msgid "TiB" +msgstr "تيرابايت" + +#: core/ustring.cpp +msgid "PiB" +msgstr "بيتابايت" + +#: core/ustring.cpp +msgid "EiB" +msgstr "إكسابايت" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "مجاني/ÙØ§Ø±Øº" +msgstr "ÙØ§Ø±Øº" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "متوازن / متعادل" +msgstr "متعادل" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "عكس / الإنعكاس" +msgstr "انعكاس" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" msgstr "الوقت:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" msgstr "القيمة:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "أدخل الرمز هنا" +msgstr "أدخل Ø§Ù„Ù…ÙØªØ§Ø هنا" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "تكرار Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" +msgstr "استنساخ Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ø²Ù…ÙˆØ² Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" +msgstr "Ø¥Ù…Ø³Ø Ø§Ù„Ù…ÙØ§ØªÙŠØ Ø§Ù„Ù…ØØ¯Ø¯(Ø©)" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "Ø¥Ø¶Ø§ÙØ© نقطة Bezier" +msgstr "Ø¥Ø¶Ø§ÙØ© نقطة بيزية" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "ØªØØ±ÙŠÙƒ نقطة الBezier" +msgstr "ØªØØ±ÙŠÙƒ نقاط بيزية" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -140,7 +167,7 @@ msgstr "تغيير وقت الإطار الرئيسي Ù„Ù„ØØ±ÙƒØ©" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "تغيير المقطع الإنتقالي" +msgstr "تغيير إنتقالية Ø§Ù„ØªØØ±ÙŠÙƒ" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" @@ -355,6 +382,7 @@ msgstr "أنشئ %d مسارات جديدة Ùˆ أدخل Ù…ÙØ§ØªÙŠØØŸ" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "أنشئ" @@ -403,9 +431,8 @@ msgstr "" "-الصوت الجاري للأعب ثلاثي الأبعاد" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "مسارات Ø§Ù„ØØ±ÙƒØ© يمكنها Ùقط أن تشير إلى عقدة مشغّل Ø§Ù„ØØ±ÙƒØ© AnimationPlayer" +msgstr "مسارات Ø§Ù„ØØ±ÙƒØ© يمكنها Ùقط أن تشير إلى عقد مشغّل Ø§Ù„ØØ±ÙƒØ©." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." @@ -492,15 +519,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "ØªØØ¯ÙŠØ¯ الكل" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "ØªØØ¯ÙŠØ¯ الوضع" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "ØØ¯Ø¯ مشغل ØØ±ÙƒØ© من شجرة المشهد لكي تعدل Ø§Ù„ØØ±ÙƒØ©." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -585,9 +607,8 @@ msgid "Pick the node that will be animated:" msgstr "إختار العقدة التي سو٠يتم ØªØØ±ÙŠÙƒÙ‡Ø§:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Use Bezier Curves" -msgstr "إستعمل خطوط أو منØÙ†ÙŠØ§Øª Bezier" +msgstr "إستعمل منØÙ†ÙŠØ§Øª بيزية" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -634,7 +655,8 @@ msgid "Scale Ratio:" msgstr "نسبة التكبير:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "ØØ¯Ø¯ مقاطع لنسخ:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -646,6 +668,11 @@ msgstr "ØØ¯Ø¯ مقاطع لنسخ:" msgid "Copy" msgstr "أنسخ" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "ØªØØ¯ÙŠØ¯ الوضع" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "أض٠مقطع صوت" @@ -831,7 +858,8 @@ msgstr "قم بوصل الإشارة: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -935,7 +963,8 @@ msgstr "Ø¨ØØ«:" msgid "Matches:" msgstr "يطابق:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -978,7 +1007,7 @@ msgid "Resource" msgstr "مورد" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "المسار" @@ -1252,7 +1281,8 @@ msgid "Delete Bus Effect" msgstr "Ù…Ø³Ø ØªØ£Ø«ÙŠØ± البيوس" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "بيوس الصوت، Ø³ØØ¨ وإسقاط لإعادة الترتيب." #: editor/editor_audio_buses.cpp @@ -1447,7 +1477,9 @@ msgid "Add AutoLoad" msgstr "Ø¥Ø¶Ø§ÙØ© للتØÙ…يل التلقائي" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "المسار:" @@ -1502,7 +1534,7 @@ msgstr "أنشئ مجلد" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "الأسم:" @@ -1583,9 +1615,8 @@ msgid "Script Editor" msgstr "ÙØªØ Ù…ÙØ¹Ø¯Ù„ الكود" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "ÙØªØ مكتبة الأصول" +msgstr "مكتبة الأصول" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" @@ -1689,6 +1720,7 @@ msgstr "Ø§Ù„ØØ§Ù„ÙŠ:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1769,6 +1801,7 @@ msgid "New Folder..." msgstr "مجلد جديد..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "ØªØØ¯ÙŠØ«" @@ -1924,6 +1957,7 @@ msgid "Class:" msgstr "صنÙ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "يرث:" @@ -1932,7 +1966,8 @@ msgid "Inherited by:" msgstr "مورث بواسطة:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "وص٠مختصر:" #: editor/editor_help.cpp @@ -1940,41 +1975,18 @@ msgid "Properties" msgstr "خصائص" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "خصائص:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "قائمة الطرق" #: editor/editor_help.cpp -#, fuzzy -msgid "Methods:" -msgstr "قائمة الطرق" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" -msgstr "خصائص النمط" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "خصائص" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "الإشارات:" +msgstr "خصائص الثمة" #: editor/editor_help.cpp msgid "Enumerations" msgstr "التعدادات" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "التعدادات:" - -#: editor/editor_help.cpp msgid "enum " msgstr "التعداد " @@ -1983,19 +1995,12 @@ msgid "Constants" msgstr "الثوابت" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "الثوابت:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "وص٠الصÙ" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "وص٠الصÙ:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "الدورس علي الإنترنت:" #: editor/editor_help.cpp @@ -2014,11 +2019,6 @@ msgid "Property Descriptions" msgstr "وص٠الملكية:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "وص٠الملكية:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2032,11 +2032,6 @@ msgid "Method Descriptions" msgstr "وص٠الطريقة:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "وص٠الطريقة:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2083,9 +2078,8 @@ msgid "Member Type" msgstr "نوع العضو" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "صنÙ:" +msgstr "الصنÙ" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2108,8 +2102,8 @@ msgstr "الخرج:" msgid "Copy Selection" msgstr "ØØ°Ù Ø§Ù„Ù…ÙØØ¯Ø¯" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2122,6 +2116,50 @@ msgstr "خالي" msgid "Clear Output" msgstr "أخلاء الخرج" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "إيقاÙ" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "بدء!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "تنزيل" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "عقدة" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2709,6 +2747,19 @@ msgstr "مشروع" msgid "Project Settings..." msgstr "إعدادات المشروع" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "النسخة:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2936,10 +2987,6 @@ msgstr "إيقا٠مؤقت للمشهد" msgid "Stop the scene." msgstr "إيقا٠المشهد." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "إيقاÙ" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "تشغيل المشهد Ø§Ù„Ù…ÙØ¹Ø¯Ù„." @@ -2995,15 +3042,11 @@ msgid "Inspector" msgstr "Ù…ÙØ±Ø§Ù‚ب" #: editor/editor_node.cpp -msgid "Node" -msgstr "عقدة" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "توسيع الكل" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "الخرج" @@ -3022,15 +3065,21 @@ msgstr "إدارة قوالب التصدير" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3093,6 +3142,11 @@ msgstr "ÙØªØ ÙÙŠ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ التالي" msgid "Open the previous Editor" msgstr "Ø¥ÙØªØ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ السابق" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "لا مصدر Ù„Ù„Ø³Ø·Ø ØªÙ… ØªØØ¯ÙŠØ¯Ù‡." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "ÙŠÙنشئ مستعرضات الميش" @@ -3103,6 +3157,11 @@ msgstr "الصورة المصغرة..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "ÙØªØ الكود" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "تعديل البولي" @@ -3132,12 +3191,6 @@ msgstr "Ø§Ù„ØØ§Ù„Ø©:" msgid "Edit:" msgstr "Ø§Ù„Ù…ÙØ¹Ø¯Ù„" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "بدء!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "قياس:" @@ -3236,6 +3289,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "ÙØªØ الكود" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3262,14 +3320,6 @@ msgstr "" msgid "Convert To %s" msgstr "تØÙˆÙŠÙ„ إلي %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "ÙØªØ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ 2D" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3965,8 +4015,9 @@ msgstr " Ù…Ù„ÙØ§Øª" msgid "Import As:" msgstr "إستيراد كـ:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "إعداد Ù…ÙØ³Ø¨Ù‚..." #: editor/import_dock.cpp @@ -4099,7 +4150,7 @@ msgstr "Ø¥Ø¶Ø§ÙØ§Øª" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4252,6 +4303,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "ÙØªØ Ø§Ù„Ù…ÙØ¹Ø¯Ù„ 2D" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4436,6 +4494,7 @@ msgid "Change Animation Name:" msgstr "تغيير إسم Ø§Ù„ØØ±ÙƒØ©:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Ù…Ø³Ø Ø§Ù„ØØ±ÙƒØ©ØŸ" @@ -4619,7 +4678,6 @@ msgstr "إسم Ø§Ù„ØØ±ÙƒØ©:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "خطأ!" @@ -4731,7 +4789,7 @@ msgstr "تØÙˆÙ„" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "AnimationTree" -msgstr "شجرة Ø§Ù„ØØ±ÙƒØ©" +msgstr "مسارات Ø§Ù„ØªØØ±ÙŠÙƒ" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "New name:" @@ -4796,6 +4854,8 @@ msgid "Current:" msgstr "Ø§Ù„ØØ§Ù„ÙŠ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "أض٠مدخله" @@ -5010,6 +5070,10 @@ msgid "All" msgstr "الكل" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "إستيراد" @@ -5024,11 +5088,6 @@ msgid "Sort:" msgstr "ترتيب:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "جار الطلب..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Ø§Ù„ÙØ¦Ø©:" @@ -5315,23 +5374,33 @@ msgstr "وضع Ø§Ù„Ø³ØØ¨" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "ØªØØ¯ÙŠØ¯ الوضع" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ الكبس" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "إستخدم الكبس" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "إعدادات الكبس" +msgid "Toggle grid snapping." +msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ الكبس" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "الكبس إلي الشبكة" +msgid "Use Grid Snap" +msgstr "إستخدم الكبس" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "إعدادات الكبس" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5429,8 +5498,8 @@ msgid "View" msgstr "أظهر" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "إظهار الشبكة" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5618,7 +5687,7 @@ msgstr "التقط من البيكسل" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "الوان الانبعاث" +msgstr "الوان الإنبعاث" #: editor/plugins/cpu_particles_editor_plugin.cpp #, fuzzy @@ -5706,6 +5775,11 @@ msgstr "إلغاء/ØªÙØ¹ÙŠÙ„ مماس خط المنØÙ†ÙŠ" msgid "Hold Shift to edit tangents individually" msgstr "إبقي ضاغطاً علي Shift لتعديل المماس ÙØ±Ø¯ÙŠØ§Ù‹" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "إظغط: أض٠نقطة" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "طبخ مجس GI" @@ -5802,9 +5876,8 @@ msgid "Create Outline" msgstr "أنشئ Ø§Ù„ØØ¯" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Mesh" -msgstr "شبكة" +msgstr "مجسم" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -6128,9 +6201,8 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp -#, fuzzy msgid "Options" -msgstr "الخيارات" +msgstr "الإعدادات" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -6360,6 +6432,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "إظهار الشبكة" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "تعديل اللقطة" @@ -6420,7 +6496,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6531,6 +6608,11 @@ msgid "Find Next" msgstr "Ø¨ØØ« عن التالي" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "خصائص العنصر." @@ -6638,11 +6720,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6727,7 +6809,7 @@ msgstr "إخلاء المشاهد Ø§Ù„ØØ§Ù„ية" msgid "Connections to method:" msgstr "صلها بالعقدة:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "مورد" @@ -6813,6 +6895,11 @@ msgstr "Ù…Ø³Ø Ø§Ù„Ù†Ù‚Ø§Ø·" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "ØªØØ¯ÙŠØ¯ الكل" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6873,10 +6960,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª..." @@ -6976,9 +7059,8 @@ msgid "Create physical bones" msgstr "أنشئ ميش التنقل" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Ø§Ù„ÙØ±Ø¯ÙŠØ©" +msgstr "الهيكل" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -7213,6 +7295,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7247,6 +7333,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "إستخدم الكبس" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7484,6 +7574,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7536,6 +7630,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "وضع Ø§Ù„ØªØØ±ÙŠÙƒ" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "صورة Ù…ØªØØ±ÙƒØ©" @@ -7709,7 +7808,6 @@ msgid "Disabled Button" msgstr "معطّل" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Item" msgstr "عنصر" @@ -7719,24 +7817,20 @@ msgid "Disabled Item" msgstr "معطّل" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Check Item" -msgstr "اختار العنصر" +msgstr "Ùَعل العنصر" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Item" -msgstr "عنصر مَضْبÙوط" +msgstr "عنصر Ù…ÙÙØ¹Ù„" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Radio Item" -msgstr "عنصر انتقاء" +msgstr "عنصر Ø®Ùيار" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Checked Radio Item" -msgstr "عنصر انتقاء مَضْبÙوط" +msgstr "عنصر Ù…ÙÙØ¹Ù„ اختياري" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." @@ -7873,6 +7967,15 @@ msgid "Enable Priority" msgstr "تعديل المصاÙÙŠ" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Ùلتر Ø§Ù„Ù…Ù„ÙØ§Øª..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8020,6 +8123,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ø¯Ø®Ù„Ø© Ø§Ù„ØØ§Ù„ية" @@ -8197,18 +8305,116 @@ msgstr "هذه العملية لا يمكن الإكتمال من غير Ù…Ø´Ù‡Ø msgid "TileSet" msgstr "مجموعة البلاط" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "أض٠مدخله" +msgid "No commit message was provided" +msgstr "لا أسم Ù…Ùقدم" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "المجتمع" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "إنشاء %s جديد" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "تغير" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "إعادة التسمية" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "مسØ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "تغير" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "تكبير Ø§Ù„Ù…ØØ¯Ø¯" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "اØÙظ الكل" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "مزامنة تغييرات الكود" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "أض٠مدخله" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8217,9 +8423,8 @@ msgid "Scalar" msgstr "تكبير/تصغير:" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector" -msgstr "Ù…ÙØ±Ø§Ù‚ب" +msgstr "متجه" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8227,6 +8432,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "عينات (صوتية)" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "أض٠مدخله" @@ -8453,6 +8663,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9108,12 +9323,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9669,6 +9886,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "ØØ±Ùƒ النقطة داخل المنØÙ†Ù‰" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9733,9 +9955,8 @@ msgid "Action:" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "عملية Ø§Ù„ØªØØ±ÙŠÙƒ" +msgstr "Ø§Ù„ÙØ¹Ù„" #: editor/project_settings_editor.cpp msgid "Deadzone" @@ -9808,6 +10029,10 @@ msgid "Plugins" msgstr "Ø¥Ø¶Ø§ÙØ§Øª" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "إعداد Ù…ÙØ³Ø¨Ù‚..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9979,10 +10204,6 @@ msgstr "" msgid "Reset" msgstr "إرجاع التكبير" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10038,6 +10259,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10079,10 +10304,24 @@ msgid "Make node as Root" msgstr "ØÙظ المشهد" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "إنشاء عقدة" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "إنشاء عقدة" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10101,11 +10340,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10185,6 +10422,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "ÙÙØªØ مؤخراً" @@ -10204,11 +10449,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "ÙØªØ الكود" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "إنشاء %s جديد" @@ -10455,24 +10695,19 @@ msgid "Will load an existing script file." msgstr "تØÙ…يل نسق بيوس موجود مسبقاً." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "إسم صنÙ" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Ù…Ø³Ø Ø§Ù„Ù‚Ø§Ù„Ø¨" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "ÙØªØ الكود" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10487,11 +10722,42 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "ØªØØ°ÙŠØ±Ø§Øª" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "خطأ!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "خطأ ÙÙŠ نسخ" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "خطأ ÙÙŠ نسخ" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "مورد" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "مورد" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "مورد" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10499,14 +10765,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "غير متصل" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "خطأ ÙÙŠ نسخ" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Ù…Ø³Ø Ø§Ù„Ù†Ù‚Ø§Ø·" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10523,6 +10795,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "تصدير المشروع" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10535,6 +10812,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10737,10 +11018,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10749,6 +11026,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "الخطوة (المتغيرة المدخلة/argument) تساوي ØµÙØ± !" @@ -10911,6 +11192,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "وضع Ø§Ù„Ù…ÙØµÙÙŠ:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11049,6 +11339,10 @@ msgid "Create a new variable." msgstr "إنشاء %s جديد" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "الإشارات:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "أنشئ شكل جديد من لا شئ." @@ -11078,6 +11372,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Ù…Ø³Ø Ø§Ù„Ù†Ù‚Ø·Ø©" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11086,6 +11385,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "أض٠مدخله" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "أض٠مدخله" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Ù…Ø³Ø Ø§Ù„Ù†Ù‚Ø·Ø©" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Ù…Ø³Ø Ø§Ù„Ù†Ù‚Ø·Ø©" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11126,10 +11445,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11155,6 +11484,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "غير متصل" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "صلها بالعقدة:" @@ -11189,6 +11523,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "عمل اشتراك" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ù‡Ù…Ø©" @@ -11209,16 +11564,18 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "أنشئ عظام" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "الأعضاء:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "الإعدادات:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11242,6 +11599,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Ù…Ø³Ø Ø§Ù„Ù…Ù‡Ù…Ø©" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "ØªØØ¯ÙŠØ«" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "الأعضاء" @@ -11337,6 +11704,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "اختار جهاز من القائمة" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11358,7 +11729,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11437,6 +11809,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "تشغيل ÙÙŠ Ø§Ù„Ù…ØªØµÙØ" @@ -11995,10 +12371,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "إدخال" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "مصدر غير ØµØ§Ù„Ø Ù„Ù„Ù…Ø¹Ø§ÙŠÙ†Ø©." @@ -12027,6 +12399,49 @@ msgstr "يمكن تعيين المتغيرات Ùقط ÙÙŠ الذروة ." msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "الكبس إلي الشبكة" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "أض٠مدخله" + +#~ msgid "Input" +#~ msgstr "إدخال" + +#~ msgid "Properties:" +#~ msgstr "خصائص:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "قائمة الطرق" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "خصائص" + +#~ msgid "Enumerations:" +#~ msgstr "التعدادات:" + +#~ msgid "Constants:" +#~ msgstr "الثوابت:" + +#~ msgid "Class Description:" +#~ msgstr "وص٠الصÙ:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "وص٠الملكية:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "وص٠الطريقة:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "جار الطلب..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12131,9 +12546,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "إذهب إلي المجلد السابق" -#~ msgid "Select device from the list" -#~ msgstr "اختار جهاز من القائمة" - #~ msgid "Open Scene(s)" #~ msgstr "ÙØªØ مشهد (مشاهد)" @@ -12200,9 +12612,6 @@ msgstr "" #~ msgid "Poly" #~ msgstr "تعديل البولي" -#~ msgid "No name provided" -#~ msgstr "لا أسم Ù…Ùقدم" - #~ msgid "Create Poly" #~ msgstr "إنشاء بولي" @@ -12475,9 +12884,6 @@ msgstr "" #~ msgid "Move Add Key" #~ msgstr "Ù…ÙØªØ§Ø Ø¥Ø¶Ø§ÙØ© Ø§Ù„ØØ±ÙƒØ©" -#~ msgid "Create Subscription" -#~ msgstr "عمل اشتراك" - #~ msgid "List:" #~ msgstr "القائمة:" @@ -12495,6 +12901,3 @@ msgstr "" #~ msgid "The quick brown fox jumps over the lazy dog." #~ msgstr "أبجد هوز ØØ·ÙŠ ÙƒÙ„Ù…Ù† ØµØ¹ÙØµ قرشت ثخذ ضظغ." - -#~ msgid "Samples" -#~ msgstr "عينات (صوتية)" diff --git a/editor/translations/bg.po b/editor/translations/bg.po index eab5310b25..880682ab7c 100644 --- a/editor/translations/bg.po +++ b/editor/translations/bg.po @@ -65,6 +65,34 @@ msgstr "Ðевалидени агрументи за конÑÑ‚Ñ€ÑƒÐºÑ†Ð¸Ñ '%s' msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp #, fuzzy msgid "Free" @@ -345,6 +373,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Създаване" @@ -476,15 +505,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Избиране на вÑичко" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Избиране на вÑичко" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -620,8 +643,9 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Изберете ÑвойÑтво" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -632,6 +656,11 @@ msgstr "" msgid "Copy" msgstr "Копиране" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Избиране на вÑичко" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -816,7 +845,8 @@ msgstr "Свържи Сигнала: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -922,7 +952,8 @@ msgstr "ТърÑене:" msgid "Matches:" msgstr "Съвпадащи:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -959,7 +990,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1226,7 +1257,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1419,7 +1450,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Път:" @@ -1474,7 +1507,7 @@ msgstr "Създаване на папка" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Име:" @@ -1653,6 +1686,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1732,6 +1766,7 @@ msgid "New Folder..." msgstr "Ðова папка..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1885,6 +1920,7 @@ msgid "Class:" msgstr "КлаÑ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ÐаÑледÑва:" @@ -1893,7 +1929,8 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Кратко ОпиÑание:" #: editor/editor_help.cpp @@ -1901,41 +1938,19 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Методи" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Методи" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "ПоÑтавÑне на възелите" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "ПоÑтавÑне на възелите" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Изброени типове" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1944,21 +1959,12 @@ msgid "Constants" msgstr "КонÑтанти" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "КонÑтанти:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "ОпиÑание" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "ОпиÑание:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1974,11 +1980,6 @@ msgid "Property Descriptions" msgstr "Кратко ОпиÑание:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Кратко ОпиÑание:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1990,11 +1991,6 @@ msgid "Method Descriptions" msgstr "ОпиÑание" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "ОпиÑание:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2069,8 +2065,8 @@ msgstr "" msgid "Copy Selection" msgstr "Ðова Ñцена" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2084,6 +2080,49 @@ msgstr "ИзчиÑтване" msgid "Clear Output" msgstr "Ðова Ñцена" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "ПремеÑти Ðадоло" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Възел" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2640,6 +2679,19 @@ msgstr "Проект" msgid "Project Settings..." msgstr "ÐаÑтройки на проекта" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "ВерÑиÑ:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2848,10 +2900,6 @@ msgstr "ПреуÑтановÑване на Ñцената" msgid "Stop the scene." msgstr "Спиране на Ñцената." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Възпроизвеждане на редактирана Ñцена." @@ -2903,14 +2951,10 @@ msgid "Inspector" msgstr "ИнÑпектор" #: editor/editor_node.cpp -msgid "Node" -msgstr "Възел" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Разшири Ð”Ð¾Ð»Ð½Ð¸Ñ ÐŸÐ°Ð½ÐµÐ»" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2929,15 +2973,21 @@ msgstr "Шаблони" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3001,6 +3051,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3011,6 +3065,11 @@ msgstr "" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Ðова Ñцена" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "ПриÑтавки" @@ -3039,11 +3098,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3141,6 +3195,11 @@ msgstr "" msgid "New Script" msgstr "Ðов Ñкрипт" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Ðова Ñцена" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3167,14 +3226,6 @@ msgstr "ПоÑтавÑне" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Ðова Ñцена" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3879,8 +3930,8 @@ msgstr "Файл:" msgid "Import As:" msgstr "ВнаÑÑне като:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -4013,7 +4064,7 @@ msgstr "ПриÑтавки" msgid "Subfolder:" msgstr "Подпапка:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp #, fuzzy msgid "Language:" msgstr "ВнаÑÑне на езици:" @@ -4164,6 +4215,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Ðова Ñцена" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4347,6 +4405,7 @@ msgid "Change Animation Name:" msgstr "Промени Името на ÐнимациÑта:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Изтриване на анимациÑта?" @@ -4526,7 +4585,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Грешка!" @@ -4705,6 +4763,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4914,6 +4974,10 @@ msgid "All" msgstr "Ð’Ñички" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Повторно внаÑÑне..." @@ -4928,11 +4992,6 @@ msgid "Sort:" msgstr "Подреждане:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Запитване..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "КатегориÑ:" @@ -5215,20 +5274,30 @@ msgid "Pan Mode" msgstr "Панорамен режим на ОтмеÑтване (на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†)" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." -msgstr "" +#, fuzzy +msgid "Ruler Mode" +msgstr "Режим на Селектиране" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Toggle smart snapping." +msgstr "Добави Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Добави Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5325,8 +5394,7 @@ msgid "View" msgstr "Изглед" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5594,6 +5662,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6239,6 +6311,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6294,7 +6370,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Тип:" @@ -6399,6 +6476,11 @@ msgid "Find Next" msgstr "Ðамери Ðапред" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "ПоÑтавÑне на възелите" @@ -6508,11 +6590,11 @@ msgid "Toggle Scripts Panel" msgstr "ВидимоÑÑ‚ на Панела ÑÑŠÑ Ð¡ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð²Ðµ" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6598,7 +6680,7 @@ msgstr "ЗатварÑне на Ñцената" msgid "Connections to method:" msgstr "Свързване..." -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6681,6 +6763,11 @@ msgstr "Създай точки." msgid "Cut" msgstr "ИзрÑзване" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Избиране на вÑичко" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Изтрий Ред" @@ -6740,10 +6827,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Ðамери във файлове" @@ -7080,6 +7163,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Свободен Изглед Отпред" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7113,6 +7201,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7346,6 +7438,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7398,6 +7494,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Режим на ПремеÑтване" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Ðнимационни ИнÑтрументи" @@ -7729,6 +7830,15 @@ msgid "Enable Priority" msgstr "Промени Филтрите" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ПоÑтавÑне на възелите" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7877,6 +7987,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "ПремеÑтване на пътечката нагоре." @@ -8055,20 +8170,116 @@ msgstr "" msgid "TileSet" msgstr "Файл:" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Ð’ÑÑка дума Ñ Ð“Ð»Ð°Ð²Ð½Ð° буква" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Създай нови възли." + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Възел" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Изтрий" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Покажи СелекциÑта (вмеÑти в Ñ†ÐµÐ»Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†)" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Запази Ð’Ñичко" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Add Output" +msgstr "Любими:" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Scalar" msgstr "Мащаб:" @@ -8082,6 +8293,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Любими:" @@ -8305,6 +8520,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8956,12 +9176,14 @@ msgstr "РеÑурÑи за изнаÑÑне:" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9528,6 +9750,10 @@ msgid "Settings saved OK." msgstr "ÐаÑтройките Ñа запазени." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9668,6 +9894,10 @@ msgid "Plugins" msgstr "ПриÑтавки" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9837,10 +10067,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9896,6 +10122,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9938,10 +10168,24 @@ msgid "Make node as Root" msgstr "Запазване на Ñцената" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Избиране на вÑичко" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Избиране на вÑичко" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9960,11 +10204,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10044,6 +10286,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Отвори документациÑта на Godot онлайн" @@ -10063,11 +10313,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Ðова Ñцена" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Създай нови възли." @@ -10312,24 +10557,19 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "КлаÑ:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Шаблони" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Ðова Ñцена" #: editor/script_create_dialog.cpp #, fuzzy @@ -10346,11 +10586,39 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +#, fuzzy +msgid "Warning:" +msgstr "ПредупреждениÑ:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Error:" +msgstr "Грешки:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Грешки" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Грешки:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10358,8 +10626,9 @@ msgid "Errors" msgstr "Грешки" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Разкачи" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10367,6 +10636,11 @@ msgid "Copy Error" msgstr "Грешки" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Създай точки." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10383,6 +10657,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "ИзнаÑÑне на проекта" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10395,6 +10674,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10596,10 +10879,6 @@ msgid "Library" msgstr "ИзнаÑÑне на библиотеката" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10608,6 +10887,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "Стъпката на range() е нула!" @@ -10778,6 +11061,15 @@ msgstr "ÐаÑтройки" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ПоÑтавÑне на възелите" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10915,6 +11207,10 @@ msgid "Create a new variable." msgstr "Създай нови възли." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Създай нов полигон от нулата." @@ -10944,6 +11240,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ЗатварÑне на вÑичко" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10952,6 +11253,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Любими:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Любими:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "ЗатварÑне на вÑичко" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "ВнаÑÑне на текÑтури" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10992,10 +11313,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11023,6 +11354,11 @@ msgstr "ИзрÑзване на възелите" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "ИзрÑзване на възелите" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "ИзрÑзване на възелите" @@ -11058,6 +11394,27 @@ msgid "Paste VisualScript Nodes" msgstr "ПоÑтавÑне на възелите" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Създай Очертание" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11078,7 +11435,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11086,7 +11443,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11111,6 +11468,15 @@ msgstr "ИзрÑзване на възелите" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Отиди на Ред" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Файл:" @@ -11206,6 +11572,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11227,7 +11597,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11305,6 +11676,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11891,10 +12266,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11923,6 +12294,33 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Методи" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "ПоÑтавÑне на възелите" + +#~ msgid "Constants:" +#~ msgstr "КонÑтанти:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "ОпиÑание:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Кратко ОпиÑание:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "ОпиÑание:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Запитване..." + #~ msgid "No faces!" #~ msgstr "ÐÑма лица!" @@ -12005,9 +12403,6 @@ msgstr "" #~ msgid "Create Exterior Connector" #~ msgstr "Създаване на нов проект" -#~ msgid "Warnings:" -#~ msgstr "ПредупреждениÑ:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "Изглед Отпред." @@ -12074,9 +12469,6 @@ msgstr "" #~ msgid "Search in files" #~ msgstr "ТърÑи във файлове" -#~ msgid "Errors:" -#~ msgstr "Грешки:" - #~ msgid "Length (s):" #~ msgstr "Дължина (Ñек.):" diff --git a/editor/translations/bn.po b/editor/translations/bn.po index 44a7be497c..fa1842f3a2 100644 --- a/editor/translations/bn.po +++ b/editor/translations/bn.po @@ -2,30 +2,29 @@ # Copyright (c) 2007-2019 Juan Linietsky, Ariel Manzur. # Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. -# # Abu Md. Maruf Sarker <maruf.webdev@gmail.com>, 2016-2017. # Abdullah Zubair <abdullahzubair109@gmail.com>, 2017. # Tahmid Karim <tahmidk15@gmail.com>, 2016. -# +# Tawhid H. <Tawhidk757@yahoo.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-12-13 14:38+0100\n" -"Last-Translator: Abdullah Zubair <abdullahzubair109@gmail.com>\n" +"PO-Revision-Date: 2019-09-26 11:50+0000\n" +"Last-Translator: Tawhid H. <Tawhidk757@yahoo.com>\n" "Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/" "godot/bn/>\n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 2.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ convert()-ঠগিয়েছে, TYPE_* ধà§à¦°à§à¦¬à¦• বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤" +msgstr "অবৈধ পà§à¦°à¦•ার রূপানà§à¦¤à¦° করার যà§à¦•à§à¦¤à¦¿(),use TYPE_* constants." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -35,11 +34,12 @@ msgstr "বিনà§à¦¯à¦¾à¦¸ জানার জনà§à¦¯ যথেষà§à¦Ÿ ঠ#: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "অবৈধ ইনপà§à¦Ÿ %i (পাস করা হয়নি) পà§à¦°à¦•াশে" #: core/math/expression.cpp +#, fuzzy msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "সà§à¦¬ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যাবে না কারণ উদাহরণটি হলো null(উতà§à¦¤à§€à¦°à§à¦£ হয়নি)" #: core/math/expression.cpp #, fuzzy @@ -53,15 +53,44 @@ msgstr "%s নোডে সূচক/ইনডেকà§à¦¸ মানের অঠ#: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "অবৈধ নামকরণ সূচক I '%s' for à¦à¦¿à¦¤à§à¦¤à¦¿ type %s" #: core/math/expression.cpp #, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-à¦à¦° ধরণ: " +msgstr ": অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-à¦à¦° ধরণ:" #: core/math/expression.cpp msgid "On call to '%s':" +msgstr "কল করà§à¦¨ '%s'" + +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "মিশà§à¦°à¦¿à¦¤ করà§à¦¨" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" msgstr "" #: editor/animation_bezier_editor.cpp @@ -70,7 +99,7 @@ msgstr "মà§à¦•à§à¦¤ করে দিন" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "সà§à¦¥à¦¿à¦°" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -82,9 +111,8 @@ msgid "Time:" msgstr "সময়:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" -msgstr "মান" +msgstr "মান:" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -112,8 +140,9 @@ msgid "Move Bezier Points" msgstr "বিনà§à¦¦à§ সরান" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Duplicate Keys" -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) কি ডà§à¦ªà§à¦²à¦¿à¦•েট করà§à¦¨" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (Anim) ডà§à¦ªà§à¦²à¦¿à¦•েট করà§à¦¨ কি" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" @@ -364,6 +393,7 @@ msgstr "%d à¦à¦° জনà§à¦¯ নতà§à¦¨ টà§à¦°à§à¦¯à¦¾à¦•/পথ-সমà #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "তৈরি করà§à¦¨" @@ -498,14 +528,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "সবগà§à¦²à¦¿ বাছাই করà§à¦¨" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "কোনোটাই নিরà§à¦¬à¦¾à¦šà¦¨ করবেন না" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ করতে দৃশà§à¦¯à§‡à¦° তালিকা থেকে à¦à¦•টি AnimationPlayer নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨à¥¤" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -644,8 +671,9 @@ msgid "Scale Ratio:" msgstr "সà§à¦•েল/মাপের অনà§à¦ªà¦¾à¦¤:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "গà§à¦£à¦¾à¦—à§à¦£/বৈশিষà§à¦Ÿà§à¦¯ বাছাই করà§à¦¨" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -656,6 +684,11 @@ msgstr "" msgid "Copy" msgstr "পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "কোনোটাই নিরà§à¦¬à¦¾à¦šà¦¨ করবেন না" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -845,7 +878,8 @@ msgstr "সংযোজক সংকেত/সিগনà§à¦¯à¦¾à¦²:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -957,7 +991,8 @@ msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨:" msgid "Matches:" msgstr "মিলসমূহ:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -1000,7 +1035,7 @@ msgid "Resource" msgstr "রিসোরà§à¦¸" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "পথ" @@ -1279,7 +1314,8 @@ msgid "Delete Bus Effect" msgstr "বাস ইফেকà§à¦Ÿ ডিলিট করà§à¦¨" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "অডিও বাস, পà§à¦¨à¦°à¦¾à¦¯à¦¼ সাজানোর জনà§à¦¯ ডà§à¦°à§à¦¯à¦¾à¦— à¦à¦¨à§à¦¡ ডà§à¦°à¦ª অà§à¦¯à¦¾à¦ªà§à¦²à¦¾à¦‡ করà§à¦¨à¥¤" #: editor/editor_audio_buses.cpp @@ -1482,7 +1518,9 @@ msgid "Add AutoLoad" msgstr "AutoLoad সংযà§à¦•à§à¦¤ করà§à¦¨" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "পথ:" @@ -1538,7 +1576,7 @@ msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "নাম:" @@ -1728,6 +1766,7 @@ msgstr "বরà§à¦¤à¦®à¦¾à¦¨:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "নতà§à¦¨" @@ -1810,6 +1849,7 @@ msgid "New Folder..." msgstr "ফোলà§à¦¡à¦¾à¦° তৈরি করà§à¦¨" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "রিফà§à¦°à§‡à¦¸ করà§à¦¨" @@ -1966,6 +2006,7 @@ msgid "Class:" msgstr "কà§à¦²à¦¾à¦¸:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "গà§à¦°à¦¹à¦£ করে:" @@ -1974,7 +2015,8 @@ msgid "Inherited by:" msgstr "গৃহীত হয়েছে:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "সংকà§à¦·à¦¿à¦ªà§à¦¤ বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp @@ -1983,44 +2025,21 @@ msgid "Properties" msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" - -#: editor/editor_help.cpp #, fuzzy msgid "Methods" msgstr "মেথডের তালিকা:" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "মেথডের তালিকা:" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" #: editor/editor_help.cpp #, fuzzy -msgid "Theme Properties:" -msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "সিগনà§à¦¯à¦¾à¦²à¦¸/সংকেতসমূহ:" - -#: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" #: editor/editor_help.cpp -#, fuzzy -msgid "Enumerations:" -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -2030,22 +2049,13 @@ msgid "Constants" msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "বরà§à¦£à¦¨à¦¾:" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "টিউটোরিয়ালসমূহ" #: editor/editor_help.cpp @@ -2065,11 +2075,6 @@ msgid "Property Descriptions" msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2084,11 +2089,6 @@ msgid "Method Descriptions" msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2169,8 +2169,8 @@ msgstr " আউটপà§à¦Ÿ/ফলাফল:" msgid "Copy Selection" msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2184,6 +2184,49 @@ msgstr "পরিসà§à¦•ার করà§à¦¨/কà§à¦²à§€à§Ÿà¦¾à¦°" msgid "Clear Output" msgstr "আউটপà§à¦Ÿ/ফলাফল" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "থামান" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "আরমà§à¦!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "নীচে" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "উপরে" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "নোড" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp #, fuzzy msgid "New Window" @@ -2794,6 +2837,19 @@ msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª" msgid "Project Settings..." msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° সেটিংস" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "সংসà§à¦•রণ:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ..." @@ -3025,10 +3081,6 @@ msgstr "দৃশà§à¦¯à¦•ে বিরতি দিন" msgid "Stop the scene." msgstr "দৃশà§à¦¯à¦Ÿà¦¿à¦•ে থামান।" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "থামান" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "সমà§à¦ªà¦¾à¦¦à¦¿à¦¤ দৃশà§à¦¯à¦Ÿà¦¿ চালান।" @@ -3084,15 +3136,11 @@ msgid "Inspector" msgstr "পরিদরà§à¦¶à¦•/পরীকà§à¦·à¦•" #: editor/editor_node.cpp -msgid "Node" -msgstr "নোড" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "ধারক/বাহক পরà§à¦¯à¦¨à§à¦¤ বিসà§à¦¤à§ƒà¦¤ করà§à¦¨" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "আউটপà§à¦Ÿ/ফলাফল" @@ -3111,15 +3159,21 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোà #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3189,6 +3243,11 @@ msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" msgid "Open the previous Editor" msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "কোনো পৃষà§à¦ তলের উৎস নিরà§à¦¦à¦¿à¦·à§à¦Ÿ করা নেই।" + #: editor/editor_plugin.cpp #, fuzzy msgid "Creating Mesh Previews" @@ -3200,6 +3259,11 @@ msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦²..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Poly সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨" @@ -3229,12 +3293,6 @@ msgstr "অবসà§à¦¥à¦¾:" msgid "Edit:" msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (Edit)" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "আরমà§à¦!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "মাপ:" @@ -3340,6 +3398,11 @@ msgstr "à§§ টি Viewport" msgid "New Script" msgstr "নতà§à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3368,14 +3431,6 @@ msgstr "পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨" msgid "Convert To %s" msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..." -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" - #: editor/editor_properties.cpp editor/property_editor.cpp #, fuzzy msgid "Selected node is not a Viewport!" @@ -4124,8 +4179,9 @@ msgstr "ফাইল" msgid "Import As:" msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ..." #: editor/import_dock.cpp @@ -4260,7 +4316,7 @@ msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp #, fuzzy msgid "Language:" msgstr "à¦à¦¾à¦·à¦¾" @@ -4417,6 +4473,13 @@ msgstr "বিনà§à¦¦à§ সরান" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡ খà§à¦²à§à¦¨" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4606,6 +4669,7 @@ msgid "Change Animation Name:" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° নাম পরিবরà§à¦¤à¦¨ করà§à¦¨:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Delete Animation?" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨" @@ -4793,7 +4857,6 @@ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° নাম:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "à¦à§à¦²/সমসà§à¦¯à¦¾!" @@ -4972,6 +5035,8 @@ msgid "Current:" msgstr "বরà§à¦¤à¦®à¦¾à¦¨:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" @@ -5193,6 +5258,10 @@ msgid "All" msgstr "সকল" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "পà§à¦¨-ইমà§à¦ªà§‹à¦°à§à¦Ÿ..." @@ -5207,11 +5276,6 @@ msgid "Sort:" msgstr "সাজান:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "বিà¦à¦¾à¦—:" @@ -5504,23 +5568,33 @@ msgstr "পà§à¦¯à¦¾à¦¨ মোড" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "চালানোর মোড:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "ছেদবিনà§à¦¦à§ অদলবদল করà§à¦¨ (টগল বà§à¦°à§‡à¦•পয়েনà§à¦Ÿ)" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" +msgid "Toggle grid snapping." +msgstr "ছেদবিনà§à¦¦à§ অদলবদল করà§à¦¨ (টগল বà§à¦°à§‡à¦•পয়েনà§à¦Ÿ)" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:" +msgid "Use Grid Snap" +msgstr "গà§à¦°à¦¿à¦¡ সà§à¦¨à§à¦¯à¦¾à¦ª" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সিদà§à¦§à¦¾à¦¨à§à¦¤à¦¸à¦®à§‚হ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5619,8 +5693,8 @@ msgid "View" msgstr "দৃশà§à¦¯/পরিদরà§à¦¶à¦¨" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "গà§à¦°à¦¿à¦¡ দেখান" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5912,6 +5986,11 @@ msgstr "বকà§à¦°à¦°à§‡à¦–ার লিনিয়ার টà§à¦¯à¦¾à¦¨à¦œà msgid "Hold Shift to edit tangents individually" msgstr "টà§à¦¯à¦¾à¦¨à¦œà§‡à¦¨à§à¦Ÿà¦—à§à¦²à¦¿ আলাদা আলাদা à¦à¦¾à¦¬à§‡ সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করার জনà§à¦¯ Shift ধরে রাখà§à¦¨à§" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "ডান কà§à¦²à¦¿à¦•: বিনà§à¦¦à§ অপসারণ করà§à¦¨" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "জি আই পà§à¦°à§‹à¦¬ বেক করà§à¦¨" @@ -6580,6 +6659,10 @@ msgid "Grid" msgstr "গà§à¦°à¦¿à¦¡" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "গà§à¦°à¦¿à¦¡ দেখান" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª কনফিগার করà§à¦¨" @@ -6641,7 +6724,8 @@ msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "ধরণ:" @@ -6757,6 +6841,11 @@ msgid "Find Next" msgstr "পরবরà§à¦¤à§€ খà§à¦à¦œà§à¦¨" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "পূরà§à¦¬à§‡ খà§à¦à¦œà§à¦¨" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" @@ -6867,14 +6956,14 @@ msgid "Toggle Scripts Panel" msgstr "ফেবরিট/পà§à¦°à¦¿à¦¯à¦¼-সমূহ অদলবদল/টগল করà§à¦¨" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "ধাপ লাফিয়ে যান" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "পদারà§à¦ªà¦£ করà§à¦¨" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "ধাপ লাফিয়ে যান" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "বিরতি/à¦à¦¾à¦™à§à¦—ন" @@ -6959,7 +7048,7 @@ msgstr "বোনà§â€Œ/হাড় পরিষà§à¦•ার করà§à¦¨" msgid "Connections to method:" msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "উৎস:" @@ -7047,6 +7136,11 @@ msgstr "বিনà§à¦¦à§ অপসারণ করà§à¦¨" msgid "Cut" msgstr "করà§à¦¤à¦¨/কাট করà§à¦¨" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "সবগà§à¦²à¦¿ বাছাই করà§à¦¨" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -7109,10 +7203,6 @@ msgid "Auto Indent" msgstr "সà§à¦¬à§Ÿà¦‚কà§à¦°à¦¿à§Ÿà¦à¦¾à¦¬à§‡ মাতà§à¦°à¦¾ দিন" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "পূরà§à¦¬à§‡ খà§à¦à¦œà§à¦¨" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "দà§à¦°à§à¦¤ ফাইলসমূহ ফিলà§à¦Ÿà¦¾à¦° করà§à¦¨..." @@ -7469,6 +7559,11 @@ msgid "Freelook Speed Modifier" msgstr "ফà§à¦°à¦¿ লà§à¦• সà§à¦ªà¦¿à¦¡ মডিফায়ার" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "ফà§à¦°à¦¿ লà§à¦• সà§à¦ªà¦¿à¦¡ মডিফায়ার" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7506,6 +7601,10 @@ msgid "Use Local Space" msgstr "মাপের মোড করà§à¦¨ (R)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "নিমà§à¦¨ দরà§à¦¶à¦¨" @@ -7748,6 +7847,11 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy +msgid "Shrink (Pixels): " +msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª (পিকà§à¦¸à§‡à¦²à¦¸à¦®à§‚হ):" + +#: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy msgid "Grow (Pixels): " msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª (পিকà§à¦¸à§‡à¦²à¦¸à¦®à§‚হ):" @@ -7801,6 +7905,11 @@ msgstr "(খালি/শূনà§à¦¯)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "ফà§à¦°à§‡à¦® পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨ করà§à¦¨" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" @@ -8152,6 +8261,15 @@ msgstr "নোড ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ সমà§à¦ªà¦¾à¦¦à¦¨ কর #: editor/plugins/tile_map_editor_plugin.cpp #, fuzzy +msgid "Filter tiles" +msgstr "দà§à¦°à§à¦¤ ফাইলসমূহ ফিলà§à¦Ÿà¦¾à¦° করà§à¦¨..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy msgid "Paint Tile" msgstr "TileMap আà¦à¦•à§à¦¨" @@ -8301,6 +8419,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "পথের বিনà§à¦¦à§ অপসারণ করà§à¦¨" @@ -8480,18 +8603,119 @@ msgstr "দৃশà§à¦¯ ছাড়া à¦à¦Ÿà¦¿ করা সমà§à¦à¦¬ হবà msgid "TileSet" msgstr "TileSet (টাইল-সেট)..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "সমসà§à¦¯à¦¾/à¦à§à¦²" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" +msgid "No commit message was provided" +msgstr "কোন নাম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করা হয়নি" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "কমিউনিটি/যৌথ-সামাজিক উৎস" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "বড় হাতের অকà§à¦·à¦°à§‡ পরিবরà§à¦¤à¦¨à§‡ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "নতà§à¦¨ তৈরি করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "পরিবরà§à¦¤à¦¨ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "অপসারণ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "পরিবরà§à¦¤à¦¨ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ সমূহ অপসারণ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "সকলà§à¦—à§à¦²à¦¿ সংরকà§à¦·à¦£ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿà§‡à¦° পরিবরà§à¦¤à¦¨à¦¸à¦®à§‚হ সà§à¦¸à¦‚গত/সমনà§à¦¬à§Ÿ করà§à¦¨" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +#, fuzzy +msgid "Status" +msgstr "অবসà§à¦¥à¦¾:" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "কোনো ফাইল নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ হয়নি!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8510,6 +8734,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "নমà§à¦¨à¦¾à¦¸à¦®à§‚হ" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" @@ -8739,6 +8968,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9416,14 +9650,16 @@ msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° জনà§à¦¯ রিসোরà§à¦¸:" #: editor/project_export.cpp #, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "রিসোরà§à¦¸-নয় à¦à¦®à¦¨ ফাইল à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করার ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ (কমা-বিà¦à¦•à§à¦¤, যেমন: *.json, *.txt):" #: editor/project_export.cpp #, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হতে বরà§à¦œà¦¨à¦•ৃত ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ (filter) (কমা-বিà¦à¦•à§à¦¤, যেমন: *.json, *." "txt):" @@ -10027,6 +10263,11 @@ msgid "Settings saved OK." msgstr "সেটিংস সংরকà§à¦·à¦£ সফল হয়েছে।" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "ইনপà§à¦Ÿ অà§à¦¯à¦¾à¦•শন ইà¦à§‡à¦¨à§à¦Ÿ যোগ করà§à¦¨" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "ফিচার ওà¦à¦¾à¦°à¦°à¦¾à¦‡à¦¡" @@ -10170,6 +10411,10 @@ msgid "Plugins" msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "পà§à¦°à¦¿à¦¸à§‡à¦Ÿ..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "শূনà§à¦¯" @@ -10348,10 +10593,6 @@ msgstr "বড় হাতের অকà§à¦·à¦°" msgid "Reset" msgstr "সমà§à¦ªà§à¦°à¦¸à¦¾à¦°à¦¨/সংকোচন অপসারণ করà§à¦¨ (রিসেট জà§à¦®à§)" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "সমসà§à¦¯à¦¾/à¦à§à¦²" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "নোডের নতà§à¦¨ অà¦à¦¿à¦à¦¾à¦¬à¦• দান করà§à¦¨" @@ -10409,6 +10650,11 @@ msgid "Instance Scene(s)" msgstr "দৃশà§à¦¯(সমূহ) ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "পà§à¦°à¦¶à¦¾à¦–াকে দৃশà§à¦¯ হিসেবে সংরকà§à¦·à¦£ করà§à¦¨" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "শীষà§à¦¯ নোড ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨" @@ -10450,8 +10696,23 @@ msgid "Make node as Root" msgstr "অরà§à¦¥à¦ªà§‚রà§à¦¨!" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "নোড(সমূহ) অপসারণ করবেন?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "নোড(সমূহ) অপসারণ করà§à¦¨" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Shader Graph Node(s) অপসারণ করà§à¦¨" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "নোড(সমূহ) অপসারণ করà§à¦¨" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10472,12 +10733,10 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¯à§‹à¦—à§à¦¯ অংশীদারীসমূহ" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "পà§à¦²à§‡à¦¸à¦¹à§‹à¦²à§à¦¡à¦¾à¦° হিসেবে লোড করà§à¦¨" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10560,6 +10819,14 @@ msgid "Clear Inheritance" msgstr "উতà§à¦¤à¦°à¦¾à¦§à¦¿à¦•ারতà§à¦¬ পরিসà§à¦•ার করà§à¦¨" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¯à§‹à¦—à§à¦¯ অংশীদারীসমূহ" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "পà§à¦²à§‡à¦¸à¦¹à§‹à¦²à§à¦¡à¦¾à¦° হিসেবে লোড করà§à¦¨" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤" @@ -10579,11 +10846,6 @@ msgstr "ধরণ পরিবরà§à¦¤à¦¨ করà§à¦¨" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "পরবরà§à¦¤à§€ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "নোডের নতà§à¦¨ অà¦à¦¿à¦à¦¾à¦¬à¦• দান করà§à¦¨" @@ -10858,27 +11120,18 @@ msgid "Will load an existing script file." msgstr "বিদà§à¦¯à¦®à¦¾à¦¨ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ লোড করà§à¦¨" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "à¦à¦¾à¦·à¦¾" - -#: editor/script_create_dialog.cpp -#, fuzzy -msgid "Inherits" -msgstr "গà§à¦°à¦¹à¦£ করে:" - -#: editor/script_create_dialog.cpp #, fuzzy -msgid "Class Name" +msgid "Class Name:" msgstr "কà§à¦²à¦¾à¦¸ নাম:" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "বসà§à¦¤à§ অপসারণ করà§à¦¨" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Built-in Script" +msgid "Built-in Script:" msgstr "পূরà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ সà§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ" #: editor/script_create_dialog.cpp @@ -10896,19 +11149,50 @@ msgstr "বাইটস:" #: editor/script_editor_debugger.cpp #, fuzzy -msgid "Stack Trace" -msgstr "ফà§à¦°à§‡à¦®à¦¸à¦®à§‚হ সà§à¦¤à§‚প করà§à¦¨" +msgid "Warning:" +msgstr "সতরà§à¦•তা" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "গà§à¦°à¦¾à¦« পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করতে তালিকা থেকে à¦à¦• বা à¦à¦•াধিক আইটেম বাছাই করà§à¦¨à¥¤" +msgid "Error:" +msgstr "সমসà§à¦¯à¦¾:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "à¦à§à¦²/সমসà§à¦¯à¦¾-সমূহ লোড করà§à¦¨" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "সমসà§à¦¯à¦¾:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "উৎস:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "উৎস:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "উৎস:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Stack Trace" +msgstr "ফà§à¦°à§‡à¦®à¦¸à¦®à§‚হ সà§à¦¤à§‚প করà§à¦¨" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "সমসà§à¦¯à¦¾à¦¸à¦®à§‚হ" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "চাইলà§à¦¡ পà§à¦°à¦¸à§‡à¦¸ সংযà§à¦•à§à¦¤ হয়েছে" #: editor/script_editor_debugger.cpp @@ -10917,6 +11201,11 @@ msgid "Copy Error" msgstr "à¦à§à¦²/সমসà§à¦¯à¦¾-সমূহ লোড করà§à¦¨" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "বিনà§à¦¦à§ অপসারণ করà§à¦¨" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ পরীকà§à¦·à¦¾ করà§à¦¨" @@ -10933,6 +11222,11 @@ msgid "Profiler" msgstr "পà§à¦°à§‹à¦«à¦¾à¦‡à¦²à¦¾à¦°" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "পà§à¦°à¦•লà§à¦ª à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "মনিটর" @@ -10945,6 +11239,10 @@ msgid "Monitors" msgstr "মনিটরস" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "গà§à¦°à¦¾à¦« পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করতে তালিকা থেকে à¦à¦• বা à¦à¦•াধিক আইটেম বাছাই করà§à¦¨à¥¤" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "রিসোরà§à¦¸ অনà§à¦¸à¦¾à¦°à§‡ à¦à¦¿à¦¡à¦¿à¦“ মেমোরির বà§à¦¯à¦¬à¦¹à¦¾à¦°à§‡à¦° তালিকা করà§à¦¨:" @@ -11157,11 +11455,6 @@ msgid "Library" msgstr "MeshLibrary (মেস-লাইবà§à¦°à§‡à¦°à¦¿)..." #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy -msgid "Status" -msgstr "অবসà§à¦¥à¦¾:" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "লাইবà§à¦°à§‡à¦°à¦¿: " @@ -11170,6 +11463,10 @@ msgid "GDNative" msgstr "জিডিনà§à¦¯à¦¾à¦Ÿà¦¿à¦" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "ধাপ মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ শূনà§à¦¯!" @@ -11339,6 +11636,15 @@ msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª সেটিংস" msgid "Pick Distance:" msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11498,6 +11804,10 @@ msgid "Create a new variable." msgstr "নতà§à¦¨ তৈরি করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "সিগনà§à¦¯à¦¾à¦²à¦¸/সংকেতসমূহ:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "আরমà§à¦ হতে নতà§à¦¨ polygon তৈরি করà§à¦¨à¥¤" @@ -11527,6 +11837,11 @@ msgid "Add Function" msgstr "ফাংশন সংযোজন করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "পথের বিনà§à¦¦à§ অপসারণ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦² সংযোজন করà§à¦¨" @@ -11535,6 +11850,26 @@ msgid "Add Signal" msgstr "সংকেত/সিগনà§à¦¯à¦¾à¦² সংযোজন করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "পথের বিনà§à¦¦à§ অপসারণ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "পথের বিনà§à¦¦à§ অপসারণ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "অà¦à¦¿à¦¬à§à¦¯à¦•à§à¦¤à¦¿ (Expression) পরিবরà§à¦¤à¦¨ করà§à¦¨" @@ -11587,10 +11922,20 @@ msgid "Add Preload Node" msgstr "পà§à¦°à¦¿à¦²à§‹à¦¡ নোড যà§à¦•à§à¦¤ করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "শাখা (tree) হতে নোড (সমূহ) যà§à¦•à§à¦¤ করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "গেটার (Getter) à¦à¦° বৈশিষà§à¦Ÿà§à¦¯à§‡ যà§à¦•à§à¦¤ করà§à¦¨" @@ -11620,6 +11965,11 @@ msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "গà§à¦°à¦¾à¦«à§‡à¦° নোডসমূহ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "নোডের সাথে সংযà§à¦•à§à¦¤ করà§à¦¨:" @@ -11658,6 +12008,28 @@ msgid "Paste VisualScript Nodes" msgstr "নোড-সমূহ পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨/পেসà§à¦Ÿ করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "'..' তে পরিচালনা করা সমà§à¦à¦¬ নয়" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "ফাংশনের (Function) নতà§à¦¨ নামকরণ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "ফাংশন (Function) অপসারণ করà§à¦¨" @@ -11678,16 +12050,18 @@ msgid "Editing Signal:" msgstr "সংকেত/সিগনà§à¦¯à¦¾à¦² সমà§à¦ªà¦¾à¦¦à¦¨:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "তলের ধরণ (Base Type):" +#, fuzzy +msgid "Make Tool:" +msgstr "সà§à¦¥à¦¾à¦¨à§€à§Ÿ করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "সদসà§à¦¯à¦—ণ (Members):" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "উপসà§à¦¥à¦¿à¦¤ নোডসমূহ:" +#, fuzzy +msgid "function_name" +msgstr "ফাংশন:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11712,6 +12086,16 @@ msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "ফাংশনের (Function) নতà§à¦¨ নামকরণ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "রিফà§à¦°à§‡à¦¸ করà§à¦¨" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "সদসà§à¦¯à¦—ণ (Members):" @@ -11809,6 +12193,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "লিসà§à¦Ÿ থেকে ডিà¦à¦¾à¦‡à¦¸ সিলেকà§à¦Ÿ করà§à¦¨" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11830,7 +12218,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11910,6 +12299,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Run in Browser" msgstr "বà§à¦°à¦¾à¦‰à¦¸" @@ -12522,11 +12915,6 @@ msgstr "" "আকার ধারণ করতে পারে। অনà§à¦¯à¦¥à¦¾à§Ÿ, à¦à¦Ÿà¦¿à¦•ে à¦à¦•টি RenderTarget করà§à¦¨ à¦à¦¬à¦‚ à¦à¦° অà¦à§à¦¯à¦¨à§à¦¤à¦°à§€à¦£ " "দৃশà§à¦¯à¦¾à¦¬à¦²à¦¿à¦•ে (texture) দৃশà§à¦¯à¦®à¦¾à¦¨ করতে কোনো নোডে হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨à¥¤" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12558,6 +12946,68 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "সà§à¦¨à§à¦¯à¦¾à¦ª মোড:" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" + +#~ msgid "Language" +#~ msgstr "à¦à¦¾à¦·à¦¾" + +#, fuzzy +#~ msgid "Inherits" +#~ msgstr "গà§à¦°à¦¹à¦£ করে:" + +#~ msgid "Base Type:" +#~ msgstr "তলের ধরণ (Base Type):" + +#~ msgid "Available Nodes:" +#~ msgstr "উপসà§à¦¥à¦¿à¦¤ নোডসমূহ:" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "ইনপà§à¦Ÿ যোগ করà§à¦¨" + +#~ msgid "Properties:" +#~ msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "মেথডের তালিকা:" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿-সমূহ:" + +#, fuzzy +#~ msgid "Enumerations:" +#~ msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à¦¸à¦®à§‚হ" + +#~ msgid "Constants:" +#~ msgstr "ধà§à¦°à§à¦¬à¦•সমূহ:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "বরà§à¦£à¦¨à¦¾:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "মান/পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿à¦° বরà§à¦£à¦¨à¦¾:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "মেথডের বরà§à¦£à§à¦¨à¦¾:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস" + +#~ msgid "Delete Node(s)?" +#~ msgstr "নোড(সমূহ) অপসারণ করবেন?" + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12743,9 +13193,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦à¦¬ হয়নি।" -#~ msgid "Select device from the list" -#~ msgstr "লিসà§à¦Ÿ থেকে ডিà¦à¦¾à¦‡à¦¸ সিলেকà§à¦Ÿ করà§à¦¨" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "দৃশà§à¦¯ খà§à¦²à§à¦¨" @@ -12819,10 +13266,6 @@ msgstr "" #~ msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ দৃশà§à¦¯(সমূহ)-কে নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ নোডের অংশ হিসেবে ইনসà§à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸ করà§à¦¨à¥¤" #, fuzzy -#~ msgid "Warnings:" -#~ msgstr "সতরà§à¦•তা" - -#, fuzzy #~ msgid "Font Size:" #~ msgstr "উৎস ফনà§à¦Ÿà§‡à¦° আকার:" @@ -12864,9 +13307,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "à¦à¦•টি সেটিং আইটেম পà§à¦°à¦¥à¦® নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨!" -#~ msgid "No name provided" -#~ msgstr "কোন নাম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° করা হয়নি" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "নোড সংযোজন করà§à¦¨" @@ -13006,12 +13446,6 @@ msgstr "" #~ msgid "Warning" #~ msgstr "সতরà§à¦•তা" -#~ msgid "Error:" -#~ msgstr "সমসà§à¦¯à¦¾:" - -#~ msgid "Function:" -#~ msgstr "ফাংশন:" - #~ msgid "Variable" #~ msgstr "চলক/à¦à§‡à¦°à¦¿à§Ÿà§‡à¦¬à¦²" @@ -13076,9 +13510,6 @@ msgstr "" #~ msgid "Connect Graph Nodes" #~ msgstr "গà§à¦°à¦¾à¦«à§‡à¦° নোডসমূহ সংযà§à¦•à§à¦¤ করà§à¦¨" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "গà§à¦°à¦¾à¦«à§‡à¦° নোডসমূহ বিচà§à¦›à¦¿à¦¨à§à¦¨ করà§à¦¨" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Shader Graph Node অপসারণ করà§à¦¨" @@ -13088,9 +13519,6 @@ msgstr "" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "গà§à¦°à¦¾à¦« নোড(সমূহ) পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Shader Graph Node(s) অপসারণ করà§à¦¨" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "সমসà§à¦¯à¦¾: আবরà§à¦¤à¦¨à¦¶à§€à¦² সংযোগ লিঙà§à¦•" @@ -13522,9 +13950,6 @@ msgstr "" #~ msgid "Pick New Name and Location For:" #~ msgstr "নতà§à¦¨ নাম à¦à¦¬à¦‚ অবসà§à¦¥à¦¾à¦¨ বাছাই করà§à¦¨:" -#~ msgid "No files selected!" -#~ msgstr "কোনো ফাইল নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ হয়নি!" - #~ msgid "Info" #~ msgstr "তথà§à¦¯" @@ -13926,12 +14351,6 @@ msgstr "" #~ msgid "Scaling to %s%%." #~ msgstr "%s%% -ঠমাপিত হচà§à¦›à§‡à¥¤" -#~ msgid "Up" -#~ msgstr "উপরে" - -#~ msgid "Down" -#~ msgstr "নীচে" - #~ msgid "Bucket" #~ msgstr "বাকেটà§â€Œ" @@ -14216,9 +14635,6 @@ msgstr "" #~ msgid "Group" #~ msgstr "গà§à¦°à§à¦ª" -#~ msgid "Samples" -#~ msgstr "নমà§à¦¨à¦¾à¦¸à¦®à§‚হ" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "নমà§à¦¨à¦¾ রূপানà§à¦¤à¦° মোড: (.wav ফাইল):" diff --git a/editor/translations/ca.po b/editor/translations/ca.po index 44afcb8066..3c105cd75c 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-08-04 14:23+0000\n" +"PO-Revision-Date: 2019-10-04 03:15+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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -62,6 +62,36 @@ msgstr "Els arguments per a construir '%s' no són và lids" msgid "On call to '%s':" msgstr "En la crida a '%s':" +#: core/ustring.cpp +#, fuzzy +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "Mesclar" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Allibera" @@ -331,6 +361,7 @@ msgstr "Voleu crear %d NOVES pistes i inserir-hi claus?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Crea" @@ -466,15 +497,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Advertiment: Edició d'animació importada" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Selecciona-ho Tot" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "No seleccionar-ne cap" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Selecciona un AnimationPlayer a l'Arbre de l'Escena per editar-ne l'animació." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -606,7 +633,8 @@ msgid "Scale Ratio:" msgstr "Relació d'Escala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Tria les Pistes per copiar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -618,6 +646,11 @@ msgstr "Tria les Pistes per copiar:" msgid "Copy" msgstr "Copia" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "No seleccionar-ne cap" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Afegir Clip de Pista d'Àudio" @@ -800,7 +833,8 @@ msgstr "No es pot connectar el senyal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -902,7 +936,8 @@ msgstr "Cerca:" msgid "Matches:" msgstr "Coincidències:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -943,7 +978,7 @@ msgid "Resource" msgstr "Recurs" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "CamÃ" @@ -1215,7 +1250,8 @@ msgid "Delete Bus Effect" msgstr "Elimina l'Efecte de Bus" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Bus d'Àudio, reorganitza Arrossegant i Deixant anar." #: editor/editor_audio_buses.cpp @@ -1414,7 +1450,9 @@ msgid "Add AutoLoad" msgstr "Afegeix AutoCà rrega" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "CamÃ:" @@ -1468,7 +1506,7 @@ msgstr "Crea un Directori" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nom:" @@ -1646,6 +1684,7 @@ msgstr "Fer Actual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nou" @@ -1716,6 +1755,7 @@ msgid "New Folder..." msgstr "Nou Directori..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Refresca" @@ -1803,9 +1843,8 @@ msgid "Go to parent folder." msgstr "Anar al directori pare." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Refresh files." -msgstr "Actualitzar Fitxers" +msgstr "Actualitzar fitxers." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." @@ -1866,6 +1905,7 @@ msgid "Class:" msgstr "Classe:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Hereta:" @@ -1874,7 +1914,8 @@ msgid "Inherited by:" msgstr "Heretat per:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Descripció breu:" #: editor/editor_help.cpp @@ -1882,38 +1923,18 @@ msgid "Properties" msgstr "Propietats" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propietats:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Mètodes" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Mètodes:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propietats del tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propietats del tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Senyals:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeracions" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeracions:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1922,19 +1943,12 @@ msgid "Constants" msgstr "Constants" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constants:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descripció de la classe" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descripció de la classe:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Tutorials en lÃnia:" #: editor/editor_help.cpp @@ -1952,10 +1966,6 @@ msgid "Property Descriptions" msgstr "Descripcions de la Propietat" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descripcions de la Propietat:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1968,10 +1978,6 @@ msgid "Method Descriptions" msgstr "Descripcions del Mètode" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descripcions del Mètode:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2040,8 +2046,8 @@ msgstr "Sortida:" msgid "Copy Selection" msgstr "Copiar Selecció" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2054,9 +2060,56 @@ msgstr "Neteja" msgid "Clear Output" msgstr "Buida la Sortida" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Atura" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Inicia" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Baixa" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Amunt" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Incoming RPC" +msgstr "RPC Entrant" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Incoming RSET" +msgstr "RSET Entrant" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Outgoing RPC" +msgstr "RPC Sortint" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Outgoing RSET" +msgstr "RSET Sortint" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Nova finestra" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2646,6 +2699,21 @@ msgstr "Projecte" msgid "Project Settings..." msgstr "Configuració del Projecte" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versió:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Set Up Version Control" +msgstr "Configurar Control de Versions" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Shut Down Version Control" +msgstr "Desactivar el control de versions" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2873,10 +2941,6 @@ msgstr "Pausa Escena" msgid "Stop the scene." msgstr "Atura l'escena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Atura" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Reprodueix l'escena editada." @@ -2928,14 +2992,10 @@ msgid "Inspector" msgstr "Inspector" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Expandeix el Quadre inferior" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Sortida" @@ -2955,15 +3015,22 @@ msgstr "Administrar Plantilles" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "La plantilla de compilació d'Android ja està instal·lada i no se " "sobreescriurà .\n" @@ -3030,6 +3097,11 @@ msgstr "Obre l'Editor Següent" msgid "Open the previous Editor" msgstr "Obre l'Editor precedent" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Manca una superfÃcie d'origen." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Creant Previsualitzacions de Malles" @@ -3039,6 +3111,11 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Obrir Script:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Edita Connector" @@ -3067,11 +3144,6 @@ msgstr "Estat:" msgid "Edit:" msgstr "Edita:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Inicia" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Mesura:" @@ -3170,6 +3242,10 @@ msgstr "Selecciona una Vista" msgid "New Script" msgstr "Script Nou" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Estendre el script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nou %s" @@ -3196,13 +3272,6 @@ msgstr "Enganxa" msgid "Convert To %s" msgstr "Converteix a %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Obre l'Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "El Node seleccionat no és una Vista!" @@ -3301,6 +3370,8 @@ msgstr "Baixa" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Les plantilles oficials d'exportació no estan disponibles per a les versions " +"de desenvolupament." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3763,7 +3834,7 @@ msgstr "Nodes del Grup" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Els grups buits s'eliminaran automà ticament." #: editor/groups_editor.cpp #, fuzzy @@ -3867,9 +3938,10 @@ msgstr " Fitxers" msgid "Import As:" msgstr "Importar com a:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Configuració..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Configuracions prestablertes" #: editor/import_dock.cpp msgid "Reimport" @@ -3996,7 +4068,7 @@ msgstr "Nom del Connector:" msgid "Subfolder:" msgstr "Subcarpeta:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Llengua:" @@ -4138,6 +4210,12 @@ msgstr "Punt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Obre l'Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Obre un Node d'Animació" @@ -4312,6 +4390,7 @@ msgid "Change Animation Name:" msgstr "Modifica el Nom de l'Animació:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Eliminar l'Animació?" @@ -4488,7 +4567,6 @@ msgstr "Nom de l'Animació:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Error !" @@ -4663,6 +4741,8 @@ msgid "Current:" msgstr "Actual:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Afegeix una Entrada" @@ -4774,7 +4854,7 @@ msgstr "No es pot desar el Tema:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Error d'escriptura." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4872,6 +4952,10 @@ msgid "All" msgstr "Tot" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "ReImporta..." @@ -4886,11 +4970,6 @@ msgid "Sort:" msgstr "Ordena:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Ordenació inversa." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categoria:" @@ -5181,21 +5260,33 @@ msgid "Pan Mode" msgstr "Mode d'Escombratge lateral" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Mode d'Execució:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Commutar Ajustament." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Utilitzar Ajustament" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opcions d'Ajustament" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Commutar Ajustament." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Ajustar a la quadrÃcula" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Ajustar a la QuadrÃcula" +msgid "Snapping Options" +msgstr "Opcions d'Ajustament" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5291,8 +5382,8 @@ msgid "View" msgstr "Vista" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Mostra la graella" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5567,6 +5658,11 @@ msgstr "Tangent Lineal" msgid "Hold Shift to edit tangents individually" msgstr "Prem Maj. per editar les tangents individualment" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Clic Dret: Elimina el Punt" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Precalcula la Sonda d'IG" @@ -5847,7 +5943,7 @@ msgstr "Temps de generació (s):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Les cares de la geometria no contenen cap à rea." #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5855,8 +5951,9 @@ msgid "The geometry doesn't contain any faces." msgstr "El Node no conté cap geometria (cares)." #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"% s\" no hereta de Spatial." #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -6213,6 +6310,10 @@ msgid "Grid" msgstr "QuadrÃcula" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostra la graella" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurar QuadrÃcula:" @@ -6268,7 +6369,8 @@ msgstr "Instà ncia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipus:" @@ -6370,6 +6472,11 @@ msgid "Find Next" msgstr "Cerca el Següent" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Cerca l'Anterior" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtra les propietats" @@ -6474,14 +6581,14 @@ msgid "Toggle Scripts Panel" msgstr "Panell d'Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Pas a Pas (per Procediments)" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Pas a Pas (per instruccions)" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Pas a Pas (per Procediments)" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Atura" @@ -6562,7 +6669,7 @@ msgstr "Buida les Escenes Recents" msgid "Connections to method:" msgstr "Connexions al mètode:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Font" @@ -6629,7 +6736,7 @@ msgstr "Ressaltador de sintaxi" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "" +msgstr "Anar a" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -6646,6 +6753,11 @@ msgstr "Crea punts." msgid "Cut" msgstr "Talla" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Selecciona-ho Tot" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Esborra la LÃnia" @@ -6704,10 +6816,6 @@ msgid "Auto Indent" msgstr "Sagnat Automà tic" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Cerca l'Anterior" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Cercar en Fitxers..." @@ -7042,6 +7150,11 @@ msgstr "Modificador de la Velocitat de la Vista Lliure" #: editor/plugins/spatial_editor_plugin.cpp #, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificador de la Velocitat de la Vista Lliure" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7062,8 +7175,9 @@ msgid "Snap Nodes To Floor" msgstr "Ajustar Nodes al Terra" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "No ha pogut trobar un terra sòlid per ajustar la selecció." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7081,6 +7195,10 @@ msgid "Use Local Space" msgstr "Mode Espai Local (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Utilitzar Ajustament" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Vista Inferior" @@ -7320,6 +7438,10 @@ msgid "Simplification: " msgstr "Simplificació: " #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7370,6 +7492,11 @@ msgid "(empty)" msgstr "(buit)" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Enganxa el Fotograma" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animacions:" @@ -7698,6 +7825,15 @@ msgid "Enable Priority" msgstr "Habilitar Prioritat" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrat de Fitxers..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Pinta Rajola" @@ -7844,6 +7980,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Mostrar noms de les rajoles (manteniu pressionada la tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Eliminar la textura seleccionada? Això eliminarà totes les rajoles que " @@ -8022,18 +8163,119 @@ msgstr "Aquesta propietat no es pot canviar." msgid "TileSet" msgstr "Conjunt de rajoles" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "Nom del pare del node, si està disponible" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Error" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No commit message was provided" +msgstr "Manca Nom" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Afegeix una Entrada" +msgid "Commit" +msgstr "Comunitat" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Converteix a Majúscules" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Crear un nou rectangle." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Modifica" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Reanomena" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Esborra" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Modifica" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Elimina Seleccionats" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Desa-ho Tot" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Sincronitzar Canvis en Scripts" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Estat" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "Cap fitxer seleccionat!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "(Només GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Afegeix una Entrada" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8051,6 +8293,11 @@ msgstr "Booleà " #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "Mostra d'Àudio" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "Afegeix una Entrada" @@ -8232,15 +8479,15 @@ msgstr "Retorna l'invers de l'arrel quadrada del parà metre." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "Igual (= =)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "Major Que (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "Major o Igual Que (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8251,28 +8498,34 @@ msgstr "" "o menors." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." msgstr "" +"Retorna el resultat booleà de la comparació entre un parà metre INF i un " +"escalar." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." msgstr "" +"Retorna el resultat booleà de la comparació entre NaN i un parà metre escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" -msgstr "" +msgstr "Menor Que (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "Menor o Igual Que (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Not Equal (!=)" -msgstr "" +msgstr "No Igual (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8282,14 +8535,24 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Retorna un vector associat si el valor booleà proporcionat és cert o fals." + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Returns the boolean result of the comparison between two parameters." msgstr "Retorna la tangent del parà metre." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between INF (or NaN) and a " "scalar parameter." msgstr "" +"Retorna el resultat booleà de la comparació entre INF (o NaN) i un parà metre " +"escalar." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8981,15 +9244,19 @@ msgid "Resources to export:" msgstr "Recursos per exportar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtres per a l'exportació fitxers no-recurs (separats per comes, ex: *." "json, *. txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtres per excloure fitxers del projecte (separats per comes, ex:*.json, *." "txt)" @@ -9227,8 +9494,9 @@ msgid "Missing Project" msgstr "Importa un Projecte existent" #: editor/project_manager.cpp +#, fuzzy msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Error: falta el projecte al sistema de fitxers." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9597,6 +9865,11 @@ msgid "Settings saved OK." msgstr "Configuració desada correctament." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Afegeix un Incidència d'Acció de Entrada" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Substitutiu per a CaracterÃstica" @@ -9733,6 +10006,10 @@ msgid "Plugins" msgstr "Connectors" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Configuració..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9902,10 +10179,6 @@ msgstr "A Majúscules" msgid "Reset" msgstr "Resetejar" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Error" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Torna a Parentar el Node" @@ -9963,6 +10236,11 @@ msgid "Instance Scene(s)" msgstr "Instà ncia les Escenes" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Desa la Branca com un Escena" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instancia una Escena Filla" @@ -9987,8 +10265,11 @@ msgid "Duplicate Node(s)" msgstr "Duplica els Nodes" #: editor/scene_tree_dock.cpp +#, fuzzy msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"No es poden re-emparentar els nodes en escenes heretades, l'ordre de nodes " +"no pot canviar." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." @@ -10005,8 +10286,23 @@ msgid "Make node as Root" msgstr "Convertir node en arrel" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Elimina els Nodes?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Eliminar Nodes" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Elimina el(s) Node(s) de Graf d'Ombreig" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Eliminar Nodes" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10021,18 +10317,22 @@ msgid "Save New Scene As..." msgstr "Anomena i Desa la Nova Escena..." #: editor/scene_tree_dock.cpp +#, fuzzy msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" +"Deshabilitar \"editable_instance\" provocarà que totes les propietats del " +"node tornin al seu valor per defecte." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Fills Editables" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Carrega com a Contenidor Temporal" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Deshabilitar \"editable_instance\" provocarà que totes les propietats del " +"node tornin al seu valor per defecte." #: editor/scene_tree_dock.cpp #, fuzzy @@ -10109,6 +10409,14 @@ msgid "Clear Inheritance" msgstr "Elimina l'Herència" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Fills Editables" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Carrega com a Contenidor Temporal" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Obrir documentació" @@ -10126,10 +10434,6 @@ msgid "Change Type" msgstr "Modifica el Tipus" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Estendre el script" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Torna a Parentar el Node" @@ -10379,23 +10683,18 @@ msgid "Will load an existing script file." msgstr "Es carregarà un fitxer de script existent." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Llengua" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Hereta" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nom de Classe" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Plantilla" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script Integrat" #: editor/script_create_dialog.cpp @@ -10412,19 +10711,50 @@ msgstr "Bytes:" #: editor/script_editor_debugger.cpp #, fuzzy -msgid "Stack Trace" -msgstr "Fotogrames de la Pila" +msgid "Warning:" +msgstr "Avisos:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Trieu un o més elements de la llista per mostrar el Graf." +msgid "Error:" +msgstr "Error:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Error de Còpia" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Error:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Font" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Font" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Font" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Stack Trace" +msgstr "Fotogrames de la Pila" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errors" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "Procés Fill Connectat" #: editor/script_editor_debugger.cpp @@ -10432,6 +10762,11 @@ msgid "Copy Error" msgstr "Error de Còpia" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Crea punts." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspecciona la Instà ncia anterior" @@ -10448,6 +10783,11 @@ msgid "Profiler" msgstr "Perfilador" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Exportar Perfil" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10460,6 +10800,10 @@ msgid "Monitors" msgstr "Monitors" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Trieu un o més elements de la llista per mostrar el Graf." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Llista d'Ús de la Memòria de VÃdeo per Recurs:" @@ -10663,10 +11007,6 @@ msgid "Library" msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Estat" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Biblioteques: " @@ -10675,6 +11015,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "L'argument pas és zero!" @@ -10834,6 +11178,15 @@ msgstr "Configuració del GridMap" msgid "Pick Distance:" msgstr "Trieu la distà ncia:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filtra Mode:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "El nom de la classe no pot ser una paraula clau reservada" @@ -10982,6 +11335,10 @@ msgid "Create a new variable." msgstr "Crear un nou rectangle." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Senyals:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Crear un nou polÃgon." @@ -11011,6 +11368,11 @@ msgid "Add Function" msgstr "Afegeix una Funció" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Elimina el punt" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Afegeix una Variable" @@ -11019,6 +11381,26 @@ msgid "Add Signal" msgstr "Afegeix un Senyal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Afegeix una Entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Afegir port de sortida" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Elimina el punt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Elimina el punt" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Canviar Expressió" @@ -11063,10 +11445,20 @@ msgid "Add Preload Node" msgstr "Afegeix un Node de Precà rrega" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Afegeix Nodes des d'Arbre" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Afegeix una Propietat d'Accés (Getter)" @@ -11092,6 +11484,11 @@ msgstr "Connecta els Nodes" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Desconnecta el Nodes de Graf" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Connecta els Nodes" @@ -11125,6 +11522,28 @@ msgid "Paste VisualScript Nodes" msgstr "Enganxa els Nodes de VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "No es pot copiar el node de funció." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Reanomena Funció" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Elimina la Funció" @@ -11145,16 +11564,18 @@ msgid "Editing Signal:" msgstr "Edició del Senyal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipus Base:" +#, fuzzy +msgid "Make Tool:" +msgstr "Fer Local" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membres:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodes disponibles:" +#, fuzzy +msgid "function_name" +msgstr "Funció:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11178,6 +11599,16 @@ msgid "Cut Nodes" msgstr "Talla els Nodes" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Reanomena Funció" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Refresca" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Editar Membre" @@ -11281,6 +11712,10 @@ msgid "The package must have at least one '.' separator." msgstr "El paquet ha de tenir com a mÃnim un separador '. '." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Selecciona un dispositiu de la llista" + +#: platform/android/export/export.cpp #, fuzzy msgid "ADB executable not configured in the Editor Settings." msgstr "L'executable ADB no està configurat a la configuració de l'editor." @@ -11311,7 +11746,8 @@ msgstr "" #: platform/android/export/export.cpp #, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" "El projecte Android no està instal·lat per a la compilació. Instal·leu-lo " "des del menú Editor." @@ -11348,8 +11784,9 @@ msgstr "" "'Projecte'." #: platform/android/export/export.cpp +#, fuzzy msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Construint Projecte Android (gradle)" #: platform/android/export/export.cpp #, fuzzy @@ -11406,6 +11843,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Executa-ho en el Navegador" @@ -12070,10 +12511,6 @@ msgstr "" "forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a Destinació " "de Renderització i assigneu-ne la textura interna a algun node." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrada" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12104,6 +12541,58 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Les constants no es poden modificar." +#~ msgid "Snap to Grid" +#~ msgstr "Ajustar a la QuadrÃcula" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Afegeix una Entrada" + +#~ msgid "Language" +#~ msgstr "Llengua" + +#~ msgid "Inherits" +#~ msgstr "Hereta" + +#~ msgid "Base Type:" +#~ msgstr "Tipus Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodes disponibles:" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Properties:" +#~ msgstr "Propietats:" + +#~ msgid "Methods:" +#~ msgstr "Mètodes:" + +#~ msgid "Theme Properties:" +#~ msgstr "Propietats del tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeracions:" + +#~ msgid "Constants:" +#~ msgstr "Constants:" + +#~ msgid "Class Description:" +#~ msgstr "Descripció de la classe:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descripcions de la Propietat:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descripcions del Mètode:" + +#~ msgid "Reverse sorting." +#~ msgstr "Ordenació inversa." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Elimina els Nodes?" + #~ msgid "No Matches" #~ msgstr "Cap Coincidència" @@ -12319,9 +12808,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Go to parent folder" #~ msgstr "Vés al directori principal" -#~ msgid "Select device from the list" -#~ msgstr "Selecciona un dispositiu de la llista" - #~ msgid "Open Scene(s)" #~ msgstr "Obre Escenes" @@ -12384,9 +12870,6 @@ msgstr "Les constants no es poden modificar." #~ msgstr "" #~ "Instancia les escenes seleccionades com a filles del node seleccionat." -#~ msgid "Warnings:" -#~ msgstr "Avisos:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "Mida de la lletra:" @@ -12430,9 +12913,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Select a split to erase it." #~ msgstr "Cal seleccionar un Element!" -#~ msgid "No name provided" -#~ msgstr "Manca Nom" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Afegeix un Node" @@ -12573,12 +13053,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Warning" #~ msgstr "AvÃs" -#~ msgid "Error:" -#~ msgstr "Error:" - -#~ msgid "Function:" -#~ msgstr "Funció:" - #~ msgid "Variable" #~ msgstr "Variable" @@ -12642,9 +13116,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Connect Graph Nodes" #~ msgstr "Connecta els Nodes de Graf" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Desconnecta el Nodes de Graf" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Elimina el Node de Graf d'Ombreig" @@ -12654,9 +13125,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplica el(s) Node(s) de Graf" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Elimina el(s) Node(s) de Graf d'Ombreig" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Error: Enllaç de Connexió CÃclic" @@ -13072,9 +13540,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Pick New Name and Location For:" #~ msgstr "Tria un Nou Nom i Ubicació per a:" -#~ msgid "No files selected!" -#~ msgstr "Cap fitxer seleccionat!" - #~ msgid "Info" #~ msgstr "Informació" @@ -13173,9 +13638,6 @@ msgstr "Les constants no es poden modificar." #~ msgid "Source Sample(s):" #~ msgstr "Mostra/es d'Origen:" -#~ msgid "Audio Sample" -#~ msgstr "Mostra d'Àudio" - #~ msgid "New Clip" #~ msgstr "Nou Clip" diff --git a/editor/translations/cs.po b/editor/translations/cs.po index a9cae4a444..dc6e69bc0c 100644 --- a/editor/translations/cs.po +++ b/editor/translations/cs.po @@ -68,6 +68,34 @@ msgstr "Neplatné argumenty pro zkonstruovánà '%s'" msgid "On call to '%s':" msgstr "PÅ™i volánà '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Volný" @@ -335,6 +363,7 @@ msgstr "VytvoÅ™it %d NOVÃCH stop a vložit klÃÄe?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "VytvoÅ™it" @@ -475,14 +504,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "UpozornÄ›nÃ: Upravuje se importovaná animace" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Vybrat vÅ¡e" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Nevybrat nic" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Pro úpravu animacà vyberte ze stromu scény uzel AnimationPlayer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -614,7 +639,8 @@ msgid "Scale Ratio:" msgstr "PomÄ›r zvÄ›tÅ¡enÃ:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Zvolte stopy ke zkopÃrovánÃ:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -626,6 +652,11 @@ msgstr "Zvolte stopy ke zkopÃrovánÃ:" msgid "Copy" msgstr "KopÃrovat" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Nevybrat nic" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "PÅ™idat klip audio stopy" @@ -806,7 +837,8 @@ msgstr "PÅ™ipojit Signál" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -911,7 +943,8 @@ msgstr "Hledat:" msgid "Matches:" msgstr "Shody:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -954,7 +987,7 @@ msgid "Resource" msgstr "Zdroj" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Cesta" @@ -1230,7 +1263,7 @@ msgid "Delete Bus Effect" msgstr "Smazat Bus efekt" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1428,7 +1461,9 @@ msgid "Add AutoLoad" msgstr "PÅ™idat AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Cesta:" @@ -1483,7 +1518,7 @@ msgstr "VytvoÅ™it složku" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Jméno:" @@ -1670,6 +1705,7 @@ msgstr "AktuálnÃ:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nový" @@ -1747,6 +1783,7 @@ msgid "New Folder..." msgstr "Nová složka..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Obnovit" @@ -1902,6 +1939,7 @@ msgid "Class:" msgstr "TÅ™Ãda:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "DÄ›dà z:" @@ -1910,7 +1948,8 @@ msgid "Inherited by:" msgstr "DÄ›dÄ›ná z:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "StruÄný popis:" #: editor/editor_help.cpp @@ -1918,38 +1957,18 @@ msgid "Properties" msgstr "Vlastnosti" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Vlastnosti:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metody" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metody:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Vlastnosti motivu" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Vlastnosti motivu:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signály:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "VýÄty" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "VýÄty:" - -#: editor/editor_help.cpp msgid "enum " msgstr "výÄet " @@ -1958,19 +1977,12 @@ msgid "Constants" msgstr "Konstanty" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanty:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Popis tÅ™Ãdy" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Popis tÅ™Ãdy:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Online návody:" #: editor/editor_help.cpp @@ -1988,10 +2000,6 @@ msgid "Property Descriptions" msgstr "Popis vlastnosti" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Popis vlastnosti:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2004,10 +2012,6 @@ msgid "Method Descriptions" msgstr "Popis metody" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Popis metody:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2077,8 +2081,8 @@ msgstr "Výstup:" msgid "Copy Selection" msgstr "KopÃrovat výbÄ›r" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2091,6 +2095,49 @@ msgstr "VyÄistit" msgid "Clear Output" msgstr "Vymazat výstup" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Zastavit" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Start" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Stáhnout" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Uzel" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2674,6 +2721,19 @@ msgstr "Projekt" msgid "Project Settings..." msgstr "Nastavenà projektu" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Verze:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2899,10 +2959,6 @@ msgstr "Pozastavit scénu" msgid "Stop the scene." msgstr "Zastavit scénu." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Zastavit" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Spustit upravenou scénu." @@ -2956,14 +3012,10 @@ msgid "Inspector" msgstr "Inspektor" #: editor/editor_node.cpp -msgid "Node" -msgstr "Uzel" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Výstup" @@ -2982,15 +3034,21 @@ msgstr "Spravovat exportnà šablony" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3053,6 +3111,11 @@ msgstr "OtevÅ™Ãt dalšà editor" msgid "Open the previous Editor" msgstr "OtevÅ™Ãt pÅ™edchozà editor" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "DÃlÄà zdroje" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3062,6 +3125,11 @@ msgid "Thumbnail..." msgstr "Náhled..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "OtevÅ™Ãt skript" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Upravit plugin" @@ -3090,11 +3158,6 @@ msgstr "Stav:" msgid "Edit:" msgstr "Upravit:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Start" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "MěřenÃ:" @@ -3196,6 +3259,11 @@ msgstr "Vyberte Viewport" msgid "New Script" msgstr "Nový skript" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "OtevÅ™Ãt skript" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nový %s" @@ -3222,13 +3290,6 @@ msgstr "Vložit" msgid "Convert To %s" msgstr "Konvertovat na %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "OtevÅ™Ãt editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Vybraný uzel nenà Viewport!" @@ -3904,9 +3965,10 @@ msgstr " Soubory" msgid "Import As:" msgstr "Importovat jako:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "PÅ™edvolba..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "PÅ™edvolby" #: editor/import_dock.cpp msgid "Reimport" @@ -4033,7 +4095,7 @@ msgstr "Název pluginu:" msgid "Subfolder:" msgstr "Podsložka:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Jazyk:" @@ -4175,6 +4237,12 @@ msgstr "Bod" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "OtevÅ™Ãt editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "OtevÅ™Ãt uzel animace" @@ -4347,6 +4415,7 @@ msgid "Change Animation Name:" msgstr "ZmÄ›nit název animace:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Smazat animaci?" @@ -4523,7 +4592,6 @@ msgstr "Jméno animace:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Chyba!" @@ -4693,6 +4761,8 @@ msgid "Current:" msgstr "AktuálnÃ:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "PÅ™idat vstup" @@ -4903,6 +4973,10 @@ msgid "All" msgstr "VÅ¡echny" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importovat" @@ -4917,11 +4991,6 @@ msgid "Sort:" msgstr "Řadit:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "PosÃlá se žádost..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategorie:" @@ -5202,22 +5271,33 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Režim Å¡kálovánÃ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "PÅ™epnout pÅ™ichycovánÃ." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "PoužÃt pÅ™ichycovánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Možnosti pÅ™ichytávánÃ" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "PÅ™epnout pÅ™ichycovánÃ." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "PÅ™ichytit k mřÞce" +msgid "Use Grid Snap" +msgstr "PoužÃt pÅ™ichycovánÃ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Možnosti pÅ™ichytávánÃ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5314,8 +5394,8 @@ msgid "View" msgstr "ZobrazenÃ" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Zobrazit mřÞku" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5587,6 +5667,11 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Pravý klik: Smazat bod" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6230,6 +6315,10 @@ msgid "Grid" msgstr "MřÞka" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Zobrazit mřÞku" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Nastavit mřÞku:" @@ -6286,7 +6375,8 @@ msgstr "Instance:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Typ:" @@ -6388,6 +6478,11 @@ msgid "Find Next" msgstr "NajÃt dalÅ¡Ã" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "NajÃt pÅ™edchozÃ" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtrovat vlastnosti" @@ -6493,15 +6588,15 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "PÅ™eskoÄit" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Step Into" msgstr "Vstoupit" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "PÅ™eskoÄit" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "PÅ™eruÅ¡it" @@ -6583,7 +6678,7 @@ msgstr "Vymazat nedávné scény" msgid "Connections to method:" msgstr "PÅ™ipojit k uzlu:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Zdroj:" @@ -6667,6 +6762,11 @@ msgstr "VytvoÅ™it body." msgid "Cut" msgstr "Vyjmout" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Vybrat vÅ¡e" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Odstranit řádek" @@ -6725,10 +6825,6 @@ msgid "Auto Indent" msgstr "Automatické odsazenÃ" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "NajÃt pÅ™edchozÃ" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "NajÃt v souborech..." @@ -7060,6 +7156,11 @@ msgid "Freelook Speed Modifier" msgstr "Rychlost volného pohledu" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Rychlost volného pohledu" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7098,6 +7199,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "PoužÃt pÅ™ichycovánÃ" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Pohled zdola" @@ -7336,6 +7441,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7386,6 +7495,11 @@ msgid "(empty)" msgstr "(prázdný)" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Vložit snÃmek" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animace:" @@ -7719,6 +7833,15 @@ msgid "Enable Priority" msgstr "Editovat filtry" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrovat soubory..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7866,6 +7989,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Odstranit vybranou texturu? Toto odstranà vÅ¡echny dlaždice, které ji " @@ -8038,18 +8166,118 @@ msgstr "Tato vlastnost nemůže být zmÄ›nÄ›na." msgid "TileSet" msgstr "TileSet" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "Jméno rodiÄe uzlu, pokud dostupné" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Chyba" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No commit message was provided" +msgstr "Nebylo poskytnuto žádné jméno" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "PÅ™idat vstup" +msgid "Commit" +msgstr "Komunita" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Velká pÃsmena" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "VytvoÅ™it nové uzly." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "ZmÄ›nit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "PÅ™ejmenovat" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Odstranit" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "ZmÄ›nit" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Smazat vybraný" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Uložit vÅ¡e" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Synchornizace zmÄ›n skriptu" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "PÅ™idat vstup" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8067,6 +8295,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "PÅ™idat vstup" @@ -8296,6 +8528,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Returns the boolean result of the comparison between two parameters." msgstr "Vrátà tangens parametru." @@ -8964,12 +9201,14 @@ msgstr "Zdroje k exportu:" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9534,6 +9773,11 @@ msgid "Settings saved OK." msgstr "Nastavenà úspěšnÄ› uloženo." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "ZmÄ›nit měřÃtko výbÄ›ru" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9673,6 +9917,10 @@ msgid "Plugins" msgstr "Pluginy" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "PÅ™edvolba..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Nula" @@ -9839,10 +10087,6 @@ msgstr "Na velká pÃsmena" msgid "Reset" msgstr "Resetovat" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Chyba" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9898,6 +10142,11 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Uložit vÄ›tev jako scénu" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9939,8 +10188,22 @@ msgid "Make node as Root" msgstr "Dává smysl!" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Odstranit uzel/uzly?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Smazat uzel" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Smazat uzel" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9961,11 +10224,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10042,6 +10303,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "OtevÅ™Ãt dokumentaci" @@ -10061,11 +10330,6 @@ msgstr "ZmÄ›nit typ" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "OtevÅ™Ãt skript" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "PÅ™idat/VytvoÅ™it nový uzel" @@ -10316,23 +10580,18 @@ msgid "Will load an existing script file." msgstr "NaÄÃst existujÃcà soubor skriptu" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Jazyk" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "DÄ›dÃ" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Jméno tÅ™Ãdy" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Å ablona" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "VestavÄ›ný skript" #: editor/script_create_dialog.cpp @@ -10348,11 +10607,41 @@ msgid "Bytes:" msgstr "Bajtů:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "VarovánÃ:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Error:" +msgstr "Chyba:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "KopÃrovat chybu" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Chyba:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Zdroj:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Zdroj:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Zdroj:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10360,14 +10649,20 @@ msgid "Errors" msgstr "Chyby" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Odpojené uzly" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "KopÃrovat chybu" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "VytvoÅ™it body." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10384,6 +10679,11 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Exportovat projekt" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10396,6 +10696,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10602,10 +10906,6 @@ msgid "Library" msgstr "Knihovna" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Knihovny: " @@ -10614,6 +10914,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "Argument kroku je nula!" @@ -10773,6 +11077,15 @@ msgstr "Nastavenà GridMap" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Režim filtru:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Název tÅ™Ãdy nemůže být rezervované klÃÄové slovo" @@ -10919,6 +11232,10 @@ msgid "Create a new variable." msgstr "VytvoÅ™it nové uzly." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "VytvoÅ™it nový polygon." @@ -10948,6 +11265,11 @@ msgid "Add Function" msgstr "PÅ™idat funkci" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Odstranit bod" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "PÅ™idat promÄ›nnou" @@ -10956,6 +11278,26 @@ msgid "Add Signal" msgstr "PÅ™idat signál" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "PÅ™idat vstup" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "PÅ™idat vstup" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Odstranit bod" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Odstranit bod" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "ZmÄ›nit výraz" @@ -11002,10 +11344,20 @@ msgid "Add Preload Node" msgstr "PÅ™idat pÅ™edem naÄtený uzel" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "PÅ™idat uzel(y) ze stromu" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "PÅ™idat vlastnost getter" @@ -11031,6 +11383,11 @@ msgstr "PÅ™ipojit uzly" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Odpojit uzly grafu" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "PÅ™ipojit uzly" @@ -11065,6 +11422,27 @@ msgid "Paste VisualScript Nodes" msgstr "Vložit VisualScript uzly" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "PÅ™ejmenovat funkci" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Odstranit funkci" @@ -11085,16 +11463,18 @@ msgid "Editing Signal:" msgstr "Úprava signálu:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Základnà typ:" +#, fuzzy +msgid "Make Tool:" +msgstr "MÃstnÃ" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ÄŒlenové:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Dostupné uzly:" +#, fuzzy +msgid "function_name" +msgstr "Funkce:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11119,6 +11499,16 @@ msgstr "Vyjmout uzly" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "PÅ™ejmenovat funkci" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Obnovit" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "ÄŒlenové" @@ -11216,6 +11606,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Vyberte zaÅ™Ãzenà ze seznamu" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11237,7 +11631,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11317,6 +11712,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Spustit v prohlÞeÄi" @@ -11938,10 +12337,6 @@ msgstr "" "mohl zÃskat velikost. Jinak ho nastavte jako render target a pÅ™iÅ™aÄte jeho " "vnitÅ™nà texturu nÄ›jakému uzlu k zobrazenÃ." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Vstup" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11972,6 +12367,60 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanty nenà možné upravovat." +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "PÅ™ichytit k mřÞce" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "PÅ™idat vstup" + +#~ msgid "Language" +#~ msgstr "Jazyk" + +#~ msgid "Inherits" +#~ msgstr "DÄ›dÃ" + +#~ msgid "Base Type:" +#~ msgstr "Základnà typ:" + +#~ msgid "Available Nodes:" +#~ msgstr "Dostupné uzly:" + +#~ msgid "Input" +#~ msgstr "Vstup" + +#~ msgid "Properties:" +#~ msgstr "Vlastnosti:" + +#~ msgid "Methods:" +#~ msgstr "Metody:" + +#~ msgid "Theme Properties:" +#~ msgstr "Vlastnosti motivu:" + +#~ msgid "Enumerations:" +#~ msgstr "VýÄty:" + +#~ msgid "Constants:" +#~ msgstr "Konstanty:" + +#~ msgid "Class Description:" +#~ msgstr "Popis tÅ™Ãdy:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Popis vlastnosti:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Popis metody:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "PosÃlá se žádost..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Odstranit uzel/uzly?" + #~ msgid "No Matches" #~ msgstr "Žádné shody" @@ -12125,9 +12574,6 @@ msgstr "Konstanty nenà možné upravovat." #~ msgid "Go to parent folder" #~ msgstr "JÃt na nadÅ™azenou složku" -#~ msgid "Select device from the list" -#~ msgstr "Vyberte zaÅ™Ãzenà ze seznamu" - #~ msgid "Open Scene(s)" #~ msgstr "OtevÅ™Ãt scénu(y)" @@ -12177,9 +12623,6 @@ msgstr "Konstanty nenà možné upravovat." #~ msgid "Insert keys." #~ msgstr "Vložit klÃÄe." -#~ msgid "Warnings:" -#~ msgstr "VarovánÃ:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "Pohled zepÅ™edu" @@ -12217,9 +12660,6 @@ msgstr "Konstanty nenà možné upravovat." #~ msgid "Select a split to erase it." #~ msgstr "Vyberte složku pro skenovánÃ" -#~ msgid "No name provided" -#~ msgstr "Nebylo poskytnuto žádné jméno" - #~ msgid "Add Node.." #~ msgstr "PÅ™idat uzel.." @@ -12333,12 +12773,6 @@ msgstr "Konstanty nenà možné upravovat." #~ msgid "Warning" #~ msgstr "VarovánÃ" -#~ msgid "Error:" -#~ msgstr "Chyba:" - -#~ msgid "Function:" -#~ msgstr "Funkce:" - #~ msgid "Variable" #~ msgstr "PromÄ›nná" @@ -12369,9 +12803,6 @@ msgstr "Konstanty nenà možné upravovat." #~ msgid "Connect Graph Nodes" #~ msgstr "Propojit uzly grafu" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Odpojit uzly grafu" - #~ msgid "Move Anim Track Up" #~ msgstr "Posun stopy animace nahoru" diff --git a/editor/translations/da.po b/editor/translations/da.po index bacbf07ff6..b91eec6954 100644 --- a/editor/translations/da.po +++ b/editor/translations/da.po @@ -12,12 +12,14 @@ # Jonathan B. Jørgensen <pizzaernam@gmail.com>, 2018. # Peter G. Laursen <GhostReven@gmail.com>, 2018. # Rémi Verschelde <akien@godotengine.org>, 2019. +# Mads K. Bredager <mbredager@gmail.com>, 2019. +# Kristoffer Andersen <kjaa@google.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-01-13 15:06+0000\n" -"Last-Translator: Rémi Verschelde <akien@godotengine.org>\n" +"PO-Revision-Date: 2019-10-04 09:55+0000\n" +"Last-Translator: Kristoffer Andersen <kjaa@google.com>\n" "Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/" "godot/da/>\n" "Language: da\n" @@ -25,7 +27,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.4-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -48,7 +50,7 @@ msgstr "self kan ikke bruges fordi instansen er null (mislykket)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "Ugyldigt operandere til operator %s, %s og %s." +msgstr "Ugyldige operander til operator %s, %s og %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -66,9 +68,37 @@ msgstr "Ugyldige argumenter til at konstruere '%s'" msgid "On call to '%s':" msgstr "Ved kald til '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Gratis" +msgstr "Fri" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -84,7 +114,7 @@ msgstr "Tid:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "" +msgstr "Værdi:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -104,9 +134,8 @@ msgid "Add Bezier Point" msgstr "Tilføj punkt" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "Fjern punkt" +msgstr "Flyt punkt" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -169,7 +198,7 @@ msgstr "Ændre Animation Navn:" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "Redigér animationsløkke" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -257,7 +286,7 @@ msgstr "Tid (s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Skift bane slÃ¥et til" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -344,6 +373,7 @@ msgstr "Opret %d NYE spor og indsæt nøgler?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Opret" @@ -477,20 +507,26 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" +"Animationen hører til en importeret scene, og ændringer til importerede spor " +"vil ikke blive gemt.\n" +"\n" +"For at slÃ¥ muligheden for at tilføje brugerdefinerede spor til, naviger til " +"scenens importerings-\n" +"muligheder og sæt \"Animation > Lager\" til \"Filer\", slÃ¥ \"animation > " +"Behold brugerdefinerede\n" +"spor\" til, og importer igen.\n" +"Alternativt, brug en import forudindstilling, der importerer animationer til " +"separate filer." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" -msgstr "" - -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Vælg alle" +msgstr "Advarsel: Redigerer importeret animation" #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Vælg Node" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Vælg en Animations afspiller fra Scene Tree for at redigere i animationer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -511,11 +547,11 @@ msgstr "Animation trin værdi." #: editor/animation_track_editor.cpp msgid "Seconds" -msgstr "" +msgstr "Sekunder" #: editor/animation_track_editor.cpp msgid "FPS" -msgstr "" +msgstr "FPS" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -623,7 +659,8 @@ msgid "Scale Ratio:" msgstr "Skalaforhold:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Vælg spor til kopiering:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -635,6 +672,11 @@ msgstr "Vælg spor til kopiering:" msgid "Copy" msgstr "Kopier" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Vælg Node" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -642,11 +684,11 @@ msgstr "Lydklip:" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" -msgstr "" +msgstr "Forskyd lydsporets start" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip End Offset" -msgstr "" +msgstr "Forskyd lydsporets slutning" #: editor/array_property_edit.cpp msgid "Resize Array" @@ -724,7 +766,7 @@ msgstr "Nulstil Zoom" #: editor/code_editor.cpp msgid "Warnings" -msgstr "" +msgstr "Advarsler" #: editor/code_editor.cpp msgid "Line and column numbers." @@ -822,7 +864,8 @@ msgstr "Forbind Signal: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -927,7 +970,8 @@ msgstr "Søgning:" msgid "Matches:" msgstr "Matches:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -970,7 +1014,7 @@ msgid "Resource" msgstr "Ressource" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Sti" @@ -1244,7 +1288,8 @@ msgid "Delete Bus Effect" msgstr "Slet Bus Effekt" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Audio Bus, Træk og Slip for at omarrangere." #: editor/editor_audio_buses.cpp @@ -1445,7 +1490,9 @@ msgid "Add AutoLoad" msgstr "Tilføj AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Sti:" @@ -1500,7 +1547,7 @@ msgstr "Opret Mappe" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Navn:" @@ -1684,6 +1731,7 @@ msgstr "(Nuværende)" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1761,6 +1809,7 @@ msgid "New Folder..." msgstr "Opret mappe..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Opdater" @@ -1916,6 +1965,7 @@ msgid "Class:" msgstr "Klasse:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Arver:" @@ -1924,7 +1974,8 @@ msgid "Inherited by:" msgstr "Arvet af:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Kort Beskrivelse:" #: editor/editor_help.cpp @@ -1932,38 +1983,18 @@ msgid "Properties" msgstr "Egenskaber" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metoder" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metoder:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Tema Egenskaber" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Tema Egenskaber:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signaler:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Tællinger" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Tællinger:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1972,19 +2003,12 @@ msgid "Constants" msgstr "Konstanter" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanter:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Klasse beskrivelse" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Klasse beskrivelse:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Online Undervisning:" #: editor/editor_help.cpp @@ -2002,10 +2026,6 @@ msgid "Property Descriptions" msgstr "Egenskab beskrivelser" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Egenskab beskrivelser:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2018,10 +2038,6 @@ msgid "Method Descriptions" msgstr "Metode beskrivelser" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Metode beskrivelser:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2092,8 +2108,8 @@ msgstr "Output:" msgid "Copy Selection" msgstr "Fjern Markering" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2106,6 +2122,49 @@ msgstr "Clear" msgid "Clear Output" msgstr "Ryd Output" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stop" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Download" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2694,6 +2753,19 @@ msgstr "Projekt" msgid "Project Settings..." msgstr "Projekt Indstillinger" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Version:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2920,10 +2992,6 @@ msgstr "Sæt scenen pÃ¥ pause" msgid "Stop the scene." msgstr "Stop scenen." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Stop" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Spil den redigerede scene." @@ -2978,14 +3046,10 @@ msgid "Inspector" msgstr "Inspektør" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Udvid nederste panel" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Output" @@ -3004,15 +3068,21 @@ msgstr "Organiser Eksport Skabeloner" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3075,6 +3145,11 @@ msgstr "Ã…bn næste Editor" msgid "Open the previous Editor" msgstr "Ã…ben den forrige Editor" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Sub-Ressourcer:" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Opretter Maske ForhÃ¥ndsvisninger" @@ -3084,6 +3159,11 @@ msgid "Thumbnail..." msgstr "Miniature..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Ã…ben script" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Redigere tilslutning" @@ -3112,11 +3192,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Rediger:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "MÃ¥ling:" @@ -3215,6 +3290,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Ã…ben script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3241,13 +3321,6 @@ msgstr "Indsæt" msgid "Convert To %s" msgstr "Konverter Til %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Ã…bn redaktør" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3949,8 +4022,9 @@ msgstr " Filer" msgid "Import As:" msgstr "Importer Som:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "Forudindstillet..." #: editor/import_dock.cpp @@ -4082,7 +4156,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4233,6 +4307,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Ã…bn redaktør" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4418,6 +4498,7 @@ msgid "Change Animation Name:" msgstr "Ændre Animation Navn:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Slet Animation?" @@ -4602,7 +4683,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4780,6 +4860,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4993,6 +5075,10 @@ msgid "All" msgstr "Alle" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importer" @@ -5006,11 +5092,6 @@ msgid "Sort:" msgstr "Sorter:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Anmoder..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategori:" @@ -5293,20 +5374,29 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Skifter Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Skift snapping mode" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Skift snapping mode" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5401,8 +5491,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5672,6 +5761,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6323,6 +6416,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6378,7 +6475,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6488,6 +6586,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtrer noder" @@ -6596,11 +6699,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6685,7 +6788,7 @@ msgstr "Ryd Seneste Scener" msgid "Connections to method:" msgstr "Forbind Til Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Ressource" @@ -6771,6 +6874,11 @@ msgstr "Slet points" msgid "Cut" msgstr "Cut" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Vælg alle" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Fjern Line" @@ -6832,10 +6940,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtrer filer..." @@ -7171,6 +7275,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7204,6 +7312,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7438,6 +7550,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7490,6 +7606,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Flyt Node(s)" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Tilføj animation" @@ -7819,6 +7940,15 @@ msgid "Enable Priority" msgstr "Rediger filtre" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrer filer..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7963,6 +8093,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Fjern Kurve Punkt" @@ -8140,20 +8275,119 @@ msgstr "Denne handling kan ikke udføres uden en scene." msgid "TileSet" msgstr "TileSet..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Tilføj punkt" +msgid "No commit message was provided" +msgstr "Intet navn angivet" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Fællesskab" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Opret Ny %s" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Skift" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Omdøb" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Slet" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Skift" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Slet Valgte" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Vælg alle" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Synkroniser Script Ændringer" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "Output" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8167,6 +8401,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Tilføj punkt" @@ -8395,6 +8633,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9048,12 +9291,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9620,6 +9865,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Slet valgte" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9758,6 +10008,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Forudindstillet..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9930,10 +10184,6 @@ msgstr "" msgid "Reset" msgstr "Nulstil Zoom" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9989,6 +10239,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10030,10 +10284,24 @@ msgid "Make node as Root" msgstr "Gem Scene" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Vælg Node" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Vælg Node" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10052,11 +10320,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10137,6 +10403,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Ã…ben Seneste" @@ -10156,11 +10430,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Ã…ben script" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Opret Ny %s" @@ -10409,24 +10678,19 @@ msgid "Will load an existing script file." msgstr "Indlæs et eksisterende Bus Layout." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Klasse:" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Skabelon" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Ã…ben script" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10442,11 +10706,42 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "Advarsler:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Spejl" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Indlæs Fejl" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Indlæs Fejl" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Ressource" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Ressource" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Ressource" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10454,8 +10749,9 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Afbrudt" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10463,6 +10759,11 @@ msgid "Copy Error" msgstr "Indlæs Fejl" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Slet points" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10479,6 +10780,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Eksporter Projekt" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10491,6 +10797,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10690,10 +11000,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10702,6 +11008,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "trin argument er nul!" @@ -10860,6 +11170,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filter mode:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11006,6 +11325,10 @@ msgid "Create a new variable." msgstr "Opret Ny %s" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signaler:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Opret Poly" @@ -11035,6 +11358,11 @@ msgid "Add Function" msgstr "Tilføj Funktion" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Tilføj variabel" @@ -11044,6 +11372,26 @@ msgstr "Tilføj Signal" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Add Input Port" +msgstr "Tilføj punkt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Tilføj punkt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Change Expression" msgstr "Skift udtryk" @@ -11084,10 +11432,20 @@ msgid "Add Preload Node" msgstr "Tilføj Preload Node" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Tilføj Node(r) fra Tree" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Tilføj Getter Egenskab" @@ -11113,6 +11471,11 @@ msgstr "Forbind Nodes" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Forbind Nodes" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Forbind Nodes" @@ -11146,6 +11509,27 @@ msgid "Paste VisualScript Nodes" msgstr "Indsæt VisualScript Nodes" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Omdøb Funktion" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Fjern Funktion" @@ -11166,16 +11550,17 @@ msgid "Editing Signal:" msgstr "Redigerer Signal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Basis Type:" +msgid "Make Tool:" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Medlemmer:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Tilgængelige Noder:" +#, fuzzy +msgid "function_name" +msgstr "Funktioner:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11201,6 +11586,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Omdøb Funktion" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Opdater" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Medlemmer" @@ -11299,6 +11694,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Vælg enhed fra listen" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11320,7 +11719,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11400,6 +11800,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12013,10 +12417,6 @@ msgstr "" "den kan opnÃ¥ en størrelse. Ellers gør den til en RenderTarget og tildel dens " "indre textur til en node sÃ¥ den kan vises." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12046,7 +12446,42 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "" +msgstr "Konstanter kan ikke ændres." + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Tilføj punkt" + +#~ msgid "Base Type:" +#~ msgstr "Basis Type:" + +#~ msgid "Available Nodes:" +#~ msgstr "Tilgængelige Noder:" + +#~ msgid "Methods:" +#~ msgstr "Metoder:" + +#~ msgid "Theme Properties:" +#~ msgstr "Tema Egenskaber:" + +#~ msgid "Enumerations:" +#~ msgstr "Tællinger:" + +#~ msgid "Constants:" +#~ msgstr "Konstanter:" + +#~ msgid "Class Description:" +#~ msgstr "Klasse beskrivelse:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Egenskab beskrivelser:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Metode beskrivelser:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Anmoder..." #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -12137,9 +12572,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "GÃ¥ til overliggende mappe" -#~ msgid "Select device from the list" -#~ msgstr "Vælg enhed fra listen" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "Ã…bn Scene" @@ -12173,9 +12605,6 @@ msgstr "" #~ msgid "Edit Variable:" #~ msgstr "Rediger Variabel:" -#~ msgid "Warnings:" -#~ msgstr "Advarsler:" - #~ msgid "Font Size:" #~ msgstr "Skrifttype Størrelse:" @@ -12210,9 +12639,6 @@ msgstr "" #~ msgid "Poly" #~ msgstr "Rediger Poly" -#~ msgid "No name provided" -#~ msgstr "Intet navn angivet" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Tilføj Node" diff --git a/editor/translations/de.po b/editor/translations/de.po index bc00839d04..8c4a29f571 100644 --- a/editor/translations/de.po +++ b/editor/translations/de.po @@ -50,8 +50,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-18 10:23+0000\n" -"Last-Translator: Linux User <no-ads@mail.de>\n" +"PO-Revision-Date: 2019-10-04 03:14+0000\n" +"Last-Translator: So Wieso <sowieso@dukun.de>\n" "Language-Team: German <https://hosted.weblate.org/projects/godot-engine/" "godot/de/>\n" "Language: de\n" @@ -59,7 +59,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.8\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -102,6 +102,34 @@ msgstr "Ungültige Parameter für die Konstruktion von ‚%s‘" msgid "On call to '%s':" msgstr "Im Aufruf von ‚%s‘:" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Kostenlos" @@ -366,6 +394,7 @@ msgstr "%d NEUE Spuren erstellen und Schlüsselbilder hinzufügen?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Erstellen" @@ -509,14 +538,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Achtung: Es wird eine importierte Animation bearbeitet" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Alles auswählen" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Nichts auswählen" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Ein AnimationPlayer-Node auswählen um Animationen zu erzeugen oder zu " +"bearbeiten." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -648,7 +674,8 @@ msgid "Scale Ratio:" msgstr "Skalierungsverhältnis:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Zu kopierende Spuren auswählen:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -660,6 +687,11 @@ msgstr "Zu kopierende Spuren auswählen:" msgid "Copy" msgstr "Kopieren" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Nichts auswählen" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Tonspurclip hinzufügen" @@ -697,14 +729,12 @@ msgid "Replaced %d occurrence(s)." msgstr "Suchbegriff wurde %d mal ersetzt." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "%d Übereinstimmung(en) gefunden." +msgstr "%d Übereinstimmung gefunden." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "%d Übereinstimmung(en) gefunden." +msgstr "%d Übereinstimmungen gefunden." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -842,7 +872,8 @@ msgstr "Signal kann nicht verbunden werden" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -943,7 +974,8 @@ msgstr "Suche:" msgid "Matches:" msgstr "Treffer:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -984,7 +1016,7 @@ msgid "Resource" msgstr "Ressource" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Pfad" @@ -1160,12 +1192,10 @@ msgid "License" msgstr "Lizenz" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Drittpartei-Lizenz" +msgstr "Drittpartei-Lizenzen" #: 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 " @@ -1191,7 +1221,6 @@ msgid "Licenses" msgstr "Lizenzen" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." msgstr "Fehler beim Öffnen der Paketdatei, kein ZIP-Format." @@ -1261,8 +1290,8 @@ msgid "Delete Bus Effect" msgstr "Audiobuseffekt löschen" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Audiobus, Drag & Drop zum Umsortieren." +msgid "Drag & drop to rearrange." +msgstr "Mittels Drag&Drop umordnen." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1452,7 +1481,9 @@ msgid "Add AutoLoad" msgstr "Autoload hinzufügen" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pfad:" @@ -1506,7 +1537,7 @@ msgstr "Ordner erstellen" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Name:" @@ -1682,6 +1713,7 @@ msgstr "Als aktuell auswählen" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Neu" @@ -1752,6 +1784,7 @@ msgid "New Folder..." msgstr "Neuer Ordner..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Aktualisieren" @@ -1901,6 +1934,7 @@ msgid "Class:" msgstr "Klasse:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Erbt von:" @@ -1909,46 +1943,26 @@ msgid "Inherited by:" msgstr "Vererbt an:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Kurze Beschreibung:" +msgid "Brief Description" +msgstr "Kurze Beschreibung" #: editor/editor_help.cpp msgid "Properties" msgstr "Eigenschaften" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Eigenschaften:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Methoden" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Methoden:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Motiv-Eigenschaften" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Motiv-Eigenschaften:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signale:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Aufzählungen" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enums:" - -#: editor/editor_help.cpp msgid "enum " msgstr "Enum " @@ -1957,20 +1971,12 @@ msgid "Constants" msgstr "Konstanten" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanten:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Klassenbeschreibung" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Klassenbeschreibung:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Anleitungen im Netz:" +msgid "Online Tutorials" +msgstr "Anleitungen im Netz" #: editor/editor_help.cpp msgid "" @@ -1987,10 +1993,6 @@ msgid "Property Descriptions" msgstr "Eigenschaften-Beschreibung" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Eigenschaften-Beschreibung:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2003,10 +2005,6 @@ msgid "Method Descriptions" msgstr "Methoden-Beschreibung" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Methoden-Beschreibung:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2075,8 +2073,8 @@ msgstr "Ausgabe:" msgid "Copy Selection" msgstr "Auswahl kopieren" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2089,10 +2087,51 @@ msgstr "Löschen" msgid "Clear Output" msgstr "Ausgabe löschen" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stop" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Start" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Herunter" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Hoch" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Eingehender RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "Eingehender RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "Ausgehender RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "Ausgehender RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Fenster" +msgstr "Neues Fenster" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2425,9 +2464,8 @@ msgid "Close Scene" msgstr "Szene schließen" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Szene schließen" +msgstr "Geschlossene Szene erneut öffnen" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2550,9 +2588,8 @@ msgid "Close Tab" msgstr "Tab schließen" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Tab schließen" +msgstr "Tab-Schließen rückgängig machen" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2685,18 +2722,28 @@ msgid "Project" msgstr "Projekt" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Projekteinstellungen" +msgstr "Projekteinstellungen..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versionsverwaltung" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Versionsverwaltung einrichten" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Versionsverwaltung beenden" #: editor/editor_node.cpp msgid "Export..." msgstr "Exportieren..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Android-Build-Vorlage installieren" +msgstr "Android-Build-Vorlage installieren..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2707,9 +2754,8 @@ msgid "Tools" msgstr "Werkzeuge" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Unbenutzte Dateien ansehen" +msgstr "Verwaiste-Ressourcen-Dateimanager…" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2754,7 +2800,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "Collision Shapes sichtbar" +msgstr "Collision-Shapes sichtbar" #: editor/editor_node.cpp msgid "" @@ -2813,9 +2859,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Editoreinstellungen" +msgstr "Editoreinstellungen…" #: editor/editor_node.cpp msgid "Editor Layout" @@ -2851,14 +2896,12 @@ msgid "Open Editor Settings Folder" msgstr "Editoreinstellungenordner öffnen" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Editorfunktionen verwalten" +msgstr "Editorfunktionen verwalten…" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Verwalte Exportvorlagen" +msgstr "Exportvorlagen verwalten…" #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2914,10 +2957,6 @@ msgstr "Szene pausieren" msgid "Stop the scene." msgstr "Szene stoppen." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Stop" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Spiele die bearbeitete Szene." @@ -2968,14 +3007,10 @@ msgid "Inspector" msgstr "Inspektor" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Unteres Panel vergrößern" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Ausgabe" @@ -2994,23 +3029,33 @@ msgstr "Vorlagen verwalten" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Dies wird das Android-Projekt für eigene Builds installieren.\n" -"Hinweis: Um es zu benutzen muss es in den jeweiligen Exportvoreinstellungen " -"aktivierten werden." +"Hiermit wird der Projektordner für beliebige Android-Builds eingerichtet in " +"dem das Quell-Template nach „res://android/build“ installiert wird.\n" +"Danach können eigene Modifikationen vorgenommen und ein eigens APK " +"exportiert werden (Module hinzufügen, AndroidManifest.xml ändern, usw.).\n" +"Achtung: Um eigene Builds, statt den vorgefertigten zu generieren, muss die " +"„Use Custom Build“-Option in den Android-Export-Voreinstellungen aktiviert " +"sein." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"Android-Build-Vorlage wurde bereits installiert und wird nicht " -"überschrieben.\n" -"Zur Ausführung dieses Befehls muss das „build“-Verzeichnis manuell gelöscht " -"werden." +"Die Android-Build-Vorlage wurde bereits für dieses Projekt installiert und " +"wird nicht überschrieben.\n" +"Zur Ausführung dieses Befehls muss das „res://android/build“-Verzeichnis " +"manuell gelöscht werden." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3072,6 +3117,10 @@ msgstr "Nächsten Editor öffnen" msgid "Open the previous Editor" msgstr "Vorigen Editor öffnen" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Keine Unter-Ressourcen gefunden." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Mesh-Vorschauen erzeugen" @@ -3081,6 +3130,10 @@ msgid "Thumbnail..." msgstr "Vorschau..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Haupt-Skript:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Plugin bearbeiten" @@ -3109,11 +3162,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Bearbeiten:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Start" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Messung:" @@ -3219,6 +3267,10 @@ msgstr "Viewport auswählen" msgid "New Script" msgstr "Neues Skript" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Skript erweitern" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Neues %s" @@ -3245,13 +3297,6 @@ msgstr "Einfügen" msgid "Convert To %s" msgstr "Umwandeln zu %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Editor öffnen" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Ausgewähltes Node ist kein Viewport!" @@ -3330,7 +3375,6 @@ msgid "Import From Node:" msgstr "Aus Node importieren:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Erneut herunterladen" @@ -3350,6 +3394,8 @@ msgstr "Herunterladen" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Für Entwicklungsversionen werden keine offizielle Exportvorlagen bereit " +"gestellt." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3432,23 +3478,20 @@ msgid "Download Complete." msgstr "Download abgeschlossen." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Kann Motiv nicht speichern in Datei:" +msgstr "Temporäre Datei kann nicht entfernt werden:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Template-Installation fehlgeschlagen. Des problematische Template-Archiv " -"befindet sich hier: ‚%s‘." +"Exportvorlagen-Installation fehlgeschlagen.\n" +"Das problematische Exportvorlagen-Archiv befindet sich hier in ‚%s‘." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Fehler beim Abrufen der URL: " +msgstr "Fehler beim Abrufen der URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3634,9 +3677,8 @@ msgid "Move To..." msgstr "Verschiebe zu..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Neue Szene" +msgstr "Neue Szene…" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3706,9 +3748,8 @@ msgid "Overwrite" msgstr "Überschreiben" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Von Szene erstellen" +msgstr "Szene erstellen" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3788,23 +3829,20 @@ msgid "Invalid group name." msgstr "Ungültiger Gruppenname." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Gruppen verwalten" +msgstr "Gruppe umbenennen" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Lösche Bildergruppe" +msgstr "Gruppe löschen" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Gruppen" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nodes nicht in der Gruppe" +msgstr "Nodes nicht in Gruppe" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3817,12 +3855,11 @@ msgstr "Nodes in der Gruppe" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Leere Gruppen werden automatisch entfernt." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Skripteditor" +msgstr "Gruppeneditor" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3921,9 +3958,9 @@ msgstr " Dateien" msgid "Import As:" msgstr "Importiere als:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Voreinstellungen..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Vorlage" #: editor/import_dock.cpp msgid "Reimport" @@ -4032,9 +4069,9 @@ msgid "MultiNode Set" msgstr "MultiNode setzen" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Node auswählen um Signale und Gruppen zu bearbeiten." +msgstr "" +"Ein einzelnes Node auswählen um seine Signale und Gruppen zu bearbeiten." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4052,7 +4089,7 @@ msgstr "Pluginname:" msgid "Subfolder:" msgstr "Unterverzeichnis:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Sprache:" @@ -4194,6 +4231,12 @@ msgstr "Punkt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Editor öffnen" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Animations-Node öffnen" @@ -4366,6 +4409,7 @@ msgid "Change Animation Name:" msgstr "Animationsname ändern:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Animation löschen?" @@ -4540,7 +4584,6 @@ msgstr "Animationsname:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Fehler!" @@ -4713,6 +4756,8 @@ msgid "Current:" msgstr "Laufend:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Eingang hinzufügen" @@ -4813,37 +4858,32 @@ msgid "Request failed, return code:" msgstr "Anfrage fehlgeschlagen: Rückgabewert:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Anfrage fehlgeschlagen." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Kann Motiv nicht speichern in Datei:" +msgstr "Kann Antwort nicht speichern in:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Schreibfehler." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Anfrage fehlgeschlagen, zu viele Weiterleitungen" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Weiterleitungsschleife." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Anfrage fehlgeschlagen: Rückgabewert:" +msgstr "Anfrage fehlgeschlagen, Zeitüberschreitung" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Zeit" +msgstr "Zeitüberschreitung." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4922,24 +4962,22 @@ msgid "All" msgstr "Alle" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Neuimport..." +msgstr "Importieren…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Erweiterungen" +msgstr "Erweiterungen…" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Sortiere:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Sortierung umkehren." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategorie:" @@ -4949,9 +4987,8 @@ msgid "Site:" msgstr "Seite:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Stabilität..." +msgstr "Stabilität" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4962,9 +4999,8 @@ msgid "Testing" msgstr "Testphase" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Lade..." +msgstr "Lade…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5133,9 +5169,8 @@ msgid "Paste Pose" msgstr "Pose einfügen" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Knochen löschen" +msgstr "Hilfslinien löschen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5224,21 +5259,32 @@ msgid "Pan Mode" msgstr "Schwenkmodus" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Linealmodus" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Einrasten umschalten." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Einrasten aktivieren" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Einrasteinstellungen" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Einrasten umschalten." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Gitter-Einrasten" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Am Gitter einrasten" +msgid "Snapping Options" +msgstr "Einrasteinstellungen" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5328,8 +5374,8 @@ msgid "View" msgstr "Ansicht" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Raster anzeigen" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5596,6 +5642,11 @@ msgstr "Lineare Kurventangente umschalten" msgid "Hold Shift to edit tangents individually" msgstr "Umsch halten um Tangenten einzeln zu bearbeiten" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Rechtsklick: Punkt löschen" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "GI Sonde vorrendern" @@ -5875,26 +5926,23 @@ msgstr "Erzeugungszeit (s):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Die Faces der Geometrie enthalten keine Area." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Knoten enthält keine Geometrie (Flächen)." +msgstr "Die Geometrie enthält keine Faces." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "„%s“ erbt nicht von Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Knoten enthält keine Geometrie." +msgstr "„%s“ enthält keine Geometrie." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Knoten enthält keine Geometrie." +msgstr "„%s“ enthält keine Face-Geometrie." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6239,6 +6287,10 @@ msgid "Grid" msgstr "Gitter" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Raster anzeigen" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Gitter einstellen:" @@ -6294,7 +6346,8 @@ msgstr "Instanz:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Typ:" @@ -6333,9 +6386,8 @@ msgid "Error writing TextFile:" msgstr "Fehler beim Schreiben von Textdatei:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Konnte Kachel nicht finden:" +msgstr "Datei konnte nicht geladen werden von:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6358,9 +6410,8 @@ msgid "Error Importing" msgstr "Fehler beim Importieren" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Neue Textdatei..." +msgstr "Neue Textdatei…" #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6396,6 +6447,11 @@ msgid "Find Next" msgstr "Finde Nächstes" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Finde Vorheriges" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Skripte filtern" @@ -6440,9 +6496,8 @@ msgid "Open..." msgstr "Öffnen..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Skript öffnen" +msgstr "Geschlossenes Skript erneut öffnen" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6498,14 +6553,14 @@ msgid "Toggle Scripts Panel" msgstr "Seitenleiste umschalten" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Überspringen" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Hineinspringen" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Überspringen" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Unterbrechen" @@ -6578,15 +6633,14 @@ msgid "Search Results" msgstr "Suchergebnisse" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Verlauf leeren" +msgstr "Skript-Verlauf leeren" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Verbindungen mit Methode:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Quelle" @@ -6667,6 +6721,11 @@ msgstr "Haltepunkte" msgid "Cut" msgstr "Ausschneiden" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Alles auswählen" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Zeile löschen" @@ -6704,9 +6763,8 @@ msgid "Complete Symbol" msgstr "Symbol vervollständigen" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Auswahl skalieren" +msgstr "Auswahl auswerten" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6725,10 +6783,6 @@ msgid "Auto Indent" msgstr "Automatische Einrückung" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Finde Vorheriges" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "In Dateien suchen..." @@ -7017,9 +7071,8 @@ msgid "Audio Listener" msgstr "Audiosenke" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Filtern aktivieren" +msgstr "Dopplereffekt aktivieren" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7054,6 +7107,11 @@ msgid "Freelook Speed Modifier" msgstr "Freisicht Geschwindigkeitsregler" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Freisicht Geschwindigkeitsregler" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7076,6 +7134,8 @@ msgstr "Nodes am Boden einrasten" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." msgstr "" +"Es wurde kein fester Boden gefunden an dem die Auswahl eingerastet werden " +"könnte." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7088,9 +7148,12 @@ msgstr "" "Alt+RMT: Tiefenauswahl" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Lokalkoordinatenmodus (%s)" +msgstr "Lokalkoordinaten verwenden" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Einrasten aktivieren" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7187,9 +7250,8 @@ msgstr "Zeige Gitter" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Einstellungen" +msgstr "Einstellungen…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7322,6 +7384,11 @@ msgid "Simplification: " msgstr "Vereinfachung: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Wachsen (Pixel): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Wachsen (Pixel): " @@ -7370,6 +7437,10 @@ msgid "(empty)" msgstr "(leer)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Frame verschieben" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animationen:" @@ -7567,14 +7638,12 @@ msgid "Submenu" msgstr "Untermenü" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Element 1" +msgstr "Unterelement 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Element 2" +msgstr "Unterelement 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7686,17 +7755,25 @@ msgid "Enable Priority" msgstr "Priorität aktivieren" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Kacheln filtern" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" +"Dieses TileMap benötigt eine TileSet-Ressource um benutzt werden zu können." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Kachel zeichnen" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" "Umsch+RMT: Linie zeichnen\n" -"Umsch+Strg+RMT: Rechteck einfärben" +"Umsch+Strg+RMT: Rechteck bemalen" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7820,6 +7897,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Kachelnamen anzeigen (Alt-Taste halten)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Eine Textur in der rechten Leiste hinzufügen oder auswählen um die ihr " +"zugeordneten Kacheln zu bearbeiten." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Ausgewählte Textur entfernen? Alle Kacheln die sie nutzen werden entfernt." @@ -7992,16 +8076,108 @@ msgstr "Diese Eigenschaft kann nicht geändert werden." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Keine Versionsverwaltungserweiterungen verfügbar." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Fehler" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Es wurde keine Protokollnachricht angegeben" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Es wurden keine Dateien zum protokollieren vorgemerkt" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Speicherpunkt" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "Versionsverwaltungserweiterung ist nicht initialisiert" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Versionsverwaltungssystem" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Initialisieren" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Speicherauswahlbereich" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Neue Veränderungen beachten" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Veränderungen" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Bearbeitet" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Umbenannt" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Gelöscht" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Dateitypänderung" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Ausgewähltes zum speichern vormerken" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Alles zum speichern vormerken" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Protokollnachricht hinzufügen" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Änderungen als Speicherpunkt sichern" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"Dateiänderungen anzeigen bevor sie nach der aktuellsten Version gespeichert " +"werden" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Kein Dateiunterschied ist aktiv" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Änderungen in Dateiänderung verfolgen" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Nur GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Eingang hinzufügen +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Ausgang hinzufügen +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8017,6 +8193,11 @@ msgid "Boolean" msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Samples" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Eingangsschnittstelle hinzufügen" @@ -8098,9 +8279,8 @@ msgid "Light" msgstr "Licht" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Shader-Node erzeugen" +msgstr "Resultierenden Shader-Code zeigen." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8234,6 +8414,13 @@ msgstr "" "oder falsch ist." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Gibt ein entsprechendes Skalar zurück je nach dem ob der übergebene Wert " +"wahr oder falsch ist." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Gibt den Wahrheitswert des Vergleiches zweier Parameter zurück." @@ -8468,7 +8655,6 @@ msgid "Returns the square root of the parameter." msgstr "Gibt die Quadratwurzel des Parameters zurück." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8476,20 +8662,19 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Weichschrittfunktion ( Skalar(Kante0), Skalar(Kante1), Skalar(x) ).\n" +"Glatte Stufenfunktion ( Skalar(Kante0), Skalar(Kante1), Skalar(x) ).\n" "\n" "Gibt 0.0 zurück falls ‚x‘ kleiner als ‚Kante0‘, gibt 1.0 zurück falls ‚x‘ " "größer ‚Kante1‘. Ansonsten wird ein durch Hermite-Polynome interpolierter " "Wert zwischen 0.0 und 1.0 zurück gegeben." #: 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 "" -"Schrittfunktion ( Skalar(Kante), Skalar(x) ).\n" +"Stufenfunktion ( Skalar(Kante), Skalar(x) ).\n" "\n" "Gibt 0.0 zurück falls ‚x‘ kleiner als ‚Kante‘, ansonsten 1.0." @@ -8660,9 +8845,8 @@ msgid "Linear interpolation between two vectors." msgstr "Lineare Interpolation zwischen zwei Vektoren." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Lineare Interpolation zwischen zwei Vektoren." +msgstr "Lineare Interpolation zwischen zwei Vektoren, benutzt ein Skalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8689,7 +8873,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Gibt den Vektor zurück der in Richtung der Brechung zeigt." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8697,14 +8880,13 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Weiche Stufenfunktion ( Vektor(Kante0), Vektor(Kante1), Vektor(x) ).\n" +"Glatte Stufenfunktion ( Vektor(Kante0), Vektor(Kante1), Vektor(x) ).\n" "\n" "Gibt 0.0 zurück falls ‚x‘ kleiner als ‚Kante0‘, gibt 1.0 zurück falls ‚x‘ " "größer als ‚Kante1‘. Ansonsten wird ein durch Hermite-Polynome " "interpolierter Wert zwischen 0.0 und 1.0 zurückgegeben." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8719,7 +8901,6 @@ msgstr "" "interpolierter Wert zwischen 0.0 und 1.0 zurückgegeben." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8730,7 +8911,6 @@ msgstr "" "Gibt 0.0 zurück falls ‚x‘ kleiner als ‚Kante‘, ansonsten 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8794,6 +8974,11 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Ein selbst-erstellter Ausdruck in der Godot-Shader-Sprache, welcher vor dem " +"resultierten Shader platziert wird. Hier können beliebige " +"Funktionsdefinitionen eingefügt werden die dann in späteren Ausdrücken " +"verwendet werden können. Das gleiche gilt für Varyings, Uniforms und " +"Konstanten." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8946,15 +9131,19 @@ msgid "Resources to export:" msgstr "Zu exportierende Ressourcen:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filter um Nicht-Ressourcendateien zu exportieren (durch Kommata getrennt, z." "B.: *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filter um vom Export auszuschließen (durch Kommata getrennt, z.B.: *.json, *." "txt)" @@ -9187,13 +9376,12 @@ msgid "Unnamed Project" msgstr "Unbenanntes Projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Existierendes Projekt importieren" +msgstr "Fehlendes Projekt" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Fehler: Projekt ist nicht im Dateisystem vorhanden." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9294,13 +9482,12 @@ msgstr "" "Inhalte des Projektordners werden nicht geändert." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"%d Projekte aus der Liste entfernen?\n" -"Inhalte der Projektordner werden nicht geändert." +"Alle fehlenden Projekte aus der Liste entfernen?\n" +"Inhalte des Projektordners werden nicht geändert." #: editor/project_manager.cpp msgid "" @@ -9324,9 +9511,8 @@ msgid "Project Manager" msgstr "Projektverwaltung" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projekt" +msgstr "Projekte" #: editor/project_manager.cpp msgid "Scan" @@ -9558,6 +9744,10 @@ msgid "Settings saved OK." msgstr "Einstellungen gespeichert OK." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Eingabeaktionsereignis verschoben" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Für Funktion überschreiben" @@ -9695,6 +9885,10 @@ msgid "Plugins" msgstr "Erweiterungen" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Voreinstellungen..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Null" @@ -9863,10 +10057,6 @@ msgstr "Zu Großbuchstaben" msgid "Reset" msgstr "Zurücksetzen" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Fehler" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Node umhängen" @@ -9925,6 +10115,10 @@ msgid "Instance Scene(s)" msgstr "Instanz-Szene(n)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Mit verzweigter Szene ersetzen" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Szene hier instantiieren" @@ -9967,8 +10161,20 @@ msgid "Make node as Root" msgstr "Node zur Szenenwurzel machen" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Node(s) wirklich löschen?" +msgid "Delete %d nodes?" +msgstr "%d Nodes löschen?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Das Wurzelnode „%s“ löschen?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Node „%s“ und Unterobjekte löschen?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Node „%s“ löschen?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9991,12 +10197,13 @@ msgstr "" "dieses Nodes wieder in ihren Ausgangszustand zurückgesetzt." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "bearbeitbare Unterobjekte" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Als Platzhalter laden" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Wenn „Editierbare Instanz“ deaktiviert wird, werden alle Eigenschaften " +"dieses Nodes wieder in ihren Ausgangszustand zurückgesetzt." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10043,9 +10250,8 @@ msgid "Remove Node(s)" msgstr "Entferne Node(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Ausgangsschnittstellenname ändern" +msgstr "Nodetyp(en) ändern" #: editor/scene_tree_dock.cpp msgid "" @@ -10072,6 +10278,14 @@ msgid "Clear Inheritance" msgstr "Leere Vererbung" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "bearbeitbare Unterobjekte" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Als Platzhalter laden" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Dokumentation öffnen" @@ -10088,10 +10302,6 @@ msgid "Change Type" msgstr "Typ ändern" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Skript erweitern" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Node unter neues Node hängen" @@ -10168,30 +10378,27 @@ msgid "Node configuration warning:" msgstr "Node-Konfigurationswarnung:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Node hat Verbindungen und Gruppen.\n" -"Klicken um Signalverwaltung aufzurufen." +"Node hat %s Verbindung(en) und %s Gruppe(n).\n" +"Hier klicken um Signalverwaltung aufzurufen." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Node hat Verbindungen.\n" +"Node hat %s Verbindung(en).\n" "Hier klicken zur Signalverwaltung." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Node ist in Gruppe(n).\n" +"Node ist %s Gruppe(n).\n" "Hier klicken zur Gruppenverwaltung." #: editor/scene_tree_editor.cpp @@ -10288,9 +10495,8 @@ msgid "Error loading script from %s" msgstr "Fehler beim Laden des Skripts von %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Überschreiben" +msgstr "Überschreibungen" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10337,23 +10543,18 @@ msgid "Will load an existing script file." msgstr "Dies wird eine bestehende Skriptdatei laden." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Sprache" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Erbt von" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Klassenname" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Vorlage" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Eingebettetes Skript" #: editor/script_create_dialog.cpp @@ -10369,26 +10570,54 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Stacktrace" +msgid "Warning:" +msgstr "Warnung:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Ein oder mehrere Einträge der Liste auswählen um Graph anzuzeigen." +msgid "Error:" +msgstr "Fehler:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "C++-Fehler" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "C++-Fehler:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "C++-Quellcode" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Quelle:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "C++-Quellcode:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Stacktrace" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Fehler" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Unterprozess verbunden" +msgid "Child process connected." +msgstr "Unterprozess verbunden." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Fehlermeldung kopieren" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Haltepunkte auslassen" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Vorherige Instanz untersuchen" @@ -10405,6 +10634,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Netzwerk-Profiler" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10417,6 +10650,10 @@ msgid "Monitors" msgstr "Monitore" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Ein oder mehrere Einträge der Liste auswählen um Graph anzuzeigen." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Auflistung der Grafikspeichernutzung nach Ressource:" @@ -10613,10 +10850,6 @@ msgid "Library" msgstr "Bibliothek" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotheken: " @@ -10625,6 +10858,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Zeichenkette der Länge 1 erwartet (ein Zeichen)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Schrittargument ist null!" @@ -10778,6 +11015,14 @@ msgstr "GridMap-Einstellungen" msgid "Pick Distance:" msgstr "Auswahlradius:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Meshes filtern" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "GridMap zu MeshLibrary hinzufügen um ihre Meshes benutzen zu können." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Der Klassenname kann nicht ein reserviertes Schlüsselwort sein" @@ -10905,28 +11150,28 @@ msgid "Set Variable Type" msgstr "Variablentyp festlegen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Darf nicht mit existierenden eingebauten Typnamen übereinstimmen." +msgstr "Eine existierende eingebaute Funktion überschreiben." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Neues Rechteck erstellen." +msgstr "Eine neue Funktion erstellen." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variablen:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Neues Rechteck erstellen." +msgstr "Eine neue Variable erstellen." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signale:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Neues Polygon erstellen." +msgstr "Ein neues Signal erstellen." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10953,6 +11198,11 @@ msgid "Add Function" msgstr "Funktion hinzufügen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Eingangsschnittstelle entfernen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Variable hinzufügen" @@ -10961,6 +11211,26 @@ msgid "Add Signal" msgstr "Signal hinzufügen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Eingangsschnittstelle hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Ausgangsschnittstelle hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Eingangsschnittstelle entfernen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Ausgangsschnittstelle entfernen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Ausdruck ändern" @@ -11005,10 +11275,20 @@ msgid "Add Preload Node" msgstr "Preload-Node hinzufügen" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Node(s) aus Szenenbaum hinzufügen" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Getter-Eigenschaft hinzufügen" @@ -11033,6 +11313,11 @@ msgid "Connect Nodes" msgstr "Nodes verbinden" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Trenne Graph-Nodes" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Node-Daten verbinden" @@ -11065,6 +11350,28 @@ msgid "Paste VisualScript Nodes" msgstr "VisualScript-Nodes einfügen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Das Function-Node kann nicht kopiert werden." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Funktion umbenennen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Funktion entfernen" @@ -11085,16 +11392,17 @@ msgid "Editing Signal:" msgstr "bearbeite Signal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Basistyp:" +msgid "Make Tool:" +msgstr "Make-Werkzeug:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Mitglieder:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Verfügbare Nodes:" +#, fuzzy +msgid "function_name" +msgstr "Funktion:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11118,6 +11426,16 @@ msgid "Cut Nodes" msgstr "Nodes trennen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funktion umbenennen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Aktualisieren" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Mitglied bearbeiten" @@ -11217,6 +11535,10 @@ msgid "The package must have at least one '.' separator." msgstr "Das Paket muss mindestens einen Punkt-Unterteiler ‚.‘ haben." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Gerät aus Liste auswählen" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Das ADB-Programm wurde nicht in den Editoreinstellungen konfiguriert." @@ -11242,10 +11564,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Es ist kein Android-Projekt zum Kompilieren installiert worden. Es kann im " -"Editormenü installiert werden." +"Es wurde keine Android-Buildvorlage für dieses Projekt installiert. Es kann " +"im Projektmenü installiert werden." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11336,6 +11659,10 @@ msgid "Required icon is not specified in the preset." msgstr "Benötigtes Icon wurde nicht in der Vorlage festgelegt." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Im Browser ausführen" @@ -12022,10 +12349,6 @@ msgstr "" "Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur " "irgendeinem Node zum Anzeigen zugewiesen werden." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Eingang" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Ungültige Quelle für Vorschau." @@ -12054,6 +12377,65 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden." msgid "Constants cannot be modified." msgstr "Konstanten können nicht verändert werden." +#~ msgid "Snap to Grid" +#~ msgstr "Am Gitter einrasten" + +#~ msgid "Add input +" +#~ msgstr "Eingang hinzufügen +" + +#~ msgid "Language" +#~ msgstr "Sprache" + +#~ msgid "Inherits" +#~ msgstr "Erbt von" + +#~ msgid "Base Type:" +#~ msgstr "Basistyp:" + +#~ msgid "Available Nodes:" +#~ msgstr "Verfügbare Nodes:" + +#~ msgid "Input" +#~ msgstr "Eingang" + +#~ msgid "Properties:" +#~ msgstr "Eigenschaften:" + +#~ msgid "Methods:" +#~ msgstr "Methoden:" + +#~ msgid "Theme Properties:" +#~ msgstr "Motiv-Eigenschaften:" + +#~ msgid "Enumerations:" +#~ msgstr "Enums:" + +#~ msgid "Constants:" +#~ msgstr "Konstanten:" + +#~ msgid "Class Description:" +#~ msgstr "Klassenbeschreibung:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Eigenschaften-Beschreibung:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Methoden-Beschreibung:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Dies wird das Android-Projekt für eigene Builds installieren.\n" +#~ "Hinweis: Um es zu benutzen muss es in den jeweiligen " +#~ "Exportvoreinstellungen aktivierten werden." + +#~ msgid "Reverse sorting." +#~ msgstr "Sortierung umkehren." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Node(s) wirklich löschen?" + #~ msgid "No Matches" #~ msgstr "Keine Übereinstimmungen" @@ -12408,9 +12790,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Go to parent folder" #~ msgstr "Gehe zu übergeordnetem Ordner" -#~ msgid "Select device from the list" -#~ msgstr "Gerät aus Liste auswählen" - #~ msgid "Open Scene(s)" #~ msgstr "Szene(n) öffnen" @@ -12472,9 +12851,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgstr "" #~ "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes." -#~ msgid "Warnings:" -#~ msgstr "Warnungen:" - #~ msgid "Font Size:" #~ msgstr "Schriftgröße:" @@ -12519,9 +12895,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Select a split to erase it." #~ msgstr "Teilung zum Löschen auswählen." -#~ msgid "No name provided" -#~ msgstr "Kein Name angegeben" - #~ msgid "Add Node.." #~ msgstr "Node hinzufügen.." @@ -12657,12 +13030,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Warning" #~ msgstr "Warnung" -#~ msgid "Error:" -#~ msgstr "Fehler:" - -#~ msgid "Function:" -#~ msgstr "Funktion:" - #~ msgid "Variable" #~ msgstr "Variable" @@ -12729,9 +13096,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Connect Graph Nodes" #~ msgstr "Verbinde Graph-Nodes" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Trenne Graph-Nodes" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Entferne Shader-Graph-Node" @@ -12741,9 +13105,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Dupliziere Graph-Node(s)" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Entferne Shade-Graph-Node(s)" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Fehler: Zyklische Verbindung" @@ -13191,9 +13552,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Pick New Name and Location For:" #~ msgstr "Wähle neuen Namen und Ort für:" -#~ msgid "No files selected!" -#~ msgstr "Keine Dateien ausgewählt!" - #~ msgid "Info" #~ msgstr "Info" @@ -13592,12 +13950,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Scaling to %s%%." #~ msgstr "Skaliere auf %s%%." -#~ msgid "Up" -#~ msgstr "Hoch" - -#~ msgid "Down" -#~ msgstr "Herunter" - #~ msgid "Bucket" #~ msgstr "Eimer" @@ -13882,9 +14234,6 @@ msgstr "Konstanten können nicht verändert werden." #~ msgid "Group" #~ msgstr "Gruppe" -#~ msgid "Samples" -#~ msgstr "Samples" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Audio-Umwandlungs-Modus: (.wav-Dateien):" diff --git a/editor/translations/de_CH.po b/editor/translations/de_CH.po index ad007f96c5..8498847001 100644 --- a/editor/translations/de_CH.po +++ b/editor/translations/de_CH.po @@ -59,6 +59,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -341,6 +369,7 @@ msgstr "Erstelle %d in neuer Ebene inklusiv Bild?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -472,15 +501,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Node(s) löschen" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -616,7 +639,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -628,6 +651,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Node(s) löschen" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -810,7 +838,8 @@ msgstr "Connections editieren" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -917,7 +946,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -954,7 +984,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1223,7 +1253,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1418,7 +1448,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1472,7 +1504,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1646,6 +1678,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1726,6 +1759,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1876,6 +1910,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1884,48 +1919,28 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Script hinzufügen" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Theme Properties" msgstr "Node erstellen" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Node erstellen" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1934,21 +1949,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Script hinzufügen" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "Script hinzufügen" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1964,11 +1970,6 @@ msgid "Property Descriptions" msgstr "Script hinzufügen" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Script hinzufügen" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1980,11 +1981,6 @@ msgid "Method Descriptions" msgstr "Script hinzufügen" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Script hinzufügen" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2052,8 +2048,8 @@ msgstr "" msgid "Copy Selection" msgstr "Script hinzufügen" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2067,6 +2063,48 @@ msgstr "" msgid "Clear Output" msgstr "Script hinzufügen" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2625,6 +2663,18 @@ msgstr "Projektname:" msgid "Project Settings..." msgstr "Projekteinstellungen" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2831,10 +2881,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Spiele die editierte Szene." @@ -2888,14 +2934,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2914,15 +2956,21 @@ msgstr "Ungültige Bilder löschen" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2988,6 +3036,11 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Keine Oberflächen Quelle spezifiziert." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2998,6 +3051,11 @@ msgstr "" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Script hinzufügen" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Script hinzufügen" @@ -3026,11 +3084,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3129,6 +3182,11 @@ msgstr "" msgid "New Script" msgstr "Script hinzufügen" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Script hinzufügen" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3156,14 +3214,6 @@ msgstr "" msgid "Convert To %s" msgstr "Verbindung zu Node:" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Verzeichnis öffnen" - #: editor/editor_properties.cpp editor/property_editor.cpp #, fuzzy msgid "Selected node is not a Viewport!" @@ -3846,8 +3896,8 @@ msgstr "Datei(en) öffnen" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3977,7 +4027,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4123,6 +4173,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Verzeichnis öffnen" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4306,6 +4363,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Delete Animation?" msgstr "Bild einfügen" @@ -4491,7 +4549,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4669,6 +4726,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4876,6 +4935,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importierte Projekte" @@ -4889,10 +4952,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5173,20 +5232,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "TimeScale-Node" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5281,8 +5348,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5554,6 +5620,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6209,6 +6279,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6264,7 +6338,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6373,6 +6448,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Node erstellen" @@ -6478,11 +6558,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6565,7 +6645,7 @@ msgstr "Script hinzufügen" msgid "Connections to method:" msgstr "Verbindung zu Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6647,6 +6727,11 @@ msgstr "Bild einfügen" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -6709,10 +6794,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -7041,6 +7122,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7074,6 +7159,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7309,6 +7398,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7360,6 +7453,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Bild bewegen/einfügen" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animations-Node" @@ -7688,6 +7786,15 @@ msgid "Enable Priority" msgstr "Node Filter editieren" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Node erstellen" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7834,6 +7941,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Ungültige Bilder löschen" @@ -8010,20 +8122,116 @@ msgstr "Ohne eine Szene kann das nicht funktionieren." msgid "TileSet" msgstr "Datei(en) öffnen" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Node erstellen" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Typ ändern" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Node" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Node(s) löschen" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Typ ändern" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Verbindung zu Node:" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Typ ändern" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" +msgid "Add Output" msgstr "Script hinzufügen" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" -msgstr "" - -#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8036,6 +8244,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Script hinzufügen" @@ -8259,6 +8471,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8910,12 +9127,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9479,6 +9698,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9619,6 +9842,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9788,10 +10015,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9847,6 +10070,10 @@ msgid "Instance Scene(s)" msgstr "Instanziere Szene(n)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9889,8 +10116,22 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Node(s) löschen?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Node(s) löschen" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Node(s) löschen" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9911,11 +10152,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9995,6 +10234,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -10012,11 +10259,6 @@ msgstr "Typ ändern" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Script hinzufügen" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Node erstellen" @@ -10257,25 +10499,18 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "Ungültige Bilder löschen" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Script hinzufügen" #: editor/script_create_dialog.cpp #, fuzzy @@ -10292,27 +10527,60 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Szene kann nicht gespeichert werden." + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Connections editieren" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Connections editieren" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Errors" +msgid "Source:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Child process connected." +msgstr "Verbindung zu Node:" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Copy Error" msgstr "Connections editieren" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Bild einfügen" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10329,6 +10597,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Projekt exportieren" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10341,6 +10614,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10538,10 +10815,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10550,6 +10823,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10707,6 +10984,15 @@ msgstr "Projekteinstellungen" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Node erstellen" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10846,6 +11132,10 @@ msgid "Create a new variable." msgstr "Node erstellen" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Node erstellen" @@ -10875,6 +11165,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Ungültige Bilder löschen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10885,6 +11180,26 @@ msgstr "Script hinzufügen" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Add Input Port" +msgstr "Script hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Script hinzufügen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Ungültige Bilder löschen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Ungültige Bilder löschen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Change Expression" msgstr "Typ ändern" @@ -10928,11 +11243,21 @@ msgid "Add Preload Node" msgstr "Node" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Add Node(s) From Tree" msgstr "Node von Szene" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10962,6 +11287,11 @@ msgstr "Verbindung zu Node:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Verbindung zu Node:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Verbindung zu Node:" @@ -10997,6 +11327,27 @@ msgid "Paste VisualScript Nodes" msgstr "Node erstellen" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Node erstellen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11019,18 +11370,16 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy -msgid "Base Type:" -msgstr "Typ ändern" +msgid "Make Tool:" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy -msgid "Available Nodes:" -msgstr "TimeScale-Node" +msgid "function_name" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11054,6 +11403,14 @@ msgid "Cut Nodes" msgstr "Node erstellen" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Edit Member" msgstr "Node Filter editieren" @@ -11150,6 +11507,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11171,7 +11532,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11249,6 +11611,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11821,10 +12187,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11853,6 +12215,33 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Base Type:" +#~ msgstr "Typ ändern" + +#, fuzzy +#~ msgid "Available Nodes:" +#~ msgstr "TimeScale-Node" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Node erstellen" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Script hinzufügen" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Script hinzufügen" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Script hinzufügen" + +#~ msgid "Delete Node(s)?" +#~ msgstr "Node(s) löschen?" + #~ msgid "Faces contain no area!" #~ msgstr "Flächen enthalten keinen Bereich!" diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot index e27bfdfe87..47ac024f4d 100644 --- a/editor/translations/editor.pot +++ b/editor/translations/editor.pot @@ -51,6 +51,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -315,6 +343,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -440,13 +469,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -579,7 +603,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -591,6 +615,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -767,7 +795,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -868,7 +897,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -905,7 +935,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1168,7 +1198,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1359,7 +1389,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1413,7 +1445,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1578,6 +1610,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1648,6 +1681,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1795,6 +1829,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1803,7 +1838,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1811,38 +1846,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1851,19 +1866,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1878,10 +1885,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1892,10 +1895,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1962,8 +1961,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1976,6 +1975,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2515,6 +2556,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2714,10 +2767,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2768,14 +2817,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2793,15 +2838,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2864,6 +2915,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2873,6 +2928,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2901,11 +2960,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3002,6 +3056,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3028,13 +3086,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3681,8 +3732,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3807,7 +3858,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3942,6 +3993,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4108,6 +4165,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4282,7 +4340,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4450,6 +4507,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4654,6 +4713,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4666,10 +4729,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4932,20 +4991,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5035,8 +5101,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5296,6 +5361,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5925,6 +5994,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5980,7 +6053,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6079,6 +6153,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6180,11 +6259,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6264,7 +6343,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6344,6 +6423,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6401,10 +6485,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6724,6 +6804,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6757,6 +6841,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6983,6 +7071,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7031,6 +7123,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7345,6 +7441,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7475,6 +7579,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7629,16 +7738,105 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7654,6 +7852,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7862,6 +8064,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8505,12 +8712,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9052,6 +9261,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9188,6 +9401,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9351,10 +9568,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9410,6 +9623,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9450,7 +9667,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9472,11 +9701,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9550,6 +9777,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9566,10 +9801,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9796,43 +10027,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9840,7 +10087,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9848,6 +10095,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9864,6 +10115,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9876,6 +10131,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10072,10 +10331,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10084,6 +10339,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10235,6 +10494,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10370,6 +10637,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10398,6 +10669,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10406,6 +10681,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10446,10 +10737,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10474,6 +10775,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10506,6 +10811,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10526,7 +10851,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10534,7 +10859,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10558,6 +10883,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10652,6 +10985,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10673,7 +11010,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10750,6 +11088,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11287,10 +11629,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/el.po b/editor/translations/el.po index 8b5b93ec94..451a24bb00 100644 --- a/editor/translations/el.po +++ b/editor/translations/el.po @@ -4,12 +4,13 @@ # This file is distributed under the same license as the Godot source code. # George Tsiamasiotis <gtsiam@windowslive.com>, 2017-2018, 2019. # Georgios Katsanakis <geo.elgeo@gmail.com>, 2019. +# Overloaded <manoschool@yahoo.gr>, 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: George Tsiamasiotis <gtsiam@windowslive.com>\n" +"PO-Revision-Date: 2019-09-07 13:51+0000\n" +"Last-Translator: Overloaded <manoschool@yahoo.gr>\n" "Language-Team: Greek <https://hosted.weblate.org/projects/godot-engine/godot/" "el/>\n" "Language: el\n" @@ -61,6 +62,35 @@ msgstr "ΆκυÏα οÏίσματα στην κατασκευή του '%s'" msgid "On call to '%s':" msgstr "Στην κλήση στο '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "Μείξη" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "ΕλεÏθεÏο" @@ -325,6 +355,7 @@ msgstr "ΔημιουÏγία %d νÎων κομματιών και εισαγωΠ#: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "ΔημιουÏγία" @@ -468,14 +499,12 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Î Ïοσοχή: ΕπεξεÏγασία εισαγμÎνης κίνησης" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Επιλογή όλων" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Αποεπιλογή Όλων" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"ΕπιλÎξτε Îνα AnimationPlayer από την ιεÏαÏχία της σκηνής για να " +"επεξεÏγαστείτε animations." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -607,7 +636,8 @@ msgid "Scale Ratio:" msgstr "Λόγος μεγÎθυνσης:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Επιλογή κομματιών για αντιγÏαφή:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -619,6 +649,11 @@ msgstr "Επιλογή κομματιών για αντιγÏαφή:" msgid "Copy" msgstr "ΑντιγÏαφή" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Αποεπιλογή Όλων" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Î Ïοσθήκη αποσπάσματος ήχου" @@ -801,7 +836,8 @@ msgstr "ΑδÏνατη η σÏνδεση σήματος" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -904,7 +940,8 @@ msgstr "Αναζήτηση:" msgid "Matches:" msgstr "Αντιστοιχίες:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -945,7 +982,7 @@ msgid "Resource" msgstr "Î ÏŒÏος" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "ΔιαδÏομή" @@ -1117,12 +1154,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 " @@ -1130,10 +1165,10 @@ msgid "" "respective copyright statements and license terms." msgstr "" "Η μηχανή Godot βασίζεται σε μια σειÏά από δωÏεάν και Î±Î½Î¿Î¹Ï‡Ï„Î¿Ï ÎºÏŽÎ´Î¹ÎºÎ± " -"βιβλιοθήκες Ï„Ïίτων ομάδων, όλες συμβατÎÏ‚ με τους ÏŒÏους της άδειας MIT. " -"Ακολουθεί μία εκτενής λίστα με όλα τα σχετικά συστατικά της μηχανής μαζί με " -"όλες τις αντοίστοιχες δηλώσεις Ï€Ïοστασίας πνευματικών δικαιωμάτων και τους " -"ÏŒÏους των αδειών τους." +"βιβλιοθήκες Ï„Ïίτων κατασκευαστών, όλες συμβατÎÏ‚ με τους ÏŒÏους της άδειας " +"MIT. Ακολουθεί μία εκτενής λίστα με όλα τα σχετικά συστατικά της μηχανής " +"μαζί με όλες τις αντοίστοιχες δηλώσεις Ï€Ïοστασίας πνευματικών δικαιωμάτων " +"και τους ÏŒÏους των αδειών τους." #: editor/editor_about.cpp msgid "All Components" @@ -1218,7 +1253,8 @@ msgid "Delete Bus Effect" msgstr "ΔιαγÏαφή εφΠδιαÏλου ήχου" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Δίαυλος ήχου, ΣÏÏσιμο και απόθεση για αναδιάταξη." #: editor/editor_audio_buses.cpp @@ -1410,7 +1446,9 @@ msgid "Add AutoLoad" msgstr "Î Ïοσθήκη AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "ΔιαδÏομή:" @@ -1464,7 +1502,7 @@ msgstr "ΔημιουÏγία φακÎλου" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Όνομα:" @@ -1639,6 +1677,7 @@ msgstr "Κάνε ΤÏÎχων" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "ÎÎο" @@ -1709,6 +1748,7 @@ msgid "New Folder..." msgstr "ÎÎος φάκελος..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Αναναίωση" @@ -1858,6 +1898,7 @@ msgid "Class:" msgstr "Κλάση:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ΚληÏονομεί:" @@ -1866,7 +1907,8 @@ msgid "Inherited by:" msgstr "ΚληÏονομείται από:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "ΣÏντομη πεÏιγÏαφή:" #: editor/editor_help.cpp @@ -1874,38 +1916,18 @@ msgid "Properties" msgstr "Ιδιότητες" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Ιδιότητες:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "ΣυναÏτήσεις" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Μεθόδοι:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Ιδιότητες θÎματος" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Ιδιότητες θÎματος:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Σήματα:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "ΑπαÏιθμήσεις" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "ΑπαÏιθμήσεις:" - -#: editor/editor_help.cpp msgid "enum " msgstr "απαÏίθμηση " @@ -1914,19 +1936,12 @@ msgid "Constants" msgstr "ΣταθεÏÎÏ‚" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "ΣταθεÏÎÏ‚:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "ΠεÏιγÏαφή κλάσης" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "ΠεÏιγÏαφή κλάσης:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Online Tutorial:" #: editor/editor_help.cpp @@ -1944,10 +1959,6 @@ msgid "Property Descriptions" msgstr "ΠεÏιγÏαφÎÏ‚ ιδιοτήτων" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "ΠεÏιγÏαφÎÏ‚ ιδιοτήτων:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1960,10 +1971,6 @@ msgid "Method Descriptions" msgstr "ΠεÏιγÏαφÎÏ‚ μεθόδων" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "ΠεÏιγÏαφÎÏ‚ μεθόδων:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2032,8 +2039,8 @@ msgstr "Έξοδος:" msgid "Copy Selection" msgstr "ΑντιγÏαφή Επιλογής" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2046,10 +2053,51 @@ msgstr "ΕκκαθάÏιση" msgid "Clear Output" msgstr "ΕκκαθάÏιση εξόδου" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Διακοπή" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Εκκινιση" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Κάτω" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Πάνω" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Κόμβος" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "ΠαÏάθυÏο" +msgstr "ÎÎο ΠαÏάθυÏο" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2384,9 +2432,8 @@ msgid "Close Scene" msgstr "Κλείσιμο σκηνής" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Κλείσιμο σκηνής" +msgstr "Άνοιγμα Εκ ÎÎου Κλειστής Σκηνής" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2509,9 +2556,8 @@ msgid "Close Tab" msgstr "Κλείσιμο καÏÏ„Îλας" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Κλείσιμο καÏÏ„Îλας" +msgstr "ΑναίÏεση Κλεισίματος ΚαÏÏ„Îλας" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2648,6 +2694,19 @@ msgstr "ΈÏγο" msgid "Project Settings..." msgstr "Ρυθμίσεις ÎÏγου" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Έκδοση:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2875,10 +2934,6 @@ msgstr "ΠαÏση της σκηνής" msgid "Stop the scene." msgstr "ΔιÎκοψε τη σκηνή." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Διακοπή" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "ΑναπαÏαγωγή επεξεÏγαζόμενης σκηνής." @@ -2929,14 +2984,10 @@ msgid "Inspector" msgstr "ΕπιθεωÏητής" #: editor/editor_node.cpp -msgid "Node" -msgstr "Κόμβος" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Ανάπτυξη κάτω πλαισίου" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Έξοδος" @@ -2956,18 +3007,22 @@ msgstr "ΔιαχείÏιση Î ÏοτÏπων" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Αυτό θα εγκαταστήσει το ÎÏγο Android για Ï€ÏοσαÏμοσμÎνα χτισίματα.\n" -"Σημειώστε πως, για τη χÏήση του, Ï€ÏÎπει να ενεÏγοποιηθεί ανά διαμόÏφωση " -"εξαγωγής." #: editor/editor_node.cpp +#, fuzzy msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "Το Ï€Ïότυπο χτισίματος Android είναι εγκατεστημÎνο και δεν θα " "αντικατασταθεί.\n" @@ -3033,6 +3088,11 @@ msgstr "Άνοιγμα του επόμενου επεξεÏγαστή" msgid "Open the previous Editor" msgstr "Άνοιγμα του Ï€ÏοηγοÏμενου επεξεÏγαστή" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Δεν οÏίστηκε πηγαία επιφάνεια." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "ΔημιουÏγία Ï€Ïοεπισκοπήσεων πλεγμάτων" @@ -3042,6 +3102,11 @@ msgid "Thumbnail..." msgstr "ΜικÏογÏαφία..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Άνοιγμα ΔÎσμης ΕνεÏγειών:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "ΕπεγεÏγασία επÎκτασης" @@ -3070,11 +3135,6 @@ msgstr "Κατάσταση:" msgid "Edit:" msgstr "ΕπεξεÏγασία:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Εκκινιση" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "ΜÎÏ„Ïο:" @@ -3179,6 +3239,10 @@ msgstr "ΕπιλÎξτε Îνα Viewport" msgid "New Script" msgstr "ÎÎα ΔÎσμη ΕνεÏγειών" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "ΕπÎκταση ΔÎσμης ΕνεÏγειών" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "ÎÎο %s" @@ -3205,13 +3269,6 @@ msgstr "Επικόλληση" msgid "Convert To %s" msgstr "ΜετατÏοπή σε %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Άνοιγμα επεξεÏγαστή" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Ο επιλεγμÎνος κόμβος δεν είναι Viewport!" @@ -3290,7 +3347,6 @@ msgid "Import From Node:" msgstr "Εισαγωγή σκηνής από κόμβο:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Εκ νÎου λήψη" @@ -3308,8 +3364,11 @@ msgid "Download" msgstr "Λήψη" #: editor/export_template_manager.cpp +#, fuzzy msgid "Official export templates aren't available for development builds." msgstr "" +"Τα επίσημα Ï€Ïότυπα εξαγωγής δεν είναι διαθÎσιμα για τις εκδόσεις που " +"βÏίσκονται ακόμα σε εξÎλιξη" #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3778,7 +3837,7 @@ msgstr "Κόμβοι σε ομάδα" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Οι άδειες ομάδες θα διαγÏάφονται αυτομάτως." #: editor/groups_editor.cpp #, fuzzy @@ -3884,9 +3943,10 @@ msgstr " ΑÏχεία" msgid "Import As:" msgstr "Εισαγωγή ÏŽÏ‚:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "ΔιαμόÏφωση..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "ΔιαμοÏφώσεις" #: editor/import_dock.cpp msgid "Reimport" @@ -4012,7 +4072,7 @@ msgstr "Όνομα Ï€ÏοσθÎτου:" msgid "Subfolder:" msgstr "Υποφάκελος:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Γλώσσα:" @@ -4153,6 +4213,12 @@ msgstr "Σημείο" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Άνοιγμα επεξεÏγαστή" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Άνοιγμα κόμβου κίνησης" @@ -4327,6 +4393,7 @@ msgid "Change Animation Name:" msgstr "Αλλαγή ονόματος κίνησης:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "ΔιαγÏαφή κίνησης;" @@ -4501,7 +4568,6 @@ msgstr "Όνομα κίνησης:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Σφάλμα!" @@ -4674,6 +4740,8 @@ msgid "Current:" msgstr "ΤÏÎχων:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Î Ïοσθήκη εισόδου" @@ -4785,7 +4853,7 @@ msgstr "Δεν ήταν δυνατή η αποθήκευση θÎματος σε #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Σφάλμα κατά την εγγÏαφή." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4884,6 +4952,10 @@ msgid "All" msgstr "Όλα" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Εκ νÎου εισαγωγή..." @@ -4898,10 +4970,6 @@ msgid "Sort:" msgstr "Ταξινόμηση:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "ΑντιστÏοφή ταξινόμησης." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "ΚατηγοÏία:" @@ -5185,21 +5253,33 @@ msgid "Pan Mode" msgstr "ΛειτουÏγία Μετακίνησης κάμεÏας" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "ΛειτουÏγία εκτÎλεσης:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Εναλλαγή κουμπώματος." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "ΧÏήση κουμπώματος" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "ΕπιλογÎÏ‚ κουμπώματος" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Εναλλαγή κουμπώματος." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "ΚοÏμπωμα στο πλÎγμα" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "ΚοÏμπωμα στο ΠλÎγμα" +msgid "Snapping Options" +msgstr "ΕπιλογÎÏ‚ κουμπώματος" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5288,8 +5368,8 @@ msgid "View" msgstr "ΚάμεÏα" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Εμφάνιση πλÎγματος" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5556,6 +5636,11 @@ msgstr "Εναλλαγή γÏαμμικής εφαπτομÎνης καμπÏλΠmsgid "Hold Shift to edit tangents individually" msgstr "Πατήστε το Shift για να επεξεÏγαστείτε εφαπτομÎνες μεμονωμÎνα" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Δεξί κλικ: ΔιαγÏαφή σημείου" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Î Ïοετοιμασία διεÏεÏνησης GI" @@ -5834,8 +5919,9 @@ msgid "Generation Time (sec):" msgstr "ΧÏόνος παÏαγωγής (sec):" #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Οι όψεις της γεωμετÏίας δεν πεÏιÎχουν καμία πεÏιοχή." #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5843,8 +5929,9 @@ msgid "The geometry doesn't contain any faces." msgstr "Ο κόμβος δεν πεÏιÎχει γεωμετÏία (Επιφάνειες)." #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "Το \"%s\" δεν κληÏονομείται από το Spatial." #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -6200,6 +6287,10 @@ msgid "Grid" msgstr "ΠλÎγμα" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Εμφάνιση πλÎγματος" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Î ÏοσαÏμογή ΠλÎγματος:" @@ -6255,7 +6346,8 @@ msgstr "Στιγμιότυπο:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "ΤÏπος:" @@ -6356,6 +6448,11 @@ msgid "Find Next" msgstr "ΕÏÏεση επόμενου" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "ΈυÏεση Ï€ÏοηγοÏμενου" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "ΦιλτÏάÏισμα δεσμών ενεÏγειών" @@ -6458,14 +6555,14 @@ msgid "Toggle Scripts Panel" msgstr "Εναλλαγή πλαισίου δεσμών ενεÏγειών" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Βήμα πάνω" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Βήμα μÎσα" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Βήμα πάνω" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Διακοπή" @@ -6545,7 +6642,7 @@ msgstr "ΕκκαθάÏιση Ï€Ïόσφατων σκηνών" msgid "Connections to method:" msgstr "ΣÏνδεση σε μÎθοδο:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Πηγή" @@ -6627,6 +6724,11 @@ msgstr "Σημεία Διακοπής" msgid "Cut" msgstr "Αποκοπή" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Επιλογή όλων" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "ΔιαγÏαφή γÏαμμής" @@ -6685,10 +6787,6 @@ msgid "Auto Indent" msgstr "Αυτόματη στοιχειοθÎτηση" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "ΈυÏεση Ï€ÏοηγοÏμενου" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "ΕÏÏεση σε ΑÏχεία..." @@ -7014,6 +7112,11 @@ msgid "Freelook Speed Modifier" msgstr "ΤαχÏτητα ελεÏθεÏου κοιτάγματος" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "ΤαχÏτητα ελεÏθεÏου κοιτάγματος" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7054,6 +7157,10 @@ msgid "Use Local Space" msgstr "ΛειτουÏγία Ï„Î¿Ï€Î¹ÎºÎ¿Ï Ï‡ÏŽÏου (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "ΧÏήση κουμπώματος" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Κάτω όψη" @@ -7281,6 +7388,11 @@ msgid "Simplification: " msgstr "Απλοποίηση: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "ΑÏξηση (Εικονοστοιχεία): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "ΑÏξηση (Εικονοστοιχεία): " @@ -7329,6 +7441,11 @@ msgid "(empty)" msgstr "(άδειο)" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Επικόλληση καÏÎ" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Κινήσεις:" @@ -7645,6 +7762,15 @@ msgid "Enable Priority" msgstr "ΕπεξεÏγασία Î ÏοτεÏαιότητας" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ΦιλτÏάÏισμα αÏχείων..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Βάψιμο πλακιδίου" @@ -7780,6 +7906,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "ΑπενεÏγοποίηση Ονομάτων Πλακιδίων (ΚÏατήστε πατημÎνο το Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "ΑφαίÏεση επιλεγμÎνης υφής; Αυτό θα αφαιÏÎσει όλα τα πλακίδια που την " @@ -7949,16 +8080,119 @@ msgstr "Αυτή η ιδιότητα δεν μποÏεί να αλλάξει." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "Όνομα Î³Î¿Î½Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï…, εάν είναι διαθÎσιμο" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Σφάλμα" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No commit message was provided" +msgstr "Δεν δόθηκε όνομα" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Κοινότητα" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Κεφαλαιοποίηση" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "ΔημιουÏγία νÎου οÏθογωνίου." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Αλλαγή" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Μετονομασία" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "ΔιαγÏαφή" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Αλλαγή" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "ΔιαγÏαφή επιλεγμÎνου" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Αποθήκευση όλων" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "ΣυγχÏονισμός αλλαγών στις δεσμÎÏ‚ ενεÏγειών" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Κατάσταση" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "Δεν επιλÎχθηκαν αÏχεία!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Μόνο GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Î Ïοσθήκη εισόδου +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Î Ïοσθήκη εξόδου +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7974,6 +8208,11 @@ msgid "Boolean" msgstr "Λογική Τιμή" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Î Ïοσθήκη δείγματος" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Î Ïοσθήκη θÏÏας εισόδου" @@ -8188,6 +8427,13 @@ msgstr "" "ΕπιστÏÎφει Îνα συσχετισμÎνο διάνυσμα εάν η λογική τιμή είναι αληθής ή ψευδής." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"ΕπιστÏÎφει Îνα συσχετισμÎνο διάνυσμα εάν η λογική τιμή είναι αληθής ή ψευδής." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "ΕπιστÏÎφει το λογικό αποτÎλεσμα της σÏγκÏισης δÏο παÏαμÎÏ„Ïων." @@ -8900,15 +9146,19 @@ msgid "Resources to export:" msgstr "Î ÏŒÏοι για εξαγωγή:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "ΦίλτÏα για εξαγωγή για αÏχεία που δεν είναι πόÏοι (χωÏισμÎνα με κόμμα Ï€.χ. *." "json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "ΦίλτÏα για την εξαίÏεση αÏχείων από το ÎÏγο (χωÏισμÎνα με κόμμα Ï€.χ. *.json, " "*.txt)" @@ -9147,7 +9397,7 @@ msgstr "Εισαγωγή υπαÏÎºÏ„Î¿Ï ÎÏγου" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Σφάλμα: Το ÎÏγο λείπει από το σÏστημα αÏχείων." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9509,6 +9759,11 @@ msgid "Settings saved OK." msgstr "Οι Ïυθμίσεις αποθηκεÏτικαν εντάξει." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Î Ïοσθήκη συμβάντος εισόδου" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "ΠαÏάκαμψη για δυνατότητα" @@ -9645,6 +9900,10 @@ msgid "Plugins" msgstr "Î Ïόσθετα" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "ΔιαμόÏφωση..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "ΜηδÎν" @@ -9812,10 +10071,6 @@ msgstr "Κάνε Κεφαλαία" msgid "Reset" msgstr "ΕπαναφοÏά" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Σφάλμα" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "ΕπαναπÏοσδιοÏισμός γονÎα κόμβου" @@ -9873,6 +10128,11 @@ msgid "Instance Scene(s)" msgstr "ΔημιουÏγία στιγμιοτÏπυ σκηνών" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Αποθήκευσι ÎºÎ»Î±Î´Î¹Î¿Ï Ï‰Ï‚ σκηνή" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "ΑÏχικοποίηση σκηνής ως παιδί" @@ -9916,8 +10176,23 @@ msgid "Make node as Root" msgstr "Κάνε κόμβο Ïίζα" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "ΔιαγÏαφή κόμβων;" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "ΔιαγÏαφή Κόμβων" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "ΔιαγÏαφή κόμβων γÏαφήματος" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "ΔιαγÏαφή Κόμβων" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9942,12 +10217,13 @@ msgstr "" "του κόμβου στις Ï€ÏοεπιλογÎÏ‚ τους." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "ΕπεξεÏγάσιμα παιδιά" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "ΦόÏτωση ως μÎσο κÏάτησης θÎσης" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Η απενεÏγοποίηση του «editable_instance» θα επαναφÎÏει όλες τις ιδιότητες " +"του κόμβου στις Ï€ÏοεπιλογÎÏ‚ τους." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10025,6 +10301,14 @@ msgid "Clear Inheritance" msgstr "ΕκκαθάÏιση κληÏονομικότητας" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "ΕπεξεÏγάσιμα παιδιά" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "ΦόÏτωση ως μÎσο κÏάτησης θÎσης" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Άνοιγμα ΤεκμηÏίωσης" @@ -10041,10 +10325,6 @@ msgid "Change Type" msgstr "Αλλαγή Ï„Ïπου" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "ΕπÎκταση ΔÎσμης ΕνεÏγειών" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "ΕπαναπÏοσδιοÏισμός ΓονÎα" @@ -10289,23 +10569,18 @@ msgid "Will load an existing script file." msgstr "Θα φοÏτώσει υπαÏκτό αÏχείο δÎσμης ενεÏγειών." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Γλώσσα" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "ΚληÏονομεί" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Όνομα κλάσης" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Î Ïότυπο" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Ενσωμάτωση" #: editor/script_create_dialog.cpp @@ -10321,21 +10596,50 @@ msgid "Bytes:" msgstr "ΨηφιολÎξεις:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Ίχνος Στοίβας" +#, fuzzy +msgid "Warning:" +msgstr "Î Ïοειδοποιήσεις:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "" -"ΕπιλÎξτε Îνα ή πεÏισσότεÏα αντικείμενα από την λίστα για να εμφανιστεί το " -"γÏάφημα." +msgid "Error:" +msgstr "Σφάλμα:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "ΑντιγÏαφή σφάλματος" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Σφάλμα:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Πηγή" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Πηγή" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Πηγή" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Ίχνος Στοίβας" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Σφάλματα" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "Η παιδική διαδικασία συνδÎθηκε" #: editor/script_editor_debugger.cpp @@ -10343,6 +10647,11 @@ msgid "Copy Error" msgstr "ΑντιγÏαφή σφάλματος" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Σημεία Διακοπής" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "ΕπιθεώÏηση του Ï€ÏοηγοÏμενου στιγμιοτÏπου" @@ -10359,6 +10668,11 @@ msgid "Profiler" msgstr "Î ÏόγÏαμμα δημιουÏγίας Ï€Ïοφιλ" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Εξαγωγή Î Ïοφίλ" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Κλειδί" @@ -10371,6 +10685,12 @@ msgid "Monitors" msgstr "ΠαÏακολοÏθηση" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" +"ΕπιλÎξτε Îνα ή πεÏισσότεÏα αντικείμενα από την λίστα για να εμφανιστεί το " +"γÏάφημα." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Λίστα χÏήσης βίντεο-μνήμης ανά πόÏο:" @@ -10578,10 +10898,6 @@ msgid "Library" msgstr "Βιβλιοθήκη" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Κατάσταση" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Βιβλιοθήκες: " @@ -10590,6 +10906,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "Η παÏάμετÏος step είναι μηδÎν!" @@ -10746,6 +11066,15 @@ msgstr "Ρυθμίσεις GridMap" msgid "Pick Distance:" msgstr "Επιλογή απόστασης:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ΦιλτÏάÏισμα μεθόδων" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Το όνομα της κλάσης δεν μποÏεί να είναι λÎξη-κλειδί" @@ -10755,8 +11084,9 @@ msgid "End of inner exception stack trace" msgstr "ΤÎλος ιχνηλάτησης στοίβας εσωτεÏικής εξαίÏεσης" #: modules/recast/navigation_mesh_editor_plugin.cpp +#, fuzzy msgid "Bake NavMesh" -msgstr "" +msgstr "Ψήσιμο NavMesh (πλÎγματος πλοήγησης)" #: modules/recast/navigation_mesh_editor_plugin.cpp msgid "Clear the navigation mesh." @@ -10892,6 +11222,10 @@ msgid "Create a new variable." msgstr "ΔημιουÏγία νÎου οÏθογωνίου." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Σήματα:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "ΔημιουÏγία νÎου πολυγώνου." @@ -10921,6 +11255,11 @@ msgid "Add Function" msgstr "Î Ïοσθήκη συνάÏτησης" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ΑφαίÏεση θÏÏας εισόδου" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Î Ïοσθήκη μεταβλητής" @@ -10929,6 +11268,26 @@ msgid "Add Signal" msgstr "Î Ïοσθήκη σήματος" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Î Ïοσθήκη θÏÏας εισόδου" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Î Ïοσθήκη θÏÏας εξόδου" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "ΑφαίÏεση θÏÏας εισόδου" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "ΑφαίÏεση θÏÏας εξόδου" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Αλλαγή ÎκφÏασης" @@ -10975,10 +11334,20 @@ msgid "Add Preload Node" msgstr "Î ÏοσθÎστε Îναν κόμβο preload" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Î ÏοσθÎστε κόμβο/-ους από δÎντÏο" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Î ÏοσθÎστε ιδιότητα Getter" @@ -11004,6 +11373,11 @@ msgstr "ΣÏνδεση κόμβων" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "ΑποσÏνδεση κόμβων γÏαφήματος" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "ΣÏνδεση κόμβων" @@ -11038,6 +11412,28 @@ msgid "Paste VisualScript Nodes" msgstr "Επικόλληση κόμβων VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "ΑδÏνατη η αντιγÏαφή του κόμβου συνάÏτησης." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Μετονομασία συνάÏτησης" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "ΑφαίÏεση συνάÏτησης" @@ -11058,16 +11454,18 @@ msgid "Editing Signal:" msgstr "ΕπεξεÏγασία σήματος:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "ΤÏπος βάσης:" +#, fuzzy +msgid "Make Tool:" +msgstr "Κάνε τοπικό" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ΜÎλη:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "ΔιαθÎσιμοι κόμβοι:" +#, fuzzy +msgid "function_name" +msgstr "ΣυνάÏτηση:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11092,6 +11490,16 @@ msgstr "Αποκοπή κόμβων" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Μετονομασία συνάÏτησης" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Αναναίωση" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "ΜÎλη" @@ -11167,56 +11575,79 @@ msgstr "" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "" +msgstr "Το όνομα του πακÎτου λείπει." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "" +msgstr "Τα τμήματα του πακÎτου Ï€ÏÎπει να Îχουν μη μηδενικό μήκος." #: platform/android/export/export.cpp +#, fuzzy msgid "The character '%s' is not allowed in Android application package names." msgstr "" +"Ο χαÏακτήÏας '%s' δεν επιτÏÎπεται στα ονόματα των πακÎτων εφαÏμογών Android." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." msgstr "" +"Ένα ψηφίο δεν μποÏεί να είναι ο Ï€Ïώτος χαÏακτήÏας σε Îνα τμήμα πακÎτου." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." msgstr "" +"Ο χαÏακτήÏας '%s' δεν μποÏεί να είναι ο Ï€Ïώτος χαÏακτήÏας σε Îνα τμήμα " +"πακÎτου." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "" +msgstr "Το πακÎτο Ï€ÏÎπει να Îχει τουλάχιστον Îναν '.' διαχωÏιστή." + +#: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "ΕπιλÎξτε συσκευή από την λίστα" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" +"Το εκτελÎσιμο αÏχείο ADB δεν Îχει Ïυθμιστεί στις Ρυθμίσεις ΕπεξεÏγαστή." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "" +msgstr "Το OpenJDK jarsigner δεν Îχει Ïυθμιστεί στις Ρυθμίσεις ΕπεξεÏγαστή." #: platform/android/export/export.cpp +#, fuzzy msgid "Debug keystore not configured in the Editor Settings nor in the preset." msgstr "" +"Το Debug keystore δεν Îχει Ïυθμιστεί στις Ρυθμίσεις ΕπεξεÏγαστή ή στην " +"Ï€ÏοεπιλεγμÎνη ÏÏθμιση." #: platform/android/export/export.cpp +#, fuzzy msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"Η Ï€ÏοσαÏμοσμÎνη κατασκευή απαιτεί μια ÎγκυÏη διαδÏομή για το Android SDK " +"στις Ρυθμίσεις ΕπεξεÏγαστή." #: platform/android/export/export.cpp +#, fuzzy msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" +"Μη ÎγκυÏη διαδÏομή Android SDK για Ï€ÏοσαÏμοσμÎνη κατασκευή στις Ρυθμίσεις " +"ΕπεξεÏγαστή." #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" +"Λείπει το Ï€Ïότυπο χτισίματος Android, παÏακαλοÏμε εγκαταστήστε τα σχετικά " +"Ï€Ïότυπα." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "" +msgstr "Μη ÎγκυÏο δημόσιο κλειδί (public key) για επÎκταση APK." #: platform/android/export/export.cpp #, fuzzy @@ -11238,26 +11669,32 @@ msgid "" msgstr "" #: platform/android/export/export.cpp +#, fuzzy msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Κατασκευή ΈÏγου Android (gradle)" #: platform/android/export/export.cpp +#, fuzzy msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" +"Η κατασκευή του ÎÏγου Android απÎτυχε, ελÎγξτε την Îξοδο για το σφάλμα.\n" +"Εναλλακτικά, επισκεφτείτε τη σελίδα docs.godotengine.org για το εγχειÏίδιο " +"πάνω στο θÎμα της κατασκευής για Android." #: platform/android/export/export.cpp +#, fuzzy msgid "No build apk generated at: " -msgstr "" +msgstr "Δεν παÏάχθηκε κατασκευή apk στο: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "" +msgstr "Το αναγνωÏιστικό λείπει." #: platform/iphone/export/export.cpp msgid "Identifier segments must be of non-zero length." -msgstr "" +msgstr "Τα τμήματα του αναγνωÏÎ¹ÏƒÏ„Î¹ÎºÎ¿Ï Ï€ÏÎπει να Îχουν μη μηδενικό μήκος." #: platform/iphone/export/export.cpp #, fuzzy @@ -11267,19 +11704,26 @@ msgstr "Το όνομα δεν είναι ÎγκυÏο αναγνωÏÎ¹ÏƒÏ„Î¹ÎºÏ #: platform/iphone/export/export.cpp msgid "A digit cannot be the first character in a Identifier segment." msgstr "" +"Ένα ψηφίο δεν μποÏεί να είναι ο Ï€Ïώτος χαÏακτήÏας σε Îνα τμήμα " +"αναγνωÏιστικοÏ." #: platform/iphone/export/export.cpp msgid "" "The character '%s' cannot be the first character in a Identifier segment." msgstr "" +"Ο χαÏακτήÏας '%s' δεν μποÏεί να είναι ο Ï€Ïώτος χαÏακτήÏας σε Îνα τμήμα " +"αναγνωÏιστικοÏ." #: platform/iphone/export/export.cpp msgid "The Identifier must have at least one '.' separator." -msgstr "" +msgstr "Το αναγνωÏιστικό Ï€ÏÎπει να Îχει τουλάχιστον Îναν '.' διαχωÏιστή." #: platform/iphone/export/export.cpp +#, fuzzy msgid "App Store Team ID not specified - cannot configure the project." msgstr "" +"Το ομαδικό αναγνωÏιστικό (Team ID) App Store δεν Îχει καθοÏιστεί - δεν " +"είναι δυνατή η διαμόÏφωση του ÎÏγου." #: platform/iphone/export/export.cpp #, fuzzy @@ -11287,7 +11731,12 @@ msgid "Invalid Identifier:" msgstr "Το όνομα δεν είναι ÎγκυÏο αναγνωÏιστικό:" #: platform/iphone/export/export.cpp +#, fuzzy msgid "Required icon is not specified in the preset." +msgstr "Το απαιτοÏμενο εικονίδιο δεν Îχει καθοÏιστεί στην Ï€Ïοεπιλογή." + +#: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" msgstr "" #: platform/javascript/export/export.cpp @@ -11670,6 +12119,8 @@ msgid "" "Plane shapes don't work well and will be removed in future versions. Please " "don't use them." msgstr "" +"Τα επίπεδα σχήματα δεν λειτουÏγοÏν καλά και θα αφαιÏεθοÏν σε μελλοντικÎÏ‚ " +"εκδόσεις. ΠαÏακαλώ μην τα χÏησιμοποιήσετε." #: scene/3d/cpu_particles.cpp #, fuzzy @@ -11688,14 +12139,20 @@ msgid "Plotting Meshes" msgstr "ΤοποθÎτηση πλεγμάτων" #: scene/3d/gi_probe.cpp +#, fuzzy msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" +"Ται GIProbes δεν υποστηÏίζονται από το Ï€ÏόγÏαμμα οδήγησης οθόνης GLES2.\n" +"ΧÏησιμοποιήστε Îνα BakedLightmap αντ 'αυτοÏ." #: scene/3d/light.cpp +#, fuzzy msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." msgstr "" +"Ένα SpotLight (Ï€ÏοβολÎας) με γωνία ευÏÏτεÏη από 90 μοίÏες δεν μποÏεί να " +"δημιουÏγεί σκιÎÏ‚." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." @@ -11762,7 +12219,7 @@ msgstr "" #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "" +msgstr "Το σώμα αυτό δε θα ληφθεί υπόψιν μÎχÏι να οÏίσετε Îνα πλÎγμα (mesh)." #: scene/3d/soft_body.cpp #, fuzzy @@ -11823,8 +12280,9 @@ msgid "Animation not found: '%s'" msgstr "ΕÏγαλεία κινήσεων" #: scene/animation/animation_tree.cpp +#, fuzzy msgid "In node '%s', invalid animation: '%s'." -msgstr "" +msgstr "Στον κόμβο '%s', μη ÎγκυÏο animation: '%s'." #: scene/animation/animation_tree.cpp #, fuzzy @@ -11859,14 +12317,15 @@ msgstr "Το δÎντÏο κίνησης δεν είναι ÎγκυÏο." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." msgstr "" +"Αυτός ο κόμβος Îχει καταÏγηθεί. ΧÏησιμοποιήστε το AnimationTree αντ 'αυτοÏ." #: scene/gui/color_picker.cpp msgid "Pick a color from the screen." -msgstr "" +msgstr "ΔιαλÎξτε Îνα χÏώμα από την οθόνη." #: scene/gui/color_picker.cpp msgid "HSV" -msgstr "" +msgstr "HSV" #: scene/gui/color_picker.cpp #, fuzzy @@ -11958,10 +12417,6 @@ msgstr "" "μÎγεθος. Αλλιώς, κάντε το Îνα RenderTarget και οÏίστε το internal texture σε " "Îναν κόμβο για απεικόνιση." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Είσοδος" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11991,7 +12446,66 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "" +msgstr "Οι σταθεÏÎÏ‚ δεν μποÏοÏν να Ï„ÏοποποιηθοÏν." + +#~ msgid "Snap to Grid" +#~ msgstr "ΚοÏμπωμα στο ΠλÎγμα" + +#~ msgid "Add input +" +#~ msgstr "Î Ïοσθήκη εισόδου +" + +#~ msgid "Language" +#~ msgstr "Γλώσσα" + +#~ msgid "Inherits" +#~ msgstr "ΚληÏονομεί" + +#~ msgid "Base Type:" +#~ msgstr "ΤÏπος βάσης:" + +#~ msgid "Available Nodes:" +#~ msgstr "ΔιαθÎσιμοι κόμβοι:" + +#~ msgid "Input" +#~ msgstr "Είσοδος" + +#~ msgid "Properties:" +#~ msgstr "Ιδιότητες:" + +#~ msgid "Methods:" +#~ msgstr "Μεθόδοι:" + +#~ msgid "Theme Properties:" +#~ msgstr "Ιδιότητες θÎματος:" + +#~ msgid "Enumerations:" +#~ msgstr "ΑπαÏιθμήσεις:" + +#~ msgid "Constants:" +#~ msgstr "ΣταθεÏÎÏ‚:" + +#~ msgid "Class Description:" +#~ msgstr "ΠεÏιγÏαφή κλάσης:" + +#~ msgid "Property Descriptions:" +#~ msgstr "ΠεÏιγÏαφÎÏ‚ ιδιοτήτων:" + +#~ msgid "Method Descriptions:" +#~ msgstr "ΠεÏιγÏαφÎÏ‚ μεθόδων:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Αυτό θα εγκαταστήσει το ÎÏγο Android για Ï€ÏοσαÏμοσμÎνα χτισίματα.\n" +#~ "Σημειώστε πως, για τη χÏήση του, Ï€ÏÎπει να ενεÏγοποιηθεί ανά διαμόÏφωση " +#~ "εξαγωγής." + +#~ msgid "Reverse sorting." +#~ msgstr "ΑντιστÏοφή ταξινόμησης." + +#~ msgid "Delete Node(s)?" +#~ msgstr "ΔιαγÏαφή κόμβων;" #~ msgid "No Matches" #~ msgstr "Δεν υπάÏχουν αντιστοιχίες" @@ -12349,9 +12863,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "Πήγαινε στον γονικό φάκελο" -#~ msgid "Select device from the list" -#~ msgstr "ΕπιλÎξτε συσκευή από την λίστα" - #~ msgid "Open Scene(s)" #~ msgstr "Άνοιγμα σκηνής" @@ -12415,9 +12926,6 @@ msgstr "" #~ "ΔημιουÏγία στιγμιοτÏπων των επιλεγμÎνων σκηνών ως παιδιά του επιλεγμÎνου " #~ "κόμβου." -#~ msgid "Warnings:" -#~ msgstr "Î Ïοειδοποιήσεις:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "ΜÎγεθος πηγαίας γÏαμματοσειÏάς:" @@ -12460,9 +12968,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "ΕπιλÎξτε Îνα αντικείμενο ÏÏθμισης Ï€Ïώτα!" -#~ msgid "No name provided" -#~ msgstr "Δεν δόθηκε όνομα" - #~ msgid "Add Node.." #~ msgstr "Î Ïοσθήκη κόμβου.." @@ -12601,12 +13106,6 @@ msgstr "" #~ msgid "Warning" #~ msgstr "Î Ïοειδοποίηση" -#~ msgid "Error:" -#~ msgstr "Σφάλμα:" - -#~ msgid "Function:" -#~ msgstr "ΣυνάÏτηση:" - #~ msgid "Variable" #~ msgstr "Μεταβλητή" @@ -12670,9 +13169,6 @@ msgstr "" #~ msgid "Connect Graph Nodes" #~ msgstr "ΣÏνδεση κόμβων γÏαφήματος" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "ΑποσÏνδεση κόμβων γÏαφήματος" - #~ msgid "Remove Shader Graph Node" #~ msgstr "ΑφαίÏεση κόμβου γÏαφήματος" @@ -12682,9 +13178,6 @@ msgstr "" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Διπλασιασμός κόμβων γÏαφήματος" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "ΔιαγÏαφή κόμβων γÏαφήματος" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Σφάλμα: Κυκλικός σÏνδεσμος" @@ -13124,9 +13617,6 @@ msgstr "" #~ msgid "Pick New Name and Location For:" #~ msgstr "ΕπιλÎξτε νÎο όνομα και θÎση για:" -#~ msgid "No files selected!" -#~ msgstr "Δεν επιλÎχθηκαν αÏχεία!" - #~ msgid "Info" #~ msgstr "ΠληÏοφοÏίες" @@ -13500,9 +13990,6 @@ msgstr "" #~ msgid "ERROR: Couldn't load sample!" #~ msgstr "ΣΦΑΛΜΑ: Δεν ήταν δυνατή η φόÏτωση δείγματος!" -#~ msgid "Add Sample" -#~ msgstr "Î Ïοσθήκη δείγματος" - #~ msgid "Rename Sample" #~ msgstr "Μετονομασία δείγματος" @@ -13521,12 +14008,6 @@ msgstr "" #~ msgid "Scaling to %s%%." #~ msgstr "Κλιμάκωση to %s%%." -#~ msgid "Up" -#~ msgstr "Πάνω" - -#~ msgid "Down" -#~ msgstr "Κάτω" - #~ msgid "Bucket" #~ msgstr "Κουβάς" diff --git a/editor/translations/eo.po b/editor/translations/eo.po index 7434ca1246..99654bd571 100644 --- a/editor/translations/eo.po +++ b/editor/translations/eo.po @@ -5,10 +5,11 @@ # Scott Starkey <yekrats@gmail.com>, 2019. # AlexHoratio <yukithetupper@gmail.com>, 2019. # Teashrock <kajitsu22@gmail.com>, 2019. +# Brandon Dyer <brandondyer64@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2019-08-29 13:34+0000\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" "Last-Translator: Teashrock <kajitsu22@gmail.com>\n" "Language-Team: Esperanto <https://hosted.weblate.org/projects/godot-engine/" "godot/eo/>\n" @@ -57,9 +58,37 @@ msgstr "Malvalidaj argumentoj por konstrui '%s'" msgid "On call to '%s':" msgstr "En voko al '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Libera" +msgstr "Senkosta" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -326,6 +355,7 @@ msgstr "Fari %d NOVAJN vojetojn kaj enmeti Ålosilojn?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Krei" @@ -465,14 +495,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Averto: Redaktanti importis animadon" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Elektaro ĉiuj" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Elektaro nur" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -505,7 +530,7 @@ msgstr "FPS" #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "Editori" +msgstr "Editi" #: editor/animation_track_editor.cpp msgid "Animation properties." @@ -604,7 +629,8 @@ msgid "Scale Ratio:" msgstr "Skali RejÅo:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Elekti vojetojn por duplikati:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -616,6 +642,11 @@ msgstr "Elekti vojetojn por duplikati:" msgid "Copy" msgstr "Duplikati" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Elektaro nur" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Adici AÅdio-Vojeton Eltondaĵon" @@ -726,15 +757,15 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Connect to Node:" -msgstr "Konektu al nodo:" +msgstr "Konekti al nodo:" #: editor/connections_dialog.cpp msgid "Connect to Script:" -msgstr "Konektu al skripto:" +msgstr "Konekti al skripto:" #: editor/connections_dialog.cpp msgid "From Signal:" -msgstr "" +msgstr "De Signalo:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." @@ -744,7 +775,7 @@ msgstr "La sceno ne enhavas ajnan skriptojn." #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "Aldonu" +msgstr "Aldoni" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/editor_feature_profile.cpp editor/groups_editor.cpp @@ -755,11 +786,11 @@ msgstr "Aldonu" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "Forigu" +msgstr "Forigi" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "Aldonu alvoko argumento:" +msgstr "Aldoni alvoko argumento:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" @@ -777,6 +808,8 @@ msgstr "Diferita" msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." msgstr "" +"Prokrastas la signalon, memoras Äin en atendovico kaj nur pafas Äin je " +"senokupa tempo." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -797,16 +830,17 @@ msgstr "Ne povas konekti signalo" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "FermiÄu" +msgstr "Fermi" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "Konektu" +msgstr "Konekti" #: editor/connections_dialog.cpp msgid "Signal:" @@ -814,24 +848,24 @@ msgstr "Signalo:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "Konektu '%s' al '%s'" +msgstr "Konekti '%s' al '%s'" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "Malkonektu '%s' de '%s'" +msgstr "Malkonekti '%s' de '%s'" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "Malkonektu ĉiuj de signalo: '%s'" +msgstr "Malkonekti ĉiuj de signalo: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "" +msgstr "Konekti..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "Malkonektu" +msgstr "Malkonekti" #: editor/connections_dialog.cpp msgid "Connect a Signal to a Method" @@ -839,7 +873,7 @@ msgstr "Konektu la signalo al metodo" #: editor/connections_dialog.cpp msgid "Edit Connection:" -msgstr "" +msgstr "Redakti Konekton:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" @@ -855,11 +889,11 @@ msgstr "" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "Malkonektu ĉiuj" +msgstr "Malkonektigi ĉiun" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "Redaktu..." +msgstr "Redakti..." #: editor/connections_dialog.cpp msgid "Go To Method" @@ -898,7 +932,8 @@ msgstr "Serĉo:" msgid "Matches:" msgstr "Matĉoj:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -935,9 +970,9 @@ msgid "Resource" msgstr "Rimedo" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" -msgstr "Pado" +msgstr "Vojo" #: editor/dependency_editor.cpp msgid "Dependencies:" @@ -1143,7 +1178,7 @@ msgstr "" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Sukcesis!" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1198,7 +1233,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1389,9 +1424,11 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" -msgstr "" +msgstr "Vojo:" #: editor/editor_autoload_settings.cpp msgid "Node Name:" @@ -1400,23 +1437,25 @@ msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp #: editor/editor_profiler.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "" +msgstr "Nomo" #: editor/editor_autoload_settings.cpp msgid "Singleton" msgstr "" #: editor/editor_data.cpp +#, fuzzy msgid "Updating Scene" -msgstr "" +msgstr "Aktualas scenon" #: editor/editor_data.cpp msgid "Storing local changes..." msgstr "" #: editor/editor_data.cpp +#, fuzzy msgid "Updating scene..." -msgstr "" +msgstr "Aktualas scenon..." #: editor/editor_data.cpp editor/editor_properties.cpp msgid "[empty]" @@ -1438,19 +1477,19 @@ msgstr "" #: editor/filesystem_dock.cpp editor/project_manager.cpp #: scene/gui/file_dialog.cpp msgid "Create Folder" -msgstr "" +msgstr "Krei dosierujon" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" -msgstr "" +msgstr "Nomo:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "" +msgstr "Ne povis krei dosierujon." #: editor/editor_dir_dialog.cpp msgid "Choose" @@ -1492,33 +1531,37 @@ msgstr "" #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." -msgstr "" +msgstr "Propra sencimiga Åablonon ne trovitis." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." -msgstr "" +msgstr "Propra eldona Åablono ne trovitis." #: editor/editor_export.cpp platform/javascript/export/export.cpp +#, fuzzy msgid "Template file not found:" -msgstr "" +msgstr "Åœablonan dosieron ne trovitis:" #: editor/editor_export.cpp +#, fuzzy msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." msgstr "" +"Sur 32-bita eksportoj la enigita PCK ne eblos esti pli granda ol 4 GiB." #: editor/editor_feature_profile.cpp msgid "3D Editor" -msgstr "" +msgstr "3D redaktilo" #: editor/editor_feature_profile.cpp msgid "Script Editor" -msgstr "" +msgstr "Skriptredaktilo" #: editor/editor_feature_profile.cpp +#, fuzzy msgid "Asset Library" -msgstr "" +msgstr "Biblioteko de aktivoj" #: editor/editor_feature_profile.cpp msgid "Scene Tree Editing" @@ -1526,7 +1569,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "Import Dock" -msgstr "" +msgstr "Enporti dokon" #: editor/editor_feature_profile.cpp msgid "Node Dock" @@ -1534,7 +1577,7 @@ msgstr "" #: editor/editor_feature_profile.cpp msgid "FileSystem and Import Docks" -msgstr "" +msgstr "Dosiersistema kaj enporta dokoj" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" @@ -1581,8 +1624,9 @@ msgid "Enabled Classes:" msgstr "" #: editor/editor_feature_profile.cpp +#, fuzzy msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "Dosierformo de la '%s' estas malvalida, enporto ĉesiÄis." #: editor/editor_feature_profile.cpp msgid "" @@ -1603,22 +1647,24 @@ msgid "Current Profile:" msgstr "" #: editor/editor_feature_profile.cpp +#, fuzzy msgid "Make Current" -msgstr "" +msgstr "Nuntempigi" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" -msgstr "" +msgstr "Nova" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp msgid "Import" -msgstr "" +msgstr "Enporti" #: editor/editor_feature_profile.cpp editor/project_export.cpp msgid "Export" -msgstr "" +msgstr "Eksporti" #: editor/editor_feature_profile.cpp msgid "Available Profiles:" @@ -1650,36 +1696,37 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "" +msgstr "Elekti aktualan dosierujon" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" -msgstr "" +msgstr "Dosiero ekzistas, superskribi?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" -msgstr "" +msgstr "Elekti ĉi tiun dosierujon" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Copy Path" -msgstr "" +msgstr "Kopii vojo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "Open in File Manager" -msgstr "" +msgstr "Malfermi en dosiermastrumilo" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp msgid "Show in File Manager" -msgstr "" +msgstr "Montri en dosiermastrumilo" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "New Folder..." -msgstr "" +msgstr "Nova dosierujo..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" -msgstr "" +msgstr "Aktualigi" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Recognized" @@ -1687,34 +1734,34 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "All Files (*)" -msgstr "" +msgstr "Ĉiuj dosierojn (*)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Malfermi dosieron" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Malfermi dosiero(j)n" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Malfermi dosierujon" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Malfermi dosieron aÅ dosierujon" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/editor_properties.cpp editor/inspector_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "Konservi" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Konservi dosieron" #: editor/editor_file_dialog.cpp msgid "Go Back" @@ -1788,7 +1835,7 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Dosierujoj kaj dosieroj:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp @@ -1827,6 +1874,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1835,46 +1883,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Priskribo:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1883,19 +1912,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1910,33 +1931,31 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp +#, fuzzy msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Tie aktuale ne estas priskribon por ĉi tiun eco. Bonvolu helpi nin per " +"[color=$color][url=$url]kontribui oni[/url][/color]!" #: editor/editor_help.cpp msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp +#, fuzzy msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" +"Tie aktuale ne estas priskribon por ĉi tiun metodo. Bonvolu helpi nin per " +"[color=$color][url=$url]kontribui oni[/url][/color]!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp msgid "Search Help" -msgstr "" +msgstr "Serĉi helpon" #: editor/editor_help_search.cpp msgid "Display All" @@ -1994,8 +2013,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2008,6 +2027,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2124,8 +2185,9 @@ msgid "Error trying to save layout!" msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "Default editor layout overridden." -msgstr "" +msgstr "Automatan aranÄon de editilo transpasis." #: editor/editor_node.cpp msgid "Layout name not found!" @@ -2191,23 +2253,23 @@ msgstr "" #: editor/editor_node.cpp msgid "Quick Open..." -msgstr "" +msgstr "Rapide malfermi..." #: editor/editor_node.cpp msgid "Quick Open Scene..." -msgstr "" +msgstr "Rapide malfermi scenon..." #: editor/editor_node.cpp msgid "Quick Open Script..." -msgstr "" +msgstr "Rapide malfermi skripton..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "" +msgstr "Konservi kaj fermi" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "" +msgstr "Konservi ÅanÄojn al '%s' antaÅ fermo?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." @@ -2215,79 +2277,84 @@ msgstr "" #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "" +msgstr "Radika nodo estas necesita por konservi la scenon." #: editor/editor_node.cpp msgid "Save Scene As..." -msgstr "" +msgstr "Konservi sceno kiel..." #: editor/editor_node.cpp msgid "No" -msgstr "" +msgstr "Ne" #: editor/editor_node.cpp msgid "Yes" -msgstr "" +msgstr "Jes" #: editor/editor_node.cpp +#, fuzzy msgid "This scene has never been saved. Save before running?" -msgstr "" +msgstr "Ĉi tiu sceno konservis neniam. Konservi antaÅ ruli?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp +#, fuzzy msgid "This operation can't be done without a scene." -msgstr "" +msgstr "Ĉi tiu funkciado ne povas fari sen sceno." #: editor/editor_node.cpp +#, fuzzy msgid "Export Mesh Library" -msgstr "" +msgstr "Eksporti maÅajn bibliotekon" #: editor/editor_node.cpp +#, fuzzy msgid "This operation can't be done without a root node." -msgstr "" +msgstr "Ĉi tiu funkciado ne povas fari sen radika nodo." #: editor/editor_node.cpp +#, fuzzy msgid "Export Tile Set" -msgstr "" +msgstr "Eksporti kahelaron" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "" +msgstr "Ĉi tiun operacion ne ebla fari sen elektita nodo." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "" +msgstr "Nuna sceno ne estas konservita. Malfermi ĉuikaze?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "" +msgstr "Ne povas reÅarÄi scenon, kiu konservis neniam." #: editor/editor_node.cpp msgid "Revert" -msgstr "" +msgstr "Malfari" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "" +msgstr "Tiun ĉi agon ne povos malfari. Certe daÅrigi?" #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "" +msgstr "Rapida Ruli scenon..." #: editor/editor_node.cpp msgid "Quit" -msgstr "" +msgstr "Foriri" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "" +msgstr "Eliri la editilo?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "" +msgstr "Malfermi projekton mastrumilon?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "" +msgstr "Konservi kaj foriri" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" @@ -2309,11 +2376,11 @@ msgstr "" #: editor/editor_node.cpp msgid "Close Scene" -msgstr "" +msgstr "Fermi scenon" #: editor/editor_node.cpp msgid "Reopen Closed Scene" -msgstr "" +msgstr "Remalfermi ferman scenon" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2399,7 +2466,7 @@ msgstr "" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp msgid "Show in FileSystem" -msgstr "" +msgstr "Montri en dosiersistemo" #: editor/editor_node.cpp msgid "Play This Scene" @@ -2410,8 +2477,9 @@ msgid "Close Tab" msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "Undo Close Tab" -msgstr "" +msgstr "Malfari fermi langeto" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2488,35 +2556,36 @@ msgstr "" #: editor/editor_node.cpp msgid "New Scene" -msgstr "" +msgstr "Nova sceno" #: editor/editor_node.cpp msgid "New Inherited Scene..." -msgstr "" +msgstr "Nova heredita sceno..." #: editor/editor_node.cpp msgid "Open Scene..." -msgstr "" +msgstr "Malfermi scenon..." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "" +msgstr "Malfermi lastaj" #: editor/editor_node.cpp msgid "Save Scene" -msgstr "" +msgstr "Konservi scenon" #: editor/editor_node.cpp msgid "Save All Scenes" -msgstr "" +msgstr "Konservi ĉiujn scenojn" #: editor/editor_node.cpp +#, fuzzy msgid "Convert To..." -msgstr "" +msgstr "Konverti al..." #: editor/editor_node.cpp msgid "MeshLibrary..." -msgstr "" +msgstr "MaÅo biblioteko..." #: editor/editor_node.cpp msgid "TileSet..." @@ -2525,72 +2594,90 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Undo" -msgstr "" +msgstr "Malfari" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "" +msgstr "Refari" #: editor/editor_node.cpp msgid "Revert Scene" -msgstr "" +msgstr "Malfari scenon" #: editor/editor_node.cpp +#, fuzzy msgid "Miscellaneous project or scene-wide tools." -msgstr "" +msgstr "Diversa projekto aÅ sceno-abundaj iloj." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Project" -msgstr "" +msgstr "Projekto" #: editor/editor_node.cpp msgid "Project Settings..." -msgstr "" +msgstr "Projekta agordoj..." -#: editor/editor_node.cpp +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versikontrolo" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp #, fuzzy +msgid "Set Up Version Control" +msgstr "Altlevi versitenan sistemon" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Finigi versitenan sistemon" + +#: editor/editor_node.cpp msgid "Export..." -msgstr "Redaktu..." +msgstr "Eksporti..." #: editor/editor_node.cpp msgid "Install Android Build Template..." -msgstr "" +msgstr "Instali Androidan muntadan Åablonon..." #: editor/editor_node.cpp msgid "Open Project Data Folder" -msgstr "" +msgstr "Malfermi projektan datuman dosierujon" #: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp msgid "Tools" -msgstr "" +msgstr "Iloj" #: editor/editor_node.cpp +#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "" +msgstr "Eksplorilo da orfaj risurcoj..." #: editor/editor_node.cpp msgid "Quit to Project List" -msgstr "" +msgstr "Foriri al projekta listo" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp msgid "Debug" -msgstr "" +msgstr "Sencimigi" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "" +msgstr "Malfaldi kun defora sencimigo" #: editor/editor_node.cpp msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" +"Kiam eksportas aÅ malfaldas, la rezulta plenumebla provos konekti al la IP " +"de ĉi tiu komputilo por estos sencimigita." #: editor/editor_node.cpp +#, fuzzy msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Malgranda malfaldo kun reta dosiersistemo" #: editor/editor_node.cpp msgid "" @@ -2601,30 +2688,39 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" +"Kiam ĉi tiun agordon estas Åaltita, eksporti aÅ malfaldi produktos minimuman " +"plenumeblan dosieron.\n" +"La dosiersistemon disponigas el la projekto fare de editilo per la reto.\n" +"En Android, malfaldo uzantos la USB-kablon por pli rapida rendimento. Ĉi tui " +"agordo rapidigas testadon por ludoj kun larÄa areo." #: editor/editor_node.cpp msgid "Visible Collision Shapes" -msgstr "" +msgstr "Videblaj koliziaj formoj" #: editor/editor_node.cpp msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" +"Koliziaj formoj kaj radĵetaj nodoj (por 2D kaj 3D) estos videblaj en la " +"rulas ludo, se ĉi tiu agordo estas Åaltita." #: editor/editor_node.cpp msgid "Visible Navigation" -msgstr "" +msgstr "Videbla navigacio" #: editor/editor_node.cpp msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" +"Navigaciaj maÅoj kaj poligonoj estos videblaj en la rulas ludo, se ĉi tiu " +"agordo estas Åaltita." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "" +msgstr "Sinkronigi scenan ÅanÄojn" #: editor/editor_node.cpp msgid "" @@ -2633,10 +2729,13 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Kiam tuin ĉi agordo estas Åaltita, iuj ÅanÄoj ke faris al la scenon en la " +"editilo replikos en la rulas ludo.\n" +"Kiam uzantis malproksime en aparato, estas pli efika kun reta dosiersistemo." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "" +msgstr "Sinkronigi skriptajn ÅanÄojn" #: editor/editor_node.cpp msgid "" @@ -2645,6 +2744,9 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Kiam tuin ĉi agordo estas Åaltita, iun skripton ke konservita, estos " +"reÅarÄita en la rulas ludo.\n" +"Kiam uzantis malproksime en aparato, estas pli efika kun reta dosiersistemo." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" @@ -2652,15 +2754,15 @@ msgstr "" #: editor/editor_node.cpp msgid "Editor Settings..." -msgstr "" +msgstr "Editila agordoj..." #: editor/editor_node.cpp msgid "Editor Layout" -msgstr "" +msgstr "AranÄon de editilo" #: editor/editor_node.cpp msgid "Take Screenshot" -msgstr "" +msgstr "Ekranfoti" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." @@ -2668,7 +2770,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Toggle Fullscreen" -msgstr "" +msgstr "Baskuli plenekranon" #: editor/editor_node.cpp msgid "Toggle System Console" @@ -2676,27 +2778,27 @@ msgstr "" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "" +msgstr "Malfermi dosierujon de editilan datumoj/agordoj" #: editor/editor_node.cpp msgid "Open Editor Data Folder" -msgstr "" +msgstr "Malfermi dosierujon de editila datumoj" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "" +msgstr "Malfermi dosierujon de editila agordoj" #: editor/editor_node.cpp msgid "Manage Editor Features..." -msgstr "" +msgstr "Mastrumi editilan eblecoj..." #: editor/editor_node.cpp msgid "Manage Export Templates..." -msgstr "" +msgstr "Mastrumi eksportaj Åablonoj..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" -msgstr "" +msgstr "Helpo" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -2705,12 +2807,13 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp editor/rename_dialog.cpp msgid "Search" -msgstr "" +msgstr "Serĉo" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp +#, fuzzy msgid "Online Docs" -msgstr "" +msgstr "Enreta dokoj" #: editor/editor_node.cpp msgid "Q&A" @@ -2748,10 +2851,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2796,21 +2895,17 @@ msgstr "" #: editor/editor_node.cpp msgid "FileSystem" -msgstr "" +msgstr "Dosiersistemo" #: editor/editor_node.cpp msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2828,15 +2923,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2861,7 +2962,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "" +msgstr "Malfermi & ruli skripto" #: editor/editor_node.cpp msgid "New Inherited" @@ -2899,6 +3000,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2908,6 +3013,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Konektu al skripto:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2936,11 +3046,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3037,6 +3142,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3063,13 +3172,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3107,7 +3209,7 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "" +msgstr "Skribu vian logikon en la _run() metodo." #: editor/editor_run_script.cpp msgid "There is an edited scene already." @@ -3123,19 +3225,20 @@ msgstr "" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "" +msgstr "Ne povis ruli skripto:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "" +msgstr "Ĉu vi forgesis la '_run' metodo?" #: editor/editor_sub_scene.cpp +#, fuzzy msgid "Select Node(s) to Import" -msgstr "" +msgstr "Selektu nodo(j)n por enporti" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Foliumi" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -3143,11 +3246,11 @@ msgstr "" #: editor/editor_sub_scene.cpp msgid "Import From Node:" -msgstr "" +msgstr "Enporti el nodo:" #: editor/export_template_manager.cpp msgid "Redownload" -msgstr "" +msgstr "ReelÅuti" #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3160,7 +3263,7 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download" -msgstr "" +msgstr "ElÅuti" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." @@ -3402,7 +3505,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" -msgstr "" +msgstr "Nova heredita sceno" #: editor/filesystem_dock.cpp msgid "Open Scenes" @@ -3442,7 +3545,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "New Scene..." -msgstr "" +msgstr "Nova sceno..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3467,7 +3570,7 @@ msgstr "" #: editor/project_manager.cpp editor/rename_dialog.cpp #: editor/scene_tree_dock.cpp msgid "Rename" -msgstr "" +msgstr "Renomi" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3479,7 +3582,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "" +msgstr "Reesplori dosiersistemo" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -3487,7 +3590,7 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Search files" -msgstr "" +msgstr "Serĉi dosieroj" #: editor/filesystem_dock.cpp msgid "" @@ -3505,173 +3608,176 @@ msgstr "" #: editor/filesystem_dock.cpp msgid "Overwrite" -msgstr "" +msgstr "Superskribi" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Krei" +msgstr "Krei scenon" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" -msgstr "" +msgstr "Krei skripton" #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp msgid "Find in Files" -msgstr "" +msgstr "Trovi en dosierojn" #: editor/find_in_files.cpp msgid "Find:" -msgstr "" +msgstr "Trovi:" #: editor/find_in_files.cpp msgid "Folder:" -msgstr "" +msgstr "Dosierujo:" #: editor/find_in_files.cpp msgid "Filters:" -msgstr "" +msgstr "Filtriloj:" #: editor/find_in_files.cpp msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" +"Anigu la dosierojn kun la jenajn sufiksojn. Aldonu aÅ viÅi ilin en Projekto " +"agordoj." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp msgid "Find..." -msgstr "" +msgstr "Trovi..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." -msgstr "" +msgstr "AnstataÅigi..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "" +msgstr "Rezigni" #: editor/find_in_files.cpp msgid "Find: " -msgstr "" +msgstr "Trovi: " #: editor/find_in_files.cpp msgid "Replace: " -msgstr "" +msgstr "AnstataÅigi: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" -msgstr "" +msgstr "AnstataÅigi ciujn (senrevene)" #: editor/find_in_files.cpp msgid "Searching..." -msgstr "" +msgstr "Serĉas..." #: editor/find_in_files.cpp msgid "Search complete" -msgstr "" +msgstr "Serĉo finiÄis" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "" +msgstr "Aldoni al grupo" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "" +msgstr "Forigi el grupo" #: editor/groups_editor.cpp msgid "Group name already exists." -msgstr "" +msgstr "Grupa nomo jam ekzistas." #: editor/groups_editor.cpp msgid "Invalid group name." -msgstr "" +msgstr "Nevalida grupa nomo." #: editor/groups_editor.cpp msgid "Rename Group" -msgstr "" +msgstr "Renomi grupon" #: editor/groups_editor.cpp msgid "Delete Group" -msgstr "" +msgstr "ViÅi grupon" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "" +msgstr "Grupoj" #: editor/groups_editor.cpp +#, fuzzy msgid "Nodes Not in Group" -msgstr "" +msgstr "Nodoj ne en grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp msgid "Filter nodes" -msgstr "" +msgstr "Filtri nodojn" #: editor/groups_editor.cpp msgid "Nodes in Group" -msgstr "" +msgstr "Nodoj en grupo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Malplenajn grupojn viÅos aÅtomate." #: editor/groups_editor.cpp msgid "Group Editor" -msgstr "" +msgstr "Grupredaktilo" #: editor/groups_editor.cpp +#, fuzzy msgid "Manage Groups" -msgstr "" +msgstr "Administri grupojn" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" -msgstr "" +msgstr "Enporti kiel unuopa sceno" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "" +msgstr "Enporti kun aparta movbildoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" -msgstr "" +msgstr "Enporti kun aparta materialoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "" +msgstr "Enporti kun aparta objektoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "" +msgstr "Enporti kun aparta objektoj+materialoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "" +msgstr "Enporti kun aparta objektoj+movbildoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" -msgstr "" +msgstr "Enporti kun aparta materialoj+movbildoj" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "" +msgstr "Enporti kun aparta objektoj+materialoj+movbildoj" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "" +msgstr "Enporti kiel multoblaj scenoj" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" -msgstr "" +msgstr "Enporti kiel multoblaj scenoj+materialoj" #: editor/import/resource_importer_scene.cpp #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import Scene" -msgstr "" +msgstr "Enporti scenon" #: editor/import/resource_importer_scene.cpp msgid "Importing Scene..." -msgstr "" +msgstr "Enportas scenon..." #: editor/import/resource_importer_scene.cpp msgid "Generating Lightmaps" @@ -3682,8 +3788,9 @@ msgid "Generating for Mesh: " msgstr "" #: editor/import/resource_importer_scene.cpp +#, fuzzy msgid "Running Custom Script..." -msgstr "" +msgstr "Rulas propra skripto..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" @@ -3717,8 +3824,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3781,7 +3888,7 @@ msgstr "" #: editor/inspector_dock.cpp msgid "Open in Help" -msgstr "" +msgstr "Malfermi en helpo" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." @@ -3843,7 +3950,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3978,6 +4085,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4144,6 +4257,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4162,8 +4276,9 @@ msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Rename Animation" -msgstr "" +msgstr "Renomi animaĵon" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" @@ -4318,7 +4433,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4486,6 +4600,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4656,11 +4772,11 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Install..." -msgstr "" +msgstr "Instali..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "" +msgstr "Reprovi" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" @@ -4691,6 +4807,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4700,11 +4820,7 @@ msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" +msgstr "Ordigi:" #: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp @@ -4971,20 +5087,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5074,13 +5197,12 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Helpers" -msgstr "" +msgstr "Montri helpantoj" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Rulers" @@ -5335,6 +5457,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5965,6 +6091,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5997,8 +6127,9 @@ msgid "Add Resource" msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp +#, fuzzy msgid "Rename Resource" -msgstr "" +msgstr "Renomi risurcon" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -6020,7 +6151,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6119,6 +6251,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6213,18 +6350,18 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "" +msgstr "Ruli" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6253,12 +6390,14 @@ msgid "Request Docs" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Help improve the Godot documentation by giving feedback." -msgstr "" +msgstr "Helpi plibonigi la Godotan dokumentadon per doni reagon." #: editor/plugins/script_editor_plugin.cpp +#, fuzzy msgid "Search the reference documentation." -msgstr "" +msgstr "Serĉi la referencan dokumentadon." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." @@ -6294,7 +6433,7 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp msgid "Search Results" -msgstr "" +msgstr "Rezultoj de serĉo" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Scripts" @@ -6304,7 +6443,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6335,7 +6474,7 @@ msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "" +msgstr "Nur risurcoj el dosiersistemo povas esti forigita." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" @@ -6384,6 +6523,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Elektaro ĉiuj" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6442,16 +6586,12 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "" +msgstr "Kunteksta Helpo" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" @@ -6765,6 +6905,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6798,6 +6942,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7024,6 +7172,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7072,6 +7224,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7386,6 +7542,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7516,6 +7680,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7670,16 +7839,111 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "ÅœanÄu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modifita" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Forigi Åœlosilo(j)n" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "ÅœanÄu" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Skali Elektaron" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Elektaro ĉiuj" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "ÅœanÄu" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7695,6 +7959,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7903,6 +8171,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8546,12 +8819,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -8620,7 +8895,7 @@ msgstr "" #: editor/project_export.cpp msgid "Manage Export Templates" -msgstr "" +msgstr "Mastrumi eksportaj Åablonoj" #: editor/project_export.cpp msgid "Export With Debug" @@ -8636,7 +8911,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Please choose an empty folder." -msgstr "" +msgstr "Bonvolu, elektu malplenan dosierujon." #: editor/project_manager.cpp msgid "Please choose a 'project.godot' or '.zip' file." @@ -8648,7 +8923,7 @@ msgstr "" #: editor/project_manager.cpp msgid "New Game Project" -msgstr "" +msgstr "Nova luda projekto" #: editor/project_manager.cpp msgid "Imported Project" @@ -8660,7 +8935,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "" +msgstr "Ne povis krei dosierujon." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." @@ -8694,7 +8969,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Rename Project" -msgstr "" +msgstr "Renomi projekton" #: editor/project_manager.cpp msgid "Import Existing Project" @@ -8706,59 +8981,70 @@ msgstr "" #: editor/project_manager.cpp msgid "Create New Project" -msgstr "" +msgstr "Krei novan projekton" #: editor/project_manager.cpp msgid "Create & Edit" -msgstr "" +msgstr "Krei kaj editi" #: editor/project_manager.cpp msgid "Install Project:" -msgstr "" +msgstr "Instali projekton:" #: editor/project_manager.cpp msgid "Install & Edit" -msgstr "" +msgstr "Instali kaj editi" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "" +msgstr "Projekta nomo:" #: editor/project_manager.cpp msgid "Project Path:" -msgstr "" +msgstr "Projekta vojo:" #: editor/project_manager.cpp +#, fuzzy msgid "Project Installation Path:" -msgstr "" +msgstr "Projekta instala vojo:" #: editor/project_manager.cpp msgid "Renderer:" -msgstr "" +msgstr "Bildigilo:" #: editor/project_manager.cpp msgid "OpenGL ES 3.0" msgstr "" #: editor/project_manager.cpp +#, fuzzy msgid "" "Higher visual quality\n" "All features available\n" "Incompatible with older hardware\n" "Not recommended for web games" msgstr "" +"Pli alta vida kvalito\n" +"Ĉiuj ebloj disponeblaj\n" +"Nekongruas kun pli malnova aparataro\n" +"Nerekomendita por teksaĵaj ludoj" #: editor/project_manager.cpp msgid "OpenGL ES 2.0" msgstr "" #: editor/project_manager.cpp +#, fuzzy msgid "" "Lower visual quality\n" "Some features not available\n" "Works on most hardware\n" "Recommended for web games" msgstr "" +"Pli malalta vida kvalito\n" +"Iom ebloj ne disponeblaj\n" +"Laboras en plej multaj aparataroj\n" +"Rekomendita por teksaĵaj ludoj" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." @@ -8769,20 +9055,23 @@ msgid "Unnamed Project" msgstr "" #: editor/project_manager.cpp +#, fuzzy msgid "Missing Project" -msgstr "" +msgstr "Malkanta projekto" #: editor/project_manager.cpp +#, fuzzy msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Eraro: projekto estas manka en la dosiersistemo." #: editor/project_manager.cpp msgid "Can't open project at '%s'." -msgstr "" +msgstr "Ne povas malfermi projekto ĉe '%s'." #: editor/project_manager.cpp +#, fuzzy msgid "Are you sure to open more than one project?" -msgstr "" +msgstr "Ĉu vi certa en malfermaĵo pli ol unun projekton?" #: editor/project_manager.cpp msgid "" @@ -8868,19 +9157,19 @@ msgstr "" #: editor/project_manager.cpp msgid "Projects" -msgstr "" +msgstr "Projektoj" #: editor/project_manager.cpp msgid "Scan" -msgstr "" +msgstr "Esplori" #: editor/project_manager.cpp msgid "Select a Folder to Scan" -msgstr "" +msgstr "Elektu dosierujo por esploro" #: editor/project_manager.cpp msgid "New Project" -msgstr "" +msgstr "Nova projekto" #: editor/project_manager.cpp msgid "Remove Missing" @@ -8888,7 +9177,7 @@ msgstr "" #: editor/project_manager.cpp msgid "Templates" -msgstr "" +msgstr "Åœablonoj" #: editor/project_manager.cpp msgid "Restart Now" @@ -9093,6 +9382,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9229,6 +9522,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9392,10 +9689,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9451,6 +9744,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9491,10 +9788,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Forigi Åœlosilo(j)n" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Forigi Åœlosilo(j)n" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9504,7 +9815,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "" +msgstr "Konservi novan scenon kiel..." #: editor/scene_tree_dock.cpp msgid "" @@ -9513,11 +9824,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9526,7 +9835,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "New Scene Root" -msgstr "" +msgstr "Nova radiko de sceno" #: editor/scene_tree_dock.cpp msgid "Create Root Node:" @@ -9591,6 +9900,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9607,10 +9924,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9734,7 +10047,7 @@ msgstr "" #: editor/scene_tree_editor.cpp msgid "Rename Node" -msgstr "" +msgstr "Renomi nodon" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -9782,7 +10095,7 @@ msgstr "" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "" +msgstr "Eraro - Ne povis krei skripton en dosiersistemo." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" @@ -9837,43 +10150,65 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Nomo:" #: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Åœablonoj" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Konektu al skripto:" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +#, fuzzy +msgid "Warning:" +msgstr "Avertoj" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Error:" +msgstr "Spegulo" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Source:" +msgstr "Rimedo" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9881,7 +10216,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9889,6 +10224,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9905,6 +10244,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9917,6 +10260,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10113,10 +10460,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10125,6 +10468,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10276,6 +10623,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10411,6 +10766,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Kreu novan %s" @@ -10425,21 +10784,27 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" -msgstr "" +msgstr "Renomi funkcion" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Rename Variable" -msgstr "" +msgstr "Renomi variablon" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Signal" -msgstr "" +msgstr "Renomi signalon" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ViÅi grupon" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10448,6 +10813,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10488,10 +10869,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10516,6 +10907,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Malkonekti" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10548,6 +10944,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Renomi funkcion" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10568,7 +10985,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10576,8 +10993,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkcioj:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10600,6 +11018,16 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Renomi funkcion" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Aktualigi" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10694,6 +11122,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10715,7 +11147,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10792,10 +11225,14 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp -msgid "Run in Browser" +msgid "Stop HTTP Server" msgstr "" #: platform/javascript/export/export.cpp +msgid "Run in Browser" +msgstr "Ruli en foliumilo" + +#: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." msgstr "" @@ -11329,10 +11766,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Enigo" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11363,6 +11796,9 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Input" +#~ msgstr "Enigo" + #~ msgid "No Matches" #~ msgstr "Ne Rezultoj" diff --git a/editor/translations/es.po b/editor/translations/es.po index 08a6012cc2..7966399033 100644 --- a/editor/translations/es.po +++ b/editor/translations/es.po @@ -18,7 +18,7 @@ # Jose Maria Martinez <josemar1992@hotmail.com>, 2018. # Juan Quiroga <juanquiroga9@gmail.com>, 2017. # Kiji Pixel <raccoon.fella@gmail.com>, 2017. -# Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017. +# Lisandro Lorea <lisandrolorea@gmail.com>, 2016-2017, 2019. # Lonsfor <lotharw@protonmail.com>, 2017-2018. # Mario Nachbaur <manachbaur@gmail.com>, 2018. # Oscar Carballal <oscar.carballal@protonmail.com>, 2017-2018. @@ -40,11 +40,12 @@ # juan david julio <illus.kun@gmail.com>, 2019. # Patrick Zoch Alves <patrickzochalves@gmail.com>, 2019. # roger <616steam@gmail.com>, 2019. +# Dario <darlex259@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-22 17:23+0000\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" "Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/" "godot/es/>\n" @@ -95,6 +96,34 @@ msgstr "Argumentos inválidos para construir '%s'" msgid "On call to '%s':" msgstr "En llamada a '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Libre" @@ -359,6 +388,7 @@ msgstr "¿Crear %d nuevas pistas e insertar claves?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Crear" @@ -505,14 +535,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Advertencia: Edición de animación importada" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Seleccionar Todo" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Deseleccionar todo" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Selecciona un nodo AnimationPlayer para crear y editar animaciones." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -644,7 +669,8 @@ msgid "Scale Ratio:" msgstr "Ratio de Escala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Elegir pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -656,6 +682,11 @@ msgstr "Elegir pistas a copiar:" msgid "Copy" msgstr "Copiar" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Deseleccionar todo" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Añadir Clip de Pista de Audio" @@ -693,18 +724,16 @@ msgid "Replaced %d occurrence(s)." msgstr "%d ocurrencia(s) reemplazada(s)." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Se encontraron %d coincidencias." +msgstr "%d coincidencia." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Se encontraron %d coincidencias." +msgstr "%d coincidencias." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" -msgstr "Coincidir mayús/minúsculas" +msgstr "Coincidir Mayús./Minús." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" @@ -838,7 +867,8 @@ msgstr "No se puede conectar la señal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -941,7 +971,8 @@ msgstr "Buscar:" msgid "Matches:" msgstr "Coincidencias:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -982,7 +1013,7 @@ msgid "Resource" msgstr "Recursos" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Ruta" @@ -1156,20 +1187,18 @@ msgid "License" msgstr "Licencia" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" msgstr "Licencia de Terceros" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engine se basa en una serie de bibliotecas libres y de código abierto " -"de terceros, todas ellas compatibles con los términos de su licencia MIT. La " +"Godot Engine se basa en una serie de librerÃas libres y de código abierto de " +"terceros, todas ellas compatibles con los términos de su licencia MIT. La " "siguiente es una lista exhaustiva de todos estos componentes de terceros con " "sus respectivas declaraciones de derechos de autor y términos de licencia." @@ -1186,9 +1215,8 @@ msgid "Licenses" msgstr "Licencias" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Error al abrir el archivo empaquetado, no tiene formato zip." +msgstr "Error al abrir el archivo comprimido, no está en formato ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1256,8 +1284,8 @@ msgid "Delete Bus Effect" msgstr "Eliminar Efecto de Bus" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Bus de audio, arrastra y suelta para reordenar." +msgid "Drag & drop to rearrange." +msgstr "Arrastrar y soltar para reordenar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1447,7 +1475,9 @@ msgid "Add AutoLoad" msgstr "Añadir AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Ruta:" @@ -1501,7 +1531,7 @@ msgstr "Crear Carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nombre:" @@ -1680,6 +1710,7 @@ msgstr "Hacer Actual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nuevo" @@ -1750,6 +1781,7 @@ msgid "New Folder..." msgstr "Nueva Carpeta..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Recargar" @@ -1899,6 +1931,7 @@ msgid "Class:" msgstr "Clase:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Hereda:" @@ -1907,46 +1940,26 @@ msgid "Inherited by:" msgstr "Heredada por:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Descripción Breve:" +msgid "Brief Description" +msgstr "Descripción Breve" #: editor/editor_help.cpp msgid "Properties" msgstr "Propiedades" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propiedades:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Métodos:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propiedades del Tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propiedades del Tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Señales:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeraciones" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeraciones:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1955,20 +1968,12 @@ msgid "Constants" msgstr "Constantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constantes:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descripción de la Clase" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descripción de la Clase:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutoriales en lÃnea:" +msgid "Online Tutorials" +msgstr "Tutoriales en lÃnea" #: editor/editor_help.cpp msgid "" @@ -1985,10 +1990,6 @@ msgid "Property Descriptions" msgstr "Descripción de Propiedades" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descripción de Propiedades:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2001,10 +2002,6 @@ msgid "Method Descriptions" msgstr "Descripción de Métodos" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descripción de Métodos:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2076,8 +2073,8 @@ msgstr "Salida:" msgid "Copy Selection" msgstr "Copiar Selección" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2090,10 +2087,51 @@ msgstr "Limpiar" msgid "Clear Output" msgstr "Limpiar Salida" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Detener" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Iniciar" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Abajo" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Arriba" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nodos" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC Entrante" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET Entrante" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC Saliente" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET Saliente" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Ventana" +msgstr "Nueva Ventana" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2424,9 +2462,8 @@ msgid "Close Scene" msgstr "Cerrar Escena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Cerrar Escena" +msgstr "Reabrir Escena Cerrada" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2549,9 +2586,8 @@ msgid "Close Tab" msgstr "Cerrar Pestaña" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Cerrar Pestaña" +msgstr "Deshacer Cerrar Pestaña" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2684,18 +2720,28 @@ msgid "Project" msgstr "Proyecto" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Ajustes del proyecto" +msgstr "Ajustes del Proyecto..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versiones" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Configurar Control de Versiones" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Desactivar Control de Versiones" #: editor/editor_node.cpp msgid "Export..." msgstr "Exportar…" #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Instalar plantilla de compilación de Android" +msgstr "Instalar plantilla de compilación de Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2706,9 +2752,8 @@ msgid "Tools" msgstr "Herramientas" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Explorador de Recursos Huérfanos" +msgstr "Explorador de Recursos Huérfanos..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2811,9 +2856,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Configuración del Editor" +msgstr "Configuración del Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2850,14 +2894,12 @@ msgid "Open Editor Settings Folder" msgstr "Abrir Carpeta de Configuración del Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Administrar CaracterÃsticas del Editor" +msgstr "Administrar CaracterÃsticas del Editor..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Administrar Plantillas de Exportación" +msgstr "Administrar Plantillas de Exportación..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2913,10 +2955,6 @@ msgstr "Pausar Escena" msgid "Stop the scene." msgstr "Detener la escena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Detener" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Reproducir la escena editada." @@ -2967,14 +3005,10 @@ msgid "Inspector" msgstr "Inspector" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodos" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Expandir Panel Inferior" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Salida" @@ -2994,22 +3028,32 @@ msgstr "Administrar Plantillas" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Esto instalará el proyecto Android para compilaciones personalizadas.\n" -"Para utilizarlo, es necesario habilitarlo mediante un preset de exportación." +"Una vez hecho ésto puedes aplicar modificaciones y generar tu propio APK " +"personalizado al exportar (agregar módulos, cambiar el AndroidManifest.xml, " +"etc.).\n" +"Ten en cuenta que para generar builds personalizados en vez de usar los APKs " +"pregenerados, la opción \"Usar Build Personalizado\" deberÃa estar activada " +"en el preset de exportación de Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "La plantilla de compilación de Android ya está instalada y no se " "sobrescribirá.\n" -"Elimina el directorio \"build\" manualmente antes de intentar esta operación " -"nuevamente." +"Elimina el directorio \"res://android/build\" manualmente antes de intentar " +"esta operación nuevamente." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3071,6 +3115,10 @@ msgstr "Abrir Editor siguiente" msgid "Open the previous Editor" msgstr "Abrir Editor anterior" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "No se encontró ningún sub-recurso." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Creando Vistas Previas de Mesh/es" @@ -3080,6 +3128,10 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Script Principal:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Editar Plugin" @@ -3108,11 +3160,6 @@ msgstr "Estado:" msgid "Edit:" msgstr "Editar:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Iniciar" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Medida:" @@ -3218,6 +3265,10 @@ msgstr "Selecciona un Viewport" msgid "New Script" msgstr "Nuevo Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Extender Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nuevo %s" @@ -3244,13 +3295,6 @@ msgstr "Pegar" msgid "Convert To %s" msgstr "Convertir a %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Abrir Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "¡El nodo seleccionado no es un Viewport!" @@ -3330,7 +3374,6 @@ msgid "Import From Node:" msgstr "Importar Desde Nodo:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Volver a Descargar" @@ -3350,6 +3393,8 @@ msgstr "Descargar" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Las plantillas de exportación oficiales no están disponibles para las " +"versiones de desarrollo." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3432,23 +3477,20 @@ msgid "Download Complete." msgstr "Descarga Completada." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "No se pudo guardar el tema a un archivo:" +msgstr "No se puede eliminar el archivo temporal:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Fallo la instalación de plantillas. Las plantillas problemáticas pueden ser " -"encontradas en '%s'." +"Falló la instalación de plantillas.\n" +"Las plantillas problemáticas se pueden encontrar en '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Error al solicitar url: " +msgstr "Error al solicitar la URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3636,9 +3678,8 @@ msgid "Move To..." msgstr "Mover a..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nueva Escena" +msgstr "Nueva Escena..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3706,9 +3747,8 @@ msgid "Overwrite" msgstr "Sobreescribir" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Crear desde escena" +msgstr "Crear Escena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3788,23 +3828,20 @@ msgid "Invalid group name." msgstr "Nombre de grupo inválido." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Administrar Grupos" +msgstr "Renombrar Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Eliminar grupo de imágenes" +msgstr "Eliminar Grupo" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nodos fuera del Grupo" +msgstr "Nodos Fuera del Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3817,7 +3854,7 @@ msgstr "Nodos dentro del Grupo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Los grupos vacÃos se eliminarán automáticamente." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3921,9 +3958,9 @@ msgstr " Archivos" msgid "Import As:" msgstr "Importar como:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Preset..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Preset" #: editor/import_dock.cpp msgid "Reimport" @@ -4030,9 +4067,8 @@ msgid "MultiNode Set" msgstr "Establecer multinodo" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Selecciona un nodo para editar señales y grupos." +msgstr "Selecciona un único nodo para editar sus señales y grupos." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4050,7 +4086,7 @@ msgstr "Nombre del Plugin:" msgid "Subfolder:" msgstr "Subcarpeta:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Lenguaje:" @@ -4192,6 +4228,12 @@ msgstr "Punto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Abrir Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Abrir Nodo de Animación" @@ -4366,6 +4408,7 @@ msgid "Change Animation Name:" msgstr "Cambiar nombre de animación:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "¿Eliminar Animación?" @@ -4542,7 +4585,6 @@ msgstr "Nombre de Animación:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "¡Error!" @@ -4715,6 +4757,8 @@ msgid "Current:" msgstr "Actual:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Añadir Entrada" @@ -4815,37 +4859,32 @@ msgid "Request failed, return code:" msgstr "Petición fallida, código:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "Petición Fallida." +msgstr "Petición fallida." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "No se pudo guardar el tema a un archivo:" +msgstr "No se pudo guardar la respuesta a:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Error de escritura." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Petición fallida, demasiadas redirecciones" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "Redireccionar Loop." +msgstr "Redireccionar loop." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Petición fallida, código:" +msgstr "Petición fallida, expiración del tiempo de espera" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Tiempo" +msgstr "Tiempo de espera." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4924,24 +4963,22 @@ msgid "All" msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Reimportar..." +msgstr "Importar..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Plugins" +msgstr "Plugins..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Ordenar:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Orden inverso." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "CategorÃa:" @@ -4951,9 +4988,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Soporte..." +msgstr "Soporte" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4964,7 +5000,6 @@ msgid "Testing" msgstr "Prueba" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." msgstr "Cargar..." @@ -5134,9 +5169,8 @@ msgid "Paste Pose" msgstr "Pegar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Limpiar Huesos" +msgstr "Limpiar GuÃas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5225,21 +5259,32 @@ msgid "Pan Mode" msgstr "Modo desplazamiento lateral" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Modo Regla" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Act./Desact. alineado." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opciones de Alineado" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Act./Desact. alineado." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Grid Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Ajustar en Grid" +msgid "Snapping Options" +msgstr "Opciones de Alineado" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5328,8 +5373,8 @@ msgid "View" msgstr "Ver" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Ver Grid" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5596,6 +5641,11 @@ msgstr "Act./Desact. Curva de Tangente Lineal" msgid "Hold Shift to edit tangents individually" msgstr "Mantén Shift para editar las tangentes individualmente" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Clic derecho: Eliminar Punto" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Bake GI Probe" @@ -5873,26 +5923,23 @@ msgstr "Tiempo de Generación (seg):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Las caras de la geometrÃa no contienen ningún área." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "El nodo no posee geometrÃa (caras)." +msgstr "La geometrÃa no contiene ninguna cara." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" no hereda de Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "El nodo no tiene geometrÃa." +msgstr "\"%s\" no tiene geometrÃa." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "El nodo no tiene geometrÃa." +msgstr "\"%s\" no tiene geometrÃa de caras." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6238,6 +6285,10 @@ msgid "Grid" msgstr "Grid" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Ver Grid" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurar Grid:" @@ -6293,7 +6344,8 @@ msgstr "Instancia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipo:" @@ -6331,9 +6383,8 @@ msgid "Error writing TextFile:" msgstr "Error al escribir el TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "No se pudo cargar el tile:" +msgstr "No se pudo cargar el archivo en:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6356,9 +6407,8 @@ msgid "Error Importing" msgstr "Error al Importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Nuevo TextFile..." +msgstr "Nuevo Archivo de Texto..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6394,6 +6444,11 @@ msgid "Find Next" msgstr "Buscar Siguiente" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Buscar Anterior" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtrar scripts" @@ -6438,9 +6493,8 @@ msgid "Open..." msgstr "Abrir..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Abrir Script" +msgstr "Reabrir Script Cerrado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6496,14 +6550,14 @@ msgid "Toggle Scripts Panel" msgstr "Act./Desact. Panel de Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Step Over" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Step Into" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Step Over" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Break" @@ -6575,15 +6629,14 @@ msgid "Search Results" msgstr "Resultados de la Búsqueda" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Limpiar escenas recientes" +msgstr "Limpiar Scripts Recientes" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Conexiones al método:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Fuente" @@ -6628,7 +6681,7 @@ msgstr "Seleccionar Color" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" -msgstr "Convertir Mayúsculas y Minúsculas" +msgstr "Convertir Mayús./Minús." #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" @@ -6658,13 +6711,18 @@ msgstr "Marcadores" #: editor/plugins/script_text_editor.cpp msgid "Breakpoints" -msgstr "Puntos de interrupción" +msgstr "Breakpoints" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Cut" msgstr "Cortar" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Seleccionar Todo" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Eliminar LÃnea" @@ -6702,9 +6760,8 @@ msgid "Complete Symbol" msgstr "Completar SÃmbolo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Escalar Selección" +msgstr "Evaluar Selección" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6723,10 +6780,6 @@ msgid "Auto Indent" msgstr "Autoindentar" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Buscar Anterior" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Buscar en Archivos..." @@ -6769,7 +6822,7 @@ msgstr "Eliminar Todos los Breakpoints" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "Ir al Siguente Breakpoint" +msgstr "Ir al Siguiente Breakpoint" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" @@ -7012,9 +7065,8 @@ msgid "Audio Listener" msgstr "Oyente de Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Habilitar Filtrado" +msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7049,6 +7101,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificador de Velocidad de Vista Libre" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7070,7 +7127,7 @@ msgstr "Ajustar Nodos al Suelo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "No se pudo encontrar un suelo sólido para ajustar la selección." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7083,9 +7140,12 @@ msgstr "" "Alt + Clic Derecho: Selección en la lista de superposición" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Modo de Espacio Local (%s)" +msgstr "Usar Espacio Local" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7182,9 +7242,8 @@ msgstr "Ver Grid" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Configuración" +msgstr "Configuración..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7315,6 +7374,11 @@ msgid "Simplification: " msgstr "Simplificación: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Crecer (Pixeles): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Crecer (Pixeles): " @@ -7363,6 +7427,10 @@ msgid "(empty)" msgstr "(vacÃo)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Mover Frame" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animaciones:" @@ -7560,14 +7628,12 @@ msgid "Submenu" msgstr "Submenú" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Ãtem 1" +msgstr "SubÃtem 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Ãtem 2" +msgstr "SubÃtem 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7679,17 +7745,24 @@ msgid "Enable Priority" msgstr "Activar Prioridad" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtrar tiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Asignar un recurso TileSet a este TileMap para usas sus tiles." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Dibujar tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift + Clic derecho: Trazar lÃnea\n" -"Shift + Ctrl + Clic derecho: Pintar Rectángulo" +"Shift + Clic izq: Dibujar lÃnea\n" +"Shift + Ctrl + Clic izq: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7812,6 +7885,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Mostrar Nombres de Tiles (mantener Tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Agrega o selecciona una textura en el panel izquierdo para editar los tiles " +"asignados a él." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "¿Eliminar la textura seleccionada? Esto eliminará todas las tiles que lo " @@ -7983,16 +8063,107 @@ msgstr "Esta propiedad no se puede cambiar." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "No hay addons de VCS disponibles." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Error" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "No se indicó ningún mensaje de confirmación" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "No se agregaron archivos al stage" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Confirmar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "El Addon de VCS no está inicializado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Sistema de Control de Versiones" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inicializar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Ãrea de Staging" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Detectar nuevos cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modificado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Renombrado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Eliminado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Cambio de Tipo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Hacer Staging de Selección" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Hacer Staging de Todo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Añadir un mensaje de confirmación" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Confirmar Cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Estado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"Ver las diferencias de los archivos antes de confirmar la última versión" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "No hay diferencias de archivo disponibles" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Detectar diferencias entre los archivos" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Sólo GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Añadir entrada +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Añadir salida +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8008,6 +8179,11 @@ msgid "Boolean" msgstr "Booleano" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Sonidos" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Agregar puerto de entrada" @@ -8089,9 +8265,8 @@ msgid "Light" msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Crear Nodo Shader" +msgstr "Mostrar el código del shader resultante." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8226,6 +8401,13 @@ msgstr "" "o falso." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Devuelve un escalar asociado si el valor booleano proporcionado es verdadero " +"o falso." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Devuelve el resultado booleano de la comparación entre dos parámetros." @@ -8461,7 +8643,6 @@ msgid "Returns the square root of the parameter." msgstr "Devuelve la raÃz cuadrada del parámetro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8476,7 +8657,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8654,9 +8834,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolación lineal entre dos vectores." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolación lineal entre dos vectores." +msgstr "Interpolación lineal entre dos vectores usando escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8683,7 +8862,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Devuelve el vector que apunta en la dirección de refracción." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8698,7 +8876,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8713,7 +8890,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8724,7 +8900,6 @@ msgstr "" "Devuelve 0.0 si 'x' es menor que 'edge' y 1.0 en caso contrario." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8788,6 +8963,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Expresión personalizada del lenguaje de shader de Godot, que se coloca " +"encima del shader resultante. Puedes colocar varias definiciones de " +"funciones dentro y llamarlas más tarde en las Expresiones. También puedes " +"declarar variaciones, uniformes y constantes." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8939,15 +9118,19 @@ msgid "Resources to export:" msgstr "Recursos a exportar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para exportar archivos que no son recursos (separados por comas, ej: " "*.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para excluir de la exportación (separados por comas, ej: *.json, *." "txt)" @@ -9180,13 +9363,12 @@ msgid "Unnamed Project" msgstr "Proyecto Sin Nombre" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importar Proyecto Existente" +msgstr "Proyecto Faltante" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Error: Proyecto faltante en el sistema de archivos." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9285,12 +9467,11 @@ msgstr "" "El contenido de la carpeta de proyecto no se modificará." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"¿Eliminar %d proyectos de la lista?\n" +"¿Eliminar todos los proyectos faltantes de la lista?\n" "El contenido de las carpetas del proyecto no se modificará." #: editor/project_manager.cpp @@ -9316,9 +9497,8 @@ msgid "Project Manager" msgstr "Administrador de Proyectos" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Proyecto" +msgstr "Proyectos" #: editor/project_manager.cpp msgid "Scan" @@ -9549,6 +9729,10 @@ msgid "Settings saved OK." msgstr "Los ajustes se han guardado correctamente." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Evento de Acción de Entrada Movido" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Sobrescribir la CaracterÃstica" @@ -9685,6 +9869,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Preset..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Cero" @@ -9838,7 +10026,7 @@ msgstr "under_scored a CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "Mayus./Minus." +msgstr "Mayús./Minús." #: editor/rename_dialog.cpp msgid "To Lowercase" @@ -9852,10 +10040,6 @@ msgstr "A mayúsculas" msgid "Reset" msgstr "Resetear" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Error" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reemparentar nodo" @@ -9913,6 +10097,10 @@ msgid "Instance Scene(s)" msgstr "Instanciar Escena(s)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Reemplazar con Escena de Rama" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instanciar Escena Hija" @@ -9955,8 +10143,20 @@ msgid "Make node as Root" msgstr "Convertir nodo como RaÃz" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "¿Eliminar Nodo(s)?" +msgid "Delete %d nodes?" +msgstr "¿Eliminar %d nodos?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "¿Eliminar el nodo raiz \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "¿Eliminar el nodo \"%s\" y sus hijos?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "¿Eliminar nodo \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9979,12 +10179,13 @@ msgstr "" "vuelvan a sus valores por defecto." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Hijos Editables" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Cargar como Placeholder" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Desactivar \"editable_instance\" causara que todas las propiedades del nodo " +"vuelvan a sus valores por defecto." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10031,9 +10232,8 @@ msgid "Remove Node(s)" msgstr "Eliminar Nodo(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Cambiar nombre del puerto de salida" +msgstr "Cambiar tipo de nodo(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -10060,6 +10260,14 @@ msgid "Clear Inheritance" msgstr "Limpiar Heredado" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Hijos Editables" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Cargar como Placeholder" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Abrir Documentación" @@ -10076,10 +10284,6 @@ msgid "Change Type" msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Extender Script" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Reemparentar a Nuevo Nodo" @@ -10156,31 +10360,28 @@ msgid "Node configuration warning:" msgstr "Alerta de configuración de nodos:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión/es y grupo/s.\n" +"El nodo tiene %s conexión(es) y %(s) grupo(s).\n" "Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexiones.\n" -"Haz clic para mostrar el panel de señales." +"El nodo tiene %s conexión(es).\n" +"Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"El nodo está en el/los grupo(s).\n" -"Haz clic para mostrar el panel de grupos." +"El nodo está en %s grupo(s).\n" +"Clic para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10276,9 +10477,8 @@ msgid "Error loading script from %s" msgstr "Error al cargar script desde %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Sobreescribir" +msgstr "Sobreescritura" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10325,23 +10525,18 @@ msgid "Will load an existing script file." msgstr "Se cargará un archivo de script existente." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Lenguaje" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Hereda" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nombre de clase" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Plantilla" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script Integrado" #: editor/script_create_dialog.cpp @@ -10357,26 +10552,54 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Stack Trace" +msgid "Warning:" +msgstr "Advertencia:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Elige uno o más elementos de la lista para mostrar el gráfico." +msgid "Error:" +msgstr "Error:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Error de C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Error de C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Fuente C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Fuente:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Fuente C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Stack Trace" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errores" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Proceso Hijo Conectado" +msgid "Child process connected." +msgstr "Proceso hijo conectado." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Copiar Error" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Saltar Breakpoints" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspeccionar Instancia Anterior" @@ -10393,6 +10616,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profiler de Red" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10405,6 +10632,10 @@ msgid "Monitors" msgstr "Monitores" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Elige uno o más elementos de la lista para mostrar el gráfico." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista de uso de memoria de video por recurso:" @@ -10601,10 +10832,6 @@ msgid "Library" msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Estado" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotecas: " @@ -10613,6 +10840,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Se esperaba un string de longitud 1 (un carácter)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "¡El argumento step es cero!" @@ -10768,6 +10999,14 @@ msgstr "Configuración de GridMap" msgid "Pick Distance:" msgstr "Seleccionar Distancia:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Filtrar meshes" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "Asignar un recurso MeshLibrary a este GridMap para usar sus meshes." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "El nombre de la clase no puede ser una palabra reservada" @@ -10895,28 +11134,28 @@ msgid "Set Variable Type" msgstr "Establecer Tipo de la Variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "No debe coincidir con un nombre de tipo built-in existente." +msgstr "Sobrescribir una función incorporada existente." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Cree un nuevo rectángulo." +msgstr "Crear una nueva función." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variables:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Cree un nuevo rectángulo." +msgstr "Crear una nueva variable." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Señales:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Crear un nuevo polÃgono." +msgstr "Crear una nueva señal." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10943,6 +11182,11 @@ msgid "Add Function" msgstr "Añadir Función" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Eliminar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Añadir Variable" @@ -10951,6 +11195,26 @@ msgid "Add Signal" msgstr "Añadir Señal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Agregar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Añadir puerto de salida" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Eliminar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Eliminar puerto de salida" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Cambiar Expresión" @@ -10995,10 +11259,20 @@ msgid "Add Preload Node" msgstr "Añadir Nodo Preload" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Añadir Nodo(s) Desde Ãrbol" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Añadir Propiedad Getter" @@ -11023,6 +11297,11 @@ msgid "Connect Nodes" msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Desconectar nodos gráficos" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Conectar Datos de Nodos" @@ -11055,6 +11334,28 @@ msgid "Paste VisualScript Nodes" msgstr "Pegar nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "No se puede copiar el nodo de función." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Renombrar Función" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Eliminar Función" @@ -11075,16 +11376,17 @@ msgid "Editing Signal:" msgstr "Editando señal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipo Base:" +msgid "Make Tool:" +msgstr "Convertir en Herramienta:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Miembros:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodos disponibles:" +#, fuzzy +msgid "function_name" +msgstr "Función:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11107,6 +11409,16 @@ msgid "Cut Nodes" msgstr "Cortar Nodos" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Renombrar Función" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Recargar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Editar Miembros" @@ -11208,6 +11520,10 @@ msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Seleccionar dispositivo de la lista" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Ejecutable ADB no configurado en Configuración del Editor." @@ -11234,10 +11550,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"El proyecto Android no está instalado para la compilación. Instálalo desde " -"el menú Editor." +"La plantilla de exportación de Android no esta instalada en el proyecto. " +"Instalala desde el menú de Proyecto." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11328,6 +11645,10 @@ msgid "Required icon is not specified in the preset." msgstr "El icono requerido no está especificado en el preset." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Ejecutar en Navegador" @@ -12008,10 +12329,6 @@ msgstr "" "pueda obtener un tamaño. De lo contrario, conviértelo en un RenderTarget y " "asigna su textura interna a algún nodo para mostrarlo." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrada" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Fuente inválida para la vista previa." @@ -12040,6 +12357,65 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Snap to Grid" +#~ msgstr "Ajustar en Grid" + +#~ msgid "Add input +" +#~ msgstr "Añadir entrada +" + +#~ msgid "Language" +#~ msgstr "Lenguaje" + +#~ msgid "Inherits" +#~ msgstr "Hereda" + +#~ msgid "Base Type:" +#~ msgstr "Tipo Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodos disponibles:" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Properties:" +#~ msgstr "Propiedades:" + +#~ msgid "Methods:" +#~ msgstr "Métodos:" + +#~ msgid "Theme Properties:" +#~ msgstr "Propiedades del Tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeraciones:" + +#~ msgid "Constants:" +#~ msgstr "Constantes:" + +#~ msgid "Class Description:" +#~ msgstr "Descripción de la Clase:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descripción de Propiedades:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descripción de Métodos:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Esto instalará el proyecto Android para compilaciones personalizadas.\n" +#~ "Para utilizarlo, es necesario habilitarlo mediante un preset de " +#~ "exportación." + +#~ msgid "Reverse sorting." +#~ msgstr "Orden inverso." + +#~ msgid "Delete Node(s)?" +#~ msgstr "¿Eliminar Nodo(s)?" + #~ msgid "No Matches" #~ msgstr "Sin Coincidencias" @@ -12412,9 +12788,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Go to parent folder" #~ msgstr "Ir a la carpeta principal" -#~ msgid "Select device from the list" -#~ msgstr "Seleccionar dispositivo de la lista" - #~ msgid "Open Scene(s)" #~ msgstr "Abrir escena(s)" @@ -12476,9 +12849,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgstr "" #~ "Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." -#~ msgid "Warnings:" -#~ msgstr "Advertencias:" - #~ msgid "Font Size:" #~ msgstr "Tamaño de la tipografÃa:" @@ -12523,9 +12893,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Select a split to erase it." #~ msgstr "Selecciona una división para borrarla." -#~ msgid "No name provided" -#~ msgstr "No se proporcionó un nombre" - #~ msgid "Add Node.." #~ msgstr "Añadir Nodo..." @@ -12661,12 +13028,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Warning" #~ msgstr "Advertencia" -#~ msgid "Error:" -#~ msgstr "Error:" - -#~ msgid "Function:" -#~ msgstr "Función:" - #~ msgid "Variable" #~ msgstr "Variable" @@ -12733,9 +13094,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Connect Graph Nodes" #~ msgstr "Conectar nodos gráficos" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Desconectar nodos gráficos" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Eliminar el nodo gráfico del shader" @@ -12745,9 +13103,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplicar nodo(s) gráfico" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Eliminar nodo(s) gráfico(s) del shader" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Error: Link de conexión cÃclico" @@ -13206,9 +13561,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Pick New Name and Location For:" #~ msgstr "Elige un nombre nuevo y ubicación para:" -#~ msgid "No files selected!" -#~ msgstr "¡No has seleccionado ningún archivo!" - #~ msgid "Info" #~ msgstr "Info" @@ -13611,12 +13963,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Scaling to %s%%." #~ msgstr "Escalando al %s%%." -#~ msgid "Up" -#~ msgstr "Arriba" - -#~ msgid "Down" -#~ msgstr "Abajo" - #~ msgid "Bucket" #~ msgstr "Cubo" @@ -13926,9 +14272,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Group" #~ msgstr "Grupo" -#~ msgid "Samples" -#~ msgstr "Sonidos" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de conversión de muestreo: (archivos .wav):" diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po index 9208cc669c..4369ea73ab 100644 --- a/editor/translations/es_AR.po +++ b/editor/translations/es_AR.po @@ -16,8 +16,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-11 10:24+0000\n" -"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" +"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n" "Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/" "godot-engine/godot/es_AR/>\n" "Language: es_AR\n" @@ -25,12 +25,12 @@ 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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "El argumento para convert() no es correcto, utiliza constantes TYPE_*." +msgstr "Argumento de tipo incorrecto en convert(), utilizá constantes TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -67,6 +67,34 @@ msgstr "Argumentos inválidos para construir '%s'" msgid "On call to '%s':" msgstr "En la llamada a '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Gratis" @@ -331,6 +359,7 @@ msgstr "Crear %d NUEVOS tracks e insertar claves?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Crear" @@ -467,7 +496,7 @@ msgstr "" "Para habilitar la capacidad de añadir pistas personalizadas, andá a la " "configuración de importación de la escena y establece\n" "\"Animation > Storage\" a \"Files\", activa \"Animation > Keep Custom Tracks" -"\", y luego reimporta.\n" +"\", y luego reimportá.\n" "También podés usar un preset de importación que importa animaciones a " "archivos separados." @@ -475,14 +504,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Advertencia: Se esta editando una animación importada" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Seleccionar Todo" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "No Seleccionar Ninguno" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Seleccioná un nodo AnimationPlayer para crear y editar animaciones." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -614,7 +638,8 @@ msgid "Scale Ratio:" msgstr "Ratio de Escala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Elegir pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -626,6 +651,11 @@ msgstr "Elegir pistas a copiar:" msgid "Copy" msgstr "Copiar" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "No Seleccionar Ninguno" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Agregar Clip de Pista de Audio" @@ -663,14 +693,12 @@ msgid "Replaced %d occurrence(s)." msgstr "%d ocurrencia(s) Reemplazadas." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Se encontraron %d coincidencias." +msgstr "%d coincidencia." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Se encontraron %d coincidencias." +msgstr "%d coincidencias." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -808,7 +836,8 @@ msgstr "No se puede conectar la señal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -910,7 +939,8 @@ msgstr "Buscar:" msgid "Matches:" msgstr "Coincidencias:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -951,7 +981,7 @@ msgid "Resource" msgstr "Recursos" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Ruta" @@ -1125,22 +1155,20 @@ msgid "License" msgstr "Licencia" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" msgstr "Licencia de Terceros" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engine depende de un número de licencias de terceros, libres y de " -"código abierto, todas compatibles con los términos de su licencia MIT. La " -"siguiente es una lista exhaustiva de los mencionados componentes de terceros " -"con sus respectivas declaraciones de copyright y términos de licencia." +"Godot Engine se basa en una serie de librerÃas libres y de código abierto de " +"terceros, todas ellas compatibles con los términos de su licencia MIT. La " +"siguiente es una lista exhaustiva de todos estos componentes de terceros con " +"sus respectivas declaraciones de derechos de autor y términos de licencia." #: editor/editor_about.cpp msgid "All Components" @@ -1155,9 +1183,8 @@ msgid "Licenses" msgstr "Licencias" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Error al abrir el archivo de paquete. No está en formato zip." +msgstr "Error al abrir el archivo comprimido, no está en formato ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1225,8 +1252,8 @@ msgid "Delete Bus Effect" msgstr "Eliminar Efecto de Bus" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Audio Bus, Arrastrar y Soltar para reordenar." +msgid "Drag & drop to rearrange." +msgstr "Arrastrar y soltar para reordenar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1416,7 +1443,9 @@ msgid "Add AutoLoad" msgstr "Agregar AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Ruta:" @@ -1470,7 +1499,7 @@ msgstr "Crear Carpeta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nombre:" @@ -1648,6 +1677,7 @@ msgstr "Hacer Actual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nuevo" @@ -1718,6 +1748,7 @@ msgid "New Folder..." msgstr "Nueva Carpeta..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Refrescar" @@ -1867,6 +1898,7 @@ msgid "Class:" msgstr "Clase:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Hereda:" @@ -1875,46 +1907,26 @@ msgid "Inherited by:" msgstr "Heredada por:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Descripción Breve:" +msgid "Brief Description" +msgstr "Descripción Breve" #: editor/editor_help.cpp msgid "Properties" msgstr "Propiedades" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propiedades:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Métodos:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propiedades de Tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propiedades de Tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Señales:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeraciones" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeraciones:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1923,20 +1935,12 @@ msgid "Constants" msgstr "Constantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constantes:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descripción de Clase" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descripción de Clase:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutoriales En Linea:" +msgid "Online Tutorials" +msgstr "Tutoriales en lÃnea" #: editor/editor_help.cpp msgid "" @@ -1953,10 +1957,6 @@ msgid "Property Descriptions" msgstr "Descripción de Propiedades" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descripción de Propiedades:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1969,10 +1969,6 @@ msgid "Method Descriptions" msgstr "Descripción de Método" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descripción de Métodos:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2041,8 +2037,8 @@ msgstr "Salida:" msgid "Copy Selection" msgstr "Copiar Selección" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2055,10 +2051,51 @@ msgstr "Limpiar" msgid "Clear Output" msgstr "Limpiar Salida" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Detener" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Iniciar" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Abajo" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Arriba" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nodo" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC Entrante" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET Entrante" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC Saliente" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET Saliente" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Ventana" +msgstr "Nueva Ventana" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2389,9 +2426,8 @@ msgid "Close Scene" msgstr "Cerrar Escena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Cerrar Escena" +msgstr "Reabrir Escena Cerrada" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2514,9 +2550,8 @@ msgid "Close Tab" msgstr "Cerrar Pestaña" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Cerrar Pestaña" +msgstr "Deshacer Cerrar Pestaña" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2649,18 +2684,28 @@ msgid "Project" msgstr "Proyecto" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Configuración de Proyecto" +msgstr "Ajustes del Proyecto..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Control de Versiones" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Inicializar Control de Versiones" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Desactivar Control de Versiones" #: editor/editor_node.cpp msgid "Export..." msgstr "Exportar..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Instalar plantilla de compilación de Android" +msgstr "Instalar Plantilla de Compilación de Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2671,9 +2716,8 @@ msgid "Tools" msgstr "Herramientas" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Explorador de Recursos Huérfanos" +msgstr "Explorador de Recursos Huérfanos..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2777,9 +2821,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Configuración del Editor" +msgstr "Configuración del Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2814,14 +2857,12 @@ msgid "Open Editor Settings Folder" msgstr "Abrir Carpeta de Configuración del Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Administrar CaracterÃsticas del Editor" +msgstr "Administrar CaracterÃsticas del Editor..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Gestionar Plantillas de Exportación" +msgstr "Administrar Plantillas de Exportación..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2877,10 +2918,6 @@ msgstr "Pausar Escena" msgid "Stop the scene." msgstr "Parar la escena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Detener" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Reproducir la escena editada." @@ -2931,14 +2968,10 @@ msgid "Inspector" msgstr "Inspector" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodo" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Expandir Panel Inferior" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Salida" @@ -2958,23 +2991,34 @@ msgstr "Administrar Plantillas" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Esto instalará el proyecto de Android para compilaciones personalizadas.\n" -"Tené en cuenta que, para usarlo, necesita estar activado por cada preset de " -"exportación." +"Esto va a inicializar tu proyecto para builds de Android personalizados, " +"instalando la plantilla de origen en \"res://android/build\".\n" +"Una vez hecho ésto podés aplicar modificaciones y generar tu propio APK " +"personalizado al exportar (agregar módulos, cambiar el AndroidManifest.xml, " +"etc.).\n" +"Tené en cuenta que para generar builds personalizados en vez de usar los " +"APKs pregenerados, la opcion \"Usar Build Personalizado\" deberÃa estar " +"activada en el preset de exportación de Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "La plantilla de compilación de Android ya está instalada y no se " "sobrescribirá.\n" -"Eliminá el directorio \"build\" manualmente antes de intentar esta operación " -"nuevamente." +"Eliminá el directorio \"res://android/build\" manualmente antes de intentar " +"esta operación nuevamente." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3036,6 +3080,10 @@ msgstr "Abrir el Editor siguiente" msgid "Open the previous Editor" msgstr "Abrir el Editor anterior" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "No se encontró ningún sub-recurso." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Creando Vistas Previas de Mesh/es" @@ -3045,6 +3093,10 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Script Principal:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Editar Plugin" @@ -3073,11 +3125,6 @@ msgstr "Estado:" msgid "Edit:" msgstr "Editar:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Iniciar" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Medida:" @@ -3182,6 +3229,10 @@ msgstr "Seleccionar un Viewport" msgid "New Script" msgstr "Nuevo Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Extender Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nuevo %s" @@ -3208,13 +3259,6 @@ msgstr "Pegar" msgid "Convert To %s" msgstr "Convertir A %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Abrir Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "El nodo seleccionado no es un Viewport!" @@ -3294,7 +3338,6 @@ msgid "Import From Node:" msgstr "Importar Desde Nodo:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Volver a Descargar" @@ -3314,6 +3357,8 @@ msgstr "Descargar" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Las plantillas de exportación oficiales no están disponibles para las " +"versiones de desarrollo." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3396,23 +3441,20 @@ msgid "Download Complete." msgstr "Descarga Completa." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "No se pudo guardar el tema a un archivo:" +msgstr "No se puede eliminar el archivo temporal:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Fallo la instalación de plantillas. Las plantillas problemáticas pueden ser " -"encontradas en '%s'." +"Falló la instalación de plantillas.\n" +"Las plantillas problemáticas se pueden encontrar en '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Error al pedir el url: " +msgstr "Error al solicitar la URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3600,9 +3642,8 @@ msgid "Move To..." msgstr "Mover A..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nueva Escena" +msgstr "Nueva Escena..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3670,9 +3711,8 @@ msgid "Overwrite" msgstr "Sobreescribir" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Crear desde Escena" +msgstr "Crear Escena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3752,23 +3792,20 @@ msgid "Invalid group name." msgstr "Nombre de grupo inválido." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Administrar Grupos" +msgstr "Renombrar Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Eliminar Grupo de Imágenes" +msgstr "Eliminar Grupo" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nodos fuera del Grupo" +msgstr "Nodos Fuera del Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3781,7 +3818,7 @@ msgstr "Nodos dentro del Grupo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Los grupos vacÃos se eliminarán automáticamente." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3884,9 +3921,9 @@ msgstr " Archivos" msgid "Import As:" msgstr "Importar Como:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Preseteo..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Preset" #: editor/import_dock.cpp msgid "Reimport" @@ -3995,9 +4032,8 @@ msgid "MultiNode Set" msgstr "Setear MultiNodo" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Seleccionar un Nodo para editar Señales y Grupos." +msgstr "Selecciona un único nodo para editar sus señales y grupos." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4015,7 +4051,7 @@ msgstr "Nombre del Plugin:" msgid "Subfolder:" msgstr "Subcarpeta:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Lenguaje:" @@ -4157,6 +4193,12 @@ msgstr "Punto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Abrir Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Abrir Nodo de Animación" @@ -4331,6 +4373,7 @@ msgid "Change Animation Name:" msgstr "Cambiar Nombre de Animación:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Eliminar Animación?" @@ -4507,7 +4550,6 @@ msgstr "Nombre de Animación:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Error!" @@ -4680,6 +4722,8 @@ msgid "Current:" msgstr "Actual:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Agregar Entrada" @@ -4780,37 +4824,32 @@ msgid "Request failed, return code:" msgstr "Solicitud fallida. Código de retorno:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Solicitud fallida." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "No se pudo guardar el tema a un archivo:" +msgstr "No se puede guardar la respuesta a:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Error de escritura." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Solicitud fallida, demasiadas redireccinoes" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Bucle de redireccionamiento." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Solicitud fallida. Código de retorno:" +msgstr "Solicitud fallida, tiempo de espera agotado" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Tiempo" +msgstr "Tiempo de espera." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4889,24 +4928,22 @@ msgid "All" msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Reimportando..." +msgstr "Importar..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Plugins" +msgstr "Plugins..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Ordenar:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Orden inverso." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "CategorÃa:" @@ -4916,9 +4953,8 @@ msgid "Site:" msgstr "Sitio:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Soporte..." +msgstr "Soporte" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4929,9 +4965,8 @@ msgid "Testing" msgstr "Prueba" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Cargar..." +msgstr "Cargando..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5099,9 +5134,8 @@ msgid "Paste Pose" msgstr "Pegar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Restablecer Huesos" +msgstr "Restablecer GuÃas" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5189,21 +5223,32 @@ msgid "Pan Mode" msgstr "Modo Paneo" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Modo Regla" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Act/Desact. alineado." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opciones de Alineado" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Act/Desact. alineado." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Snap de Grilla" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Ajustar a la Grilla" +msgid "Snapping Options" +msgstr "Opciones de Alineado" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5292,8 +5337,8 @@ msgid "View" msgstr "Vista" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Mostrar la Grilla" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5560,6 +5605,11 @@ msgstr "Act./Desact. Tangente Lineal de Curva" msgid "Hold Shift to edit tangents individually" msgstr "Mantené Shift para editar tangentes individualmente" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Click Derecho: Eliminar Punto" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Bake GI Probe" @@ -5837,26 +5887,23 @@ msgstr "Tiempo de Generación (seg):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Las caras de la geometrÃa no contienen ningún área." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "El nodo no contiene geometrÃa (caras)." +msgstr "La geometrÃa no contiene ninguna cara." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" no hereda de Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "El nodo no contiene geometrÃa." +msgstr "\"%s\" no contiene geometrÃa." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "El nodo no contiene geometrÃa." +msgstr "\"%s\" no tiene geometrÃa de caras." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6202,6 +6249,10 @@ msgid "Grid" msgstr "Grilla" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar la Grilla" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurar Grilla:" @@ -6257,7 +6308,8 @@ msgstr "Instancia:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipo:" @@ -6295,9 +6347,8 @@ msgid "Error writing TextFile:" msgstr "Error al escribir el TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "No se pudo cargar el tile:" +msgstr "No se pudo cargar el archivo en:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6320,9 +6371,8 @@ msgid "Error Importing" msgstr "Error al Importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Nuevo TextFile..." +msgstr "Nuevo Archivo de Texto..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6358,6 +6408,11 @@ msgid "Find Next" msgstr "Encontrar Siguiente" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Encontrar Anterior" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtrar scripts" @@ -6402,9 +6457,8 @@ msgid "Open..." msgstr "Abrir..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Abrir Script" +msgstr "Reabrir Script Cerrado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6460,14 +6514,14 @@ msgid "Toggle Scripts Panel" msgstr "Act/Desact. Panel de Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Step Over" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Step Into" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Step Over" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Break" @@ -6539,15 +6593,14 @@ msgid "Search Results" msgstr "Resultados de la Búsqueda" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Restablecer Escenas Recientes" +msgstr "Restablecer Scripts Recientes" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Conexiones al método:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Fuente" @@ -6629,6 +6682,11 @@ msgstr "Puntos de interrupción" msgid "Cut" msgstr "Cortar" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Seleccionar Todo" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Eliminar LÃnea" @@ -6666,9 +6724,8 @@ msgid "Complete Symbol" msgstr "Completar SÃmbolo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Escalar Selección" +msgstr "Evaluar Selección" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6687,10 +6744,6 @@ msgid "Auto Indent" msgstr "Auto Indentar" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Encontrar Anterior" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Buscar en Archivos..." @@ -6976,9 +7029,8 @@ msgid "Audio Listener" msgstr "Oyente de Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Habilitar Filtrado" +msgstr "Activar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7013,6 +7065,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de Velocidad de Vista Libre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificador de Velocidad de Vista Libre" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7034,7 +7091,7 @@ msgstr "Ajustar Nodos al Suelo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "No se pudo encontrar un suelo sólido al que ajustar la selección." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7047,9 +7104,12 @@ msgstr "" "Alt+Click Der.: Selección en depth list" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Modo de Espacio Local (%s)" +msgstr "Usar Espacio Local" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7146,9 +7206,8 @@ msgstr "Ver Grilla" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Configuración" +msgstr "Configuración..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7279,6 +7338,11 @@ msgid "Simplification: " msgstr "Simplificación: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Crecer (Pixeles): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Crecer (Pixeles): " @@ -7327,6 +7391,10 @@ msgid "(empty)" msgstr "(vacÃo)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Mover Fotograma" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animaciones:" @@ -7524,14 +7592,12 @@ msgid "Submenu" msgstr "Submenú" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Ãtem 1" +msgstr "SubÃtem 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Ãtem 2" +msgstr "SubÃtem 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7643,17 +7709,24 @@ msgid "Enable Priority" msgstr "Activar Prioridad" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtrar tiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Asignale un recurso TileSet a este TileMap para usas sus tiles." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift + Clic derecho: Dibujar lÃnea\n" -"Shift + Ctrl + Clic derecho: Pintar Rectángulo" +"Shift + Clic izq: Dibujar lÃnea\n" +"Shift + Ctrl + Clic izq: Pintar Rectángulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7776,6 +7849,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Mostrar Nombres de Tiles (mantener Tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Agregá o seleccioná una textura en el panel izquierdo para editar los tiles " +"asignados a él." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "¿Remover la textura seleccionada? Esto removerá todos los tiles que la usan." @@ -7946,16 +8026,106 @@ msgstr "Esta propiedad no se puede cambiar." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "No hay addons de VCS disponibles." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Error" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "No se indicó ningún mensaje de commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "No se agregaron archivos al stage" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "El Addon de VCS no está inicializado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Sistema de Control de Versiones" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inicializar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Ãrea de Staging" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Detectar nuevos cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modificado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Renombrado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Eliminado/s" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Cambio de Tipo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Hacer Staging de Selección" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Hacer Staging de Todo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Agregar mensaje de commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Commitear Cambios" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Estado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "Ver diferencias de archivos antes de commitearlos a la última versión" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "No hay ningún diff de archivos activo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Detectar cambios en el diff de archivo" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Sólo GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Añadir entrada +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Añadir salida +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7971,6 +8141,11 @@ msgid "Boolean" msgstr "Booleano" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Muestras" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Agregar puerto de entrada" @@ -8052,9 +8227,8 @@ msgid "Light" msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Crear Nodo Shader" +msgstr "Mostrar el código del shader resultante." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8189,6 +8363,13 @@ msgstr "" "o falso." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Devuelve un escalar asociado si el valor booleano proporcionado es verdadero " +"o falso." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Devuelve el resultado booleano de la comparación entre dos parámetros." @@ -8424,7 +8605,6 @@ msgid "Returns the square root of the parameter." msgstr "Devuelve la raÃz cuadrada del parámetro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8439,7 +8619,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8617,9 +8796,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolación lineal entre dos vectores." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolación lineal entre dos vectores." +msgstr "Interpolación lineal entre dos vectores usando escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8646,7 +8824,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Devuelve el vector que apunta en la dirección de refracción." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8661,7 +8838,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8676,7 +8852,6 @@ msgstr "" "polinomios de Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8687,7 +8862,6 @@ msgstr "" "Devuelve 0.0 si 'x' es menor que 'edge' y 1.0 en caso contrario." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8750,6 +8924,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Expresión personalizada del lenguaje de shader de Godot, que se coloca " +"encima del shader resultante. Puedes colocar varias definiciones de " +"funciones dentro y llamarlas más tarde en las Expresiones. También puedes " +"declarar varyings, uniforms y constantes." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8903,15 +9081,19 @@ msgid "Resources to export:" msgstr "Recursos a exportar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para exportar archivos que no son recursos (separados por comas, ej: " "*.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para excluir archivos del proyecto (separados por comas, ej: *.json, " "*.txt)" @@ -9144,13 +9326,12 @@ msgid "Unnamed Project" msgstr "Proyecto Sin Nombre" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importar Proyecto Existente" +msgstr "Proyecto Faltante" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Error: Proyecto faltante en el sistema de archivos." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9250,13 +9431,12 @@ msgstr "" "El contenido de la carpeta de proyecto no 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 "" -"¿Quitar %d proyectos de la lista?\n" -"El contenido de las carpetas de proyecto no será modificado." +"¿Eliminar todos los proyectos faltantes de la lista?\n" +"El contenido de las carpetas del proyecto no se modificará." #: editor/project_manager.cpp msgid "" @@ -9281,9 +9461,8 @@ msgid "Project Manager" msgstr "Gestor de Proyectos" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Proyecto" +msgstr "Proyectos" #: editor/project_manager.cpp msgid "Scan" @@ -9514,6 +9693,10 @@ msgid "Settings saved OK." msgstr "Ajustes guardados satisfactoriamente." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Evento de Acción de Entrada Movido" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Sobreescribir para CaracterÃstica" @@ -9650,6 +9833,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Preseteo..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9817,10 +10004,6 @@ msgstr "A Mayúsculas" msgid "Reset" msgstr "Resetear" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Error" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reemparentar Nodo" @@ -9878,6 +10061,10 @@ msgid "Instance Scene(s)" msgstr "Instanciar Escena(s)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Reemplazar con Escena de Rama" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instanciar Escena Hija" @@ -9920,8 +10107,20 @@ msgid "Make node as Root" msgstr "Convertir nodo en RaÃz" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Eliminar Nodo(s)?" +msgid "Delete %d nodes?" +msgstr "¿Eliminar %d nodos?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "¿Eliminar el nodo raiz \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "¿Eliminar el nodo \"%s\" y sus hijos?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "¿Eliminar nodo \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9944,12 +10143,13 @@ msgstr "" "vuelvan a sus valores por defecto." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Hijos Editables" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Cargar Como Placeholder" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Desactivar \"editable_instance\" causara que todas las propiedades del nodo " +"vuelvan a sus valores por defecto." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9997,9 +10197,8 @@ msgid "Remove Node(s)" msgstr "Quitar Nodo(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Cambiar nombre del puerto de salida" +msgstr "Cambiar tipo de nodo(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -10026,6 +10225,14 @@ msgid "Clear Inheritance" msgstr "Limpiar Herencia" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Hijos Editables" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Cargar Como Placeholder" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Abrir Documentación" @@ -10042,10 +10249,6 @@ msgid "Change Type" msgstr "Cambiar Tipo" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Extender Script" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Reemparentar a Nuevo Nodo" @@ -10122,31 +10325,28 @@ msgid "Node configuration warning:" msgstr "Advertencia de configuración de nodo:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexión/es y grupo/s.\n" +"El nodo tiene %s conexión(es) y %(s) grupo(s).\n" "Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"El nodo tiene conexiones.\n" -"Click para mostrar el panel de señales." +"El nodo tiene %s conexión(es).\n" +"Clic para mostrar el panel de señales." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"El nodo está en un grupo/s.\n" -"Click para mostrar el panel de grupos." +"El nodo está en %s grupo(s).\n" +"Clic para mostrar el panel de grupos." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10242,9 +10442,8 @@ msgid "Error loading script from %s" msgstr "Error al cargar el script desde %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Sobreescribir" +msgstr "Reemplazos(Overrides)" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10291,23 +10490,18 @@ msgid "Will load an existing script file." msgstr "Se cargará un archivo de script existente." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Lenguaje" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Hereda" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nombre de Clase" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Plantilla" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script Integrado (Built-In)" #: editor/script_create_dialog.cpp @@ -10323,26 +10517,54 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Stack Trace" +msgid "Warning:" +msgstr "Advertencia:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Elegir uno o mas items de la lista para mostrar el gráfico." +msgid "Error:" +msgstr "Error:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Error de C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Error de C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Fuente C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Fuente:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Fuente C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Stack Trace" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errores" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Proceso Hijo Conectado" +msgid "Child process connected." +msgstr "Proceso hijo conectado." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Copiar Error" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Saltear Breakpoints" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspeccionar Instancia Previa" @@ -10359,6 +10581,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profiler de Red" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10371,6 +10597,10 @@ msgid "Monitors" msgstr "Monitores" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Elegir uno o mas items de la lista para mostrar el gráfico." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista de Uso de Memoria de Video por Recurso:" @@ -10567,10 +10797,6 @@ msgid "Library" msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Estado" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotecas: " @@ -10579,6 +10805,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Se esperaba un string de longitud 1 (un carácter)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "El argumento step es cero!" @@ -10733,6 +10963,14 @@ msgstr "Ajustes de GridMap" msgid "Pick Distance:" msgstr "Elegir Instancia:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Filtrar meshes" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "Asignar un recurso MeshLibrary a este GridMap para usar sus meshes." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "El nombre de la clase no puede ser una palabra reservada" @@ -10859,28 +11097,28 @@ msgid "Set Variable Type" msgstr "Editar Tipo de Variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "No debe coincidir con el nombre de un tipo built-in ya existente." +msgstr "Reemplazar(Override) una función integrada existente." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Crear un rectángulo nuevo." +msgstr "Crear una nueva función." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variables:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Crear un rectángulo nuevo." +msgstr "Crear una nueva variable." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Señales:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Crear un nuevo polÃgono." +msgstr "Crear una nueva señal." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10907,6 +11145,11 @@ msgid "Add Function" msgstr "Agregar Función" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Eliminar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Agregar Variable" @@ -10915,6 +11158,26 @@ msgid "Add Signal" msgstr "Agregar Señal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Agregar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Añadir puerto de salida" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Eliminar puerto de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Eliminar puerto de salida" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Cambiar Expresión" @@ -10959,10 +11222,20 @@ msgid "Add Preload Node" msgstr "Agregar Nodo Preload" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Agregar Nodo(s) Desde Arbol" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Agregar Propiedad Getter" @@ -10987,6 +11260,11 @@ msgid "Connect Nodes" msgstr "Conectar Nodos" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Desconectar Nodo de Gráfico" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Conectar Datos de Nodos" @@ -11019,6 +11297,28 @@ msgid "Paste VisualScript Nodes" msgstr "Pegar Nodos de VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "No se puede copiar el nodo de función." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Renombrar Función" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Quitar Función" @@ -11039,16 +11339,17 @@ msgid "Editing Signal:" msgstr "Editando Señal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipo Base:" +msgid "Make Tool:" +msgstr "Convertir en Herramienta:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Miembros:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodos Disponibles:" +#, fuzzy +msgid "function_name" +msgstr "Funcion:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11071,6 +11372,16 @@ msgid "Cut Nodes" msgstr "Cortar Nodos" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Renombrar Función" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Refrescar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Editar Miembros" @@ -11172,6 +11483,10 @@ msgid "The package must have at least one '.' separator." msgstr "El paquete debe tener al menos un '.' como separador." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Seleccionar dispositivo de la lista" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Ejecutable ADB no configurado en Configuración del Editor." @@ -11198,10 +11513,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"El proyecto Android no está instalado para la compilación. Instálalo desde " -"el menú Editor." +"La plantilla de exportación de Android no esta instalada en el proyecto. " +"Instalala desde el menú de Proyecto." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11292,6 +11608,10 @@ msgid "Required icon is not specified in the preset." msgstr "El icono requerido no esta especificado en el preset." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Ejecutar en el Navegador" @@ -11967,10 +12287,6 @@ msgstr "" "pueda obtener un tamaño. Alternativamente, haz un RenderTarget y asigna su " "textura interna a algún otro nodo para mostrar." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrada" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Fuente inválida para la vista previa." @@ -11999,6 +12315,65 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice." msgid "Constants cannot be modified." msgstr "Las constantes no pueden modificarse." +#~ msgid "Snap to Grid" +#~ msgstr "Ajustar a la Grilla" + +#~ msgid "Add input +" +#~ msgstr "Añadir entrada +" + +#~ msgid "Language" +#~ msgstr "Lenguaje" + +#~ msgid "Inherits" +#~ msgstr "Hereda" + +#~ msgid "Base Type:" +#~ msgstr "Tipo Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodos Disponibles:" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Properties:" +#~ msgstr "Propiedades:" + +#~ msgid "Methods:" +#~ msgstr "Métodos:" + +#~ msgid "Theme Properties:" +#~ msgstr "Propiedades de Tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeraciones:" + +#~ msgid "Constants:" +#~ msgstr "Constantes:" + +#~ msgid "Class Description:" +#~ msgstr "Descripción de Clase:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descripción de Propiedades:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descripción de Métodos:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Esto instalará el proyecto de Android para compilaciones personalizadas.\n" +#~ "Tené en cuenta que, para usarlo, necesita estar activado por cada preset " +#~ "de exportación." + +#~ msgid "Reverse sorting." +#~ msgstr "Orden inverso." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Eliminar Nodo(s)?" + #~ msgid "No Matches" #~ msgstr "Sin Coincidencias" @@ -12185,9 +12560,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Go to parent folder" #~ msgstr "Ir a carpeta padre" -#~ msgid "Select device from the list" -#~ msgstr "Seleccionar dispositivo de la lista" - #~ msgid "Open Scene(s)" #~ msgstr "Abrir Escena(s)" @@ -12249,9 +12621,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgstr "" #~ "Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado." -#~ msgid "Warnings:" -#~ msgstr "Advertencias:" - #~ msgid "Font Size:" #~ msgstr "Tamaño de TipografÃa:" @@ -12296,9 +12665,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Select a split to erase it." #~ msgstr "Seleccioná una división para borrarla." -#~ msgid "No name provided" -#~ msgstr "No se indicó ningún nombre" - #~ msgid "Add Node.." #~ msgstr "Agregar Nodo.." @@ -12434,12 +12800,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Warning" #~ msgstr "Advertencia" -#~ msgid "Error:" -#~ msgstr "Error:" - -#~ msgid "Function:" -#~ msgstr "Funcion:" - #~ msgid "Variable" #~ msgstr "Variable" @@ -12506,9 +12866,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Connect Graph Nodes" #~ msgstr "Conectar Nodos de Gráfico" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Desconectar Nodo de Gráfico" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Quitar Nodo de Gráfico de Shaders" @@ -12518,9 +12875,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplicar Nodo(s) de Gráfico" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Quitar Nodo(s) de Gráfico de Shaders" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Error: Link de Conección CÃclico" @@ -12969,9 +13323,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Pick New Name and Location For:" #~ msgstr "Elejà un Nuevo Nombre y Ubicación Para:" -#~ msgid "No files selected!" -#~ msgstr "Ningún Archivo seleccionado!" - #~ msgid "Info" #~ msgstr "Info" @@ -13372,12 +13723,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Scaling to %s%%." #~ msgstr "Escalando a %s%%." -#~ msgid "Up" -#~ msgstr "Arriba" - -#~ msgid "Down" -#~ msgstr "Abajo" - #~ msgid "Bucket" #~ msgstr "Balde" @@ -13668,9 +14013,6 @@ msgstr "Las constantes no pueden modificarse." #~ msgid "Group" #~ msgstr "Grupo" -#~ msgid "Samples" -#~ msgstr "Muestras" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de Conversión de Muestras: (archivos .wav):" diff --git a/editor/translations/et.po b/editor/translations/et.po index 1540cf65d0..a7cb86a27f 100644 --- a/editor/translations/et.po +++ b/editor/translations/et.po @@ -57,6 +57,34 @@ msgstr "Kehtetud argumendid '%s' ehitamise jaoks" msgid "On call to '%s':" msgstr "'%' kutsudes:" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Vaba" @@ -321,6 +349,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Loo" @@ -447,14 +476,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Vali Kõik" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Tühista Valik" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -586,7 +610,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -598,6 +622,11 @@ msgstr "" msgid "Copy" msgstr "Kopeeri" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Tühista Valik" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -774,7 +803,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -875,7 +905,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -912,7 +943,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1175,7 +1206,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1366,7 +1397,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1420,7 +1453,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1585,6 +1618,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1655,6 +1689,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1804,6 +1839,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1812,7 +1848,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1820,38 +1856,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1860,19 +1876,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1887,10 +1895,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1901,10 +1905,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1971,8 +1971,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1985,6 +1985,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2525,6 +2567,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2724,10 +2778,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2778,14 +2828,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2803,15 +2849,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2874,6 +2926,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2883,6 +2939,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2911,11 +2971,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3012,6 +3067,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3038,13 +3097,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3692,8 +3744,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3818,7 +3870,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3953,6 +4005,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4119,6 +4177,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4293,7 +4352,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4461,6 +4519,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4666,6 +4726,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4678,10 +4742,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4946,20 +5006,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5049,8 +5116,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5310,6 +5376,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5939,6 +6009,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5994,7 +6068,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6093,6 +6168,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6194,11 +6274,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6278,7 +6358,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6358,6 +6438,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Vali Kõik" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6416,10 +6501,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6739,6 +6820,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6772,6 +6857,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6998,6 +7087,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7046,6 +7139,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7360,6 +7457,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7490,6 +7595,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7644,16 +7754,108 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Kustuta Võti (Võtmed)" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Kustuta Valitud Võti (Võtmed)" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Vali Kõik" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7669,6 +7871,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7877,6 +8083,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8520,12 +8731,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9067,6 +9280,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9203,6 +9420,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9366,10 +9587,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9425,6 +9642,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9465,10 +9686,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Kustuta Võti (Võtmed)" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Kustuta Võti (Võtmed)" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9487,11 +9722,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9565,6 +9798,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9581,10 +9822,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9811,43 +10048,60 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Peegel" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9855,7 +10109,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9863,6 +10117,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9879,6 +10137,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9891,6 +10153,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10087,10 +10353,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10099,6 +10361,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10250,6 +10516,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10385,6 +10659,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10413,6 +10691,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10421,6 +10703,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10461,10 +10759,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10489,6 +10797,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10521,6 +10833,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Loo" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10541,7 +10874,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10549,8 +10882,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funktsioonid:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10573,6 +10907,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funktsioonid:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10667,6 +11010,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10688,7 +11035,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10765,6 +11113,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11302,10 +11654,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/eu.po b/editor/translations/eu.po index 881afb2b7c..6c8834e504 100644 --- a/editor/translations/eu.po +++ b/editor/translations/eu.po @@ -56,6 +56,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -320,6 +348,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -445,13 +474,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -584,7 +608,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -596,6 +620,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -772,7 +800,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -873,7 +902,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -910,7 +940,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1173,7 +1203,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1364,7 +1394,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1418,7 +1450,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1583,6 +1615,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1653,6 +1686,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1800,6 +1834,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1808,7 +1843,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1816,38 +1851,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1856,19 +1871,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1883,10 +1890,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1897,10 +1900,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1967,8 +1966,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1981,6 +1980,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2520,6 +2561,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2719,10 +2772,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2773,14 +2822,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2798,15 +2843,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2869,6 +2920,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2878,6 +2933,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2906,11 +2965,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3007,6 +3061,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3033,13 +3091,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3686,8 +3737,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3812,7 +3863,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3947,6 +3998,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4113,6 +4170,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4287,7 +4345,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4455,6 +4512,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4659,6 +4718,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4671,10 +4734,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4937,20 +4996,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5040,8 +5106,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5301,6 +5366,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5930,6 +5999,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5985,7 +6058,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6084,6 +6158,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6185,11 +6264,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6269,7 +6348,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6349,6 +6428,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6406,10 +6490,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6729,6 +6809,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6762,6 +6846,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6988,6 +7076,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7036,6 +7128,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7350,6 +7446,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7480,6 +7584,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7634,16 +7743,105 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7659,6 +7857,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7867,6 +8069,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8510,12 +8717,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9057,6 +9266,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9193,6 +9406,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9356,10 +9573,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9415,6 +9628,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9455,7 +9672,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9477,11 +9706,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9555,6 +9782,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9571,10 +9806,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9801,43 +10032,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9845,7 +10092,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9853,6 +10100,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9869,6 +10120,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9881,6 +10136,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10077,10 +10336,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10089,6 +10344,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10240,6 +10499,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10375,6 +10642,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10403,6 +10674,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10411,6 +10686,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10451,10 +10742,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10479,6 +10780,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10511,6 +10816,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10531,7 +10856,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10539,7 +10864,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10563,6 +10888,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10657,6 +10990,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10678,7 +11015,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10755,6 +11093,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11292,10 +11634,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/fa.po b/editor/translations/fa.po index 9c919cfa50..fe614abe09 100644 --- a/editor/translations/fa.po +++ b/editor/translations/fa.po @@ -11,12 +11,13 @@ # Behrooz Kashani <bkashani@gmail.com>, 2018. # Mahdi <sadisticwarlock@gmail.com>, 2018. # hpn33 <hamed.hpn332@gmail.com>, 2019. +# Focus <saeeddashticlash@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-07-09 10:47+0000\n" -"Last-Translator: hpn33 <hamed.hpn332@gmail.com>\n" +"PO-Revision-Date: 2019-09-26 11:50+0000\n" +"Last-Translator: Focus <saeeddashticlash@gmail.com>\n" "Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/" "godot/fa/>\n" "Language: fa\n" @@ -24,7 +25,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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -62,15 +63,42 @@ msgstr "نام دارایی ایندکس نامعتبر 's%' در گره s%." #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "شاخص نامگذاری شده \"Ùª s\" برای نوع پایه٪ s نامعتبر است" #: core/math/expression.cpp -#, fuzzy msgid "Invalid arguments to construct '%s'" -msgstr ": آرگومان نوع نامعتبر " +msgstr ": آرگومان نوع نامعتبر آرگومان های نامعتبر برای ساخت 'Ùª s'" #: core/math/expression.cpp msgid "On call to '%s':" +msgstr "در تماس با 'Ùª s':" + +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" msgstr "" #: editor/animation_bezier_editor.cpp @@ -91,7 +119,7 @@ msgstr "زمان:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "" +msgstr "ارزش:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -106,9 +134,8 @@ msgid "Delete Selected Key(s)" msgstr "کلید‌ها را پاک Ú©Ù†" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Add Bezier Point" -msgstr "Ø§ÙØ²ÙˆØ¯Ù† نقطه" +msgstr "Bezier Point را اضاÙÙ‡ کنید" #: editor/animation_bezier_editor.cpp #, fuzzy @@ -176,20 +203,19 @@ msgstr "طول انیمیشن را تغییر بده" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "" +msgstr "ØÙ„قه(loop) انیمیشن را تغییر دهید" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Property Track" -msgstr "ویژگی:" +msgstr "ویژگی مسیر" #: editor/animation_track_editor.cpp msgid "3D Transform Track" -msgstr "" +msgstr "مسیر 3D Transform" #: editor/animation_track_editor.cpp msgid "Call Method Track" -msgstr "" +msgstr "صدا زدن Method Track" #: editor/animation_track_editor.cpp msgid "Bezier Curve Track" @@ -197,21 +223,19 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Audio Playback Track" -msgstr "" +msgstr "مسیر Audio Playback" #: editor/animation_track_editor.cpp msgid "Animation Playback Track" -msgstr "" +msgstr "مسیر پخش Animation" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "طول انیمیشن (به ثانیه)" +msgstr "طول انیمیشن ( frames)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "طول انیمیشن (به ثانیه)" +msgstr "طول انیمیشن (seconds)" #: editor/animation_track_editor.cpp msgid "Add Track" @@ -228,46 +252,43 @@ msgstr "وظایÙ:" #: editor/animation_track_editor.cpp msgid "Audio Clips:" -msgstr "" +msgstr "کلیپ های صوتی:" #: editor/animation_track_editor.cpp msgid "Anim Clips:" -msgstr "" +msgstr "کلیپ های انیمیشن:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Track Path" -msgstr "مقدار آرایه را تغییر بده" +msgstr "تغییرمیسر path" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "" +msgstr "روشن / خاموش کردن این Track." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" -msgstr "" +msgstr "ØØ§Ù„ت بروزرسانی (Ù†ØÙˆÙ‡ تنظیم این ویژگی)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Interpolation Mode" -msgstr "گره انیمیشن" +msgstr "ØØ§Ù„ت درون یابی(درون‌یابی روشی است برای ÛŒØ§ÙØªÙ† مقدار تابع درون یک بازه)" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "" +msgstr "ØØ§Ù„ت بسته بندی ØÙ„قه (انتهای درون قطبی با شروع در ØÙ„قه)" #: editor/animation_track_editor.cpp msgid "Remove this track." msgstr "این ترک را ØØ°Ù Ú©Ù†." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Time (s): " -msgstr "زمان:" +msgstr "زمان(s): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" -msgstr "" +msgstr "Toggle Track Enabled" #: editor/animation_track_editor.cpp msgid "Continuous" @@ -283,11 +304,11 @@ msgstr "تریگر" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "Ú¯Ø±ÙØªÙ†" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "نزدیکترین" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -296,45 +317,40 @@ msgstr "خطی" #: editor/animation_track_editor.cpp msgid "Cubic" -msgstr "" +msgstr "مکعب" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "" +msgstr "رابط گره ØÙ„قه(Loop)" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" -msgstr "" +msgstr "رابط پوشش ØÙ„قه" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "" +msgstr "درج کلید" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Key(s)" -msgstr "تکرار کلید‌های انیمیشن" +msgstr "Ú©Ù¾ÛŒ کردن (Duplicate ) کلید(key)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Delete Key(s)" -msgstr "ØØ°Ù گره(ها)" +msgstr "ØØ°Ù کلید(key)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Update Mode" -msgstr "تغییر مقدار دیکشنری" +msgstr "تغییر ØØ§Ù„ت بروزرسانی انیمیشن" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Interpolation Mode" -msgstr "گره انیمیشن" +msgstr "تغییر ØØ§Ù„ت درون یابی(Interpolation ) انیمیشن" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" -msgstr "ØÙ„قه انیمیشن را تغییر بده" +msgstr "تغییر ØØ§Ù„ت تکررار (Loop) انیمیشن" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -356,6 +372,7 @@ msgstr "ساختن تعداد d% ترک جدید، ودرج کلیدها؟" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "تولید" @@ -365,7 +382,7 @@ msgstr "در انیمیشن درج Ú©Ù†" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." -msgstr "" +msgstr "انیمیشن پلیر نمی تواند خود را انیمیت کند. Ùقط پلیر دیگر." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" @@ -380,18 +397,16 @@ msgid "Anim Insert Key" msgstr "کلید را در انیمیشن درج Ú©Ù†" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "طول انیمیشن را تغییر بده" +msgstr "تغییر گام(Step)انیمیشن" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rearrange Tracks" -msgstr "مسیر به سمت گره:" +msgstr "تنظیم مجدد مسیر" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "" +msgstr "مسیر تبدیل (Transform) Ùقط برای گرههای مبتنی بر مکانی اعمال Ù…ÛŒ شوند." #: editor/animation_track_editor.cpp msgid "" @@ -400,6 +415,10 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"آهنگ های صوتی Ùقط Ù…ÛŒ توانند به گره های نوع (nodes) اشاره کنند\n" +"-AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." @@ -490,15 +509,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "انتخاب همه" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "گره انتخاب" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"یک AnimationPlayer از درخت صØÙ†Ù‡ انتخاب کنید تا انیمیشن‌ها را ویرایش کنید." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -636,8 +651,9 @@ msgid "Scale Ratio:" msgstr "نسبت تغییر مقیاس:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "دارایی Setter را اضاÙÙ‡ Ú©Ù†" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -648,6 +664,11 @@ msgstr "" msgid "Copy" msgstr "Ú©Ù¾ÛŒ کردن" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "گره انتخاب" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -835,7 +856,8 @@ msgstr "اتصال سیگنال:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -943,7 +965,8 @@ msgstr "جستجو:" msgid "Matches:" msgstr "تطبیق‌ها:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -986,7 +1009,7 @@ msgid "Resource" msgstr "منبع" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "مسیر" @@ -1257,7 +1280,7 @@ msgid "Delete Bus Effect" msgstr "ØØ°Ù اثر گذرا" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1456,7 +1479,9 @@ msgid "Add AutoLoad" msgstr "بارگذاری خودکار (AutoLoad) را اضاÙÙ‡ Ú©Ù†" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "مسیر:" @@ -1511,7 +1536,7 @@ msgstr "ساختن پوشه" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "نام:" @@ -1694,6 +1719,7 @@ msgstr "تابع را بساز" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1775,6 +1801,7 @@ msgid "New Folder..." msgstr "ساختن پوشه..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1927,6 +1954,7 @@ msgid "Class:" msgstr "کلاس:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "میراث:" @@ -1935,7 +1963,8 @@ msgid "Inherited by:" msgstr "به ارث رسیده به وسیله:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "خلاصه ØªÙˆØ¶ÛŒØØ§Øª:" #: editor/editor_help.cpp @@ -1943,41 +1972,19 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "روش ها" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "روش ها" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "صاÙÛŒ کردن گره‌ها" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "صاÙÛŒ کردن گره‌ها" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "سیگنال ها:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "شمارش ها" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "شمارش ها:" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1986,21 +1993,12 @@ msgid "Constants" msgstr "ثابت ها" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "ØªÙˆØ¶ÛŒØØ§Øª" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "توضیØ:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -2016,11 +2014,6 @@ msgid "Property Descriptions" msgstr "ØªÙˆØ¶ÛŒØØ§Øª مشخصه:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "ØªÙˆØ¶ÛŒØØ§Øª مشخصه:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2032,11 +2025,6 @@ msgid "Method Descriptions" msgstr "ØªÙˆØ¶ÛŒØØ§Øª" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "توضیØ:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2112,8 +2100,8 @@ msgstr "خروجی:" msgid "Copy Selection" msgstr "برداشتن انتخاب شده" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2127,6 +2115,48 @@ msgstr "پاک کردن" msgid "Clear Output" msgstr "خروجی" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "گره" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2680,6 +2710,19 @@ msgstr "پروژه" msgid "Project Settings..." msgstr "ØªØ±Ø¬ÛŒØØ§Øª پروژه" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "نسخه:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2890,10 +2933,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2947,14 +2986,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "گره" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "خروجی" @@ -2973,15 +3008,21 @@ msgstr "مدیریت صدور قالب ها" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3044,6 +3085,11 @@ msgstr "گشودن ویرایشگر متن" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "زیرمنبع‌ها:" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3054,6 +3100,11 @@ msgstr "" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "باز کردن Ùˆ اجرای یک اسکریپت" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "ویرایش سیگنال" @@ -3083,11 +3134,6 @@ msgstr "وضعیت:" msgid "Edit:" msgstr "ویرایش" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3189,6 +3235,11 @@ msgstr "" msgid "New Script" msgstr "صØÙ†Ù‡ جدید" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "باز کردن Ùˆ اجرای یک اسکریپت" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3216,14 +3267,6 @@ msgstr "چسباندن" msgid "Convert To %s" msgstr "اتصال به گره:" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "گشودن در ویرایشگر" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3916,9 +3959,10 @@ msgstr " پوشه ها" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "بازنشانی بزرگنمایی" #: editor/import_dock.cpp msgid "Reimport" @@ -4047,7 +4091,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4193,6 +4237,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "گشودن در ویرایشگر" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4376,6 +4427,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "انیمیشن ØØ°Ù شود؟" @@ -4560,7 +4612,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4738,6 +4789,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4952,6 +5005,10 @@ msgid "All" msgstr "همه" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "وارد کردن" @@ -4965,11 +5022,6 @@ msgid "Sort:" msgstr "مرتب‌سازی:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "در ØØ§Ù„ درخواست..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "طبقه‌بندی:" @@ -5252,20 +5304,29 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "انتخاب ØØ§Ù„ت" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "یک Breakpoint درج Ú©Ù†" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "یک Breakpoint درج Ú©Ù†" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5360,8 +5421,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5631,6 +5691,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6281,6 +6345,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6336,7 +6404,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6446,6 +6515,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "صاÙÛŒ کردن گره‌ها" @@ -6556,11 +6630,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6646,7 +6720,7 @@ msgstr "صØÙ†Ù‡ جدید" msgid "Connections to method:" msgstr "اتصال به گره:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "منبع" @@ -6732,6 +6806,11 @@ msgstr "ØØ°Ù Ú©Ù†" msgid "Cut" msgstr "بریدن" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "انتخاب همه" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -6794,10 +6873,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "ÛŒØ§ÙØªÙ†" @@ -7138,6 +7213,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "غلطاندن به پایین." + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7172,6 +7252,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7407,6 +7491,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7459,6 +7547,11 @@ msgstr "(خالی)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "ØØ±Ú©Øª دادن گره(ها)" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "گره انیمیشن" @@ -7794,6 +7887,15 @@ msgid "Enable Priority" msgstr "ویرایش صاÙÛŒ ها" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "صاÙÛŒ کردن گره‌ها" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7938,6 +8040,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "ØØ°Ù نقطهٔ منØÙ†ÛŒ" @@ -8114,20 +8221,119 @@ msgstr "" msgid "TileSet" msgstr "صدور مجموعه کاشی" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Ø§ÙØ²ÙˆØ¯Ù† نقطه" +msgid "Commit" +msgstr "انجمن" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "ساختن %s جدید" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "تغییر بده" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "تغییر نام" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "ØØ°Ù Ú©Ù†" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "تغییر بده" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "انتخاب شده را ØØ°Ù Ú©Ù†" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "انتخاب همه" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "تغییر بده" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +#, fuzzy +msgid "Status" +msgstr "وضعیت:" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "خروجی" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8141,6 +8347,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "نمونه ها" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "Ø§ÙØ²ÙˆØ¯Ù† عمل ورودی" @@ -8368,6 +8579,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9024,12 +9240,14 @@ msgstr "منابع برای صدور:" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9599,6 +9817,11 @@ msgid "Settings saved OK." msgstr "تنظیمات با موÙقیت ذخیره شد." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "ØØ°Ù رویداد عمل ورودی" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9738,6 +9961,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9912,10 +10139,6 @@ msgstr "" msgid "Reset" msgstr "بازنشانی بزرگنمایی" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "گره تغییر والد" @@ -9971,6 +10194,11 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "ذخیرهٔ شاخه به عنوان صØÙ†Ù‡" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "ارث‌بری صØÙ†Ù‡Ù” ÙØ±Ø²Ù†Ø¯" @@ -10012,8 +10240,22 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "ØØ°Ù گره(ها)ØŸ" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "ØØ°Ù گره(ها)" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "ØØ°Ù گره(ها)" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10034,12 +10276,10 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "ÙØ±Ø²Ù†Ø¯ قابل ویرایش" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "بارگیری به عنوان جانگهدار" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10121,6 +10361,14 @@ msgid "Clear Inheritance" msgstr "پاک کردن ارث‌بری" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "ÙØ±Ø²Ù†Ø¯ قابل ویرایش" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "بارگیری به عنوان جانگهدار" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "شمارش ها" @@ -10140,11 +10388,6 @@ msgstr "تغییر نوع" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "باز کردن Ùˆ اجرای یک اسکریپت" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "گره تغییر والد" @@ -10391,27 +10634,19 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -#, fuzzy -msgid "Inherits" -msgstr "میراث:" - -#: editor/script_create_dialog.cpp #, fuzzy -msgid "Class Name" +msgid "Class Name:" msgstr "کلاس:" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "برداشتن انتخاب شده" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "باز کردن Ùˆ اجرای یک اسکریپت" #: editor/script_create_dialog.cpp #, fuzzy @@ -10428,11 +10663,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "بازتاب" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "خطاهای بارگذاری" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "خطاهای بارگذاری" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "منبع" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "منبع" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "منبع" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10440,8 +10705,9 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "اتصال قطع شده" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10449,6 +10715,11 @@ msgid "Copy Error" msgstr "خطاهای بارگذاری" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "ØØ°Ù Ú©Ù†" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10465,6 +10736,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "صدور پروژه" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10477,6 +10753,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10678,11 +10958,6 @@ msgid "Library" msgstr "صادکردن ÙØ§ÛŒÙ„ کتابخانه ای" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy -msgid "Status" -msgstr "وضعیت:" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10691,6 +10966,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "آرگومان step ØµÙØ± است!" @@ -10857,6 +11136,15 @@ msgstr "ØªØ±Ø¬ÛŒØØ§Øª" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ØØ§Ù„ت صاÙÛŒ:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11007,6 +11295,10 @@ msgid "Create a new variable." msgstr "ساختن %s جدید" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "سیگنال ها:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "انتخاب شده را تغییر مقیاس بده" @@ -11036,6 +11328,11 @@ msgid "Add Function" msgstr "Ø§ÙØ²ÙˆØ¯Ù† وظیÙÙ‡" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "برداشتن نقطه" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Ø§ÙØ²ÙˆØ¯Ù† متغیر" @@ -11045,6 +11342,26 @@ msgstr "Signal را اضاÙÙ‡ Ú©Ù†" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Add Input Port" +msgstr "Ø§ÙØ²ÙˆØ¯Ù† عمل ورودی" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Ø§ÙØ²ÙˆØ¯Ù† عمل ورودی" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "برداشتن نقطه" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "برداشتن نقطه" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Change Expression" msgstr "انتقال را در انیمیشن تغییر بده" @@ -11087,10 +11404,20 @@ msgid "Add Preload Node" msgstr "Ø§ÙØ²ÙˆØ¯Ù† گره" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "گره(ها) را از درخت اضاÙÙ‡ Ú©Ù†" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Ø§ÙØ²ÙˆØ¯Ù† ویژگی Ø¯Ø±ÛŒØ§ÙØªâ€ŒÚ©Ù†Ù†Ø¯Ù‡" @@ -11116,6 +11443,11 @@ msgstr "اتصال گره‌ها" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "اتصال گره‌ها" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "اتصال گره‌ها" @@ -11150,6 +11482,27 @@ msgid "Paste VisualScript Nodes" msgstr "مسیر به سمت گره:" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "تغییر نام نقش" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "برداشتن نقش" @@ -11170,16 +11523,18 @@ msgid "Editing Signal:" msgstr "ویرایش سیگنال:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "نوع پایه:" +#, fuzzy +msgid "Make Tool:" +msgstr "Ù…ØÙ„ÛŒ" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "عضوها:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "گره های موجود:" +#, fuzzy +msgid "function_name" +msgstr "وظایÙ:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11205,6 +11560,15 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "تغییر نام نقش" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "عضوها" @@ -11305,6 +11669,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11326,7 +11694,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11406,6 +11775,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12024,10 +12397,6 @@ msgstr "" "تا بتواند یک اندازه بگیرد. در غیر اینصورت، آن را یک RenderTarget قرار دهید Ùˆ " "Ø¨Ø§ÙØª داخلی آن را برای نمایش به تعدادی گره تخصیص دهید." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12060,6 +12429,50 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Add input +" +#~ msgstr "Ø§ÙØ²ÙˆØ¯Ù† نقطه" + +#, fuzzy +#~ msgid "Inherits" +#~ msgstr "میراث:" + +#~ msgid "Base Type:" +#~ msgstr "نوع پایه:" + +#~ msgid "Available Nodes:" +#~ msgstr "گره های موجود:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "روش ها" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "صاÙÛŒ کردن گره‌ها" + +#~ msgid "Enumerations:" +#~ msgstr "شمارش ها:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "توضیØ:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "ØªÙˆØ¶ÛŒØØ§Øª مشخصه:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "توضیØ:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "در ØØ§Ù„ درخواست..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "ØØ°Ù گره(ها)ØŸ" + +#, fuzzy #~ msgid "Error: could not load file." #~ msgstr "نمی‌تواند یک پوشه ایجاد شود." @@ -12503,9 +12916,6 @@ msgstr "" #~ msgid "at least 6 characters" #~ msgstr "کاراکترهای معتبر:" -#~ msgid "Samples" -#~ msgstr "نمونه ها" - #~ msgid "BakedLightInstance does not contain a BakedLight resource." #~ msgstr "BakedLightInstance Ù…ØØªÙˆÛŒ یک منبع BakedLight نیست." diff --git a/editor/translations/fi.po b/editor/translations/fi.po index 9905d85038..cad94fd55c 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-08-04 14:23+0000\n" +"PO-Revision-Date: 2019-10-04 03:15+0000\n" "Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n" "Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/" "godot/fi/>\n" @@ -22,7 +22,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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -64,6 +64,34 @@ msgstr "Virheelliset argumentit rakenteelle '%s'" msgid "On call to '%s':" msgstr "Kutsuttaessa funktiota '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Vapauta" @@ -328,6 +356,7 @@ msgstr "Luo %d uutta raitaa ja lisää avaimet?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Luo" @@ -465,14 +494,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Varoitus: muokataan tuotua animaatiota" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Valitse kaikki" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Tyhjennä valinta" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Valitse AnimationPlayer solmu luodaksesi ja muokataksesi animaatioita." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -604,7 +628,8 @@ msgid "Scale Ratio:" msgstr "Skaalaussuhde:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Valitse kopioitavat raidat:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -616,6 +641,11 @@ msgstr "Valitse kopioitavat raidat:" msgid "Copy" msgstr "Kopioi" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Tyhjennä valinta" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Lisää ääniraidan leike" @@ -653,14 +683,12 @@ msgid "Replaced %d occurrence(s)." msgstr "Korvattu %d osuvuutta." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Löydettiin %d osuma(a)." +msgstr "%d osuma." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Löydettiin %d osuma(a)." +msgstr "%d osumaa." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -797,7 +825,8 @@ msgstr "Ei voida yhdistää signaalia" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -898,7 +927,8 @@ msgstr "Hae:" msgid "Matches:" msgstr "Osumat:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -939,7 +969,7 @@ msgid "Resource" msgstr "Resurssi" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Polku" @@ -1112,19 +1142,17 @@ msgid "License" msgstr "Lisenssi" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Kolmannen osapuolen lisenssi" +msgstr "Kolmannen osapuolen lisenssit" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot moottori käyttää useita kolmannen osapuolen ilmaisia ja avoimia " +"Godot-pelimoottori käyttää useita kolmannen osapuolen ilmaisia ja avoimia " "kirjastoja, jotka kaikki ovat yhteensopivia sen MIT lisenssin kanssa. " "Seuraava tyhjentävä listaus sisältää kaikki tällaiset kolmannen osapuolen " "komponentit ja niiden vastaavat tekijänoikeustiedot ja käyttöoikeusehdot." @@ -1142,9 +1170,8 @@ msgid "Licenses" msgstr "Lisenssit" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Virhe avattaessa pakettitiedostoa, ei zip-muodossa." +msgstr "Virhe avattaessa pakettitiedostoa, ei ZIP-muodossa." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1212,8 +1239,8 @@ msgid "Delete Bus Effect" msgstr "Poista väylän efekti" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Ääniväylä, tartu ja vedä järjestelläksesi uudelleen." +msgid "Drag & drop to rearrange." +msgstr "Vedä ja pudota järjestelläksesi uudelleen." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1406,7 +1433,9 @@ msgid "Add AutoLoad" msgstr "Lisää automaattisesti ladattava" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Polku:" @@ -1460,7 +1489,7 @@ msgstr "Luo kansio" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nimi:" @@ -1637,6 +1666,7 @@ msgstr "Aseta nykyiseksi" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Uusi" @@ -1707,6 +1737,7 @@ msgid "New Folder..." msgstr "Uusi kansio..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Päivitä" @@ -1855,6 +1886,7 @@ msgid "Class:" msgstr "Luokka:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Perii:" @@ -1863,46 +1895,26 @@ msgid "Inherited by:" msgstr "Perivät:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Lyhyt kuvaus:" +msgid "Brief Description" +msgstr "Lyhyt kuvaus" #: editor/editor_help.cpp msgid "Properties" msgstr "Ominaisuudet" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Ominaisuudet:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metodit" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metodit:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Teeman ominaisuudet" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Teeman ominaisuudet:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signaalit:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeraatiot" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeraatiot:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1911,20 +1923,12 @@ msgid "Constants" msgstr "Vakiot" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Vakiot:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Luokan kuvaus" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Luokan kuvaus:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Online-oppaat:" +msgid "Online Tutorials" +msgstr "Online-oppaat" #: editor/editor_help.cpp msgid "" @@ -1941,10 +1945,6 @@ msgid "Property Descriptions" msgstr "Ominaisuuksien kuvaukset" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Ominaisuuksien kuvaukset:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1957,10 +1957,6 @@ msgid "Method Descriptions" msgstr "Metodien kuvaukset" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Metodien kuvaukset:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2029,8 +2025,8 @@ msgstr "Tuloste:" msgid "Copy Selection" msgstr "Kopioi valinta" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2043,10 +2039,51 @@ msgstr "Tyhjennä" msgid "Clear Output" msgstr "Tyhjennä tuloste" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Pysäytä" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Aloita" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Alas" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Ylös" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Solmu" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Tuleva RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "Tuleva RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "Lähtevä RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "Lähtevä RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Ikkuna" +msgstr "Uusi ikkuna" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2374,9 +2411,8 @@ msgid "Close Scene" msgstr "Sulje skene" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Sulje skene" +msgstr "Avaa uudelleen suljettu skene" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2486,9 +2522,8 @@ msgid "Close Tab" msgstr "Sulje välilehti" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Sulje välilehti" +msgstr "Peruuta välilehden sulkeminen" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2621,19 +2656,28 @@ msgid "Project" msgstr "Projekti" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Projektin asetukset" +msgstr "Projektin asetukset..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Versionhallinta" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Määritä versionhallinta" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Sammuta versionhallinta" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Vie" +msgstr "Vie..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Asenna Androidin käännösmalli" +msgstr "Asenna Androidin käännösmalli..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2644,9 +2688,8 @@ msgid "Tools" msgstr "Työkalut" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Irrallisten resurssien hallinta" +msgstr "Irrallisten resurssien hallinta..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2748,9 +2791,8 @@ msgid "Editor" msgstr "Editori" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Editorin asetukset" +msgstr "Editorin asetukset..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2785,14 +2827,12 @@ msgid "Open Editor Settings Folder" msgstr "Avaa editorin asetuskansio" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Hallinnoi editorin ominaisuuksia" +msgstr "Hallinnoi editorin ominaisuuksia..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Hallinnoi vientimalleja" +msgstr "Hallinnoi vientimalleja..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2848,10 +2888,6 @@ msgstr "Keskeytä skene" msgid "Stop the scene." msgstr "Lopeta skenen suorittaminen." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Pysäytä" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Käynnistä muokattavana oleva skene." @@ -2902,14 +2938,10 @@ msgid "Inspector" msgstr "Tarkastelu" #: editor/editor_node.cpp -msgid "Node" -msgstr "Solmu" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Laajenna alapaneeli" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Tuloste" @@ -2927,22 +2959,33 @@ msgstr "Hallinnoi malleja" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Tämä asentaa Android-projektin mukautettuja käännöksiä varten.\n" -"Huomaa, että käyttääksesi sitä, se täytyy ottaa käyttöön kussakin " -"vientiesiasetuksessa." +"Tämä valmistelee projektisi mukautettuja Android-käännöksiä varten " +"asentamalla lähdemallin hakemistoon \"res://android/build\".\n" +"Voit sen jälkeen soveltaa muunnoksia ja kääntää oman räätälöidyn APK:n " +"vientiin (lisäten moduuleja, muuttaen AndroidManifest.xml tiedostoa, jne.)\n" +"Huomaa, että tehdäksesi mukautettuja käännöksiä esikäännetyn APK:n " +"käyttämisen sijaan, \"Use Custom Build\" valinnan tulee olla päällä Android-" +"viennin esiasetuksissa." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"Androidin käännösmalli on jo asennettu, eikä sitä ylikirjoiteta.\n" -"Poista \"build\" hakemisto käsin ennen kuin yrität tätä toimenpidettä " -"uudelleen." +"Androidin käännösmalli on jo asennettu tähän projektiin, eikä sitä " +"ylikirjoiteta.\n" +"Poista \"res://android/build\" hakemisto käsin ennen kuin yrität tätä " +"toimenpidettä uudelleen." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3004,6 +3047,10 @@ msgstr "Avaa seuraava editori" msgid "Open the previous Editor" msgstr "Avaa edellinen editori" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Aliresursseja ei löydetty." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Luodaan meshien esikatseluita" @@ -3013,6 +3060,10 @@ msgid "Thumbnail..." msgstr "Pienoiskuva..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Pääskripti:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Muokkaa liitännäistä" @@ -3041,11 +3092,6 @@ msgstr "Tila:" msgid "Edit:" msgstr "Muokkaa:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Aloita" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Mittaa:" @@ -3151,6 +3197,10 @@ msgstr "Valitse näyttöruutu" msgid "New Script" msgstr "Uusi skripti" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Laajenna skriptiä" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Uusi %s" @@ -3177,13 +3227,6 @@ msgstr "Liitä" msgid "Convert To %s" msgstr "Muunna muotoon %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Avaa editori" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Valittu solmu ei ole Viewport!" @@ -3262,7 +3305,6 @@ msgid "Import From Node:" msgstr "Tuo solmusta:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Lataa uudelleen" @@ -3281,7 +3323,7 @@ msgstr "Lataa" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Viralliset vientimallit eivät ole saatavilla kehityskäännöksille." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3364,23 +3406,20 @@ msgid "Download Complete." msgstr "Lataus valmis." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Teemaa ei voi tallentaa tiedostoon:" +msgstr "Väliaikaista tiedosta ei voida poistaa:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Vientimallien asennus epäonnistui. Ongelmallisten vientimallien arkisto " -"löytyy kohteesta '%s'." +"Vientimallien asennus epäonnistui.\n" +"Ongelmallisten vientimallien arkisto löytyy kohteesta '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Virhe pyydettäessä osoitetta: " +msgstr "Virhe pyydettäessä osoitetta:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3566,9 +3605,8 @@ msgid "Move To..." msgstr "Siirrä..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Uusi skene" +msgstr "Uusi skene..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3636,9 +3674,8 @@ msgid "Overwrite" msgstr "Ylikirjoita" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Luo skenestä" +msgstr "Luo skene" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3679,7 +3716,7 @@ msgstr "Korvaa..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "Peru" +msgstr "Peruuta" #: editor/find_in_files.cpp msgid "Find: " @@ -3718,21 +3755,18 @@ msgid "Invalid group name." msgstr "Virheellinen ryhmän nimi." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Hallinnoi ryhmiä" +msgstr "Nimeä ryhmä uudelleen" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Poista asettelu" +msgstr "Poista ryhmä" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Ryhmät" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Ryhmään kuulumattomat solmut" @@ -3747,12 +3781,11 @@ msgstr "Ryhmään kuuluvat solmut" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Tyhjät ryhmät poistetaan automaattisesti." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Skriptieditori" +msgstr "Ryhmäeditori" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3852,9 +3885,9 @@ msgstr " Tiedostot" msgid "Import As:" msgstr "Tuo nimellä:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Esiasetus..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Esiasetukset" #: editor/import_dock.cpp msgid "Reimport" @@ -3963,9 +3996,8 @@ msgid "MultiNode Set" msgstr "Aseta usealle solmulle" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Valitse solmu, jonka signaaleja ja ryhmiä haluat muokata." +msgstr "Valitse yksittäinen solmu muokataksesi sen signaaleja ja ryhmiä." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -3983,7 +4015,7 @@ msgstr "Liitännäisen nimi:" msgid "Subfolder:" msgstr "Alikansio:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Kieli:" @@ -4125,6 +4157,12 @@ msgstr "Piste" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Avaa editori" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Avaa animaatiosolmu" @@ -4296,6 +4334,7 @@ msgid "Change Animation Name:" msgstr "Vaihda animaation nimi:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Poista animaatio?" @@ -4470,7 +4509,6 @@ msgstr "Animaation nimi:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Virhe!" @@ -4643,6 +4681,8 @@ msgid "Current:" msgstr "Nykyinen:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Lisää syöte" @@ -4743,37 +4783,32 @@ msgid "Request failed, return code:" msgstr "Pyyntö epäonnistui, virhekoodi:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Pyyntö epäonnistui." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Teemaa ei voi tallentaa tiedostoon:" +msgstr "Vastausta ei voida tallentaa tiedostoon:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Kirjoitusvirhe." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Pyyntö epäonnistui, liikaa uudelleenohjauksia" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Loputon uudelleenohjaus." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Pyyntö epäonnistui, virhekoodi:" +msgstr "Pyyntö epäonnistui, aikakatkaisu" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Aika" +msgstr "Aikakatkaisu." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4853,24 +4888,22 @@ msgid "All" msgstr "Kaikki" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Tuo uudelleen..." +msgstr "Tuo..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Liitännäiset" +msgstr "Liitännäiset..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Lajittele:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Käännä lajittelu." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategoria:" @@ -4880,9 +4913,8 @@ msgid "Site:" msgstr "Sivu:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Tuki..." +msgstr "Tuki" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4893,9 +4925,8 @@ msgid "Testing" msgstr "Testaus" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Lataa..." +msgstr "Ladataan..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5063,9 +5094,8 @@ msgid "Paste Pose" msgstr "Liitä asento" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Poista luut" +msgstr "Poista apuviivat" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5153,23 +5183,34 @@ msgid "Pan Mode" msgstr "Panorointitila" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Viivaintila" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Aseta tarttuminen." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Käytä tarttumista" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Tarttumisen asetukset" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Aseta tarttuminen." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +#, fuzzy +msgid "Use Grid Snap" msgstr "Tartu ruudukkoon" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Tarttumisen asetukset" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "Tartu käännettäessä" @@ -5256,8 +5297,8 @@ msgid "View" msgstr "Näytä" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Näytä ruudukko" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5524,6 +5565,11 @@ msgstr "Aseta käyrälle lineaarinen tangentti" msgid "Hold Shift to edit tangents individually" msgstr "Pidä shift pohjassa muokataksesi tangentteja yksitellen" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Oikea painallus: poista piste" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Kehitä GI Probe" @@ -5802,26 +5848,23 @@ msgstr "Luontiaika (s):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Geometrian tahkot eivät sisällä mitään alaa." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Solmulta puuttuu geometria (tahkot)." +msgstr "Geometria ei sisällä yhtään tahkoja." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" ei periydy Spatial solmusta." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Solmu ei sisällä geometriaa." +msgstr "\"%s\" ei sisällä geometriaa." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Solmu ei sisällä geometriaa." +msgstr "\"%s\" ei sisällä tahkogeometriaa." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6166,6 +6209,10 @@ msgid "Grid" msgstr "Ruudukko" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Näytä ruudukko" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Määrittele ruudukko:" @@ -6221,7 +6268,8 @@ msgstr "Ilmentymä:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tyyppi:" @@ -6259,9 +6307,8 @@ msgid "Error writing TextFile:" msgstr "Virhe kirjoitettaessa teksitiedostoa:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Ruutua ei löytynyt:" +msgstr "Ei voitu ladata tiedostoa:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6284,7 +6331,6 @@ msgid "Error Importing" msgstr "Virhe tuonnissa" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Uusi tekstitiedosto..." @@ -6322,6 +6368,11 @@ msgid "Find Next" msgstr "Etsi seuraava" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Etsi edellinen" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Suodata skriptejä" @@ -6366,9 +6417,8 @@ msgid "Open..." msgstr "Avaa..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Avaa skripti" +msgstr "Avaa uudelleen suljettu skripti" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6424,14 +6474,14 @@ msgid "Toggle Scripts Panel" msgstr "Näytä/piilota skriptipaneeli" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Siirry seuraavaan" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Siirry sisään" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Siirry seuraavaan" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Keskeytä" @@ -6503,15 +6553,14 @@ msgid "Search Results" msgstr "Haun tulokset" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Tyhjennä viimeisimmät skenet" +msgstr "Tyhjennä viimeisimmät skriptit" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Yhteydet metodiin:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Lähde" @@ -6547,7 +6596,7 @@ msgstr "Vain tiedostojärjestelmän resursseja voi raahata ja pudottaa." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "Haettava symboli" +msgstr "Hae symboli" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" @@ -6592,6 +6641,11 @@ msgstr "Keskeytyskohdat" msgid "Cut" msgstr "Leikkaa" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Valitse kaikki" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Poista rivi" @@ -6629,9 +6683,8 @@ msgid "Complete Symbol" msgstr "Täydennä symboli" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Skaalaa valintaa" +msgstr "Laske valinnan tulos" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6650,10 +6703,6 @@ msgid "Auto Indent" msgstr "Automaattinen sisennys" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Etsi edellinen" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Etsi tiedostoista..." @@ -6939,9 +6988,8 @@ msgid "Audio Listener" msgstr "Äänikuuntelija" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Kytke suodatus" +msgstr "Kytke Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -6976,6 +7024,11 @@ msgid "Freelook Speed Modifier" msgstr "Liikkumisen nopeussäädin" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Liikkumisen nopeussäädin" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6997,7 +7050,7 @@ msgstr "Tarraa solmut lattiaan" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Ei löydetty kiinteää lattiaa, johon kohdistaa valinta." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7010,9 +7063,12 @@ msgstr "" "Alt + Hiiren oikea painike: Syvyyslistan valinta" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Paikallisavaruuden tila (%s)" +msgstr "Käytä paikallisavaruutta" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Käytä tarttumista" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7109,9 +7165,8 @@ msgstr "Näytä ruudukko" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Asetukset" +msgstr "Asetukset..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7242,6 +7297,11 @@ msgid "Simplification: " msgstr "Yksinkertaistus: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Suurrennus (pikseleissä): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Suurrennus (pikseleissä): " @@ -7290,6 +7350,10 @@ msgid "(empty)" msgstr "(tyhjä)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Siirrä ruutua" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animaatiot:" @@ -7487,12 +7551,10 @@ msgid "Submenu" msgstr "Alivalikko" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" msgstr "Osanen 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" msgstr "Osanen 2" @@ -7606,17 +7668,26 @@ msgid "Enable Priority" msgstr "Ota prioriteetti käyttöön" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Suodata ruutuja" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" +"Anna tälle ruutukartalle (TileMap) ruutuvalikoimaresurssi (TileSet) " +"käyttääksesi sen ruutuja." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Maalaa ruutu" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+Hiiren oikea: Piirrä viiva\n" -"Shift+Ctrl+Hiiren oikea: Suorakaidemaalaus" +"Shift+Hiiren vasen: Piirrä viiva\n" +"Shift+Ctrl+Hiiren vasen: Suorakaidemaalaus" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7739,6 +7810,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Näytä ruutujen nimet (pidä Alt-näppäin pohjassa)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Lisää tai valitse tekstuuri vasemmasta paneelista muokataksesi siihen " +"sidottuja ruutuja." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Poista valittu tekstuuri? Tämä poistaa kaikki ruudut, jotka käyttävät sitä." @@ -7909,16 +7987,108 @@ msgstr "Tätä ominaisuutta ei voi muuttaa." msgid "TileSet" msgstr "Ruutuvalikoima" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "VCS-lisäosia ei ole saatavilla." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Virhe" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Muutosviestiä ei annettu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Tiedostoja ei ole lisätty valmisteluun" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Vahvista muutos" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "VCS-lisäosaa ei ole alustettu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Versionhallintajärjestelmä" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Alusta" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Valmistelualue" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Havaitse uudet muutokset" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Muutokset" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Muutettu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Nimetty uudelleen" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Poistettu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Tyyppimuunnos" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Valmistele valitut" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Valmistele kaikki" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Lisää muutosviesti" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Vahvista muutokset" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Tila" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"Katso tiedostojen eroavaisuudet ennen niiden vahvistamista viimeisimpään " +"versioon" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Mitään tiedostovertailua ei ole aktiivisena" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Havaitse muutokset tiedostovertailussa" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Vain GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Lisää tulo +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Lisää lähtö +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7934,6 +8104,11 @@ msgid "Boolean" msgstr "Totuusarvo" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Lisää Sample" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Lisää tuloportti" @@ -8015,9 +8190,8 @@ msgid "Light" msgstr "Valo" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Luo Shader solmu" +msgstr "Näytä syntyvä sävytinkoodi." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8146,6 +8320,12 @@ msgstr "" "Palauttaa liitetyn vektorin, jos annettu totuusarvo on tosi tai epätosi." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Palauttaa liitetyn skalaarin, jos annettu totuusarvo on tosi tai epätosi." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Palauttaa kahden parametrin vertailun totuusarvon." @@ -8383,7 +8563,6 @@ msgid "Returns the square root of the parameter." msgstr "Palauttaa parametrin neliöjuuren." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8398,13 +8577,12 @@ msgstr "" "polynomeilla." #: 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 "" -"Step function( scalar(edge), scalar(x) ).\n" +"Step-funktio( skalaari(edge), skalaari(x) ).\n" "\n" "Palauttaa 0.0, jos 'x' on pienempi kuin 'edge', ja muuten 1.0." @@ -8575,9 +8753,8 @@ msgid "Linear interpolation between two vectors." msgstr "Kahden vektorin välinen lineaari-interpolaatio." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Kahden vektorin välinen lineaari-interpolaatio." +msgstr "Kahden vektorin välinen lineaari-interpolaatio skalaarilla." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8604,7 +8781,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Palauttaa vektorin, joka osoittaa taittumisen suuntaan." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8619,7 +8795,6 @@ msgstr "" "polynomeilla." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8634,7 +8809,6 @@ msgstr "" "polynomeilla." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8645,7 +8819,6 @@ msgstr "" "Palauttaa 0.0, jos 'x' on pienempi kuin 'edge', ja muutoin 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8707,6 +8880,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Mukautettu Godotin sävytinkielen lauseke, joka sijoitetaan syntyvän " +"sävyttimen alkuun. Voit lisätä siihen erilaisia funktiomäärityksiä ja kutsua " +"niitä myöhemmin Expressions-osuudessa. Voit myös esitellä siinä varyingejä, " +"uniformeja ja vakioita." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8859,15 +9036,19 @@ msgid "Resources to export:" msgstr "Vietävät resurssit:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Suodattimet tiedostojen viemiseen jotka eivät ole resursseja (esim. *.json, " "*.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Suodattimet tiedostoille jotka jätetään projektista pois (esim. *.json, *." "txt)" @@ -9100,13 +9281,12 @@ msgid "Unnamed Project" msgstr "Nimetön projekti" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Tuo olemassaoleva projekti" +msgstr "Puuttuva projekti" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Virhe: projekti puuttuu tiedostojärjestelmästä." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9203,12 +9383,11 @@ msgstr "" "Projektikansion sisältöä ei muuteta." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Poista %d projektia listalta?\n" +"Poista kaikki puuttuvat projektit listalta?\n" "Projektikansioiden sisältöjä ei muuteta." #: editor/project_manager.cpp @@ -9233,9 +9412,8 @@ msgid "Project Manager" msgstr "Projektinhallinta" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projekti" +msgstr "Projektit" #: editor/project_manager.cpp msgid "Scan" @@ -9466,6 +9644,10 @@ msgid "Settings saved OK." msgstr "Asetukset tallennettu onnistuneesti." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Siirretty syötetoiminnon tapahtuma" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Ominaisuuden ohitus" @@ -9602,6 +9784,10 @@ msgid "Plugins" msgstr "Liitännäiset" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Esiasetus..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Nolla" @@ -9769,10 +9955,6 @@ msgstr "Isoiksi kirjaimiksi" msgid "Reset" msgstr "Palauta" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Virhe" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Vaihda solmun isäntää" @@ -9830,12 +10012,16 @@ msgid "Instance Scene(s)" msgstr "Luo ilmentymä skenestä tai skeneistä" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Korvaa skenehaaralla" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Luo aliskenen ilmentymä" #: editor/scene_tree_dock.cpp msgid "Clear Script" -msgstr "Tyhjennä skripti" +msgstr "Poista skripti" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." @@ -9874,8 +10060,20 @@ msgid "Make node as Root" msgstr "Tee solmusta juurisolmu" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Poista solmu(t)?" +msgid "Delete %d nodes?" +msgstr "Poista %d solmua?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Poista juurisolmu \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Poista solmu \"%s\" ja sen alisolmut?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Poista solmu \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9898,12 +10096,13 @@ msgstr "" "solmun ominaisuudet oletusarvoihin." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Muokattavat alisolmut" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Lataa paikanpitäjäksi" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"\"editable_instance\" ominaisuuden poistaminen käytöstä palauttaa kaikki " +"solmun ominaisuudet oletusarvoihin." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9935,11 +10134,11 @@ msgstr "Toinen solmu" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "Ei voida käyttää ulkopuolisen skenen solmuja!" +msgstr "Ei voida suorittaa ulkopuolisen skenen solmuille!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "Ei voida käyttää solmuja, joista nykyinen skene periytyy!" +msgstr "Ei voida suorittaa solmuille, joista nykyinen skene periytyy!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -9950,9 +10149,8 @@ msgid "Remove Node(s)" msgstr "Poista solmu(t)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Vaihda lähtöportin nimi" +msgstr "Vaihda solmujen tyyppiä" #: editor/scene_tree_dock.cpp msgid "" @@ -9979,6 +10177,14 @@ msgid "Clear Inheritance" msgstr "Poista perintä" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Muokattavat alisolmut" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Lataa paikanpitäjäksi" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Avaa dokumentaatio" @@ -9995,10 +10201,6 @@ msgid "Change Type" msgstr "Muuta tyyppiä" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Laajenna skriptiä" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Vaihda solmulle uusi isäntä" @@ -10075,30 +10277,27 @@ msgid "Node configuration warning:" msgstr "Solmun konfiguroinnin varoitus:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Solmulla on yhteyksiä ja ryhmiä.\n" +"Solmulla on %s yhteyttä ja %s ryhmää.\n" "Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Solmulla on liitäntöjä.\n" +"Solmulla on %s liitäntää.\n" "Napsauta näyttääksesi signaalitelakan." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Solmu kuuluu ryhmään.\n" +"Solmu kuuluu %s ryhmään.\n" "Napsauta näyttääksesi ryhmätelakan." #: editor/scene_tree_editor.cpp @@ -10194,9 +10393,8 @@ msgid "Error loading script from %s" msgstr "Virhe ladattaessa skripti %s:stä" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Ylikirjoita" +msgstr "Ylikirjoittaa" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10243,23 +10441,18 @@ msgid "Will load an existing script file." msgstr "Lataa olemassaolevan skriptitiedoston." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Kieli" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Perii" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Luokan nimi" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Malli" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Sisäänrakennettu skripti" #: editor/script_create_dialog.cpp @@ -10275,26 +10468,54 @@ msgid "Bytes:" msgstr "Tavu(j)a:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Pinojäljitys" +msgid "Warning:" +msgstr "Varoitus:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Valitse yksi tai useampi kohde listasta näyttääksesi graafin." +msgid "Error:" +msgstr "Virhe:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "C++ virhe" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "C++ virhe:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "C++ lähdekoodi" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Lähdekoodi:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "C++ lähdekoodi:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Pinojäljitys" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Virheet" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Aliprosessi yhdistetty" +msgid "Child process connected." +msgstr "Aliprosessi yhdistetty." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Kopioi virhe" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Sivuuta keskeytyskohdat" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Tarkastele edellistä ilmentymää" @@ -10311,6 +10532,10 @@ msgid "Profiler" msgstr "Profiloija" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Verkkoprofiloija" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitoroija" @@ -10323,6 +10548,10 @@ msgid "Monitors" msgstr "Monitoroijat" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Valitse yksi tai useampi kohde listasta näyttääksesi graafin." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista näyttömuistin käytöstä resurssikohtaisesti:" @@ -10519,10 +10748,6 @@ msgid "Library" msgstr "Kirjasto" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Tila" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Kirjastot: " @@ -10531,6 +10756,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Odotettiin yhden mittaista merkkijonoa (yhtä merkkiä)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Askeleen argumentti on nolla!" @@ -10686,6 +10915,15 @@ msgstr "Ruudukon asetukset" msgid "Pick Distance:" msgstr "Poimintaetäisyys:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Suodata meshejä" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"Anna MeshLibrary resurssi tälle GridMap solmulle käyttääksesi sen meshejä." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Luokan nimi ei voi olla varattu avainsana" @@ -10811,30 +11049,28 @@ msgid "Set Variable Type" msgstr "Aseta muuttujan tyyppi" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "" -"Ei saa mennä päällekkäin olemassa olevan sisäänrakennetun tyypin nimen " -"kanssa." +msgstr "Ylikirjoita olemassa oleva sisäänrakennettu funktio." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Luo uusi suorakulmio." +msgstr "Luo uusi funktio." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Muuttujat:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Luo uusi suorakulmio." +msgstr "Luo uusi muuttuja." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signaalit:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Luo uusi polygoni." +msgstr "Luo uusi signaali." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10861,6 +11097,11 @@ msgid "Add Function" msgstr "Lisää funktio" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Poista tuloportti" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Lisää muuttuja" @@ -10869,6 +11110,26 @@ msgid "Add Signal" msgstr "Lisää signaali" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Lisää tuloportti" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Lisää lähtöportti" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Poista tuloportti" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Poista lähtöportti" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Vaihda lauseketta" @@ -10914,10 +11175,20 @@ msgid "Add Preload Node" msgstr "Lisää esiladattu solmu" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Lisää solmut puusta" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Lisää palauttajaominaisuus" @@ -10942,6 +11213,11 @@ msgid "Connect Nodes" msgstr "Kytke solmut" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Erota graafin solmut" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Kytke solmun data" @@ -10974,6 +11250,28 @@ msgid "Paste VisualScript Nodes" msgstr "Liitä VisualScript solmut" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Ei voida kopioida funktiosolmua." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Nimeä funktio uudelleen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Poista funktio" @@ -10994,16 +11292,17 @@ msgid "Editing Signal:" msgstr "Muokataan signaalia:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Kantatyyppi:" +msgid "Make Tool:" +msgstr "Tee työkalu:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Jäsenet:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Saatavilla olevat solmut:" +#, fuzzy +msgid "function_name" +msgstr "Funktio:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11026,6 +11325,16 @@ msgid "Cut Nodes" msgstr "Leikkaa solmut" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Nimeä funktio uudelleen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Päivitä" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Muokkaa jäsentä" @@ -11123,6 +11432,10 @@ msgid "The package must have at least one '.' separator." msgstr "Paketilla on oltava ainakin yksi '.' erotinmerkki." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Valitse laite listasta" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "ADB käynnistystiedostoa ei ole määritetty editorin asetuksissa." @@ -11149,9 +11462,10 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Android-projektia ei ole asennettu kääntämistä varten. Asenna se Editori-" +"Android-käännösmallia ei ole asennettu projektiin. Asenna se Projekti-" "valikosta." #: platform/android/export/export.cpp @@ -11237,6 +11551,10 @@ msgid "Required icon is not specified in the preset." msgstr "Vaadittavaa ikonia ei ole määritetty esiasetuksissa." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Suorita selaimessa" @@ -11898,10 +12216,6 @@ msgstr "" "saada koon. Muutoin tee siitä RenderTarget ja aseta sen sisäinen tekstuuri " "johonkin solmuun näkyväksi." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Syöte" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Virheellinen lähde esikatselulle." @@ -11930,6 +12244,65 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa." msgid "Constants cannot be modified." msgstr "Vakioita ei voi muokata." +#~ msgid "Snap to Grid" +#~ msgstr "Tartu ruudukkoon" + +#~ msgid "Add input +" +#~ msgstr "Lisää tulo +" + +#~ msgid "Language" +#~ msgstr "Kieli" + +#~ msgid "Inherits" +#~ msgstr "Perii" + +#~ msgid "Base Type:" +#~ msgstr "Kantatyyppi:" + +#~ msgid "Available Nodes:" +#~ msgstr "Saatavilla olevat solmut:" + +#~ msgid "Input" +#~ msgstr "Syöte" + +#~ msgid "Properties:" +#~ msgstr "Ominaisuudet:" + +#~ msgid "Methods:" +#~ msgstr "Metodit:" + +#~ msgid "Theme Properties:" +#~ msgstr "Teeman ominaisuudet:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeraatiot:" + +#~ msgid "Constants:" +#~ msgstr "Vakiot:" + +#~ msgid "Class Description:" +#~ msgstr "Luokan kuvaus:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Ominaisuuksien kuvaukset:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Metodien kuvaukset:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Tämä asentaa Android-projektin mukautettuja käännöksiä varten.\n" +#~ "Huomaa, että käyttääksesi sitä, se täytyy ottaa käyttöön kussakin " +#~ "vientiesiasetuksessa." + +#~ msgid "Reverse sorting." +#~ msgstr "Käännä lajittelu." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Poista solmu(t)?" + #~ msgid "No Matches" #~ msgstr "Ei osumia" @@ -12170,9 +12543,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Go to parent folder" #~ msgstr "Siirry yläkansioon" -#~ msgid "Select device from the list" -#~ msgstr "Valitse laite listasta" - #~ msgid "Open Scene(s)" #~ msgstr "Avaa skene tai skenejä" @@ -12233,9 +12603,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Luo valituista skeneistä ilmentymä valitun solmun alle." -#~ msgid "Warnings:" -#~ msgstr "Varoitukset:" - #~ msgid "Font Size:" #~ msgstr "Fontin koko:" @@ -12277,9 +12644,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Select a split to erase it." #~ msgstr "Valitse jako poistaaksesi sen." -#~ msgid "No name provided" -#~ msgstr "Nimeä ei annettu" - #~ msgid "Add Node.." #~ msgstr "Lisää solmu..." @@ -12415,12 +12779,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Warning" #~ msgstr "Varoitus" -#~ msgid "Error:" -#~ msgstr "Virhe:" - -#~ msgid "Function:" -#~ msgstr "Funktio:" - #~ msgid "Variable" #~ msgstr "Muuttuja" @@ -12487,9 +12845,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Connect Graph Nodes" #~ msgstr "Yhdistä graafin solmut" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Erota graafin solmut" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Poista sävytingraafin solmu" @@ -12499,9 +12854,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Kahdenna graafin solmut(t)" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Poista sävytingraafin solmuja" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Virhe: syklinen kytkentä" @@ -12887,9 +13239,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "Pick New Name and Location For:" #~ msgstr "Valitse uusi nimi ja sijainti:" -#~ msgid "No files selected!" -#~ msgstr "Ei valittuja tiedostoja!" - #~ msgid "Info" #~ msgstr "Tietoja" @@ -13126,9 +13475,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "ERROR: Couldn't load sample!" #~ msgstr "VIRHE: Samplea ei voitu ladata!" -#~ msgid "Add Sample" -#~ msgstr "Lisää Sample" - #~ msgid "Rename Sample" #~ msgstr "Nimeä Sample uudelleen" @@ -13141,12 +13487,6 @@ msgstr "Vakioita ei voi muokata." #~ msgid "8 Bits" #~ msgstr "8 bittiä" -#~ msgid "Up" -#~ msgstr "Ylös" - -#~ msgid "Down" -#~ msgstr "Alas" - #~ msgid "Bucket" #~ msgstr "Sanko" diff --git a/editor/translations/fil.po b/editor/translations/fil.po index c089099228..11a3f7c0a4 100644 --- a/editor/translations/fil.po +++ b/editor/translations/fil.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2019-08-11 10:23+0000\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" "Last-Translator: Marco Santos <enum.scima@gmail.com>\n" "Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/" "godot/fil/>\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " "|| n % 10 == 6 || n % 10 == 9);\n" -"X-Generator: Weblate 3.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -35,12 +35,12 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "Invalid na input %i (hindi pinasa) sa ekspresyon" +msgstr "Invalid na input %i (hindi ipinasa) sa expression" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" -"Hindi magagamit ang self dahil ang instance ay naka-null (hindi pinasa)" +"Hindi magagamit ang self dahil ang instance ay naka-null (hindi ipinasa)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -62,6 +62,34 @@ msgstr "Mga invalid na argument para i-construct ang '%s'" msgid "On call to '%s':" msgstr "On call sa '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Malaya" @@ -84,7 +112,7 @@ msgstr "Halaga:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "Mag-insert ng Key Rito" +msgstr "Mag-insert ng Key dito" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" @@ -116,15 +144,15 @@ msgstr "I-anim ang Oras ng Pagbago ng Keyframe" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "I-anim ang Transisyon ng Pagbago" +msgstr "I-anim ang Transition ng Pagbago" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "" +msgstr "I-anim ang Pagbabago sa Transform" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "" +msgstr "I-anim ang Halaga ng Keyframe na Binago" #: editor/animation_track_editor.cpp msgid "Anim Change Call" @@ -326,6 +354,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -451,13 +480,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -590,7 +614,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -602,6 +626,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -778,7 +806,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -879,7 +908,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -916,7 +946,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1179,7 +1209,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1370,7 +1400,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1424,7 +1456,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1589,6 +1621,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1659,6 +1692,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1806,6 +1840,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1814,7 +1849,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1822,38 +1857,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1862,19 +1877,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1889,10 +1896,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1903,10 +1906,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1973,8 +1972,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1987,6 +1986,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2526,6 +2567,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2725,10 +2778,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2780,14 +2829,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2805,15 +2850,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2876,6 +2927,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2885,6 +2940,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2913,11 +2972,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3014,6 +3068,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3040,13 +3098,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3693,8 +3744,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3819,7 +3870,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3954,6 +4005,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4120,6 +4177,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4294,7 +4352,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4462,6 +4519,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4667,6 +4726,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4679,10 +4742,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4946,20 +5005,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5049,8 +5115,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5312,6 +5377,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5942,6 +6011,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5997,7 +6070,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6096,6 +6170,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6197,11 +6276,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6281,7 +6360,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6361,6 +6440,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6418,10 +6502,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6741,6 +6821,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6774,6 +6858,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7000,6 +7088,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7048,6 +7140,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7362,6 +7458,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7493,6 +7597,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7647,16 +7756,106 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Burahin ang (mga) Napiling Key" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7672,6 +7871,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7880,6 +8083,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8524,12 +8732,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9071,6 +9281,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9207,6 +9421,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9370,10 +9588,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9429,6 +9643,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9469,7 +9687,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9491,11 +9721,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9569,6 +9797,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9585,10 +9821,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9815,43 +10047,60 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Salamin" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9859,7 +10108,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9867,6 +10116,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9883,6 +10136,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9895,6 +10152,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10091,10 +10352,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10103,6 +10360,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10254,6 +10515,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10389,6 +10658,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10417,6 +10690,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10425,6 +10702,25 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Idagdag Ang Bezier Point" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Ilipat Ang Mga Bezier Points" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Ilipat Ang Mga Bezier Points" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10465,10 +10761,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10493,6 +10799,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10525,6 +10835,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10545,7 +10875,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10553,7 +10883,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10577,6 +10907,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10671,6 +11009,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10692,7 +11034,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10769,6 +11112,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11306,10 +11653,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/fr.po b/editor/translations/fr.po index efa3da542a..cecaead406 100644 --- a/editor/translations/fr.po +++ b/editor/translations/fr.po @@ -61,12 +61,18 @@ # Ducoté <Raphalielle@gmail.com>, 2019. # Corentin Pacaud Boehm <corentin.pacaudboehm@gmail.com>, 2019. # Kentarosan <jacquin.yannis@gmail.com>, 2019. +# Julien Deswaef <julien+weblate@xuv.be>, 2019. +# AMIOT David <david.amiot@live.fr>, 2019. +# Fabrice <fabricecipolla@gmail.com>, 2019. +# Romain Paquet <titou.paquet@gmail.com>, 2019. +# Xavier Sellier <contact@binogure-studio.com>, 2019. +# Sofiane <Sofiane-77@caramail.fr>, 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: Kentarosan <jacquin.yannis@gmail.com>\n" +"PO-Revision-Date: 2019-10-06 08:48+0000\n" +"Last-Translator: Sofiane <Sofiane-77@caramail.fr>\n" "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/" "godot/fr/>\n" "Language: fr\n" @@ -114,7 +120,35 @@ msgstr "Arguments invalides pour construire '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "Sur appel à '%s' :" +msgstr "Lors de l'appel à '%s' :" + +#: core/ustring.cpp +msgid "B" +msgstr "Octet" + +#: core/ustring.cpp +msgid "KiB" +msgstr "Kio" + +#: core/ustring.cpp +msgid "MiB" +msgstr "Mio" + +#: core/ustring.cpp +msgid "GiB" +msgstr "Gio" + +#: core/ustring.cpp +msgid "TiB" +msgstr "Tio" + +#: core/ustring.cpp +msgid "PiB" +msgstr "Pio" + +#: core/ustring.cpp +msgid "EiB" +msgstr "Eio" #: editor/animation_bezier_editor.cpp msgid "Free" @@ -194,25 +228,24 @@ msgstr "Changer la transition de l'animation" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Transform" -msgstr "Changer le Transform" +msgstr "Changer le Transform de l'animation" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Value" msgstr "Changer la valeur de l'image-clé de l'animation" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" msgstr "Changer l'appel de l'animation" #: editor/animation_track_editor.cpp msgid "Change Animation Length" -msgstr "Modifier la longueur de l'animation" +msgstr "Modifier la durée de l'animation" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "Modifier la boucle d'animation" +msgstr "Changer la boucle d'animation" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -339,7 +372,7 @@ msgstr "Envelopper l'interp. de la boucle" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "Insérer une clé" +msgstr "Insérer clés" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" @@ -381,6 +414,7 @@ msgstr "Créer %d NOUVELLES pistes et insérer des clés ?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Créer" @@ -528,14 +562,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Avertissement : Édition d'une animation importée" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Tout sélectionner" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Tout désélectionner" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Sélectionnez un nÅ“ud AnimationPlayer pour créer et modifier des animations." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -586,7 +616,7 @@ msgstr "Mettre à l'échelle la sélection" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "Mettre à l’échelle à partir du curseur" +msgstr "Agrandir/Rétrécir à partir du curseur" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" @@ -669,7 +699,8 @@ msgid "Scale Ratio:" msgstr "Ratio d'échelle :" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Sélectionner les pistes à copier :" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -681,6 +712,11 @@ msgstr "Sélectionner les pistes à copier :" msgid "Copy" msgstr "Copier" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Tout Désélectionner" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Ajouter un clip audio" @@ -718,12 +754,10 @@ msgid "Replaced %d occurrence(s)." msgstr "%d occurrence(s) remplacée(s)." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." msgstr "%d correspondance(s) trouvée(s)." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." msgstr "%d correspondance(s) trouvée(s)." @@ -863,7 +897,8 @@ msgstr "Impossible de connecter le signal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -964,7 +999,8 @@ msgstr "Rechercher :" msgid "Matches:" msgstr "Correspondances :" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -1005,7 +1041,7 @@ msgid "Resource" msgstr "Ressource" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Chemin" @@ -1179,22 +1215,20 @@ msgid "License" msgstr "Licence" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Licences tierce partie" +msgstr "Licences tierces" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Le moteur Godot s'appuie sur un certain nombre de bibliothèques libres et " -"open source tierces, toutes compatibles avec les termes de sa licence MIT. " -"Voici une liste exhaustive de ces composants tiers avec leurs énoncés de " -"droits d'auteur respectifs ainsi que les termes de leurs licences." +"Le moteur Godot s'appuie sur un certain nombre de bibliothèques tierces " +"libres et open source , toutes compatibles avec les termes de sa licence " +"MIT. Voici une liste exhaustive de ces composants tiers avec leurs énoncés " +"de droits d'auteur respectifs ainsi que les termes de leurs licences." #: editor/editor_about.cpp msgid "All Components" @@ -1209,9 +1243,8 @@ msgid "Licenses" msgstr "Licences" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Erreur d'ouverture de paquetage, pas au format zip." +msgstr "Erreur d'ouverture de paquetage, pas au format ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1224,7 +1257,7 @@ msgstr "Paquetage installé avec succès !" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "Succès !" +msgstr "Ça marche !" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" @@ -1279,8 +1312,8 @@ msgid "Delete Bus Effect" msgstr "Supprimer l'effet de transport" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Bus audio, glisser-déposer pour réorganiser." +msgid "Drag & drop to rearrange." +msgstr "Glisser-déposer pour réorganiser." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1417,7 +1450,7 @@ msgstr "" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." msgstr "" -"Ne doit pas entrer en conflit avec un nom de type existant intégré au moteur." +"Ne doit pas être en conflit avec un nom de type existant intégré au moteur." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing global constant name." @@ -1469,10 +1502,12 @@ msgstr "Pas dans le chemin de la ressource." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "Ajouter l'AutoLoad" +msgstr "Ajouter le chargement automatique" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Chemin :" @@ -1526,7 +1561,7 @@ msgstr "Créer un dossier" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nom :" @@ -1702,6 +1737,7 @@ msgstr "Rendre actuel" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nouveau" @@ -1772,6 +1808,7 @@ msgid "New Folder..." msgstr "Nouveau dossier..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Rafraîchir" @@ -1921,6 +1958,7 @@ msgid "Class:" msgstr "Classe :" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Hérite de :" @@ -1929,46 +1967,26 @@ msgid "Inherited by:" msgstr "Héritée par :" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Brève description :" +msgid "Brief Description" +msgstr "Brève description" #: editor/editor_help.cpp msgid "Properties" msgstr "Propriétés" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propriétés :" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Méthodes" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Méthodes :" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propriétés du thème" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propriétés du thème :" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signaux :" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Énumérations" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Recensements :" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum_ " @@ -1977,20 +1995,12 @@ msgid "Constants" msgstr "Constantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constantes :" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Description de la classe" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Description de la classe :" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutoriels en ligne :" +msgid "Online Tutorials" +msgstr "Tutoriels en ligne" #: editor/editor_help.cpp msgid "" @@ -2007,10 +2017,6 @@ msgid "Property Descriptions" msgstr "Description des propriétés" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Description des propriétés :" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2023,10 +2029,6 @@ msgid "Method Descriptions" msgstr "Descriptions des méthodes" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descriptions des méthode :" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2095,8 +2097,8 @@ msgstr "Sortie :" msgid "Copy Selection" msgstr "Copier la sélection" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2109,9 +2111,51 @@ msgstr "Effacer" msgid "Clear Output" msgstr "Effacer la sortie" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Arrêter" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Démarrer" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Descendre" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Monter" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "NÅ“ud" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Entrées RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET entrant" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC sortant" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET sortant" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Nouvelle Fenêtre" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2448,9 +2492,8 @@ msgid "Close Scene" msgstr "Fermer la scène" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Fermer la scène" +msgstr "Réouvrir la scène fermée" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2574,9 +2617,8 @@ msgid "Close Tab" msgstr "Fermer l'onglet" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Fermer l'onglet" +msgstr "Annuler \"fermer l'onglet\"" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2709,19 +2751,28 @@ msgid "Project" msgstr "Projet" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Paramètres du projet" +msgstr "Paramètres du projet..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Contrôle de version" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Configurer le contrôle de version" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Arrêter le contrôle de version" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Exporter" +msgstr "Exporter..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Installer un modèle de compilation Android" +msgstr "Installer un modèle de compilation Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2732,9 +2783,8 @@ msgid "Tools" msgstr "Outils" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Explorateur de ressources orphelines" +msgstr "Explorateur de ressources orphelines..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2839,9 +2889,8 @@ msgid "Editor" msgstr "Éditeur" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Paramètres de l'éditeur" +msgstr "Paramètres de l'éditeur..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2877,14 +2926,12 @@ msgid "Open Editor Settings Folder" msgstr "Ouvrir le dossier des paramètres de l'éditeur" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Gérer les fonctionnalités de l'éditeur" +msgstr "Gérer les fonctionnalités de l'éditeur..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Gérer les modèles d'exportation" +msgstr "Gérer les modèles d'exportation..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2940,10 +2987,6 @@ msgstr "Mettre en pause la scène" msgid "Stop the scene." msgstr "Arrêter la scène." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Arrêter" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Lancer la scène actuellement en cours d'édition." @@ -2994,14 +3037,10 @@ msgid "Inspector" msgstr "Inspecteur" #: editor/editor_node.cpp -msgid "Node" -msgstr "NÅ“ud" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Développez le panneau inférieur" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Sortie" @@ -3021,22 +3060,33 @@ msgstr "Gérer les modèles" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Ceci va installer le projet Android pour des compilations personnalisées.\n" -"Notez que pour l'utiliser, vous devez l'activer pour chaque préréglage " -"d'exportation." +"Ceci configurera votre projet pour des compilations Android personnalisées " +"en installant le modèle source dans \"res://android/build\".\n" +"Vous pouvez ensuite appliquer des modifications et créer votre propre APK " +"personnalisé à l'exportation (ajout de modules, modification du fichier " +"AndroidManifest.xml, etc.).\n" +"Notez que pour faire des compilations personnalisées au lieu d'utiliser des " +"APKs pré-construits, l'option \"Use Custom Build\" doit être activée dans le " +"Preset d'exportation Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "Le modèle de build Android est déjà installé et ne va pas être remplacé.\n" -"Supprimez le répertoire « build » manuellement avant de retenter cette " -"opération." +"Supprimez le répertoire « res://android/build » manuellement avant de " +"retenter cette opération." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3098,6 +3148,10 @@ msgstr "Ouvrir l'éditeur suivant" msgid "Open the previous Editor" msgstr "Ouvrir l'éditeur précédant" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Aucune sous-ressource n'a été trouvée." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Création des prévisualisations des maillages" @@ -3107,6 +3161,10 @@ msgid "Thumbnail..." msgstr "Aperçu…" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Script principal :" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Modifier le Plugin" @@ -3135,11 +3193,6 @@ msgstr "État :" msgid "Edit:" msgstr "Modifier :" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Démarrer" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Mesure :" @@ -3245,6 +3298,10 @@ msgstr "Choisissez un Viewport" msgid "New Script" msgstr "Nouveau script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Hériter d'un script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nouveau %s" @@ -3271,13 +3328,6 @@ msgstr "Coller" msgid "Convert To %s" msgstr "Convertir en %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Ouvrir l'éditeur" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Le nÅ“ud sélectionné n'est pas un Viewport !" @@ -3356,7 +3406,6 @@ msgid "Import From Node:" msgstr "Importer à partir d'un nÅ“ud :" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Télécharger à nouveau" @@ -3376,6 +3425,8 @@ msgstr "Télécharger" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Les modèles d'exportation officiels ne sont pas disponibles pour les " +"versions de développement." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3459,23 +3510,20 @@ msgid "Download Complete." msgstr "Téléchargement terminé." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Impossible d'enregistrer le thème dans le fichier :" +msgstr "Impossible de supprimer le fichier temporaire :" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"L'installation des modèles a échoué. Les archives des modèles posant " -"problème peuvent être trouvées à « %s »." +"L'installation des modèles a échoué.\n" +"Les archives des modèles problématiques se trouvent dans '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Erreur lors de la requête de l’URL : " +msgstr "Erreur lors de la demande de l’URL :" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3664,9 +3712,8 @@ msgid "Move To..." msgstr "Déplacer vers…" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nouvelle scène" +msgstr "Nouvelle scène..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3735,9 +3782,8 @@ msgid "Overwrite" msgstr "Écraser" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Créer depuis la scène" +msgstr "Créer une scène" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3817,23 +3863,20 @@ msgid "Invalid group name." msgstr "Nom de groupe invalide." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Gérer les groupes" +msgstr "Renommer le groupe" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Supprimer la disposition" +msgstr "Supprimer le groupe" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Groupes" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "NÅ“uds non groupés" +msgstr "Noeuds hors du groupe" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3846,12 +3889,11 @@ msgstr "NÅ“uds groupés" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Les groupes vides seront automatiquement supprimés." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Éditeur de Script" +msgstr "Editeur de groupe" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3924,8 +3966,7 @@ msgstr "Impossible de charger le script de post-importation :" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" -"Script de post-importation invalide ou corrompu (vérifiez la console) :" +msgstr "Script de post-importation invalide ou cassé (vérifier la console) :" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" @@ -3951,9 +3992,9 @@ msgstr " Fichiers" msgid "Import As:" msgstr "Importer comme :" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Pré-réglage…" +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Pré-réglage" #: editor/import_dock.cpp msgid "Reimport" @@ -4061,9 +4102,8 @@ msgid "MultiNode Set" msgstr "Ensemble multi-nÅ“ud" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Sélectionnez un nÅ“ud pour modifier les signaux et groupes." +msgstr "Sélectionnez un seul nÅ“ud pour éditer ses signaux et groupes." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4081,7 +4121,7 @@ msgstr "Nom du plugin :" msgid "Subfolder:" msgstr "Sous-dossier :" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Langage :" @@ -4225,6 +4265,12 @@ msgstr "Point" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Ouvrir l'éditeur" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Ouvrir le NÅ“ud Animation" @@ -4400,6 +4446,7 @@ msgid "Change Animation Name:" msgstr "Modifier le nom de l'animation :" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Supprimer l'animation ?" @@ -4575,7 +4622,6 @@ msgstr "Nom de l'animation :" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Erreur !" @@ -4749,12 +4795,14 @@ msgid "Current:" msgstr "Actuel :" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Ajouter une entrée" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "Réinitialiser la progression automatique" +msgstr "Effacer l'avance automatique" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" @@ -4849,37 +4897,32 @@ msgid "Request failed, return code:" msgstr "La requête a échoué, code retourné :" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "Échec de la requête." +msgstr "La requête a échoué." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Impossible d'enregistrer le thème dans le fichier :" +msgstr "Impossible d'enregistrer la réponse dans :" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Erreur d'écriture." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "La requête a échoué, trop de redirections" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Boucle de Redirection." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "La requête a échoué, code retourné :" +msgstr "La requête a échoué, délai dépassé" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Temps" +msgstr "Délai dépassé." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4958,24 +5001,22 @@ msgid "All" msgstr "Tout" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Importer" +msgstr "Importer..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Extensions" +msgstr "Extensions..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Trier :" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Tri inverse." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Catégorie :" @@ -4985,9 +5026,8 @@ msgid "Site:" msgstr "Site :" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Support…" +msgstr "Support" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4998,9 +5038,8 @@ msgid "Testing" msgstr "En période de test" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Charger..." +msgstr "Chargement..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5169,9 +5208,8 @@ msgid "Paste Pose" msgstr "Coller la pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Effacer les os" +msgstr "Effacé Guides" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5259,23 +5297,34 @@ msgid "Pan Mode" msgstr "Mode navigation" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Mode Règle" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Activer/Désactiver le magnétisme." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Aligner sur la grille" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Options de magnétisme" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Activer/Désactiver le magnétisme." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +#, fuzzy +msgid "Use Grid Snap" msgstr "Aimanter à la grille" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Options de magnétisme" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "Rotation alignée" @@ -5328,7 +5377,7 @@ msgstr "Verrouiller l'objet sélectionné (il ne pourra plus être déplacé)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "Déverouiller l'objet sélectionné (il pourra être déplacé de nouveau)." +msgstr "Déverrouiller l'objet sélectionné (il pourra être déplacé de nouveau)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5362,8 +5411,8 @@ msgid "View" msgstr "Affichage" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Afficher la grille" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5437,7 +5486,7 @@ msgstr "Auto insertion de clé" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "Insérer une clé (pistes existantes)" +msgstr "Insérer clé (pistes existantes)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" @@ -5630,6 +5679,11 @@ msgstr "Basculer vers tangente linéaire de courbe" msgid "Hold Shift to edit tangents individually" msgstr "Maintenez Maj. appuyée pour modifier les tangentes individuellement" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Clic droit : Supprimer un point" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Créer sonde IG (Illumination Globale)" @@ -5814,19 +5868,19 @@ msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "Pas de surface source spécifiée." +msgstr "Aucune source de surface spécifiée." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "La surface source est invalide (chemin non valide)." +msgstr "La source de surface est invalide (chemin non valide)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "La surface source est invalide (pas de géométrie)." +msgstr "La source de surface est invalide (pas de géométrie)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "La surface source est invalide (pas de faces)." +msgstr "La source de surface est invalide (pas de faces)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" @@ -5838,11 +5892,11 @@ msgstr "Sélectionnez une surface cible :" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "Peupler la surface" +msgstr "Remplir la surface" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" -msgstr "Peupler la MultiMesh" +msgstr "Remplir la MultiMesh" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" @@ -5914,26 +5968,23 @@ msgstr "Temps de Génération (sec) :" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Les faces de la géométrie ne contiennent aucune zone." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Le nÅ“ud ne contient pas de géométrie (faces)." +msgstr "Le maillage ne comporte aucune faces." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" n'hérite pas de Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Le nÅ“ud ne contient pas de géométrie." +msgstr "\"%s\" ne contient pas de géométrie." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Le nÅ“ud ne contient pas de géométrie." +msgstr "Le maillage \"%s\" ne contient aucunes faces." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6279,6 +6330,10 @@ msgid "Grid" msgstr "Grille" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Afficher la grille" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurer la grille :" @@ -6334,7 +6389,8 @@ msgstr "Instance :" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Type :" @@ -6372,9 +6428,8 @@ msgid "Error writing TextFile:" msgstr "Erreur lors de l'écriture du fichier texte :" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Erreur de chargement de fichier." +msgstr "Le fichier suivant n'a pas pu être chargé :" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6397,7 +6452,6 @@ msgid "Error Importing" msgstr "Erreur d'importation" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Nouveau fichier texte..." @@ -6435,6 +6489,11 @@ msgid "Find Next" msgstr "Correspondance suivante" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Correspondance précédente" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtrer les scripts" @@ -6479,9 +6538,8 @@ msgid "Open..." msgstr "Ouvrir..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Ouvrir un script" +msgstr "Réouvrir le script fermé" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6537,14 +6595,14 @@ msgid "Toggle Scripts Panel" msgstr "Afficher/Cacher le panneau des scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Sortir" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Rentrer" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Sortir" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Mettre en pause" @@ -6616,15 +6674,14 @@ msgid "Search Results" msgstr "Résultats de recherche" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Effacer la liste des scènes récentes" +msgstr "Effacer la liste des scripts récents" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Connexions à la méthode :" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Source" @@ -6706,6 +6763,11 @@ msgstr "Point d'arrêts" msgid "Cut" msgstr "Couper" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Tout sélectionner" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Supprimer ligne" @@ -6743,9 +6805,8 @@ msgid "Complete Symbol" msgstr "Compléter le symbole" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Mettre à l'échelle la sélection" +msgstr "Évaluer la sélection" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6764,10 +6825,6 @@ msgid "Auto Indent" msgstr "Indentation automatique" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Correspondance précédente" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Rechercher dans les fichiers…" @@ -7055,9 +7112,8 @@ msgid "Audio Listener" msgstr "Écouteur audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Activer le filtrage" +msgstr "Activer l'effet Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7092,6 +7148,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificateur de vitesse de la vue libre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificateur de vitesse de la vue libre" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7114,7 +7175,7 @@ msgstr "Aligner les nÅ“uds au sol" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "N'a pas pu trouvé de sol solide pour y attacher la sélection." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7127,9 +7188,12 @@ msgstr "" "Alt+Bouton droit : Sélection détaillée par liste" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Mode d'échelle local (%s)" +msgstr "Utiliser l'espace local" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Aligner sur la grille" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7198,7 +7262,7 @@ msgstr "2 vues" #: editor/plugins/spatial_editor_plugin.cpp msgid "2 Viewports (Alt)" -msgstr "2 vues (alt.)" +msgstr "2 vues (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports" @@ -7206,7 +7270,7 @@ msgstr "3 vues" #: editor/plugins/spatial_editor_plugin.cpp msgid "3 Viewports (Alt)" -msgstr "3 vues (alt.)" +msgstr "3 vues (Alt)" #: editor/plugins/spatial_editor_plugin.cpp msgid "4 Viewports" @@ -7226,9 +7290,8 @@ msgstr "Afficher la grille" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Paramètres" +msgstr "Paramètres..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7361,6 +7424,11 @@ msgid "Simplification: " msgstr "Simplification : " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Croissance (Pixels) : " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Croissance (Pixels) : " @@ -7409,6 +7477,10 @@ msgid "(empty)" msgstr "(vide)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Déplacer le cadre" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animations :" @@ -7438,11 +7510,11 @@ msgstr "Ajouter des trames depuis une feuille de Sprite" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "Insérer vide (avant)" +msgstr "Insérer vide (Avant)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "Insérer vide (après)" +msgstr "Insérer vide (Après)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (Before)" @@ -7599,21 +7671,19 @@ msgstr "Item radio coché" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "Séparateur nommé." #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" msgstr "Sous-menu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Élément 1" +msgstr "Sous-élément 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Élément 2" +msgstr "Sous-élément 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7725,17 +7795,24 @@ msgid "Enable Priority" msgstr "Activer la priorité" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtrer les tuiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Donnez une ressource TileSet à cette TileMap pour utiliser ses tuiles." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Peindre la case" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift + Clic droit : Dessiner une ligne\n" -"Shift + Ctrl + Clic droit : Dessiner un rectangle" +"Shift + Clic gauche : Dessiner une ligne\n" +"Shift + Ctrl + Clic gauche : Dessiner un rectangle" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7859,6 +7936,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Afficher les noms des tuiles (maintenez Alt enfoncé)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Ajoutez ou sélectionnez une texture sur le panneau de gauche pour modifier " +"les tuiles qui lui sont liées." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Supprimer la texture sélectionnée ? Cela entraînera la suppression de toutes " @@ -7909,15 +7993,15 @@ msgid "Delete polygon." msgstr "Supprimer le polygone." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." msgstr "" -"Bouton gauche : Activer le bit.\n" -"Bouton droit : Désactiver le bit.\n" +"Bouton gauche de la souris : Activer le bit.\n" +"Bouton droit de la souris : Désactiver le bit.\n" +"Shift + Bouton gauche de la souris : Activer le «wildcard bit»\n" "Cliquez sur une autre tuile pour la modifier." #: editor/plugins/tile_set_editor_plugin.cpp @@ -8030,16 +8114,108 @@ msgstr "Cette propriété ne peut être changée." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Aucun addon VCS n'est disponible." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Erreur" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Aucun message de livraison n'a été fourni" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Aucun fichier à ajouter" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Enregistrer" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "VCS Addon n'est pas initialisé" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Système de contrôle de version" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "initialiser" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Zone de transit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Détecter de nouveaux changements" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Changements" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modifié" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Renommé" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Supprimé" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Changement de type" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Étape sélectionnée" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Tout ajouter" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Ajouter un message de livraison" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Commiter les changements" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "État" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"Vérifier les différences de fichier avant de les soumettre à la dernière " +"version" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Aucun fichier diff n'est actif" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Détecter les changements dans le fichier diff" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(GLES3 seulement)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Ajouter une entrée +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Ajouter une sortie +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8055,6 +8231,10 @@ msgid "Boolean" msgstr "Booléen" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Ajouter un port d'entrée" @@ -8136,9 +8316,8 @@ msgid "Light" msgstr "Lumière" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Créer un nÅ“ud Shader" +msgstr "Afficher le code de shader obtenu." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8170,7 +8349,7 @@ msgstr "Fonction Sepia." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Burn operator." -msgstr "" +msgstr "Opérateur de surexposition." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Darken operator." @@ -8271,6 +8450,13 @@ msgstr "" "Renvoi un vecteur associé si la valeur booléen fournie est vrai ou fausse." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Retourne un scalaire associé si la valeur booléenne fournie est vraie ou " +"fausse." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Renvoie le résultat booléen de la comparaison de deux paramètres." @@ -8420,11 +8606,11 @@ msgstr "Convertit une quantité de radians en degrés." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-e Exponential." -msgstr "" +msgstr "Exponentiel en base e." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 Exponential." -msgstr "" +msgstr "Exponentiel en base 2." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." @@ -8516,6 +8702,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge0' et 1.0 si x est supérieur à " +"'edge1'. Sinon, la valeur de retour est interpolée entre 0.0 et 1.0 à l'aide " +"de Polynômes d'Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8523,6 +8714,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Step function( scalar(edge), scalar(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge' sinon 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -8566,23 +8760,23 @@ msgstr "Scalaire uniforme." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." -msgstr "" +msgstr "Effectuer la recherche de texture cubique." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the texture lookup." -msgstr "" +msgstr "Effectuer la recherche de texture." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." -msgstr "" +msgstr "Recherche uniforme de texture cubique." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup." -msgstr "" +msgstr "Recherche uniforme de texture 2D." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup with triplanar." -msgstr "" +msgstr "Recherche de texture uniforme en 2D avec triplan." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform function." @@ -8598,6 +8792,14 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"Calculez le produit extérieur d'une paire de vecteurs.\n" +"\n" +"OuterProduct considère le premier paramètre 'c' comme un vecteur colonne " +"(matrice à une colonne) et le second paramètre 'r' comme un vecteur ligne " +"(matrice à une ligne) et multiplie la matrice algébrique linéaire par 'c * " +"r', ce qui donne un matrice dont le nombre de lignes est le nombre de " +"composants dans 'c' et dont le nombre de colonnes est le nombre de " +"composants dans 'r'." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -8685,9 +8887,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolation linéaire de deux vecteurs." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolation linéaire de deux vecteurs." +msgstr "Interpolation linéaire de deux vecteurs avec scalaire." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8721,6 +8922,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge0' et 1.0 si 'x' est supérieur à " +"'edge1'. Sinon, la valeur de retour est interpolée entre 0.0 et 1.0 à l'aide " +"de polynômes d'Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8730,6 +8936,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" +"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge0' et 1.0 si 'x' est supérieur à " +"'edge1'. Sinon, la valeur de retour est interpolée entre 0.0 et 1.0 à l'aide " +"de polynômes d'Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8737,6 +8948,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Step function( vector(edge), vector(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge', sinon 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8744,6 +8958,9 @@ msgid "" "\n" "Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0." msgstr "" +"Step function( scalar(edge), vector(x) ).\n" +"\n" +"Retourne 0.0 si 'x' est inférieur à 'edge', sinon 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." @@ -8789,6 +9006,8 @@ msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" +"Renvoie l'atténuation en fonction du produit scalaire de la surface normale " +"et de la direction de la caméra (transmettez-lui les entrées associées)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8796,6 +9015,11 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Expression personnalisée du langage de shader Godot, qui est placée au-" +"dessus du shader obtenu. Vous pouvez insérer diverses définitions de " +"fonctions à l'intérieur et les appeler ultérieurement dans les expressions. " +"Vous pouvez également déclarer des variations, des uniformes et des " +"constantes." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8948,15 +9172,19 @@ msgid "Resources to export:" msgstr "Ressources à exporter :" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtres d'export de fichiers non ressources (séparés par des virgules, par " "exemple : *.json, *.txt) :" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtres pour exclure des fichiers du projet (séparés par des virgules, par " "exemple: *.json, *.txt) :" @@ -9102,7 +9330,7 @@ msgstr "Impossible de créer le fichier project.godot dans le chemin du projet." #: editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "L'extraction des fichiers suivants a échoué depuis le paquetage :" +msgstr "L'extraction des fichiers suivants depuis le paquetage a échoué :" #: editor/project_manager.cpp msgid "Rename Project" @@ -9191,13 +9419,12 @@ msgid "Unnamed Project" msgstr "Projet sans titre" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importer un projet existant" +msgstr "Projet manquant" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Erreur : Le projet n'existe pas dans le système de fichier." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9297,13 +9524,12 @@ msgstr "" "Le contenu du dossier de projet ne sera pas modifié." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Supprimer %d projets de la liste ?\n" -"Le contenu des dossiers de projet ne sera pas modifié." +"Supprimer tous les projets manquants de la liste ?\n" +"Le contenu des dossiers du projet ne sera pas modifié." #: editor/project_manager.cpp msgid "" @@ -9328,9 +9554,8 @@ msgid "Project Manager" msgstr "Gestionnaire de projets" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projet" +msgstr "Projets" #: editor/project_manager.cpp msgid "Scan" @@ -9561,6 +9786,10 @@ msgid "Settings saved OK." msgstr "Paramètres enregistrés avec succès." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Événement d'action d'entrée déplacé" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Écrasement d'un paramètre, dédié à un tag de fonctionnalité" @@ -9578,15 +9807,15 @@ msgstr "Ajouter un chemin remappé" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "Remap de ressources ajout de remap" +msgstr "Réaffectation des ressources ; Ajouter une réaffectation" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "Modifier language de remap de ressource" +msgstr "Modifier le langage de réaffectation des ressources" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "Supprimer remap de ressource" +msgstr "Supprimer la réaffectation des ressources" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" @@ -9697,6 +9926,10 @@ msgid "Plugins" msgstr "Extensions" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Pré-réglage…" + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zéro" @@ -9864,10 +10097,6 @@ msgstr "Convertir en majuscule" msgid "Reset" msgstr "Réinitialiser" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Erreur" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Re-parenter le nÅ“ud" @@ -9925,6 +10154,10 @@ msgid "Instance Scene(s)" msgstr "Instancier scène(s)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Remplacer par une scène de branche" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instancier une scène enfant" @@ -9967,8 +10200,20 @@ msgid "Make node as Root" msgstr "Choisir le nÅ“ud comme racine de scène" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Supprimer le(s) nÅ“ud(s) ?" +msgid "Delete %d nodes?" +msgstr "Supprimer %d nÅ“uds ?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Supprimer le nÅ“ud racine \"%s\" ?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Supprimer le nÅ“ud \"%s\" et ses enfants ?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Supprimer le noeud \"%s\" ?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9991,12 +10236,13 @@ msgstr "" "propriétés du nÅ“ud." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Enfants modifiables" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Charger en tant qu'instance temporaire" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Désactiver \"editable_instance\" implique la remise à zéro de toutes les " +"propriétés du nÅ“ud." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10043,9 +10289,8 @@ msgid "Remove Node(s)" msgstr "Supprimer le(s) nÅ“ud(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Changer le nom du port de sortie" +msgstr "Changer le type de nÅ“ud (s)" #: editor/scene_tree_dock.cpp msgid "" @@ -10061,7 +10306,8 @@ msgstr "Erreur d'enregistrement de la scène." #: editor/scene_tree_dock.cpp msgid "Error duplicating scene to save it." -msgstr "Erreur de duplication de la scène afin de l'enregistrer." +msgstr "" +"Une erreur est survenue pendant la duplication de la scène à sauvegarder." #: editor/scene_tree_dock.cpp msgid "Sub-Resources" @@ -10072,6 +10318,14 @@ msgid "Clear Inheritance" msgstr "Effacer l'héritage" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Enfants modifiables" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Charger en tant qu'instance temporaire" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Ouvrir la documentation" @@ -10088,10 +10342,6 @@ msgid "Change Type" msgstr "Changer le type" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Hériter d'un script" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Re-parenter le nÅ“ud" @@ -10129,8 +10379,7 @@ msgstr "" #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "" -"Attacher un nouveau script ou un script existant pour le nÅ“ud sélectionné." +msgstr "Attacher un script (nouveau ou existant) pour le nÅ“ud sélectionné." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." @@ -10169,30 +10418,27 @@ msgid "Node configuration warning:" msgstr "Avertissement de configuration de nÅ“ud :" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Le nÅ“ud possède des connexions et/ou des groupes.\n" +"Le nÅ“ud possède %s connexion(s) et %s groupe(s).\n" "Cliquez pour afficher le panneau de connexion des signaux." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Le nÅ“ud possède des connections.\n" +"Le nÅ“ud possède %s connexion(s).\n" "Cliquez pour afficher le panneau de connexion des signaux." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Le nÅ“ud fait partie de groupes.\n" +"Le nÅ“ud fait partie de %s groupe(s).\n" "Cliquez pour afficher le panneau de gestion des groupes." #: editor/scene_tree_editor.cpp @@ -10285,12 +10531,11 @@ msgstr "Erreur - Impossible de créer le script dans le système de fichiers." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "Erreur de chargement de script depuis %s" +msgstr "Erreur de chargement du script depuis %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Écraser" +msgstr "Redéfinition" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10337,23 +10582,18 @@ msgid "Will load an existing script file." msgstr "Va charger un fichier de script existant." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Langage" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Hérité de" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nom de classe" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Modèle" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script intégré" #: editor/script_create_dialog.cpp @@ -10369,27 +10609,54 @@ msgid "Bytes:" msgstr "Octets :" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Pile des appels" +msgid "Warning:" +msgstr "Avertissement :" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "" -"Sélectionnez un ou plusieurs éléments de la liste pour afficher le graphique." +msgid "Error:" +msgstr "Erreur :" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Erreur C ++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Erreur C ++ :" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Source C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Source :" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Source C++ :" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Pile des appels" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Erreurs" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Processus enfant connecté" +msgid "Child process connected." +msgstr "Processus enfant connecté." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Copier l'erreur" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Passer les points d'arrêt" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspecter l'instance précédente" @@ -10406,6 +10673,10 @@ msgid "Profiler" msgstr "Profileur" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profileur réseau" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Moniteur" @@ -10418,6 +10689,11 @@ msgid "Monitors" msgstr "Moniteurs" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" +"Sélectionnez un ou plusieurs éléments de la liste pour afficher le graphique." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Liste de l'utilisation de la mémoire vidéo par ressource :" @@ -10614,10 +10890,6 @@ msgid "Library" msgstr "Bibliothèque" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "État" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliothèques: " @@ -10626,6 +10898,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Attendu une chaîne de longueur 1 (un caractère)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "L'argument du pas est zéro !" @@ -10781,6 +11057,15 @@ msgstr "Paramètres GridMap" msgid "Pick Distance:" msgstr "Choisissez distance :" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Filtrer les mailles" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"Donnez une ressource MeshLibrary à cette GridMap pour utiliser ses maillages." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Le nom de classe ne peut pas être un mot-clé réservé" @@ -10908,29 +11193,28 @@ msgid "Set Variable Type" msgstr "Définir type de variable" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "" -"Ne doit pas entrer en conflit avec un nom de type existant intégré au moteur." +msgstr "Remplacer une fonction intégrée existante." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Créer un nouveau rectangle." +msgstr "Créer une nouvelle fonction." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variables :" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Créer un nouveau rectangle." +msgstr "Créer une nouvelle variable." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signaux :" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Créer un nouveau polygone." +msgstr "Créer un nouveau signal." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10957,6 +11241,11 @@ msgid "Add Function" msgstr "Ajouter une fonction" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Supprimer le port d'entrée" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Ajouter une variable" @@ -10965,6 +11254,26 @@ msgid "Add Signal" msgstr "Ajouter un signal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Ajouter un port d'entrée" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Ajouter un port de sortie" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Supprimer le port d'entrée" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Supprimer le port de sortie" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Changer l'expression" @@ -11009,10 +11318,20 @@ msgid "Add Preload Node" msgstr "Ajouter un nÅ“ud préchargé" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Ajouter un nÅ“ud à partir de l'arbre" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Ajouter une propriété accesseur" @@ -11037,6 +11356,11 @@ msgid "Connect Nodes" msgstr "Connecter nÅ“ud" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Connecter nÅ“ud" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Données de connexion du nÅ“ud" @@ -11069,6 +11393,28 @@ msgid "Paste VisualScript Nodes" msgstr "Coller les nÅ“uds VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Impossible de copier le nÅ“ud de fonction." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Renommer la fonction" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Supprimer la fonction" @@ -11089,16 +11435,17 @@ msgid "Editing Signal:" msgstr "Modification du signal :" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Type de base :" +msgid "Make Tool:" +msgstr "Fabriquer l'outil :" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membres :" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "NÅ“uds disponibles :" +#, fuzzy +msgid "function_name" +msgstr "Fonctions :" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11121,6 +11468,16 @@ msgid "Cut Nodes" msgstr "Couper les nÅ“uds" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Renommer la fonction" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Rafraîchir" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Modifier le membre" @@ -11224,6 +11581,10 @@ msgid "The package must have at least one '.' separator." msgstr "Le paquet doit comporter au moins un séparateur « . »." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Sélectionner appareil depuis la liste" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "L'exécutable ADB n'est pas configuré dans les Paramètres de l'éditeur." @@ -11252,10 +11613,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Le projet Android n'est pas installé et ne peut donc pas être compilé. " -"Installez-le depuis le menu Éditeur." +"Le modèle de compilation Android n'est pas installé dans le projet. " +"Installez-le à partir du menu Projet." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11281,6 +11643,10 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"La version d'Android ne correspond pas :\n" +" Modèle installé : %s\n" +" Version Godot : %s\n" +"Veuillez réinstaller la version d'Android depuis le menu 'Projet'." #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" @@ -11342,6 +11708,10 @@ msgid "Required icon is not specified in the preset." msgstr "L'icône requise n'est pas spécifiée dans le préréglage." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Exécuter dans le navigateur" @@ -11609,7 +11979,6 @@ msgstr "" "Skeleton2D et définissez-en une." #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " @@ -12029,10 +12398,6 @@ msgstr "" "nÅ“ud de type Control afin qu'il en obtienne une taille. Sinon, faites-en une " "RenderTarget et assignez sa texture à un nÅ“ud pouvant l'afficher." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrée" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Source invalide pour la prévisualisation." @@ -12061,6 +12426,66 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex." msgid "Constants cannot be modified." msgstr "Les constantes ne peuvent être modifiées." +#~ msgid "Snap to Grid" +#~ msgstr "Aimanter à la grille" + +#~ msgid "Add input +" +#~ msgstr "Ajouter une entrée +" + +#~ msgid "Language" +#~ msgstr "Langage" + +#~ msgid "Inherits" +#~ msgstr "Hérité de" + +#~ msgid "Base Type:" +#~ msgstr "Type de base :" + +#~ msgid "Available Nodes:" +#~ msgstr "NÅ“uds disponibles :" + +#~ msgid "Input" +#~ msgstr "Entrée" + +#~ msgid "Properties:" +#~ msgstr "Propriétés :" + +#~ msgid "Methods:" +#~ msgstr "Méthodes :" + +#~ msgid "Theme Properties:" +#~ msgstr "Propriétés du thème :" + +#~ msgid "Enumerations:" +#~ msgstr "Recensements :" + +#~ msgid "Constants:" +#~ msgstr "Constantes :" + +#~ msgid "Class Description:" +#~ msgstr "Description de la classe :" + +#~ msgid "Property Descriptions:" +#~ msgstr "Description des propriétés :" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descriptions des méthode :" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Ceci va installer le projet Android pour des compilations " +#~ "personnalisées.\n" +#~ "Notez que pour l'utiliser, vous devez l'activer pour chaque préréglage " +#~ "d'exportation." + +#~ msgid "Reverse sorting." +#~ msgstr "Tri inverse." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Supprimer le(s) nÅ“ud(s) ?" + #~ msgid "No Matches" #~ msgstr "Pas de correspondances" @@ -12240,9 +12665,6 @@ msgstr "Les constantes ne peuvent être modifiées." #~ msgid "Go to parent folder" #~ msgstr "Aller au dossier parent" -#~ msgid "Select device from the list" -#~ msgstr "Sélectionner appareil depuis la liste" - #~ msgid "Open Scene(s)" #~ msgstr "Ouvrir une(des) scène(s)" @@ -12305,9 +12727,6 @@ msgstr "Les constantes ne peuvent être modifiées." #~ "Instancie la(les) scène(s) sélectionnée(s) en tant qu'enfant(s) du nÅ“ud " #~ "sélectionné." -#~ msgid "Warnings:" -#~ msgstr "Avertissements :" - #~ msgid "Font Size:" #~ msgstr "Taille de police :" diff --git a/editor/translations/ga.po b/editor/translations/ga.po index 9f7166b719..ea55d235b7 100644 --- a/editor/translations/ga.po +++ b/editor/translations/ga.po @@ -56,6 +56,35 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "Measc" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -320,6 +349,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Cruthaigh" @@ -445,13 +475,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -584,7 +609,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -596,6 +621,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -772,7 +801,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -873,7 +903,8 @@ msgstr "Cuardach:" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -910,7 +941,7 @@ msgid "Resource" msgstr "Acmhainn" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Cosán" @@ -1173,7 +1204,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1364,7 +1395,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1418,7 +1451,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1583,6 +1616,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1653,6 +1687,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1800,6 +1835,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1808,46 +1844,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Cuntas:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1856,19 +1873,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1883,10 +1892,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1897,10 +1902,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1967,8 +1968,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1981,6 +1982,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2520,6 +2563,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2719,10 +2774,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2773,14 +2824,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2798,15 +2845,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2869,6 +2922,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2878,6 +2935,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2906,11 +2967,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3007,6 +3063,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3033,13 +3093,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3688,8 +3741,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3814,7 +3867,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3949,6 +4002,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4115,6 +4174,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4289,7 +4349,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4457,6 +4516,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Cuir ionchur leis" @@ -4661,6 +4722,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4673,10 +4738,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4939,20 +5000,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5042,8 +5110,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5303,6 +5370,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5932,6 +6003,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5987,7 +6062,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6086,6 +6162,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6187,11 +6268,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6271,7 +6352,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6351,6 +6432,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6408,10 +6494,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6731,6 +6813,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6764,6 +6850,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6990,6 +7080,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7038,6 +7132,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7352,6 +7450,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ScagairÃ..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7482,6 +7589,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7636,19 +7748,111 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Ainm nua:" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Scrios ionchur" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "Cuir ionchur leis" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7661,6 +7865,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7869,6 +8077,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8512,12 +8725,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9059,6 +9274,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9195,6 +9414,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9358,10 +9581,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9417,6 +9636,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9457,7 +9680,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9479,11 +9714,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9557,6 +9790,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9573,10 +9814,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9803,43 +10040,60 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Acmhainn" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9847,7 +10101,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9855,6 +10109,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9871,6 +10129,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9883,6 +10145,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10079,10 +10345,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10091,6 +10353,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10242,6 +10508,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ScagairÃ..." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10377,6 +10652,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10405,6 +10684,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Scrios ionchur" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10413,6 +10697,23 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Cuir ionchur leis" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10453,10 +10754,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10481,6 +10792,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10513,6 +10828,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Cruthaigh" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10533,7 +10869,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10541,7 +10877,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10565,6 +10901,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10659,6 +11003,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10680,7 +11028,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10757,6 +11106,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11294,10 +11647,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/he.po b/editor/translations/he.po index 4847730e69..501c0c731e 100644 --- a/editor/translations/he.po +++ b/editor/translations/he.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-11 10:23+0000\n" +"PO-Revision-Date: 2019-09-07 13:51+0000\n" "Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n" "Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/" "godot/he/>\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && " "n % 10 == 0) ? 2 : 3));\n" -"X-Generator: Weblate 3.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -67,6 +67,34 @@ msgstr ": ××¨×’×•×ž× ×˜ שגוי מסוג: " msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp #, fuzzy msgid "Free" @@ -74,11 +102,11 @@ msgstr "×—×™× ×" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "מ×וזן" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "" +msgstr "מר××”" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -233,8 +261,9 @@ msgid "Audio Clips:" msgstr "מ×זין לשמע" #: editor/animation_track_editor.cpp +#, fuzzy msgid "Anim Clips:" -msgstr "" +msgstr "קטעי ×”× ×¤×©×”:" #: editor/animation_track_editor.cpp #, fuzzy @@ -263,7 +292,7 @@ msgstr "הסרת רצועה." #: editor/animation_track_editor.cpp msgid "Time (s): " -msgstr "זמן: " +msgstr "זמן (×©× ×™×•×ª): " #: editor/animation_track_editor.cpp msgid "Toggle Track Enabled" @@ -283,7 +312,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "" +msgstr "לכידה" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -291,7 +320,6 @@ msgstr "הקרוב ביותר" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp -#, fuzzy msgid "Linear" msgstr "×œ×™× ×™×רי" @@ -331,22 +359,20 @@ msgid "Change Animation Interpolation Mode" msgstr "החלפת ערך מילון" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" msgstr "×©×™× ×•×™ מצב לול×ת ×”× ×¤×©×”" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove Anim Track" -msgstr "מחק רצועת ×”× ×¤×©×”" +msgstr "מחיקת רצועת ×”× ×¤×©×”" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "ליצור רצועה חדשה ל%s ×•×œ×”×›× ×™×¡ מפתח?" +msgstr "×”×× ×œ×™×¦×•×¨ רצועה חדשה ל%s ×•×œ×”×›× ×™×¡ מפתח?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "ליצור %d רצועות חדשות ×•×œ×”×›× ×™×¡ מפתחות?" +msgstr "×”×× ×œ×™×¦×•×¨ %d רצועות חדשות ×•×œ×”×›× ×™×¡ מפתחות?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -356,6 +382,7 @@ msgstr "ליצור %d רצועות חדשות ×•×œ×”×›× ×™×¡ מפתחות?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "יצירה" @@ -370,9 +397,8 @@ msgid "AnimationPlayer can't animate itself, only other players." msgstr "× ×’×Ÿ ×”× ×¤×©×•×ª ×œ× ×™×›×•×œ ×œ×”× ×¤×™×© ×ת עצמו, רק ×©×—×§× ×™× ×חרי×." #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Create & Insert" -msgstr "יצירת ×”× ×¤×©×”" +msgstr "יצירה והוספה של ×”× ×¤×©×”" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" @@ -493,15 +519,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "לבחור הכול" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "בחירה" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -640,8 +660,9 @@ msgid "Scale Ratio:" msgstr "יחס מתיחה:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "הגדרת ×ž×¢×‘×¨×•× ×™× ×ל:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -652,6 +673,11 @@ msgstr "" msgid "Copy" msgstr "העתקה" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "בחירה" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -834,7 +860,8 @@ msgstr "שגי×ת חיבור" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -941,7 +968,8 @@ msgstr "חיפוש:" msgid "Matches:" msgstr "הת×מות:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -978,7 +1006,7 @@ msgid "Resource" msgstr "מש×ב" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "× ×ª×™×‘" @@ -1247,7 +1275,8 @@ msgid "Delete Bus Effect" msgstr "מחיקת ×פקט ×פיק" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "×פיק שמע, יש לגרור ולשחרר כדי לסדר מחדש." #: editor/editor_audio_buses.cpp @@ -1443,7 +1472,9 @@ msgid "Add AutoLoad" msgstr "הוספת ×˜×¢×™× ×” ×וטומטית" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "× ×ª×™×‘:" @@ -1498,7 +1529,7 @@ msgstr "יצירת תיקייה" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "ש×:" @@ -1681,6 +1712,7 @@ msgstr "(× ×•×›×—×™)" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "חדש" @@ -1760,6 +1792,7 @@ msgid "New Folder..." msgstr "תיקייה חדשה…" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "×¨×¢× ×•×Ÿ" @@ -1915,6 +1948,7 @@ msgid "Class:" msgstr "מחלקה:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ירושה:" @@ -1923,7 +1957,8 @@ msgid "Inherited by:" msgstr "מוריש ×ל:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "תי×ור קצר:" #: editor/editor_help.cpp @@ -1931,41 +1966,19 @@ msgid "Properties" msgstr "מ××¤×™×™× ×™×" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "שיטות" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "שיטות" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "מ××¤×™×™× ×™×" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "מ××¤×™×™× ×™×" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "×ותות:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "×ž×•× ×™×" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "×ž×•× ×™×:" - -#: editor/editor_help.cpp msgid "enum " msgstr "×ž×•× ×” " @@ -1974,22 +1987,14 @@ msgid "Constants" msgstr "קבועי×" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "קבועי×:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "תי×ור" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "תי×ור:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "" +msgid "Online Tutorials" +msgstr "×ž×¡×ž×›×™× ×ž×§×•×•× ×™×" #: editor/editor_help.cpp msgid "" @@ -2004,11 +2009,6 @@ msgid "Property Descriptions" msgstr "תי×ור המ×פיין:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "תי×ור המ×פיין:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2020,11 +2020,6 @@ msgid "Method Descriptions" msgstr "תי×ור השיטה:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "תי×ור השיטה:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2101,8 +2096,8 @@ msgstr "פלט:" msgid "Copy Selection" msgstr "הסרת הבחירה" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2115,6 +2110,49 @@ msgstr "מחיקה" msgid "Clear Output" msgstr "מחיקת הפלט" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "עצירה" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "הורדה" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "מפרק" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2671,6 +2709,19 @@ msgstr "מיז×" msgid "Project Settings..." msgstr "הגדרות מיז×" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "גרסה:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2883,10 +2934,6 @@ msgstr "השהיית ×¡×¦× ×”" msgid "Stop the scene." msgstr "עצירת ×”×¡×¦× ×”." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "עצירה" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "× ×’×™× ×ª ×”×¡×¦× ×” ×©× ×¢×¨×›×”." @@ -2942,15 +2989,11 @@ msgid "Inspector" msgstr "חוקר" #: editor/editor_node.cpp -msgid "Node" -msgstr "מפרק" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "להרחיב הכול" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "פלט" @@ -2969,15 +3012,21 @@ msgstr "× ×™×”×•×œ ×ª×‘× ×™×•×ª ייצו×" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3040,6 +3089,10 @@ msgstr "פתיחת העורך הב×" msgid "Open the previous Editor" msgstr "פתיחת העורך הקוד×" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3050,6 +3103,11 @@ msgstr "×ª×ž×•× ×” ממוזערת…" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "הרצת סקריפט" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "עריכת מצולע" @@ -3079,11 +3137,6 @@ msgstr "מצב:" msgid "Edit:" msgstr "עריכה" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "מדידה:" @@ -3182,6 +3235,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "הרצת סקריפט" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3208,14 +3266,6 @@ msgstr "הדבקה" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "פתיחת עורך דו־ממד" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3903,8 +3953,9 @@ msgstr " קבצי×" msgid "Import As:" msgstr "×™×™×‘×•× ×‘×ª×•×¨:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "ערכה מוגדרת…" #: editor/import_dock.cpp @@ -4036,7 +4087,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4183,6 +4234,13 @@ msgstr "הזזת × ×§×•×“×”" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "פתיחת עורך דו־ממד" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4364,6 +4422,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4547,7 +4606,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4724,6 +4782,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4937,6 +4997,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "ייבו×" @@ -4950,11 +5014,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "מוגשת בקשה…" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5235,24 +5294,33 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "מצב ×©×™× ×•×™ ×§× ×” מידה (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "החלפת מצב × ×§×•×“×ª עצירה" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "הגדרות הצמדה" +msgid "Toggle grid snapping." +msgstr "החלפת מצב × ×§×•×“×ª עצירה" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "הגדרות הצמדה" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "" @@ -5344,8 +5412,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5616,6 +5683,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6260,6 +6331,10 @@ msgid "Grid" msgstr "רשת" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "הגדרת הצמדה…" @@ -6317,7 +6392,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6426,6 +6502,11 @@ msgid "Find Next" msgstr "×יתור הב×" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "×יתור הקוד×" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "מ××¤×™×™× ×™ פריט." @@ -6533,14 +6614,14 @@ msgid "Toggle Scripts Panel" msgstr "החלפת תצוגת ×—×œ×•× ×™×ª סקריפטי×" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "לצעוד מעל" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "לצעוד לתוך" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "לצעוד מעל" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "עצירה" @@ -6624,7 +6705,7 @@ msgstr "מחיקת ×§×‘×¦×™× ××—×¨×•× ×™×" msgid "Connections to method:" msgstr "התחברות למפרק:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "מש×ב" @@ -6709,6 +6790,11 @@ msgstr "מחיקת × ×§×•×“×•×ª" msgid "Cut" msgstr "גזירה" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "לבחור הכול" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "מחיקת שורה" @@ -6769,10 +6855,6 @@ msgid "Auto Indent" msgstr "×”×–×—×” ×וטומטית" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "×יתור הקוד×" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "×יתור…" @@ -7113,6 +7195,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7151,6 +7237,10 @@ msgid "Use Local Space" msgstr "מצב מרחב מקומי (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "מבט תחתי" @@ -7386,6 +7476,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7438,6 +7532,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "מצב ×”×–×–×” (W)" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "×× ×™×ž×¦×™×•×ª" @@ -7766,6 +7865,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "מ××¤×™×™× ×™ פריט." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7913,6 +8021,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "להסיר ×ת ×”×§×‘×¦×™× ×”× ×‘×—×¨×™× ×ž×”×ž×™×–×? (××™ ×פשר לשחזר)" @@ -8085,20 +8198,120 @@ msgstr "×œ× × ×™×ª×Ÿ לבצע פעולה זו ×œ×œ× ×¡×¦× ×”." msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "הוספת ×ירוע" +msgid "No commit message was provided" +msgstr "×œ× ×¦×•×™×Ÿ ש×" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "קהילה" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "הגדלת ×ות ר××©×•× ×”" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "יצירת %s חדש" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "×©×™× ×•×™" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "×©×™× ×•×™ ש×" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "למחוק" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "×©×™× ×•×™" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "מחובר" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "לשמור הכול" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "×¡× ×›×¨×•×Ÿ ×”×©×™× ×•×™×™× ×‘×¡×§×¨×™×¤×˜" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "פלט" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8112,6 +8325,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "מועדפי×:" @@ -8338,6 +8555,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8990,12 +9212,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9556,6 +9780,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9695,6 +9923,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "ערכה מוגדרת…" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9868,10 +10100,6 @@ msgstr "×ותיות גדולות" msgid "Reset" msgstr "×יפוס התקריב" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9927,6 +10155,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9968,10 +10200,24 @@ msgid "Make node as Root" msgstr "שמירת ×¡×¦× ×”" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "מחיקת שורה" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "מחיקת שורה" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9990,11 +10236,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10074,6 +10318,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "פתיחת התיעוד המקוון של Godot" @@ -10093,11 +10345,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "הרצת סקריפט" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "יצירת %s חדש" @@ -10344,24 +10591,19 @@ msgid "Will load an existing script file." msgstr "×˜×¢×™× ×ª פריסת ×פיקי שמע." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "מחלקה:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "×ª×‘× ×™×•×ª" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "הרצת סקריפט" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10376,11 +10618,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +#, fuzzy +msgid "Warning:" +msgstr "×זהרות" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Error:" +msgstr "מר××”" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "שגי×ות ×˜×¢×™× ×”" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "C++ Source" +msgstr "מש×ב" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "מש×ב" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "מש×ב" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10388,14 +10660,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "×ž× ×•×ª×§" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "מחיקת × ×§×•×“×•×ª" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10412,6 +10690,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "×™×™×¦×•× ×ž×™×–×" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10424,6 +10707,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10622,10 +10909,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10634,6 +10917,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10788,6 +11075,15 @@ msgstr "" msgid "Pick Distance:" msgstr "בחירת מרחק:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "מ××¤×™×™× ×™ פריט." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10926,6 +11222,10 @@ msgid "Create a new variable." msgstr "יצירת %s חדש" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "×ותות:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "יצירת מצולע" @@ -10955,6 +11255,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "הסרת × ×§×•×“×” ×‘× ×ª×™×‘" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10963,6 +11268,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "מועדפי×:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "מועדפי×:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "הסרת × ×§×•×“×” ×‘× ×ª×™×‘" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "הסרת × ×§×•×“×” ×‘× ×ª×™×‘" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11003,10 +11328,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11032,6 +11367,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "×ž× ×•×ª×§" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "התחברות למפרק:" @@ -11066,6 +11406,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "יצירת %s חדש" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11086,7 +11447,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11094,8 +11455,9 @@ msgid "Members:" msgstr "חברי×:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "×¤×•× ×§×¦×™×•×ª:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11119,6 +11481,16 @@ msgstr "גזירת מפרקי×" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "×¤×•× ×§×¦×™×•×ª:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "×¨×¢× ×•×Ÿ" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "חברי×" @@ -11214,6 +11586,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "× × ×œ×‘×—×•×¨ התקן מהרשימה" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11235,7 +11611,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11314,6 +11691,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "הפעלה בדפדפן" @@ -11864,10 +12245,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11899,6 +12276,40 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "הוספת ×ירוע" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "שיטות" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "מ××¤×™×™× ×™×" + +#~ msgid "Enumerations:" +#~ msgstr "×ž×•× ×™×:" + +#~ msgid "Constants:" +#~ msgstr "קבועי×:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "תי×ור:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "תי×ור המ×פיין:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "תי×ור השיטה:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "מוגשת בקשה…" + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -11999,9 +12410,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "מעבר לתיקייה שמעל" -#~ msgid "Select device from the list" -#~ msgstr "× × ×œ×‘×—×•×¨ התקן מהרשימה" - #~ msgid "Open Scene(s)" #~ msgstr "פתיחת ×¡×¦× ×•×ª" @@ -12026,10 +12434,6 @@ msgstr "" #~ msgstr "צעד/×™×:" #, fuzzy -#~ msgid "Warnings:" -#~ msgstr "×זהרות" - -#, fuzzy #~ msgid "Font Size:" #~ msgstr "מבט קדמי" @@ -12063,9 +12467,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "יש לבחור פריט הגדרה ×§×•×“× ×›×œ!" -#~ msgid "No name provided" -#~ msgstr "×œ× ×¦×•×™×Ÿ ש×" - #~ msgid "Create Poly" #~ msgstr "יצירת מצולע" @@ -12139,9 +12540,6 @@ msgstr "" #~ msgid "Error: Missing Input Connections" #~ msgstr "שגי××”: ×—×¡×¨×™× ×—×™×‘×•×¨×™ קלט" -#~ msgid "Set Transitions to:" -#~ msgstr "הגדרת ×ž×¢×‘×¨×•× ×™× ×ל:" - #~ msgid "In" #~ msgstr "×›× ×™×¡×”" diff --git a/editor/translations/hi.po b/editor/translations/hi.po index d4030266c5..cd3acd484e 100644 --- a/editor/translations/hi.po +++ b/editor/translations/hi.po @@ -6,12 +6,14 @@ # Suryansh5545 <suryanshpathak5545@gmail.com>, 2018. # Vikram1323 <vikram1323@gmail.com>, 2018. # vkubre <v@kubre.in>, 2019. +# Abhay Patel <abhay111patel@gmail.com>, 2019. +# Lakshmi-Jayakumar <lakshmi.jayakumar.tkm@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-05-04 13:48+0000\n" -"Last-Translator: vkubre <v@kubre.in>\n" +"PO-Revision-Date: 2019-10-17 04:52+0000\n" +"Last-Translator: Lakshmi-Jayakumar <lakshmi.jayakumar.tkm@gmail.com>\n" "Language-Team: Hindi <https://hosted.weblate.org/projects/godot-engine/godot/" "hi/>\n" "Language: hi\n" @@ -19,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.7-dev\n" +"X-Generator: Weblate 3.9\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -60,6 +62,35 @@ msgstr "'%s' बनाने के लिठअवैध तरà¥à¤•" msgid "On call to '%s':" msgstr "'%s ' को कॉल करने पर:" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "मà¥à¤«à¥à¤¤" @@ -74,7 +105,7 @@ msgstr "पà¥à¤°à¤¤à¤¿à¤®à¤¾" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" -msgstr "" +msgstr "समय" #: editor/animation_bezier_editor.cpp msgid "Value:" @@ -343,6 +374,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -473,15 +505,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -615,7 +641,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -627,6 +653,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "डà¥à¤ªà¥à¤²à¤¿à¤•ेट चयन" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -815,7 +846,8 @@ msgstr "कनेकà¥à¤Ÿ करने के लिठसंकेत:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -927,7 +959,8 @@ msgstr "खोज कर:" msgid "Matches:" msgstr "à¤à¤• जैसा:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -972,7 +1005,7 @@ msgid "Resource" msgstr "संसाधन" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "पथ" @@ -1147,9 +1180,8 @@ msgid "Donors" msgstr "दाताओं" #: editor/editor_about.cpp -#, fuzzy msgid "License" -msgstr "License" +msgstr "लाइसेंस" #: editor/editor_about.cpp #, fuzzy @@ -1257,7 +1289,8 @@ msgid "Delete Bus Effect" msgstr "बस पà¥à¤°à¤à¤¾à¤µ हटाना" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "पà¥à¤¨: वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¿à¤¤ करने के लिठऑडियो बस, खींचें और डà¥à¤°à¥‰à¤ª |" #: editor/editor_audio_buses.cpp @@ -1450,7 +1483,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1504,7 +1539,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1674,6 +1709,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1746,6 +1782,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1894,6 +1931,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1902,46 +1940,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "विवरण:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1950,21 +1969,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "विवरण:" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "विवरण:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1980,11 +1990,6 @@ msgid "Property Descriptions" msgstr "विवरण:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "विवरण:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1996,11 +2001,6 @@ msgid "Method Descriptions" msgstr "विवरण:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "विवरण:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2069,8 +2069,8 @@ msgstr "" msgid "Copy Selection" msgstr "सà¤à¥€ खंड" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2083,6 +2083,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2628,6 +2670,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2830,10 +2884,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2884,14 +2934,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2909,15 +2955,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2980,6 +3032,11 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "संसाधन" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2989,6 +3046,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "निरà¥à¤à¤°à¤¤à¤¾ संपादक" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -3017,11 +3079,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3120,6 +3177,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3146,14 +3207,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "निरà¥à¤à¤°à¤¤à¤¾ संपादक" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3824,9 +3877,10 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "रीसेट आकार" #: editor/import_dock.cpp msgid "Reimport" @@ -3952,7 +4006,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4092,6 +4146,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "निरà¥à¤à¤°à¤¤à¤¾ संपादक" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4263,6 +4324,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4439,7 +4501,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4614,6 +4675,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4820,6 +4883,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4832,10 +4899,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5108,20 +5171,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5211,8 +5281,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5476,6 +5545,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6112,6 +6185,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6167,7 +6244,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6273,6 +6351,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6376,11 +6459,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6461,7 +6544,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "संसाधन" @@ -6547,6 +6630,11 @@ msgstr "à¤à¤• नया बनाà¤à¤‚" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6605,10 +6693,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6929,6 +7013,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6962,6 +7050,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7194,6 +7286,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7243,6 +7339,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "कारà¥à¤¯à¥‹à¤‚:" @@ -7564,6 +7664,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7701,6 +7809,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "परियोजना से चयनित फ़ाइलें निकालें? (कोई पूरà¥à¤µà¤µà¤¤ नहीं)" @@ -7867,19 +7980,114 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "समà¥à¤¦à¤¾à¤¯" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "à¤à¤• नया बनाà¤à¤‚" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "ऑडियो बस का नाम बदलें" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "को हटा दें" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "जà¥à¤¡à¤¿à¤¯à¥‡" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "पसंदीदा:" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7892,6 +8100,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "पसंदीदा:" @@ -8111,6 +8323,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8759,12 +8976,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9312,6 +9531,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9449,6 +9672,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9613,10 +9840,6 @@ msgstr "" msgid "Reset" msgstr "रीसेट आकार" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9672,6 +9895,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9712,10 +9939,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "को हटा दें" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "को हटा दें" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9734,11 +9975,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9815,6 +10054,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9831,10 +10078,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "à¤à¤• नया बनाà¤à¤‚" @@ -10069,43 +10312,64 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "निरà¥à¤à¤°à¤¤à¤¾ संपादक" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "पà¥à¤°à¤¤à¤¿à¤®à¤¾" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "C++ Source" +msgstr "संसाधन" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "संसाधन" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "संसाधन" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10113,14 +10377,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "डिसà¥à¤•नेकà¥à¤Ÿ" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "à¤à¤• नया बनाà¤à¤‚" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10137,6 +10407,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10149,6 +10423,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10345,10 +10623,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10357,6 +10631,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10511,6 +10789,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10648,6 +10934,10 @@ msgid "Create a new variable." msgstr "à¤à¤• नया बनाà¤à¤‚" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚" @@ -10677,6 +10967,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "मिटाना" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10685,6 +10980,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "पसंदीदा:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "पसंदीदा:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "मिटाना" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "मिटाना" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10725,10 +11040,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10753,6 +11078,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "डिसà¥à¤•नेकà¥à¤Ÿ" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10785,6 +11115,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "à¤à¤• नया बनाà¤à¤‚" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10805,7 +11156,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10813,8 +11164,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "कारà¥à¤¯à¥‹à¤‚:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10837,6 +11189,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "कारà¥à¤¯à¥‹à¤‚:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10931,6 +11292,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10952,7 +11317,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11031,6 +11397,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11573,10 +11943,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11608,6 +11974,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "विवरण:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "विवरण:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "विवरण:" + #~ msgid "Invalid font size." #~ msgstr "गलत फॉणà¥à¤Ÿ का आकार |" diff --git a/editor/translations/hr.po b/editor/translations/hr.po index b9d3494ea2..6322a85090 100644 --- a/editor/translations/hr.po +++ b/editor/translations/hr.po @@ -4,11 +4,12 @@ # This file is distributed under the same license as the Godot source code. # Unlimited Creativity <marinosah1@gmail.com>, 2019. # Patik <patrikfs5@gmail.com>, 2019. +# Nikola Bunjevac <nikola.bunjevac@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" -"PO-Revision-Date: 2019-05-20 11:49+0000\n" -"Last-Translator: Patik <patrikfs5@gmail.com>\n" +"PO-Revision-Date: 2019-09-11 03:10+0000\n" +"Last-Translator: Nikola Bunjevac <nikola.bunjevac@gmail.com>\n" "Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/" "godot/hr/>\n" "Language: hr\n" @@ -16,12 +17,12 @@ msgstr "" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.7-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "Neispravni argument za convert(), upotrijebi konstantu TYPE_*" +msgstr "Neispravan argument za convert(), upotrijebi konstantu TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -57,9 +58,37 @@ msgstr "Nevažeći argumenti za konstrukciju '%s'" msgid "On call to '%s':" msgstr "Pri pozivu '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "" +msgstr "Slobodno" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -67,15 +96,15 @@ msgstr "Balansiran" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "" +msgstr "Zrcaljenje" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" -msgstr "" +msgstr "Vrijeme:" #: editor/animation_bezier_editor.cpp msgid "Value:" -msgstr "" +msgstr "Vrijednost:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -323,6 +352,7 @@ msgstr "Napravi %d NOVIH staza i umetni kljuÄeve?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Stvori" @@ -449,13 +479,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -525,35 +550,35 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "" +msgstr "Idi na prethodni korak" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "" +msgstr "Optimiraj animaciju" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" -msgstr "" +msgstr "OÄisti animaciju" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "" +msgstr "Odaberi Ävor koji će se animirati:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "" +msgstr "Koristi Bezierove krivulje" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" -msgstr "" +msgstr "Anim. optimizator" #: editor/animation_track_editor.cpp msgid "Max. Linear Error:" -msgstr "" +msgstr "Najveća linearna pogreÅ¡ka:" #: editor/animation_track_editor.cpp msgid "Max. Angular Error:" -msgstr "" +msgstr "Najveća kutna pogreÅ¡ka:" #: editor/animation_track_editor.cpp msgid "Max Optimizable Angle:" @@ -561,15 +586,15 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "" +msgstr "Optimiraj" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "" +msgstr "Ukloni neispravne kljuÄeve" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "" +msgstr "Ukloni nepronaÄ‘ene i prazne trake" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" @@ -588,7 +613,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -600,6 +625,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -626,23 +655,23 @@ msgstr "" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "" +msgstr "Idi na liniju" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "" +msgstr "Broj linije:" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "" +msgstr "Zamijenjeno %d pojavljivanja." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "" +msgstr "%d pojavljivanje." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d matches." -msgstr "" +msgstr "%d pojavljivanja." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -650,19 +679,19 @@ msgstr "" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" -msgstr "" +msgstr "Cijele rijeÄi" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "" +msgstr "Zamijeni" #: editor/code_editor.cpp msgid "Replace All" -msgstr "" +msgstr "Zamijeni sve" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "" +msgstr "Samo odabir" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp @@ -673,57 +702,59 @@ msgstr "" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "" +msgstr "Zumiraj" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "" +msgstr "Odzumiraj" #: editor/code_editor.cpp msgid "Reset Zoom" -msgstr "" +msgstr "Resetiraj zoom" #: editor/code_editor.cpp msgid "Warnings" -msgstr "" +msgstr "Upozorenja" #: editor/code_editor.cpp msgid "Line and column numbers." -msgstr "" +msgstr "Brojevi linija i stupaca." #: editor/connections_dialog.cpp msgid "Method in target node must be specified." -msgstr "" +msgstr "Metoda u ciljnom Ävoru mora biti odreÄ‘ena." #: editor/connections_dialog.cpp msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" +"Ciljna metoda nije pronaÄ‘ena. Specificiraj ispravnu metodu ili dodaj skriptu " +"na ciljni Ävor." #: editor/connections_dialog.cpp msgid "Connect to Node:" -msgstr "" +msgstr "Spoji s Ävorom:" #: editor/connections_dialog.cpp msgid "Connect to Script:" -msgstr "" +msgstr "Spoji sa skriptom:" #: editor/connections_dialog.cpp msgid "From Signal:" -msgstr "" +msgstr "Iz signala:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "" +msgstr "Scena ne sadrži niti jednu skriptu." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "" +msgstr "Dodaj" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/editor_feature_profile.cpp editor/groups_editor.cpp @@ -734,15 +765,15 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "" +msgstr "Ukloni" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "" +msgstr "Dodaj argument poziva:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" -msgstr "" +msgstr "Dodatni argumenti poziva:" #: editor/connections_dialog.cpp #, fuzzy @@ -751,24 +782,24 @@ msgstr "Balansiran" #: editor/connections_dialog.cpp msgid "Deferred" -msgstr "" +msgstr "OdgoÄ‘eno" #: editor/connections_dialog.cpp msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." -msgstr "" +msgstr "OdgaÄ‘a signal spremanjem u red i okidanjem prilikom dokolice." #: editor/connections_dialog.cpp msgid "Oneshot" -msgstr "" +msgstr "Jednookidajući" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +msgstr "Odspaja signal nakon prvog slanja." #: editor/connections_dialog.cpp msgid "Cannot connect signal" -msgstr "" +msgstr "Ne mogu spojiti signal" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -777,159 +808,165 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Close" -msgstr "" +msgstr "Zatvori" #: editor/connections_dialog.cpp msgid "Connect" -msgstr "" +msgstr "Spoji" #: editor/connections_dialog.cpp msgid "Signal:" -msgstr "" +msgstr "Signal:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "" +msgstr "Spoji '%s' na '%s'" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "" +msgstr "Odspoji '%s' od '%s'" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "" +msgstr "Odspoji sve sa signala: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." -msgstr "" +msgstr "Spoji..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "" +msgstr "Odspoji" #: editor/connections_dialog.cpp msgid "Connect a Signal to a Method" -msgstr "" +msgstr "Spoji signal na metodu" #: editor/connections_dialog.cpp msgid "Edit Connection:" -msgstr "" +msgstr "Uredi vezu:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "" +msgstr "Jesi li siguran da želiÅ¡ ukloniti sve veze s \"%s\" signala?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "" +msgstr "Signali" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "" +msgstr "Jesi li siguran da želiÅ¡ ukloniti sve veze s ovog signala?" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "" +msgstr "Odspoji sve" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "" +msgstr "Uredi..." #: editor/connections_dialog.cpp msgid "Go To Method" -msgstr "" +msgstr "Idi na metodu" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "" +msgstr "Promijeni tip %s" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" -msgstr "" +msgstr "Promijeni" #: editor/create_dialog.cpp msgid "Create New %s" -msgstr "" +msgstr "Napravi novi %s" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp msgid "Favorites:" -msgstr "" +msgstr "Favoriti:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "" +msgstr "Nedavno:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Search:" -msgstr "" +msgstr "Pretraga:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" -msgstr "" +msgstr "Podudaranja:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Description:" -msgstr "" +msgstr "Opis:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "" +msgstr "Traži zamjenu za:" #: editor/dependency_editor.cpp msgid "Dependencies For:" -msgstr "" +msgstr "Ovisnosti za:" #: editor/dependency_editor.cpp msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" +"Scena '%s' se trenutno ureÄ‘uje.\n" +"Promjene će biti vidljive tek nakon osvježavanja." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" +"Resurs '%s' je u upotrebi.\n" +"Promjene će biti vidljive tek nakon osvježavanja." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Dependencies" -msgstr "" +msgstr "Ovisnosti" #: editor/dependency_editor.cpp msgid "Resource" -msgstr "" +msgstr "Resurs" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "" +msgstr "Ovisnosti:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "" +msgstr "Popravi neispravne" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "" +msgstr "UreÄ‘ivaÄ ovisnosti" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -943,7 +980,7 @@ msgstr "" #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp msgid "Open" -msgstr "" +msgstr "Otvori" #: editor/dependency_editor.cpp msgid "Owners Of:" @@ -951,7 +988,7 @@ msgstr "" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (Can't be restored)" -msgstr "" +msgstr "Ukloni odabrane datoteke iz projekta? (Neće ih biti moguće vratiti)" #: editor/dependency_editor.cpp msgid "" @@ -959,46 +996,49 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" +"Datoteke koje se uklanjaju su nužne drugim resursima kako bi ispravno " +"radili.\n" +"Svejedno ih ukloni? (nema povratka)" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "" +msgstr "Ne mogu ukloniti:" #: editor/dependency_editor.cpp msgid "Error loading:" -msgstr "" +msgstr "PogreÅ¡ka uÄitavanja:" #: editor/dependency_editor.cpp msgid "Load failed due to missing dependencies:" -msgstr "" +msgstr "UÄitavanje nije uspjelo zbog nepostojećih ovisnosti:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" -msgstr "" +msgstr "Svejedno otvori" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "" +msgstr "Koju radnju treba izvesti?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "" +msgstr "Popravi ovisnosti" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "" +msgstr "PogreÅ¡ke uÄitavanja!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "" +msgstr "Trajno obriÅ¡i %d stavki? (Nema povratka!)" #: editor/dependency_editor.cpp msgid "Show Dependencies" -msgstr "" +msgstr "Prikaži ovisnosti" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" -msgstr "" +msgstr "IstraživaÄ napuÅ¡tenih resursa" #: editor/dependency_editor.cpp editor/editor_audio_buses.cpp #: editor/editor_file_dialog.cpp editor/editor_node.cpp @@ -1006,11 +1046,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "" +msgstr "ObriÅ¡i" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "" +msgstr "Posjeduje" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" @@ -1018,75 +1058,75 @@ msgstr "" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "" +msgstr "Promijeni kljuÄ u rjeÄniku" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "" +msgstr "Promijeni vrijednost u rjeÄniku" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "" +msgstr "Hvala od Godot zajednice!" #: editor/editor_about.cpp msgid "Godot Engine contributors" -msgstr "" +msgstr "Godot Engine suradnici" #: editor/editor_about.cpp msgid "Project Founders" -msgstr "" +msgstr "OsnivaÄi projekta" #: editor/editor_about.cpp msgid "Lead Developer" -msgstr "" +msgstr "Glavni razvijatelj" #: editor/editor_about.cpp msgid "Project Manager " -msgstr "" +msgstr "Projektni menadžer " #: editor/editor_about.cpp msgid "Developers" -msgstr "" +msgstr "Razvijatelji" #: editor/editor_about.cpp msgid "Authors" -msgstr "" +msgstr "Autori" #: editor/editor_about.cpp msgid "Platinum Sponsors" -msgstr "" +msgstr "Platinasti sponzori" #: editor/editor_about.cpp msgid "Gold Sponsors" -msgstr "" +msgstr "Zlatni sponzori" #: editor/editor_about.cpp msgid "Mini Sponsors" -msgstr "" +msgstr "Mini sponzori" #: editor/editor_about.cpp msgid "Gold Donors" -msgstr "" +msgstr "Zlatni donatori" #: editor/editor_about.cpp msgid "Silver Donors" -msgstr "" +msgstr "Srebrni donatori" #: editor/editor_about.cpp msgid "Bronze Donors" -msgstr "" +msgstr "BronÄani donatori" #: editor/editor_about.cpp msgid "Donors" -msgstr "" +msgstr "Donatori" #: editor/editor_about.cpp msgid "License" -msgstr "" +msgstr "Licenca" #: editor/editor_about.cpp msgid "Third-party Licenses" -msgstr "" +msgstr "Licence trećih strana" #: editor/editor_about.cpp msgid "" @@ -1098,19 +1138,19 @@ msgstr "" #: editor/editor_about.cpp msgid "All Components" -msgstr "" +msgstr "Sve komponente" #: editor/editor_about.cpp msgid "Components" -msgstr "" +msgstr "Komponente" #: editor/editor_about.cpp msgid "Licenses" -msgstr "" +msgstr "Licence" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Error opening package file, not in ZIP format." -msgstr "" +msgstr "PogreÅ¡ka prilikom otvaranja datoteke paketa, nije u ZIP formatu." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1118,16 +1158,16 @@ msgstr "" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" -msgstr "" +msgstr "Paket uspjeÅ¡no instaliran!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Success!" -msgstr "" +msgstr "Uspjeh!" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" -msgstr "" +msgstr "Instaliraj" #: editor/editor_asset_installer.cpp msgid "Package Installer" @@ -1135,19 +1175,19 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Speakers" -msgstr "" +msgstr "ZvuÄnici" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "" +msgstr "Dodaj efekt" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "" +msgstr "Preimenuj zvuÄnu sabirnicu" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" -msgstr "" +msgstr "Promijeni glasnoću zvuÄne sabirnice" #: editor/editor_audio_buses.cpp msgid "Toggle Audio Bus Solo" @@ -1167,7 +1207,7 @@ msgstr "" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "" +msgstr "Dodaj efekt zvuÄne sabirnice" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" @@ -1178,7 +1218,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1369,7 +1409,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1423,7 +1465,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1588,6 +1630,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1658,6 +1701,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1671,50 +1715,50 @@ msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File" -msgstr "" +msgstr "Otvori datoteku" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "" +msgstr "Otvori datoteke" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" -msgstr "" +msgstr "Otvori direktorij" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a File or Directory" -msgstr "" +msgstr "Otvori datoteku ili direktorij" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/editor_properties.cpp editor/inspector_dock.cpp #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp scene/gui/file_dialog.cpp msgid "Save" -msgstr "" +msgstr "Spremi" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Save a File" -msgstr "" +msgstr "Spremi datoteku" #: editor/editor_file_dialog.cpp msgid "Go Back" -msgstr "" +msgstr "Natrag" #: editor/editor_file_dialog.cpp msgid "Go Forward" -msgstr "" +msgstr "Naprijed" #: editor/editor_file_dialog.cpp msgid "Go Up" -msgstr "" +msgstr "Idi gore" #: editor/editor_file_dialog.cpp msgid "Toggle Hidden Files" -msgstr "" +msgstr "Prikaži/sakrij skrivene datoteke" #: editor/editor_file_dialog.cpp msgid "Toggle Favorite" -msgstr "" +msgstr "Prikaži/sakrij favorite" #: editor/editor_file_dialog.cpp msgid "Toggle Mode" @@ -1726,27 +1770,27 @@ msgstr "" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "" +msgstr "Pomakni favorita gore" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "" +msgstr "Pomakni favorita dolje" #: editor/editor_file_dialog.cpp msgid "Go to previous folder." -msgstr "" +msgstr "Idi u prethodni direktorij." #: editor/editor_file_dialog.cpp msgid "Go to next folder." -msgstr "" +msgstr "Idi u sljedeći direktorij." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder." -msgstr "" +msgstr "Idi u roditeljski direktorij." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Refresh files." -msgstr "" +msgstr "Osvježi datoteke." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." @@ -1762,21 +1806,21 @@ msgstr "" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "" +msgstr "Prikaži stavke kao listu." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "" +msgstr "Direktoriji i datoteke:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Preview:" -msgstr "" +msgstr "Pregled:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" -msgstr "" +msgstr "Datoteka:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." @@ -1805,6 +1849,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1813,46 +1858,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Opis:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1861,19 +1887,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1888,10 +1906,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1902,10 +1916,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1972,8 +1982,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1986,6 +1996,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2525,6 +2577,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2724,10 +2788,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2779,14 +2839,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2804,15 +2860,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2875,6 +2937,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2884,6 +2950,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Spoji sa skriptom:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2912,11 +2983,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3013,6 +3079,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3039,13 +3109,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3693,8 +3756,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3819,7 +3882,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3954,6 +4017,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4120,6 +4189,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4294,7 +4364,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4462,6 +4531,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4666,6 +4737,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4678,10 +4753,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4945,20 +5016,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "NaÄin Interpolacije" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5048,8 +5127,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5313,6 +5391,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5943,6 +6025,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5998,7 +6084,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6097,6 +6184,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6198,11 +6290,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6282,7 +6374,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6362,6 +6454,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6419,10 +6516,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6742,6 +6835,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6775,6 +6872,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7001,6 +7102,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7049,6 +7154,11 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Pomakni favorita gore" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7363,6 +7473,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7496,6 +7614,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7650,16 +7773,112 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Promijeni" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Preimenuj zvuÄnu sabirnicu" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "ObriÅ¡i" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Promijeni" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Brisati odabrani kljuÄ/odabrane kljuÄeve" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Zamijeni sve" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Promijeni" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7675,6 +7894,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7884,6 +8107,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8527,12 +8755,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9074,6 +9304,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9210,6 +9444,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9373,10 +9611,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9432,6 +9666,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9472,10 +9710,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "ObriÅ¡i kljuÄ(eve)" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "ObriÅ¡i kljuÄ(eve)" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9494,11 +9746,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9572,6 +9822,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9588,10 +9846,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9820,43 +10074,63 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Spoji sa skriptom:" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +#, fuzzy +msgid "Warning:" +msgstr "Upozorenja" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Error:" +msgstr "Zrcaljenje" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Source:" +msgstr "Resurs" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9864,7 +10138,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9872,6 +10146,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9888,6 +10166,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9900,6 +10182,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10096,10 +10382,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10108,6 +10390,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10259,6 +10545,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10394,6 +10688,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10422,6 +10720,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Promijeni Korak Animacije" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10430,6 +10733,25 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Dodaj Bezier ToÄku" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Pomakni Bezier ToÄke" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Pomakni Bezier ToÄke" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10470,10 +10792,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10498,6 +10830,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Odspoji" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10530,6 +10867,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Stvori" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10550,7 +10908,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10558,8 +10916,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkcije:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10582,6 +10941,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funkcije:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10676,6 +11044,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10697,7 +11069,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10774,6 +11147,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11311,10 +11688,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/hu.po b/editor/translations/hu.po index 4a2ef407d4..bc1ab1bdd1 100644 --- a/editor/translations/hu.po +++ b/editor/translations/hu.po @@ -66,6 +66,35 @@ msgstr "" msgid "On call to '%s':" msgstr "'%s' hÃvásánál:" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "Mixelés" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Ingyenes" @@ -353,6 +382,7 @@ msgstr "Létrehoz %d ÚJ nyomvonalat és beilleszti a kulcsokat?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Létrehozás" @@ -486,15 +516,12 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Összes Kijelölése" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Kiválasztó Mód" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Válasszon egy AnimationPlayer-t a Jelenetfából, hogy animációkat " +"szerkeszthessen." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -633,8 +660,9 @@ msgid "Scale Ratio:" msgstr "Méretezési arány:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Ãtmenet beállÃtása erre:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -645,6 +673,11 @@ msgstr "" msgid "Copy" msgstr "Másolás" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Kiválasztó Mód" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -833,7 +866,8 @@ msgstr "Csatlakoztató Jelzés:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -941,7 +975,8 @@ msgstr "Keresés:" msgid "Matches:" msgstr "Találatok:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -984,7 +1019,7 @@ msgid "Resource" msgstr "Forrás" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Útvonal" @@ -1260,7 +1295,8 @@ msgid "Delete Bus Effect" msgstr "Busz Effektus Törlése" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Hangbusz, Húzd és Vidd az átrendezéshez." #: editor/editor_audio_buses.cpp @@ -1457,7 +1493,9 @@ msgid "Add AutoLoad" msgstr "AutoLoad Hozzáadása" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Útvonal:" @@ -1512,7 +1550,7 @@ msgstr "Mappa Létrehozása" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Név:" @@ -1695,6 +1733,7 @@ msgstr "Jelenlegi:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Új" @@ -1775,6 +1814,7 @@ msgid "New Folder..." msgstr "Új Mappa..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "FrissÃtés" @@ -1930,6 +1970,7 @@ msgid "Class:" msgstr "Osztály:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Örököl:" @@ -1938,7 +1979,8 @@ msgid "Inherited by:" msgstr "Åt örökli:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Rövid LeÃrás:" #: editor/editor_help.cpp @@ -1946,41 +1988,19 @@ msgid "Properties" msgstr "Tulajdonságok" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metódusok" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metódusok" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Tulajdonságok" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Tulajdonságok" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Jelzések:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Felsorolások" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Felsorolások:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1989,21 +2009,13 @@ msgid "Constants" msgstr "Konstansok" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstansok:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "LeÃrás" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "LeÃrás:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Online Oktatóanyagok:" #: editor/editor_help.cpp @@ -2022,11 +2034,6 @@ msgid "Property Descriptions" msgstr "Tulajdonság LeÃrása:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Tulajdonság LeÃrása:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2040,11 +2047,6 @@ msgid "Method Descriptions" msgstr "Metódus LeÃrás:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Metódus LeÃrás:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2123,8 +2125,8 @@ msgstr "Kimenet:" msgid "Copy Selection" msgstr "Kiválasztás eltávolÃtás" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2137,6 +2139,50 @@ msgstr "Töröl" msgid "Clear Output" msgstr "Kimenet Törlése" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "LeállÃtás" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "Start!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Letöltés" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2742,6 +2788,19 @@ msgstr "Projekt" msgid "Project Settings..." msgstr "Projekt BeállÃtások" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Verzió:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2972,10 +3031,6 @@ msgstr "Scene szüneteltetés" msgid "Stop the scene." msgstr "LeállÃtja a jelenetet." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "LeállÃtás" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Szerkesztett Scene futtatása." @@ -3031,15 +3086,11 @@ msgid "Inspector" msgstr "MegfigyelÅ‘" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Összes kibontása" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Kimenet" @@ -3058,15 +3109,21 @@ msgstr "Export Sablonok Kezelése" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3129,6 +3186,11 @@ msgstr "KövetkezÅ‘ SzerkesztÅ‘ Megnyitása" msgid "Open the previous Editor" msgstr "ElÅ‘zÅ‘ SzerkesztÅ‘ Megnyitása" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Nincs felületi forrás meghatározva." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Háló ElÅ‘nézetek Létrehozása" @@ -3139,6 +3201,11 @@ msgstr "Indexkép..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Szkript Futtatása" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Sokszög Szerkesztése" @@ -3168,12 +3235,6 @@ msgstr "Ãllapot:" msgid "Edit:" msgstr "Szerkesztés" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "Start!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Mérés:" @@ -3272,6 +3333,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Szkript Futtatása" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3298,14 +3364,6 @@ msgstr "Beillesztés" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Megnyitás SzerkesztÅ‘ben" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -4004,8 +4062,9 @@ msgstr " Fájlok" msgid "Import As:" msgstr "Importálás Mint:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "BeépÃtett BeállÃtások..." #: editor/import_dock.cpp @@ -4138,7 +4197,7 @@ msgstr "BÅ‘vÃtmények" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4292,6 +4351,13 @@ msgstr "Pont Mozgatása" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Megnyitás SzerkesztÅ‘ben" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4476,6 +4542,7 @@ msgid "Change Animation Name:" msgstr "Animáció Nevének Megváltoztatása:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Animáció Törlése?" @@ -4660,7 +4727,6 @@ msgstr "Animáció Neve:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Hiba!" @@ -4837,6 +4903,8 @@ msgid "Current:" msgstr "Jelenlegi:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Bemenet Hozzáadása" @@ -5053,6 +5121,10 @@ msgid "All" msgstr "Mind" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importálás" @@ -5067,11 +5139,6 @@ msgid "Sort:" msgstr "Rendezés:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Lekérdezés..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategória:" @@ -5371,23 +5438,33 @@ msgstr "Pásztázás Mód" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Kiválasztó Mód" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Illesztés be- és kikapcsolása" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Illesztés Használata" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "Illesztési beállÃtások" +msgid "Toggle grid snapping." +msgstr "Illesztés be- és kikapcsolása" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Rácshoz illesztés" +msgid "Use Grid Snap" +msgstr "Illesztés Használata" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "Illesztési beállÃtások" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5485,8 +5562,8 @@ msgid "View" msgstr "Nézet" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Rács MegjelenÃtése" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5762,6 +5839,11 @@ msgstr "Görbe Lineáris ÉrintÅ‘jének Kapcsolása" msgid "Hold Shift to edit tangents individually" msgstr "Tartsa lenyomva a Shift gombot az érintÅ‘k egyenkénti szerkesztéséhez" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Jobb Kattintás: Pont Törlése" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "GI Szonda Besütése" @@ -6417,6 +6499,10 @@ msgid "Grid" msgstr "Rács" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Rács MegjelenÃtése" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Illesztés BeállÃtása" @@ -6478,7 +6564,8 @@ msgstr "Példány:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "TÃpus:" @@ -6589,6 +6676,11 @@ msgid "Find Next" msgstr "KövetkezÅ‘ Keresése" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "ElÅ‘zÅ‘ Keresése" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Objektumtulajdonságok." @@ -6696,14 +6788,14 @@ msgid "Toggle Scripts Panel" msgstr "Szkript Panel MegjelenÃtése" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Ãtlépés" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Belépés" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Ãtlépés" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Szünet" @@ -6787,7 +6879,7 @@ msgstr "Legutóbbi Jelenetek Törlése" msgid "Connections to method:" msgstr "Csatlakoztatás Node-hoz:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Forrás" @@ -6874,6 +6966,11 @@ msgstr "Pontok Törlése" msgid "Cut" msgstr "Kivágás" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Összes Kijelölése" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Sor Törlése" @@ -6934,10 +7031,6 @@ msgid "Auto Indent" msgstr "Automatikus Behúzás" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "ElÅ‘zÅ‘ Keresése" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Fájlok Szűrése..." @@ -7276,6 +7369,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7310,6 +7407,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Illesztés Használata" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7547,6 +7648,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7599,6 +7704,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Mozgás Mód" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animáció" @@ -7931,6 +8041,15 @@ msgid "Enable Priority" msgstr "SzűrÅ‘k Szerkesztése" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Fájlok Szűrése..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8079,6 +8198,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Jelenlegi tétel eltávolÃtása" @@ -8254,18 +8378,117 @@ msgstr "Ezt a műveletet nem lehet végrehajtani egy Scene nélkül." msgid "TileSet" msgstr "TileSet-re..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Bemenet Hozzáadása" +msgid "No commit message was provided" +msgstr "Nincs név megadva" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Közösség" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Szó Eleji Nagybetű" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Új %s Létrehozása" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Változtatás" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Ãtnevezés" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Törlés" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Változtatás" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Kiválasztás átméretezés" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Összes Mentése" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Szkript Változtatások Szinkronizálása" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Bemenet Hozzáadása" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8283,6 +8506,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Bemenet Hozzáadása" @@ -8511,6 +8738,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9172,12 +9404,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9733,6 +9967,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Pont Mozgatása a Görbén" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9872,6 +10111,10 @@ msgid "Plugins" msgstr "BÅ‘vÃtmények" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "BeépÃtett BeállÃtások..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -10045,10 +10288,6 @@ msgstr "Mind Nagybetű" msgid "Reset" msgstr "NagyÃtás VisszaállÃtása" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10104,6 +10343,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10145,10 +10388,24 @@ msgid "Make node as Root" msgstr "Scene mentés" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Node létrehozás" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Node létrehozás" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10167,11 +10424,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10251,6 +10506,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Godot online dokumentáció megnyitása" @@ -10270,11 +10533,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Szkript Futtatása" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Új %s Létrehozása" @@ -10521,24 +10779,19 @@ msgid "Will load an existing script file." msgstr "MeglévÅ‘ Busz Elrendezés betöltése." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Osztály:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Sablon EltávolÃtása" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Szkript Futtatása" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10553,11 +10806,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Hiba!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Hiba Másolása" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Hiba Másolása" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Forrás" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Forrás" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Forrás" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10565,14 +10848,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Kapcsolat bontva" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Hiba Másolása" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Pontok Törlése" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10589,6 +10878,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Projekt Exportálása" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10601,6 +10895,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10803,10 +11101,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10815,6 +11109,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10969,6 +11267,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Objektumtulajdonságok." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11113,6 +11420,10 @@ msgid "Create a new variable." msgstr "Új %s Létrehozása" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Jelzések:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Új sokszög létrehozása a semmibÅ‘l." @@ -11142,6 +11453,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Pont eltávolÃtása" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11150,6 +11466,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Bemenet Hozzáadása" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Bemenet Hozzáadása" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Pont eltávolÃtása" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Pont eltávolÃtása" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11190,10 +11526,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11219,6 +11565,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Kapcsolat bontva" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Csatlakoztatás Node-hoz:" @@ -11253,6 +11604,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Körvonal KészÃtése" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11273,16 +11645,18 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "Csontok Létrehozása" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Tagok:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkciók:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11306,6 +11680,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Funkciók:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "FrissÃtés" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Tagok" @@ -11401,6 +11785,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Válasszon készüléket a listából" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11422,7 +11810,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11501,6 +11890,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12053,11 +12446,6 @@ msgstr "" "gyermekévé, hogy Ãgy kapjon méretet. EllenkezÅ‘ esetben tegye RenderTarget-" "té, és állÃtsa hozzá a belsÅ‘ textúráját valamilyen node-hoz kirajzolásra." -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "Bemenet Hozzáadása" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12089,6 +12477,48 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Rácshoz illesztés" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Bemenet Hozzáadása" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "Bemenet Hozzáadása" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metódusok" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Tulajdonságok" + +#~ msgid "Enumerations:" +#~ msgstr "Felsorolások:" + +#~ msgid "Constants:" +#~ msgstr "Konstansok:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "LeÃrás:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Tulajdonság LeÃrása:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Metódus LeÃrás:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Lekérdezés..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12173,9 +12603,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "Ugrás a szülÅ‘mappába" -#~ msgid "Select device from the list" -#~ msgstr "Válasszon készüléket a listából" - #~ msgid "Open Scene(s)" #~ msgstr "Scene(k) megnyitás" @@ -12240,9 +12667,6 @@ msgstr "" #~ msgid "Splits" #~ msgstr "Útvonal Felosztása" -#~ msgid "No name provided" -#~ msgstr "Nincs név megadva" - #~ msgid "Create Poly" #~ msgstr "Sokszög Létrehozása" @@ -12377,9 +12801,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Animáció nyomvonal lefelé mozgatás" -#~ msgid "Set Transitions to:" -#~ msgstr "Ãtmenet beállÃtása erre:" - #~ msgid "Anim Track Rename" #~ msgstr "Animáció nyomvonal átnevezés" diff --git a/editor/translations/id.po b/editor/translations/id.po index 580631d6bc..dc8e5c10d5 100644 --- a/editor/translations/id.po +++ b/editor/translations/id.po @@ -25,7 +25,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" +"PO-Revision-Date: 2019-10-04 03:15+0000\n" "Last-Translator: Sofyan Sugianto <sofyanartem@gmail.com>\n" "Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/" "godot/id/>\n" @@ -53,9 +53,9 @@ msgid "Invalid input %i (not passed) in expression" msgstr "Masukkan tidak sah %i (tidak diberikan) dalam ekspresi" #: core/math/expression.cpp -#, fuzzy msgid "self can't be used because instance is null (not passed)" -msgstr "self tidak dapat digunakan karena tidak memiliki instance (not passed)" +msgstr "" +"self tidak dapat digunakan karena tidak memiliki instance (tidak lolos)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -77,6 +77,34 @@ msgstr "argumen untuk membangun '%s' tidak sah" msgid "On call to '%s':" msgstr "Pada pemanggilan '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Bebaskan" @@ -341,6 +369,7 @@ msgstr "Buat track BARU %d dan masukkan tombol-tombol?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Buat" @@ -482,14 +511,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Peringatan: Menyunting animasi yang diimpor" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Pilih Semua" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Pilih Tidak Ada" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Lokasi untuk node AnimationPlayer yang mengandung animasi belum diatur." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -621,7 +646,8 @@ msgid "Scale Ratio:" msgstr "Rasio Skala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Pilih track untuk disalin:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -633,6 +659,11 @@ msgstr "Pilih track untuk disalin:" msgid "Copy" msgstr "Kopy" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Pilih Tidak Ada" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Tambah Clip Trek Audio" @@ -670,12 +701,10 @@ msgid "Replaced %d occurrence(s)." msgstr "kejadian %d diganti." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." msgstr "Ditemukan %d kecocokan." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." msgstr "Ditemukan %d kecocokan." @@ -814,7 +843,8 @@ msgstr "Tidak dapat menghubungkan sinyal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -915,7 +945,8 @@ msgstr "Cari:" msgid "Matches:" msgstr "Kecocokan:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -956,7 +987,7 @@ msgid "Resource" msgstr "Resource" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Path" @@ -970,7 +1001,7 @@ msgstr "Perbaiki yang Rusak" #: editor/dependency_editor.cpp msgid "Dependency Editor" -msgstr "Penyunting Dependensi" +msgstr "Editor Dependensi" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" @@ -1129,22 +1160,20 @@ msgid "License" msgstr "Lisensi" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" msgstr "Lisensi Pihak Ketiga" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engine mengandalkan sejumlah perpustakaan bebas dan sumber terbuka " -"pihak ketiga, semuanya cocok dengan persyaratan lisensi MIT. Berikut adalah " -"daftar lengkap semua komponen pihak ketiga dengan pernyataan hak cipta dan " -"lisensi masing-masing." +"Godot Engine mengandalkan sejumlah pustaka bebas dan sumber terbuka pihak " +"ketiga, semuanya cocok dengan persyaratan lisensi MIT. Berikut adalah daftar " +"lengkap semua komponen pihak ketiga dengan pernyataan hak cipta dan lisensi " +"masing-masing." #: editor/editor_about.cpp msgid "All Components" @@ -1159,7 +1188,6 @@ msgid "Licenses" msgstr "Lisensi" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." msgstr "Gagal saat membuka paket, tidak dalam bentuk zip." @@ -1229,8 +1257,8 @@ msgid "Delete Bus Effect" msgstr "Hapus Effect Bus" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Suara Bus, Geser dan Taruh untuk atur ulang." +msgid "Drag & drop to rearrange." +msgstr "Seret dan Lepas untuk menyusun ulang." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1420,7 +1448,9 @@ msgid "Add AutoLoad" msgstr "Tambahkan AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Path:" @@ -1474,7 +1504,7 @@ msgstr "Buat Folder" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nama:" @@ -1549,11 +1579,11 @@ msgstr "Pada ekspor 32-bit PCK yang ditanamkan tidak boleh lebih dari 4GiB." #: editor/editor_feature_profile.cpp msgid "3D Editor" -msgstr "Penyunting 3D" +msgstr "Editor 3D" #: editor/editor_feature_profile.cpp msgid "Script Editor" -msgstr "Penyunting Skrip" +msgstr "Editor Skrip" #: editor/editor_feature_profile.cpp msgid "Asset Library" @@ -1589,7 +1619,7 @@ msgstr "Sudah ada profil dengan nama seperti ini." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "(Penyunting Dinonaktifkan, Properti Dinonaktifkan)" +msgstr "(Editor Dinonaktifkan, Properti Dinonaktifkan)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" @@ -1597,7 +1627,7 @@ msgstr "(Properti Dinonaktifkan)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "(Penyunting Dinonaktifkan)" +msgstr "(Editor Dinonaktifkan)" #: editor/editor_feature_profile.cpp msgid "Class Options:" @@ -1605,7 +1635,7 @@ msgstr "Opsi Kelas:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "Aktifkan Penyunting Kontekstual" +msgstr "Aktifkan Editor Kontekstual" #: editor/editor_feature_profile.cpp msgid "Enabled Properties:" @@ -1649,6 +1679,7 @@ msgstr "Jadikan Profil Saat Ini" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Baru" @@ -1687,7 +1718,7 @@ msgstr "Ekspor Profil" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" -msgstr "Kelola Penyunting Fitur Profil" +msgstr "Kelola Editor Fitur Profil" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" @@ -1719,6 +1750,7 @@ msgid "New Folder..." msgstr "Buat Direktori..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Segarkan" @@ -1819,7 +1851,7 @@ msgstr "Beralih visibilitas berkas yang tersembunyi." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." -msgstr "Tampilkan item sebagai grid thumbnail" +msgstr "Tampilkan item sebagai grid thumbnail." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." @@ -1868,6 +1900,7 @@ msgid "Class:" msgstr "Kelas:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Turunan:" @@ -1876,46 +1909,26 @@ msgid "Inherited by:" msgstr "Diturunkan oleh:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Deskripsi Singkat:" +msgid "Brief Description" +msgstr "Deskripsi Singkat" #: editor/editor_help.cpp msgid "Properties" msgstr "Properti Objek" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Properti:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Fungsi" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metode-metode:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Properti-properti Tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Properti-properti Tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Sinyal-sinyal:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerasi" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerasi:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1924,20 +1937,12 @@ msgid "Constants" msgstr "Konstanta" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanta:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Deskripsi Kelas" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Deskripsi Kelas:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutorial Daring:" +msgid "Online Tutorials" +msgstr "Tutorial Daring" #: editor/editor_help.cpp msgid "" @@ -1954,10 +1959,6 @@ msgid "Property Descriptions" msgstr "Deskripsi Properti" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Deskripsi Properti:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1970,10 +1971,6 @@ msgid "Method Descriptions" msgstr "Deskripsi Metode" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Deskripsi Metode:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2042,8 +2039,8 @@ msgstr "Keluaran:" msgid "Copy Selection" msgstr "Salin Seleksi" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2056,9 +2053,51 @@ msgstr "Bersihkan" msgid "Clear Output" msgstr "Bersihkan Luaran" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Hentikan" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Mulai" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s / s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Turunkan" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Naikkan" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC masuk" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET masuk" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC Keluar" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET Keluar" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Jendela Baru" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2386,9 +2425,8 @@ msgid "Close Scene" msgstr "Tutup Skena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Tutup Skena" +msgstr "Buka Kembali Skena yang Ditutup" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2506,9 +2544,8 @@ msgid "Close Tab" msgstr "Tutup Tab" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Tutup Tab" +msgstr "Batalkan Tutup Tab" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2641,19 +2678,28 @@ msgid "Project" msgstr "Proyek" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Pengaturan Proyek" +msgstr "Pengaturan Proyek…" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kontrol Versi" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Atur Kontrol Versi" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Matikan Kontrol Versi" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Ekspor" +msgstr "Ekspor…" #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Pasang Templat Build Android" +msgstr "Pasang Templat Build Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2664,9 +2710,8 @@ msgid "Tools" msgstr "Alat-alat" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Penjelajah Resource Orphan" +msgstr "Penjelajah Resource Orphan…" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2769,9 +2814,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Pengaturan Editor" +msgstr "Pengaturan Editor…" #: editor/editor_node.cpp msgid "Editor Layout" @@ -2783,7 +2827,7 @@ msgstr "Ambil Tangkapan Layar" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Screenshot disimpan di folder Editor Data/Settings" +msgstr "Tangkapan Layar disimpan di folder Data/Pengaturan Editor." #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2795,7 +2839,7 @@ msgstr "Jungkitkan Konsol Sistem" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" -msgstr "Buka Penyunting Direktori Data/Pengaturan" +msgstr "Buka Direktori Editor Data/Pengaturan" #: editor/editor_node.cpp msgid "Open Editor Data Folder" @@ -2803,17 +2847,15 @@ msgstr "Buka Folder Data Editor" #: editor/editor_node.cpp msgid "Open Editor Settings Folder" -msgstr "Buka Penyunting Direktori Pengaturan" +msgstr "Buka Direktori Editor Pengaturan" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Kelola Penyunting Fitur" +msgstr "Kelola Editor Fitur…" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Mengatur Templat Ekspor" +msgstr "Kelola Templat Ekspor…" #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2869,10 +2911,6 @@ msgstr "Hentikan Sementara Skena" msgid "Stop the scene." msgstr "Hentikan skena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Hentikan" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Mainkan scene redaksi." @@ -2900,7 +2938,7 @@ msgstr "Simpan & Mulai Ulang" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." -msgstr "Putar ketika jendela penyunting digambar ulang." +msgstr "Putar ketika jendela editor digambar ulang." #: editor/editor_node.cpp msgid "Update Continuously" @@ -2923,14 +2961,10 @@ msgid "Inspector" msgstr "Inspektur" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Perluas Panel Bawah" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Luaran" @@ -2948,21 +2982,33 @@ msgstr "Kelola Templat" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Ini akan memasang proyek Android untuk build kustom.\n" -"Sebagai catatan, untuk menggunakannya, harus diaktifkan per preset ekspor." +"Ini akan mengatur proyek Anda untuk build Android khusus dengan memasang " +"templat sumber ke \"res://android/build\".\n" +"Anda kemudian dapat menerapkan modifikasi dan membangun APK khusus Anda " +"sendiri pada saat ekspor (menambahkan modul, mengubah AndroidManifest.xml, " +"dll.).\n" +"Perhatikan bahwa untuk membuat build khusus alih-alih menggunakan APK yang " +"sudah dibuat sebelumnya, opsi \"Use Custom Build\" harus diaktifkan di " +"preset ekspor Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "Templat build Android sudah terpasang sebelumnya dan tidak akan ditimpa.\n" -"Hapus direktori \"build\" secara manual sebelum menjalankan perintah ini " -"lagi." +"Hapus direktori \"res://android/build\" secara manual sebelum menjalankan " +"perintah ini lagi." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3002,15 +3048,15 @@ msgstr "Pilih" #: editor/editor_node.cpp msgid "Open 2D Editor" -msgstr "Buka Penyunting 2D" +msgstr "Buka Editor 2D" #: editor/editor_node.cpp msgid "Open 3D Editor" -msgstr "Buka Penyunting 3D" +msgstr "Buka Editor 3D" #: editor/editor_node.cpp msgid "Open Script Editor" -msgstr "Buka Penyunting Skrip" +msgstr "Buka Editor Skrip" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" @@ -3018,11 +3064,15 @@ msgstr "Buka Pustaka Aset" #: editor/editor_node.cpp msgid "Open the next Editor" -msgstr "Buka Penyunting Selanjutnya" +msgstr "Buka Editor Selanjutnya" #: editor/editor_node.cpp msgid "Open the previous Editor" -msgstr "Buka Penyunting Sebelumnya" +msgstr "Buka Editor Sebelumnya" + +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Tidak ada sub-sumber yang ditemukan." #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" @@ -3033,6 +3083,10 @@ msgid "Thumbnail..." msgstr "Gambar Kecil..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Skrip Utama:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Sunting Plug-in" @@ -3061,11 +3115,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Sunting:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Mulai" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Ukuran:" @@ -3171,6 +3220,10 @@ msgstr "Pilih Viewport" msgid "New Script" msgstr "Skrip Baru" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Extend Skrip" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "%s baru" @@ -3197,13 +3250,6 @@ msgstr "Tempel" msgid "Convert To %s" msgstr "Konversikan ke %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Buka Penyunting" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Node yang terpilih bukanlah Viewport!" @@ -3282,7 +3328,6 @@ msgid "Import From Node:" msgstr "Impor dari Node:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Unduh Ulang" @@ -3301,7 +3346,7 @@ msgstr "Unduh" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Templat ekspor resmi tidak tersedia untuk build pengembangan." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3384,23 +3429,20 @@ msgid "Download Complete." msgstr "Unduhan Selesai." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Tidak dapat menyimpan tema ke dalam berkas:" +msgstr "Tidak dapat menghapus berkas sementara:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Instalasi templat gagal. Arsip templat yang bermasalah dapat ditemukan di " -"'%s'." +"Instalasi templat gagal.\n" +"Arsip templat yang bermasalah dapat ditemukan di '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Kesalahan saat meminta url: " +msgstr "Galat saat meminta URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3449,9 +3491,8 @@ msgid "SSL Handshake Error" msgstr "Kesalahan jabat tangan SSL" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "Membuka Aset Terkompresi" +msgstr "Mengekstrak Kode Sumber Build Android" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3588,9 +3629,8 @@ msgid "Move To..." msgstr "Pindahkan ke..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Skena Baru" +msgstr "Skena Baru…" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3607,9 +3647,8 @@ msgstr "Bentangkan Semua" #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Collapse All" -msgstr "Ciutkan Semua" +msgstr "Lipat Semua" #: editor/filesystem_dock.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -3659,9 +3698,8 @@ msgid "Overwrite" msgstr "Timpa" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Buat dari Skena" +msgstr "Buat Skena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3741,21 +3779,18 @@ msgid "Invalid group name." msgstr "Nama grup tidak valid." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Kelola Grup" +msgstr "Ubah Nama Grup" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Hapus Penampilan" +msgstr "Hapus Grup" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Kelompok" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Node tidak dalam Grup" @@ -3770,12 +3805,11 @@ msgstr "Node dalam Grup" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Grup yang kosong akan dihapus secara otomatis." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Penyunting Skrip" +msgstr "Editor Grup" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3874,9 +3908,9 @@ msgstr " Berkas" msgid "Import As:" msgstr "Impor sebagai:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Prasetel..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Prasetel" #: editor/import_dock.cpp msgid "Reimport" @@ -3888,7 +3922,7 @@ msgstr "Simpan skena, impor ulang, dan mulai ulang" #: editor/import_dock.cpp msgid "Changing the type of an imported file requires editor restart." -msgstr "Mengubah jenis berkas yang diimpor butuh menyalakan ulang penyunting." +msgstr "Mengubah jenis berkas yang diimpor, editor harus dimulai ulang." #: editor/import_dock.cpp msgid "" @@ -3906,9 +3940,8 @@ msgid "Expand All Properties" msgstr "Perluas Semua Properti" #: editor/inspector_dock.cpp -#, fuzzy msgid "Collapse All Properties" -msgstr "Ciutkan semua properti" +msgstr "Tutup Semua Properti" #: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp @@ -3984,9 +4017,8 @@ msgid "MultiNode Set" msgstr "Set MultiNode" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Pilih sebuah node untuk menyunting Sinyal dan Grup." +msgstr "Pilih sebuah node untuk menyunting sinyal dan grup." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4002,9 +4034,9 @@ msgstr "Nama Plugin:" #: editor/plugin_config_dialog.cpp msgid "Subfolder:" -msgstr "Subfolder:" +msgstr "Subdirektori:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Bahasa:" @@ -4145,6 +4177,12 @@ msgstr "Titik" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Buka Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Buka Node Animasi" @@ -4316,6 +4354,7 @@ msgid "Change Animation Name:" msgstr "Ubah Nama Animasi:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Hapus Animasi?" @@ -4490,7 +4529,6 @@ msgstr "Nama Animasi:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Kesalahan!" @@ -4661,6 +4699,8 @@ msgid "Current:" msgstr "Saat ini:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Tambah Masukan" @@ -4761,18 +4801,16 @@ msgid "Request failed, return code:" msgstr "Permintaan gagal, return code:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "Permintaan Gagal." +msgstr "Permintaan gagal." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Tidak dapat menyimpan tema ke dalam berkas:" +msgstr "Tidak dapat menyimpan respons ke:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Galat saat menyimpan ke dalam berkas." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4781,17 +4819,15 @@ msgstr "Permintaan gagal, terlalu banyak pengalihan" #: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Redirect loop." -msgstr "Mengalihkan Loop." +msgstr "Mengalihkan berulang-ulang." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Permintaan gagal, return code:" +msgstr "Permintaan gagal, tenggat waktu habis" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Waktu" +msgstr "Tenggat waktu habis." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4870,24 +4906,22 @@ msgid "All" msgstr "Semua" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Impor Ulang..." +msgstr "Impor…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Pengaya" +msgstr "Pengaya…" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Sortir:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Penyortiran terbalik." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategori:" @@ -4897,9 +4931,8 @@ msgid "Site:" msgstr "Situs:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Dukungan..." +msgstr "Dukungan" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4910,9 +4943,8 @@ msgid "Testing" msgstr "Menguji" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Muat..." +msgstr "Sedang memuat…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -4941,9 +4973,8 @@ msgid "Failed creating lightmap images, make sure path is writable." msgstr "Gagal membuat gambar lightmap, pastikan path dapat ditulis." #: editor/plugins/baked_lightmap_editor_plugin.cpp -#, fuzzy msgid "Bake Lightmaps" -msgstr "Ganti Radius Lampu" +msgstr "Panggang Lightmaps" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp @@ -5079,9 +5110,8 @@ msgid "Paste Pose" msgstr "Tempel Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Bersihkan Pertulangan" +msgstr "Bersihkan Panduan" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5168,21 +5198,32 @@ msgid "Pan Mode" msgstr "Mode Geser Pandangan" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Mode Penggaris" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Jungkitkan Pengancingan." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Gunakan Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opsi-opsi Snap" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Jungkitkan Pengancingan." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Kancing ke Kisi" +#, fuzzy +msgid "Use Grid Snap" +msgstr "Pengancingan Kisi" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Opsi-opsi Snap" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5271,8 +5312,8 @@ msgid "View" msgstr "Pandangan" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Tampilkan Kotak-kotak" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5539,6 +5580,11 @@ msgstr "Beralih Kurva Linear Tangen" msgid "Hold Shift to edit tangents individually" msgstr "Tahan Shift untuk menyunting tangen kurva satu-persatu" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Klik Kanan: Hapus Titik" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Panggang GI Probe" @@ -5557,7 +5603,7 @@ msgstr "Item" #: editor/plugins/item_list_editor_plugin.cpp msgid "Item List Editor" -msgstr "Penyunting Daftar Item" +msgstr "Editor Daftar Item" #: editor/plugins/light_occluder_2d_editor_plugin.cpp msgid "Create Occluder Polygon" @@ -5817,26 +5863,23 @@ msgstr "Waktu Pembuatan (detik):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Bidang geometri tidak mengandung area apapun." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Node tidak mengandung geometri (bidang)." +msgstr "Geometri tidak mengandung bidang apapun." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" tidak mewarisi Spasial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Node tidak mengandung geometri." +msgstr "\"%s\" tidak mengandung geometri." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Node tidak mengandung geometri." +msgstr "\"%s\" tidak mengandung geometri bidang." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6077,11 +6120,11 @@ msgstr "Gambar Pembobotan Tulang" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." -msgstr "Buka Penyunting UV Poligon 2D." +msgstr "Buka Editor UV Poligon 2D." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygon 2D UV Editor" -msgstr "Penyunting UV Poligon 2D" +msgstr "Editor UV Poligon 2D" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "UV" @@ -6180,6 +6223,10 @@ msgid "Grid" msgstr "Kisi" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Tampilkan Kotak-kotak" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Konfigurasikan Kisi:" @@ -6235,14 +6282,15 @@ msgstr "Instansi:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Jenis:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp msgid "Open in Editor" -msgstr "Buka dalam Penyunting" +msgstr "Buka dalam Editor" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Load Resource" @@ -6273,9 +6321,8 @@ msgid "Error writing TextFile:" msgstr "Galat saat menulis TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Galat tidak dapat memuat berkas." +msgstr "Tidak dapat memuat berkas di:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6298,7 +6345,6 @@ msgid "Error Importing" msgstr "Galat saat mengimpor" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Berkas Teks Baru..." @@ -6336,6 +6382,11 @@ msgid "Find Next" msgstr "Pencarian Selanjutnya" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Cari Sebelumnya" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Penyaring Skrip" @@ -6380,9 +6431,8 @@ msgid "Open..." msgstr "Buka..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Buka Cepat Script..." +msgstr "Buka kembali Skrip yang Ditutup" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6438,14 +6488,14 @@ msgid "Toggle Scripts Panel" msgstr "Jungkitkan Panel Skrip" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Langkahi" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Masuki" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Langkahi" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Putuskan" @@ -6460,7 +6510,7 @@ msgstr "Biarkan Pengawakutu Terbuka" #: editor/plugins/script_editor_plugin.cpp msgid "Debug with External Editor" -msgstr "Awakutu menggunakan Penyunting Eksternal" +msgstr "Awakutu menggunakan Editor Eksternal" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." @@ -6517,15 +6567,14 @@ msgid "Search Results" msgstr "Hasil Pencarian" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Bersihkan Scenes baru-baru ini" +msgstr "Bersihkan Skrip baru-baru ini" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Hubungan dengan fungsi:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Sumber" @@ -6607,6 +6656,11 @@ msgstr "Breakpoint" msgid "Cut" msgstr "Potong" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Pilih Semua" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Hapus Baris" @@ -6644,9 +6698,8 @@ msgid "Complete Symbol" msgstr "Simbol Lengkap" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Seleksi Skala" +msgstr "Evaluasi Seleksi" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6665,10 +6718,6 @@ msgid "Auto Indent" msgstr "Indentasi Otomatis" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Cari Sebelumnya" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Cari Dalam Berkas..." @@ -6955,9 +7004,8 @@ msgid "Audio Listener" msgstr "Listener Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Aktifkan penyaringan" +msgstr "Aktifkan Efek Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -6992,11 +7040,16 @@ msgid "Freelook Speed Modifier" msgstr "Pengubah Kecepatan TampilanBebas" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Pengubah Kecepatan TampilanBebas" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"Catatan: Nilai FPS yang ditampilkan adalah framerate-nya penyunting.\n" +"Catatan: Nilai FPS yang ditampilkan adalah framerate-nya editor.\n" "Tidak bisa digunakan sebagai indikasi kinerja game yang dapat dihandalkan." #: editor/plugins/spatial_editor_plugin.cpp @@ -7014,6 +7067,7 @@ msgstr "Kancingkan Node ke Lantai" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." msgstr "" +"Tidak dapat menemukan floor yang solid untuk mengancingkan seleksi ke sana." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7026,9 +7080,12 @@ msgstr "" "Alt+Klik Kanan: Daftar seleksi mendalam" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Mode Ruang Lokal (%s)" +msgstr "Gunakan Ruang Lokal" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Gunakan Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7125,9 +7182,8 @@ msgstr "Tampilkan Kisi" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Pengaturan" +msgstr "Pengaturan…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7258,6 +7314,11 @@ msgid "Simplification: " msgstr "Penyederhanaan: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Pertumbuhan (Piksel): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Pertumbuhan (Piksel): " @@ -7306,6 +7367,10 @@ msgid "(empty)" msgstr "(kosong)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Geser Frame" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animasi:" @@ -7456,11 +7521,11 @@ msgstr "Buat Templat Kosong" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Editor Template" -msgstr "Buat Templat Penyunting Kosong" +msgstr "Buat Templat Editor Kosong" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "Buat dari Tema Penyunting Saat Ini" +msgstr "Buat dari Tema Editor Saat Ini" #: editor/plugins/theme_editor_plugin.cpp msgid "Toggle Button" @@ -7503,14 +7568,12 @@ msgid "Submenu" msgstr "Submenu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Item 1" +msgstr "Sub menu 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Item 2" +msgstr "Sub menu 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7622,17 +7685,24 @@ msgid "Enable Priority" msgstr "Aktifkan Prioritas" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Saring tile" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Berikan sumber TileSet untuk TileMap ini untuk menggunakan Tile-nya." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Cat Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift + Klik Kanan: Menggambar Garis\n" -"Shift + Ctrl + Klik Kanan: Cat Persegi Panjang" +"Shift + Klik Kiri: Menggambar Garis\n" +"Shift + Ctrl + Klik Kiri: Cat Persegi Panjang" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7757,6 +7827,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Tampilkan Nama Tile (Tahan Tombol Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Hapus tekstur yang dipilih? Ini akan menghapus semua tile yang " @@ -7928,16 +8003,106 @@ msgstr "Properti ini tidak dapat diubah." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Tidak ada ekstensi VCS yang tersedia." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Galat" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Tidak ada pesan komit yang diberikan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Komit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inisialisasi" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Deteksi perubahan baru" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Perubahan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Berganti nama" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Dihapus" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Jenis perubahan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Stage Hanya yang Dipilih" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Stage Semua" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Komit Perubahan" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Hanya GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Tambah masukan +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Tambah keluaran +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7953,6 +8118,10 @@ msgid "Boolean" msgstr "Boolean" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Tambah port masukan" @@ -8010,9 +8179,8 @@ msgstr "Duplikat Node" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste Nodes" -msgstr "Path ke Node:" +msgstr "Rekatkan Node" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Delete Nodes" @@ -8035,9 +8203,8 @@ msgid "Light" msgstr "Cahaya" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Buat Node Shader" +msgstr "Tampilkan kode shader yang dihasilkan." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8171,6 +8338,13 @@ msgstr "" "salah." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Mengembalikan vektor terkait jika nilai boolean yang diberikan benar atau " +"salah." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Mengembalikan hasil boolean dari perbandingan antara dua parameter." @@ -8410,7 +8584,6 @@ msgid "Returns the square root of the parameter." msgstr "Mengembalikan nilai akar kuadrat dari parameter." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8418,22 +8591,21 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Fungsi SmoothStep( skalar(tepi0), skalar(tepi1), skalar(x) ).\n" +"Fungsi SmoothStep( skalar(batas0), skalar(batas1), skalar(x) ).\n" "\n" -"Mengembalikan 0.0 jika 'x' lebih kecil dari 'tepi0' dan 1.0 jika x lebih " -"besar dari 'tepi1'. Jika tidak, nilai balik diinterpolasi antara 0.0 dan 1.0 " -"menggunakan polinomial Hermite." +"Mengembalikan 0.0 jika 'x' lebih kecil dari 'batas0' dan 1.0 jika x lebih " +"besar dari 'batas1'. Jika tidak, nilai kembalian diinterpolasi antara 0.0 " +"dan 1.0 menggunakan polinomial 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 "" -"Fungsi Step( skalar(tepi), skalar(x) ).\n" +"Fungsi Step( skalar(batas), skalar(x) ).\n" "\n" -"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'tepi' dan sebaliknya 1.0." +"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'batas' dan sebaliknya 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." @@ -8603,9 +8775,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolasi linier antara dua vektor." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolasi linier antara dua vektor." +msgstr "Interpolasi linier antara dua vektor menggunakan skalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8632,7 +8803,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Mengembalikan vektor yang menunjuk ke arah refraksi." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8640,14 +8810,13 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Fungsi SmoothStep( vektor(tepi0), vektor(tepi1), vektor (x)).\n" +"Fungsi SmoothStep( vektor(batas0), vektor(batas1), vektor (x)).\n" "\n" -"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'tepi0' dan 1.0 jika 'x' " -"lebih besar dari 'tepi1'. Jika tidak, nilai balik diinterpolasi antara 0.0 " +"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'batas0' dan 1.0 jika 'x' " +"lebih besar dari 'batas1'. Jika tidak, nilai balik diinterpolasi antara 0.0 " "dan 1.0 menggunakan polinomial Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8655,33 +8824,31 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"Fungsi SmoothStep( skalar(tepi0), skalar(tepi1), skalar(x) ).\n" +"Fungsi SmoothStep( skalar(batas0), skalar(batas1), skalar(x) ).\n" "\n" -"Mengembalikan 0.0 jika 'x' lebih kecil dari 'tepi0' dan 1.0 jika x lebih " -"besar dari 'tepi1'. Jika tidak, nilai balik diinterpolasi antara 0.0 dan 1.0 " -"menggunakan polinomial Hermite." +"Mengembalikan 0.0 jika 'x' lebih kecil dari 'batas0' dan 1.0 jika x lebih " +"besar dari 'batas1'. Jika tidak, nilai kembalian diinterpolasi antara 0.0 " +"dan 1.0 menggunakan polinomial 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 "" -"Fungsi Step( vektor(tepi), vektor(x)).\n" +"Fungsi Step( vektor(batas), vektor(x)).\n" "\n" -"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'tepi' dan sebaliknya 1.0." +"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'batas' dan sebaliknya 1.0." #: 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 "" -"Fungsi Step( skalar(tepi), vektor(x)).\n" +"Fungsi Step( skalar(batas), vektor(x)).\n" "\n" -"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'tepi' dan sebaliknya 1.0." +"Mengembalikan nilai 0.0 jika 'x' lebih kecil dari 'batas' dan sebaliknya 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." @@ -8735,6 +8902,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Ekspresi Bahasa Kustom Godot Shader, yang ditempatkan di atas shader yang " +"dihasilkan. Anda dapat menempatkan berbagai definisi fungsi di dalamnya dan " +"memanggilnya nanti melalui Ekspresi. Anda juga dapat mendeklarasikan " +"variasi, seragam, dan konstanta." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8887,15 +9058,19 @@ msgid "Resources to export:" msgstr "Sumber daya yang akan diexpor:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Penyaringan untuk mengekspor berkas non-sumber (dipisahkan koma, contoh: *." "json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Penyaringan untuk mengecualikan berkas dalam proyek (dipisahkan koma, " "contoh: *.json, *.txt)" @@ -9125,13 +9300,12 @@ msgid "Unnamed Project" msgstr "Proyek Tanpa Nama" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Impor Projek yang Sudah Ada" +msgstr "Proyek hilang" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Galat: Proyek ini tidak ditemukan dalam berkas sistem." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9230,13 +9404,12 @@ msgstr "" "Konten di folder proyek tidak akan dimodifikasi." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Hapus %d proyek dalam daftar?\n" -"Konten di folder proyek tidak akan dimodifikasi." +"Hapus semua proyek yang hilang dari daftar?\n" +"Konten folder proyek tidak akan diubah." #: editor/project_manager.cpp msgid "" @@ -9244,7 +9417,7 @@ msgid "" "The interface will update after restarting the editor or project manager." msgstr "" "Bahasa diubah.\n" -"Antarmuka akan diperbarui setelah menjalankan ulang penyunting atau manajer " +"Antarmuka akan diperbarui setelah menjalankan ulang editor atau manajer " "proyek." #: editor/project_manager.cpp @@ -9260,7 +9433,6 @@ msgid "Project Manager" msgstr "Manajer Proyek" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" msgstr "Proyek" @@ -9310,7 +9482,7 @@ msgstr "Tombol Joystick" #: editor/project_settings_editor.cpp msgid "Joy Axis" -msgstr "" +msgstr "Sumbu Joystick" #: editor/project_settings_editor.cpp msgid "Mouse Button" @@ -9406,7 +9578,7 @@ msgstr "Tombol X 2" #: editor/project_settings_editor.cpp msgid "Joypad Axis Index:" -msgstr "" +msgstr "Indeks Sumbu Joypad:" #: editor/project_settings_editor.cpp msgid "Axis" @@ -9414,20 +9586,19 @@ msgstr "Axis" #: editor/project_settings_editor.cpp msgid "Joypad Button Index:" -msgstr "" +msgstr "Indeks Tombol Joypad:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Erase Input Action" -msgstr "Beri Skala Seleksi" +msgstr "Hapus Aksi Input" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "" +msgstr "Hapus Event Aksi Input" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "" +msgstr "Tambah Event" #: editor/project_settings_editor.cpp msgid "Button" @@ -9446,99 +9617,100 @@ msgid "Middle Button." msgstr "Tombol Tengah." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Up." -msgstr "Scroll keatas." +msgstr "Scroll ke atas." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Down." -msgstr "Scroll kebawah." +msgstr "Scroll ke bawah." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Global Property" -msgstr "Tambahkan Properti Getter" +msgstr "Tambah Properti Global" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" -msgstr "" +msgstr "Pilih item pengaturan terlebih dahulu!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "" +msgstr "Tidak ada properti '%s'." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "" +msgstr "Pengaturan '%s' bersifat internal dan tidak bisa dihapus." #: editor/project_settings_editor.cpp -#, fuzzy msgid "Delete Item" -msgstr "Hapus" +msgstr "Hapus Item" #: editor/project_settings_editor.cpp msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" +"Nama aksi tidak valid. Tidak boleh kosong atau mengandung '/', ':', '=', " +"'\\' atau '\"'." #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "" +msgstr "Tampah Aksi Input" #: editor/project_settings_editor.cpp msgid "Error saving settings." -msgstr "" +msgstr "Galat saat menyimpan pengaturan." #: editor/project_settings_editor.cpp msgid "Settings saved OK." -msgstr "" +msgstr "OK, Pengaturan telah disimpan." + +#: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Input Action Event Dipindahkan" #: editor/project_settings_editor.cpp msgid "Override for Feature" -msgstr "" +msgstr "Timpa untuk Fitur" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "" +msgstr "Tambah Terjemahan" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "" +msgstr "Hapus Terjemahan" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "" +msgstr "Tambah Lokasi yang Dipetakan Ulang" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "Sumber Daya Remap Tambah Remap" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "" +msgstr "Ubah Sumber Daya Pemetaan Ulang Bahasa" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "" +msgstr "Hapus Remap Sumber Daya" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "" +msgstr "Hapus Opsi Remap Sumber Daya" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Changed Locale Filter" -msgstr "Ganti Ukuran Kamera" +msgstr "Penyaringan Lokalisasi Diubah" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "" +msgstr "Mode Penyaringan Lokalisasi Diubah" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" -msgstr "" +msgstr "Pengaturan Proyek (project.godot)" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "General" @@ -9546,24 +9718,23 @@ msgstr "Umum" #: editor/project_settings_editor.cpp msgid "Override For..." -msgstr "" +msgstr "Timpa untuk..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "" +msgstr "Editor harus dimulai ulang untuk menerapkan perubahan." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "" +msgstr "Pemetaan Input" #: editor/project_settings_editor.cpp msgid "Action:" -msgstr "" +msgstr "Aksi:" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "Tambahkan Fungsi" +msgstr "Aksi" #: editor/project_settings_editor.cpp msgid "Deadzone" @@ -9571,82 +9742,83 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Device:" -msgstr "" +msgstr "Perangkat:" #: editor/project_settings_editor.cpp msgid "Index:" -msgstr "" +msgstr "Indeks:" #: editor/project_settings_editor.cpp msgid "Localization" -msgstr "" +msgstr "Lokalisasi" #: editor/project_settings_editor.cpp msgid "Translations" -msgstr "" +msgstr "Terjemahan" #: editor/project_settings_editor.cpp msgid "Translations:" -msgstr "" +msgstr "Terjemahan:" #: editor/project_settings_editor.cpp msgid "Remaps" -msgstr "" +msgstr "Pemetaan Ulang" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "" +msgstr "Sumber daya:" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" -msgstr "" +msgstr "Pemetaan ulang berdasar Pelokalan:" #: editor/project_settings_editor.cpp msgid "Locale" -msgstr "" +msgstr "Pelokalan" #: editor/project_settings_editor.cpp msgid "Locales Filter" -msgstr "" +msgstr "Penyaring Pelokalan" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "Tampilkan Tulang-tulang" +msgstr "Tampilkan Semua Pelokalan" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "Hanya yang Dipilih" +msgstr "Tampilkan Hanya Pelokalan yang Dipilih" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Filter mode:" -msgstr "Filter:" +msgstr "Mode penyaringan:" #: editor/project_settings_editor.cpp msgid "Locales:" -msgstr "" +msgstr "Pelokalan:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "" +msgstr "Muat Otomatis" #: editor/project_settings_editor.cpp msgid "Plugins" msgstr "Pengaya" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Prasetel..." + +#: editor/property_editor.cpp msgid "Zero" -msgstr "" +msgstr "Nol" #: editor/property_editor.cpp msgid "Easing In-Out" -msgstr "" +msgstr "Easing In-Out" #: editor/property_editor.cpp msgid "Easing Out-In" -msgstr "" +msgstr "Easing Out-In" #: editor/property_editor.cpp msgid "File..." @@ -9654,228 +9826,219 @@ msgstr "Berkas..." #: editor/property_editor.cpp msgid "Dir..." -msgstr "" +msgstr "Direktori..." #: editor/property_editor.cpp msgid "Assign" -msgstr "" +msgstr "Tetapkan" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" -msgstr "Metode Publik:" +msgstr "Pilih Node" #: editor/property_editor.cpp -#, fuzzy msgid "Error loading file: Not a resource!" -msgstr "Gagal saat memuat berkas: Bukan berkas resource!" +msgstr "Galat saat memuat berkas: Bukan sumber daya!" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" -msgstr "Path ke Node:" +msgstr "Pilih Node" #: editor/property_editor.cpp msgid "Bit %d, val %d." -msgstr "" +msgstr "Bit %d, nilai %d." #: editor/property_selector.cpp -#, fuzzy msgid "Select Property" -msgstr "Tambahkan Properti Setter" +msgstr "Pilih Properti" #: editor/property_selector.cpp -#, fuzzy msgid "Select Virtual Method" -msgstr "Metode Publik:" +msgstr "Pilih Method/Fungsi Virtual" #: editor/property_selector.cpp -#, fuzzy msgid "Select Method" -msgstr "Metode Publik:" +msgstr "Pilih Method/Fungsi" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Batch Rename" -msgstr "Ubah Nama" +msgstr "Ubah Nama Massal" #: editor/rename_dialog.cpp msgid "Prefix" -msgstr "" +msgstr "Awalan" #: editor/rename_dialog.cpp msgid "Suffix" -msgstr "" +msgstr "Akhiran" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" -msgstr "Opsi-opsi Snap" +msgstr "Opsi Lanjutan" #: editor/rename_dialog.cpp msgid "Substitute" -msgstr "" +msgstr "Pengganti" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node name" -msgstr "Nama Node:" +msgstr "Nama node" #: editor/rename_dialog.cpp msgid "Node's parent name, if available" -msgstr "" +msgstr "Nama node induk, jika tersedia" #: editor/rename_dialog.cpp -#, fuzzy msgid "Node type" -msgstr "Cari Tipe Node" +msgstr "Jenis node" #: editor/rename_dialog.cpp msgid "Current scene name" msgstr "Nama skena saat ini" #: editor/rename_dialog.cpp -#, fuzzy msgid "Root node name" -msgstr "Nama Node:" +msgstr "Nama node akar" #: editor/rename_dialog.cpp msgid "" "Sequential integer counter.\n" "Compare counter options." msgstr "" +"Penghitung integer berurutan.\n" +"Bandingkan opsi penghitung." #: editor/rename_dialog.cpp msgid "Per Level counter" -msgstr "" +msgstr "Penghitung per Level" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "" +msgstr "Jika diatur, penghitung akan dimulai ulang untuk setiap grup node anak" #: editor/rename_dialog.cpp msgid "Initial value for the counter" -msgstr "" +msgstr "Nilai awal untuk penghitung" #: editor/rename_dialog.cpp -#, fuzzy msgid "Step" -msgstr "Langkah:" +msgstr "Langkah" #: editor/rename_dialog.cpp msgid "Amount by which counter is incremented for each node" -msgstr "" +msgstr "Jumlah penghitung bertambah untuk setiap node" #: editor/rename_dialog.cpp msgid "Padding" -msgstr "" +msgstr "Padding" #: editor/rename_dialog.cpp msgid "" "Minimum number of digits for the counter.\n" "Missing digits are padded with leading zeros." msgstr "" +"Jumlah digit minimum untuk penghitung.\n" +"Digit yang hilang diisi dengan angka nol di depan." #: editor/rename_dialog.cpp -#, fuzzy msgid "Regular Expressions" -msgstr "Ubah Pernyataan" +msgstr "Ekspresi Reguler" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "" +msgstr "Pasca Proses" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "" +msgstr "Pertahankan" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "" +msgstr "CamelCase ke under_score" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "" +msgstr "under_score ke CamelCase" #: editor/rename_dialog.cpp msgid "Case" -msgstr "" +msgstr "Kapitalisasi" #: editor/rename_dialog.cpp -#, fuzzy msgid "To Lowercase" -msgstr "Sambungkan Ke Node:" +msgstr "Jadikan Huruf Kecil" #: editor/rename_dialog.cpp msgid "To Uppercase" -msgstr "" +msgstr "Jadikan Huruf Kapital" #: editor/rename_dialog.cpp -#, fuzzy msgid "Reset" -msgstr "Kebalikan Semula Pandangan" - -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" +msgstr "Reset" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "" +msgstr "Pengindukan Ulang Node" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "" +msgstr "Pengindukan Ulang Lokasi (Pilih Induk Baru):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "" +msgstr "Pertahankan Transformasi Global" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "" +msgstr "Pengindukan Ulang" #: editor/run_settings_dialog.cpp msgid "Run Mode:" -msgstr "" +msgstr "Mode Menjalankan:" #: editor/run_settings_dialog.cpp msgid "Current Scene" -msgstr "" +msgstr "Skena Saat Ini" #: editor/run_settings_dialog.cpp msgid "Main Scene" -msgstr "" +msgstr "Skena Utama" #: editor/run_settings_dialog.cpp msgid "Main Scene Arguments:" -msgstr "" +msgstr "Argumen Skena Utama:" #: editor/run_settings_dialog.cpp msgid "Scene Run Settings" -msgstr "" +msgstr "Pengaturan Skena yang Dijalankan" #: editor/scene_tree_dock.cpp msgid "No parent to instance the scenes at." -msgstr "" +msgstr "Tidak ada parent untuk menginstansi skena disana." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "" +msgstr "Galat saat memuat skena dari %s" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." msgstr "" +"Tidak dapat menginstansi skena '%s' karena skena saat ini ada dalam salah " +"satu node-nya." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" +msgstr "Instansi Skena" + +#: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" msgstr "" #: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "" +msgstr "Instansi Skena Anak" #: editor/scene_tree_dock.cpp msgid "Clear Script" @@ -9883,51 +10046,65 @@ msgstr "Bersihkan Skrip" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "" +msgstr "Operasi ini tidak dapat dilakukan pada root." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "" +msgstr "Pindah Node dalam Parent" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "" +msgstr "Pindah Beberapa Node dalam Parent" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "" +msgstr "Duplikat Node" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" +"Tidak dapat mengindukkan ulang node dalam skena turunan, urutan node tidak " +"dapat diubah." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "" +msgstr "Node harus menjadi bagian skena yang disunting untuk bisa jadi root." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "" +msgstr "Skena yang diinstansi tidak dapat dijadikan root" #: editor/scene_tree_dock.cpp msgid "Make node as Root" msgstr "Jadikan node sebagai Dasar" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "Hapus %d node?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Can not perform with the root node." +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Hapus node \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Can not perform with the root node." +msgstr "Tidak dapat melakukan dengan node root." + +#: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "" +msgstr "Operasi ini tidak dapat dilakukan pada skena yang diinstansi." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." -msgstr "" +msgstr "Simpan Skena Baru sebagai..." #: editor/scene_tree_dock.cpp msgid "" @@ -9936,11 +10113,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9952,28 +10127,24 @@ msgid "New Scene Root" msgstr "Skena Dasar Baru" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Root Node:" -msgstr "Buat Folder" +msgstr "Buat Node Root:" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "2D Scene" -msgstr "Suasana" +msgstr "Skena 2D" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "3D Scene" -msgstr "Suasana" +msgstr "Skena 3D" #: editor/scene_tree_dock.cpp msgid "User Interface" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Other Node" -msgstr "Metode Publik:" +msgstr "Node Lainnya" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -9992,9 +10163,8 @@ msgid "Remove Node(s)" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Ubah nama port keluaran" +msgstr "Ubah jenis node" #: editor/scene_tree_dock.cpp msgid "" @@ -10013,39 +10183,39 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy msgid "Sub-Resources" -msgstr "Resource" +msgstr "Sub-Sumber Daya" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" -msgstr "Buka baru-baru ini" +msgstr "Buka Dokumentasi" #: editor/scene_tree_dock.cpp msgid "Add Child Node" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "Ciutkan Semua" +msgstr "Bentangkan/Ciutkan Semua" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy -msgid "Extend Script" -msgstr "Buka Cepat Script..." - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Buat Baru %s" +msgstr "Pengindukan Ulang ke Node Baru" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10060,18 +10230,16 @@ msgid "Save Branch as Scene" msgstr "" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Node Path" -msgstr "Salin Resource" +msgstr "Salin Lokasi Node" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add/Create a New Node." -msgstr "Buat Baru %s" +msgstr "Tambah / Buat Node Baru." #: editor/scene_tree_dock.cpp msgid "" @@ -10088,9 +10256,8 @@ msgid "Clear a script for the selected node." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remote" -msgstr "Hapus" +msgstr "Remot" #: editor/scene_tree_dock.cpp msgid "Local" @@ -10106,19 +10273,16 @@ msgid "Toggle Visible" msgstr "Beralih File Tersembunyi" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "Metode Publik:" +msgstr "Buka Kunci Node" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Button Group" -msgstr "Tambahkan ke Grup" +msgstr "Tombol Grup" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "Gangguan Koneksi" +msgstr "(Menghubungkan dari)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" @@ -10143,9 +10307,8 @@ msgid "" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "Buka Cepat Script..." +msgstr "Buka Skrip:" #: editor/scene_tree_editor.cpp msgid "" @@ -10190,92 +10353,76 @@ msgid "Select a Node" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is empty." -msgstr "Papan klip kosong" +msgstr "Lokasi kosong." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty." -msgstr "Papan klip kosong" +msgstr "Nama berkas kosong." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "Path tidak menunjukkan Node!" +msgstr "Lokasi bukan lokal." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "Path Tidak Sah." +msgstr "Basis lokasinya tidak valid." #: editor/script_create_dialog.cpp -#, fuzzy msgid "A directory with the same name exists." -msgstr "Sudah ada nama berkas atau folder seperti itu." +msgstr "Sudah ada nama direktori seperti itu." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid extension." -msgstr "Harus menggunakan ekstensi yang sah." +msgstr "Ekstensi tidak valid." #: editor/script_create_dialog.cpp msgid "Wrong extension chosen." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" -msgstr "Error memuat font." +msgstr "Galat saat memuat templat '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error - Could not create script in filesystem." -msgstr "Tidak dapat membuat folder." +msgstr "Galat - Tidak dapat membuat skrip di berkas sistem." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" -msgstr "Error memuat font." +msgstr "Galat saat memuat skrip dari %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Timpa" +msgstr "Menimpa" #: editor/script_create_dialog.cpp msgid "N/A" msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script / Choose Location" -msgstr "Buka Penyunting Skrip" +msgstr "Buka Skrip / Pilih Lokasi" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script" -msgstr "Buka Cepat Script..." +msgstr "Buka Skrip" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "File telah ada, Overwrite?" +msgstr "Berkas sudah ada, itu akan digunakan kembali." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid class name." -msgstr "Nama tidak sah." +msgstr "Nama kelas tidak valid." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "Nama properti index tidak sah." +msgstr "Nama atau lokasi parent yang diwariskan tidak valid." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script is valid." -msgstr "Pohon animasi valid." +msgstr "Skrip valid." #: editor/script_create_dialog.cpp msgid "Allowed: a-z, A-Z, 0-9, _ and ." @@ -10286,57 +10433,70 @@ msgid "Built-in script (into scene file)." msgstr "Skrip tanam (ke dalam berkas skena)." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "Buat Subskribsi" +msgstr "Akan membuat berkas skrip baru." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will load an existing script file." -msgstr "Muat Layout Bus yang ada." - -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" +msgstr "Akan memuat berkas skrip yang ada." #: editor/script_create_dialog.cpp #, fuzzy -msgid "Inherits" -msgstr "Turunan:" +msgid "Class Name:" +msgstr "Nama Kelas" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Class Name" -msgstr "Kelas:" +msgid "Template:" +msgstr "Templat" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" -msgstr "Hapus Pilihan" - -#: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +msgid "Built-in Script:" +msgstr "Skrip Utama:" #: editor/script_create_dialog.cpp msgid "Attach Node Script" msgstr "Lampirkan Skrip Node" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Remote " -msgstr "Hapus" +msgstr "Remot " #: editor/script_editor_debugger.cpp msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +msgid "Warning:" +msgstr "Peringatan:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Error:" +msgstr "Galat:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Galat C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Galat C++ :" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Kode Sumber C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Sumber:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Sumber C++ :" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10344,13 +10504,16 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +msgid "Child process connected." +msgstr "Proses anak terhubung." #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Error" -msgstr "Muat Galat" +msgstr "Salin Galat" + +#: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Lewati Breakpoint" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -10369,6 +10532,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profiler Jaringan" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10381,6 +10548,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10434,9 +10605,8 @@ msgid "Export measures as CSV" msgstr "" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Erase Shortcut" -msgstr "Beri Skala Seleksi" +msgstr "Hapus Pintasan" #: editor/settings_config_dialog.cpp msgid "Restore Shortcut" @@ -10467,14 +10637,12 @@ msgid "Change AudioStreamPlayer3D Emission Angle" msgstr "" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Camera FOV" -msgstr "Ganti FOV Kamera" +msgstr "Ubah FOV Kamera" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Camera Size" -msgstr "Ganti Ukuran Kamera" +msgstr "Ubah Ukuran Kamera" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" @@ -10505,38 +10673,32 @@ msgid "Change Capsule Shape Height" msgstr "" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Radius" -msgstr "Ganti Radius Bentuk Bola" +msgstr "Ubah Radius Bentuk Silinder" #: editor/spatial_editor_gizmos.cpp -#, fuzzy msgid "Change Cylinder Shape Height" -msgstr "Ganti Radius Bentuk Bola" +msgstr "Ubah Tinggi Bentuk Silinder" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" msgstr "" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Radius" -msgstr "Ganti Radius Lampu" +msgstr "Ubah Radius Silinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Cylinder Height" -msgstr "Ubah Waktu Blend" +msgstr "Ubah Tinggi Silinder" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Inner Radius" -msgstr "Ganti Radius Bentuk Bola" +msgstr "Ubah Torus Radius Dalam" #: modules/csg/csg_gizmos.cpp -#, fuzzy msgid "Change Torus Outer Radius" -msgstr "Ganti Radius Lampu" +msgstr "Ubah Torus Radius Luar" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" @@ -10547,9 +10709,8 @@ msgid "Select dependencies of the library for this entry" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Remove current entry" -msgstr "Hapus Sinyal" +msgstr "Hapus entri saat ini" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -10564,36 +10725,28 @@ msgid "Platform" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dynamic Library" -msgstr "Ekspor Pustaka" +msgstr "Pustaka Dinamis" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Add an architecture entry" msgstr "" #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "GDNativeLibrary" -msgstr "Ekspor Pustaka" +msgstr "Pustaka GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "Nonaktifkan Perbaruan Spinner" +msgstr "Dinonaktifkan Singleton GDNative" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Library" -msgstr "Ekspor Pustaka" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" +msgstr "Pustaka" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " @@ -10604,9 +10757,12 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" -msgstr "Argumen langkah adalah nol!" +msgstr "Argumen step adalah nol!" #: modules/gdscript/gdscript_functions.cpp msgid "Not a script with an instance" @@ -10765,6 +10921,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Penyaring fungsi" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10812,27 +10977,27 @@ msgstr "" #: modules/recast/navigation_mesh_generator.cpp msgid "Creating contours..." -msgstr "" +msgstr "Membuat kontur..." #: modules/recast/navigation_mesh_generator.cpp msgid "Creating polymesh..." -msgstr "" +msgstr "Membuat polymesh..." #: modules/recast/navigation_mesh_generator.cpp msgid "Converting to native navigation mesh..." -msgstr "" +msgstr "Mengkonversi ke mesh navigasi native..." #: modules/recast/navigation_mesh_generator.cpp msgid "Navigation Mesh Generator Setup:" -msgstr "" +msgstr "Pengaturan Generator Navigasi Mesh:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "" +msgstr "Mengurai Geometri..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" -msgstr "" +msgstr "Selesai!" #: modules/visual_script/visual_script.cpp msgid "" @@ -10873,28 +11038,24 @@ msgid "Stack overflow with stack depth: " msgstr "Tumpukan melimpah dengan kedalaman tumpukan: " #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Signal Arguments" -msgstr "Edit Argumen-argumen Sinyal:" +msgstr "Ubah Argumen Sinyal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument Type" -msgstr "Ubah Tipe Nilai Array" +msgstr "Ubah Jenis Argumen" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Change Argument name" -msgstr "Ubah Nilai Array" +msgstr "Ubah Nama Argumen" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" -msgstr "" +msgstr "Tetapkan Nilai Baku Variabel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Set Variable Type" -msgstr "Edit Variabel:" +msgstr "Atur Jenis variabel" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -10916,6 +11077,10 @@ msgid "Create a new variable." msgstr "Buat persegi panjang baru." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Sinyal-sinyal:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Buat poligon baru." @@ -10945,6 +11110,11 @@ msgid "Add Function" msgstr "Tambahkan Fungsi" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Hapus port masukan" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Tambahkan Variabel" @@ -10953,6 +11123,26 @@ msgid "Add Signal" msgstr "Tambahkan Sinyal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Tambah port masukan" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Tambah port keluaran" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Hapus port masukan" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Hapus port keluaran" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Ubah Pernyataan" @@ -10998,10 +11188,20 @@ msgid "Add Preload Node" msgstr "Tambahkan Node" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Tambahkan Node (Node-node) dari Tree" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Tambahkan Properti Getter" @@ -11031,6 +11231,11 @@ msgstr "Sambungkan Ke Node:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Sambungkan Ke Node:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Sambungkan Ke Node:" @@ -11067,6 +11272,27 @@ msgid "Paste VisualScript Nodes" msgstr "Path ke Node:" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Namai kembali Fungsi" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Hapus Fungsi" @@ -11087,16 +11313,17 @@ msgid "Editing Signal:" msgstr "Mengedit Sinyal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipe Dasar:" +msgid "Make Tool:" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Member-member:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Node-node yang Tersedia:" +#, fuzzy +msgid "function_name" +msgstr "Fungsi-fungsi:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11123,6 +11350,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Namai kembali Fungsi" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Segarkan" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Anggota" @@ -11221,6 +11458,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Pilih perangkat pada daftar" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11241,9 +11482,11 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." -msgstr "" +"Android build template not installed in the project. Install it from the " +"Project menu." +msgstr "Templat build Android tidak ada, harap pasang templat yang relevan." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11322,6 +11565,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11847,7 +12094,6 @@ msgid "No root AnimationNode for the graph is set." msgstr "Akar AnimationNode untuk grafik belum diatur." #: scene/animation/animation_tree.cpp -#, fuzzy msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" "Lokasi untuk node AnimationPlayer yang mengandung animasi belum diatur." @@ -11969,10 +12215,6 @@ msgstr "" "tidak, jadikan sebagai RenderTarget dan tetapkan tekstur internal nya ke " "beberapa node untuk ditampilkan." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Masukan" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11984,22 +12226,18 @@ msgid "Invalid source for shader." msgstr "Ukuran font tidak sah." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Ukuran font tidak sah." +msgstr "Fungsi perbandingan tidak valid untuk jenis tersebut." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Assignment to function." msgstr "Penugasan ke fungsi." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Assignment to uniform." -msgstr "Penugasan untuk menyeragamkan." +msgstr "Pemberian nilai untuk uniform." #: servers/visual/shader_language.cpp -#, fuzzy msgid "Varyings can only be assigned in vertex function." msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." @@ -12007,6 +12245,62 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex." msgid "Constants cannot be modified." msgstr "Konstanta tidak dapat dimodifikasi." +#~ msgid "Snap to Grid" +#~ msgstr "Kancing ke Kisi" + +#~ msgid "Add input +" +#~ msgstr "Tambah masukan +" + +#~ msgid "Inherits" +#~ msgstr "Mewarisi" + +#~ msgid "Base Type:" +#~ msgstr "Tipe Dasar:" + +#~ msgid "Available Nodes:" +#~ msgstr "Node-node yang Tersedia:" + +#~ msgid "Input" +#~ msgstr "Masukan" + +#~ msgid "Properties:" +#~ msgstr "Properti:" + +#~ msgid "Methods:" +#~ msgstr "Metode-metode:" + +#~ msgid "Theme Properties:" +#~ msgstr "Properti-properti Tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerasi:" + +#~ msgid "Constants:" +#~ msgstr "Konstanta:" + +#~ msgid "Class Description:" +#~ msgstr "Deskripsi Kelas:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Deskripsi Properti:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Deskripsi Metode:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Ini akan memasang proyek Android untuk build kustom.\n" +#~ "Sebagai catatan, untuk menggunakannya, harus diaktifkan per preset " +#~ "ekspor." + +#~ msgid "Reverse sorting." +#~ msgstr "Penyortiran terbalik." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Hapus Node ?" + #~ msgid "No Matches" #~ msgstr "Tidak ada yang cocok" @@ -12160,9 +12454,6 @@ msgstr "Konstanta tidak dapat dimodifikasi." #~ msgid "Go to parent folder" #~ msgstr "Pergi ke direktori induk" -#~ msgid "Select device from the list" -#~ msgstr "Pilih perangkat pada daftar" - #~ msgid "Open Scene(s)" #~ msgstr "Buka Scene" @@ -12205,9 +12496,6 @@ msgstr "Konstanta tidak dapat dimodifikasi." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Instance scene terpilih sebagai anak node saat ini." -#~ msgid "Warnings:" -#~ msgstr "Peringatan:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "Tampilan Depan." @@ -12248,9 +12536,6 @@ msgstr "Konstanta tidak dapat dimodifikasi." #~ msgid "Select a split to erase it." #~ msgstr "Pilih Berkas untuk Dipindai" -#~ msgid "No name provided" -#~ msgstr "Nama masih kosong" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Tambahkan Node" diff --git a/editor/translations/is.po b/editor/translations/is.po index 7a5faac0b8..77ca21f932 100644 --- a/editor/translations/is.po +++ b/editor/translations/is.po @@ -58,6 +58,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -342,6 +370,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -472,15 +501,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Afrita val" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -616,7 +639,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -628,6 +651,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Afrita val" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -805,7 +833,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -907,7 +936,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -944,7 +974,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1208,7 +1238,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1399,7 +1429,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1453,7 +1485,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1620,6 +1652,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1691,6 +1724,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1838,6 +1872,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1846,7 +1881,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1854,38 +1889,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1894,19 +1909,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1921,10 +1928,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1935,10 +1938,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2006,8 +2005,8 @@ msgstr "" msgid "Copy Selection" msgstr "Fjarlægja val" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2020,6 +2019,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2561,6 +2602,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2762,10 +2815,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2817,14 +2866,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2842,15 +2887,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2913,6 +2964,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2922,6 +2977,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Breyta Viðbót" @@ -2950,11 +3009,6 @@ msgstr "" msgid "Edit:" msgstr "Breyta:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3052,6 +3106,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3078,13 +3136,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3734,8 +3785,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3860,7 +3911,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3997,6 +4048,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4166,6 +4223,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4341,7 +4399,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4514,6 +4571,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4718,6 +4777,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4730,10 +4793,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5002,20 +5061,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5105,8 +5171,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5368,6 +5433,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6002,6 +6071,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6057,7 +6130,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6156,6 +6230,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6257,11 +6336,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6341,7 +6420,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6421,6 +6500,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6479,10 +6563,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6802,6 +6882,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6835,6 +6919,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7064,6 +7152,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7113,6 +7205,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Hreyfa Viðbótar Lykil" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Stillið breyting á:" @@ -7432,6 +7529,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7567,6 +7672,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Fjarlægja val" @@ -7729,16 +7839,108 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Endurnefning Anim track" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Anim DELETE-lyklar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Val á kvarða" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7754,6 +7956,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7968,6 +8174,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8613,12 +8824,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9165,6 +9378,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9302,6 +9519,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9466,10 +9687,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9525,6 +9742,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9565,10 +9786,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Anim DELETE-lyklar" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Anim DELETE-lyklar" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9587,11 +9822,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9666,6 +9899,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9682,10 +9923,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9913,43 +10150,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9957,7 +10210,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9965,6 +10218,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9981,6 +10238,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9993,6 +10254,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10189,10 +10454,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10201,6 +10462,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10355,6 +10620,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10491,6 +10764,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10519,6 +10796,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Fjarlægja val" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10527,6 +10809,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Stillið breyting á:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Fjarlægja val" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Fjarlægja val" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Fjarlægja val" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10567,10 +10869,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10595,6 +10907,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "TvÃteknir lyklar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10627,6 +10944,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Val á kvarða" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10647,7 +10985,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10655,7 +10993,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10679,6 +11017,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Val á kvarða" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10773,6 +11120,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10794,7 +11145,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10871,6 +11223,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11408,10 +11764,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/it.po b/editor/translations/it.po index fa32a7d606..1341981a73 100644 --- a/editor/translations/it.po +++ b/editor/translations/it.po @@ -43,8 +43,8 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-04 14:23+0000\n" -"Last-Translator: No <kingofwizards.kw7@gmail.com>\n" +"PO-Revision-Date: 2019-10-04 03:15+0000\n" +"Last-Translator: Micila Micillotto <micillotto@gmail.com>\n" "Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/" "godot/it/>\n" "Language: it\n" @@ -52,7 +52,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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -95,6 +95,34 @@ msgstr "Argomenti non validi per il costrutto '%s'" msgid "On call to '%s':" msgstr "Alla chiamata di '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Libero" @@ -359,6 +387,7 @@ msgstr "Creare %d NUOVE tracce e inserire la chiave?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Crea" @@ -501,14 +530,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Attenzione: stai modificando un'animazione importata" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Seleziona tutti" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Seleziona Nulla" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Seleziona un nodo AnimationPlayer per creare e modificare animazioni." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -640,7 +664,8 @@ msgid "Scale Ratio:" msgstr "Fattore di scalatura:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Seleziona le tracce da copiare:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -652,6 +677,11 @@ msgstr "Seleziona le tracce da copiare:" msgid "Copy" msgstr "Copia" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Seleziona Nulla" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Aggiungi traccia clip audio" @@ -689,14 +719,12 @@ msgid "Replaced %d occurrence(s)." msgstr "Rimpiazzate %d occorrenze." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Trovata/e %d corrispondenza/e." +msgstr "%d corrispondenza." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Trovata/e %d corrispondenza/e." +msgstr "%d corrispondenza/e." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -834,7 +862,8 @@ msgstr "Impossibile connettere il segnale" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -935,7 +964,8 @@ msgstr "Cerca:" msgid "Matches:" msgstr "Corrispondenze:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -976,7 +1006,7 @@ msgid "Resource" msgstr "Risorsa" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Percorso" @@ -1149,22 +1179,20 @@ msgid "License" msgstr "Licenza" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" msgstr "Licenza di terze parti" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engine si basa su parecchie librerie libere ed open source, tutte " -"compatibili con la licenza MIT. Qui di seguito una lista esaustiva di tali " -"componenti di terze parti con le rispettive dichiarazioni sui diritti " -"d'autore e termini di licenza." +"Godot Engine si basa su parecchie librerie gratuite ed open source, tutte " +"compatibili con i termini della licenza MIT dell'engine. Qui di seguito " +"trovi una lista esaustiva di tutti i componenti di terze parti con le " +"rispettive dichiarazioni sui diritti d'autore e termini di licenza." #: editor/editor_about.cpp msgid "All Components" @@ -1179,9 +1207,8 @@ msgid "Licenses" msgstr "Licenze" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Errore nell'apertura del pacchetto, non è in formato zip." +msgstr "Errore nell'apertura del file package: non è in formato ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1249,8 +1276,8 @@ msgid "Delete Bus Effect" msgstr "Cancella effetto bus" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Bus audio, trascina e rilascia per riordinare." +msgid "Drag & drop to rearrange." +msgstr "Trascina e rilascia per riordinare." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1442,7 +1469,9 @@ msgid "Add AutoLoad" msgstr "Aggiungi Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Percorso:" @@ -1496,7 +1525,7 @@ msgstr "Crea cartella" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nome:" @@ -1672,6 +1701,7 @@ msgstr "Rendi attuale" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nuovo" @@ -1742,6 +1772,7 @@ msgid "New Folder..." msgstr "Nuova cartella..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Aggiorna" @@ -1891,6 +1922,7 @@ msgid "Class:" msgstr "Classe:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Eredita:" @@ -1899,46 +1931,26 @@ msgid "Inherited by:" msgstr "Ereditato da:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Breve descrizione:" +msgid "Brief Description" +msgstr "Breve descrizione" #: editor/editor_help.cpp msgid "Properties" msgstr "Proprietà " #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Proprietà :" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metodi" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metodi:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Proprietà del tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Proprietà del tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Segnali:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerazioni" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerazioni:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1947,20 +1959,12 @@ msgid "Constants" msgstr "Costanti" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Costanti:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descrizione della classe" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descrizione della classe:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Guide online:" +msgid "Online Tutorials" +msgstr "Tutorial Online" #: editor/editor_help.cpp msgid "" @@ -1977,10 +1981,6 @@ msgid "Property Descriptions" msgstr "Descrizioni delle proprietà " #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descrizioni delle proprietà :" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1993,10 +1993,6 @@ msgid "Method Descriptions" msgstr "Descrizioni dei metodi" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descrizioni dei metodi:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2065,8 +2061,8 @@ msgstr "Output:" msgid "Copy Selection" msgstr "Copia selezione" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2079,10 +2075,51 @@ msgstr "Rimuovi tutto" msgid "Clear Output" msgstr "Svuota output" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Ferma" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Inizia" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Giù" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Su" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nodo" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC in arrivo" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET in arrivo" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC in uscita" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET in uscita" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Finestra" +msgstr "Nuova Finestra" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2416,9 +2453,8 @@ msgid "Close Scene" msgstr "Chiudi scena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Chiudi scena" +msgstr "Riapri Scena Chiusa" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2540,9 +2576,8 @@ msgid "Close Tab" msgstr "Chiudi scheda" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Chiudi scheda" +msgstr "Annulla Chiusura Tab" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2675,18 +2710,28 @@ msgid "Project" msgstr "Progetto" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Impostazioni progetto" +msgstr "Impostazioni Progetto…" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controllo Versione" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Imposta Controllo Versione" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Arresta Controllo Versione" #: editor/editor_node.cpp msgid "Export..." msgstr "Esporta..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Installa Android Build Template" +msgstr "Installa il Build Template di Android…" #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2697,9 +2742,8 @@ msgid "Tools" msgstr "Strumenti" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Esplora risorse orfane" +msgstr "Explorer Risorse Orfane…" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2712,15 +2756,16 @@ msgstr "Debug" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "Distribuzione con Debug remoto" +msgstr "Distribuisci con Debug remoto" #: editor/editor_node.cpp msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"All'esportazione o distribuzione, l'eseguibile risultante tenterà di " -"connettersi all'IP di questo computer per poter effettuare il debug." +"L'eseguibile, dopo l'esportazione o la distribuzione, attenterà di " +"connettersi con l'indirizzo IP di questo computer per farsi eseguire il " +"debug." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" @@ -2735,11 +2780,12 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"Quando questa opzione è abilitata, esportare o distribuire produrrà un " -"eseguibile minimo.\n" -"Il filesystem verrà fornito dal progetto dall'editor mediante rete.\n" -"Su Android, la distribuzione userà il cavo USB per una performance migliore. " -"Questa opzione accellera il testing di giochi di grande entità ." +"Quando questa opzione è abilitata, l'esportazione o distribuzione produrrà " +"un eseguibile minimale.\n" +"Il filesystem sarà provvisto dal progetto via l'editor dal network.\n" +"Su Android, la distribuzione utilizzerà il cavo USB per una performance " +"migliore. Questa opzione incrementerà la velocità di testing per i giochi " +"più complessi." #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2802,9 +2848,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Impostazioni editor" +msgstr "Impostazioni editor…" #: editor/editor_node.cpp msgid "Editor Layout" @@ -2840,14 +2885,12 @@ msgid "Open Editor Settings Folder" msgstr "Apri cartella impostazioni editor" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Gestisci le funzionalità dell'editor" +msgstr "Gestisci le funzionalità dell'editor…" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Gestisci template d'esportazione" +msgstr "Gestisci template d'esportazione…" #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2903,10 +2946,6 @@ msgstr "Pausa Scena" msgid "Stop the scene." msgstr "Ferma la scena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Ferma" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Esegui la scena in modifica." @@ -2957,14 +2996,10 @@ msgid "Inspector" msgstr "Ispettore" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nodo" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Espandi pannello inferiore" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Output" @@ -2984,22 +3019,34 @@ msgstr "Gestisci i template d'esportazione" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." -msgstr "" -"Questo installerà il progetto Android per build personalizzate.\n" -"Nota bene: per essere usato, deve essere abilitato per l'esportazione del " +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " "preset." +msgstr "" +"Questo imposterà il tuo progetto per le build custom per Android, " +"installando i source templates in \"res://android/build\".\n" +"Puoi, allora, applicare le modifiche e costruire il tuo APK custom durante " +"l'esportazione (aggiungere moduli, cambiare il AndroidManifest.xml, ed " +"altro).\n" +"Nota che, in ordine per creare le build custom invece di usare gli APK pre-" +"costruiti, l'opzione \"Use Custom Build\" sarà abilitata nel preset " +"d'esportazione per Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"Android build template è già installato e non sarà sovrascritto.\n" -"Rimuovi la cartella \"build\" manualmente prima di ritentare questa " -"operazione." +"Il template della build Android è già installato in questo progetto e non " +"sarà sovrascritto.\n" +"Rimuovi la cartella \"res://android/build\" manualmente prima di ritentare " +"questa operazione." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3061,6 +3108,10 @@ msgstr "Apri l'Editor successivo" msgid "Open the previous Editor" msgstr "Apri l'Editor precedente" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Nessuna sottorisorsa trovata." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Creazione Anteprime Mesh" @@ -3070,6 +3121,10 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Script Principale:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Modifica Plugin" @@ -3098,11 +3153,6 @@ msgstr "Stato:" msgid "Edit:" msgstr "Modifica:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Inizia" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Misura:" @@ -3207,6 +3257,10 @@ msgstr "Scegli una Vista" msgid "New Script" msgstr "Nuovo Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Estendi Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nuovo %s" @@ -3233,13 +3287,6 @@ msgstr "Incolla" msgid "Convert To %s" msgstr "Converti In %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Apri Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Il nodo selezionato non è una Viewport!" @@ -3319,7 +3366,6 @@ msgid "Import From Node:" msgstr "Importa Da Nodo:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Ri-Scarica" @@ -3339,6 +3385,8 @@ msgstr "Scarica" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"I template ufficiali per l'esportazione non sono disponibili per le build di " +"sviluppo." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3421,23 +3469,20 @@ msgid "Download Complete." msgstr "Download Completato." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Impossibile salvare il tema su file:" +msgstr "Impossibile rimuovere il file temporaneo:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Installazione dei template fallita. Gli archivi dei template che danno " -"problemi possono essere trovati in '%s'." +"Installazione del template fallita.\n" +"Gli archivi dei template problematici possono essere trovati qui: '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Errore nella richiesta url: " +msgstr "Errore nella richiesta URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3624,9 +3669,8 @@ msgid "Move To..." msgstr "Sposta in..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nuova scena" +msgstr "Nuova scena…" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3694,9 +3738,8 @@ msgid "Overwrite" msgstr "Sovrascrivi" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Crea da Scena" +msgstr "Crea Scena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3776,23 +3819,20 @@ msgid "Invalid group name." msgstr "Nome del gruppo non valido." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Gestisci Gruppi" +msgstr "Rinomina Gruppo" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Elimina Gruppo Immagini" +msgstr "Elimina Gruppo" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Gruppi" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nodi non in Gruppo" +msgstr "Nodi non nel Gruppo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3805,7 +3845,7 @@ msgstr "Nodi in Gruppo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "I gruppi vuoti saranno rimossi automaticamente." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3908,9 +3948,9 @@ msgstr " Files" msgid "Import As:" msgstr "Importa Come:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Preset…" +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Preimpostazione" #: editor/import_dock.cpp msgid "Reimport" @@ -4017,9 +4057,8 @@ msgid "MultiNode Set" msgstr "MultiNode Set" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Seleziona un Nodo per modificare Segnali e Gruppi." +msgstr "Seleziona un singolo nodo per eliminare i suoi segnali e gruppi." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4037,7 +4076,7 @@ msgstr "Nome Plugin:" msgid "Subfolder:" msgstr "Sottocartella:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Lingua:" @@ -4181,6 +4220,12 @@ msgstr "Punto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Apri Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Apri Nodo Animazione" @@ -4355,6 +4400,7 @@ msgid "Change Animation Name:" msgstr "Cambia Nome Animazione:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Eliminare Animazione?" @@ -4530,7 +4576,6 @@ msgstr "Nome Animazione:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Errore!" @@ -4703,6 +4748,8 @@ msgid "Current:" msgstr "Corrente:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Aggiungi Input" @@ -4803,37 +4850,32 @@ msgid "Request failed, return code:" msgstr "Richiesta fallita, codice di return:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Richiesta fallita." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Impossibile salvare il tema su file:" +msgstr "Impossibile salvare risposta a:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Errore di scrittura." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Richiesta fallita, troppi ridirezionamenti" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "Ridirigi Loop." +msgstr "Ridirigi loop." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Richiesta fallita, codice di return:" +msgstr "Richiesta fallita, timeout" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Tempo" +msgstr "Timeout." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4912,24 +4954,22 @@ msgid "All" msgstr "Tutti" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Re-Importa..." +msgstr "Importa…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Plugins" +msgstr "Plugins…" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Ordina:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Ordinamento inverso." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categoria:" @@ -4939,9 +4979,8 @@ msgid "Site:" msgstr "Sito:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Supporta..." +msgstr "Supporta" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4952,9 +4991,8 @@ msgid "Testing" msgstr "Testing" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Carica..." +msgstr "Caricamento…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5123,9 +5161,8 @@ msgid "Paste Pose" msgstr "Incolla Posa" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Rimuovi ossa" +msgstr "Rimuvi Guide" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5213,21 +5250,32 @@ msgid "Pan Mode" msgstr "Modalità di Pan" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Modalità Righello" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Abilita snapping." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Usa lo Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opzioni di Snapping" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Abilita snapping." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Snap Griglia" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Snap alla griglia" +msgid "Snapping Options" +msgstr "Opzioni di Snapping" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5316,8 +5364,8 @@ msgid "View" msgstr "Vista" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Mostra Griglia" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5584,6 +5632,11 @@ msgstr "Abilita Tangente di Curva Lineare" msgid "Hold Shift to edit tangents individually" msgstr "Tenere Premuto Shift per modificare le tangenti singolarmente" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Click Destro: Elimina Punto" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Preprocessa GI Probe" @@ -5864,26 +5917,23 @@ msgstr "Tempo di Generazione (sec):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "La faccia della geometria non contiene alcuna area." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Il nodo non contiene geometria (facce)." +msgstr "La geometria non contiene facce." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" non è ereditario di Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Il nodo non contiene geometria." +msgstr "\"%s\" non contiene geometria." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Il nodo non contiene geometria." +msgstr "\"%s\" non contiene geometria facciale." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6229,6 +6279,10 @@ msgid "Grid" msgstr "Griglia" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostra Griglia" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configura Griglia:" @@ -6284,7 +6338,8 @@ msgstr "Istanza:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipo:" @@ -6322,9 +6377,8 @@ msgid "Error writing TextFile:" msgstr "Errore scrittura TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Impossibile trovare tile:" +msgstr "Impossibile caricare il file:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6347,9 +6401,8 @@ msgid "Error Importing" msgstr "Errore di Importazione" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Nuovo TextFile..." +msgstr "Nuovo Text File…" #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6385,6 +6438,11 @@ msgid "Find Next" msgstr "Trova Successivo" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Trova Precedente" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtra script" @@ -6429,9 +6487,8 @@ msgid "Open..." msgstr "Apri..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Apri Script" +msgstr "Riapri Script Chiuso" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6487,14 +6544,14 @@ msgid "Toggle Scripts Panel" msgstr "Attiva Pannello Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Passo Successivo" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Passo Precedente" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Passo Successivo" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Break" @@ -6566,15 +6623,14 @@ msgid "Search Results" msgstr "Cerca Risultati" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Rimuovi scene recenti" +msgstr "Rimuovi Script Recenti" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Connessioni al metodo:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Sorgente" @@ -6655,6 +6711,11 @@ msgstr "Punti di rottura" msgid "Cut" msgstr "Taglia" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Seleziona tutti" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Elimina Linea" @@ -6692,9 +6753,8 @@ msgid "Complete Symbol" msgstr "Completa Simbolo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Scala selezione" +msgstr "Valuta Selezione" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6713,10 +6773,6 @@ msgid "Auto Indent" msgstr "Auto Indenta" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Trova Precedente" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Cerca nei File..." @@ -7002,9 +7058,8 @@ msgid "Audio Listener" msgstr "Listener Audio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Abilita filtraggio" +msgstr "Abilita Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7039,6 +7094,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificatore Velocità Vista Libera" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificatore Velocità Vista Libera" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7061,7 +7121,7 @@ msgstr "Sposta i Nodi sul Pavimento" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Non si è trovato un pavimento solido al quale agganciare la selezione." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7074,9 +7134,12 @@ msgstr "" "Alt+RMB: Selezione Lista Profondità " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Modalità Spazio Locale (%s)" +msgstr "Usa lo Spazio Locale" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usa lo Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7173,9 +7236,8 @@ msgstr "Visualizza Griglia" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Impostazioni" +msgstr "Impostazioni…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7308,6 +7370,11 @@ msgid "Simplification: " msgstr "Semplificazione: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Aumento (Pixels): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Aumento (Pixels): " @@ -7356,6 +7423,10 @@ msgid "(empty)" msgstr "(vuoto)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Sposta Frame" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animazioni:" @@ -7553,14 +7624,12 @@ msgid "Submenu" msgstr "Sottomenù" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Elemento 1" +msgstr "Sotto-Elemento 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Elemento 2" +msgstr "Sotto-Elemento 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7672,17 +7741,25 @@ msgid "Enable Priority" msgstr "Abilita Priorità Tile" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtra tiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" +"Assegna una risorsa TileSet a questo TileMap per usare i suoi riquadri." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Disegna Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift + PDM: Traccia una linea\n" -"Shift + Ctrl + PDM: Colora il rettangolo" +"Shift + LMB: Traccia una linea\n" +"Shift + Ctrl + LMB: Colora il rettangolo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7805,6 +7882,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Mostra i Nomi delle Tile (Tenere Premuto Tasto Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Aggiungi o seleziona una texture nel pannello sulla sinistra per modificare " +"i suoi riquadri associati." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Rimuovere la texture selezionata? Questo rimuoverà tutte le tile che la " @@ -7978,16 +8062,108 @@ msgstr "Questa proprietà non può essere cambiata." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Non sono disponibili addons VCS." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Errore" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Non è stato inserito alcun messaggio di commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Nessun file aggiunto allo stage" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "L'Addon VCS non è inizializzato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Sistema di Controllo delle Versioni" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inizializza" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Area di Staging" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Rileva nuove modifiche" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Cambiamenti" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modificato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Rinominato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Eliminato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Cambio di tipo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Stage selezionato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Stage Tutto" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Aggiungi un messaggio di commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Commit Cambiamenti" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Stato" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"Visualizza i file diffs prima di eseguire il commit nella versione più " +"recente" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Nessun file diff è attivo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Individua cambiamenti nei file diff" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Solo GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Aggiungi Input +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Aggiungi ouput +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8003,6 +8179,11 @@ msgid "Boolean" msgstr "Booleano" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Samples" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Aggiungi porta di Input" @@ -8084,9 +8265,8 @@ msgid "Light" msgstr "Luce" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Crea Nodo Shader" +msgstr "Visualizza codice shader risultante." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8217,6 +8397,11 @@ msgstr "" "Ritorna un vettore associato se il valore booleano fornito è vero o falso." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "Ritorna uno scalare associato se il booleano provvisto è vero o falso." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Ritorna il risultato booleano del confronto tra due parametri." @@ -8454,7 +8639,6 @@ msgid "Returns the square root of the parameter." msgstr "Ritorna la radice quadrata del parametro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8464,12 +8648,11 @@ msgid "" msgstr "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" -"Ritorna 0.0 se 'x' è più piccolo di 'edge0', o 1.0 se 'x' è più largo di " +"Ritorna 0.0 se 'x' è più piccolo di 'edge0', o 1.0 se 'x' è più grande di " "'edge1'. Altrimenti, il valore di ritorno è interpolato tra 0.0 ed 1.0 " "usando i polinomi di Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8647,9 +8830,8 @@ msgid "Linear interpolation between two vectors." msgstr "Interpolazione lineare tra due vettori." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Interpolazione lineare tra due vettori." +msgstr "Interpolazione lineare tra due vettori usando scalare." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8676,7 +8858,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Ritorna un vettore che punta nella direzione della refrazione." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8686,12 +8867,11 @@ msgid "" msgstr "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" -"Ritorna 0.0 se 'x' è minore di 'edge0', ed 1.0 se 'x' è maggiore di 'edge1'. " -"Altrimenti, il valore di ritorno è interpolato tra 0.0 ed 1.0 usando i " -"polinomiali di Hermite." +"Ritorna 0.0 se 'x' è minore di 'edge0', ed 1.0 se 'x' è più grande di " +"'edge1'. Altrimenti, il valore di ritorno è interpolato tra 0.0 ed 1.0 " +"usando i polinomiali di Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8701,12 +8881,11 @@ msgid "" msgstr "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" -"Ritorna 0.0 se 'x' è minore di 'edge0', ed 1.0 se 'x' è maggiore di 'edge1'. " -"Altrimenti, il valore di ritorno è interpolato tra 0.0 ed 1.0 usando i " -"polinomiali di Hermite." +"Ritorna 0.0 se 'x' è minore di 'edge0', ed 1.0 se 'x' è più grande di " +"'edge1'. Altrimenti, il valore di ritorno è interpolato tra 0.0 ed 1.0 " +"usando i polinomiali di Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8717,7 +8896,6 @@ msgstr "" "Ritorna 0.0 se 'x' è minore di 'edge', altrimenti 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8780,6 +8958,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"L'espresione Custom Godot Shader Language è piazzata al di sopra dello " +"shader risultante. Puoi posizionare varie definizioni di fuzioni e chiamarle " +"più tardi nelle Expressions. Puoi anche dichiarare variabilità , uniformi e " +"costanti." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8933,15 +9115,19 @@ msgid "Resources to export:" msgstr "Risorse da esportare:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtri per esportare file che non son risorse (separati con virgola, es.: *." "json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtri per escludere dall'esportazione (separati con virgola, es.: *.json, *." "txt)" @@ -9174,13 +9360,12 @@ msgid "Unnamed Project" msgstr "Progetto Senza Nome" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importa Progetto Esistente" +msgstr "Progetto Mancante" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Errore: il Progetto non è presente nel filesystem." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9279,12 +9464,11 @@ msgstr "" "I contenuti della cartella di progetto non saranno modificati." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Rimuovere %d progetti dalla lista?\n" +"Rimuovere tutti i progetti mancanti dalla lista?\n" "I contenuti delle cartelle di progetto non saranno modificati." #: editor/project_manager.cpp @@ -9310,9 +9494,8 @@ msgid "Project Manager" msgstr "Gestore dei progetti" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Progetto" +msgstr "Progetti" #: editor/project_manager.cpp msgid "Scan" @@ -9543,6 +9726,10 @@ msgid "Settings saved OK." msgstr "Impostazioni salvate OK." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Evento d'Azione di Input Spostato" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Sovrascrivi per Caratteristica" @@ -9679,6 +9866,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Preset…" + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9846,10 +10037,6 @@ msgstr "In Maiuscolo" msgid "Reset" msgstr "Reset" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Errore" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reparent Nodo" @@ -9907,6 +10094,10 @@ msgid "Instance Scene(s)" msgstr "Istanzia Scena(e)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Sostituisci con la Scena Branch" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Istanzia Scena Figlia" @@ -9949,8 +10140,20 @@ msgid "Make node as Root" msgstr "Rendi il nodo come Radice" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Elimina Nodo(i)?" +msgid "Delete %d nodes?" +msgstr "Elimina %d nodi?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Elimina il nodo root \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Elimina il nodo \"%s\" e tutti i suoi figli?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Elimina il nodo \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9973,12 +10176,13 @@ msgstr "" "riportate al loro valore predefinito." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Figlio Modificabile" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Carica come placeholder" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Disabilitando \"editable_instance\" tutte le proprietà del nodo saranno " +"riportate al loro valore predefinito." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10025,9 +10229,8 @@ msgid "Remove Node(s)" msgstr "Rimuovi nodo(i)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Cambia Nome porta Input" +msgstr "Cambia il tipo del/i nodo/i" #: editor/scene_tree_dock.cpp msgid "" @@ -10054,6 +10257,14 @@ msgid "Clear Inheritance" msgstr "Liberare ereditarietà " #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Figlio Modificabile" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Carica come placeholder" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Apri la documentazione" @@ -10070,10 +10281,6 @@ msgid "Change Type" msgstr "Cambia Tipo" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Estendi Script" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Reparent a Nuovo Nodo" @@ -10150,31 +10357,28 @@ msgid "Node configuration warning:" msgstr "Avviso confugurazione nodo:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Il nodo ha connessione(i) e gruppo(i).\n" -"Fai clic per mostrare i segnali dock." +"Il nodo ha %s connessione/i e %s gruppo/i.\n" +"Clicca per mostrare il dock dei segnali." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Il nodo ha connessioni.\n" -"Fai click per mostrare il dock segnali." +"Il nodo ha %s connessione/i.\n" +"Clicca per mostrare il dock dei segnali." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Il nodo e in un gruppo.\n" -"Fai click per mostrare il dock gruppi." +"Il nodo è in %s gruppi.\n" +"Clicca per mostrare il dock dei gruppi." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10269,9 +10473,8 @@ msgid "Error loading script from %s" msgstr "Errore caricamento script da %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Sovrascrivi" +msgstr "Sovrascrizioni" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10318,23 +10521,18 @@ msgid "Will load an existing script file." msgstr "Caricherà un file di script esistente." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Linguaggio" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Eredita" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nome Classe" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Template" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script Built-In" #: editor/script_create_dialog.cpp @@ -10350,26 +10548,54 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Analisi dello stack" +msgid "Warning:" +msgstr "Attenzione:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Scegli uno o più oggetti dalla lista per mostrare il grafico." +msgid "Error:" +msgstr "Errore:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Errore C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Errore C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Sorgente C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Sorgente:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Sorgente C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Analisi dello stack" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Errori" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Processo Figlio Connesso" +msgid "Child process connected." +msgstr "Processo Figlio Connesso." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Errore di Copia" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Salta Punti di rottura" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Ispeziona Istanza Precedente" @@ -10386,6 +10612,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profiler di Rete" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10398,6 +10628,10 @@ msgid "Monitors" msgstr "Monitor" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Scegli uno o più oggetti dalla lista per mostrare il grafico." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista di Utilizzo Memoria Video per Risorsa:" @@ -10594,10 +10828,6 @@ msgid "Library" msgstr "Libreria" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Stato" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Librerie: " @@ -10606,6 +10836,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Prevista una stringa di lunghezza 1 (singolo carattere)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "L'argomento del passo è zero!" @@ -10758,6 +10992,14 @@ msgstr "Impostazioni GridMap" msgid "Pick Distance:" msgstr "Scegli la Distanza:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Filtra mesh" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "Dai una risorsa MeshLibrary a questa GridMap per usare le sue mesh." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Il nome della classe non può essere una parola chiave riservata" @@ -10883,28 +11125,28 @@ msgid "Set Variable Type" msgstr "Imposta Tipo di Variabile" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Non deve essere in conflitto con un nome di tipo built-in esistente." +msgstr "Sovrascrivi una funzione built-in esistente." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Crea un nuovo rettangolo." +msgstr "Crea una nuova funzione." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Valiabili:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Crea un nuovo rettangolo." +msgstr "Crea una nuova variabile." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Segnali:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Crea un nuovo poligono." +msgstr "Crea un nuovo segnale." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10931,6 +11173,11 @@ msgid "Add Function" msgstr "Aggiungi Funzione" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Rimuovi porta input" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Aggiungi Variabile" @@ -10939,6 +11186,26 @@ msgid "Add Signal" msgstr "Aggiungi Segnale" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Aggiungi porta di Input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Aggiungi porta di Output" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Rimuovi porta input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Rimuovi porta output" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Cambia Espressione" @@ -10983,10 +11250,20 @@ msgid "Add Preload Node" msgstr "Aggiungi Nodo Preload" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Aggiungi Nodo(i) Da Albero" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Aggiungi Proprietà Getter" @@ -11011,6 +11288,11 @@ msgid "Connect Nodes" msgstr "Connetti Nodi" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Disconnetti Nodi Grafico" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Connetti Dati del Nodo" @@ -11043,6 +11325,28 @@ msgid "Paste VisualScript Nodes" msgstr "Incolla Nodi VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Non è possibile copiare il nodo della funzione." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Rinomina Funzione" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Rimuovi Funzione" @@ -11063,16 +11367,17 @@ msgid "Editing Signal:" msgstr "Modifica Segnale:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipo Base:" +msgid "Make Tool:" +msgstr "Crea Tool:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membri:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodi Disponibili:" +#, fuzzy +msgid "function_name" +msgstr "Funzione:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11095,6 +11400,16 @@ msgid "Cut Nodes" msgstr "Taglia Nodi" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Rinomina Funzione" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Aggiorna" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Modifica Membro" @@ -11198,6 +11513,10 @@ msgid "The package must have at least one '.' separator." msgstr "Il pacchetto deve avere almeno un '.' separatore." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Seleziona il dispositivo dall'elenco" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Eseguibile ADB non configurato nelle Impostazioni dell'Editor." @@ -11224,10 +11543,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Android Project non è installato per la compilazione. Installalo dal menu " -"Editor." +"Il template build di Android non è installato in questo progetto. Installalo " +"dal menu Progetto." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11319,6 +11639,10 @@ msgid "Required icon is not specified in the preset." msgstr "L'icona richiesta non è specificata nel preset." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Esegui nel Browser" @@ -11997,10 +12321,6 @@ msgstr "" "Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un " "RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Ingresso" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Fonte non valida per l'anteprima." @@ -12029,6 +12349,65 @@ msgstr "Varyings può essere assegnato soltanto nella funzione del vertice." msgid "Constants cannot be modified." msgstr "Le constanti non possono essere modificate." +#~ msgid "Snap to Grid" +#~ msgstr "Snap alla griglia" + +#~ msgid "Add input +" +#~ msgstr "Aggiungi Input +" + +#~ msgid "Language" +#~ msgstr "Linguaggio" + +#~ msgid "Inherits" +#~ msgstr "Eredita" + +#~ msgid "Base Type:" +#~ msgstr "Tipo Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodi Disponibili:" + +#~ msgid "Input" +#~ msgstr "Ingresso" + +#~ msgid "Properties:" +#~ msgstr "Proprietà :" + +#~ msgid "Methods:" +#~ msgstr "Metodi:" + +#~ msgid "Theme Properties:" +#~ msgstr "Proprietà del tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerazioni:" + +#~ msgid "Constants:" +#~ msgstr "Costanti:" + +#~ msgid "Class Description:" +#~ msgstr "Descrizione della classe:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descrizioni delle proprietà :" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descrizioni dei metodi:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Questo installerà il progetto Android per build personalizzate.\n" +#~ "Nota bene: per essere usato, deve essere abilitato per l'esportazione del " +#~ "preset." + +#~ msgid "Reverse sorting." +#~ msgstr "Ordinamento inverso." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Elimina Nodo(i)?" + #~ msgid "No Matches" #~ msgstr "Nessuna corrispondenza" @@ -12211,9 +12590,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Go to parent folder" #~ msgstr "Va' alla cartella superiore" -#~ msgid "Select device from the list" -#~ msgstr "Seleziona il dispositivo dall'elenco" - #~ msgid "Open Scene(s)" #~ msgstr "Apri Scena/e" @@ -12274,10 +12650,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Istanzia le scene selezionate come figlie del nodo selezionato." -#, fuzzy -#~ msgid "Warnings:" -#~ msgstr "Avvertimento" - #~ msgid "Font Size:" #~ msgstr "Dimensione Font:" @@ -12321,9 +12693,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Select a split to erase it." #~ msgstr "Prima seleziona un oggetto di impostazione!" -#~ msgid "No name provided" -#~ msgstr "Nessun nome fornito" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Aggiungi Nodo" @@ -12460,12 +12829,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Warning" #~ msgstr "Avvertimento" -#~ msgid "Error:" -#~ msgstr "Errore:" - -#~ msgid "Function:" -#~ msgstr "Funzione:" - #~ msgid "Variable" #~ msgstr "Valiabile" @@ -12533,9 +12896,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Connect Graph Nodes" #~ msgstr "Connetti Nodi Grafico" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Disconnetti Nodi Grafico" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Rimuovi Nodo Grafico di Shader" @@ -12545,9 +12905,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplica Nodo(i) Grafico" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Elimina Nodo(i) Grafico di Shader" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Errore: Giunzione ciclica" @@ -12998,9 +13355,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Pick New Name and Location For:" #~ msgstr "Scegli un Nuovo Nome e Posizione Per:" -#~ msgid "No files selected!" -#~ msgstr "Nessun File selezionato!" - #~ msgid "Info" #~ msgstr "Info" @@ -13400,12 +13754,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Scaling to %s%%." #~ msgstr "Scalando a %s%%." -#~ msgid "Up" -#~ msgstr "Su" - -#~ msgid "Down" -#~ msgstr "Giù" - #~ msgid "Bucket" #~ msgstr "Secchiello" @@ -13690,9 +14038,6 @@ msgstr "Le constanti non possono essere modificate." #~ msgid "Group" #~ msgstr "Gruppo" -#~ msgid "Samples" -#~ msgstr "Samples" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modalità Conversione Sample (file .wav):" diff --git a/editor/translations/ja.po b/editor/translations/ja.po index 3e529af0cb..319458d634 100644 --- a/editor/translations/ja.po +++ b/editor/translations/ja.po @@ -26,12 +26,14 @@ # Takuya Watanabe <watanabe@zblog.sakura.ne.jp>, 2019. # Sodium11 <Sodium11.for.gitserver@gmail.com>, 2019. # leela <53352@protonmail.com>, 2019. +# Tarou Yamada <mizuningyou@yahoo.co.jp>, 2019. +# kazuma kondo <kazmax7@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" -"Last-Translator: leela <53352@protonmail.com>\n" +"PO-Revision-Date: 2019-10-29 12:49+0000\n" +"Last-Translator: kazuma kondo <kazmax7@gmail.com>\n" "Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/" "godot/ja/>\n" "Language: ja\n" @@ -39,7 +41,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.9.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -80,6 +82,34 @@ msgstr "'%s' ã®å¼•æ•°ã¯ç„¡åйã§ã™" msgid "On call to '%s':" msgstr "'%s' ã¸ã®å‘¼ã³å‡ºã—:" +#: core/ustring.cpp +msgid "B" +msgstr "\\ B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "\\ KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "\\ MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "\\ GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "\\ TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "\\ PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "\\ EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "解放" @@ -149,29 +179,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" @@ -326,9 +351,8 @@ msgid "Change Animation Interpolation Mode" msgstr "アニメーション補間モードã®å¤‰æ›´" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Loop Mode" -msgstr "アニメーションã®ãƒ«ãƒ¼ãƒ—を変更" +msgstr "アニメーションã®ãƒ«ãƒ¼ãƒ—モードを変更" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" @@ -350,6 +374,7 @@ msgstr "%d æ–°è¦ãƒˆãƒ©ãƒƒã‚¯ã‚’作æˆã—ã€ã‚ーを挿入ã—ã¾ã™ã‹ï¼Ÿ" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "作æˆ" @@ -376,14 +401,12 @@ msgid "Anim Insert Key" msgstr "アニメーションã‚ーを挿入" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Step" -msgstr "アニメーションã®FPSを変更" +msgstr "アニメーションã®ã‚¹ãƒ†ãƒƒãƒ—を変更" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Rearrange Tracks" -msgstr "自動èªè¾¼ã¿ã®ä¸¦ã¹æ›¿ãˆ" +msgstr "トラックã®ä¸¦ã¹æ›¿ãˆ" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." @@ -496,14 +519,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "è¦å‘Š:インãƒãƒ¼ãƒˆã—ãŸã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’編集ã—ã¦ã„ã¾ã™" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "ã™ã¹ã¦é¸æŠž" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "é¸æŠžè§£é™¤" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"アニメーションを作ã£ã¦ç·¨é›†ã™ã‚‹ãŸã‚ã« AnimationPlayer ノードã¸ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—ã¦" +"下ã•ã„。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -636,7 +656,8 @@ msgid "Scale Ratio:" msgstr "スケール比:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "コピーã™ã‚‹ãƒˆãƒ©ãƒƒã‚¯ã‚’é¸æŠž:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -648,6 +669,11 @@ msgstr "コピーã™ã‚‹ãƒˆãƒ©ãƒƒã‚¯ã‚’é¸æŠž:" msgid "Copy" msgstr "コピー" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "é¸æŠžè§£é™¤" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "オーディオトラッククリップã®è¿½åŠ " @@ -685,12 +711,10 @@ msgid "Replaced %d occurrence(s)." msgstr "%d 箇所を置æ›ã—ã¾ã—ãŸã€‚" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." msgstr "ï¼…dä»¶ã®ä¸€è‡´ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." msgstr "ï¼…dä»¶ã®ä¸€è‡´ãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸã€‚" @@ -828,7 +852,8 @@ msgstr "ã‚·ã‚°ãƒŠãƒ«ã«æŽ¥ç¶šã§ãã¾ã›ã‚“" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -929,7 +954,8 @@ msgstr "検索:" msgid "Matches:" msgstr "一致:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -970,7 +996,7 @@ msgid "Resource" msgstr "リソース" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "パス" @@ -1142,7 +1168,6 @@ msgid "License" msgstr "ライセンス" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" msgstr "サードパーティーライセンス" @@ -1172,9 +1197,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" @@ -1242,7 +1266,8 @@ msgid "Delete Bus Effect" msgstr "ãƒã‚¹ã‚¨ãƒ•ェクトを削除" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "オーディオãƒã‚¹ã¯ãƒ‰ãƒ©ãƒƒã‚°ãƒ»ã‚¢ãƒ³ãƒ‰ãƒ»ãƒ‰ãƒãƒƒãƒ—ã§ä¸¦ã¹æ›¿ãˆã‚‰ã‚Œã¾ã™ã€‚" #: editor/editor_audio_buses.cpp @@ -1433,7 +1458,9 @@ msgid "Add AutoLoad" msgstr "自動èªè¾¼ã¿ã‚’è¿½åŠ " #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "パス:" @@ -1487,7 +1514,7 @@ msgstr "フォルダーを作æˆ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "åå‰:" @@ -1510,7 +1537,7 @@ msgstr "エクスãƒãƒ¼ãƒˆ テンプレートãŒäºˆæƒ³ã•れãŸãƒ‘スã«è¦‹ã¤ã #: editor/editor_export.cpp msgid "Packing" -msgstr "パックã™ã‚‹" +msgstr "パックä¸" #: editor/editor_export.cpp msgid "" @@ -1663,6 +1690,7 @@ msgstr "最新ã«ã™ã‚‹" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "æ–°è¦" @@ -1733,6 +1761,7 @@ msgid "New Folder..." msgstr "æ–°è¦ãƒ•ォルダ..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "å†èªè¾¼" @@ -1882,6 +1911,7 @@ msgid "Class:" msgstr "クラス:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "継承元:" @@ -1890,7 +1920,8 @@ msgid "Inherited by:" msgstr "継承先:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "è¦ç´„:" #: editor/editor_help.cpp @@ -1898,38 +1929,18 @@ msgid "Properties" msgstr "プãƒãƒ‘ティ" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "プãƒãƒ‘ティ:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "メソッド" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "メソッド:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "テーマプãƒãƒ‘ティ" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "テーマプãƒãƒ‘ティ:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "シグナル:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "列挙型" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "列挙型:" - -#: editor/editor_help.cpp msgid "enum " msgstr "列挙型 " @@ -1938,20 +1949,12 @@ msgid "Constants" msgstr "定数" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "定数:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "クラスã®èª¬æ˜Ž" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "クラスã®èª¬æ˜Žï¼š" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "オンラインãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«:" +msgid "Online Tutorials" +msgstr "オンラインãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«" #: editor/editor_help.cpp msgid "" @@ -1968,10 +1971,6 @@ msgid "Property Descriptions" msgstr "プãƒãƒ‘ティã®èª¬æ˜Ž" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "プãƒãƒ‘ティã®èª¬æ˜Ž:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1984,10 +1983,6 @@ msgid "Method Descriptions" msgstr "メソッドã®èª¬æ˜Ž" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "メソッドã®èª¬æ˜Ž:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2056,8 +2051,8 @@ msgstr "出力:" msgid "Copy Selection" msgstr "é¸æŠžç¯„å›²ã‚’ã‚³ãƒ”ãƒ¼" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2070,10 +2065,51 @@ msgstr "クリア" msgid "Clear Output" msgstr "出力をクリア" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "åœæ¢" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "é–‹å§‹" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "下" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "上" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "ノード" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC入力" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "入力RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "出力RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "出力RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "ウィンドウ" +msgstr "æ–°è¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2400,9 +2436,8 @@ msgid "Close Scene" msgstr "シーンを閉ã˜ã‚‹" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "シーンを閉ã˜ã‚‹" +msgstr "é–‰ã˜ãŸã‚·ãƒ¼ãƒ³ã‚’å†ã³é–‹ã" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2519,9 +2554,8 @@ msgid "Close Tab" msgstr "タブを閉ã˜ã‚‹" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "タブを閉ã˜ã‚‹" +msgstr "é–‰ã˜ãŸã‚¿ãƒ–を戻ã™" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2654,19 +2688,28 @@ msgid "Project" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆ" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š" +msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆè¨å®š..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ«" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã®çµ‚了" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "エクスãƒãƒ¼ãƒˆ" +msgstr "エクスãƒãƒ¼ãƒˆ..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Androidビルドテンプレートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«" +msgstr "Androidビルドテンプレートã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2781,9 +2824,8 @@ msgid "Editor" msgstr "エディタ" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "エディタè¨å®š" +msgstr "エディタè¨å®š..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2818,14 +2860,12 @@ msgid "Open Editor Settings Folder" msgstr "エディタè¨å®šã®ãƒ•ォルダを開ã" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "エディタ機能ã®ç®¡ç†" +msgstr "エディタ機能ã®ç®¡ç†..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "エクスãƒãƒ¼ãƒˆãƒ†ãƒ³ãƒ—レートã®ç®¡ç†" +msgstr "エクスãƒãƒ¼ãƒˆãƒ†ãƒ³ãƒ—レートã®ç®¡ç†..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2881,10 +2921,6 @@ msgstr "ã‚·ãƒ¼ãƒ³ã‚’ä¸€æ™‚åœæ¢" msgid "Stop the scene." msgstr "ã‚·ãƒ¼ãƒ³ã‚’åœæ¢ã€‚" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "åœæ¢" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "編集ã—ãŸã‚·ãƒ¼ãƒ³ã‚’実行。" @@ -2935,14 +2971,10 @@ msgid "Inspector" msgstr "インスペクタ" #: editor/editor_node.cpp -msgid "Node" -msgstr "ノード" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "下パãƒãƒ«ã‚’展開" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "出力" @@ -2962,20 +2994,32 @@ msgstr "テンプレートã®ç®¡ç†" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"ã“れã«ã‚ˆã‚Šã€ã‚«ã‚¹ã‚¿ãƒ ビルド用ã®Androidプãƒã‚¸ã‚§ã‚¯ãƒˆãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã™ã€‚\n" -"使用ã™ã‚‹ã«ã¯ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ—リセットã”ã¨ã«æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" +"ã“ã®æ“作㯠\"res://android/build\" ã«ã‚½ãƒ¼ã‚¹ãƒ†ãƒ³ãƒ—レートをインストールã—アンド" +"ãƒã‚¤ãƒ‰ã®ã‚«ã‚¹ã‚¿ãƒ ビルドをè¨å®šã—ã¾ã™ã€‚\n" +"後ã‹ã‚‰è¨å®šã«å¤‰æ›´ã‚’åŠ ãˆãŸã‚Šã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆæ™‚ã«ã‚«ã‚¹ã‚¿ãƒ APKをビルドã§ãã¾ã™ã€‚(モ" +"ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’è¿½åŠ ã™ã‚‹ã€AndroidManifest.xmlを変更ã™ã‚‹ç‰)\n" +"APKビルドã®åˆæœŸè¨å®šã®ä»£ã‚りã«ã‚«ã‚¹ã‚¿ãƒ ビルドè¨å®šã‚’使ã†ãŸã‚ã«ã¯ã€ã‚¢ãƒ³ãƒ‰ãƒã‚¤ãƒ‰ã®" +"エクスãƒãƒ¼ãƒˆè¨å®šã®ã€Œã‚«ã‚¹ã‚¿ãƒ ビルドを使用ã™ã‚‹ã€ã®ã‚ªãƒ—ã‚·ãƒ§ãƒ³ãŒæœ‰åŠ¹åŒ–ã•れã¦ã„ã‚‹" +"å¿…è¦ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "Androidビルドテンプレートã¯ã™ã§ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ãŠã‚Šã€ä¸Šæ›¸ãã•れã¾ã›ã‚“。\n" -"ã“ã®æ“作をå†è©¦è¡Œã™ã‚‹å‰ã«ã€ \"build\"ディレクトリを手動ã§å‰Šé™¤ã—ã¦ãã ã•ã„。" +"ã“ã®æ“作をå†è©¦è¡Œã™ã‚‹å‰ã«ã€ \"res://android/build\" ディレクトリを手動ã§å‰Šé™¤ã—" +"ã¦ãã ã•ã„。" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3037,6 +3081,11 @@ msgstr "次ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" msgid "Open the previous Editor" msgstr "å‰ã®ã‚¨ãƒ‡ã‚£ã‚¿ã‚’é–‹ã" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "サーフェスã®ã‚½ãƒ¼ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "メッシュプレビューを作æˆ" @@ -3046,6 +3095,10 @@ msgid "Thumbnail..." msgstr "サムãƒã‚¤ãƒ«..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "メインスクリプト:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "プラグインã®ç·¨é›†" @@ -3074,11 +3127,6 @@ msgstr "ステータス:" msgid "Edit:" msgstr "編集:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "é–‹å§‹" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "測定:" @@ -3183,6 +3231,10 @@ msgstr "ビューãƒãƒ¼ãƒˆã‚’é¸ã¶" msgid "New Script" msgstr "æ–°è¦ã‚¹ã‚¯ãƒªãƒ—ト" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "スクリプトを拡張" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "æ–°è¦ %s" @@ -3209,13 +3261,6 @@ msgstr "貼り付ã‘" msgid "Convert To %s" msgstr "%s ã«å¤‰æ›" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "エディタã§é–‹ã" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã¯ãƒ“ューãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“ï¼" @@ -3294,7 +3339,6 @@ msgid "Import From Node:" msgstr "ノードã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "å†ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰" @@ -3313,7 +3357,7 @@ msgstr "ダウンãƒãƒ¼ãƒ‰" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "å…¬å¼ã®æ›¸ã出ã—テンプレートã¯é–‹ç™ºç”¨ãƒ“ルドã®å ´åˆã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3396,9 +3440,8 @@ msgid "Download Complete." msgstr "ダウンãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã—ãŸã€‚" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "ファイルã«ãƒ†ãƒ¼ãƒžã‚’ä¿å˜ã§ãã¾ã›ã‚“:" +msgstr "一時ファイルを削除ã§ãã¾ã›ã‚“:" #: editor/export_template_manager.cpp #, fuzzy @@ -3410,9 +3453,8 @@ msgstr "" "'%s' ã«ã‚りã¾ã™ã€‚" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "URL リクエストã®ã‚¨ãƒ©ãƒ¼: " +msgstr "URL リクエストã®ã‚¨ãƒ©ãƒ¼:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3599,9 +3641,8 @@ msgid "Move To..." msgstr "移動..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³" +msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3670,9 +3711,8 @@ msgid "Overwrite" msgstr "上書ã" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "シーンã‹ã‚‰ç”Ÿæˆ" +msgstr "シーンを生æˆ" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3751,23 +3791,20 @@ msgid "Invalid group name." msgstr "無効ãªã‚°ãƒ«ãƒ¼ãƒ—åã§ã™ã€‚" #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "グループã®ç®¡ç†" +msgstr "グループã®åå‰å¤‰æ›´" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "レイアウトã®å‰Šé™¤" +msgstr "グループã®å‰Šé™¤" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "グループ" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "グループã«ãªã„ノード" +msgstr "グループãŒãƒŽãƒ¼ãƒ‰ã‚りã¾ã›ã‚“" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3780,12 +3817,11 @@ msgstr "グループ内ノード" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "空ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯è‡ªå‹•çš„ã«å‰Šé™¤ã•れã¾ã™ã€‚" #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "スクリプトエディタ" +msgstr "グループエディタ" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3884,9 +3920,10 @@ msgstr " ファイル" msgid "Import As:" msgstr "åå‰ã‚’付ã‘ã¦ã‚¤ãƒ³ãƒãƒ¼ãƒˆ:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "プリセット..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "åˆæœŸè¨å®šå€¤" #: editor/import_dock.cpp msgid "Reimport" @@ -3993,9 +4030,8 @@ msgid "MultiNode Set" msgstr "マルãƒãƒŽãƒ¼ãƒ‰ セット" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "シグナルã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã‚’é¸æŠžã€‚" +msgstr "ノードを1ã¤é¸æŠžã—ã¦ã‚·ã‚°ãƒŠãƒ«ã¨ã‚°ãƒ«ãƒ¼ãƒ—を編集ã—ã¾ã™ã€‚" #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4013,7 +4049,7 @@ msgstr "プラグインå:" msgid "Subfolder:" msgstr "サブフォルダ:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "言語:" @@ -4154,6 +4190,12 @@ msgstr "点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "エディタã§é–‹ã" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "アニメーションノードを開ã" @@ -4231,9 +4273,8 @@ msgstr "BlendTreeã«ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ " #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Node Moved" -msgstr "è¿½åŠ ã—ãŸã‚ーを移動" +msgstr "ノードを移動" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." @@ -4241,15 +4282,13 @@ msgstr "接続ã§ãã¾ã›ã‚“。ãƒãƒ¼ãƒˆãŒä½¿ç”¨ä¸ã‹ã€æŽ¥ç¶šãŒç„¡åйã§ã‚ #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Connected" -msgstr "接続ã—ã¾ã—ãŸ" +msgstr "ノードを接続ã—ã¾ã—ãŸ" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Disconnected" -msgstr "切æ–ã•れã¾ã—ãŸ" +msgstr "ノードãŒåˆ‡æ–ã•れã¾ã—ãŸ" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Set Animation" @@ -4327,6 +4366,7 @@ msgid "Change Animation Name:" msgstr "アニメーションåを変更:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "アニメーションを削除ã—ã¾ã™ã‹ï¼Ÿ" @@ -4501,7 +4541,6 @@ msgstr "アニメーションå:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "エラーï¼" @@ -4674,6 +4713,8 @@ msgid "Current:" msgstr "ç¾åœ¨:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "å…¥åŠ›ã‚’è¿½åŠ " @@ -4774,7 +4815,6 @@ msgid "Request failed, return code:" msgstr "リクエスト失敗。リターンコード:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "リクエストã¯å¤±æ•—ã—ã¾ã—ãŸã€‚" @@ -4785,7 +4825,7 @@ msgstr "ファイルã«ãƒ†ãƒ¼ãƒžã‚’ä¿å˜ã§ãã¾ã›ã‚“:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "エラーを書ã„ã¦ãã ã•ã„。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4797,14 +4837,12 @@ msgid "Redirect loop." msgstr "リダイレクトã®ãƒ«ãƒ¼ãƒ—。" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "リクエスト失敗。リターンコード:" +msgstr "ãƒªã‚¯ã‚¨ã‚¹ãƒˆå¤±æ•—ã€æ™‚間切れ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "時間" +msgstr "時間切れ。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4884,24 +4922,22 @@ msgid "All" msgstr "ã™ã¹ã¦" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "å†ã‚¤ãƒ³ãƒãƒ¼ãƒˆ..." +msgstr "インãƒãƒ¼ãƒˆ..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "プラグイン" +msgstr "プラグイン..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "ソート:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "é€†é †ã‚½ãƒ¼ãƒˆã€‚" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "カテゴリー:" @@ -4911,9 +4947,8 @@ msgid "Site:" msgstr "サイト:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "サãƒãƒ¼ãƒˆ..." +msgstr "サãƒãƒ¼ãƒˆ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4924,9 +4959,8 @@ msgid "Testing" msgstr "テストä¸" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "èªã¿è¾¼ã‚€.." +msgstr "èªã¿è¾¼ã¿ä¸..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5181,21 +5215,33 @@ msgid "Pan Mode" msgstr "パンモード" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "実行モード:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "スナッピングを切り替ãˆã‚‹ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "スナップを使ã†" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "スナッピングオプション" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "スナッピングを切り替ãˆã‚‹ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "グリッドã«ã‚¹ãƒŠãƒƒãƒ—" +#, fuzzy +msgid "Use Grid Snap" +msgstr "グリッドスナップ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "スナッピングオプション" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5284,8 +5330,8 @@ msgid "View" msgstr "ビュー" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "グリッドを表示" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5433,7 +5479,6 @@ msgstr "ãƒãƒ³ãƒ‰ãƒ«ã‚’è¨å®šã™ã‚‹" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Load Emission Mask" msgstr "発光(Emission)マスクをèªã¿è¾¼ã‚€" @@ -5446,7 +5491,6 @@ msgstr "å†èµ·å‹•" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Clear Emission Mask" msgstr "発光(Emission)マスクをクリア" @@ -5464,7 +5508,7 @@ msgstr "生æˆã—ãŸãƒã‚¤ãƒ³ãƒˆã®æ•°:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "発光(Emission)マスク" +msgstr "放出マスク" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5474,7 +5518,7 @@ msgstr "ピクセルã‹ã‚‰ã‚ャプãƒãƒ£" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Colors" -msgstr "発光(Emission)色" +msgstr "放出時ã®è‰²" #: editor/plugins/cpu_particles_editor_plugin.cpp msgid "CPUParticles" @@ -5557,6 +5601,11 @@ msgstr "直線曲線を切り替ãˆã‚‹" msgid "Hold Shift to edit tangents individually" msgstr "接線を個別ã«ç·¨é›†ã™ã‚‹ã«ã¯ã‚·ãƒ•トを押ã™" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "å³ã‚¯ãƒªãƒƒã‚¯: 点を削除" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ã‚¤ãƒ«ãƒŸãƒãƒ¼ã‚·ãƒ§ãƒ³ã®äº‹å‰è¨ˆç®—" @@ -5587,7 +5636,7 @@ msgstr "メッシュãŒã‚りã¾ã›ã‚“!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" -msgstr "スタティック(ä¸å¤‰ï¼‰ä¸‰è§’形メッシュ ボディを作æˆ" +msgstr "é™çš„三角形メッシュ ボディを作æˆ" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Convex Body" @@ -5598,9 +5647,8 @@ msgid "This doesn't work on scene root!" msgstr "シーンã®ãƒ«ãƒ¼ãƒˆã§ã¯ç„¡åйã§ã™!" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Trimesh Static Shape" -msgstr "三角形メッシュ ã®ã‚·ã‚§ã‚¤ãƒ—を生æˆ" +msgstr "é™çš„三角形メッシュ シェイプを生æˆ" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Failed creating shapes!" @@ -5720,11 +5768,10 @@ msgstr "" "ん)。" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "No mesh source specified (and MultiMesh contains no Mesh)." msgstr "" -"メッシュã®ã‚½ãƒ¼ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“(ãã—ã¦MultiMesh set内ã«ã¯ã¯ãƒ¡ãƒƒã‚·ãƒ¥ãŒå˜" -"在ã—ã¾ã›ã‚“)." +"メッシュã®ã‚½ãƒ¼ã‚¹ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“(ãã—ã¦MultiMeshã«ã¯ãƒ¡ãƒƒã‚·ãƒ¥ãŒå«ã¾ã‚Œã¦ã„" +"ã¾ã›ã‚“)。" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." @@ -5763,9 +5810,8 @@ msgid "Select a Target Surface:" msgstr "ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚µãƒ¼ãƒ•ã‚§ã‚¹ã‚’é¸æŠž:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Populate Surface" -msgstr "サーフェスã«åˆæœŸå€¤ã‚’è¨å®š" +msgstr "サーフェスを満ãŸã™" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -5792,9 +5838,8 @@ msgid "Z-Axis" msgstr "Z軸" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Mesh Up Axis:" -msgstr "メッシュã®ã‚¢ãƒƒãƒ—軸:" +msgstr "メッシュã®ä¸Šè»¸:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" @@ -5809,9 +5854,8 @@ msgid "Random Scale:" msgstr "ランダムãªç¸®å°º:" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Populate" -msgstr "åˆæœŸå€¤ã‚’è¨å®š" +msgstr "ãƒ‡ãƒ¼ã‚¿ã®æŠ•å…¥" #: editor/plugins/navigation_polygon_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp @@ -5824,12 +5868,10 @@ msgid "Convert to CPUParticles" msgstr "CPUパーティクルã«å¤‰æ›" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generating Visibility Rect" -msgstr "å¯è¦–性ã®çŸ©å½¢ã‚’生æˆ" +msgstr "矩形ã®å¯è¦–性を生æˆä¸" #: editor/plugins/particles_2d_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility Rect" msgstr "å¯è¦–性ã®çŸ©å½¢ã‚’生æˆ" @@ -5844,7 +5886,7 @@ msgstr "ç”Ÿæˆæ™‚é–“ (ç§’):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "ジオメトリã®é¢ã¯é¢ç©ã‚’æŒã¡ã¾ã›ã‚“。" #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5853,22 +5895,19 @@ msgstr "ノードã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ (é¢) ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。" #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" ã¯Spatialを継承ã—ã¦ã„ã¾ã›ã‚“。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "ノードã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。" +msgstr "\"%s\" ã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "ノードã¯ã‚¸ã‚ªãƒ¡ãƒˆãƒªãƒ¼ã‚’å«ã‚“ã§ã„ã¾ã›ã‚“。" +msgstr "\"%s\" ã¯ãƒ•ェイスジオメトリーをå«ã‚“ã§ã„ã¾ã›ã‚“。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Create Emitter" -msgstr "発光物を生æˆ" +msgstr "放出器を作æˆ" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" @@ -5887,9 +5926,8 @@ msgid "Volume" msgstr "ボリューム" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Emission Source: " -msgstr "発光æº: " +msgstr "放出æº: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." @@ -5900,9 +5938,8 @@ msgid "Generating AABB" msgstr "AABBを生æˆä¸" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Generate Visibility AABB" -msgstr "å¯è¦–性ã®è»¸å¹³è¡Œå¢ƒç•Œãƒœãƒƒã‚¯ã‚¹ã‚’生æˆ" +msgstr "軸平行境界ボックスã®å¯è¦–性を生æˆã™ã‚‹" #: editor/plugins/particles_editor_plugin.cpp msgid "Generate AABB" @@ -6210,6 +6247,10 @@ msgid "Grid" msgstr "グリッド" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "グリッドを表示" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "グリッドã®è¨å®š:" @@ -6265,7 +6306,8 @@ msgstr "インスタンス:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "åž‹:" @@ -6303,9 +6345,8 @@ msgid "Error writing TextFile:" msgstr "テã‚ã‚¹ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã‚¨ãƒ©ãƒ¼:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "タイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:" +msgstr "ファイルãŒèªã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6328,7 +6369,6 @@ msgid "Error Importing" msgstr "インãƒãƒ¼ãƒˆä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "æ–°è¦ãƒ†ã‚ストファイル..." @@ -6366,6 +6406,11 @@ msgid "Find Next" msgstr "次を検索" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "å‰ã‚’検索" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "フィルタスクリプト" @@ -6410,9 +6455,8 @@ msgid "Open..." msgstr "é–‹ã..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "スクリプトを開ã" +msgstr "é–‰ã˜ãŸã‚¹ã‚¯ãƒªãƒ—トをå†ã³é–‹ã" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6468,14 +6512,14 @@ msgid "Toggle Scripts Panel" msgstr "スクリプトパãƒãƒ«ã‚’切り替ãˆ" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "ステップオーãƒãƒ¼" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "ステップイン" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "ステップオーãƒãƒ¼" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "ブレーク" @@ -6494,7 +6538,7 @@ msgstr "外部エディタã§ãƒ‡ãƒãƒƒã‚°" #: editor/plugins/script_editor_plugin.cpp msgid "Open Godot online documentation." -msgstr "Godotã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ‰ã‚ュメントを開ã" +msgstr "Godotã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ãƒ‰ã‚ュメントを開ã。" #: editor/plugins/script_editor_plugin.cpp msgid "Request Docs" @@ -6556,7 +6600,7 @@ msgstr "最近開ã„ãŸã‚·ãƒ¼ãƒ³ã®å±¥æ´ã‚’クリア" msgid "Connections to method:" msgstr "メソッドã¸ã®æŽ¥ç¶š:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "ソース" @@ -6622,7 +6666,7 @@ msgstr "シンタックスãƒã‚¤ãƒ©ã‚¤ãƒˆ" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "" +msgstr "å‚ç…§" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -6638,6 +6682,11 @@ msgstr "ブレークãƒã‚¤ãƒ³ãƒˆ" msgid "Cut" msgstr "切りå–り" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "ã™ã¹ã¦é¸æŠž" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "行を削除" @@ -6696,10 +6745,6 @@ msgid "Auto Indent" msgstr "自動インデント" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "å‰ã‚’検索" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "複数ファイル内を検索..." @@ -6833,9 +6878,8 @@ msgid "Scaling: " msgstr "縮尺: " #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translating: " -msgstr "翻訳:" +msgstr "ä½ç½®ã®å¤‰æ›´: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -6935,11 +6979,11 @@ msgstr "回転をビューã«åˆã‚ã›ã‚‹" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "åインスタンスを生æˆã™ã‚‹ãŸã‚ã®è¦ªãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" +msgstr "åインスタンスを生æˆã™ã‚‹ãŸã‚ã®è¦ªãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "å˜ä¸€ã®é¸æŠžã•れãŸãƒŽãƒ¼ãƒ‰ãŒãªã„ã¨ã€ã“ã®æ“作ã¯è¡Œãˆã¾ã›ã‚“" +msgstr "å˜ä¸€ã®é¸æŠžã•れãŸãƒŽãƒ¼ãƒ‰ãŒãªã„ã¨ã€ã“ã®æ“作ã¯è¡Œãˆã¾ã›ã‚“。" #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -7003,9 +7047,8 @@ msgid "Freelook Right" msgstr "フリールックå³" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Freelook Forward" -msgstr "ãƒ•ãƒªãƒ¼ãƒ«ãƒƒã‚¯å‰æ–¹" +msgstr "剿–¹ã‚’フリールックã§è¦‹ã‚‹" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" @@ -7024,6 +7067,11 @@ msgid "Freelook Speed Modifier" msgstr "フリールックã®é€Ÿåº¦ã‚’調整" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "フリールックã®é€Ÿåº¦ã‚’調整" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7041,13 +7089,12 @@ msgid "XForm Dialog" msgstr "Xformダイアãƒã‚°" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Nodes To Floor" -msgstr "Snapモード:" +msgstr "ノードを底é¢ã«ã‚¹ãƒŠãƒƒãƒ—ã•ã›ã‚‹" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "é¸æŠžã‚’ã‚¹ãƒŠãƒƒãƒ—ã™ã‚‹å‰›ä½“ã®åºŠã‚’見ã¤ã‘れã¾ã›ã‚“。" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7065,6 +7112,10 @@ msgid "Use Local Space" msgstr "ãƒãƒ¼ã‚«ãƒ«ç©ºé–“モード (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "スナップを使ã†" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "下é¢å›³" @@ -7111,10 +7162,9 @@ msgstr "フリールックã®åˆ‡ã‚Šæ›¿ãˆ" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "変æ›" +msgstr "変形" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Object to Floor" msgstr "オブジェクトを底é¢ã«ã‚¹ãƒŠãƒƒãƒ—" @@ -7160,9 +7210,8 @@ msgstr "ビューã®ã‚°ãƒªãƒƒãƒ‰" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "è¨å®š" +msgstr "è¨å®š..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7201,9 +7250,8 @@ msgid "Transform Change" msgstr "変æ›ã®å¤‰æ›´" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Translate:" -msgstr "移動(translate):" +msgstr "移動:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" @@ -7227,7 +7275,7 @@ msgstr "後" #: editor/plugins/spatial_editor_plugin.cpp msgid "Nameless gizmo" -msgstr "" +msgstr "ç„¡åã®ã‚®ã‚ºãƒ¢" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -7291,7 +7339,12 @@ msgstr "スプライト" #: editor/plugins/sprite_editor_plugin.cpp msgid "Simplification: " -msgstr "簡略化:" +msgstr "簡略化: " + +#: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "拡大(ピクセル): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " @@ -7342,6 +7395,10 @@ msgid "(empty)" msgstr "(空)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "フレームã®ç§»å‹•" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "アニメーション:" @@ -7394,9 +7451,8 @@ msgid "Horizontal:" msgstr "æ°´å¹³:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Vertical:" -msgstr "é ‚ç‚¹" +msgstr "垂直:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Select/Clear All Frames" @@ -7429,12 +7485,11 @@ msgstr "None" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Pixel Snap" -msgstr "ピクセルSnap" +msgstr "ピクセルスナップ" #: editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Grid Snap" -msgstr "グリッドSnap" +msgstr "グリッドスナップ" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Auto Slice" @@ -7450,7 +7505,7 @@ msgstr "ステップ:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "" +msgstr "分類:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" @@ -7536,29 +7591,27 @@ msgstr "ãƒã‚§ãƒƒã‚¯æ¸ˆã¿ã‚¢ã‚¤ãƒ†ãƒ " #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "åå‰ä»˜ã分類。" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" msgstr "サブメニュー" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "アイテム1" +msgstr "サブアイテム1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "アイテム2" +msgstr "サブアイテム2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" -msgstr "" +msgstr "å«ã‚“ã§ã„ã‚‹" #: editor/plugins/theme_editor_plugin.cpp msgid "Many" -msgstr "" +msgstr "多ãã®" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled LineEdit" @@ -7651,9 +7704,8 @@ msgid "Find Tile" msgstr "タイルを検索ã™ã‚‹" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Transpose" -msgstr "転置" +msgstr "行列(縦横)入れ替ãˆ" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" @@ -7664,17 +7716,26 @@ msgid "Enable Priority" msgstr "å„ªå…ˆé †ä½ã‚’有効化" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "タイルを絞り込む" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" +"タイルãƒãƒƒãƒ—を使ã†ã«ã¯ã“ã®ã‚¿ã‚¤ãƒ«ãƒžãƒƒãƒ—ã«ã‚¿ã‚¤ãƒ«ã‚»ãƒƒãƒˆãƒªã‚½ãƒ¼ã‚¹ã‚’è¨å®šã—ã¦ãã ã•" +"ã„。" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "タイルを塗る" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+å³ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³:ç·šã®æç”»\n" -"Shift+Ctrl+å³ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³:矩形ペイント" +"Shift+左マウスボタン:ç·šã®æç”»\n" +"Shift+Ctrl+左マウスボタン:矩形ペイント" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7702,11 +7763,11 @@ msgstr "変æ›ã‚’クリア" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." -msgstr "テクスãƒãƒ£ã‚’タイルセットã«è¿½åŠ ã™ã‚‹" +msgstr "テクスãƒãƒ£ã‚’タイルセットã«è¿½åŠ ã™ã‚‹ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." -msgstr "é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’タイルセットã‹ã‚‰å‰Šé™¤ã™ã‚‹" +msgstr "é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’タイルセットã‹ã‚‰å‰Šé™¤ã™ã‚‹ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" @@ -7737,9 +7798,8 @@ msgid "Region Mode" msgstr "é ˜åŸŸãƒ¢ãƒ¼ãƒ‰" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision Mode" -msgstr "補間モード" +msgstr "コリジョンモード" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion Mode" @@ -7775,12 +7835,11 @@ msgstr "ビットマスクを貼り付ã‘。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Erase bitmask." -msgstr "ビットマスクを消去" +msgstr "ビットマスクを消去。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Create a new rectangle." -msgstr "æ–°è¦ãƒŽãƒ¼ãƒ‰ã‚’作æˆã€‚" +msgstr "æ–°è¦çŸ©å½¢ã‚’作æˆã€‚" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." @@ -7799,6 +7858,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "タイルåを表示 (Altã‚ーを長押ã—)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"è¨å®šã•れãŸã‚¿ã‚¤ãƒ«ã‚’編集ã™ã‚‹ã«ã¯ã€å·¦ã®ãƒ‘ãƒãƒ«ã‹ã‚‰ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’è¿½åŠ ã™ã‚‹ã‹ã€é¸æŠžã—" +"ã¦ãã ã•ã„。" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "é¸æŠžã—ãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’除去ã—ã¾ã™ã‹? ã“れを使用ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ«ã¯é™¤åŽ»ã•れ" @@ -7973,16 +8039,111 @@ msgstr "ã“ã®ãƒ—ãƒãƒ‘ティã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" msgid "TileSet" msgstr "タイルセット" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "ノードã®è¦ªã®åå‰ (使用å¯èƒ½ãªå ´åˆ)" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "エラー" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No commit message was provided" +msgstr "åå‰ãŒä»˜ã„ã¦ã„ã¾ã›ã‚“" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "ステージã«è¿½åŠ ã•れã¦ã„るファイルãŒã‚りã¾ã›ã‚“" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "委託" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "VCSアドオンã¯åˆæœŸåŒ–ã•れã¦ã„ã¾ã›ã‚“" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç®¡ç†ã‚·ã‚¹ãƒ†ãƒ " + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "åˆæœŸåŒ–" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "ステージングエリア" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "æ–°ã—ã„変更点を検出" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "変更点" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "変更ã•れãŸç®‡æ‰€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "åå‰ã®å¤‰æ›´ã•れãŸ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "削除ã•れãŸ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "変更" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "é¸æŠžã•れãŸã‚‚ã®ã‚’公開ã™ã‚‹" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "ã™ã¹ã¦ã‚’公開ã™ã‚‹" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "ã‚³ãƒŸãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’è¿½åŠ ã™ã‚‹" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "スクリプトã®å¤‰æ›´ã‚’åŒæœŸ" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "ステータス" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "最新ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã«ã‚³ãƒŸãƒƒãƒˆã™ã‚‹å‰ã«ãƒ•ァイルã®å·®åˆ†ã‚’見る" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "ファイルãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "ファイルã®å·®åˆ†ã«å¤‰æ›´ã‚’確èª" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(GLES3ã®ã¿)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "å…¥åŠ›ã‚’è¿½åŠ +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "å‡ºåŠ›ã‚’è¿½åŠ +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7998,6 +8159,11 @@ msgid "Boolean" msgstr "ブール" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "ã‚µãƒ³ãƒ—ãƒ«ã‚’è¿½åŠ " + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "入力ãƒãƒ¼ãƒˆã®è¿½åŠ " @@ -8039,7 +8205,7 @@ msgstr "ビジュアルシェーダーノードã®ã‚µã‚¤ã‚ºã‚’変更ã™ã‚‹" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "" +msgstr "統一åã‚’è¨å®š" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" @@ -8080,9 +8246,8 @@ msgid "Light" msgstr "å³å´é¢" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "シェーダーノードã®ä½œæˆ" +msgstr "シェーダーコードã®çµæžœã‚’表示。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8110,7 +8275,7 @@ msgstr "RGBベクトルをHSVベクトルã«å¤‰æ›ã—ã¾ã™ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sepia function." -msgstr "セピア関数" +msgstr "セピア関数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Burn operator." @@ -8138,7 +8303,7 @@ msgstr "Lighten演算å。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Overlay operator." -msgstr "" +msgstr "オーãƒãƒ¼ãƒ¬ã‚¤å‡¦ç†ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Screen operator." @@ -8212,6 +8377,12 @@ msgstr "" "指定ã•れãŸãƒ–ール値ãŒtrueã¾ãŸã¯falseã®å ´åˆã€é–¢é€£ä»˜ã‘られãŸãƒ™ã‚¯ãƒˆãƒ«ã‚’è¿”ã—ã¾ã™ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"指定ã•れãŸãƒ–ール値ãŒtrueã¾ãŸã¯falseã®å ´åˆã€é–¢é€£ä»˜ã‘られãŸã‚¹ã‚«ãƒ©ãƒ¼ã‚’è¿”ã—ã¾ã™ã€‚" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "2ã¤ã®ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿é–“ã®æ¯”較ã®çµæžœã‚’ブール値ã§è¿”ã—ã¾ã™ã€‚" @@ -8227,7 +8398,7 @@ msgstr "ブール定数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean uniform." -msgstr "" +msgstr "真å½å€¤ã®uniform変数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." @@ -8240,6 +8411,7 @@ msgstr "入力パラメータ。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." msgstr "" +"'%s' ã¯é ‚点シェーダーã¨ãƒ•ラグメントシェーダーã®ãŸã‚ã®ãƒ‘ラメータを入力ã—ã¾ã™ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment and light shader modes." @@ -8260,6 +8432,7 @@ msgstr "é ‚ç‚¹ã‚·ã‚§ãƒ¼ãƒ€ãƒ¢ãƒ¼ãƒ‰ã® '%s' 入力パラメータ。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." msgstr "" +"é ‚ç‚¹ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã€ãƒ•ラグメントシェーダーモード㮠'%s' 入力パラメータ。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8644,9 +8817,8 @@ msgid "Linear interpolation between two vectors." msgstr "2ã¤ã®ãƒ™ã‚¯ãƒˆãƒ«é–“ã®ãƒªãƒ‹ã‚¢è£œé–“。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "2ã¤ã®ãƒ™ã‚¯ãƒˆãƒ«é–“ã®ãƒªãƒ‹ã‚¢è£œé–“。" +msgstr "スカラーを使ã£ãŸã€2ã¤ã®ãƒ™ã‚¯ãƒˆãƒ«é–“ã®ãƒªãƒ‹ã‚¢è£œé–“。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8771,11 +8943,15 @@ msgstr "" "è¿”ã—ã¾ã™ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Custom Godot Shader Language expression, which placed on top of the resulted " "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"カスタムGodotシェーダー言語ã®è¡¨ç¾ã¯ã€ã‚·ã‚§ãƒ¼ãƒ‡ã‚£ãƒ³ã‚°çµæžœã®æœ€å¾Œã«ä½ç½®ã—ã¾ã™ã€‚" +"様々ãªé–¢æ•°ã‚’ãã®ä¸ã§å®šç¾©ã—ã€è¡¨ç¾ã®ä¸ã§å‘¼ã³å‡ºã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸvarying変" +"æ•°ã€uniform変数ã€å®šæ•°ã‚’宣言ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8929,14 +9105,18 @@ msgid "Resources to export:" msgstr "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "エクスãƒãƒ¼ãƒˆã™ã‚‹éžãƒªã‚½ãƒ¼ã‚¹ãƒ•ァイルã®ãƒ•ィルタ (コンマ区切り, 例*.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "プãƒã‚¸ã‚§ã‚¯ãƒˆã‹ã‚‰é™¤å¤–ã™ã‚‹ãƒ•ァイルã®ãƒ•ィルタ (コンマ区切り, 例*.json, *.txt)" @@ -8994,9 +9174,8 @@ msgid "Export PCK/Zip" msgstr "PCK/Zipã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ" #: editor/project_export.cpp -#, fuzzy msgid "Export mode?" -msgstr "エクスãƒãƒ¼ãƒˆ モード?" +msgstr "エクスãƒãƒ¼ãƒˆ モード?" #: editor/project_export.cpp msgid "Export All" @@ -9176,7 +9355,7 @@ msgstr "æ—¢å˜ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’インãƒãƒ¼ãƒˆ" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "エラー: プãƒã‚¸ã‚§ã‚¯ãƒˆã¯ãƒ•ァイルシステムを見ã¤ã‘られã¾ã›ã‚“。" #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9272,12 +9451,11 @@ msgstr "" "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ォルダã®å†…容ã¯å¤‰æ›´ã•れã¾ã›ã‚“。" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"%d プãƒã‚¸ã‚§ã‚¯ãƒˆã‚’一覧ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹?\n" +"見ã¤ã‹ã‚‰ãªã„ã™ã¹ã¦ã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆã‚’一覧ã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹?\n" "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒ•ォルダã®å†…容ã¯å¤‰æ›´ã•れã¾ã›ã‚“。" #: editor/project_manager.cpp @@ -9302,7 +9480,6 @@ msgid "Project Manager" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" msgstr "プãƒã‚¸ã‚§ã‚¯ãƒˆ" @@ -9487,9 +9664,8 @@ msgid "Middle Button." msgstr "ä¸ã‚¯ãƒªãƒƒã‚¯" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Wheel Up." -msgstr "マウスホイールを上ã¸." +msgstr "マウスホイールを上." #: editor/project_settings_editor.cpp msgid "Wheel Down." @@ -9536,6 +9712,11 @@ msgid "Settings saved OK." msgstr "è¨å®šã®ä¿å˜ã«æˆåŠŸã—ã¾ã—ãŸ." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "å…¥åŠ›ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚¤ãƒ™ãƒ³ãƒˆã‚’è¿½åŠ " + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "機能ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰" @@ -9548,16 +9729,14 @@ msgid "Remove Translation" msgstr "翻訳を除去" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Remapped Path" -msgstr "リマップã•れãŸãƒ‘ã‚¹ã‚’è¿½åŠ " +msgstr "å†ãƒžãƒƒãƒ—ã•れãŸãƒ‘ã‚¹ã‚’è¿½åŠ " #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "" +msgstr "リソースå†ãƒžãƒƒãƒ—ãŒå†ãƒžãƒƒãƒ—ã‚’è¿½åŠ " #: editor/project_settings_editor.cpp -#, fuzzy msgid "Change Resource Remap Language" msgstr "リソースリマップ言語を変更" @@ -9566,9 +9745,8 @@ msgid "Remove Resource Remap" msgstr "リソースã®ãƒªãƒžãƒƒãƒ—を削除" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Remove Resource Remap Option" -msgstr "リソースã®ãƒªãƒžãƒƒãƒ—オプションを除去" +msgstr "リソースå†ãƒžãƒƒãƒ—オプションを削除" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" @@ -9588,7 +9766,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." @@ -9675,6 +9853,10 @@ msgid "Plugins" msgstr "プラグイン" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "プリセット..." + +#: editor/property_editor.cpp #, fuzzy msgid "Zero" msgstr "(イージング)無ã—" @@ -9844,10 +10026,6 @@ msgstr "大文å—ã«" msgid "Reset" msgstr "リセット" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "エラー" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "親ノードを変更" @@ -9905,6 +10083,11 @@ msgid "Instance Scene(s)" msgstr "シーンã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "ブランãƒã‚’シーンã¨ã—ã¦ä¿å˜" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "åシーンをインスタンス化" @@ -9921,9 +10104,8 @@ msgid "Move Node In Parent" msgstr "ノードを親ã«ç§»å‹•" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Nodes In Parent" -msgstr "親ã®ãƒŽãƒ¼ãƒ‰ã‚’移動" +msgstr "複数ã®ãƒŽãƒ¼ãƒ‰ã‚’親ã«ç§»å‹•" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" @@ -9947,8 +10129,21 @@ msgid "Make node as Root" msgstr "ノードをルートã«ã™ã‚‹" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "ノードを削除ã—ã¾ã™ã‹?" +msgid "Delete %d nodes?" +msgstr "%d ノードを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "シェーダーグラフノードを消去" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "\"%s\" ノードã¨ãã®åノードを削除ã—ã¾ã™ã‹ï¼Ÿ" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "\"%s\" ノードを削除ã—ã¾ã™ã‹ï¼Ÿ" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9971,12 +10166,13 @@ msgstr "" "ã«æˆ»ã‚Šã¾ã™ã€‚" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "編集å¯èƒ½ãªå" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "プレースホルダーã¨ã—ã¦ãƒãƒ¼ãƒ‰" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"\"editable_instance\" を無効ã«ã™ã‚‹ã¨ã€ãƒŽãƒ¼ãƒ‰ã®ã™ã¹ã¦ã®ãƒ—ãƒãƒ‘ティãŒãƒ‡ãƒ•ォルト" +"ã«æˆ»ã‚Šã¾ã™ã€‚" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10052,6 +10248,14 @@ msgid "Clear Inheritance" msgstr "継承をクリア" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "編集å¯èƒ½ãªå" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "プレースホルダーã¨ã—ã¦ãƒãƒ¼ãƒ‰" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "ドã‚ュメントを開ã" @@ -10068,10 +10272,6 @@ msgid "Change Type" msgstr "型を変更" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "スクリプトを拡張" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "親ノードを変更" @@ -10158,22 +10358,20 @@ msgstr "" "クリックã§ã‚·ã‚°ãƒŠãƒ« ドックを表示。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶šãŒã‚りã¾ã™ã€‚\n" +"ノード㫠%s 個接続ãŒã‚りã¾ã™ã€‚\n" "クリックã§ã‚·ã‚°ãƒŠãƒ« ドックを表示。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"ノードã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«å±žã—ã¦ã„ã¾ã™ã€‚\n" -"クリックã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ドックを表示ã—ã¦ãã ã•ã„。" +"ノード㯠%s グループã«å±žã—ã¦ã„ã¾ã™ã€‚\n" +"クリックã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ドックを表示。" #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10318,23 +10516,18 @@ msgid "Will load an existing script file." msgstr "æ—¢å˜ã®ã‚¹ã‚¯ãƒªãƒ—トファイルをèªã¿è¾¼ã‚€ã€‚" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "言語" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "継承" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "クラスå" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "テンプレート" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "組ã¿è¾¼ã¿ã‚¹ã‚¯ãƒªãƒ—ト" #: editor/script_create_dialog.cpp @@ -10350,26 +10543,54 @@ msgid "Bytes:" msgstr "ãƒã‚¤ãƒˆ:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "スタックトレース" +msgid "Warning:" +msgstr "è¦å‘Š:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "グラフを表示ã™ã‚‹ã«ã¯ã€ãƒªã‚¹ãƒˆã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ ã‚’1ã¤ä»¥ä¸Šé¸ã‚“ã§ãã ã•ã„。" +msgid "Error:" +msgstr "エラー:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "C++ エラー" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "C++ エラー:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "C++ ソース" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "ソース:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "C++ ソース:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "スタックトレース" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "エラー" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "åプãƒã‚»ã‚¹æŽ¥ç¶š" +msgid "Child process connected." +msgstr "åプãƒã‚»ã‚¹ãŒæŽ¥ç¶šã•れãŸã€‚" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "エラーをコピー" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "ブレークãƒã‚¤ãƒ³ãƒˆã‚’スã‚ップã™ã‚‹" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "å‰ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’調ã¹ã‚‹" @@ -10386,6 +10607,10 @@ msgid "Profiler" msgstr "プãƒãƒ•ァイラー" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ—ãƒãƒ•ァイラー" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "モニター" @@ -10398,6 +10623,10 @@ msgid "Monitors" msgstr "モニター" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "グラフを表示ã™ã‚‹ã«ã¯ã€ãƒªã‚¹ãƒˆã‹ã‚‰ã‚¢ã‚¤ãƒ†ãƒ ã‚’1ã¤ä»¥ä¸Šé¸ã‚“ã§ãã ã•ã„。" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "リソースã«ã‚ˆã‚‹ãƒ“デオメモリーã®ä½¿ç”¨ä¸€è¦§:" @@ -10595,10 +10824,6 @@ msgid "Library" msgstr "ライブラリ" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "ステータス" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "ライブラリ: " @@ -10607,6 +10832,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "é•·ã•ãŒ1ã®æ–‡å—列(文å—)を予期ã—ã¾ã—ãŸã€‚" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "ステップ引数ã¯ã‚¼ãƒã§ã™!" @@ -10643,14 +10872,12 @@ msgid "Object can't provide a length." msgstr "オブジェクトã«é•·ã•ãŒã‚りã¾ã›ã‚“." #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Next Plane" -msgstr "次ã®ã‚¿ãƒ–" +msgstr "次ã®å¹³é¢" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Previous Plane" -msgstr "以å‰ã®ã‚¿ãƒ–" +msgstr "å‰ã®å¹³é¢" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Plane:" @@ -10768,6 +10995,17 @@ msgstr "グリッドマップã®è¨å®š" msgid "Pick Distance:" msgstr "インスタンス:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "フィルタメソッド" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"メッシュを使ã†ã«ã¯ãƒ¡ãƒƒã‚·ãƒ¥ãƒ©ã‚¤ãƒ–ラリリソースをã“ã®ã‚°ãƒªãƒƒãƒ‰ãƒžãƒƒãƒ—ã«è¨å®šã—ã¦ã" +"ã ã•ã„。" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "クラスåを予約ã‚ーワードã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" @@ -10894,28 +11132,28 @@ msgid "Set Variable Type" msgstr "変数ã®åž‹ã‚’è¨å®š" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "æ—¢å˜ã®çµ„è¾¼ã¿åž‹åã¨é‡è¤‡ã—ã¦ã¯ã„ã‘ã¾ã›ã‚“。" +msgstr "æ—¢å˜ã®çµ„è¾¼ã¿é–¢æ•°ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã€‚" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "æ–°è¦ãƒŽãƒ¼ãƒ‰ã‚’作æˆã€‚" +msgstr "æ–°è¦é–¢æ•°ã‚’作æˆã€‚" #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "変数を作æˆ:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "æ–°è¦ãƒŽãƒ¼ãƒ‰ã‚’作æˆã€‚" +msgstr "æ–°è¦å¤‰æ•°ã‚’作æˆã€‚" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "シグナル:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "æ–°è¦ãƒãƒªã‚´ãƒ³ã‚’生æˆã€‚" +msgstr "æ–°è¦ã‚·ã‚°ãƒŠãƒ«ã‚’生æˆã€‚" #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10942,6 +11180,11 @@ msgid "Add Function" msgstr "é–¢æ•°ã‚’è¿½åŠ " #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "入力ãƒãƒ¼ãƒˆã®å‰Šé™¤" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "å¤‰æ•°ã‚’è¿½åŠ " @@ -10950,6 +11193,26 @@ msgid "Add Signal" msgstr "ã‚·ã‚°ãƒŠãƒ«ã‚’è¿½åŠ " #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "入力ãƒãƒ¼ãƒˆã®è¿½åŠ " + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "出力ãƒãƒ¼ãƒˆã‚’è¿½åŠ " + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "入力ãƒãƒ¼ãƒˆã®å‰Šé™¤" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "出力ãƒãƒ¼ãƒˆã®å‰Šé™¤" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "å¼ã‚’変更" @@ -10998,10 +11261,20 @@ msgid "Add Preload Node" msgstr "プリãƒãƒ¼ãƒ‰ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ " #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "ツリーã‹ã‚‰ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ " #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "ゲッタープãƒãƒ‘ティã®è¿½åŠ " @@ -11026,6 +11299,11 @@ msgid "Connect Nodes" msgstr "ãƒŽãƒ¼ãƒ‰ã«æŽ¥ç¶š" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "グラフノードを切æ–" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "ãƒŽãƒ¼ãƒ‰ãƒ‡ãƒ¼ã‚¿ã«æŽ¥ç¶š" @@ -11058,6 +11336,28 @@ msgid "Paste VisualScript Nodes" msgstr "VisualScriptノードを貼り付ã‘" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "ファンクションノードをコピーã§ãã¾ã›ã‚“。" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "関数åを変更" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "関数を除去" @@ -11078,16 +11378,18 @@ msgid "Editing Signal:" msgstr "シグナルを接続:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "基本タイプ:" +#, fuzzy +msgid "Make Tool:" +msgstr "ãƒãƒ¼ã‚«ãƒ«ã«ã™ã‚‹" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "メンãƒãƒ¼:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "利用å¯èƒ½ãªãƒŽãƒ¼ãƒ‰:" +#, fuzzy +msgid "function_name" +msgstr "関数:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11110,6 +11412,16 @@ msgid "Cut Nodes" msgstr "ノードを切りå–ã‚‹" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "関数åを変更" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "å†èªè¾¼" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "メンãƒãƒ¼ã‚’編集" @@ -11207,6 +11519,10 @@ msgid "The package must have at least one '.' separator." msgstr "パッケージã«ã¯ä¸€ã¤ä»¥ä¸Šã®åŒºåˆ‡ã‚Šæ–‡å— '.' ãŒå¿…è¦ã§ã™ã€‚" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "一覧ã‹ã‚‰ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "ADB実行å¯èƒ½ãƒ•ァイルãŒã‚¨ãƒ‡ã‚£ã‚¿è¨å®šã§è¨å®šã•れã¦ã„ã¾ã›ã‚“。" @@ -11227,8 +11543,10 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "エディタè¨å®šã®ã‚«ã‚¹ã‚¿ãƒ ビルドã®Android SDKパスãŒç„¡åйã§ã™ã€‚" #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" "Androidプãƒã‚¸ã‚§ã‚¯ãƒˆã¯ã‚³ãƒ³ãƒ‘イル用ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“。 エディタメ" "ニューã‹ã‚‰ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚" @@ -11277,7 +11595,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "No build apk generated at: " -msgstr "ビルドAPKã¯ç”Ÿæˆã•れã¦ã„ã¾ã›ã‚“:" +msgstr "ビルドAPKã¯ç”Ÿæˆã•れã¦ã„ã¾ã›ã‚“: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -11317,6 +11635,10 @@ msgid "Required icon is not specified in the preset." msgstr "å¿…é ˆã‚¢ã‚¤ã‚³ãƒ³ãŒãƒ—ãƒªã‚»ãƒƒãƒˆã«æŒ‡å®šã•れã¦ã„ã¾ã›ã‚“。" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "ブラウザã§å®Ÿè¡Œ" @@ -11370,34 +11692,29 @@ msgid "Invalid Store Logo image dimensions (should be 50x50)." msgstr "䏿£ãªStoreãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸(縦横50x50ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "䏿£ãª44X44æ£æ–¹ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª44x44ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "無効ãª44X44四角ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª44x44ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "䏿£ãª71x71æ£æ–¹ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª71x71ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "無効ãª71x71四角ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª71x71ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "䏿£ãª150X150æ£æ–¹ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª150x150ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "無効ãª150X150四角ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª150x150ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "䏿£ãª310X310æ£æ–¹ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª310x310ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "無効ãª310X310四角ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª310x310ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "䏿£ãª310X150幅広ãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª310x150ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "無効ãª310X150ワイドãƒã‚´ã‚¤ãƒ¡ãƒ¼ã‚¸ï¼ˆç¸¦æ¨ª310x150ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: platform/uwp/export/export.cpp -#, fuzzy msgid "Invalid splash screen image dimensions (should be 620x300)." -msgstr "䏿£ãªã‚¹ãƒ—ラッシュスクリーンイメージ(縦横620x300ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)" +msgstr "" +"無効ãªã‚¹ãƒ—ラッシュスクリーンイメージ(縦横620x300ã§ãªã„ã¨ã„ã‘ã¾ã›ã‚“)。" #: scene/2d/animated_sprite.cpp #, fuzzy @@ -11634,16 +11951,15 @@ msgstr "(Time Left: %d分%02dç§’)" #: scene/3d/baked_lightmap.cpp msgid "Plotting Meshes: " -msgstr "メッシュã®ãƒ—ãƒãƒƒãƒˆ: " +msgstr "メッシュをæç”»ä¸: " #: scene/3d/baked_lightmap.cpp -#, fuzzy msgid "Plotting Lights:" -msgstr "イメージをé…ç½®(Blit)" +msgstr "å…‰æºã‚’æç”»ä¸:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" -msgstr "プãƒãƒƒãƒˆå®Œäº†" +msgstr "æç”»å®Œäº†" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " @@ -11834,6 +12150,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"EnvironmentãŒå¯è¦–エフェクトをæŒã¤ãŸã‚ã«ã€WorldEnvironmentã®ã€ŒEnvironmentã€ãƒ—" +"ãƒãƒ‘ティãŒå¿…è¦ã§ã™ã€‚" #: scene/3d/world_environment.cpp msgid "" @@ -11900,7 +12218,7 @@ msgstr "スクリーンã‹ã‚‰è‰²ã‚’é¸æŠžã—ã¦ãã ã•ã„。" #: scene/gui/color_picker.cpp msgid "HSV" -msgstr "" +msgstr "HSV" #: scene/gui/color_picker.cpp msgid "Raw" @@ -11915,7 +12233,6 @@ msgid "Add current color as a preset." msgstr "ç¾åœ¨ã®è‰²ã‚’プリセットã¨ã—ã¦è¿½åŠ ã—ã¾ã™ã€‚" #: scene/gui/container.cpp -#, fuzzy msgid "" "Container by itself serves no purpose unless a script configures its " "children placement behavior.\n" @@ -11923,8 +12240,8 @@ msgid "" msgstr "" "コンテナ自体ã¯ã€ã‚¹ã‚¯ãƒªãƒ—トã§åã®é…置動作をè¨å®šã—ãªã„é™ã‚Šã€ä½•ã®å½¹å‰²ã‚‚æžœãŸã—ã¾" "ã›ã‚“。\n" -"ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¿½åŠ ã—ãªã„å ´åˆã¯ã€ä»£ã‚りã«ãƒ—レーン「コントãƒãƒ¼ãƒ« ã€ãƒŽãƒ¼ãƒ‰ã‚’使用ã—" -"ã¦ãã ã•ã„。" +"ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¿½åŠ ã—ãªã„å ´åˆã¯ã€ä»£ã‚ã‚Šã«æ™®é€šã®ã€Œã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ« ã€ãƒŽãƒ¼ãƒ‰ã‚’使用ã—ã¦" +"ãã ã•ã„。" #: scene/gui/control.cpp msgid "" @@ -11993,10 +12310,6 @@ msgstr "" "ãりã¾ã™ã€‚ãれ以外ã®å ´åˆã€ãƒ¬ãƒ³ãƒ€ãƒ¼ ターゲットã—ã€ãã®å†…部ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£è¡¨ç¤ºã®ã„" "ãã¤ã‹ã®ãƒŽãƒ¼ãƒ‰ã«å‰²ã‚Šå½“ã¦ã¾ã™ã€‚" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "入力" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "プレビューã®ã‚½ãƒ¼ã‚¹ãŒç„¡åйã§ã™ã€‚" @@ -12026,6 +12339,65 @@ msgstr "Varyingã¯é ‚点関数ã«ã®ã¿å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" msgid "Constants cannot be modified." msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" +#~ msgid "Snap to Grid" +#~ msgstr "グリッドã«ã‚¹ãƒŠãƒƒãƒ—" + +#~ msgid "Add input +" +#~ msgstr "å…¥åŠ›ã‚’è¿½åŠ +" + +#~ msgid "Language" +#~ msgstr "言語" + +#~ msgid "Inherits" +#~ msgstr "継承" + +#~ msgid "Base Type:" +#~ msgstr "基本タイプ:" + +#~ msgid "Available Nodes:" +#~ msgstr "利用å¯èƒ½ãªãƒŽãƒ¼ãƒ‰:" + +#~ msgid "Input" +#~ msgstr "入力" + +#~ msgid "Properties:" +#~ msgstr "プãƒãƒ‘ティ:" + +#~ msgid "Methods:" +#~ msgstr "メソッド:" + +#~ msgid "Theme Properties:" +#~ msgstr "テーマプãƒãƒ‘ティ:" + +#~ msgid "Enumerations:" +#~ msgstr "列挙型:" + +#~ msgid "Constants:" +#~ msgstr "定数:" + +#~ msgid "Class Description:" +#~ msgstr "クラスã®èª¬æ˜Žï¼š" + +#~ msgid "Property Descriptions:" +#~ msgstr "プãƒãƒ‘ティã®èª¬æ˜Ž:" + +#~ msgid "Method Descriptions:" +#~ msgstr "メソッドã®èª¬æ˜Ž:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "ã“れã«ã‚ˆã‚Šã€ã‚«ã‚¹ã‚¿ãƒ ビルド用ã®Androidプãƒã‚¸ã‚§ã‚¯ãƒˆãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾" +#~ "ã™ã€‚\n" +#~ "使用ã™ã‚‹ã«ã¯ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ—リセットã”ã¨ã«æœ‰åйã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" + +#~ msgid "Reverse sorting." +#~ msgstr "é€†é †ã‚½ãƒ¼ãƒˆã€‚" + +#~ msgid "Delete Node(s)?" +#~ msgstr "ノードを削除ã—ã¾ã™ã‹?" + #~ msgid "No Matches" #~ msgstr "一致ãªã—" @@ -12215,9 +12587,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Go to parent folder" #~ msgstr "親フォルダã¸" -#~ msgid "Select device from the list" -#~ msgstr "一覧ã‹ã‚‰ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž" - #~ msgid "Open Scene(s)" #~ msgstr "シーンを開ã" @@ -12285,9 +12654,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "é¸æŠžã—ãŸã‚·ãƒ¼ãƒ³ã‚’é¸æŠžã—ãŸãƒŽãƒ¼ãƒ‰ã®åã¨ã—ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åŒ–ã—ã¾ã™ã€‚" -#~ msgid "Warnings:" -#~ msgstr "è¦å‘Š:" - #~ msgid "Font Size:" #~ msgstr "フォントサイズ:" @@ -12329,9 +12695,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Select a split to erase it." #~ msgstr "è¨å®šé …目をè¨å®šã—ã¦ãã ã•ã„!" -#~ msgid "No name provided" -#~ msgstr "åå‰ãŒä»˜ã„ã¦ã„ã¾ã›ã‚“" - #~ msgid "Add Node.." #~ msgstr "ãƒŽãƒ¼ãƒ‰ã‚’è¿½åŠ .." @@ -12468,12 +12831,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Warning" #~ msgstr "è¦å‘Š" -#~ msgid "Error:" -#~ msgstr "エラー:" - -#~ msgid "Function:" -#~ msgstr "関数:" - #~ msgid "Variable" #~ msgstr "変数" @@ -12550,10 +12907,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgstr "グラフノードを接続" #, fuzzy -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "グラフノードを切æ–" - -#, fuzzy #~ msgid "Remove Shader Graph Node" #~ msgstr "シェーダーグラフノードを除去" @@ -12564,9 +12917,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "グラフノードを複製" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "シェーダーグラフノードを消去" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "エラー:循環çµåˆãƒªãƒ³ã‚¯" @@ -13036,10 +13386,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgstr "æ–°ã—ã„åå‰ã¨ãƒã‚±ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é¸æŠž:" #, fuzzy -#~ msgid "No files selected!" -#~ msgstr "ファイルãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“!" - -#, fuzzy #~ msgid "Info" #~ msgstr "インフォーメーション" @@ -13504,9 +13850,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "ERROR: Couldn't load sample!" #~ msgstr "エラー:サンプルをèªã¿è¾¼ã‚ã¾ã›ã‚“!" -#~ msgid "Add Sample" -#~ msgstr "ã‚µãƒ³ãƒ—ãƒ«ã‚’è¿½åŠ " - #~ msgid "Rename Sample" #~ msgstr "サンプルã®åå‰ã‚’変ãˆã‚‹" @@ -13526,12 +13869,6 @@ msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。" #~ msgid "Scaling to %s%%." #~ msgstr "æ‹¡å¤§ç¸®å°æ¯”率%s%%." -#~ msgid "Up" -#~ msgstr "上" - -#~ msgid "Down" -#~ msgstr "下" - #, fuzzy #~ msgid "Invalid project path, the path must exist!" #~ msgstr "パスãŒä¸æ£ã§ã™.パスãŒå˜åœ¨ã—ãªã„ã¨ã„ã‘ã¾ã›ã‚“." diff --git a/editor/translations/ka.po b/editor/translations/ka.po index 7129447aef..f703153803 100644 --- a/editor/translations/ka.po +++ b/editor/translations/ka.po @@ -60,6 +60,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "თáƒáƒ•ისუფáƒáƒšáƒ˜" @@ -351,6 +379,7 @@ msgstr "áƒáƒ®áƒáƒšáƒ˜ %d ჩáƒáƒœáƒáƒ¬áƒ”რების შექმნრ#: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "შექმნáƒ" @@ -488,15 +517,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ”თ AnimationPlayer სცენიდáƒáƒœ რáƒáƒ› შეცვáƒáƒšáƒáƒ— áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ”ბი." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -632,8 +656,9 @@ msgid "Scale Ratio:" msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "დáƒáƒ§áƒ”ნდეს გáƒáƒ“áƒáƒ¡áƒ•ლები შემდეგზე:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -644,6 +669,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -831,7 +861,8 @@ msgstr "დáƒáƒ›áƒáƒ™áƒáƒ•შირებელი სიგნáƒáƒšáƒ˜:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -937,7 +968,8 @@ msgstr "ძებნáƒ:" msgid "Matches:" msgstr "დáƒáƒ›áƒ—ხვევები:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -980,7 +1012,7 @@ msgid "Resource" msgstr "რესურსი" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "გზáƒ" @@ -1256,7 +1288,8 @@ msgid "Delete Bus Effect" msgstr "გáƒáƒ“áƒáƒ›áƒ¢áƒáƒœáƒ˜ ეფექტის წáƒáƒ¨áƒšáƒ" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "áƒáƒ£áƒ“ირგáƒáƒ“áƒáƒ›áƒ¢áƒáƒœáƒ˜, გáƒáƒ“áƒáƒáƒ—რიეთ რáƒáƒ› შეცვáƒáƒšáƒáƒ— რიგი." #: editor/editor_audio_buses.cpp @@ -1448,7 +1481,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1502,7 +1537,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1675,6 +1710,7 @@ msgstr "ფუნქციის შექმნáƒ" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1748,6 +1784,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1898,6 +1935,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1906,46 +1944,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1954,21 +1973,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1984,11 +1994,6 @@ msgid "Property Descriptions" msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2000,11 +2005,6 @@ msgid "Method Descriptions" msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2076,8 +2076,8 @@ msgstr "" msgid "Copy Selection" msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ ებáƒ" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2090,6 +2090,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2635,6 +2677,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2837,10 +2891,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2892,14 +2942,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2917,15 +2963,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2988,6 +3040,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2997,6 +3053,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -3025,11 +3086,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3128,6 +3184,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3154,14 +3214,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3828,9 +3880,10 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "ზუმის სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ–ე დáƒáƒ§áƒ”ნებáƒ" #: editor/import_dock.cpp msgid "Reimport" @@ -3954,7 +4007,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4094,6 +4147,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4269,6 +4329,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4445,7 +4506,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4620,6 +4680,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4826,6 +4888,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4838,10 +4904,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5115,20 +5177,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ დáƒáƒ‘áƒ:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5219,8 +5289,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5488,6 +5557,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6124,6 +6197,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6179,7 +6256,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6284,6 +6362,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6387,11 +6470,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6473,7 +6556,7 @@ msgstr "" msgid "Connections to method:" msgstr "კვáƒáƒœáƒ«áƒ—áƒáƒœ დáƒáƒ™áƒáƒ•შირებáƒ:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "რესურსი" @@ -6559,6 +6642,11 @@ msgstr "შექმნáƒ" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6617,10 +6705,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6947,6 +7031,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6980,6 +7068,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7212,6 +7304,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7261,6 +7357,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "ფუნქციები:" @@ -7583,6 +7683,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7722,6 +7830,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ თრექის წáƒáƒ¨áƒšáƒ." @@ -7888,19 +8001,117 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "ცვლილებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "áƒáƒ£áƒ“ირგáƒáƒ“áƒáƒ›áƒ¢áƒáƒœáƒ˜áƒ¡ სáƒáƒ®áƒ”ლის ცვლილებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "წáƒáƒ¨áƒšáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "ცვლილებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის ცვლილებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "ყველáƒáƒ¡ ჩáƒáƒœáƒáƒªáƒ•ლებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "ცვლილებáƒ" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7913,6 +8124,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" @@ -8135,6 +8350,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8784,12 +9004,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9334,6 +9556,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9472,6 +9698,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9638,10 +9868,6 @@ msgstr "" msgid "Reset" msgstr "ზუმის სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ–ე დáƒáƒ§áƒ”ნებáƒ" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9697,6 +9923,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9737,10 +9967,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "წáƒáƒ¨áƒšáƒ" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "წáƒáƒ¨áƒšáƒ" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9759,11 +10003,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9839,6 +10081,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9856,10 +10106,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ" @@ -10096,43 +10342,64 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებულებების შემსწáƒáƒ ებელი" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "სáƒáƒ კე" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "C++ Source" +msgstr "რესურსი" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "რესურსი" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "რესურსი" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10140,14 +10407,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "კáƒáƒ•შირის გáƒáƒ¬áƒ§áƒ•ეტáƒ" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "შექმნáƒ" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10164,6 +10437,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10176,6 +10453,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10372,10 +10653,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10384,6 +10661,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10538,6 +10819,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10675,6 +10964,10 @@ msgid "Create a new variable." msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "შექმნáƒ" @@ -10704,6 +10997,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ ებáƒ" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10712,6 +11010,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "სáƒáƒ§áƒ•áƒáƒ ლები:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ ებáƒ" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ ებáƒ" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10752,10 +11070,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10781,6 +11109,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "კáƒáƒ•შირის გáƒáƒ¬áƒ§áƒ•ეტáƒ" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "კვáƒáƒœáƒ«áƒ—áƒáƒœ დáƒáƒ™áƒáƒ•შირებáƒ:" @@ -10814,6 +11147,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "áƒáƒ®áƒáƒšáƒ˜ %s შექმნáƒ" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10834,7 +11188,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10842,8 +11196,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "ფუნქციები:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10866,6 +11221,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "ფუნქციები:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10960,6 +11324,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10981,7 +11349,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11060,6 +11429,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11604,10 +11977,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11639,6 +12008,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:" + #~ msgid "Unknown font format." #~ msgstr "უცნáƒáƒ‘ი ფáƒáƒœáƒ¢áƒ˜áƒ¡ ფáƒáƒ მáƒáƒ¢áƒ˜." @@ -11683,9 +12064,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ თრექის ქვემáƒáƒ— გáƒáƒ“áƒáƒáƒ“გილებáƒ" -#~ msgid "Set Transitions to:" -#~ msgstr "დáƒáƒ§áƒ”ნდეს გáƒáƒ“áƒáƒ¡áƒ•ლები შემდეგზე:" - #~ msgid "Anim Track Rename" #~ msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ თრექის გáƒáƒ“áƒáƒ ქმევáƒ" diff --git a/editor/translations/ko.po b/editor/translations/ko.po index dec3ae7dd8..d2e68e1d71 100644 --- a/editor/translations/ko.po +++ b/editor/translations/ko.po @@ -13,11 +13,12 @@ # JY <yimjisoo@mailfence.com>, 2018. # Ch. <ccwpc@hanmail.net>, 2018. # moolow <copyhyeon@gmail.com>, 2019. +# Jiyoon Kim <kimjiy@dickinson.edu>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-04 14:23+0000\n" +"PO-Revision-Date: 2019-10-29 12:49+0000\n" "Last-Translator: ì†¡íƒœì„ <xotjq237@gmail.com>\n" "Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/" "godot/ko/>\n" @@ -26,48 +27,76 @@ 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.8-dev\n" +"X-Generator: Weblate 3.9.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" -"convert()하기 위한 ì¸ìˆ˜ íƒ€ìž…ì´ ì˜¬ë°”ë¥´ì§€ 않습니다, TYPE_* ìƒìˆ˜ë¥¼ 사용하세요." +"conver() ë©”ì„œë“œì˜ ì¸ìˆ˜ íƒ€ìž…ì´ ìž˜ 못ë˜ì—ˆìŠµë‹ˆë‹¤, TYPE_* ìƒìˆ˜ë¥¼ 사용하세요." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "ë””ì½”ë”©í• ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜, 올바르지 ì•Šì€ í˜•ì‹ìž…니다." +msgstr "ë””ì½”ë”©í• ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜ ìž˜ëª»ëœ í˜•ì‹ì´ì—ìš”." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "표현ì‹ì—서 ìž˜ëª»ëœ ìž…ë ¥ %i (ì „ë‹¬ë˜ì§€ 않ìŒ)" +msgstr "표현ì‹ì—서 ìž…ë ¥ %iì´(ê°€) 잘못ë˜ì—ˆì–´ìš” (ì „ë‹¬ë˜ì§€ 않ìŒ)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "ì¸ìŠ¤í„´ìŠ¤ê°€ 비어있기 ë•Œë¬¸ì— Self를 ì‚¬ìš©í• ìˆ˜ 없습니다 (ì „ë‹¬ë˜ì§€ 않ìŒ)" +msgstr "ì¸ìŠ¤í„´ìŠ¤ê°€ 비어있어서 Self를 ì‚¬ìš©í• ìˆ˜ 없어요 (ì „ë‹¬ë˜ì§€ 않ìŒ)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "ì—°ì‚°ìž %s, %s ê·¸ë¦¬ê³ %sì˜ ì—°ì‚° 대ìƒì´ 올바르지 않습니다." +msgstr "ì—°ì‚°ìž %s와(ê³¼) %s, %sì˜ ì—°ì‚° 대ìƒì´ 잘못ë˜ì—ˆì–´ìš”." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "ë² ì´ìФ 타입 %sì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì¸ë±ìФ 타입 %s" +msgstr "기본 ìœ í˜•ì´ %sì¸ %s ìœ í˜•ì˜ ì¸ë±ìŠ¤ê°€ 잘못ë˜ì—ˆì–´ìš”" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "ë² ì´ìФ 타입 %sì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì¸ë±ìФ ì´ë¦„ %s" +msgstr "기본 ìœ í˜•ì´ %sì¸ '%s' ì¸ë±ìŠ¤ì˜ ì´ë¦„ì´ ìž˜ëª»ë˜ì—ˆì–´ìš”" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "'%s'ì„(를) êµ¬ì„±í•˜ê¸°ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì¸ìˆ˜" +msgstr "ì´ ì¸ìˆ˜ë¡œëŠ” '%s'ì„(를) êµ¬ì„±í• ìˆ˜ 없어요" #: core/math/expression.cpp msgid "On call to '%s':" msgstr "'%s'ì„(를) 호출 시:" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "ìžìœ " @@ -90,80 +119,80 @@ msgstr "ê°’:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" -msgstr "ì—¬ê¸°ì— í‚¤ë¥¼ 삽입" +msgstr "ì—¬ê¸°ì— í‚¤ë¥¼ 삽입하기" #: editor/animation_bezier_editor.cpp msgid "Duplicate Selected Key(s)" -msgstr "ì„ íƒí•œ 키를 ë³µì œ" +msgstr "ì„ íƒí•œ 키를 ë³µì œí•˜ê¸°" #: editor/animation_bezier_editor.cpp msgid "Delete Selected Key(s)" -msgstr "ì„ íƒí•œ 키를 ì‚ì œ" +msgstr "ì„ íƒí•œ 키를 ì‚ì œí•˜ê¸°" #: editor/animation_bezier_editor.cpp msgid "Add Bezier Point" -msgstr "ë² ì§€ì–´ í¬ì¸íЏ 추가" +msgstr "ë² ì§€ì–´ ì 추가하기" #: editor/animation_bezier_editor.cpp msgid "Move Bezier Points" -msgstr "ë² ì§€ì–´ í¬ì¸íЏ ì´ë™" +msgstr "ë² ì§€ì–´ ì ì´ë™í•˜ê¸°" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ë³µì œ" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ë³µì œí•˜ê¸°" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ì‚ì œ" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" -msgstr "ì• ë‹ˆë©”ì´ì…˜ í‚¤í”„ë ˆìž„ 시간 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ í‚¤í”„ë ˆìž„ 시간 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Change Transition" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì „í™˜ 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì „í™˜ 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Change Transform" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 변형 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 변형 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Value" -msgstr "ì• ë‹ˆë©”ì´ì…˜ í‚¤í”„ë ˆìž„ ê°’ 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ í‚¤í”„ë ˆìž„ ê°’ 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Change Call" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 호출 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 호출 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Time" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 í‚¤í”„ë ˆìž„ 시간 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 í‚¤í”„ë ˆìž„ 시간 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Transition" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 ì „í™˜ 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 ì „í™˜ 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Transform" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 변형 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 변형 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Keyframe Value" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 í‚¤í”„ë ˆìž„ ê°’ 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 í‚¤í”„ë ˆìž„ ê°’ 변경하기" #: editor/animation_track_editor.cpp msgid "Anim Multi Change Call" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 호출 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 여러 호출 변경하기" #: editor/animation_track_editor.cpp msgid "Change Animation Length" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ê¸¸ì´ ë³€ê²½" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ê¸¸ì´ ë³€ê²½í•˜ê¸°" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation Loop" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 루프 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 루프 변경하기" #: editor/animation_track_editor.cpp msgid "Property Track" @@ -199,11 +228,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ê¸¸ì´ (ì´ˆ)" #: editor/animation_track_editor.cpp msgid "Add Track" -msgstr "트랙 추가" +msgstr "트랙 추가하기" #: editor/animation_track_editor.cpp msgid "Animation Looping" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 반복" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 반복하기" #: editor/animation_track_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -220,11 +249,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ í´ë¦½:" #: editor/animation_track_editor.cpp msgid "Change Track Path" -msgstr "트랙 경로 변경" +msgstr "트랙 경로 변경하기" #: editor/animation_track_editor.cpp msgid "Toggle this track on/off." -msgstr "ì´ íŠ¸ëž™ì„ í‚¤ê±°ë‚˜ ë•니다." +msgstr "ì´ íŠ¸ëž™ì„ ì¼œê±°ë‚˜ ë•니다." #: editor/animation_track_editor.cpp msgid "Update Mode (How this property is set)" @@ -240,7 +269,7 @@ msgstr "루프 ëž© 모드 (시작 루프와 ëì„ ë³´ê°„)" #: editor/animation_track_editor.cpp msgid "Remove this track." -msgstr "ì´ íŠ¸ëž™ì„ ì‚ì œí•©ë‹ˆë‹¤." +msgstr "ì´ íŠ¸ëž™ì„ ì‚ì œí• ê²Œìš”." #: editor/animation_track_editor.cpp msgid "Time (s): " @@ -264,7 +293,7 @@ msgstr "트리거" #: editor/animation_track_editor.cpp msgid "Capture" -msgstr "캡ì³" +msgstr "캡처" #: editor/animation_track_editor.cpp msgid "Nearest" @@ -281,7 +310,7 @@ msgstr "입방형" #: editor/animation_track_editor.cpp msgid "Clamp Loop Interp" -msgstr "루프 ë³´ê°„ ê³ ì •" +msgstr "루프 ë³´ê°„ ê³ ì •í•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Wrap Loop Interp" @@ -290,39 +319,39 @@ msgstr "루프 ë³´ê°„ ê°ì¶”기" #: editor/animation_track_editor.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key" -msgstr "키 삽입" +msgstr "키 삽입하기" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "키 ë³µì œ" +msgstr "키 ë³µì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "키 ì‚ì œ" +msgstr "키 ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì—…ë°ì´íЏ 모드 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì—…ë°ì´íЏ 모드 변경하기" #: editor/animation_track_editor.cpp msgid "Change Animation Interpolation Mode" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ë³´ê°„ 모드 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ë³´ê°„ 모드 변경하기" #: editor/animation_track_editor.cpp msgid "Change Animation Loop Mode" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 루프 모드 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 루프 모드 변경하기" #: editor/animation_track_editor.cpp msgid "Remove Anim Track" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 ì‚ì œ" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙 ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Create NEW track for %s and insert key?" -msgstr "%sì„(를) 위해 새 íŠ¸ëž™ì„ ë§Œë“¤ê³ í‚¤ë¥¼ ì‚½ìž…í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "%sì„(를) 위해 새 íŠ¸ëž™ì„ ë§Œë“¤ê³ í‚¤ë¥¼ ì‚½ìž…í• ê¹Œìš”?" #: editor/animation_track_editor.cpp msgid "Create %d NEW tracks and insert keys?" -msgstr "%dê°œì˜ ìƒˆ íŠ¸ëž™ì„ ìƒì„±í•˜ê³ 키를 ì‚½ìž…í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "%dê°œì˜ ìƒˆ íŠ¸ëž™ì„ ë§Œë“¤ê³ í‚¤ë¥¼ ì‚½ìž…í• ê¹Œìš”?" #: editor/animation_track_editor.cpp editor/create_dialog.cpp #: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp @@ -332,41 +361,43 @@ msgstr "%dê°œì˜ ìƒˆ íŠ¸ëž™ì„ ìƒì„±í•˜ê³ 키를 ì‚½ìž…í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "만들기" #: editor/animation_track_editor.cpp msgid "Anim Insert" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 삽입" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 삽입하기" #: editor/animation_track_editor.cpp msgid "AnimationPlayer can't animate itself, only other players." msgstr "" -"AnimationPlayer는 ìžì‹ ì„ ì• ë‹ˆë©”ì´ì…˜ í• ìˆ˜ 없습니다, 다른 것ì—ë§Œ ë©ë‹ˆë‹¤." +"AnimationPlayer는 ìžì‹ ì—게 ì• ë‹ˆë©”ì´ì…˜ì„ í• ìˆ˜ 없어요, 다른 AnimationPlayerë§Œ " +"ì• ë‹ˆë©”ì´ì…˜ì„ 줄 수 ìžˆì£ ." #: editor/animation_track_editor.cpp msgid "Anim Create & Insert" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ìƒì„±ê³¼ 삽입" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ìƒì„±í•˜ê¸° & 삽입하기" #: editor/animation_track_editor.cpp msgid "Anim Insert Track & Key" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙과 키 삽입" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 트랙과 키 삽입하기" #: editor/animation_track_editor.cpp msgid "Anim Insert Key" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 삽입" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 삽입하기" #: editor/animation_track_editor.cpp msgid "Change Animation Step" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ìŠ¤í… ë³€ê²½" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 단계 바꾸기하기" #: editor/animation_track_editor.cpp msgid "Rearrange Tracks" -msgstr "트랙 ìž¬ì •ë ¬" +msgstr "트랙 다시 ì •ë ¬í•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "변형 íŠ¸ëž™ì€ ì˜¤ì§ Spatial 기반 노드ì—ë§Œ ì ìš©ë©ë‹ˆë‹¤." +msgstr "변형 íŠ¸ëž™ì€ ì˜¤ì§ Spatial 기반 노드ì—ë§Œ ì ìš©ë¼ìš”." #: editor/animation_track_editor.cpp msgid "" @@ -375,76 +406,77 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" -"오디오 íŠ¸ëž™ì€ ì˜¤ì§ ë‹¤ìŒ íƒ€ìž…ì˜ ë…¸ë“œë§Œ 가리킬 수 있습니다:\n" +"오디오 íŠ¸ëž™ì€ ì˜¤ì§ ë‹¤ìŒ ìœ í˜•ì˜ ë…¸ë“œë§Œ 가리켜요:\n" "-AudioStreamPlayer\n" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." -msgstr "ì• ë‹ˆë©”ì´ì…˜ íŠ¸ëž™ì€ ì˜¤ì§ AnimationPlayer 노드만 가리킬 수 있습니다." +msgstr "ì• ë‹ˆë©”ì´ì…˜ íŠ¸ëž™ì€ ì˜¤ì§ AnimationPlayer 노드만 가리킬 수 있어요." #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." msgstr "" -"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ëŠ” ìžì‹ ì„ ì• ë‹ˆë©”ì´ì…˜ í• ìˆ˜ 없습니다, 다른 것ì—ë§Œ ë©ë‹ˆë‹¤." +"AnimationPlayer는 ìžì‹ ì—게 ì• ë‹ˆë©”ì´ì…˜ì„ í• ìˆ˜ 없어요, 다른 AnimationPlayerë§Œ " +"ì• ë‹ˆë©”ì´ì…˜ì„ 줄 수 ìžˆì£ ." #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" -msgstr "루트 ì—†ì´ ìƒˆ íŠ¸ëž™ì„ ì¶”ê°€í• ìˆ˜ ì—†ìŒ" +msgstr "루트 ì—†ì´ ìƒˆ íŠ¸ëž™ì„ ì¶”ê°€í• ìˆ˜ 없어요" #: editor/animation_track_editor.cpp msgid "Add Bezier Track" -msgstr "ë² ì§€ì–´ 트랙 추가" +msgstr "ë² ì§€ì–´ 트랙 추가하기" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a key." -msgstr "트랙 경로가 올바르지 않습니다, 키를 ì¶”ê°€í• ìˆ˜ 없습니다." +msgstr "트랙 경로가 잘못ëì–´ìš”, 키를 ì¶”ê°€í• ìˆ˜ 없어요." #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "íŠ¸ëž™ì´ Spatial íƒ€ìž…ì´ ì•„ë‹™ë‹ˆë‹¤, 키를 삽입하실 수 없습니다" +msgstr "íŠ¸ëž™ì´ Spatial ìœ í˜•ì´ ì•„ë‹ˆì—ìš”, 키를 ì‚½ìž…í• ìˆ˜ 없어요" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" -msgstr "변형 트랙 키 추가" +msgstr "변형 트랙 키 추가하기" #: editor/animation_track_editor.cpp msgid "Add Track Key" -msgstr "트랙 키 추가" +msgstr "트랙 키 추가하기" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "트랙 경로가 올바르지 않습니다, 메서드 키를 ì¶”ê°€í• ìˆ˜ 없습니다." +msgstr "트랙 경로가 잘못ëì–´ìš”, 메서드 키를 ì¶”ê°€í• ìˆ˜ 없어요." #: editor/animation_track_editor.cpp msgid "Add Method Track Key" -msgstr "메서드 트랙 키 추가" +msgstr "메서드 트랙 키 추가하기" #: editor/animation_track_editor.cpp msgid "Method not found in object: " -msgstr "ê°ì²´ì— 메서드가 없습니다: " +msgstr "ê°ì²´ì— 메서드가 없어요: " #: editor/animation_track_editor.cpp msgid "Anim Move Keys" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ì´ë™" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 ì´ë™í•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Clipboard is empty" -msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다" +msgstr "í´ë¦½ë³´ë“œê°€ 비었어요" #: editor/animation_track_editor.cpp msgid "Paste Tracks" -msgstr "트랙 붙여넣기" +msgstr "트랙 붙여 넣기" #: editor/animation_track_editor.cpp msgid "Anim Scale Keys" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 í¬ê¸° ì¡°ì ˆ" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 í¬ê¸° ì¡°ì ˆí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "" "This option does not work for Bezier editing, as it's only a single track." -msgstr "ì´ ì˜µì…˜ì€ ë² ì§€ì–´ 편집ì—서 ë‹¨ì¼ íŠ¸ëž™ì´ê¸° 때문ì—, ìž‘ë™í•˜ì§€ 않습니다." +msgstr "ì´ ì„¤ì •ì€ ë‹¨ì¼ íŠ¸ëž™ì—ë§Œ 해당ë˜ì–´ì„œ, ë² ì§€ì–´ íŽ¸ì§‘ì— ìž‘ë™í•˜ì§€ 않아요." #: editor/animation_track_editor.cpp msgid "" @@ -458,34 +490,29 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" -"ì´ ì• ë‹ˆë©”ì´ì…˜ì€ ê°€ì ¸ì˜¨ ì”¬ì— ì†í•´ìžˆìŠµë‹ˆë‹¤, ë”°ë¼ì„œ ê°€ì ¸ì˜¨ 트랙ì—는 변경사í•ì´ " -"ì €ìž¥ë˜ì§€ 않습니다.\n" +"ì´ ì• ë‹ˆë©”ì´ì…˜ì€ ê°€ì ¸ì˜¨ ì”¬ì— ì¢…ì†ë˜ì–´ìžˆì–´ìš”, ê°€ì ¸ì˜¨ íŠ¸ëž™ì˜ ë³€ê²½ 사í•ì€ ì €ìž¥ë˜" +"ì§€ 않아요.\n" "\n" -"커스텀 íŠ¸ëžŸì„ ì¶”ê°€í•˜ê¸° 위해서는, ì”¬ì˜ ê°€ì ¸ì˜¤ê¸° ì„¤ì •ìœ¼ë¡œ 가서\n" -"\"Animation > Storage\"를 \"Files\"로 ì„¤ì •í•˜ê³ \"Animation > Keep Custom " -"Tracks\"ì„ ì¼ ë‹¤ìŒ ë‹¤ì‹œ ê°€ì ¸ì˜¤ì„¸ìš”.\n" -"ë˜ëŠ” ì• ë‹ˆë©”ì´ì…˜ì„ 개별 파ì¼ë¡œ ê°€ì ¸ì˜¤ëŠ” ê°€ì ¸ì˜¤ê¸° í”„ë¦¬ì…‹ì„ ì‚¬ìš©í•˜ì„¸ìš”." +"ì €ìž¥ ê¸°ëŠ¥ì„ ì¼œë ¤ë©´ 맞춤 íŠ¸ëž™ì„ ì¶”ê°€í•˜ê³ , ì”¬ì˜ ê°€ì ¸ì˜¤ê¸° ì„¤ì •ìœ¼ë¡œ 가서\n" +"\"Animation > Storage\" ì„¤ì •ì„ \"Files\"로, \"Animation > Keep Custom Tracks" +"\" ì„¤ì •ì„ ì¼ ë’¤, 다시 ê°€ì ¸ì˜¤ì„¸ìš”.\n" +"ëŒ€ì‹ ê°€ì ¸ì˜¤ê¸° 프리셋으로 ì• ë‹ˆë©”ì´ì…˜ì„ 별ë„ì˜ íŒŒì¼ë¡œ ê°€ì ¸ì˜¬ ìˆ˜ë„ ìžˆì–´ìš”." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" -msgstr "ê²½ê³ : ê°€ì ¸ì˜¨ ì• ë‹ˆë©”ì´ì…˜ì„ íŽ¸ì§‘í•˜ê³ ìžˆìŒ" - -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "ì „ì²´ì„ íƒ" +msgstr "ê²½ê³ : ê°€ì ¸ì˜¨ ì• ë‹ˆë©”ì´ì…˜ì„ 편집 중" #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "ëª¨ë“ ì„ íƒ í•´ì œ" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ë§Œë“¤ê³ íŽ¸ì§‘í•˜ë ¤ë©´ AnimationPlayer노드를 ì„ íƒí•˜ì„¸ìš”." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." -msgstr "트리ì—서 ì„ íƒí•œ ë…¸ë“œì˜ íŠ¸ëž™ë§Œ 표시합니다." +msgstr "트리ì—서 ì„ íƒí•œ 노드만 íŠ¸ëž™ì— í‘œì‹œë˜ìš”." #: editor/animation_track_editor.cpp msgid "Group tracks by node or display them as plain list." -msgstr "노드 별로 ê·¸ë£¹ì„ íŠ¸ëž™ 하거나 ì¼ë°˜ 목ë¡ìœ¼ë¡œ 표시합니다." +msgstr "노드 별로 íŠ¸ëž™ì„ ë¬¶ê±°ë‚˜ 묶지 ì•Šê³ ë‚˜ì—´í•´ì„œ ë³¼ 수 있어요." #: editor/animation_track_editor.cpp msgid "Snap:" @@ -510,7 +537,7 @@ msgstr "초당 í”„ë ˆìž„" #: editor/project_manager.cpp editor/project_settings_editor.cpp #: editor/property_editor.cpp modules/visual_script/visual_script_editor.cpp msgid "Edit" -msgstr "편집" +msgstr "편집하기" #: editor/animation_track_editor.cpp msgid "Animation properties." @@ -518,39 +545,39 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ì†ì„±." #: editor/animation_track_editor.cpp msgid "Copy Tracks" -msgstr "트랙 복사" +msgstr "트랙 복사하기" #: editor/animation_track_editor.cpp msgid "Scale Selection" -msgstr "ì„ íƒ í¬ê¸° ì¡°ì ˆ" +msgstr "ì„ íƒ í•목 ê¸¸ì´ ì¡°ì ˆí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Scale From Cursor" -msgstr "커서 위치ì—서 í¬ê¸° ì¡°ì ˆ" +msgstr "커서 위치ì—서 ê¸¸ì´ ì¡°ì ˆí•˜ê¸°" #: editor/animation_track_editor.cpp modules/gridmap/grid_map_editor_plugin.cpp msgid "Duplicate Selection" -msgstr "ì„ íƒ ë³µì œ" +msgstr "ì„ íƒ í•목 ë³µì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Duplicate Transposed" -msgstr "ì„ íƒëœ íŠ¸ëž™ì— ë³µì œ" +msgstr "ì„ íƒëœ íŠ¸ëž™ì— ë³µì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Delete Selection" -msgstr "ì„ íƒ ì‚ì œ" +msgstr "ì„ íƒ í•목 ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Go to Next Step" -msgstr "ë‹¤ìŒ ìŠ¤í…으로 ì´ë™" +msgstr "ë‹¤ìŒ ë‹¨ê³„ë¡œ ì´ë™í•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Go to Previous Step" -msgstr "ì´ì „ 스í…으로 ì´ë™" +msgstr "ì´ì „ 단계로 ì´ë™í•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Optimize Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 최ì í™”" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 최ì 화하기" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation" @@ -558,11 +585,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ì—†ì• ê¸°" #: editor/animation_track_editor.cpp msgid "Pick the node that will be animated:" -msgstr "ì• ë‹ˆë©”ì´ì…˜ í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”:" +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ 줄 노드를 ì„ íƒí•˜ì„¸ìš”:" #: editor/animation_track_editor.cpp msgid "Use Bezier Curves" -msgstr "ë² ì§€ì–´ 커브 사용" +msgstr "ë² ì§€ì–´ 커브 사용하기" #: editor/animation_track_editor.cpp msgid "Anim. Optimizer" @@ -582,15 +609,15 @@ msgstr "최ì í™” 가능한 최대 ê°ë„:" #: editor/animation_track_editor.cpp msgid "Optimize" -msgstr "최ì í™”" +msgstr "최ì 화하기" #: editor/animation_track_editor.cpp msgid "Remove invalid keys" -msgstr "올바르지 ì•Šì€ í‚¤ ì‚ì œ" +msgstr "ìž˜ëª»ëœ í‚¤ ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Remove unresolved and empty tracks" -msgstr "미결 트랙과 빈 트랙 ì‚ì œ" +msgstr "í•´ê²°ë˜ì§€ ì•Šê³ ë¹ˆ 트랙 ì‚ì œí•˜ê¸°" #: editor/animation_track_editor.cpp msgid "Clean-up all animations" @@ -598,7 +625,7 @@ msgstr "ëª¨ë“ ì• ë‹ˆë©”ì´ì…˜ ì—†ì• ê¸°" #: editor/animation_track_editor.cpp msgid "Clean-Up Animation(s) (NO UNDO!)" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì—†ì• ê¸° (ë˜ëŒë¦¬ê¸° 불가!)" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì—†ì• ê¸° (ë˜ëŒë¦´ 수 없어요!)" #: editor/animation_track_editor.cpp msgid "Clean-Up" @@ -606,11 +633,12 @@ msgstr "ì—†ì• ê¸°" #: editor/animation_track_editor.cpp msgid "Scale Ratio:" -msgstr "ìŠ¤ì¼€ì¼ ë¹„ìœ¨:" +msgstr "ê¸¸ì´ ë¹„ìœ¨:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "ë³µì‚¬í• íŠ¸ëž™ ì„ íƒ:" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "ë³µì‚¬í• íŠ¸ëž™ì„ ì„ íƒí•˜ì„¸ìš”:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -621,51 +649,54 @@ msgstr "ë³µì‚¬í• íŠ¸ëž™ ì„ íƒ:" msgid "Copy" msgstr "복사하기" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "ëª¨ë‘ ì„ íƒí•˜ì§€ 않기" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" -msgstr "오디오 트랙 í´ë¦½ 추가" +msgstr "오디오 트랙 í´ë¦½ 추가하기" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip Start Offset" -msgstr "오디오 트랙 í´ë¦½ 시작 오프셋 변경" +msgstr "오디오 트랙 í´ë¦½ 시작 오프셋 변경하기" #: editor/animation_track_editor_plugins.cpp msgid "Change Audio Track Clip End Offset" -msgstr "오디오 트랙 í´ë¦½ 종료 오프셋 변경" +msgstr "오디오 트랙 í´ë¦½ 종료 오프셋 변경하기" #: editor/array_property_edit.cpp msgid "Resize Array" -msgstr "ë°°ì—´ í¬ê¸° 변경" +msgstr "ë°°ì—´ í¬ê¸° 변경하기" #: editor/array_property_edit.cpp msgid "Change Array Value Type" -msgstr "ë°°ì—´ ê°’ 타입 변경" +msgstr "ë°°ì—´ ê°’ ìœ í˜• 변경하기" #: editor/array_property_edit.cpp msgid "Change Array Value" -msgstr "ë°°ì—´ ê°’ 변경" +msgstr "ë°°ì—´ ê°’ 변경하기" #: editor/code_editor.cpp msgid "Go to Line" -msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™" +msgstr "행으로 ì´ë™í•˜ê¸°" #: editor/code_editor.cpp msgid "Line Number:" -msgstr "ë¼ì¸ 번호:" +msgstr "í–‰ 번호:" #: editor/code_editor.cpp msgid "Replaced %d occurrence(s)." -msgstr "%d ê°œì˜ ë°œìƒì„ êµì²´í–ˆìŠµë‹ˆë‹¤." +msgstr "%@ê°œì˜ ë‹¨ì–´ë¥¼ êµì²´í–ˆì–´ìš”." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "%d 개가 ì¼ì¹˜í•©ë‹ˆë‹¤." +msgstr "%d개가 ì¼ì¹˜í•´ìš”." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "%d 개가 ì¼ì¹˜í•©ë‹ˆë‹¤." +msgstr "%d개가 ì¼ì¹˜í•´ìš”." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -677,15 +708,15 @@ msgstr "ì „ì²´ 단어" #: editor/code_editor.cpp editor/rename_dialog.cpp msgid "Replace" -msgstr "바꾸기" +msgstr "êµì²´í•˜ê¸°" #: editor/code_editor.cpp msgid "Replace All" -msgstr "ì „ì²´ 바꾸기" +msgstr "ì „ë¶€ êµì²´í•˜ê¸°" #: editor/code_editor.cpp msgid "Selection Only" -msgstr "ì„ íƒ ì˜ì—ë§Œ" +msgstr "ì„ íƒ í•목만" #: editor/code_editor.cpp editor/plugins/script_text_editor.cpp #: editor/plugins/text_editor.cpp @@ -696,13 +727,13 @@ msgstr "표준" #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom In" -msgstr "확대" +msgstr "확대하기" #: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp #: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp msgid "Zoom Out" -msgstr "축소" +msgstr "축소하기" #: editor/code_editor.cpp msgid "Reset Zoom" @@ -714,41 +745,41 @@ msgstr "ê²½ê³ " #: editor/code_editor.cpp msgid "Line and column numbers." -msgstr "ë¼ì¸ ë° ì»¬ëŸ¼ 번호." +msgstr "í–‰ ë° ì—´ 번호." #: editor/connections_dialog.cpp msgid "Method in target node must be specified." -msgstr "ëŒ€ìƒ ë…¸ë“œì˜ ë©”ì„œë“œê°€ 명시ë˜ì–´ì•¼ 합니다." +msgstr "ëŒ€ìƒ ë…¸ë“œì˜ ë©”ì„œë“œë¥¼ ì§€ì •í•´ì•¼ í•´ìš”." #: editor/connections_dialog.cpp msgid "" "Target method not found. Specify a valid method or attach a script to the " "target node." msgstr "" -"ëŒ€ìƒ ë©”ì„œë“œë¥¼ ì°¾ì„ ìˆ˜ 없습니다! 올바른 메서드를 ì§€ì •í•˜ê±°ë‚˜, ëŒ€ìƒ ë…¸ë“œì— ìŠ¤í¬" -"립트를 ë¶™ì´ì„¸ìš”." +"ëŒ€ìƒ ë©”ì„œë“œë¥¼ ì°¾ì„ ìˆ˜ 없어요! 올바른 메서드를 ì§€ì •í•˜ê±°ë‚˜ ëŒ€ìƒ ë…¸ë“œì— ìŠ¤í¬ë¦½íЏ" +"를 붙여보세요." #: editor/connections_dialog.cpp msgid "Connect to Node:" -msgstr "ë‹¤ìŒ ë…¸ë“œì— ì—°ê²°:" +msgstr "ì´ ë…¸ë“œì— ì—°ê²°í• ê²Œìš”:" #: editor/connections_dialog.cpp msgid "Connect to Script:" -msgstr "ë‹¤ìŒ ìŠ¤í¬ë¦½íŠ¸ì— ì—°ê²°:" +msgstr "ì´ ìŠ¤í¬ë¦½íŠ¸ì— ì—°ê²°í• ê²Œìš”:" #: editor/connections_dialog.cpp msgid "From Signal:" -msgstr "ë‹¤ìŒ ì‹œê·¸ë„로부터:" +msgstr "ì´ ì‹œê·¸ë„ì—서:" #: editor/connections_dialog.cpp msgid "Scene does not contain any script." -msgstr "ì”¬ì´ ìŠ¤í¬ë¦½íŠ¸ë¥¼ ê°–ê³ ìžˆì§€ 않습니다." +msgstr "ì”¬ì´ ì–´ë–¤ 스í¬ë¦½íŠ¸ë„ ê°–ê³ ìžˆì§€ 않네요." #: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp #: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp msgid "Add" -msgstr "추가" +msgstr "추가하기" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/editor_feature_profile.cpp editor/groups_editor.cpp @@ -759,11 +790,11 @@ msgstr "추가" #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp #: editor/project_settings_editor.cpp msgid "Remove" -msgstr "ì‚ì œ" +msgstr "ì‚ì œí•˜ê¸°" #: editor/connections_dialog.cpp msgid "Add Extra Call Argument:" -msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìˆ˜ 추가:" +msgstr "별ë„ì˜ í˜¸ì¶œ ì¸ìˆ˜ 추가하기:" #: editor/connections_dialog.cpp msgid "Extra Call Arguments:" @@ -780,7 +811,8 @@ 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" @@ -788,11 +820,11 @@ msgstr "1회" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "첫 ë°©ì¶œ ì´í›„ 시그ë„ì„ ì—°ê²° í•´ì œí•©ë‹ˆë‹¤." +msgstr "ì²˜ìŒ ë°©ì¶œí•˜ë©´ ì‹œê·¸ë„ ì—°ê²°ì„ í’€ì–´ë²„ë ¤ìš”." #: editor/connections_dialog.cpp msgid "Cannot connect signal" -msgstr "시그ë„ì„ ì—°ê²°í• ìˆ˜ ì—†ìŒ" +msgstr "시그ë„ì„ ì—°ê²°í• ìˆ˜ 없어요" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -801,7 +833,8 @@ msgstr "시그ë„ì„ ì—°ê²°í• ìˆ˜ ì—†ìŒ" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -818,15 +851,15 @@ msgstr "시그ë„:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" -msgstr "'%s'ì„(를) '%s'ì— ì—°ê²°" +msgstr "'%s'ì„(를) '%s'ì— ì—°ê²°í•˜ê¸°" #: editor/connections_dialog.cpp msgid "Disconnect '%s' from '%s'" -msgstr "'%s'와(ê³¼) '%s'ì˜ ì—°ê²° í•´ì œ" +msgstr "'%s'와(ê³¼) '%s'ì˜ ì—°ê²° 풀기" #: editor/connections_dialog.cpp msgid "Disconnect all from signal: '%s'" -msgstr "ì „ë¶€ 시그ë„ì—서 ì—°ê²° í•´ì œ: '%s'" +msgstr "ì „ë¶€ 시그ë„ì—서 ì—°ê²° 풀기: '%s'" #: editor/connections_dialog.cpp msgid "Connect..." @@ -835,19 +868,19 @@ msgstr "연결하기..." #: editor/connections_dialog.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Disconnect" -msgstr "ì—°ê²° í•´ì œ" +msgstr "ì—°ê²° 풀기" #: editor/connections_dialog.cpp msgid "Connect a Signal to a Method" -msgstr "시그ë„ì„ ë©”ì„œë“œì— ì—°ê²°" +msgstr "시그ë„ì„ ë©”ì„œë“œì— ì—°ê²°í•˜ê¸°" #: editor/connections_dialog.cpp msgid "Edit Connection:" -msgstr "ì—°ê²° 편집:" +msgstr "ì—°ê²° 편집하기:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" -msgstr "\"%s\" 시그ë„ì˜ ëª¨ë“ ì—°ê²°ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "\"%s\" 시그ë„ì˜ ëª¨ë“ ì—°ê²°ì„ ì‚ì œí• ê¹Œìš”?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" @@ -855,27 +888,27 @@ msgstr "시그ë„" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" -msgstr "ì´ ì‹œê·¸ë„ì—서 ëª¨ë“ ì—°ê²°ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ì´ ì‹œê·¸ë„ì˜ ëª¨ë“ ì—°ê²°ì„ ì‚ì œí• ê¹Œìš”?" #: editor/connections_dialog.cpp msgid "Disconnect All" -msgstr "ëª¨ë“ ì—°ê²° í•´ì œ" +msgstr "ëª¨ë‘ ì—°ê²° 풀기" #: editor/connections_dialog.cpp msgid "Edit..." -msgstr "편집..." +msgstr "편집하기..." #: editor/connections_dialog.cpp msgid "Go To Method" -msgstr "메서드로 ì´ë™" +msgstr "메서드로 ì´ë™í•˜ê¸°" #: editor/create_dialog.cpp msgid "Change %s Type" -msgstr "%s(으)로 타입 변경" +msgstr "%s(으)로 ìœ í˜• 바꾸기" #: editor/create_dialog.cpp editor/project_settings_editor.cpp msgid "Change" -msgstr "변경" +msgstr "변경하기" #: editor/create_dialog.cpp msgid "Create New %s" @@ -888,21 +921,22 @@ msgstr "ì¦ê²¨ì°¾ê¸°:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp msgid "Recent:" -msgstr "최근:" +msgstr "최근 기ë¡:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Search:" -msgstr "검색:" +msgstr "검색하기:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp msgid "Matches:" -msgstr "ì¼ì¹˜:" +msgstr "ì¼ì¹˜í•´ìš”:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -911,7 +945,7 @@ msgstr "설명:" #: editor/dependency_editor.cpp msgid "Search Replacement For:" -msgstr "ëŒ€ì²´í• ëŒ€ìƒ ì°¾ê¸°:" +msgstr "êµì²´í• ëŒ€ìƒ ì°¾ê¸°:" #: editor/dependency_editor.cpp msgid "Dependencies For:" @@ -922,16 +956,16 @@ msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" -"씬 '%s'ì´(ê°€) 현재 편집 중입니다.\n" -"다시 불러올 때 변경사í•ì´ ì ìš©ë©ë‹ˆë‹¤." +"씬 '%s'ì„(를) íŽ¸ì§‘í•˜ê³ ìžˆì–´ìš”.\n" +"다시 불러와야 변경 사í•ì´ ì ìš©ë˜ìš”." #: editor/dependency_editor.cpp msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"리소스 '%s'ì´(ê°€) 사용 중입니다.\n" -"다시 불러올 때 변경사í•ì´ ì ìš©ë©ë‹ˆë‹¤." +"리소스 '%s'ì„(를) ì‚¬ìš©í•˜ê³ ìžˆì–´ìš”.\n" +"다시 불러와야 변경 사í•ì´ ì ìš©ë˜ìš”." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -943,17 +977,17 @@ msgid "Resource" msgstr "리소스" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "경로" #: editor/dependency_editor.cpp msgid "Dependencies:" -msgstr "종ì†ëœ í•목:" +msgstr "ì¢…ì† ê´€ê³„:" #: editor/dependency_editor.cpp msgid "Fix Broken" -msgstr "깨진 종ì†ì„± ìˆ˜ì •" +msgstr "ë§ê°€ì§„ 부분 ê³ ì¹˜ê¸°" #: editor/dependency_editor.cpp msgid "Dependency Editor" @@ -961,7 +995,7 @@ msgstr "ì¢…ì† ê´€ê³„ 편집기" #: editor/dependency_editor.cpp msgid "Search Replacement Resource:" -msgstr "대체 리소스 검색:" +msgstr "대체 리소스 검색하기:" #: editor/dependency_editor.cpp editor/editor_file_dialog.cpp #: editor/editor_help_search.cpp editor/editor_node.cpp @@ -979,7 +1013,7 @@ msgstr "ì†Œìœ ìž:" #: editor/dependency_editor.cpp msgid "Remove selected files from the project? (Can't be restored)" -msgstr "프로ì 트ì—서 ì„ íƒí•œ 파ì¼ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" +msgstr "프로ì 트ì—서 ì„ íƒí•œ 파ì¼ì„ ì‚ì œí• ê¹Œìš”? (ë˜ëŒë¦´ 수 없어요)" #: editor/dependency_editor.cpp msgid "" @@ -987,12 +1021,12 @@ msgid "" "work.\n" "Remove them anyway? (no undo)" msgstr "" -"ì‚ì œí•˜ë ¤ê³ í•˜ëŠ” 파ì¼ë“¤ì€ 다른 ë¦¬ì†ŒìŠ¤ë“¤ì´ ì •ìƒë™ìž‘하기 위해 필요합니다.\n" -"ì •ë§ë¡œ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" +"ì‚ì œí•˜ë ¤ëŠ” 파ì¼ì€ ìž‘ì—…ì„ ìœ„í•´ 다른 리소스ì—서 필요한 파ì¼ì´ì—ìš”.\n" +"ë¬´ì‹œí•˜ê³ ì‚ì œí• ê±´ê°€ìš”? (ë˜ëŒë¦´ 수 없어요)" #: editor/dependency_editor.cpp msgid "Cannot remove:" -msgstr "ì‚ì œí• ìˆ˜ 없습니다:" +msgstr "ì‚ì œí• ìˆ˜ 없어요:" #: editor/dependency_editor.cpp msgid "Error loading:" @@ -1000,7 +1034,7 @@ msgstr "불러오기 중 오류:" #: editor/dependency_editor.cpp msgid "Load failed due to missing dependencies:" -msgstr "ì¢…ì† ê´€ê³„ë¥¼ ì°¾ì„ ìˆ˜ 없어 ì”¬ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다:" +msgstr "ì¢…ì† ê´€ê³„ê°€ 누ë½ë˜ì–´ì„œ 불러올 수 없어요:" #: editor/dependency_editor.cpp editor/editor_node.cpp msgid "Open Anyway" @@ -1008,19 +1042,19 @@ msgstr "ë¬´ì‹œí•˜ê³ ì—´ê¸°" #: editor/dependency_editor.cpp msgid "Which action should be taken?" -msgstr "ì–´ë–¤ ê²ƒì„ ìˆ˜í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ì–´ë–¤ ìž‘ì—…ì„ í• ê±´ê°€ìš”?" #: editor/dependency_editor.cpp msgid "Fix Dependencies" -msgstr "ì¢…ì† ê´€ê³„ ìˆ˜ì •" +msgstr "ì¢…ì† ê´€ê³„ ê³ ì¹˜ê¸°" #: editor/dependency_editor.cpp msgid "Errors loading!" -msgstr "불러오기 중 오류 ë°œìƒ!" +msgstr "불러오기 중 오류!" #: editor/dependency_editor.cpp msgid "Permanently delete %d item(s)? (No undo!)" -msgstr "%dê°œ í•ëª©ì„ ì˜êµ¬ì 으로 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가)" +msgstr "%dê°œì˜ í•ëª©ì„ ì˜êµ¬ì 으로 ì‚ì œí• ê¹Œìš”? (ë˜ëŒë¦´ 수 없어요!)" #: editor/dependency_editor.cpp msgid "Show Dependencies" @@ -1036,27 +1070,27 @@ msgstr "미사용 리소스 íƒìƒ‰ê¸°" #: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp msgid "Delete" -msgstr "ì‚ì œ" +msgstr "ì‚ì œí•˜ê¸°" #: editor/dependency_editor.cpp msgid "Owns" -msgstr "ì†Œìœ " +msgstr "ì†Œìœ ìž" #: editor/dependency_editor.cpp msgid "Resources Without Explicit Ownership:" -msgstr "명확하게 사용ë˜ì§€ ì•Šì€ ë¦¬ì†ŒìŠ¤:" +msgstr "명확한 ì†Œìœ ìžê°€ 없는 리소스:" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Key" -msgstr "Dictionary 키 변경" +msgstr "ë””ë ‰í† ë¦¬ 키 변경하기" #: editor/dictionary_property_edit.cpp msgid "Change Dictionary Value" -msgstr "Dictionary ê°’ 변경" +msgstr "ë””ë ‰í† ë¦¬ ê°’ 변경하기" #: editor/editor_about.cpp msgid "Thanks from the Godot community!" -msgstr "Godot ì»¤ë®¤ë‹ˆí‹°ì— ê°ì‚¬ë“œë¦½ë‹ˆë‹¤!" +msgstr "Godot 커뮤니티ì—서 ê³ ë§ˆì›Œìš”!" #: editor/editor_about.cpp msgid "Godot Engine contributors" @@ -1076,7 +1110,7 @@ msgstr "프로ì 트 ë§¤ë‹ˆì € " #: editor/editor_about.cpp msgid "Developers" -msgstr "개발ìžë“¤" +msgstr "개발ìž" #: editor/editor_about.cpp msgid "Authors" @@ -1115,21 +1149,19 @@ msgid "License" msgstr "ë¼ì´ì„ 스" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "서드파티 ë¼ì´ì„ 스" +msgstr "ì œ 3ìž ë¼ì´ì„ 스" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engineì€ MIT ë¼ì´ì„ 스와 호환ë˜ëŠ” ìˆ˜ë§Žì€ ì„œë“œíŒŒí‹° ìžìœ 오픈소스 ë¼ì´ë¸ŒëŸ¬" -"ë¦¬ì— ì˜ì¡´í•©ë‹ˆë‹¤. 다ìŒì€ 그러한 서드파티 ì»´í¬ë„ŒíŠ¸ì˜ ì™„ì „í•œ 목ë¡ê³¼ ì´ì— 대ì‘하" -"는 ì €ìž‘ê¶Œ ì„ ì–¸ë¬¸ ë° ë¼ì´ì„¼ìŠ¤ìž…ë‹ˆë‹¤." +"Godot Engineì€ MIT ë¼ì´ì„ 스와 호환ë˜ëŠ” ìˆ˜ë§Žì€ ì œ 3ìž ìžìœ 오픈소스 ë¼ì´ë¸ŒëŸ¬ë¦¬" +"ì— ì˜ì¡´í•©ë‹ˆë‹¤. 다ìŒì€ 그러한 ì œ 3ìž êµ¬ì„± ìš”ì†Œì˜ ì „ì²´ 목ë¡ê³¼ ì´ì— 대ì‘하는 ì €" +"작권 ì„ ì–¸ë¬¸ ë° ë¼ì´ì„ 스입니다." #: editor/editor_about.cpp msgid "All Components" @@ -1144,17 +1176,16 @@ 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" -msgstr "ì• ì…‹ ì••ì¶•í•´ì œ" +msgstr "ì• ì…‹ ì••ì¶• 풀기" #: editor/editor_asset_installer.cpp editor/project_manager.cpp msgid "Package installed successfully!" -msgstr "패키지가 성공ì 으로 설치ë˜ì—ˆìŠµë‹ˆë‹¤!" +msgstr "패키지를 성공ì 으로 설치했어요!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -1163,11 +1194,11 @@ msgstr "성공!" #: editor/editor_asset_installer.cpp editor/editor_node.cpp msgid "Install" -msgstr "설치" +msgstr "설치하기" #: editor/editor_asset_installer.cpp msgid "Package Installer" -msgstr "패키지 ì¸ìŠ¤í†¨ëŸ¬" +msgstr "패키지 설치 마법사" #: editor/editor_audio_buses.cpp msgid "Speakers" @@ -1175,11 +1206,11 @@ msgstr "스피커" #: editor/editor_audio_buses.cpp msgid "Add Effect" -msgstr "ì´íŽ™íŠ¸ 추가" +msgstr "효과 추가하기" #: editor/editor_audio_buses.cpp msgid "Rename Audio Bus" -msgstr "오디오 버스 ì´ë¦„ 변경" +msgstr "오디오 버스 ì´ë¦„ 바꾸기" #: editor/editor_audio_buses.cpp msgid "Change Audio Bus Volume" @@ -1199,23 +1230,23 @@ msgstr "오디오 버스 ë°”ì´íŒ¨ìФ 효과 í† ê¸€" #: editor/editor_audio_buses.cpp msgid "Select Audio Bus Send" -msgstr "오디오 버스 ì „ì†¡ ì„ íƒ" +msgstr "오디오 버스 ì „ì†¡ ì„ íƒí•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus Effect" -msgstr "오디오 버스 ì´íŽ™íŠ¸ 추가" +msgstr "오디오 버스 효과 추가하기" #: editor/editor_audio_buses.cpp msgid "Move Bus Effect" -msgstr "버스 ì´íŽ™íŠ¸ ì´ë™" +msgstr "버스 효과 ì´ë™í•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Delete Bus Effect" -msgstr "버스 ì´íŽ™íŠ¸ ì‚ì œ" +msgstr "버스 효과 ì‚ì œí•˜ê¸°" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "오디오 버스, 드래그 앤 드ë¡ìœ¼ë¡œ 재 배치하세요." +msgid "Drag & drop to rearrange." +msgstr "드래그 & 드ë¡ìœ¼ë¡œ 다시 ì •ë ¬í•´ìš”." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1223,7 +1254,7 @@ msgstr "솔로" #: editor/editor_audio_buses.cpp msgid "Mute" -msgstr "뮤트" +msgstr "ìŒì†Œê±°" #: editor/editor_audio_buses.cpp msgid "Bypass" @@ -1231,56 +1262,56 @@ 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 msgid "Duplicate" -msgstr "ë³µì œ" +msgstr "ë³µì œí•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Reset Volume" -msgstr "볼륨 리셋" +msgstr "볼륨 리셋하기" #: editor/editor_audio_buses.cpp msgid "Delete Effect" -msgstr "ì´íŽ™íŠ¸ ì‚ì œ" +msgstr "효과 ì‚ì œí•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Audio" -msgstr "오디오" +msgstr "오디오(Audio)" #: editor/editor_audio_buses.cpp msgid "Add Audio Bus" -msgstr "오디오 버스 추가" +msgstr "오디오 버스 추가하기" #: editor/editor_audio_buses.cpp msgid "Master bus can't be deleted!" -msgstr "주 버스는 ì‚ì œí• ìˆ˜ 없습니다!" +msgstr "마스터 버스는 ì‚ì œí• ìˆ˜ 없어요!" #: editor/editor_audio_buses.cpp msgid "Delete Audio Bus" -msgstr "오디오 버스 ì‚ì œ" +msgstr "오디오 버스 ì‚ì œí•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Duplicate Audio Bus" -msgstr "오디오 버스 ë³µì œ" +msgstr "오디오 버스 ë³µì œí•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Reset Bus Volume" -msgstr "버스 볼륨 리셋" +msgstr "버스 볼륨 리셋하기" #: editor/editor_audio_buses.cpp msgid "Move Audio Bus" -msgstr "오디오 버스 ì´ë™" +msgstr "오디오 버스 ì´ë™í•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Save Audio Bus Layout As..." -msgstr "오디오 버스 ë ˆì´ì•„ì›ƒì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." +msgstr "오디오 버스 ë ˆì´ì•„ì›ƒì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥í•˜ê¸°..." #: editor/editor_audio_buses.cpp msgid "Location for New Layout..." -msgstr "새 ë ˆì´ì•„ì›ƒì„ ì €ìž¥í• ìž¥ì†Œ..." +msgstr "새 ë ˆì´ì•„ì›ƒì„ ì €ìž¥í• ìœ„ì¹˜..." #: editor/editor_audio_buses.cpp msgid "Open Audio Bus Layout" @@ -1288,7 +1319,7 @@ msgstr "오디오 버스 ë ˆì´ì•„웃 열기" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "'%s' 파ì¼ì´ 없습니다." +msgstr "'%s' 파ì¼ì´ 없어요." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1296,15 +1327,15 @@ 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 "버스 추가" +msgstr "버스 추가하기" #: editor/editor_audio_buses.cpp msgid "Add a new Audio Bus to this layout." -msgstr "ì´ ë ˆì´ì•„ì›ƒì— ìƒˆ 오디오 버스를 추가합니다." +msgstr "ì´ ë ˆì´ì•„ì›ƒì— ìƒˆ 오디오 버스를 ì¶”ê°€í• ê²Œìš”." #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp @@ -1314,15 +1345,15 @@ msgstr "불러오기" #: editor/editor_audio_buses.cpp msgid "Load an existing Bus Layout." -msgstr "기존 버스 ë ˆì´ì•„ì›ƒì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤." +msgstr "기존 버스 ë ˆì´ì•„ì›ƒì„ ë¶ˆëŸ¬ì˜¬ê²Œìš”." #: editor/editor_audio_buses.cpp msgid "Save As" -msgstr "다른 ì´ë¦„으로 ì €ìž¥" +msgstr "다른 ì´ë¦„으로 ì €ìž¥í•˜ê¸°" #: editor/editor_audio_buses.cpp msgid "Save this Bus Layout to a file." -msgstr "ì´ ë²„ìŠ¤ ë ˆì´ì•„ì›ƒì„ íŒŒì¼ë¡œ ì €ìž¥í•©ë‹ˆë‹¤..." +msgstr "ì´ ë²„ìŠ¤ ë ˆì´ì•„ì›ƒì„ íŒŒì¼ë¡œ ì €ìž¥í• ê²Œìš”..." #: editor/editor_audio_buses.cpp editor/import_dock.cpp msgid "Load Default" @@ -1330,15 +1361,15 @@ msgstr "기본값 불러오기" #: editor/editor_audio_buses.cpp msgid "Load the default Bus Layout." -msgstr "기본 버스 ë ˆì´ì•„ì›ƒì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤." +msgstr "기본 버스 ë ˆì´ì•„ì›ƒì„ ë¶ˆëŸ¬ì˜¬ê²Œìš”." #: editor/editor_audio_buses.cpp msgid "Create a new Bus Layout." -msgstr "새로운 버스 ë ˆì´ì•„ì›ƒì„ ë§Œë“니다." +msgstr "새로운 버스 ë ˆì´ì•„ì›ƒì„ ë§Œë“¤ì–´ìš”." #: editor/editor_autoload_settings.cpp msgid "Invalid name." -msgstr "올바르지 ì•Šì€ ì´ë¦„." +msgstr "ìž˜ëª»ëœ ì´ë¦„ì´ì—ìš”." #: editor/editor_autoload_settings.cpp msgid "Valid characters:" @@ -1346,66 +1377,68 @@ msgstr "올바른 문ìž:" #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing engine class name." -msgstr "ì—”ì§„ì— ì¡´ìž¬í•˜ëŠ” í´ëž˜ìФ ì´ë¦„ê³¼ ì¶©ëŒí•˜ì§€ 않아야 합니다." +msgstr "ì—”ì§„ì— ìžˆëŠ” í´ëž˜ìФ ì´ë¦„ê³¼ 같으면 안ë¼ìš”." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing built-in type name." -msgstr "기존 내장 타입 ì´ë¦„ê³¼ ì¶©ëŒí•˜ì§€ 않아야 합니다." +msgstr "내장으로 있는 ìœ í˜•ì˜ ì´ë¦„ê³¼ 같으면 안ë¼ìš”." #: editor/editor_autoload_settings.cpp msgid "Must not collide with an existing global constant name." -msgstr "ì „ì— ìƒìˆ˜ ì´ë¦„ê³¼ ì¶©ëŒí•˜ì§€ 않아야 합니다." +msgstr "ì „ì—으로 있는 ìƒìˆ˜ ì´ë¦„ê³¼ 같으면 안ë¼ìš”." #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "키워드를 ì˜¤í† ë¡œë“œ ì´ë¦„으로 ì‚¬ìš©í• ìˆ˜ 없습니다." +msgstr "키워드를 ì˜¤í† ë¡œë“œ ì´ë¦„으로 쓸 수 없어요." #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" -msgstr "ì˜¤í† ë¡œë“œì— '%s'ì´(ê°€) ì´ë¯¸ 존재합니다!" +msgstr "ì˜¤í† ë¡œë“œ '%s'ì´(ê°€) ì´ë¯¸ 있어요!" #: editor/editor_autoload_settings.cpp msgid "Rename Autoload" -msgstr "ì˜¤í† ë¡œë“œ ì´ë¦„ 변경" +msgstr "ì˜¤í† ë¡œë“œ ì´ë¦„ 바꾸기" #: editor/editor_autoload_settings.cpp msgid "Toggle AutoLoad Globals" -msgstr "ì˜¤í† ë¡œë“œ 글로벌 í† ê¸€" +msgstr "ì˜¤í† ë¡œë“œ ì „ì— í† ê¸€" #: editor/editor_autoload_settings.cpp msgid "Move Autoload" -msgstr "ì˜¤í† ë¡œë“œ ì´ë™" +msgstr "ì˜¤í† ë¡œë“œ ì´ë™í•˜ê¸°" #: editor/editor_autoload_settings.cpp msgid "Remove Autoload" -msgstr "ì˜¤í† ë¡œë“œ ì‚ì œ" +msgstr "ì˜¤í† ë¡œë“œ ì‚ì œí•˜ê¸°" #: editor/editor_autoload_settings.cpp msgid "Enable" -msgstr "활성화" +msgstr "켜기" #: editor/editor_autoload_settings.cpp msgid "Rearrange Autoloads" -msgstr "ì˜¤í† ë¡œë“œ ìž¬ì •ë ¬" +msgstr "ì˜¤í† ë¡œë“œ 다시 ì •ë ¬í•˜ê¸°" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "Invalid path." -msgstr "올바르지 ì•Šì€ ê²½ë¡œ." +msgstr "ìž˜ëª»ëœ ê²½ë¡œì´ì—ìš”." #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "File does not exist." -msgstr "파ì¼ì´ 존재하지 않습니다." +msgstr "파ì¼ì´ 없어요." #: editor/editor_autoload_settings.cpp msgid "Not in resource path." -msgstr "리소스 경로가 아닙니다." +msgstr "리소스 경로가 아니ì—ìš”." #: editor/editor_autoload_settings.cpp msgid "Add AutoLoad" -msgstr "ì˜¤í† ë¡œë“œ 추가" +msgstr "ì˜¤í† ë¡œë“œ 추가하기" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "경로:" @@ -1428,7 +1461,7 @@ msgstr "씬 ì—…ë°ì´íЏ 중" #: editor/editor_data.cpp msgid "Storing local changes..." -msgstr "로컬 변경사í•ì„ ì €ìž¥ 중..." +msgstr "ì§€ì— ë³€ê²½ 사í•ì„ ì €ìž¥ 중..." #: editor/editor_data.cpp msgid "Updating scene..." @@ -1444,11 +1477,11 @@ msgstr "[ì €ìž¥ë˜ì§€ 않ìŒ]" #: editor/editor_dir_dialog.cpp msgid "Please select a base directory first." -msgstr "ë¨¼ì € 기본 ë””ë ‰í† ë¦¬ë¥¼ ì„ íƒí•´ì£¼ì„¸ìš”." +msgstr "ë¨¼ì € 기본 ë””ë ‰í† ë¦¬ë¥¼ ì„ íƒí•˜ê¸°í•´ì£¼ì„¸ìš”." #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" -msgstr "ë””ë ‰í† ë¦¬ ì„ íƒ" +msgstr "ë””ë ‰í† ë¦¬ ì„ íƒí•˜ê¸°" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp @@ -1459,46 +1492,46 @@ msgstr "í´ë” 만들기" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "ì´ë¦„:" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp msgid "Could not create folder." -msgstr "í´ë”를 만들 수 없습니다." +msgstr "í´ë”를 만들 수 없어요." #: editor/editor_dir_dialog.cpp msgid "Choose" -msgstr "ì„ íƒ" +msgstr "ì„ íƒí•˜ê¸°" #: editor/editor_export.cpp msgid "Storing File:" -msgstr "íŒŒì¼ ì €ìž¥ 중:" +msgstr "íŒŒì¼ ì €ìž¥í•˜ê¸°:" #: editor/editor_export.cpp msgid "No export template found at the expected path:" -msgstr "ì˜ˆìƒ ê²½ë¡œì—서 내보내기 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다:" +msgstr "ì˜ˆìƒ ê²½ë¡œì—서 내보낸 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없어요:" #: editor/editor_export.cpp msgid "Packing" -msgstr "패킹 중" +msgstr "í¬ìž¥í•˜ê¸°" #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC' texture compression for GLES2. Enable 'Import " "Etc' in Project Settings." msgstr "" -"ëŒ€ìƒ í”Œëž«í¼ì€ GLES2를 위해 'ETC' í…ìŠ¤ì³ ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì 트 ì„¤ì •ì—서 " -"'Import Etc'ì„ ì‚¬ìš©í•˜ì„¸ìš”." +"ëŒ€ìƒ í”Œëž«í¼ì—서는 GLES2 ìš© 'ETC' í…스처 ì••ì¶•ì´ í•„ìš”í•´ìš”. 프로ì 트 ì„¤ì •ì—서 " +"'Import Etc' ì„¤ì •ì„ ì¼œì„¸ìš”." #: editor/editor_export.cpp msgid "" "Target platform requires 'ETC2' texture compression for GLES3. Enable " "'Import Etc 2' in Project Settings." msgstr "" -"ëŒ€ìƒ í”Œëž«í¼ì€ GLES3를 위해 'ETC2' í…ìŠ¤ì³ ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì 트 ì„¤ì •ì—" -"서 'Import Etc 2'를 사용하세요." +"ëŒ€ìƒ í”Œëž«í¼ì—서는 GLES3 ìš© 'ETC2' í…스처 ì••ì¶•ì´ í•„ìš”í•´ìš”. 프로ì 트 ì„¤ì •ì—서 " +"'Import Etc 2' ì„¤ì •ì„ ì¼œì„¸ìš”." #: editor/editor_export.cpp msgid "" @@ -1507,32 +1540,29 @@ msgid "" "Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback " "Enabled'." msgstr "" -"ëŒ€ìƒ í”Œëž«í¼ì€ 드ë¼ì´ë²„ê°€ GLES2로 í´ë°±í•˜ê¸° 위해 'ETC' í…ìŠ¤ì³ ì••ì¶•ì´ í•„ìš”í•©ë‹ˆ" -"다.\n" -"프로ì 트 ì„¤ì •ì—서 'Import Etc'ì„ í‚¤ê±°ë‚˜, 'Driver Fallback Enabled'를 비활성화" -"하세요." +"ëŒ€ìƒ í”Œëž«í¼ì€ 드ë¼ì´ë²„ê°€ GLES2로 í´ë°±í•˜ê¸° 위해 'ETC' í…스처 ì••ì¶•ì´ í•„ìš”í•´ìš”. " +"프로ì 트 ì„¤ì •ì—서 'Import Etc' ì„¤ì •ì„ ì¼œê±°ë‚˜, 'Driver Fallback Enabled' ì„¤ì •" +"ì„ ë„세요." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom debug template not found." -msgstr "커스텀 디버그 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다." +msgstr "맞춤 디버그 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없어요." #: editor/editor_export.cpp platform/android/export/export.cpp #: platform/iphone/export/export.cpp platform/javascript/export/export.cpp #: platform/osx/export/export.cpp platform/uwp/export/export.cpp msgid "Custom release template not found." -msgstr "커스텀 릴리즈 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다." +msgstr "맞춤 출시 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없어요." #: editor/editor_export.cpp platform/javascript/export/export.cpp msgid "Template file not found:" -msgstr "í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다:" +msgstr "템플릿 파ì¼ì„ ì°¾ì„ ìˆ˜ 없어요:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "" -"32 비트 환경ì—서 ë‚´ìž¥ëœ PCK를 ë‚´ë³´ë‚´ë ¤ë©´ 4 GiB(기가 ì´ì§„ ë°”ì´íЏ)보다 작아야 " -"합니다." +msgstr "32비트 환경ì—서는 4GiB보다 í° ë‚´ìž¥ëœ PCK를 내보낼 수 없어요." #: editor/editor_feature_profile.cpp msgid "3D Editor" @@ -1564,59 +1594,59 @@ msgstr "íŒŒì¼ ì‹œìŠ¤í…œê³¼ ê°€ì ¸ì˜¤ê¸° ë…" #: editor/editor_feature_profile.cpp msgid "Erase profile '%s'? (no undo)" -msgstr "프로필 '%s'ì„(를) ì§€ìš°ì‹œê² ìŠµë‹ˆê¹Œ? (뒤로가기 ì—†ìŒ)" +msgstr "프로필 '%s'ì„(를) 지울까요? (ë˜ëŒë¦´ 수 없어요)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "í”„ë¡œí•„ì€ ì˜¬ë°”ë¥¸ íŒŒì¼ ì´ë¦„ì´ë©°, '.'ì„ í¬í•¨í•˜ì§€ 않아야 합니다" +msgstr "프로필ì—는 올바른 íŒŒì¼ ì´ë¦„ì´ë©´ì„œ, '.'ì´ ì—†ì–´ì•¼ í•´ìš”" #: editor/editor_feature_profile.cpp msgid "Profile with this name already exists." -msgstr "ì´ ì´ë¦„ì„ ê°€ì§„ í”„ë¡œí•„ì´ ì´ë¯¸ 존재합니다." +msgstr "ì´ ì´ë¦„으로 ëœ í”„ë¡œí•„ì´ ì´ë¯¸ 있어요." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "(편집기 비활성화ë¨, ì†ì„± 비활성화ë¨)" +msgstr "(편집기 꺼ì§, ì†ì„± 꺼ì§)" #: editor/editor_feature_profile.cpp msgid "(Properties Disabled)" -msgstr "(ì†ì„± 비활성화ë¨)" +msgstr "(ì†ì„± 꺼ì§)" #: editor/editor_feature_profile.cpp msgid "(Editor Disabled)" -msgstr "(편집기 비활성화ë¨)" +msgstr "(편집기 꺼ì§)" #: editor/editor_feature_profile.cpp msgid "Class Options:" -msgstr "í´ëž˜ìФ 옵션:" +msgstr "í´ëž˜ìФ ì„¤ì •:" #: editor/editor_feature_profile.cpp msgid "Enable Contextual Editor" -msgstr "컨í…스트 편집기 활성화" +msgstr "ë§¥ë½ íŽ¸ì§‘ê¸° 켜기" #: editor/editor_feature_profile.cpp msgid "Enabled Properties:" -msgstr "í™œì„±í™”ëœ ì†ì„±:" +msgstr "켜진 ì†ì„±:" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "í™œì„±í™”ëœ ê¸°ëŠ¥:" +msgstr "켜진 기능:" #: editor/editor_feature_profile.cpp msgid "Enabled Classes:" -msgstr "í™œì„±í™”ëœ í´ëž˜ìФ:" +msgstr "켜진 í´ëž˜ìФ:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "íŒŒì¼ '%s' 형ì‹ì´ 올바르지 않습니다, ê°€ì ¸ì˜¤ê¸°ê°€ 중단ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "íŒŒì¼ '%s' 형ì‹ì´ 잘못ë¬ì–´ìš”, ê°€ì ¸ì˜¬ 수 없어요." #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" -"프로필 '%s'ì´(ê°€) ì´ë¯¸ 존재합니다. ê°€ì ¸ì˜¤ê¸° ì „ì— ì•žì˜ ê²ƒì„ ì‚ì œí•˜ì„¸ìš”, ê°€ì ¸ì˜¤" -"기가 중단ë˜ì—ˆìŠµë‹ˆë‹¤." +"프로필 '%s'ì´(ê°€) ì´ë¯¸ 있어요. ê°€ì ¸ì˜¤ê¸° ì „ì— ì´ë¯¸ 있는 í”„ë¡œí•„ì„ ë¨¼ì € ì‚ì œí•˜ì„¸" +"ìš”, ê°€ì ¸ì˜¬ 수 없어요." #: editor/editor_feature_profile.cpp msgid "Error saving profile to path: '%s'." @@ -1624,7 +1654,7 @@ msgstr "í”„ë¡œí•„ì„ ê²½ë¡œì— ì €ìž¥í•˜ëŠ” 중 오류: '%s'." #: editor/editor_feature_profile.cpp msgid "Unset" -msgstr "ë¹„ì„¤ì •" +msgstr "ì„¤ì •í•˜ì§€ 않기" #: editor/editor_feature_profile.cpp msgid "Current Profile:" @@ -1632,12 +1662,13 @@ msgstr "현재 프로필:" #: editor/editor_feature_profile.cpp msgid "Make Current" -msgstr "현재 만들기" +msgstr "í˜„ìž¬ì˜ ê²ƒìœ¼ë¡œ 만들기" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" -msgstr "새 것" +msgstr "새로 만들기" #: editor/editor_feature_profile.cpp editor/editor_node.cpp #: editor/project_manager.cpp @@ -1666,7 +1697,7 @@ msgstr "프로필 지우기" #: editor/editor_feature_profile.cpp msgid "Import Profile(s)" -msgstr "ê°€ì ¸ì˜¨ 프로필" +msgstr "프로필 ê°€ì ¸ì˜¤ê¸°" #: editor/editor_feature_profile.cpp msgid "Export Profile" @@ -1674,11 +1705,11 @@ msgstr "프로필 내보내기" #: editor/editor_feature_profile.cpp msgid "Manage Editor Feature Profiles" -msgstr "편집기 기능 프로필 관리" +msgstr "편집기 기능 프로필 관리하기" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select Current Folder" -msgstr "현재 í´ë” ì„ íƒ" +msgstr "현재 í´ë” ì„ íƒí•˜ê¸°" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File Exists, Overwrite?" @@ -1686,11 +1717,11 @@ msgstr "파ì¼ì´ 존재합니다. ë®ì–´ì“°ì‹œê² 습니까?" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Select This Folder" -msgstr "ì´ í´ë” ì„ íƒ" +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" @@ -1706,6 +1737,7 @@ msgid "New Folder..." msgstr "새 í´ë”..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "ìƒˆë¡œê³ ì¹¨" @@ -1774,35 +1806,35 @@ msgstr "경로 í¬ì»¤ìФ" #: editor/editor_file_dialog.cpp msgid "Move Favorite Up" -msgstr "ì¦ê²¨ì°¾ê¸° 위로 ì´ë™" +msgstr "ì¦ê²¨ì°¾ê¸° 위로 ì´ë™í•˜ê¸°" #: editor/editor_file_dialog.cpp msgid "Move Favorite Down" -msgstr "ì¦ê²¨ì°¾ê¸° 아래로 ì´ë™" +msgstr "ì¦ê²¨ì°¾ê¸° 아래로 ì´ë™í•˜ê¸°" #: editor/editor_file_dialog.cpp msgid "Go to previous folder." -msgstr "ì´ì „ í´ë”로 ì´ë™í•©ë‹ˆë‹¤." +msgstr "ì´ì „ í´ë”로 ì´ë™í•´ìš”." #: editor/editor_file_dialog.cpp msgid "Go to next folder." -msgstr "ë‹¤ìŒ í´ë”로 ì´ë™í•©ë‹ˆë‹¤." +msgstr "ë‹¤ìŒ í´ë”로 ì´ë™í•´ìš”." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder." -msgstr "부모 í´ë”로 ì´ë™í•©ë‹ˆë‹¤." +msgstr "부모 í´ë”로 ì´ë™í•´ìš”." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Refresh files." -msgstr "파ì¼ì„ ìƒˆë¡œê³ ì¹¨í•©ë‹ˆë‹¤." +msgstr "파ì¼ì„ ìƒˆë¡œê³ ì¹¨í•´ìš”." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." -msgstr "현재 í´ë”를 ì¦ê²¨ì°¾ê¸° (안) 합니다." +msgstr "현재 í´ë”를 ì¦ê²¨ì°¾ê¸°í•˜ê±°ë‚˜ 하지 않아요." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Toggle the visibility of hidden files." -msgstr "ê°ì¶˜ 파ì¼ì˜ 표시 여부 í† ê¸€í•˜ê¸°." +msgstr "ê°ì¶˜ 파ì¼ì˜ 표시 여부 í† ê¸€." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." @@ -1810,17 +1842,17 @@ msgstr "ì¸ë„¤ì¼ 바둑íŒìœ¼ë¡œ 보기." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." -msgstr "리스트로 보기." +msgstr "목ë¡ìœ¼ë¡œ 보기." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Directories & Files:" -msgstr "ë””ë ‰í† ë¦¬ì™€ 파ì¼:" +msgstr "ë””ë ‰í† ë¦¬ & 파ì¼:" #: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp #: editor/plugins/style_box_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Preview:" -msgstr "미리보기:" +msgstr "미리 보기:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "File:" @@ -1828,7 +1860,7 @@ msgstr "파ì¼:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Must use a valid extension." -msgstr "올바른 확장ìžë¥¼ 사용해야 합니다." +msgstr "올바른 확장ìžë¥¼ 사용해야 í•´ìš”." #: editor/editor_file_system.cpp msgid "ScanSources" @@ -1838,9 +1870,7 @@ msgstr "소스 조사" msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" -msgstr "" -"íŒŒì¼ %sì„(를) 가리키는 다른 ìœ í˜•ì˜ ê°€ì ¸ì˜¤ê¸°ë“¤ì´ ìžˆìŠ´ë‹ˆë‹¤, ê°€ì ¸ì˜¤ê¸°ê°€ 중단ë˜" -"었습니다" +msgstr "íŒŒì¼ %sì„(를) 가리키는 다른 ìœ í˜•ì˜ ê°€ì ¸ì˜¤ê¸°ê°€ ë§Žì•„ìš”, ê°€ì ¸ì˜¬ 수 없어요" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1855,6 +1885,7 @@ msgid "Class:" msgstr "í´ëž˜ìФ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ìƒì†:" @@ -1863,68 +1894,40 @@ msgid "Inherited by:" msgstr "ìƒì†í•œ í´ëž˜ìФ:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "간단한 설명:" +msgid "Brief Description" +msgstr "간단한 설명" #: editor/editor_help.cpp msgid "Properties" msgstr "ì†ì„±" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "ì†ì„±:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "메서드" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "메서드:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "테마 ì†ì„±" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "테마 ì†ì„±:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "시그ë„:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "ì—´ê±°" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "ì—´ê±°:" - -#: editor/editor_help.cpp msgid "enum " msgstr "ì´ë„˜ " #: editor/editor_help.cpp msgid "Constants" -msgstr "ìƒìˆ˜(Constant)" - -#: editor/editor_help.cpp -msgid "Constants:" -msgstr "ìƒìˆ˜:" +msgstr "ìƒìˆ˜" #: editor/editor_help.cpp msgid "Class Description" msgstr "í´ëž˜ìФ 설명" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "í´ëž˜ìФ 설명:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "온ë¼ì¸ íŠœí† ë¦¬ì–¼:" +msgid "Online Tutorials" +msgstr "온ë¼ì¸ íŠœí† ë¦¬ì–¼" #: editor/editor_help.cpp msgid "" @@ -1932,41 +1935,33 @@ msgid "" "$url]contribute one[/url][/color] or [color=$color][url=$url2]request one[/" "url][/color]." msgstr "" -"현재 ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ íŠœí† ë¦¬ì–¼ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]ë„ì›€ì„ ì£¼" -"시거나[/url][/color] [color=$color][url=$url2]ìš”ì² í•˜ì‹¤ 수[/url][/color] 있습" -"니다." +"현재 ì´ í´ëž˜ìŠ¤ì— ëŒ€í•œ íŠœí† ë¦¬ì–¼ì´ ì—†ì–´ìš”. [color=$color][url=$url]íŠœí† ë¦¬ì–¼ì— " +"기여하거나[/url][/color] [color=$color][url=$url2]íŠœí† ë¦¬ì–¼ì„ ìš”ì²í• 수[/url]" +"[/color] 있어요." #: editor/editor_help.cpp msgid "Property Descriptions" msgstr "ì†ì„± 설명" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "ì†ì„± 설명:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" msgstr "" -"현재 ì´ ì†ì„±ì— 대한 ìƒì„¸ì„¤ëª…ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]ê´€ë ¨ ì •ë³´ë¥¼ " -"기여하여[/url][/color] ë” ë‚˜ì•„ì§€ê²Œ ë„와주세요!" +"현재 ì´ ì†ì„±ì˜ ì„¤ëª…ì´ ì—†ì–´ìš”[color=$color][url=$url]ê´€ë ¨ ì •ë³´ë¥¼ 기여하여[/" +"url][/color] ê°œì„ í• ìˆ˜ 있ë„ë¡ ë„와주세요!" #: editor/editor_help.cpp msgid "Method Descriptions" msgstr "메서드 설명" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "메서드 설명:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" msgstr "" -"현재 ì´ ë©”ì„œë“œì— ëŒ€í•œ ìƒì„¸ ì„¤ëª…ì´ ì—†ìŠµë‹ˆë‹¤. [color=$color][url=$url]ê´€ë ¨ ì •ë³´" -"를 기여하여[/url][/color] ë” ë‚˜ì•„ì§€ê²Œ ë„와주세요!" +"현재 ì´ ë©”ì„œë“œì˜ ì„¤ëª…ì´ ì—†ì–´ìš”. [color=$color][url=$url]ê´€ë ¨ ì •ë³´ë¥¼ 기여하여" +"[/url][/color] ê°œì„ í• ìˆ˜ 있ë„ë¡ ë„와주세요!" #: editor/editor_help_search.cpp editor/editor_node.cpp #: editor/plugins/script_editor_plugin.cpp @@ -1975,35 +1970,35 @@ msgstr "ë„ì›€ë§ ê²€ìƒ‰" #: editor/editor_help_search.cpp msgid "Display All" -msgstr "ëª¨ë‘ í‘œì‹œ" +msgstr "ëª¨ë‘ í‘œì‹œí•˜ê¸°" #: editor/editor_help_search.cpp msgid "Classes Only" -msgstr "í´ëž˜ìŠ¤ë§Œ" +msgstr "í´ëž˜ìŠ¤ë§Œ 표시하기" #: editor/editor_help_search.cpp msgid "Methods Only" -msgstr "메서드만" +msgstr "메서드만 표시하기" #: editor/editor_help_search.cpp msgid "Signals Only" -msgstr "시그ë„ë§Œ" +msgstr "시그ë„ë§Œ 표시하기" #: editor/editor_help_search.cpp msgid "Constants Only" -msgstr "ìƒìˆ˜ë§Œ" +msgstr "ìƒìˆ˜ë§Œ 표시하기" #: editor/editor_help_search.cpp msgid "Properties Only" -msgstr "ì†ì„±ë§Œ" +msgstr "ì†ì„±ë§Œ 표시하기" #: editor/editor_help_search.cpp msgid "Theme Properties Only" -msgstr "테마 ì†ì„±ë§Œ" +msgstr "테마 ì†ì„±ë§Œ 표시하기" #: editor/editor_help_search.cpp msgid "Member Type" -msgstr "멤버 타입" +msgstr "멤버 ìœ í˜•" #: editor/editor_help_search.cpp msgid "Class" @@ -2027,10 +2022,10 @@ msgstr "ì¶œë ¥:" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Copy Selection" -msgstr "ì„ íƒ ë³µì‚¬" +msgstr "ì„ íƒ í•목 복사하기" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2043,23 +2038,64 @@ msgstr "지우기" msgid "Clear Output" msgstr "ì¶œë ¥ 지우기" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "중단하기" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "시작" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "아래" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "위" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "노드" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "ìˆ˜ì‹ RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "ìˆ˜ì‹ RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "ë°œì‹ RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "ë°œì‹ RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "윈ë„ìš°" +msgstr "새 ì°½" #: editor/editor_node.cpp msgid "Project export failed with error code %d." -msgstr "프로ì 트 내보내기가 오류 코드 %d 로 실패했습니다." +msgstr "프로ì 트를 내보낼 수 없었어요 오류 코드%d." #: editor/editor_node.cpp msgid "Imported resources can't be saved." -msgstr "ê°€ì ¸ì˜¨ 리소스를 ì €ìž¥í• ìˆ˜ 없습니다." +msgstr "ê°€ì ¸ì˜¨ 리소스를 ì €ìž¥í• ìˆ˜ 없어요." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: scene/gui/dialogs.cpp msgid "OK" -msgstr "확ì¸" +msgstr "네" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Error saving resource!" @@ -2070,20 +2106,20 @@ msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." msgstr "" -"ì´ ë¦¬ì†ŒìŠ¤ëŠ” íŽ¸ì§‘ëœ ì”¬ì— ì†í•´ìžˆì§€ 않기 ë•Œë¬¸ì— ì €ìž¥í• ìˆ˜ 없습니다. ë¨¼ì € 리소스" -"를 ìœ ì¼í•˜ê²Œ 만드세요." +"ì´ ë¦¬ì†ŒìŠ¤ëŠ” 편집 ì¤‘ì¸ ì”¬ì— ì†í•œ ê²ƒì´ ì•„ë‹ˆë¼ì„œ ì €ìž¥í• ìˆ˜ 없어요. ì €ìž¥í•˜ê¸° ì „" +"ì— ë¨¼ì € 리소스를 ìœ ì¼í•˜ê²Œ 만드세요." #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Save Resource As..." -msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥..." +msgstr "리소스를 다른 ì´ë¦„으로 ì €ìž¥í•˜ê¸°..." #: editor/editor_node.cpp msgid "Can't open file for writing:" -msgstr "쓰기 위한 파ì¼ì„ ì—´ 수 ì—†ìŒ:" +msgstr "파ì¼ì„ ìž‘ì„±í•˜ë ¤ê³ ì—´ 수 없어요:" #: editor/editor_node.cpp msgid "Requested file format unknown:" -msgstr "ìš”ì²í•œ íŒŒì¼ í˜•ì‹ì„ 알 수 ì—†ìŒ:" +msgstr "ìš”ì²í•œ íŒŒì¼ í˜•ì‹ì„ 알 수 없어요:" #: editor/editor_node.cpp msgid "Error while saving." @@ -2091,7 +2127,7 @@ msgstr "ì €ìž¥ 중 오류." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Can't open '%s'. The file could have been moved or deleted." -msgstr "'%s'ì„(를) ì—´ 수 없습니다. 파ì¼ì´ 존재하지 않습니다." +msgstr "'%s'ì„(를) ì—´ 수 없어요. 파ì¼ì´ ì´ë™í–ˆê±°ë‚˜ ì‚ì œë나ë´ìš”." #: editor/editor_node.cpp msgid "Error while parsing '%s'." @@ -2099,55 +2135,54 @@ msgstr "'%s' 구문 ë¶„ì„ ì¤‘ 오류." #: editor/editor_node.cpp msgid "Unexpected end of file '%s'." -msgstr "예ìƒì¹˜ 못한 '%s' 파ì¼ì˜ ë." +msgstr "예기치 못한 '%s' 파ì¼ì˜ ë." #: editor/editor_node.cpp msgid "Missing '%s' or its dependencies." -msgstr "'%s'ì´(ê°€) 없거나 ì¢…ì† í•ëª©ì´ ì—†ìŠµë‹ˆë‹¤." +msgstr "'%s' ë˜ëŠ” ì´ê²ƒì˜ ì¢…ì† í•ëª©ì´ ì—†ì–´ìš”." #: editor/editor_node.cpp msgid "Error while loading '%s'." -msgstr "'%s' 로딩 중 오류." +msgstr "'%s' 불러오는 중 오류." #: editor/editor_node.cpp msgid "Saving Scene" -msgstr "씬 ì €ìž¥" +msgstr "씬 ì €ìž¥í•˜ê¸°" #: editor/editor_node.cpp msgid "Analyzing" -msgstr "ë¶„ì„중" +msgstr "ë¶„ì„하기" #: editor/editor_node.cpp msgid "Creating Thumbnail" -msgstr "ì¸ë„¤ì¼ ìƒì„± 중" +msgstr "ì¸ë„¤ì¼ 만들기" #: editor/editor_node.cpp msgid "This operation can't be done without a tree root." -msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트 ì—†ì´ëŠ” 불가합니다." +msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트가 필요해요." #: editor/editor_node.cpp msgid "" "This scene can't be saved because there is a cyclic instancing inclusion.\n" "Please resolve it and then attempt to save again." msgstr "" -"사ì´í´ë¡œ ëœ ì¸ìŠ¤í„´ìŠ¤ê°€ í¬í•¨ë˜ì–´ 있기 ë•Œë¬¸ì— ì´ ì”¬ì„ ì €ìž¥í• ìˆ˜ 없습니다.\n" -"ì´ë¥¼ ìˆ˜ì •í•˜ê³ ë‹¤ì‹œ ì €ìž¥ì„ ì‹œë„하ì‹ì‹œì˜¤." +"ì´ ì”¬ì—는 순환하는 ì¸ìŠ¤í„´ìŠ¤ë¥¼ í¬í•¨í•˜ê³ 있어서 ì €ìž¥í• ìˆ˜ 없어요.\n" +"ì´ë¥¼ 해결한 후 다시 ì €ìž¥í•´ë³´ì„¸ìš”." #: editor/editor_node.cpp msgid "" "Couldn't save scene. Likely dependencies (instances or inheritance) couldn't " "be satisfied." msgstr "" -"ì”¬ì„ ì €ìž¥í• ìˆ˜ 없습니다. ì•„ë§ˆë„ ì¢…ì† ê´€ê³„(ì¸ìŠ¤í„´ìŠ¤ ë˜ëŠ” ìƒì†)ê°€ 만족스럽지 않" -"ì„ ìˆ˜ 있습니다." +"ì”¬ì„ ì €ìž¥í• ìˆ˜ 없어요. ì¢…ì† ê´€ê³„ (ì¸ìŠ¤í„´ìŠ¤ ë˜ëŠ” ìƒì†)ê°€ 만족스럽지 않나ë´ìš”." #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "Can't overwrite scene that is still open!" -msgstr "ì—´ë ¤ìžˆëŠ” ì”¬ì„ ë®ì–´ 쓸 수 없습니다!" +msgstr "ì—´ë ¤ìžˆëŠ” ì”¬ì€ ë®ì–´ 쓸 수 없어요!" #: editor/editor_node.cpp msgid "Can't load MeshLibrary for merging!" -msgstr "ë³‘í•©í• ë©”ì‹œ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 불러올 수 없습니다!" +msgstr "ë³‘í•©í• ë©”ì‹œ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 불러올 수 없어요!" #: editor/editor_node.cpp msgid "Error saving MeshLibrary!" @@ -2155,7 +2190,7 @@ msgstr "메시 ë¼ì´ë¸ŒëŸ¬ë¦¬ ì €ìž¥ 중 오류!" #: editor/editor_node.cpp msgid "Can't load TileSet for merging!" -msgstr "ë³‘í•©í• íƒ€ì¼ì…‹ì„ 불러올 수 없습니다!" +msgstr "ë³‘í•©í• íƒ€ì¼ì…‹ì„ 불러올 수 없어요!" #: editor/editor_node.cpp msgid "Error saving TileSet!" @@ -2163,19 +2198,19 @@ msgstr "타ì¼ì…‹ ì €ìž¥ 중 오류!" #: editor/editor_node.cpp msgid "Error trying to save layout!" -msgstr "ë ˆì´ì•„웃 ì €ìž¥ ì‹œë„ ì¤‘ 오류!" +msgstr "ë ˆì´ì•„웃 ì €ìž¥ 중 오류!" #: editor/editor_node.cpp msgid "Default editor layout overridden." -msgstr "편집기 기본 ë ˆì´ì•„ì›ƒì´ ë³€ê²½ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "편집기 기본 ë ˆì´ì•„ì›ƒì´ ìƒˆë¡œ ì •ì˜ë˜ì—ˆì–´ìš”." #: editor/editor_node.cpp msgid "Layout name not found!" -msgstr "ë ˆì´ì•„웃 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!" +msgstr "ë ˆì´ì•„웃 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없어요!" #: editor/editor_node.cpp msgid "Restored default layout to base settings." -msgstr "기본 ë ˆì´ì•„ì›ƒì´ ì´ˆê¸° ì„¤ì •ìœ¼ë¡œ ë³µì›ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "기본 ë ˆì´ì•„ì›ƒì´ ì´ˆê¸° ì„¤ì •ìœ¼ë¡œ ëŒì•„왔어요." #: editor/editor_node.cpp msgid "" @@ -2183,25 +2218,25 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ê°€ì ¸ì™”ë˜ ì”¬ì— ì†í•œ 것ì´ë¯€ë¡œ ìˆ˜ì •í• ìˆ˜ 없습니다.\n" -"ê´€ë ¨ 작업 ì ˆì°¨ë¥¼ ë” ìž˜ ì´í•´í•˜ë ¤ë©´ 씬 ê°€ì ¸ì˜¤ê¸°(scene importing)ê³¼ ê´€ë ¨ëœ ë¬¸ì„œ" -"를 확ì¸í•´ì£¼ì‹ì‹œì˜¤." +"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ê°€ì ¸ì˜¨ ì”¬ì— ì†í•œ ê±°ë¼ íŽ¸ì§‘í• ìˆ˜ 없어요.\n" +"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 ê°€ì ¸ì˜¤ê¸°(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼" +"세요." #: editor/editor_node.cpp msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it won't be kept when saving the current scene." msgstr "" -"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ì¸ìŠ¤í„´ìŠ¤ë˜ê±°ë‚˜ ìƒì†ëœ ì”¬ì— ì†í•´ìžˆìŠ´ë‹ˆë‹¤.\n" -"현재 ì”¬ì„ ì €ìž¥í•˜ëŠ” 경우, 변경사í•ì´ ìœ ì§€ë˜ì§€ 않습니다." +"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ì¸ìŠ¤í„´ìŠ¤ë˜ê±°ë‚˜ ìƒì†ëœ ì”¬ì— ì†í•´ 있어요.\n" +"현재 ì”¬ì„ ì €ìž¥í•˜ëŠ” 경우 ë¦¬ì†ŒìŠ¤ì˜ ë³€ê²½ 사í•ì€ ì ìš©ë˜ì§€ ì•Šì„ ê±°ì˜ˆìš”." #: editor/editor_node.cpp msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." msgstr "" -"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ê°€ì ¸ì˜¤ê¸° ë˜ì—ˆìœ¼ë¯€ë¡œ ìˆ˜ì •í• ìˆ˜ 없습니다. ê°€ì ¸ì˜¤ê¸° 패ë„ì—서 ì†ì„±ì„ " -"변경한 ë’¤ 다시 ê°€ì ¸ì˜¤ì‹ì‹œì˜¤." +"ì´ ë¦¬ì†ŒìŠ¤ëŠ” ê°€ì ¸ì˜¨ 것ì´ë¼ íŽ¸ì§‘í• ìˆ˜ 없어요. ê°€ì ¸ì˜¤ê¸° 패ë„ì—서 ì„¤ì •ì„ ë³€ê²½í•œ " +"ë’¤ 다시 ê°€ì ¸ì˜¤ì„¸ìš”." #: editor/editor_node.cpp msgid "" @@ -2210,9 +2245,10 @@ msgid "" "Please read the documentation relevant to importing scenes to better " "understand this workflow." msgstr "" -"ì´ ì”¬ì€ ê°€ì ¸ì˜¨ 것으로 변경사í•ì´ ìœ ì§€ë˜ì§€ 않습니다.\n" -"ì¸ìŠ¤í„´ìŠ¤í™” í˜¹ì€ ìƒì†ì„ 하면 ì”¬ì„ ìˆ˜ì •í• ìˆ˜ 있게 ë©ë‹ˆë‹¤.\n" -"ì´ ì›Œí¬í”Œë¡œë¥¼ ë” ìž˜ ì´í•´í•˜ë ¤ë©´ 씬 ê°€ì ¸ì˜¤ê¸°ì™€ ê´€ë ¨ëœ ë¬¸ì„œë¥¼ 확ì¸í•´ì£¼ì‹ì‹œì˜¤." +"ì´ ì”¬ì€ ê°€ì ¸ì˜¨ 것ì´ë¼ 변경 사í•ì€ ì ìš©ë˜ì§€ 않아요.\n" +"ì´ ì”¬ì„ ì¸ìŠ¤í„´ìŠ¤í•˜ê±°ë‚˜ ìƒì†í•˜ë©´ íŽ¸ì§‘í• ìˆ˜ 있어요.\n" +"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 씬 ê°€ì ¸ì˜¤ê¸°(Importing Scenes)와 ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼" +"세요." #: editor/editor_node.cpp msgid "" @@ -2220,21 +2256,20 @@ msgid "" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"ì´ê²ƒì€ ì›ê²© 오브ì 트입니다, 변경사í•ì´ ìœ ì§€ë˜ì§€ 않습니다.\n" -"ì´ ì›Œí¬í”Œë¡œì— 대해 ë” ìžì„¸ížˆ ì´í•´í•˜ë ¤ë©´ 디버깅 ê´€ë ¨ 문서를 ì½ì–´ë³´ì‹œê¸° ë°”ëžë‹ˆ" -"다." +"ì›ê²© ê°ì²´ëŠ” 변경사í•ì´ ì ìš©ë˜ì§€ 않아요.\n" +"ì´ ì›Œí¬í”Œë¡œë¥¼ ì´í•´í•˜ë ¤ë©´ 디버깅(Debugging)ê³¼ ê´€ë ¨ëœ ë¬¸ì„œë¥¼ ì½ì–´ì£¼ì„¸ìš”." #: editor/editor_node.cpp msgid "There is no defined scene to run." -msgstr "실행하기 위해 ì •ì˜ëœ ì”¬ì´ ì—†ìŠµë‹ˆë‹¤." +msgstr "실행하기로 ì •ì˜ëœ ì”¬ì´ ì—†ì–´ìš”." #: editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." -msgstr "현재 ì”¬ì´ ì €ìž¥ë˜ì§€ 않았습니다. ì‹¤í–‰ì „ì— ì €ìž¥í•´ì£¼ì„¸ìš”." +msgstr "현재 ì”¬ì´ ì €ìž¥ë˜ì§€ 않았어요. 실행하기 ì „ì— ì €ìž¥í•´ì£¼ì„¸ìš”." #: editor/editor_node.cpp msgid "Could not start subprocess!" -msgstr "서브 프로세스를 ì‹œìž‘í• ìˆ˜ 없습니다!" +msgstr "하위 프로세스를 ì‹œìž‘í• ìˆ˜ 없어요!" #: editor/editor_node.cpp editor/filesystem_dock.cpp msgid "Open Scene" @@ -2258,23 +2293,23 @@ msgstr "ë¹ ë¥¸ 스í¬ë¦½íЏ 열기..." #: editor/editor_node.cpp msgid "Save & Close" -msgstr "ì €ìž¥ ë° ë‹«ê¸°" +msgstr "ì €ìž¥ & 닫기" #: editor/editor_node.cpp msgid "Save changes to '%s' before closing?" -msgstr "닫기 ì „ì— '%s'ì— ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "닫기 ì „ì— '%s'ì— ë³€ê²½ 사í•ì„ ì €ìž¥í• ê¹Œìš”?" #: editor/editor_node.cpp msgid "Saved %s modified resource(s)." -msgstr "%s ìˆ˜ì •ëœ ë¦¬ì†ŒìŠ¤ê°€ ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "ìˆ˜ì •ëœ ë¦¬ì†ŒìŠ¤ %sì´(ê°€) ì €ìž¥ë˜ì—ˆì–´ìš”." #: editor/editor_node.cpp msgid "A root node is required to save the scene." -msgstr "ì”¬ì„ ì €ìž¥í•˜ê¸° 위해 루트 노드가 필요합니다." +msgstr "ì”¬ì„ ì €ìž¥í•˜ë ¤ë©´ 루트 노드가 필요해요." #: editor/editor_node.cpp msgid "Save Scene As..." -msgstr "ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥..." +msgstr "ì”¬ì„ ë‹¤ë¥¸ ì´ë¦„으로 ì €ìž¥í•˜ê¸°..." #: editor/editor_node.cpp msgid "No" @@ -2286,11 +2321,11 @@ msgstr "네" #: editor/editor_node.cpp msgid "This scene has never been saved. Save before running?" -msgstr "ì´ ì”¬ì€ ì €ìž¥ë˜ì§€ 않았습니다. ì‹¤í–‰ì „ì— ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ì´ ì”¬ì€ ì•„ì§ ì €ìž¥í•˜ì§€ 않았네요. 실행하기 ì „ì— ì €ìž¥í• ê¹Œìš”?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp msgid "This operation can't be done without a scene." -msgstr "ì´ ìž‘ì—…ì€ ì”¬ ì—†ì´ëŠ” 불가합니다." +msgstr "ì´ ìž‘ì—…ì—는 ì”¬ì´ í•„ìš”í•´ìš”." #: editor/editor_node.cpp msgid "Export Mesh Library" @@ -2306,15 +2341,15 @@ msgstr "타ì¼ì…‹ 내보내기" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." -msgstr "ì´ ìž‘ì—…ì€ ì„ íƒëœ 노드가 ì—†ì„때는 불가합니다." +msgstr "ì´ ìž‘ì—…ì—는 노드를 ì„ íƒí•´ 놓아야 í•´ìš”." #: editor/editor_node.cpp msgid "Current scene not saved. Open anyway?" -msgstr "현재 ì”¬ì´ ì €ìž¥ë˜ì§€ 않았습니다. ë¬´ì‹œí•˜ê³ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "현재 ì”¬ì„ ì €ìž¥í•˜ì§€ 않았네요. ë¬´ì‹œí•˜ê³ ì—´ê¹Œìš”?" #: editor/editor_node.cpp msgid "Can't reload a scene that was never saved." -msgstr "ì €ìž¥ë˜ì§€ ì•Šì€ ì”¬ì€ ë‹¤ì‹œ 불러올 수 없습니다." +msgstr "ì €ìž¥í•˜ì§€ ì•Šì€ ì”¬ì„ ë‹¤ì‹œ 불러올 수는 없어요." #: editor/editor_node.cpp msgid "Revert" @@ -2322,11 +2357,11 @@ msgstr "ë˜ëŒë¦¬ê¸°" #: editor/editor_node.cpp msgid "This action cannot be undone. Revert anyway?" -msgstr "ì´ í–‰ë™ì€ 취소가 불가능합니다. ë¬´ì‹œí•˜ê³ ë˜ëŒë¦¬ì‹œê² 습니까?" +msgstr "ì´ í–‰ë™ì€ ì·¨ì†Œí• ìˆ˜ 없어요. ë¬´ì‹œí•˜ê³ ë˜ëŒë¦´ê¹Œìš”?" #: editor/editor_node.cpp msgid "Quick Run Scene..." -msgstr "ë¹ ë¥¸ 씬 실행..." +msgstr "ë¹ ë¥¸ 씬 실행하기..." #: editor/editor_node.cpp msgid "Quit" @@ -2334,97 +2369,97 @@ msgstr "종료" #: editor/editor_node.cpp msgid "Exit the editor?" -msgstr "편집기를 ì¢…ë£Œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "편집기를 ëŒê¹Œìš”?" #: editor/editor_node.cpp msgid "Open Project Manager?" -msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ 열까요?" #: editor/editor_node.cpp msgid "Save & Quit" -msgstr "ì €ìž¥í•˜ê³ ì¢…ë£Œ" +msgstr "ì €ìž¥í•˜ê³ ì¢…ë£Œí•˜ê¸°" #: editor/editor_node.cpp msgid "Save changes to the following scene(s) before quitting?" -msgstr "닫기 ì „ì— ë‹¤ìŒ ì”¬(들)ì˜ ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ë„기 ì „ì— í•´ë‹¹ ì”¬ì˜ ë³€ê²½ 사í•ì„ ì €ìž¥í• ê¹Œìš”?" #: editor/editor_node.cpp msgid "Save changes the following scene(s) before opening Project Manager?" -msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ 열기 ì „ì— ë‹¤ìŒ ì”¬(들)ì˜ ë³€ê²½ì‚¬í•ì„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "프로ì 트 ë§¤ë‹ˆì €ë¥¼ 열기 ì „ì— í•´ë‹¹ ì”¬ì˜ ë³€ê²½ 사í•ì„ ì €ìž¥í• ê¹Œìš”?" #: editor/editor_node.cpp msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." msgstr "" -"ì´ ì˜µì…˜ì€ ë” ì´ìƒ 사용ë˜ì§€ 않습니다. ìƒˆë¡œê³ ì¹¨ì„ í•´ì•¼ 하는 ìƒí™©ì€ 버그로 간주" -"ë©ë‹ˆë‹¤. 리í¬íЏ ë°”ëžë‹ˆë‹¤." +"ì´ ì„¤ì •ì€ ë” ì´ìƒ ì‚¬ìš©í• ìˆ˜ 없어요. ìƒˆë¡œê³ ì¹¨ì„ ê°•ì œë¡œ 해야 하는 ìƒí™©ì€ 버그" +"로 간주ë¼ìš”. ì‹ ê³ í•´ì£¼ì„¸ìš”." #: editor/editor_node.cpp msgid "Pick a Main Scene" -msgstr "ë©”ì¸ ì”¬ ì„ íƒ" +msgstr "ë©”ì¸ ì”¬ì„ ê³ ë¥´ì„¸ìš”" #: editor/editor_node.cpp msgid "Close Scene" msgstr "씬 닫기" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "씬 닫기" +msgstr "ë‹«ì€ ì”¬ 다시 열기" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." -msgstr "ì• ë“œì˜¨ 플러그ì¸ì„ í™œì„±í™”í• ìˆ˜ 없습니다: '%s' 구성 구문 ë¶„ì„ ì‹¤íŒ¨." +msgstr "" +"ì• ë“œì˜¨ 플러그ì¸ì„ 여기서 켤 수 ì—†ìŒ: '%s' ì„¤ì •ì„ êµ¬ë¬¸ ë¶„ì„í• ìˆ˜ 없어요." #: editor/editor_node.cpp msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." -msgstr "ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 플러그ì¸ì„ ì°¾ì„ ìˆ˜ 없습니다: 'res://addons/%s'." +msgstr "ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 플러그ì¸ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: 'res://addons/%s'." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s'." -msgstr "ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s'." +msgstr "ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ: '%s'." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' There seems to be an error in " "the code, please check the syntax." msgstr "" -"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' ì½”ë“œì— ì˜¤ë¥˜ê°€ 있는 " -"것 같습니다, êµ¬ë¬¸ì„ í™•ì¸í•´ ë³´ì‹ì‹œì˜¤." +"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ: '%s' ì½”ë“œì˜ ì˜¤ë¥˜ê°€ 있는 것 ê°™" +"ì€ë°, ë¬¸ë²•ì„ í™•ì¸í•´ë´ìš”." #: editor/editor_node.cpp msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" -"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' 기본 íƒ€ìž…ì´ " -"EditorPluginì´ ì•„ë‹™ë‹ˆë‹¤." +"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ: '%s' 기본 ìœ í˜•ì´ EditorPlugin" +"ì´ ì•„ë‹ˆì—ìš”." #: editor/editor_node.cpp msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" -"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다: '%s' 스í¬ë¦½íŠ¸ê°€ tool 모드" -"ê°€ 아닙니다." +"ë‹¤ìŒ ê²½ë¡œì—서 ì• ë“œì˜¨ 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ: '%s' 스í¬ë¦½íŠ¸ê°€ Tool 모드가 " +"아니ì—ìš”." #: editor/editor_node.cpp msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." msgstr "" -"'%s' ì”¬ì€ ìžë™ìœ¼ë¡œ ê°€ì ¸ì™€ 지기 때문ì—, ë³€ê²½í• ìˆ˜ 없습니다.\n" -"변경사í•ì„ ì ìš©í•˜ë ¤ë©´, 새로운 ìƒì† ì”¬ì„ ë§Œë“œì„¸ìš”." +"씬 '%s'ì„(를) ìžë™ìœ¼ë¡œ ê°€ì ¸ì™”ê¸° 때문ì—, ìˆ˜ì •í• ìˆ˜ 없어요.\n" +"ì´ ì”¬ì„ íŽ¸ì§‘í•˜ë ¤ë©´, 새로운 ìƒì† ì”¬ì„ ë§Œë“¤ì–´ì•¼ í•´ìš”." #: editor/editor_node.cpp msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." msgstr "" -"씬 로딩 중 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 프로ì 트 경로 ì•ˆì— ì¡´ìž¬í•´ì•¼ 합니다. 'ê°€ì ¸ì˜¤" -"기'로 ì”¬ì„ ì—° 후ì—, 프로ì 트 경로 ì•ˆì— ì €ìž¥í•˜ì„¸ìš”." +"ì”¬ì„ ë¶ˆëŸ¬ì˜¤ëŠ” 중 오류가 ë°œìƒí–ˆì–´ìš”, 프로ì 트 ê²½ë¡œì— ìžˆì„ ê±°ì˜ˆìš”. 'ê°€ì ¸ì˜¤" +"기'를 사용해서 ì”¬ì„ ì—´ê³ , ê·¸ ì”¬ì„ í”„ë¡œì 트 경로 ì•ˆì— ì €ìž¥í•˜ì„¸ìš”." #: editor/editor_node.cpp msgid "Scene '%s' has broken dependencies:" -msgstr "'%s' ì”¬ì˜ ì¢…ì† í•ëª©ì´ ê¹¨ì ¸ 있습니다:" +msgstr "씬 '%s'ì˜ ì¢…ì† í•ëª©ì´ ê¹¨ì§:" #: editor/editor_node.cpp msgid "Clear Recent Scenes" @@ -2436,8 +2471,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"ë©”ì¸ ì”¬ì´ ì§€ì •ë˜ì§€ 않았습니다. ì„ íƒí•˜ì‹œê² 습니까?\n" -"ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' í•목ì—서 ë³€ê²½í• ìˆ˜ 있습니다." +"ë©”ì¸ ì”¬ì„ ì§€ì •í•˜ì§€ 않았네요. 하나 ì •í• ê¹Œìš”?\n" +"ì´ê±´ ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' ì¹´í…Œê³ ë¦¬ì—서 바꿀 수 있어요." #: editor/editor_node.cpp msgid "" @@ -2445,8 +2480,8 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"ì„ íƒí•œ '%s' ì”¬ì´ ì¡´ìž¬í•˜ì§€ 않습니다. 다시 ì„ íƒí•˜ì‹œê² 습니까?\n" -"ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' í•목ì—서 ë³€ê²½í• ìˆ˜ 있습니다." +"ì„ íƒí•œ 씬 '%s'ì´(ê°€) 없어요, 다른 씬으로 ì •í• ê¹Œìš”?\n" +"ì´ê±´ ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' ì¹´í…Œê³ ë¦¬ì—서 바꿀 수 있어요." #: editor/editor_node.cpp msgid "" @@ -2454,16 +2489,16 @@ msgid "" "You can change it later in \"Project Settings\" under the 'application' " "category." msgstr "" -"ì„ íƒí•œ '%s' ì”¬ì´ ì”¬ 파ì¼ì´ 아닙니다. 다시 ì„ íƒí•˜ì‹œê² 습니까?\n" -"ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' í•목ì—서 ë³€ê²½í• ìˆ˜ 있습니다." +"ì„ íƒí•œ 씬 '%s'ì€(는) 씬 파ì¼ì´ 아니네요, 다른 씬으로 ì •í• ê¹Œìš”?\n" +"ì´ê±´ ë‚˜ì¤‘ì— \"프로ì 트 ì„¤ì •\"ì˜ 'application' ì¹´í…Œê³ ë¦¬ì—서 바꿀 수 있어요." #: editor/editor_node.cpp msgid "Save Layout" -msgstr "ë ˆì´ì•„웃 ì €ìž¥" +msgstr "ë ˆì´ì•„웃 ì €ìž¥í•˜ê¸°" #: editor/editor_node.cpp msgid "Delete Layout" -msgstr "ë ˆì´ì•„웃 ì‚ì œ" +msgstr "ë ˆì´ì•„웃 ì‚ì œí•˜ê¸°" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp @@ -2477,16 +2512,15 @@ msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 보기" #: editor/editor_node.cpp msgid "Play This Scene" -msgstr "ì´ ì”¬ì„ ì‹¤í–‰" +msgstr "ì´ ì”¬ 실행하기" #: editor/editor_node.cpp msgid "Close Tab" msgstr "íƒ ë‹«ê¸°" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "íƒ ë‹«ê¸°" +msgstr "ë‹«ì€ íƒ ë‹¤ì‹œ 열기" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2502,19 +2536,19 @@ msgstr "ëª¨ë“ íƒ ë‹«ê¸°" #: editor/editor_node.cpp msgid "Switch Scene Tab" -msgstr "씬 íƒ ì „í™˜" +msgstr "씬 íƒ ì „í™˜í•˜ê¸°" #: editor/editor_node.cpp msgid "%d more files or folders" -msgstr "%dê°œ 추가 íŒŒì¼ ë˜ëŠ” í´ë”" +msgstr "ê·¸ 외 %dê°œì˜ íŒŒì¼ ë˜ëŠ” í´ë”" #: editor/editor_node.cpp msgid "%d more folders" -msgstr "%dê°œ 추가 í´ë”" +msgstr "ê·¸ 외 %dê°œì˜ í´ë”" #: editor/editor_node.cpp msgid "%d more files" -msgstr "%dê°œ 추가 파ì¼" +msgstr "ê·¸ 외 %dê°œì˜ íŒŒì¼" #: editor/editor_node.cpp msgid "Dock Position" @@ -2530,7 +2564,7 @@ msgstr "집중 모드 í† ê¸€." #: editor/editor_node.cpp msgid "Add a new scene." -msgstr "새 씬 추가." +msgstr "새 씬 추가하기." #: editor/editor_node.cpp msgid "Scene" @@ -2542,7 +2576,7 @@ msgstr "ì´ì „ì— ì—´ì—ˆë˜ ì”¬ìœ¼ë¡œ 가기." #: editor/editor_node.cpp msgid "Copy Text" -msgstr "ë¬¸ìž ë³µì‚¬" +msgstr "ë¬¸ìž ë³µì‚¬í•˜ê¸°" #: editor/editor_node.cpp msgid "Next tab" @@ -2554,11 +2588,11 @@ msgstr "ì´ì „ íƒ" #: editor/editor_node.cpp msgid "Filter Files..." -msgstr "íŒŒì¼ í•„í„°ë§..." +msgstr "íŒŒì¼ í•„í„°..." #: editor/editor_node.cpp msgid "Operations with scene files." -msgstr "씬 íŒŒì¼ ë™ìž‘." +msgstr "씬 파ì¼ë¡œ 작업하기." #: editor/editor_node.cpp msgid "New Scene" @@ -2574,19 +2608,19 @@ msgstr "씬 열기..." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Open Recent" -msgstr "최근 ì—´ì—ˆë˜ í•목" +msgstr "최근 ê¸°ë¡ ì—´ê¸°" #: editor/editor_node.cpp msgid "Save Scene" -msgstr "씬 ì €ìž¥" +msgstr "씬 ì €ìž¥í•˜ê¸°" #: editor/editor_node.cpp msgid "Save All Scenes" -msgstr "ëª¨ë“ ì”¬ ì €ìž¥" +msgstr "ëª¨ë“ ì”¬ ì €ìž¥í•˜ê¸°" #: editor/editor_node.cpp msgid "Convert To..." -msgstr "변환..." +msgstr "다ìŒìœ¼ë¡œ 변환하기..." #: editor/editor_node.cpp msgid "MeshLibrary..." @@ -2604,7 +2638,7 @@ msgstr "ë˜ëŒë¦¬ê¸°" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp msgid "Redo" -msgstr "다시 실행" +msgstr "다시 실행하기" #: editor/editor_node.cpp msgid "Revert Scene" @@ -2619,18 +2653,28 @@ msgid "Project" msgstr "프로ì 트" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "프로ì 트 ì„¤ì •" +msgstr "프로ì 트 ì„¤ì •..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ë²„ì „ 컨트롤" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "ë²„ì „ 컨트롤 설치하기" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "ë²„ì „ 컨트롤 종료하기" #: editor/editor_node.cpp msgid "Export..." msgstr "내보내기..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "안드로ì´ë“œ 빌드 템플릿 설치하기" +msgstr "안드로ì´ë“œ 빌드 템플릿 설치하기..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2641,9 +2685,8 @@ msgid "Tools" msgstr "ë„구" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "미사용 리소스 íƒìƒ‰ê¸°" +msgstr "미사용 리소스 íƒìƒ‰ê¸°..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2656,19 +2699,19 @@ msgstr "디버그" #: editor/editor_node.cpp msgid "Deploy with Remote Debug" -msgstr "ì›ê²© 디버그 ë°°í¬" +msgstr "ì›ê²© 디버그와 함께 ë°°í¬í•˜ê¸°" #: editor/editor_node.cpp msgid "" "When exporting or deploying, the resulting executable will attempt to " "connect to the IP of this computer in order to be debugged." msgstr "" -"내보내기나 ë°°í¬ë¥¼ í• ë•Œ, 실행 파ì¼ì´ ë””ë²„ê¹…ì„ ìœ„í•´ì„œ ì´ ì»´í“¨í„°ì˜ IP로 ì—°ê²°ì„ " -"시ë„합니다." +"내보내거나 ë°°í¬í• 때, ê²°ê³¼ 실행 파ì¼ì€ ë””ë²„ê¹…ì„ ìœ„í•´ ì´ ì»´í“¨í„°ì˜ IP와 ì—°ê²°ì„ " +"시ë„í• ê±°ì˜ˆìš”." #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œì„ ê°–ëŠ” ìž‘ì€ ë°°í¬" +msgstr "ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œê³¼ 함께 작게 ë°°í¬í•˜ê¸°" #: editor/editor_node.cpp msgid "" @@ -2679,12 +2722,10 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This " "option speeds up testing for games with a large footprint." msgstr "" -"ì´ ì˜µì…˜ì´ í™œì„±í™” ë˜ì–´ ìžˆì„ ê²½ìš°, 내보내기나 ë°°í¬ëŠ” ìµœì†Œí•œì˜ ì‹¤í–‰ 파ì¼ì„ ìƒì„±" -"합니다.\n" -"íŒŒì¼ ì‹œìŠ¤í…œì€ ë„¤íŠ¸ì›Œí¬ë¥¼ 통해서 편집기 ìƒì˜ 프로ì 트가 ì œê³µí•©ë‹ˆë‹¤.\n" -"안드로ì´ë“œì˜ 경우, USB ì¼€ì´ë¸”ì„ ì‚¬ìš©í•˜ì—¬ ë°°í¬í• 경우 ë” ë¹ ë¥¸ í¼í¬ë¨¼ìŠ¤ë¥¼ ì œê³µ" -"합니다. ì´ ì˜µì…˜ì€ í° ì„¤ì¹˜ ìš©ëŸ‰ì„ ìš”êµ¬í•˜ëŠ” ê²Œìž„ì˜ í…ŒìŠ¤íŠ¸ë¥¼ ë¹ ë¥´ê²Œ í• ìˆ˜ 있습니" -"다." +"ì´ ì„¤ì •ì„ ì¼œë©´, 내보내거나 ë°°í¬í• 때 ìµœì†Œí•œì˜ ì‹¤í–‰ 파ì¼ì„ 만들어요.\n" +"ë„¤íŠ¸ì›Œí¬ ë„ˆë¨¸ 편집기가 프로ì 트ì—서 íŒŒì¼ ì‹œìŠ¤í…œì„ ì œê³µí• ê±°ì˜ˆìš”.\n" +"Androidì˜ ê²½ìš°, ë” ë¹ ë¥¸ ì„±ëŠ¥ì„ ì›í•œë‹¤ë©´ ë°°í¬í• 때 USB ì¼€ì´ë¸”ì„ ì‚¬ìš©í•˜ì„¸ìš”. " +"ì´ ì„¤ì •ì€ ì„¤ì¹˜ ê³µê°„ì´ í° ê²Œìž„ì„ ë¹¨ë¦¬ í…ŒìŠ¤íŠ¸í• ë•Œ 쓸 수 있어요." #: editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -2695,8 +2736,8 @@ msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" -"ì´ ì˜µì…˜ì´ í™œì„±í™” ë˜ì–´ ìžˆì„ ê²½ìš°, ê²Œìž„ì´ ì‹¤í–‰ë˜ëŠ” ë™ì•ˆ (2D와 3Dì˜) ì¶©ëŒ ëª¨ì–‘" -"ê³¼ Raycast 노드가 표시ë©ë‹ˆë‹¤." +"ì´ ì„¤ì •ì„ ì¼œë©´ ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ (2D와 3Dìš©) Collision 모양과 Raycast 노드" +"ê°€ ë³´ì´ê²Œ ë¼ìš”." #: editor/editor_node.cpp msgid "Visible Navigation" @@ -2707,12 +2748,11 @@ msgid "" "Navigation meshes and polygons will be visible on the running game if this " "option is turned on." msgstr "" -"ì´ ì˜µì…˜ì´ í™œì„±í™” ë˜ì–´ ìžˆì„ ê²½ìš°, ê²Œìž„ì´ ì‹¤í–‰ë˜ëŠ” ë™ì•ˆ 내비게ì´ì…˜ 메시가 표시" -"ë©ë‹ˆë‹¤." +"ì´ ì„¤ì •ì„ ì¼œë©´ ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ Navigation 메시와 í´ë¦¬ê³¤ì´ ë³´ì´ê²Œ ë¼ìš”." #: editor/editor_node.cpp msgid "Sync Scene Changes" -msgstr "씬 ë³€ê²½ì‚¬í• ë™ê¸°í™”" +msgstr "씬 변경 ì‚¬í• ë™ê¸°í™”하기" #: editor/editor_node.cpp msgid "" @@ -2721,14 +2761,13 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"ì´ ì˜µì…˜ì´ í™œì„±í™” ë˜ì–´ ìžˆì„ ê²½ìš°, 편집기 ìƒì˜ ì”¬ì˜ ë³€ê²½ì‚¬í•ì´ ì‹¤í–‰ ì¤‘ì¸ ê²Œìž„" -"ì— ë°˜ì˜ë©ë‹ˆë‹¤.\n" -"ê¸°ê¸°ì— ì›ê²©ìœ¼ë¡œ 사용ë˜ëŠ” 경우, ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œê³¼ 함께하면 ë”ìš± 효과ì ìž…" -"니다." +"ì´ ì„¤ì •ì„ ì¼œë©´, ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ 편집기ì—서 ì”¬ì˜ ë³€ê²½ 사í•ì´ ê²Œìž„ì— ì ìš©" +"ë¼ìš”.\n" +"기기를 ì›ê²©ì—서 ì‚¬ìš©í• ë•Œ, ì´ê²ƒì€ ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ ë”ìš± 효과ì ì´ì—ìš”." #: editor/editor_node.cpp msgid "Sync Script Changes" -msgstr "스í¬ë¦½íЏ ë³€ê²½ì‚¬í• ë™ê¸°í™”" +msgstr "스í¬ë¦½íЏ 변경 ì‚¬í• ë™ê¸°í™”하기" #: editor/editor_node.cpp msgid "" @@ -2737,19 +2776,16 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" -"ì´ ì˜µì…˜ì´ í™œì„±í™” ë˜ì–´ ìžˆì„ ê²½ìš°, 스í¬ë¦½íŠ¸ë¥¼ ìˆ˜ì •í•˜ê³ ì €ìž¥í•˜ë©´ ì‹¤í–‰ì¤‘ì¸ ê²Œìž„ì—" -"서 다시 ì½ì–´ 들입니다.\n" -"ê¸°ê¸°ì— ì›ê²©ìœ¼ë¡œ 사용ë˜ëŠ” 경우, ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œê³¼ 함께하면 ë”ìš± 효과ì ìž…" -"니다." +"ì´ ì„¤ì •ì„ ì¼œë©´, ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ ì €ìž¥í•œ ëª¨ë“ ìŠ¤í¬ë¦½íŠ¸ë¥¼ 새로 불러와요.\n" +"기기를 ì›ê²©ì—서 ì‚¬ìš©í• ë•Œ, ì´ê²ƒì€ ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œìœ¼ë¡œ ë”ìš± 효과ì ì´ì—ìš”." #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" msgstr "편집기" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "편집기 ì„¤ì •" +msgstr "편집기 ì„¤ì •..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2761,7 +2797,7 @@ msgstr "스í¬ë¦°ìƒ· ì°ê¸°" #: editor/editor_node.cpp msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "스í¬ë¦°ìƒ·ì´ Editor Data/Settings í´ë”ì— ì €ìž¥ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "스í¬ë¦°ìƒ·ì€ Editor Data/Settings í´ë”ì— ì €ìž¥ëì–´ìš”." #: editor/editor_node.cpp msgid "Toggle Fullscreen" @@ -2784,14 +2820,12 @@ msgid "Open Editor Settings Folder" msgstr "편집기 ì„¤ì • í´ë” 열기" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "편집기 기능 관리" +msgstr "편집기 기능 관리하기..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "내보내기 템플릿 관리" +msgstr "내보내기 템플릿 관리..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2829,56 +2863,52 @@ msgstr "ì •ë³´" #: editor/editor_node.cpp msgid "Play the project." -msgstr "프로ì 트 실행." +msgstr "프로ì 트 실행하기." #: editor/editor_node.cpp msgid "Play" -msgstr "실행" +msgstr "실행하기" #: editor/editor_node.cpp msgid "Pause the scene" -msgstr "씬 ì¼ì‹œ ì •ì§€" +msgstr "씬 멈추기" #: editor/editor_node.cpp msgid "Pause Scene" -msgstr "씬 ì¼ì‹œ ì •ì§€" +msgstr "씬 멈추기" #: editor/editor_node.cpp msgid "Stop the scene." -msgstr "씬 ì •ì§€." - -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "ì •ì§€" +msgstr "씬 중단하기." #: editor/editor_node.cpp msgid "Play the edited scene." -msgstr "편집 ì¤‘ì¸ ì”¬ 실행." +msgstr "편집 ì¤‘ì¸ ì”¬ 실행하기." #: editor/editor_node.cpp msgid "Play Scene" -msgstr "씬 실행" +msgstr "씬 실행하기" #: editor/editor_node.cpp msgid "Play custom scene" -msgstr "다른 씬 실행" +msgstr "다른 씬 실행하기" #: editor/editor_node.cpp msgid "Play Custom Scene" -msgstr "커스텀 씬 실행" +msgstr "맞춤 씬 실행하기" #: editor/editor_node.cpp msgid "Changing the video driver requires restarting the editor." -msgstr "비디오 드ë¼ì´ë²„를 ë³€ê²½í•˜ë ¤ë©´ 편집기를 다시 시작해야 합니다." +msgstr "비디오 드ë¼ì´ë²„를 ë³€ê²½í•˜ë ¤ë©´ 편집기를 다시 실행해야 í•´ìš”." #: editor/editor_node.cpp editor/project_settings_editor.cpp #: editor/settings_config_dialog.cpp msgid "Save & Restart" -msgstr "ì €ìž¥ & 다시 시작" +msgstr "ì €ìž¥ & 다시 시작하기" #: editor/editor_node.cpp msgid "Spins when the editor window redraws." -msgstr "편집기 ì°½ì´ ë‹¤ì‹œ ê·¸ë ¤ì§ˆ 때 íšŒì „í•©ë‹ˆë‹¤." +msgstr "편집기 ì°½ì´ ë³€í• ë•Œë§ˆë‹¤ ëŒ ê±°ì˜ˆìš”." #: editor/editor_node.cpp msgid "Update Continuously" @@ -2901,14 +2931,10 @@ msgid "Inspector" msgstr "ì¸ìŠ¤íŽ™í„°" #: editor/editor_node.cpp -msgid "Node" -msgstr "노드" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" -msgstr "하단 íŒ¨ë„ í™•ìž¥" +msgstr "하단 íŒ¨ë„ íŽ¼ì¹˜ê¸°" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "ì¶œë ¥" @@ -2918,8 +2944,7 @@ msgstr "ì €ìž¥í•˜ì§€ 않ìŒ" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." -msgstr "" -"안드로ì´ë“œ 빌드 í…œí”Œë¦¿ì´ ì¡´ìž¬í•˜ì§€ 않습니다, ê´€ë ¨ í…œí”Œë¦¿ì„ ì„¤ì¹˜í•˜ê¸° ë°”ëžë‹ˆë‹¤." +msgstr "안드로ì´ë“œ 빌드 í…œí”Œë¦¿ì´ ì—†ì–´ìš”, ê´€ë ¨ í…œí”Œë¦¿ì„ ì„¤ì¹˜í•´ì£¼ì„¸ìš”." #: editor/editor_node.cpp msgid "Manage Templates" @@ -2927,24 +2952,34 @@ msgstr "템플릿 관리" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"ì´ê²ƒì€ 커스텀 빌드를 위해 안드로ì´ë“œ 프로ì 트를 설치합니다.\n" -"ì‚¬ìš©í•˜ë ¤ë©´ ê°ê° 내보내기 í”„ë¦¬ì…‹ì„ í™œì„±í™”í•´ì•¼ 합니다." +"\"res://android/build\"ì— ì†ŒìŠ¤ í…œí”Œë¦¿ì„ ì„¤ì¹˜í•´ì„œ, 프로ì 트를 맞춤 안드로ì´ë“œ " +"ë¹Œë“œì— ë§žê²Œ ì„¤ì •í• ê±°ì—ìš”.\n" +"그런 ë‹¤ìŒ ìˆ˜ì • 사í•ì„ ì ìš©í•˜ê³ ë§žì¶¤ APK를 만들어 내보낼 수 있어요 (모듈 추가" +"하기, AndroidManifest.xml 바꾸기 등).\n" +"미리 ë¹Œë“œëœ APK를 사용하는 ëŒ€ì‹ ë§žì¶¤ 빌드를 ë§Œë“¤ë ¤ë©´, 안드로ì´ë“œ 내보내기 프" +"리셋ì—서 \"맞춤 빌드 사용하기\" ì„¤ì •ì„ ì¼œ 놓아야 í•´ìš”." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"안드로ì´ë“œ 빌드 í…œí”Œë¦¿ì´ ì´ë¯¸ 설치ë˜ì–´ ìžˆê³ ë®ì–´ 쓸 수 없습니다.\n" -"ëª…ë ¹ì„ ë‹¤ì‹œ 시ë„하기 ì „ì— ìˆ˜ë™ìœ¼ë¡œ \"build\" ë””ë ‰í† ë¦¬ë¥¼ ì‚ì œí•˜ì„¸ìš”." +"안드로ì´ë“œ 빌드 í…œí”Œë¦¿ì„ ì´ë¯¸ 설치한 ë°ë‹¤ê°€ ë®ì–´ 쓸 수 없네요.\n" +"ì´ ëª…ë ¹ì„ ë‹¤ì‹œ 실행하기 ì „ì— \"res://android/build\" ë””ë ‰í† ë¦¬ë¥¼ ì‚ì œí•˜ì„¸ìš”." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" -msgstr "ZIP 파ì¼ë¡œë¶€í„° í…œí”Œë¦¿ì„ ê°€ì ¸ì˜¤ê¸°" +msgstr "ZIP 파ì¼ì—서 템플릿 ê°€ì ¸ì˜¤ê¸°" #: editor/editor_node.cpp editor/project_export.cpp msgid "Export Project" @@ -2956,7 +2991,7 @@ msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬ 내보내기" #: editor/editor_node.cpp msgid "Merge With Existing" -msgstr "기존과 병합" +msgstr "ê¸°ì¡´ì˜ ê²ƒê³¼ 병합하기" #: editor/editor_node.cpp msgid "Password:" @@ -2964,7 +2999,7 @@ msgstr "암호:" #: editor/editor_node.cpp msgid "Open & Run a Script" -msgstr "스í¬ë¦½íŠ¸ë¥¼ ì—´ê³ ì‹¤í–‰" +msgstr "스í¬ë¦½íŠ¸ë¥¼ ì—´ê³ ì‹¤í–‰í•˜ê¸°" #: editor/editor_node.cpp msgid "New Inherited" @@ -2976,7 +3011,7 @@ msgstr "불러오기 오류" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp msgid "Select" -msgstr "ì„ íƒ" +msgstr "ì„ íƒí•˜ê¸°" #: editor/editor_node.cpp msgid "Open 2D Editor" @@ -3002,6 +3037,10 @@ msgstr "ë‹¤ìŒ íŽ¸ì§‘ê¸° 열기" msgid "Open the previous Editor" msgstr "ì´ì „ 편집기 열기" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "하위 리소스를 ì°¾ì„ ìˆ˜ 없어요." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "메시 미리보기 ìƒì„± 중" @@ -3011,8 +3050,12 @@ msgid "Thumbnail..." msgstr "ì¸ë„¤ì¼..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "기본 스í¬ë¦½íЏ:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" -msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘" +msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘í•˜ê¸°" #: editor/editor_plugin_settings.cpp msgid "Installed Plugins:" @@ -3039,11 +3082,6 @@ msgstr "ìƒíƒœ:" msgid "Edit:" msgstr "편집:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "시작" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "ì¸¡ì •:" @@ -3110,21 +3148,21 @@ msgstr "ì§€ì •í•˜ê¸°..." #: editor/editor_properties.cpp msgid "Invalid RID" -msgstr "올바르지 ì•Šì€ RID" +msgstr "ìž˜ëª»ëœ RID" #: editor/editor_properties.cpp msgid "" "The selected resource (%s) does not match any type expected for this " "property (%s)." -msgstr "ì„ íƒëœ 리소스 (%s)ê°€ ì´ ì†ì„± (%s)ì— ì•Œë§žì€ íƒ€ìž…ì´ ì•„ë‹™ë‹ˆë‹¤." +msgstr "ì„ íƒí•œ 리소스 (%s)ê°€ ì´ ì†ì„± (%s)ì— ì 합한 ëª¨ë“ ìœ í˜•ì— ë§žì§€ 않아요." #: editor/editor_properties.cpp msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." msgstr "" -"파ì¼ë¡œ ì €ìž¥ëœ ë¦¬ì†ŒìŠ¤ì—서 ViewportTexture를 만들 수 없습니다.\n" -"리소스가 ì”¬ì— ì†í•´ 있어야 합니다." +"파ì¼ë¡œ ì €ìž¥í•œ ë¦¬ì†ŒìŠ¤ì— ViewportTexture를 만들 수는 없어요.\n" +"리소스가 ì”¬ì— ì†í•´ 있어야 í•´ìš”." #: editor/editor_properties.cpp msgid "" @@ -3133,26 +3171,30 @@ msgid "" "Please switch on the 'local to scene' property on it (and all resources " "containing it up to a node)." msgstr "" -"리소스가 ì”¬ì— ë¡œì»¬ë¡œ ì„¤ì •ë˜ì§€ 않았기 ë•Œë¬¸ì— ViewportTexture를 만들 수 없습니" -"다.\n" -"ë¦¬ì†ŒìŠ¤ì˜ 'local to scene' ì†ì„±ì„ 켜ì‹ì‹œì˜¤ (ê·¸ë¦¬ê³ ëª¨ë“ ë¦¬ì†ŒìŠ¤ë¥¼ 노드가 í¬í•¨í•˜" -"ê³ ìžˆì–´ì•¼ 합니다)." +"ì”¬ì— ì§€ì—으로 ì„¤ì •ë˜ì§€ 않았기 ë•Œë¬¸ì— ì´ ë¦¬ì†ŒìŠ¤ì— ViewportTexture를 만들 수 ì—†" +"ì–´ìš”.\n" +"리소스 (ê·¸ë¦¬ê³ í•œ ë…¸ë“œì— ìžˆëŠ” ëª¨ë“ ë¦¬ì†ŒìŠ¤)ì˜ 'local to scene' ì†ì„±ì„ 켜주세" +"ìš” ." #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Pick a Viewport" -msgstr "ë·°í¬íЏ ì„ íƒ" +msgstr "ë·°í¬íЏ ì„ íƒí•˜ê¸°" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New Script" msgstr "새 스í¬ë¦½íЏ" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "스í¬ë¦½íЏ 펼치기" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "새 %s" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Make Unique" -msgstr "ê³ ìœ í•˜ê²Œ 만들기" +msgstr "ìœ ì¼í•˜ê²Œ 만들기" #: editor/editor_properties.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp @@ -3170,14 +3212,7 @@ msgstr "붙여넣기" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Convert To %s" -msgstr "%s로 변환" - -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "편집기 열기" +msgstr "%s(으)로 변환하기" #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" @@ -3185,7 +3220,7 @@ msgstr "ì„ íƒëœ 노드는 ë·°í¬íŠ¸ê°€ 아닙니다!" #: editor/editor_properties_array_dict.cpp msgid "Size: " -msgstr "사ì´ì¦ˆ: " +msgstr "í¬ê¸°: " #: editor/editor_properties_array_dict.cpp msgid "Page: " @@ -3194,7 +3229,7 @@ msgstr "페ì´ì§€: " #: editor/editor_properties_array_dict.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Item" -msgstr "ì•„ì´í…œ ì‚ì œ" +msgstr "í•목 ì‚ì œí•˜ê¸°" #: editor/editor_properties_array_dict.cpp msgid "New Key:" @@ -3206,47 +3241,47 @@ msgstr "새 ê°’:" #: editor/editor_properties_array_dict.cpp msgid "Add Key/Value Pair" -msgstr "키/ê°’ ìŒ ì¶”ê°€" +msgstr "키/ê°’ ìŒ ì¶”ê°€í•˜ê¸°" #: editor/editor_run_native.cpp msgid "" "No runnable export preset found for this platform.\n" "Please add a runnable preset in the export menu." msgstr "" -"ì´ í”Œëž«í¼ì— 대한 실행가능한 내보내기 í”„ë¦¬ì…‹ì„ ì°¾ì„ ìˆ˜ 없습니다.\n" -"내보내기 메뉴ì—서 실행가능한 í”„ë¦¬ì…‹ì„ ì¶”ê°€í•˜ì„¸ìš”." +"ì´ í”Œëž«í¼ìœ¼ë¡œ ì‹¤í–‰í• ìˆ˜ 있는 내보내기 í”„ë¦¬ì…‹ì´ ì—†ì–´ìš”.\n" +"내보내기 메뉴ì—서 ì‹¤í–‰í• ìˆ˜ 있는 í”„ë¦¬ì…‹ì„ ì¶”ê°€í•´ì£¼ì„¸ìš”." #: editor/editor_run_script.cpp msgid "Write your logic in the _run() method." -msgstr "_run() ë©”ì„œë“œì— ë¡œì§ì„ 작성하세요." +msgstr "_run() ë©”ì„œë“œì— ë‹¹ì‹ ì˜ ë…¼ë¦¬ë¥¼ 작성하세요." #: editor/editor_run_script.cpp msgid "There is an edited scene already." -msgstr "ì´ë¯¸ íŽ¸ì§‘ëœ ì”¬ì´ ìžˆìŠµë‹ˆë‹¤." +msgstr "ì´ë¯¸ íŽ¸ì§‘ëœ ì”¬ì´ ìžˆì–´ìš”." #: editor/editor_run_script.cpp msgid "Couldn't instance script:" -msgstr "스í¬ë¦½íŠ¸ë¥¼ ì¸ìŠ¤í„´ìŠ¤ í• ìˆ˜ 없습니다:" +msgstr "스í¬ë¦½íŠ¸ë¥¼ ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ ì—†ìŒ:" #: editor/editor_run_script.cpp msgid "Did you forget the 'tool' keyword?" -msgstr "'tool' 키워드를 잊으셨습니까?" +msgstr "'tool' 키워드를 잊었나요?" #: editor/editor_run_script.cpp msgid "Couldn't run script:" -msgstr "스í¬ë¦½íŠ¸ë¥¼ ì‹¤í–‰í• ìˆ˜ 없습니다:" +msgstr "스í¬ë¦½íŠ¸ë¥¼ ì‹¤í–‰í• ìˆ˜ ì—†ìŒ:" #: editor/editor_run_script.cpp msgid "Did you forget the '_run' method?" -msgstr "'_run' 메서드를 잊으셨습니까?" +msgstr "'_run' 메서드를 잊었나요?" #: editor/editor_sub_scene.cpp msgid "Select Node(s) to Import" -msgstr "ê°€ì ¸ì˜¬ 노드들 ì„ íƒ" +msgstr "ê°€ì ¸ì˜¬ 노드 ì„ íƒí•˜ê¸°" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" -msgstr "찾아보기" +msgstr "검색하기" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -3257,13 +3292,12 @@ msgid "Import From Node:" msgstr "노드ì—서 ê°€ì ¸ì˜¤ê¸°:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" -msgstr "다시 다운로드" +msgstr "다시 다운로드하기" #: editor/export_template_manager.cpp msgid "Uninstall" -msgstr "ì‚ì œ" +msgstr "ì‚ì œí•˜ê¸°" #: editor/export_template_manager.cpp msgid "(Installed)" @@ -3272,11 +3306,11 @@ msgstr "(설치ë¨)" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download" -msgstr "다운로드" +msgstr "다운로드하기" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "ê³µì‹ ë‚´ë³´ë‚´ê¸° í…œí”Œë¦¿ì€ ê°œë°œ 빌드ì—서는 ì´ìš©í• 수 없어요." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3288,31 +3322,31 @@ msgstr "(현재)" #: editor/export_template_manager.cpp msgid "Retrieving mirrors, please wait..." -msgstr "미러를 ê°€ì ¸ì˜¤ëŠ” 중입니다, ìž ì‹œë§Œ 기다리세요..." +msgstr "미러를 검색 중ì´ì—ìš”, ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”..." #: editor/export_template_manager.cpp msgid "Remove template version '%s'?" -msgstr "'%s' 템플릿 ë²„ì „ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "템플릿 ë²„ì „ '%s'ì„(를) ì‚ì œí• ê¹Œìš”?" #: editor/export_template_manager.cpp msgid "Can't open export templates zip." -msgstr "내보내기 템플릿 zip 파ì¼ì„ ì—´ 수 없습니다." +msgstr "내보내기 템플릿 zip 파ì¼ì„ ì—´ 수 없어요." #: editor/export_template_manager.cpp msgid "Invalid version.txt format inside templates: %s." -msgstr "템플릿 안 version.txtê°€ 올바르지 ì•Šì€ í˜•ì‹ìž…니다: %s." +msgstr "템플릿 ì†ì˜ version.txtê°€ ìž˜ëª»ëœ í˜•ì‹ìž„: %s." #: editor/export_template_manager.cpp msgid "No version.txt found inside templates." -msgstr "í…œí”Œë¦¿ì— version.txt를 ì°¾ì„ ìˆ˜ 없습니다." +msgstr "í…œí”Œë¦¿ì— version.txt를 ì°¾ì„ ìˆ˜ 없어요." #: editor/export_template_manager.cpp msgid "Error creating path for templates:" -msgstr "템플릿 경로 ìƒì„± 오류:" +msgstr "í…œí”Œë¦¿ì˜ ê²½ë¡œ ìƒì„± 중 오류:" #: editor/export_template_manager.cpp msgid "Extracting Export Templates" -msgstr "내보내기 템플릿 ì••ì¶•í•´ì œ 중" +msgstr "내보내기 템플릿 ì••ì¶• 푸는 중" #: editor/export_template_manager.cpp msgid "Importing:" @@ -3323,8 +3357,8 @@ msgid "" "No download links found for this version. Direct download is only available " "for official releases." msgstr "" -"ì´ ë²„ì „ì— ëŒ€í•œ 다운로드 ë§í¬ê°€ 없습니다. ê³µì‹ ë¦´ë¦¬ì¦ˆë§Œ 바로 다운로드가 가능합" -"니다." +"ì´ ë²„ì „ì˜ ë‹¤ìš´ë¡œë“œ ë§í¬ë¥¼ ì°¾ì„ ìˆ˜ 없어요. ê³µì‹ ì¶œì‹œ ë²„ì „ë§Œ 바로 ë‹¤ìš´ë¡œë“œí• " +"수 있어요." #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp @@ -3359,27 +3393,24 @@ msgid "Download Complete." msgstr "다운로드 완료." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "테마를 파ì¼ë¡œ ì €ìž¥í• ìˆ˜ 없습니다:" +msgstr "임시 파ì¼ì„ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"템플릿 ì„¤ì¹˜ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ë¬¸ì œê°€ 있는 템플릿 ì•„ì¹´ì´ë¸ŒëŠ” '%s' ì—서 확ì¸í•˜ì‹¤ " -"수 있습니다." +"템플릿 ì„¤ì¹˜ì— ì‹¤íŒ¨í–ˆì–´ìš”.\n" +"ë¬¸ì œê°€ 있는 템플릿 기ë¡ì€ '%s'ì—서 찾아 ë³¼ 수 있어요." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "url ìš”ì² ì˜¤ë¥˜: " +msgstr "URL ìš”ì² ì¤‘ 오류:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." -msgstr "ë¯¸ëŸ¬ì— ì—°ê²°ì¤‘..." +msgstr "ë¯¸ëŸ¬ì— ì—°ê²° 중..." #: editor/export_template_manager.cpp msgid "Disconnected" @@ -3396,7 +3427,7 @@ msgstr "í•´ê²°í• ìˆ˜ ì—†ìŒ" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connecting..." -msgstr "연결중..." +msgstr "ì—°ê²° 중..." #: editor/export_template_manager.cpp msgid "Can't Connect" @@ -3409,7 +3440,7 @@ msgstr "ì—°ê²°ë¨" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp msgid "Requesting..." -msgstr "ìš”ì²ì¤‘..." +msgstr "ìš”ì² ì¤‘..." #: editor/export_template_manager.cpp msgid "Downloading" @@ -3421,11 +3452,11 @@ msgstr "ì—°ê²° 오류" #: editor/export_template_manager.cpp msgid "SSL Handshake Error" -msgstr "SSL 핸드ì‰ì´í¬ 오류" +msgstr "SSL 핸드셰ì´í¬ 오류" #: editor/export_template_manager.cpp msgid "Uncompressing Android Build Sources" -msgstr "안드로ì´ë“œ 빌드 소스 ì••ì¶• í•´ì œ" +msgstr "안드로ì´ë“œ 빌드 소스 ì••ì¶• 푸는 중" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3437,15 +3468,15 @@ msgstr "ì„¤ì¹˜ëœ ë²„ì „:" #: editor/export_template_manager.cpp msgid "Install From File" -msgstr "파ì¼ë¡œë¶€í„° 설치" +msgstr "파ì¼ì—서 설치하기" #: editor/export_template_manager.cpp msgid "Remove Template" -msgstr "템플릿 ì‚ì œ" +msgstr "템플릿 ì‚ì œí•˜ê¸°" #: editor/export_template_manager.cpp msgid "Select Template File" -msgstr "템플릿 íŒŒì¼ ì„ íƒ" +msgstr "템플릿 íŒŒì¼ ì„ íƒí•˜ê¸°" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3453,7 +3484,7 @@ msgstr "내보내기 템플릿 ë§¤ë‹ˆì €" #: editor/export_template_manager.cpp msgid "Download Templates" -msgstr "템플릿 다운로드" +msgstr "템플릿 다운로드하기" #: editor/export_template_manager.cpp msgid "Select mirror from list: (Shift+Click: Open in Browser)" @@ -3466,19 +3497,20 @@ msgstr "ì¦ê²¨ì°¾ê¸°" #: editor/filesystem_dock.cpp msgid "Status: Import of file failed. Please fix file and reimport manually." msgstr "" -"ìƒíƒœ: íŒŒì¼ ê°€ì ¸ì˜¤ê¸° 실패. 파ì¼ì„ ìˆ˜ì •í•˜ê³ \"다시 ê°€ì ¸ì˜¤ê¸°\"를 수행하세요." +"ìƒíƒœ: íŒŒì¼ ê°€ì ¸ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆì–´ìš”. 수ë™ìœ¼ë¡œ 파ì¼ì„ ìˆ˜ì •í•˜ê³ ë‹¤ì‹œ ê°€ì ¸ì™€ 주세" +"ìš”." #: editor/filesystem_dock.cpp msgid "Cannot move/rename resources root." -msgstr "리소스 루트를 옮기거나 ì´ë¦„ì„ ë³€ê²½í• ìˆ˜ 없습니다." +msgstr "리소스 루트를 옮기거나 ì´ë¦„ì„ ë°”ê¿€ 수 없어요." #: editor/filesystem_dock.cpp msgid "Cannot move a folder into itself." -msgstr "í´ë”를 ìžì‹ ì˜ í•˜ìœ„ë¡œ ì´ë™í• 수 없습니다." +msgstr "í´ë”를 ìžì‹ ì˜ í•˜ìœ„ë¡œ 옮길 수 없어요." #: editor/filesystem_dock.cpp msgid "Error moving:" -msgstr "ì´ë™ 오류:" +msgstr "ì´ë™ 중 오류:" #: editor/filesystem_dock.cpp msgid "Error duplicating:" @@ -3486,39 +3518,39 @@ msgstr "ë³µì œ 중 오류:" #: editor/filesystem_dock.cpp msgid "Unable to update dependencies:" -msgstr "종ì†í•ëª©ì„ ì—…ë°ì´íЏ í• ìˆ˜ 없습니다:" +msgstr "ì¢…ì† í•ëª©ì„ ì—…ë°ì´íŠ¸í• ìˆ˜ ì—†ìŒ:" #: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp msgid "No name provided." -msgstr "ì´ë¦„ì´ ì œê³µë˜ì§€ 않았습니다." +msgstr "ì´ë¦„ì„ ì œê³µí•˜ì§€ 않았어요." #: editor/filesystem_dock.cpp msgid "Provided name contains invalid characters." -msgstr "ì œê³µëœ ì´ë¦„ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ë¬¸ìžê°€ 있습니다." +msgstr "ì œê³µí•œ ì´ë¦„ì— ìž˜ëª»ëœ ë¬¸ìžê°€ 있어요." #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." -msgstr "파ì¼ì´ë‚˜ í´ë”ê°€ 해당 ì´ë¦„ì„ ì‚¬ìš©ì¤‘ìž…ë‹ˆë‹¤." +msgstr "ì´ ì´ë¦„ì€ ì´ë¯¸ ì–´ë–¤ 파ì¼ì´ë‚˜ í´ë”ê°€ ì“°ê³ ìžˆì–´ìš”." #: editor/filesystem_dock.cpp msgid "Name contains invalid characters." -msgstr "ì´ë¦„ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ë¬¸ìžê°€ 있습니다." +msgstr "ì´ë¦„ì— ìž˜ëª»ëœ ë¬¸ìžê°€ 있어요." #: editor/filesystem_dock.cpp msgid "Renaming file:" -msgstr "파ì¼ëª… 변경:" +msgstr "íŒŒì¼ ì´ë¦„ 바꾸기:" #: editor/filesystem_dock.cpp msgid "Renaming folder:" -msgstr "í´ë”명 변경:" +msgstr "í´ë” ì´ë¦„ 바꾸기:" #: editor/filesystem_dock.cpp msgid "Duplicating file:" -msgstr "íŒŒì¼ ë³µì œ 중:" +msgstr "íŒŒì¼ ë³µì œí•˜ê¸°:" #: editor/filesystem_dock.cpp msgid "Duplicating folder:" -msgstr "ë³µì œ ì¤‘ì¸ í´ë”:" +msgstr "í´ë” ë³µì œí•˜ê¸°:" #: editor/filesystem_dock.cpp msgid "New Inherited Scene" @@ -3534,15 +3566,15 @@ msgstr "ì¸ìŠ¤í„´ìŠ¤" #: editor/filesystem_dock.cpp msgid "Add to Favorites" -msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ 추가" +msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ 추가하기" #: editor/filesystem_dock.cpp msgid "Remove from Favorites" -msgstr "ì¦ê²¨ì°¾ê¸°ì—서 ì‚ì œ" +msgstr "ì¦ê²¨ì°¾ê¸°ì—서 ì‚ì œí•˜ê¸°" #: editor/filesystem_dock.cpp msgid "Edit Dependencies..." -msgstr "ì¢…ì† ê´€ê³„ 편집..." +msgstr "ì¢…ì† ê´€ê³„ 편집하기..." #: editor/filesystem_dock.cpp msgid "View Owners..." @@ -3550,20 +3582,19 @@ msgstr "ì†Œìœ ìž ë³´ê¸°..." #: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp msgid "Rename..." -msgstr "ì´ë¦„ 변경..." +msgstr "ì´ë¦„ 바꾸기..." #: editor/filesystem_dock.cpp msgid "Duplicate..." -msgstr "ë³µì œ..." +msgstr "ë³µì œí•˜ê¸°..." #: editor/filesystem_dock.cpp msgid "Move To..." -msgstr "ì´ë™..." +msgstr "여기로 ì´ë™í•˜ê¸°..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "새 씬" +msgstr "새 씬..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3576,7 +3607,7 @@ msgstr "새 리소스..." #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp msgid "Expand All" -msgstr "ëª¨ë‘ í™•ìž¥" +msgstr "ëª¨ë‘ íŽ¼ì¹˜ê¸°" #: editor/filesystem_dock.cpp editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_editor_debugger.cpp @@ -3588,7 +3619,7 @@ msgstr "ëª¨ë‘ ì ‘ê¸°" #: editor/project_manager.cpp editor/rename_dialog.cpp #: editor/scene_tree_dock.cpp msgid "Rename" -msgstr "ì´ë¦„ 변경" +msgstr "ì´ë¦„ 바꾸기" #: editor/filesystem_dock.cpp msgid "Previous Folder/File" @@ -3600,7 +3631,7 @@ msgstr "ë‹¤ìŒ í´ë”/파ì¼" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" -msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 재검사" +msgstr "íŒŒì¼ ì‹œìŠ¤í…œ 다시 스캔하기" #: editor/filesystem_dock.cpp msgid "Toggle Split Mode" @@ -3608,32 +3639,31 @@ msgstr "ë¶„í• ëª¨ë“œ í† ê¸€" #: editor/filesystem_dock.cpp msgid "Search files" -msgstr "íŒŒì¼ ê²€ìƒ‰" +msgstr "íŒŒì¼ ê²€ìƒ‰í•˜ê¸°" #: editor/filesystem_dock.cpp msgid "" "Scanning Files,\n" "Please Wait..." msgstr "" -"íŒŒì¼ ìŠ¤ìº”ì¤‘,\n" -"ìž ì‹œë§Œ ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”..." +"íŒŒì¼ ìŠ¤ìº” 중,\n" +"ê¸°ë‹¤ë ¤ì£¼ì„¸ìš”..." #: editor/filesystem_dock.cpp msgid "Move" -msgstr "ì´ë™" +msgstr "ì´ë™í•˜ê¸°" #: editor/filesystem_dock.cpp msgid "There is already file or folder with the same name in this location." -msgstr "ê°™ì€ ì´ë¦„ì˜ íŒŒì¼ì´ë‚˜ í´ë”ê°€ ì´ë¯¸ 존재합니다." +msgstr "ì´ ìœ„ì¹˜ì—는 ê°™ì€ ì´ë¦„ì˜ íŒŒì¼ì´ë‚˜ í´ë”ê°€ 있어요." #: editor/filesystem_dock.cpp msgid "Overwrite" msgstr "ë®ì–´ 쓰기" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "씬으로부터 만들기" +msgstr "씬 만들기" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3660,8 +3690,8 @@ msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" -"ë‹¤ìŒ í™•ìž¥ìžëª…ì„ ê°–ëŠ” 파ì¼ì´ 있습니다. 프로ì 트 ì„¤ì •ì—서 추가하거나 ì œê±°í•˜ì„¸" -"ìš”." +"해당 확장ìžëª…으로 ëœ íŒŒì¼ì´ 있어요. 프로ì 트 ì„¤ì •ì— íŒŒì¼ì„ 추가하거나 ì‚ì œí•˜" +"세요." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3670,11 +3700,11 @@ msgstr "찾기..." #: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp msgid "Replace..." -msgstr "변경..." +msgstr "바꾸기..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp msgid "Cancel" -msgstr "취소" +msgstr "취소하기" #: editor/find_in_files.cpp msgid "Find: " @@ -3686,7 +3716,7 @@ msgstr "바꾸기: " #: editor/find_in_files.cpp msgid "Replace all (no undo)" -msgstr "ì „ì²´ 바꾸기 (ì·¨ì†Œí• ìˆ˜ ì—†ìŒ)" +msgstr "ì „ë¶€ 바꾸기 (ë˜ëŒë¦´ 수 없어요)" #: editor/find_in_files.cpp msgid "Searching..." @@ -3698,38 +3728,35 @@ msgstr "검색 완료" #: editor/groups_editor.cpp msgid "Add to Group" -msgstr "ê·¸ë£¹ì— ì¶”ê°€" +msgstr "ê·¸ë£¹ì— ì¶”ê°€í•˜ê¸°" #: editor/groups_editor.cpp msgid "Remove from Group" -msgstr "그룹ì—서 ì‚ì œ" +msgstr "그룹ì—서 ì‚ì œí•˜ê¸°" #: editor/groups_editor.cpp msgid "Group name already exists." -msgstr "그룹 ì´ë¦„ì´ ì´ë¯¸ 존재합니다." +msgstr "ì´ ê·¸ë£¹ ì´ë¦„ì€ ì´ë¯¸ 누가 ì“°ê³ ìžˆì–´ìš”." #: editor/groups_editor.cpp msgid "Invalid group name." -msgstr "그룹 ì´ë¦„ì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "ì´ ê·¸ë£¹ ì´ë¦„ì€ ìž˜ëª»ë˜ì—ˆì–´ìš”." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "그룹 관리" +msgstr "그룹 ì´ë¦„ 바꾸기" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "ì´ë¯¸ì§€ 그룹 ì‚ì œ" +msgstr "그룹 ì‚ì œí•˜ê¸°" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "그룹" +msgstr "그룹(Group)" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "ê·¸ë£¹ì— ìžˆì§€ ì•Šì€ ë…¸ë“œ" +msgstr "ê·¸ë£¹ì— ì†í•˜ì§€ 않는 노드" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3738,11 +3765,11 @@ msgstr "노드 í•„í„°" #: editor/groups_editor.cpp msgid "Nodes in Group" -msgstr "ê·¸ë£¹ì— ìžˆëŠ” 노드" +msgstr "ê·¸ë£¹ì— ì†í•œ 노드" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "빈 ê·¸ë£¹ì€ ìžë™ìœ¼ë¡œ ì‚ì œë˜ìš”." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3750,7 +3777,7 @@ msgstr "그룹 편집기" #: editor/groups_editor.cpp msgid "Manage Groups" -msgstr "그룹 관리" +msgstr "그룹 관리하기" #: editor/import/resource_importer_scene.cpp msgid "Import as Single Scene" @@ -3758,7 +3785,7 @@ msgstr "ë‹¨ì¼ ì”¬ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Animations" -msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ 분리시켜 ê°€ì ¸ì˜¤ê¸°" +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials" @@ -3766,15 +3793,15 @@ msgstr "ë¨¸í‹°ë¦¬ì–¼ì„ ë¶„ë¦¬í•´ì„œ ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects" -msgstr "오브ì 트를 분리해서 ê°€ì ¸ì˜¤ê¸°" +msgstr "ê°ì²´ë¥¼ 분리해서 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials" -msgstr "오브ì 트와 ë¨¸í‹°ë¦¬ì–¼ì„ ë¶„ë¦¬í•´ì„œ ê°€ì ¸ì˜¤ê¸°" +msgstr "ê°ì²´ì™€ ë¨¸í‹°ë¦¬ì–¼ì„ ë¶„ë¦¬í•´ì„œ ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Animations" -msgstr "오브ì 트와 ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" +msgstr "ê°ì²´ì™€ ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Materials+Animations" @@ -3782,11 +3809,11 @@ msgstr "머티리얼과 ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import with Separate Objects+Materials+Animations" -msgstr "오브ì 트, 머티리얼, ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" +msgstr "ê°ì²´, 머티리얼, ì• ë‹ˆë©”ì´ì…˜ì„ 분리해서 ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes" -msgstr "ì—¬ëŸ¬ê°œì˜ ì”¬ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°" +msgstr "여러 ê°œì˜ ì”¬ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°" #: editor/import/resource_importer_scene.cpp msgid "Import as Multiple Scenes+Materials" @@ -3807,24 +3834,23 @@ msgstr "ë¼ì´íŠ¸ë§µ ìƒì„± 중" #: editor/import/resource_importer_scene.cpp msgid "Generating for Mesh: " -msgstr "메시를 위해 ìƒì„± 중: " +msgstr "메시 용으로 ìƒì„± 중: " #: editor/import/resource_importer_scene.cpp msgid "Running Custom Script..." -msgstr "커스텀 스í¬ë¦½íЏ 실행 중..." +msgstr "맞춤 스í¬ë¦½íЏ 실행 중..." #: editor/import/resource_importer_scene.cpp msgid "Couldn't load post-import script:" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ë¥¼ 불러올 수 없습니다:" +msgstr "ê°€ì ¸ì˜¤ê¸° 후 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ:" #: editor/import/resource_importer_scene.cpp msgid "Invalid/broken script for post-import (check console):" -msgstr "" -"ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íŠ¸ê°€ 올바르지 않거나 ê¹¨ì ¸ 있습니다 (콘솔 확ì¸):" +msgstr "ê°€ì ¸ì˜¤ê¸° 후 스í¬ë¦½íŠ¸ê°€ 잘못ë˜ê±°ë‚˜ ê³ ìž¥ë‚¨ (ì½˜ì†”ì„ í™•ì¸í•˜ì„¸ìš”):" #: editor/import/resource_importer_scene.cpp msgid "Error running post-import script:" -msgstr "ê°€ì ¸ì˜¤ê¸° 후 ì‹¤í–‰í• ìŠ¤í¬ë¦½íЏ 실행 중 오류:" +msgstr "ê°€ì ¸ì˜¤ê¸° 후 스í¬ë¦½íЏ 실행 중 오류:" #: editor/import/resource_importer_scene.cpp msgid "Saving..." @@ -3832,11 +3858,11 @@ msgstr "ì €ìž¥ 중..." #: editor/import_dock.cpp msgid "Set as Default for '%s'" -msgstr "'%s'ì„(를) 기본으로 ì§€ì •" +msgstr "'%s'ì„(를) 기본으로 ì„¤ì •í•˜ê¸°" #: editor/import_dock.cpp msgid "Clear Default for '%s'" -msgstr "'%s'ì„(를) 기본ì—서 í•´ì œ" +msgstr "'%s'ì„(를) 기본ì—서 지우기" #: editor/import_dock.cpp msgid " Files" @@ -3846,9 +3872,9 @@ msgstr " 파ì¼" msgid "Import As:" msgstr "ë‹¤ìŒ í˜•ì‹ìœ¼ë¡œ ê°€ì ¸ì˜¤ê¸°:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "프리셋..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "프리셋" #: editor/import_dock.cpp msgid "Reimport" @@ -3860,18 +3886,18 @@ msgstr "씬 ì €ìž¥, 다시 ê°€ì ¸ì˜¤ê¸° ë° ë‹¤ì‹œ 시작" #: editor/import_dock.cpp msgid "Changing the type of an imported file requires editor restart." -msgstr "ê°€ì ¸ì˜¨ 파ì¼ì˜ íƒ€ìž…ì„ ë³€ê²½í•˜ë ¤ë©´ 편집기를 다시 시작해야 합니다." +msgstr "ê°€ì ¸ì˜¨ 파ì¼ì˜ ìœ í˜•ì„ ë°”ê¾¸ë ¤ë©´ 편집기를 다시 켜아 í•´ìš”." #: editor/import_dock.cpp msgid "" "WARNING: Assets exist that use this resource, they may stop loading properly." msgstr "" -"ê²½ê³ : ì´ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하는 ì• ì…‹ì´ ì¡´ìž¬í•©ë‹ˆë‹¤, ì• ì…‹ì„ ë¶ˆëŸ¬ì˜¤ì§€ ëª»í• ìˆ˜ 있습니" -"다." +"ê²½ê³ : ì´ ë¦¬ì†ŒìŠ¤ë¥¼ 사용하는 ì• ì…‹ì´ ìžˆì–´ìš”, ì •ìƒì 으로 불러오지 ëª»í• ìˆ˜ë„ ìžˆì–´" +"ìš”." #: editor/inspector_dock.cpp msgid "Failed to load resource." -msgstr "리소스 불러오기 실패." +msgstr "리소스 ë¶ˆëŸ¬ì˜¤ê¸°ì— ì‹¤íŒ¨í–ˆì–´ìš”." #: editor/inspector_dock.cpp msgid "Expand All Properties" @@ -3888,7 +3914,7 @@ msgstr "다른 ì´ë¦„으로 ì €ìž¥..." #: editor/inspector_dock.cpp msgid "Copy Params" -msgstr "ì†ì„± 복사" +msgstr "ì†ì„± 복사하기" #: editor/inspector_dock.cpp msgid "Paste Params" @@ -3896,7 +3922,7 @@ msgstr "ì†ì„± 붙여넣기" #: editor/inspector_dock.cpp msgid "Edit Resource Clipboard" -msgstr "리소스 í´ë¦½ë³´ë“œ 편집" +msgstr "리소스 í´ë¦½ë³´ë“œ 편집하기" #: editor/inspector_dock.cpp msgid "Copy Resource" @@ -3916,31 +3942,31 @@ msgstr "ë„움ë§ì—서 열기" #: editor/inspector_dock.cpp msgid "Create a new resource in memory and edit it." -msgstr "새로운 리소스를 ë©”ëª¨ë¦¬ì— ë§Œë“¤ê³ íŽ¸ì§‘í•©ë‹ˆë‹¤." +msgstr "새 리소스를 메모리ì—서 ë§Œë“¤ê³ íŽ¸ì§‘í•˜ê¸°." #: editor/inspector_dock.cpp msgid "Load an existing resource from disk and edit it." -msgstr "디스í¬ì—서 기존 리소스를 불러와 편집합니다." +msgstr "디스í¬ì—서 기존 리소스를 ë¶ˆëŸ¬ì˜¤ê³ íŽ¸ì§‘í•˜ê¸°." #: editor/inspector_dock.cpp msgid "Save the currently edited resource." -msgstr "현재 íŽ¸ì§‘ëœ ë¦¬ì†ŒìŠ¤ ì €ìž¥." +msgstr "현재 편집하는 리소스를 ì €ìž¥í•˜ê¸°." #: editor/inspector_dock.cpp msgid "Go to the previous edited object in history." -msgstr "기ë¡ì—서 ì´ì „ 편집한 대ìƒìœ¼ë¡œ 가기." +msgstr "기ë¡ì—서 ì´ì „ì— íŽ¸ì§‘í•œ ê°ì²´ë¡œ 가기." #: editor/inspector_dock.cpp msgid "Go to the next edited object in history." -msgstr "기ë¡ì—서 ë‹¤ìŒ íŽ¸ì§‘í•œ 대ìƒìœ¼ë¡œ 가기." +msgstr "기ë¡ì—서 다ìŒì— 편집한 ê°ì²´ë¡œ 가기." #: editor/inspector_dock.cpp msgid "History of recently edited objects." -msgstr "최근 편집 오브ì 트 ížˆìŠ¤í† ë¦¬." +msgstr "ìµœê·¼ì— íŽ¸ì§‘í•œ ê°ì²´ 기ë¡." #: editor/inspector_dock.cpp msgid "Object properties." -msgstr "오브ì 트 ì†ì„±." +msgstr "ê°ì²´ ì†ì„±." #: editor/inspector_dock.cpp msgid "Filter properties" @@ -3948,20 +3974,19 @@ msgstr "í•„í„° ì†ì„±" #: editor/inspector_dock.cpp msgid "Changes may be lost!" -msgstr "변경사í•ì„ ìžƒì„ ìˆ˜ 있습니다!" +msgstr "변경사í•ì„ ìžƒì„ ìˆ˜ë„ ìžˆì–´ìš”!" #: editor/multi_node_edit.cpp msgid "MultiNode Set" -msgstr "다중 노드 ì„¤ì •" +msgstr "다중 노드 ì„¤ì •í•˜ê¸°" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "시그ë„ê³¼ ê·¸ë£¹ì„ íŽ¸ì§‘í• ë…¸ë“œë¥¼ ì„ íƒí•˜ì„¸ìš”." +msgstr "시그ë„ê³¼ ê·¸ë£¹ì„ íŽ¸ì§‘í• ë…¸ë“œ 하나를 ì„ íƒí•˜ì„¸ìš”." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" -msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘" +msgstr "í”ŒëŸ¬ê·¸ì¸ íŽ¸ì§‘í•˜ê¸°" #: editor/plugin_config_dialog.cpp msgid "Create a Plugin" @@ -3975,7 +4000,7 @@ msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„:" msgid "Subfolder:" msgstr "하위 í´ë”:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "언어:" @@ -3985,7 +4010,7 @@ msgstr "스í¬ë¦½íЏ ì´ë¦„:" #: editor/plugin_config_dialog.cpp msgid "Activate now?" -msgstr "지금 ì‹¤í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "지금 ì‹¤í–‰í• ê¹Œìš”?" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -3996,7 +4021,7 @@ msgstr "í´ë¦¬ê³¤ 만들기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create points." -msgstr "í¬ì¸íЏ 만들기." +msgstr "ì 만들기." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "" @@ -4004,30 +4029,30 @@ msgid "" "LMB: Move Point\n" "RMB: Erase Point" msgstr "" -"í¬ì¸íЏ 편집.\n" -"좌í´ë¦: í¬ì¸íЏ ì´ë™\n" -"ìš°í´ë¦: í¬ì¸íЏ 지우기" +"ì 편집하기.\n" +"좌í´ë¦: ì ì´ë™í•˜ê¸°\n" +"ìš°í´ë¦: ì 지우기" #: editor/plugins/abstract_polygon_2d_editor.cpp #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Erase points." -msgstr "í¬ì¸íЏ 지우기." +msgstr "ì 지우기." #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Edit Polygon" -msgstr "í´ë¦¬ê³¤ 편집" +msgstr "í´ë¦¬ê³¤ 편집하기" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Insert Point" -msgstr "í¬ì¸íЏ 삽입" +msgstr "ì 삽입하기" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Edit Polygon (Remove Point)" -msgstr "í´ë¦¬ê³¤ 편집 (í¬ì¸íЏ ì‚ì œ)" +msgstr "í´ë¦¬ê³¤ 편집하기 (ì ì‚ì œí•˜ê¸°)" #: editor/plugins/abstract_polygon_2d_editor.cpp msgid "Remove Polygon And Point" -msgstr "í´ë¦¬ê³¤ê³¼ í¬ì¸íЏ ì‚ì œ" +msgstr "í´ë¦¬ê³¤ê³¼ ì ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4047,39 +4072,39 @@ msgstr "불러오기..." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Move Node Point" -msgstr "노드 í¬ì¸íЏ ì´ë™" +msgstr "노드 ì ì´ë™í•˜ê¸°" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Limits" -msgstr "BlendSpace1D ì œí•œ 변경" +msgstr "BlendSpace1D ì œí•œ 바꾸기" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Change BlendSpace1D Labels" -msgstr "BlendSpace1D ë¼ë²¨ 변경" +msgstr "BlendSpace1D ë¼ë²¨ 바꾸기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "This type of node can't be used. Only root nodes are allowed." -msgstr "ì´ íƒ€ìž…ì˜ ë…¸ë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 없습니다. ì˜¤ì§ ë£¨íŠ¸ 노드만 사용 가능합니다." +msgstr "ì´ ìœ í˜•ì˜ ë…¸ë“œë¥¼ ì‚¬ìš©í• ìˆ˜ 없어요. 루트 노드만 쓸 수 있어요." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Node Point" -msgstr "노드 í¬ì¸íЏ 추가" +msgstr "노드 ì 추가하기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Animation Point" -msgstr "ì• ë‹ˆë©”ì´ì…˜ í¬ì¸íЏ 추가" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì 추가하기" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Remove BlendSpace1D Point" -msgstr "BlendSpace1D í¬ì¸íЏ ì‚ì œ" +msgstr "BlendSpace1D ì ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_space_1d_editor.cpp msgid "Move BlendSpace1D Node Point" -msgstr "BlendSpace1D 노드 í¬ì¸íЏ ì´ë™" +msgstr "BlendSpace1D 노드 ì ì´ë™í•˜ê¸°" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4089,29 +4114,34 @@ msgid "" "AnimationTree is inactive.\n" "Activate to enable playback, check node warnings if activation fails." msgstr "" -"AnimationTree ê°€ 비활성 ìƒíƒœíž™ë‹ˆë‹¤.\n" -"ìƒíƒœë¥¼ 활성화하면 재ìƒí• 수 있습니다, í™œì„±í™”ì— ì‹¤íŒ¨í•˜ë©´ ë…¸ë“œì— ê²½ê³ ê°€ 있는지 " -"확ì¸í•˜ì„¸ìš”." +"AnimationTree ê°€ êº¼ì ¸ 있어요.\n" +"재ìƒí•˜ë ¤ë©´ AnimationTree를 ì¼œê³ , ì‹¤í–‰ì— ì‹¤íŒ¨í•˜ë©´ 노드 ê²½ê³ ë¥¼ 확ì¸í•˜ì„¸ìš”." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Set the blending position within the space" -msgstr "공간 ë‚´ì˜ í˜¼í•© 위치 ì„¤ì •" +msgstr "공간 ë‚´ì˜ í˜¼í•© ì§€ì ì„¤ì •í•˜ê¸°" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Select and move points, create points with RMB." -msgstr "í¬ì¸íŠ¸ë¥¼ ì„ íƒí•˜ê³ ì´ë™í•©ë‹ˆë‹¤, ìš°í´ë¦ìœ¼ë¡œ í¬ì¸íŠ¸ë¥¼ 만드실 수 있습니다." +msgstr "ì ì„ ì„ íƒí•˜ê³ ì´ë™í•´ìš”, ìš°í´ë¦ìœ¼ë¡œ ì ì„ ë§Œë“œì„¸ìš”." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp msgid "Enable snap and show grid." -msgstr "ìŠ¤ëƒ…ì„ í™œì„±í™” í•˜ê³ ê²©ìžë¥¼ ë³´ì´ê¸°." +msgstr "ìŠ¤ëƒ…ì„ ì¼œë©´ì„œ 격ìžë¥¼ ë³´ì´ê¸°." #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Point" -msgstr "í¬ì¸íЏ" +msgstr "ì " + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "편집기 열기" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4122,35 +4152,35 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 노드 열기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Triangle already exists." -msgstr "삼ê°í˜•ì´ ì´ë¯¸ 존재합니다." +msgstr "삼ê°í˜•ì´ ì´ë¯¸ 있어요." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Triangle" -msgstr "삼ê°í˜• 추가" +msgstr "삼ê°í˜• 추가하기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Limits" -msgstr "BlendSpace2D ì œí•œ 변경" +msgstr "BlendSpace2D ì œí•œ 바꾸기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Change BlendSpace2D Labels" -msgstr "BlendSpace2D ë¼ë²¨ 변경" +msgstr "BlendSpace2D ë¼ë²¨ 바꾸기" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Point" -msgstr "BlendSpace2D í¬ì¸íЏ ì‚ì œ" +msgstr "BlendSpace2D ì ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Remove BlendSpace2D Triangle" -msgstr "BlendSpace2D 삼ê°í˜• ì‚ì œ" +msgstr "BlendSpace2D 삼ê°í˜• ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "BlendSpace2D does not belong to an AnimationTree node." -msgstr "BlendSpace2Dê°€ AnimationTree ë…¸ë“œì— ì†í•´ìžˆì§€ 않습니다." +msgstr "BlendSpace2Dê°€ AnimationTree ë…¸ë“œì— ì†í•´ìžˆì§€ 않네요." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "No triangles exist, so no blending can take place." -msgstr "삼ê°í˜•ì´ ì¡´ìž¬í•˜ì§€ 않습니다, ë¸”ëžœë”©ì´ ì¼ì–´ë‚˜ì§€ 않습니다." +msgstr "삼ê°í˜•ì´ ì—†ì–´ìš”, í˜¼í•©ì´ ì¼ì–´ë‚˜ì§€ ì•Šì„ ê±°ì˜ˆìš”." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Toggle Auto Triangles" @@ -4158,20 +4188,20 @@ msgstr "ìžë™ 삼ê°í˜• í† ê¸€" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "í¬ì¸íŠ¸ë¥¼ 연결하여 삼ê°í˜• 만들기." +msgstr "ì ì„ ì—°ê²°í•˜ì—¬ 삼ê°í˜• 만들기." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Erase points and triangles." -msgstr "í¬ì¸íŠ¸ì™€ 삼ê°í˜• 지우기." +msgstr "ì ê³¼ 삼ê°í˜• 지우기." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "(ìˆ˜ë™ ëŒ€ì‹ ) ìžë™ìœ¼ë¡œ ë¸”ë Œë“œ 삼ê°í˜• 만들기" +msgstr "(ìˆ˜ë™ ëŒ€ì‹ ) ìžë™ìœ¼ë¡œ 혼합 삼ê°í˜• 만들기" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend:" -msgstr "ë¸”ë Œë“œ:" +msgstr "혼합:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Parameter Changed" @@ -4180,15 +4210,15 @@ msgstr "매개변수 변경ë¨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Filters" -msgstr "í•„í„° 편집" +msgstr "í•„í„° 편집하기" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Output node can't be added to the blend tree." -msgstr "ì¶œë ¥ 노드를 ë¸”ë Œë“œ íŠ¸ë¦¬ì— ì¶”ê°€í• ìˆ˜ 없습니다." +msgstr "ì¶œë ¥ 노드를 혼합 íŠ¸ë¦¬ì— ì¶”ê°€í• ìˆ˜ 없어요." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Add Node to BlendTree" -msgstr "BlendTreeì— ë…¸ë“œ 추가" +msgstr "BlendTreeì— ë…¸ë“œ 추가하기" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4197,7 +4227,7 @@ msgstr "노드 ì´ë™ë¨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." -msgstr "ì—°ê²°í• ìˆ˜ 없습니다, í¬íŠ¸ê°€ 사용 중ì´ê±°ë‚˜ 올바르지 않는 연결입니다." +msgstr "ì—°ê²°í• ìˆ˜ 없어요, í¬íŠ¸ê°€ 사용 중ì´ê±°ë‚˜ ìž˜ëª»ëœ ì—°ê²°ì¼ ê±°ì˜ˆìš”." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4211,17 +4241,17 @@ msgstr "노드 ì—°ê²° í•´ì œë¨" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Set Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì„¤ì •" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì„¤ì •í•˜ê¸°" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Delete Node" -msgstr "노드 ì‚ì œ" +msgstr "노드 ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "노드 ì‚ì œ" +msgstr "노드 ì‚ì œí•˜ê¸°" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Toggle Filter On/Off" @@ -4229,16 +4259,16 @@ msgstr "í•„í„° 켜기/ë„기 í† ê¸€" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Change Filter" -msgstr "í•„í„° 변경" +msgstr "í•„í„° 바꾸기" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "ì„¤ì •í•œ ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ 없습니다, 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." +msgstr "" +"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ ì„¤ì •ë˜ì§€ 않았어요, 그래서 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없어요." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." -msgstr "" -"올바르지 않는 í”Œë ˆì´ì–´ 경로 ì„¤ì •ìž…ë‹ˆë‹¤, 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." +msgstr "í”Œë ˆì´ì–´ 경로 ì„¤ì •ì´ ìž˜ëª»ëì–´ìš”, 그래서 트랙 ì´ë¦„ì„ ê²€ìƒ‰í• ìˆ˜ 없어요." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp @@ -4246,13 +4276,13 @@ msgid "" "Animation player has no valid root node path, so unable to retrieve track " "names." msgstr "" -"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ 올바른 루트 노드 경로를 ê°€ì§€ê³ ìžˆì§€ 않습니다, 트랙 ì´ë¦„" -"ì„ ê²€ìƒ‰í• ìˆ˜ 없습니다." +"ì• ë‹ˆë©”ì´ì…˜ í”Œë ˆì´ì–´ê°€ ìž˜ëª»ëœ ë£¨íŠ¸ 경로를 ê°–ê³ ìžˆì–´ìš”, 그래서 트랙 ì´ë¦„ì„ ê²€ìƒ‰" +"í• ìˆ˜ 없어요." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Renamed" -msgstr "노드 ì´ë¦„ 변경ë¨" +msgstr "노드 ì´ë¦„ 바뀜" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp @@ -4266,11 +4296,11 @@ msgstr "í•„í„° 트랙 편집:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Enable Filtering" -msgstr "í•„í„° 활성화" +msgstr "í•„í„° 켜기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "ìžë™ ìž¬ìƒ ì „í™˜" +msgstr "ìžë™ ìž¬ìƒ í† ê¸€" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" @@ -4282,37 +4312,38 @@ msgstr "새 ì• ë‹ˆë©”ì´ì…˜" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 변경:" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 바꾸기:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" -msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ì‚ì œí• ê¹Œìš”?" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Remove Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì‚ì œ" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì‚ì œí•˜ê¸°" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Invalid animation name!" -msgstr "올바르지 ì•Šì€ ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„!" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ìž˜ëª»ëì–´ìš”!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation name already exists!" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ì´ë¯¸ 존재합니다!" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ì´ ì´ë¯¸ 있어요!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Rename Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„ 바꾸기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Next Changed" -msgstr "ë¸”ë Œë“œ 다ìŒìœ¼ë¡œ 변경ë¨" +msgstr "혼합 다ìŒìœ¼ë¡œ 바뀜" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Blend Time" -msgstr "ë¸”ë Œë“œ 시간 변경" +msgstr "혼합 시간 바꾸기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Load Animation" @@ -4324,15 +4355,15 @@ 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!" -msgstr "í´ë¦½ë³´ë“œì— ì• ë‹ˆë©”ì´ì…˜ 리소스가 없습니다!" +msgstr "í´ë¦½ë³´ë“œì— ì• ë‹ˆë©”ì´ì…˜ 리소스가 없어요!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Pasted Animation" -msgstr "붙여진 ì• ë‹ˆë©”ì´ì…˜" +msgstr "붙여 ë„£ì€ ì• ë‹ˆë©”ì´ì…˜" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Paste Animation" @@ -4340,27 +4371,27 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 붙여넣기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "No animation to edit!" -msgstr "íŽ¸ì§‘í• ì• ë‹ˆë©”ì´ì…˜ì´ 없습니다!" +msgstr "íŽ¸ì§‘í• ì• ë‹ˆë©”ì´ì…˜ì´ 없어요!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from current pos. (A)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 현재 위치ì—서 거꾸로 재ìƒ. (A)" +msgstr "ì„ íƒí•œ ì• ë‹ˆë©”ì´ì…˜ì„ 현재 위치ì—서 거꾸로 재ìƒí•˜ê¸°. (A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation backwards from end. (Shift+A)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ ëì—서 거꾸로 재ìƒ. (Shift+A)" +msgstr "ì„ íƒí•œ ì• ë‹ˆë©”ì´ì…˜ì„ ëì—서 거꾸로 재ìƒí•˜ê¸°. (Shift+A)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Stop animation playback. (S)" -msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ì •ì§€. (S)" +msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ì •ì§€í•˜ê¸°. (S)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from start. (Shift+D)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 처ìŒë¶€í„° 재ìƒ. (Shift+D)" +msgstr "ì„ íƒí•œ ì• ë‹ˆë©”ì´ì…˜ì„ 처ìŒë¶€í„° 재ìƒí•˜ê¸°. (Shift+D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Play selected animation from current pos. (D)" -msgstr "ì„ íƒëœ ì• ë‹ˆë©”ì´ì…˜ì„ 현재 위치ì—서 재ìƒ. (D)" +msgstr "ì„ íƒí•œ ì• ë‹ˆë©”ì´ì…˜ì„ 현재 위치부터 재ìƒí•˜ê¸°. (D)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation position (in seconds)." @@ -4368,7 +4399,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ 위치 (ì´ˆ)." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Scale animation playback globally for the node." -msgstr "ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ì†ë„를 ì „ì²´ì 으로 ì¡°ì ˆ." +msgstr "ë…¸ë“œì˜ ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ê¸¸ì´ë¥¼ ì „ì²´ì 으로 ì¡°ì ˆí•˜ê¸°." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Animation Tools" @@ -4377,11 +4408,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ë„구" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "ì• ë‹ˆë©”ì´ì…˜" +msgstr "ì• ë‹ˆë©”ì´ì…˜(Animation)" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Edit Transitions..." -msgstr "ì „í™˜ 편집..." +msgstr "ì „í™˜ 편집하기..." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Open in Inspector" @@ -4389,15 +4420,15 @@ msgstr "ì¸ìŠ¤íŽ™í„°ì—서 열기" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." -msgstr "ì• ë‹ˆë©”ì´ì…˜ ëª©ë¡ í‘œì‹œ." +msgstr "ì• ë‹ˆë©”ì´ì…˜ ëª©ë¡ í‘œì‹œí•˜ê¸°." #: editor/plugins/animation_player_editor_plugin.cpp msgid "Autoplay on Load" -msgstr "불러올 시 ìžë™ 재ìƒ" +msgstr "불러올 시 ìžë™ìœ¼ë¡œ 재ìƒí•˜ê¸°" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Enable Onion Skinning" -msgstr "어니언 ìŠ¤í‚¤ë‹ í™œì„±í™”" +msgstr "어니언 ìŠ¤í‚¤ë‹ ì¼œê¸°" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Onion Skinning Options" @@ -4421,23 +4452,23 @@ msgstr "깊ì´" #: editor/plugins/animation_player_editor_plugin.cpp msgid "1 step" -msgstr "1 단계" +msgstr "1단계" #: editor/plugins/animation_player_editor_plugin.cpp msgid "2 steps" -msgstr "2 단계" +msgstr "2단계" #: editor/plugins/animation_player_editor_plugin.cpp msgid "3 steps" -msgstr "3 단계" +msgstr "3단계" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Differences Only" -msgstr "변경사í•ë§Œ" +msgstr "변경 사í•ë§Œ" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Force White Modulate" -msgstr "ê°•ì œ í°ìƒ‰ ì¡°ì ˆ" +msgstr "ê°•ì œ í°ìƒ‰ ì¡°ì ˆí•˜ê¸°" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Include Gizmos (3D)" @@ -4459,13 +4490,12 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ì´ë¦„:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "오류!" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Blend Times:" -msgstr "ë¸”ë Œë“œ 시간:" +msgstr "혼합 시간:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Next (Auto Queue):" @@ -4473,24 +4503,24 @@ msgstr "ë‹¤ìŒ (ìžë™ í):" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Cross-Animation Blend Times" -msgstr "êµì°¨-ì• ë‹ˆë©”ì´ì…˜ ë¸”ë Œë“œ 시간" +msgstr "êµì°¨-ì• ë‹ˆë©”ì´ì…˜ 혼합 시간" #: editor/plugins/animation_state_machine_editor.cpp msgid "Move Node" -msgstr "노드 ì´ë™" +msgstr "노드 ì´ë™í•˜ê¸°" #: editor/plugins/animation_state_machine_editor.cpp msgid "Add Transition" -msgstr "ì „í™˜ 추가" +msgstr "ì „í™˜ 추가하기" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp msgid "Add Node" -msgstr "노드 추가" +msgstr "노드 추가하기" #: editor/plugins/animation_state_machine_editor.cpp msgid "End" -msgstr "End" +msgstr "ë" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" @@ -4506,15 +4536,15 @@ msgstr "ëì—서" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "ì´ë™" +msgstr "ì´ë™í•˜ê¸°" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." -msgstr "하위 ì „í™˜ì— ì‹œìž‘ê³¼ ë 노드가 필요합니다." +msgstr "하위 ì „í™˜ì—는 시작과 ë 노드가 필요해요." #: editor/plugins/animation_state_machine_editor.cpp msgid "No playback resource set at path: %s." -msgstr "ë‹¤ìŒ ê²½ë¡œì— ì„¤ì •ëœ ìž¬ìƒ ë¦¬ì†ŒìŠ¤ê°€ 없습니다: %s." +msgstr "ì´ ê²½ë¡œì— ì„¤ì •í•œ ìž¬ìƒ ë¦¬ì†ŒìŠ¤ê°€ ì—†ìŒ: %s." #: editor/plugins/animation_state_machine_editor.cpp msgid "Node Removed" @@ -4526,7 +4556,7 @@ msgstr "ì „í™˜ ì‚ì œë¨" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "시작 노드 ì„¤ì • (ìžë™ 재ìƒ)" +msgstr "시작 노드 ì„¤ì •í•˜ê¸° (ìžë™ 재ìƒ)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4534,9 +4564,9 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" -"노드를 ì„ íƒí•˜ê³ ì´ë™í•˜ì‹ì‹œì˜¤.\n" -"ìš°í´ë¦ìœ¼ë¡œ 새 노드를 추가합니다.\n" -"Shift+좌í´ë¦ìœ¼ë¡œ ì—°ê²°ì„ ë§Œë“니다." +"노드를 ì„ íƒí•˜ê³ ì´ë™í•´ìš”.\n" +"ìš°í´ë¦ìœ¼ë¡œ 새 노드를 추가해요.\n" +"Shift+좌í´ë¦ìœ¼ë¡œ ì—°ê²°ì„ ë§Œë“¤ì–´ìš”." #: editor/plugins/animation_state_machine_editor.cpp msgid "Create new nodes." @@ -4544,21 +4574,20 @@ msgstr "새 노드 만들기." #: editor/plugins/animation_state_machine_editor.cpp msgid "Connect nodes." -msgstr "노드 ì—°ê²°." +msgstr "노드 연결하기." #: editor/plugins/animation_state_machine_editor.cpp msgid "Remove selected node or transition." -msgstr "ì„ íƒëœ 노드나 ì „í™˜ ì‚ì œí•˜ê¸°." +msgstr "ì„ íƒí•œ 노드나 ì „í™˜ ì‚ì œí•˜ê¸°." #: editor/plugins/animation_state_machine_editor.cpp msgid "Toggle autoplay this animation on start, restart or seek to zero." msgstr "" -"ì´ ì• ë‹ˆë©”ì´ì…˜ì´ 시작, 재시작, 아니면 0으로 ê°ˆ 때 ìžë™ìœ¼ë¡œ ì‹œìž‘í• ì§€ë¥¼ 키거나 " -"ë•니다." +"ì´ ì• ë‹ˆë©”ì´ì…˜ì„ 시작, 다시 시작 í˜¹ì€ 0으로 ê°€ë„ë¡ ìžë™ìœ¼ë¡œ 재ìƒì„ í† ê¸€." #: editor/plugins/animation_state_machine_editor.cpp msgid "Set the end animation. This is useful for sub-transitions." -msgstr "ë ì• ë‹ˆë©”ì´ì…˜ì„ ì„¤ì •í•©ë‹ˆë‹¤. ì´ê²ƒì€ 하위 ì „í™˜ì— ìœ ìš©í•©ë‹ˆë‹¤." +msgstr "ë ì• ë‹ˆë©”ì´ì…˜ì„ ì„¤ì •í•´ìš”. ì´ê²ƒì€ 하위 ì „í™˜ì— ìœ ìš©í•´ìš”." #: editor/plugins/animation_state_machine_editor.cpp msgid "Transition: " @@ -4588,7 +4617,7 @@ msgstr "페ì´ë“œ 아웃 (ì´ˆ):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend" -msgstr "ë¸”ë Œë“œ" +msgstr "혼합" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Mix" @@ -4617,43 +4646,45 @@ msgstr "ì–‘:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 0:" -msgstr "ë¸”ë Œë“œ 0:" +msgstr "혼합 0:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend 1:" -msgstr "ë¸”ë Œë“œ 1:" +msgstr "혼합 1:" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "X-Fade Time (s):" -msgstr "í¬ë¡œìФ 페ì´ë“œ 시간 (ì´ˆ):" +msgstr "X-페ì´ë“œ 시간 (ì´ˆ):" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Current:" msgstr "현재:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" -msgstr "ìž…ë ¥ 추가" +msgstr "ìž…ë ¥ 추가하기" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Clear Auto-Advance" -msgstr "ìžë™ ì§„í–‰ ì‚ì œ" +msgstr "ìžë™ ì§„í–‰ 지우기" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Set Auto-Advance" -msgstr "ìžë™ ì§„í–‰ ì„¤ì •" +msgstr "ìžë™ ì§„í–‰ ì„¤ì •í•˜ê¸°" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Delete Input" -msgstr "ìž…ë ¥ ì‚ì œ" +msgstr "ìž…ë ¥ ì‚ì œí•˜ê¸°" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is valid." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 올바릅니다." +msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리는 ì •ìƒì´ì—ìš”." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation tree is invalid." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 올바르지 않습니다." +msgstr "ì• ë‹ˆë©”ì´ì…˜ 트리가 잘못ëì–´ìš”." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Animation Node" @@ -4669,15 +4700,15 @@ msgstr "믹스 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend2 Node" -msgstr "ë¸”ë Œë“œ2 노드" +msgstr "혼합2 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend3 Node" -msgstr "ë¸”ë Œë“œ3 노드" +msgstr "혼합3 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Blend4 Node" -msgstr "ë¸”ë Œë“œ4 노드" +msgstr "혼합4 노드" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "TimeScale Node" @@ -4697,7 +4728,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ ê°€ì ¸ì˜¤ê¸°..." #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Edit Node Filters" -msgstr "노드 í•„í„° 편집" +msgstr "노드 í•„í„° 편집하기" #: editor/plugins/animation_tree_player_editor_plugin.cpp msgid "Filters..." @@ -4705,7 +4736,7 @@ msgstr "í•„í„°..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Contents:" -msgstr "컨í…ì¸ :" +msgstr "ë‚´ìš©:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "View Files" @@ -4713,7 +4744,7 @@ msgstr "íŒŒì¼ ë³´ê¸°" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Connection error, please try again." -msgstr "ì—°ê²° 오류, 다시 시ë„í•´ 주세요." +msgstr "ì—°ê²° 오류, 다시 시ë„해주세요." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't connect to host:" @@ -4721,52 +4752,47 @@ msgstr "í˜¸ìŠ¤íŠ¸ì— ì—°ê²°í• ìˆ˜ ì—†ìŒ:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "No response from host:" -msgstr "호스트로부터 ì‘답 ì—†ìŒ:" +msgstr "í˜¸ìŠ¤íŠ¸ì˜ ì‘답 ì—†ìŒ:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Can't resolve hostname:" -msgstr "í˜¸ìŠ¤íŠ¸ëª…ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:" +msgstr "호스트 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "ìš”ì² ì‹¤íŒ¨, 리턴 코드:" +msgstr "ìš”ì² ì‹¤íŒ¨, 반환 코드:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "ìš”ì² ì‹¤íŒ¨." +msgstr "ìš”ì² ì‹¤íŒ¨í•¨." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "테마를 파ì¼ë¡œ ì €ìž¥í• ìˆ˜ 없습니다:" +msgstr "ì‘ë‹µì„ ì €ìž¥í• ìˆ˜ ì—†ìŒ:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "작성 오류." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "너무 ë§Žì€ ë¦¬ë‹¤ì´ë ‰íŠ¸ë¡œ, ìš”ì² ì‹¤íŒ¨" +msgstr "ìš”ì² ì‹¤íŒ¨, 너무 ë§Žì€ ë¦¬ë‹¤ì´ë ‰íЏ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "리다ì´ë ‰íЏ 루프." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "ìš”ì² ì‹¤íŒ¨, 리턴 코드:" +msgstr "ìš”ì² ì‹¤íŒ¨, 시간 초과" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "시간" +msgstr "시간 초과." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." -msgstr "ìž˜ëª»ëœ ë‹¤ìš´ë¡œë“œ 해시, 파ì¼ì´ ë³€ê²½ëœ ê²ƒìœ¼ë¡œ 보입니다." +msgstr "ìž˜ëª»ëœ ë‹¤ìš´ë¡œë“œ 해시, 파ì¼ì´ ë³€ì¡°ëœ ê²ƒ 같아요." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Expected:" @@ -4810,7 +4836,7 @@ msgstr "설치하기..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" -msgstr "다시 시ë„" +msgstr "다시 시ë„하기" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download Error" @@ -4818,7 +4844,7 @@ msgstr "다운로드 오류" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Download for this asset is already in progress!" -msgstr "ì´ ì• ì…‹ì˜ ë‹¤ìš´ë¡œë“œê°€ ì´ë¯¸ 진행중입니다!" +msgstr "ì´ ì• ì…‹ì€ ì´ë¯¸ 다운로드 중ì´ì—ìš”!" #: editor/plugins/asset_library_editor_plugin.cpp msgid "First" @@ -4841,24 +4867,22 @@ msgid "All" msgstr "모ë‘" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "다시 ê°€ì ¸ì˜¤ê¸°..." +msgstr "ê°€ì ¸ì˜¤ê¸°..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "플러그ì¸" +msgstr "플러그ì¸..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "ì •ë ¬:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "ì—순 ì •ë ¬." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "ì¹´í…Œê³ ë¦¬:" @@ -4868,9 +4892,8 @@ msgid "Site:" msgstr "사ì´íЏ:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "ì§€ì›..." +msgstr "ì§€ì›" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4878,12 +4901,11 @@ msgstr "ê³µì‹" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Testing" -msgstr "테스팅" +msgstr "실험" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "불러오기..." +msgstr "불러오는 중..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -4895,21 +4917,21 @@ msgid "" "Save your scene (for images to be saved in the same dir), or pick a save " "path from the BakedLightmap properties." msgstr "" -"ë¼ì´íŠ¸ë§µ ì´ë¯¸ì§€ë“¤ì˜ ì €ìž¥ 경로를 íŒŒì•…í• ìˆ˜ 없습니다.\n" -"(해당 ê²½ë¡œì— ì´ë¯¸ì§€ë“¤ì´ ì €ìž¥ ë 수 있ë„ë¡) ì”¬ì„ ì €ìž¥í•˜ê±°ë‚˜ BakedLightmap ì„¤ì •" -"ì—서 ì €ìž¥ 경로를 ì§€ì •í•˜ì„¸ìš”." +"ë¼ì´íŠ¸ë§µ ì´ë¯¸ì§€ì˜ ì €ìž¥ 경로를 íŒŒì•…í• ìˆ˜ 없네요.\n" +"(ê°™ì€ ê²½ë¡œì— ì´ë¯¸ì§€ë¥¼ ì €ìž¥í• ìˆ˜ 있ë„ë¡) ì”¬ì„ ì €ìž¥í•˜ê±°ë‚˜, BakedLightmap ì†ì„±ì—" +"서 ì €ìž¥ 경로를 ì§€ì •í•˜ì„¸ìš”." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "" "No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake " "Light' flag is on." msgstr "" -"ë² ì´í¬í• 메시가 없습니다. 메시가 UV2 채ë„ì„ ê°€ì§€ê³ ìžˆìœ¼ë©° 'Bake Light' í•목" -"ì´ ì²´í¬ë˜ì–´ 있는지 í™•ì¸ í•´ 주세요." +"ë¼ì´íŠ¸ë§µì„ êµ¬ìš¸ 메시가 없어요. 메시가 UV2 채ë„ì„ ê°–ê³ ìžˆê³ 'Bake Light' 플래" +"그가 ì¼œì ¸ 있는지 확ì¸í•´ì£¼ì„¸ìš”." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Failed creating lightmap images, make sure path is writable." -msgstr "ë¼ì´íŠ¸ë§µ ì´ë¯¸ì§€ ìƒì„±ì— 실패했습니다, 경로가 쓸 수 있는지 확ì¸í•˜ì„¸ìš”." +msgstr "ë¼ì´íŠ¸ë§µ ì´ë¯¸ì§€ ìƒì„± 실패, 작성 가능한 경로ì¸ì§€ 확ì¸í•´ì£¼ì„¸ìš”." #: editor/plugins/baked_lightmap_editor_plugin.cpp msgid "Bake Lightmaps" @@ -4918,7 +4940,7 @@ msgstr "ë¼ì´íŠ¸ë§µ 굽기" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp msgid "Preview" -msgstr "미리보기" +msgstr "미리 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Configure Snap" @@ -4930,7 +4952,7 @@ msgstr "ê²©ìž ì˜¤í”„ì…‹:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Grid Step:" -msgstr "ê²©ìž ìŠ¤í…:" +msgstr "ê²©ìž ë‹¨ê³„:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Offset:" @@ -4938,11 +4960,11 @@ msgstr "íšŒì „ 오프셋:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotation Step:" -msgstr "íšŒì „ 스í…:" +msgstr "íšŒì „ 단계:" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Vertical Guide" -msgstr "ìˆ˜ì§ ê°€ì´ë“œ ì´ë™" +msgstr "ìˆ˜ì§ ê°€ì´ë“œ ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Vertical Guide" @@ -4950,11 +4972,11 @@ msgstr "ìˆ˜ì§ ê°€ì´ë“œ 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Vertical Guide" -msgstr "ìˆ˜ì§ ê°€ì´ë“œ ì‚ì œ" +msgstr "ìˆ˜ì§ ê°€ì´ë“œ ì‚ì œí•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move Horizontal Guide" -msgstr "ìˆ˜í‰ ê°€ì´ë“œ ì´ë™" +msgstr "ìˆ˜í‰ ê°€ì´ë“œ ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal Guide" @@ -4962,7 +4984,7 @@ msgstr "ìˆ˜í‰ ê°€ì´ë“œ 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Remove Horizontal Guide" -msgstr "ìˆ˜í‰ ê°€ì´ë“œ ì‚ì œ" +msgstr "ìˆ˜í‰ ê°€ì´ë“œ ì‚ì œí•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Horizontal and Vertical Guides" @@ -4970,19 +4992,19 @@ msgstr "ìˆ˜í‰ ë° ìˆ˜ì§ ê°€ì´ë“œ 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move pivot" -msgstr "피벗 ì´ë™" +msgstr "피벗 ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Rotate CanvasItem" -msgstr "CanvasItem íšŒì „" +msgstr "CanvasItem íšŒì „í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move anchor" -msgstr "앵커 ì´ë™" +msgstr "앵커 ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Resize CanvasItem" -msgstr "CanvasItem í¬ê¸° ì¡°ì ˆ" +msgstr "CanvasItem í¬ê¸° ì¡°ì ˆí•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale CanvasItem" @@ -4990,13 +5012,13 @@ msgstr "CanvasItem 규모" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move CanvasItem" -msgstr "CanvasItem ì´ë™" +msgstr "CanvasItem ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Children of containers have their anchors and margins values overridden by " "their parent." -msgstr "컨테ì´ë„ˆì˜ ìžë…€ëŠ” ë¶€ëª¨ì— ì˜í•´ ê·¸ë“¤ì˜ ì•µì»¤ì™€ 여백 ê°’ì´ ìž¬ì •ì˜ë©ë‹ˆë‹¤." +msgstr "컨테ì´ë„ˆì˜ ìžì‹ì€ 부모로 ì¸í•´ 다시 ì •ì˜ëœ 앵커와 여백 ê°’ì„ ê°€ì ¸ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Presets for the anchors and margins values of a Control node." @@ -5006,7 +5028,7 @@ msgstr "Control ë…¸ë“œì˜ ì•µì»¤ì™€ 여백 ê°’ì˜ í”„ë¦¬ì…‹." msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." -msgstr "활성화하면, 움ì§ì´ëŠ” Control 노드는 ë§ˆì§„ì´ ì•„ë‹Œ 앵커를 변경합니다." +msgstr "켜게 ë˜ë©´, 움ì§ì´ëŠ” Control 노드는 ì—¬ë°±ì´ ì•„ë‹Œ 앵커를 변경합니다." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5014,40 +5036,39 @@ msgstr "앵커만" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors and Margins" -msgstr "앵커와 여백 변경" +msgstr "앵커와 여백 바꾸기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Anchors" -msgstr "앵커 변경" +msgstr "앵커 바꾸기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock Selected" -msgstr "ì„ íƒ í•목 ìž ê¸ˆ" +msgstr "ì„ íƒ í•목 ìž ê·¸ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock Selected" -msgstr "ì„ íƒ í•목 ìž ê¸ˆ í•´ì œ" +msgstr "ì„ íƒ í•목 ìž ê¸ˆ 풀기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Group Selected" -msgstr "ì„ íƒ í•ë…¹ 그룹화" +msgstr "ì„ íƒ í•목 묶기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Ungroup Selected" -msgstr "ì„ íƒ í•목 그룹 í•´ì œ" +msgstr "ì„ íƒ í•목 ë¬¶ìŒ í’€ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" -msgstr "í¬ì¦ˆ 붙여넣기" +msgstr "í¬ì¦ˆ 붙여 넣기" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "본 지우기" +msgstr "ê°€ì´ë“œ 지우기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5069,7 +5090,7 @@ msgstr "IK ì²´ì¸ ì§€ìš°ê¸°" msgid "" "Warning: Children of a container get their position and size determined only " "by their parent." -msgstr "ê²½ê³ : 컨테ì´ë„ˆì˜ ìžì‹ì€ ë¶€ëª¨ì— ì˜í•´ ê²°ì •ëœ ìœ„ì¹˜ì™€ 규모를 갖습니다." +msgstr "ê²½ê³ : 컨테ì´ë„ˆì˜ ìžì‹ 규모와 위치는 ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë˜ì–´ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/texture_region_editor_plugin.cpp @@ -5088,15 +5109,15 @@ msgstr "드래그: íšŒì „" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+Drag: Move" -msgstr "알트+드래그: ì´ë™" +msgstr "Alt+드래그: ì´ë™í•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)." -msgstr "'v'키로 피벗 변경, 'Shift+v'키로 피벗 드래그 (ì´ë™í•˜ëŠ” ë™ì•ˆ)." +msgstr "'v'키로 피벗 바꾸기, 'Shift+v'키로 피벗 드래그 (ì´ë™í•˜ëŠ” ë™ì•ˆ)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Alt+RMB: Depth list selection" -msgstr "알트+ìš°í´ë¦: 겹친 ëª©ë¡ ì„ íƒ" +msgstr "Alt+ìš°í´ë¦: 겹친 ëª©ë¡ ì„ íƒí•˜ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5111,7 +5132,7 @@ msgstr "íšŒì „ 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Scale Mode" -msgstr "규모 모드" +msgstr "í¬ê¸° ì¡°ì ˆ 모드" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5119,37 +5140,48 @@ msgid "" "Show a list of all objects at the position clicked\n" "(same as Alt+RMB in select mode)." msgstr "" -"í´ë¦í•œ ìœ„ì¹˜ì— ìžˆëŠ” ëª¨ë“ ì˜¤ë¸Œì íŠ¸ë“¤ì˜ ëª©ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤\n" -"(ì„ íƒëª¨ë“œì—서 Alt+ìš°í´ë¦ê³¼ 같습니다)." +"í´ë¦í•œ ìœ„ì¹˜ì— ìžˆëŠ” ëª¨ë“ ê°ì²´ 목ë¡ì„ 보여줘요\n" +"(ì„ íƒ ëª¨ë“œì—서 Alt+ìš°í´ë¦ê³¼ ê°™ìŒ)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Click to change object's rotation pivot." -msgstr "오브ì íŠ¸ì˜ íšŒì „ 피벗 변경." +msgstr "í´ë¦ìœ¼ë¡œ ê°ì²´ì˜ íšŒì „ í”¼ë²—ì„ ë°”ê¿”ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" msgstr "팬 모드" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "ìž ëª¨ë“œ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "스냅 í† ê¸€." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" -msgstr "스냅 사용" +#, fuzzy +msgid "Use Smart Snap" +msgstr "스냅 사용하기" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "스냅 옵션" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "스냅 í† ê¸€." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "격ìžì— 스냅" +#, fuzzy +msgid "Use Grid Snap" +msgstr "ê²©ìž ìŠ¤ëƒ…" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "스냅 ì„¤ì •" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" -msgstr "íšŒì „ 스냅 사용" +msgstr "íšŒì „ 스냅 사용하기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Snap Relative" @@ -5157,7 +5189,7 @@ msgstr "ìƒëŒ€ì ì¸ ìŠ¤ëƒ…" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Pixel Snap" -msgstr "픽셀 스냅 사용" +msgstr "픽셀 스냅 사용하기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Smart Snapping" @@ -5195,22 +5227,22 @@ msgstr "ê°€ì´ë“œì— 스냅" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸‰ë‹ˆë‹¤ (ì´ë™ë¶ˆê°€)." +msgstr "ì„ íƒí•œ ê°ì²´ë¥¼ ê·¸ ìžë¦¬ì— ìž ê°€ìš” (움ì§ì¼ 수 없어요)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "ì„ íƒëœ 오브ì 트를 ìž ê¸ˆ í•´ì œí•©ë‹ˆë‹¤ (ì´ë™ê°€ëŠ¥)." +msgstr "ì„ íƒí•œ ê°ì²´ë¥¼ ìž ê¸ˆ í•´ì œí•´ìš” (움ì§ì¼ 수 있어요)." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 ì—†ë„ë¡ ì„¤ì •í•©ë‹ˆë‹¤." +msgstr "ê°ì²´ì˜ ìžì‹ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•´ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "오브ì íŠ¸ì˜ ìžì‹ë…¸ë“œê°€ ì„ íƒë 수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤." +msgstr "ê°ì²´ì˜ ìžì‹ì„ ì„ íƒí• 수 있ë„ë¡ í•´ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -5218,15 +5250,15 @@ msgstr "ìŠ¤ì¼ˆë ˆí†¤ ì„¤ì •" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Show Bones" -msgstr "뼈대 보기" +msgstr "본 ë³´ì´ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make Custom Bone(s) from Node(s)" -msgstr "노드ì—서 커스텀 본 만들기" +msgstr "노드ì—서 맞춤 본 만들기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Custom Bones" -msgstr "커스텀 본 지우기" +msgstr "맞춤 본 지우기" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp @@ -5234,8 +5266,8 @@ msgid "View" msgstr "보기" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "ê²©ìž ë³´ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5264,15 +5296,15 @@ msgstr "그룹과 ìž ê¸ˆ ì•„ì´ì½˜ ë³´ì´ê¸°" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Center Selection" -msgstr "ì„ íƒ í•목 화면 ì¤‘ì•™ì— í‘œì‹œ" +msgstr "ì„ íƒ í•목 중앙으로" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Frame Selection" -msgstr "ì„ íƒ í•목 화면 꽉차게 표시" +msgstr "ì„ íƒ í•목 ì „ì²´ 화면으로" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Preview Canvas Scale" -msgstr "캔버스 규모 미리보기" +msgstr "캔버스 규모 미리 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." @@ -5284,11 +5316,11 @@ msgstr "키를 삽입하기 위한 íšŒì „ 마스í¬." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Scale mask for inserting keys." -msgstr "키를 삽입하기 위한 규모 마스í¬." +msgstr "키를 삽입하기 위한 í¬ê¸° ì¡°ì ˆ 마스í¬." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert keys (based on mask)." -msgstr "키 삽입 (ë§ˆìŠ¤í¬ ê¸°ì¤€)." +msgstr "키 삽입하기 (ë§ˆìŠ¤í¬ ê¸°ì¤€)." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5297,25 +5329,26 @@ msgid "" "Keys are only added to existing tracks, no new tracks will be created.\n" "Keys must be inserted manually for the first time." msgstr "" -"물체가 ì „í™˜ë 때 ìžë™ìœ¼ë¡œ 키를 삽입합니다, íšŒì „ ë˜ëŠ” 규모 (ë§ˆìŠ¤í¬ ê¸°ì¤€).\n" -"키는 기존 트랙ì—ë§Œ 추가ë˜ë©°, 새 íŠ¸ëž™ì´ ë§Œë“¤ì–´ì§€ì§€ 않습니다.\n" -"처ìŒì— 키는 수ë™ìœ¼ë¡œ 삽입하여야 합니다." +"ê°ì²´ë¥¼ ì „í™˜, íšŒì „ ë˜ëŠ” í¬ê¸° ì¡°ì ˆí• ë•Œë§ˆë‹¤ ìžë™ìœ¼ë¡œ 키를 삽입해요 (ë§ˆìŠ¤í¬ ê¸°" +"준).\n" +"키는 기존 트랙ì—ë§Œ 추가ë˜ê³ , 새 íŠ¸ëž™ì„ ì¶”ê°€í•˜ì§„ 않아요.\n" +"처ìŒì—는 수ë™ìœ¼ë¡œ 키를 삽입해야 í•´ìš”." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Auto Insert Key" -msgstr "ìžë™ 키 삽입" +msgstr "ìžë™ìœ¼ë¡œ 키 삽입하기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Insert Key (Existing Tracks)" -msgstr "키 삽입 (존재하는 트랙)" +msgstr "키 삽입하기 (기존 트랙)" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Copy Pose" -msgstr "í¬ì¦ˆ 복사" +msgstr "í¬ì¦ˆ 복사하기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Clear Pose" -msgstr "í¬ì¦ˆ ì •ë¦¬" +msgstr "í¬ì¦ˆ 지우기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Multiply grid step by 2" @@ -5327,19 +5360,19 @@ msgstr "ê²©ìž ë‹¨ê³„ë¥¼ 반으로 ê°ì†Œ" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan View" -msgstr "팬 ë·°" +msgstr "팬 보기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "%s 추가" +msgstr "%s 추가하기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "%s 추가 중..." +msgstr "%s 추가하는 중..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "루트 ë…¸ë“œì—†ì´ ì—¬ëŸ¬ê°œì˜ ë…¸ë“œë¥¼ ìƒì„±í• 수 없습니다." +msgstr "루트 노드 ì—†ì´ëŠ” 여러 노드를 ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ 없어요." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5353,36 +5386,36 @@ msgstr "'%s'ì—서 씬 ì¸ìŠ¤í„´ìŠ¤ 중 오류" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Change Default Type" -msgstr "기본 타입 변경" +msgstr "기본 ìœ í˜• 바꾸기" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" msgstr "" -"드래그 & ë“œë¡ + Shift : í˜•ì œ 노드로 추가\n" -"드래그 & ë“œë¡ + Alt : 노드 타입 변경" +"드래그 & ë“œë¡ + Shift : í˜•ì œ 노드로 추가하기\n" +"드래그 & ë“œë¡ + Alt : 노드 ìœ í˜• 바꾸기" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" -msgstr "í´ë¦¬ê³¤3D 만들기" +msgstr "Polygon3D 만들기" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" -msgstr "í´ë¦¬ê³¤ 편집" +msgstr "í´ë¦¬ê³¤ 편집하기" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly (Remove Point)" -msgstr "í´ë¦¬ê³¤ 편집 (ì ì‚ì œ)" +msgstr "í´ë¦¬ê³¤ 편집하기 (ì ì‚ì œí•˜ê¸°)" #: editor/plugins/collision_shape_2d_editor_plugin.cpp msgid "Set Handle" -msgstr "핸들 ì„¤ì •" +msgstr "핸들 ì„¤ì •í•˜ê¸°" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Load Emission Mask" -msgstr "ì—미션 ë§ˆìŠ¤í¬ ë¶ˆëŸ¬ì˜¤ê¸°" +msgstr "ë°©ì¶œ ë§ˆìŠ¤í¬ ë¶ˆëŸ¬ì˜¤ê¸°" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/cpu_particles_editor_plugin.cpp @@ -5405,17 +5438,17 @@ msgstr "파티í´" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Generated Point Count:" -msgstr "ìƒì„±ëœ í¬ì¸íЏ 개수:" +msgstr "ìƒì„±í•œ ì 개수:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "ì—미션 마스í¬(Emission Mask)" +msgstr "ë°©ì¶œ 마스í¬" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "픽셀로부터 캡ì³" +msgstr "픽셀ì—서 캡처" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5429,12 +5462,12 @@ msgstr "CPU파티í´" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Mesh" -msgstr "메시로부터 ì—미션 í¬ì¸íЏ 만들기" +msgstr "메시ì—서 ë°©ì¶œ ì 만들기" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emission Points From Node" -msgstr "노드로부터 ì—미터 í¬ì¸íЏ 만들기" +msgstr "노드ì—서 ë°©ì¶œ ì 만들기" #: editor/plugins/curve_editor_plugin.cpp msgid "Flat 0" @@ -5454,15 +5487,15 @@ msgstr "ê°€ì†" #: editor/plugins/curve_editor_plugin.cpp msgid "Smoothstep" -msgstr "스무스스í…" +msgstr "부드러운단계" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Point" -msgstr "커브 í¬ì¸íЏ ìˆ˜ì •" +msgstr "커브 ì ìˆ˜ì •í•˜ê¸°" #: editor/plugins/curve_editor_plugin.cpp msgid "Modify Curve Tangent" -msgstr "커브 탄ì 트 ìˆ˜ì •" +msgstr "커브 탄ì 트 ìˆ˜ì •í•˜ê¸°" #: editor/plugins/curve_editor_plugin.cpp msgid "Load Curve Preset" @@ -5470,11 +5503,11 @@ msgstr "커브 프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Add Point" -msgstr "í¬ì¸íЏ 추가" +msgstr "ì 추가하기" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Point" -msgstr "í¬ì¸íЏ ì‚ì œ" +msgstr "ì ì‚ì œí•˜ê¸°" #: editor/plugins/curve_editor_plugin.cpp msgid "Left Linear" @@ -5490,7 +5523,7 @@ msgstr "프리셋 불러오기" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "커프 í¬ì¸íЏ ì‚ì œ" +msgstr "커브 ì ì‚ì œí•˜ê¸°" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -5498,7 +5531,12 @@ msgstr "커브 ì„ í˜• 탄ì 트 í† ê¸€" #: editor/plugins/curve_editor_plugin.cpp msgid "Hold Shift to edit tangents individually" -msgstr "Shift키를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 탄ì 트를 개별ì 으로 편집 가능" +msgstr "Shift키를 눌러서 탄ì 트를 개별ì 으로 편집하기" + +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "ìš°í´ë¦: ì ì‚ì œí•˜ê¸°" #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" @@ -5526,7 +5564,7 @@ msgstr "Occluder í´ë¦¬ê³¤ 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh is empty!" -msgstr "메쉬가 비었습니다!" +msgstr "메시가 없어요!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Static Trimesh Body" @@ -5538,7 +5576,7 @@ msgstr "Static Convex Body 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "This doesn't work on scene root!" -msgstr "씬 루트ì—서는 í• ìˆ˜ 없습니다!" +msgstr "씬 루트ì—서 ìž‘ì—…í• ìˆ˜ 없어요!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Shape" @@ -5558,44 +5596,44 @@ msgstr "내비게ì´ì…˜ 메시 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." -msgstr "í¬í•¨ëœ 메시는 ArrayMesh íƒ€ìž…ì— ì†í•˜ì§€ 않습니다." +msgstr "ê°–ê³ ìžˆëŠ” 메시가 ArrayMesh ìœ í˜•ì´ ì•„ë‹ˆì—ìš”." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "UV Unwrap failed, mesh may not be manifold?" -msgstr "UV 펼치기를 실패했습니다, 메시가 다양하진 않나요?" +msgstr "UV 펼치기를 실패했어요, 메시가 다양한 것 ê°™ì€ë°ìš”?" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "ë””ë²„ê·¸í• ë©”ì‹œê°€ 없습니다." +msgstr "ë””ë²„ê·¸í• ë©”ì‹œê°€ 없어요." #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/sprite_editor_plugin.cpp msgid "Model has no UV in this layer" -msgstr "모ë¸ì´ ì´ ë ˆì´ì–´ì— UV를 ì§€ë‹ˆê³ ìžˆì§€ 않습니다" +msgstr "ì´ ë ˆì´ì–´ì—서 모ë¸ì€ UVê°€ 없어요" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "MeshInstance lacks a Mesh!" -msgstr "MeshInstanceì— ë©”ì‹œê°€ 없습니다!" +msgstr "MeshInstanceì— ë©”ì‹œê°€ 없어요!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh has not surface to create outlines from!" -msgstr "ë©”ì‹œì— ì™¸ê³½ì„ ì„ ë§Œë“¤ê¸° 위한 서피스가 없습니다!" +msgstr "ë©”ì‹œì— ìœ¤ê³½ì„ ë§Œë“¤ í‘œë©´ì´ ì—†ì–´ìš”!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!" -msgstr "메시 기본 íƒ€ìž…ì´ PRIMITIVE_TRIANGLESì´ ì•„ë‹™ë‹ˆë‹¤!" +msgstr "메시 기본 ìœ í˜•ì´ PRIMITIVE_TRIANGLESì´ ì•„ë‹ˆì—ìš”!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Could not create outline!" -msgstr "ì™¸ê³½ì„ ì„ ë§Œë“¤ìˆ˜ 없습니다!" +msgstr "ìœ¤ê³½ì„ ë§Œë“¤ 수 없어요!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline" -msgstr "ì™¸ê³½ì„ ë§Œë“¤ê¸°" +msgstr "윤곽 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Mesh" +msgstr "메시" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -5611,7 +5649,7 @@ msgstr "Convex ì¶©ëŒ í˜•ì œ 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." -msgstr "ì™¸ê³½ì„ ë©”ì‹œ 만들기..." +msgstr "윤곽 메시 만들기..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" @@ -5623,84 +5661,85 @@ msgstr "UV2 보기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Unwrap UV2 for Lightmap/AO" -msgstr "ë¼ì´íŠ¸ë§µ/AO를 위한 UV2 언랩" +msgstr "ë¼ì´íŠ¸ë§µ/AO를 위한 UV2 펼치기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh" -msgstr "ì™¸ê³½ì„ ë©”ì‹œ 만들기" +msgstr "윤곽 메시 만들기" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Outline Size:" -msgstr "ì™¸ê³½ì„ í¬ê¸°:" +msgstr "윤곽 í¬ê¸°:" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove item %d?" -msgstr "%d í•ëª©ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "%dê°œì˜ í•ëª©ì„ ì‚ì œí• ê¹Œìš”?" #: editor/plugins/mesh_library_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Add Item" -msgstr "í•목 추가" +msgstr "í•목 추가하기" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Remove Selected Item" -msgstr "ì„ íƒëœ í•목 ì‚ì œ" +msgstr "ì„ íƒí•œ í•목 ì‚ì œí•˜ê¸°" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Import from Scene" -msgstr "씬으로부터 ê°€ì ¸ì˜¤ê¸°" +msgstr "씬ì—서 ê°€ì ¸ì˜¤ê¸°" #: editor/plugins/mesh_library_editor_plugin.cpp msgid "Update from Scene" -msgstr "씬으로부터 ì—…ë°ì´íЏ 하기" +msgstr "씬ì—서 ì—…ë°ì´íŠ¸í•˜ê¸°" #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and no MultiMesh set in node)." -msgstr "소스 메시가 ì§€ì •ë˜ì§€ 않았습니다 (ê·¸ë¦¬ê³ ë…¸ë“œì— MultiMeshê°€ 없습니다)." +msgstr "" +"메시 소스를 ì§€ì •í•˜ì§€ 않았네요 (ê·¸ë¦¬ê³ ë…¸ë“œì— MultiMesh를 ì„¤ì •í•˜ì§€ ì•Šì•˜ê³ ìš”)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No mesh source specified (and MultiMesh contains no Mesh)." -msgstr "소스 메시가 ì§€ì •ë˜ì§€ 않았습니다 (ê·¸ë¦¬ê³ MultiMeshì— ë©”ì‹œê°€ 없습니다)." +msgstr "메시 소스를 ì§€ì •í•˜ì§€ 않았네요 (ê·¸ë¦¬ê³ MultiMeshì— ë©”ì‹œê°€ ì—†ê³ ìš”)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (invalid path)." -msgstr "소스 메시가 올바르지 않습니다 (올바르지 ì•Šì€ ê²½ë¡œ)." +msgstr "메시 소스가 잘못ëì–´ìš” (ìž˜ëª»ëœ ê²½ë¡œ)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (not a MeshInstance)." -msgstr "소스 메시가 올바르지 않습니다 (MeshInstanceê°€ 아닙니다)." +msgstr "메시 소스가 잘못ëì–´ìš” (MeshInstanceê°€ 아님)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Mesh source is invalid (contains no Mesh resource)." -msgstr "소스 메시가 올바르지 않습니다 (Mesh 리소스가 없습니다)." +msgstr "메시 소스가 잘못ëì–´ìš” (Mesh 리소스가 ì—†ìŒ)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "No surface source specified." -msgstr "서피스 소스가 ì§€ì •ë˜ì§€ 않았습니다." +msgstr "표면 소스를 ì§€ì •í•˜ì§€ 않았네요." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (invalid path)." -msgstr "서피스 소스가 올바르지 않습니다 (올바르지 ì•Šì€ ê²½ë¡œ)." +msgstr "표면 소스가 잘못ëì–´ìš” (ìž˜ëª»ëœ ê²½ë¡œ)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no geometry)." -msgstr "서피스 소스가 올바르지 않습니다 (지오메트리 ì—†ìŒ)." +msgstr "표면 소스가 잘못ëì–´ìš” (형태 ì—†ìŒ)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Surface source is invalid (no faces)." -msgstr "서피스 소스가 올바르지 않습니다 (페ì´ìФ ì—†ìŒ)." +msgstr "표면 소스가 잘못ëì–´ìš” (ë©´ ì—†ìŒ)." #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Source Mesh:" -msgstr "소스 메시 ì„ íƒ:" +msgstr "소스 메시 ì„ íƒí•˜ê¸°:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Select a Target Surface:" -msgstr "ëŒ€ìƒ ì„œí”¼ìŠ¤ ì„ íƒ:" +msgstr "ëŒ€ìƒ í‘œë©´ ì„ íƒí•˜ê¸°:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate Surface" -msgstr "서피스 만들기" +msgstr "표면 만들기" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate MultiMesh" @@ -5708,7 +5747,7 @@ msgstr "MultiMesh 만들기" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Target Surface:" -msgstr "ëŒ€ìƒ ì„œí”¼ìŠ¤:" +msgstr "ëŒ€ìƒ í‘œë©´:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Source Mesh:" @@ -5732,15 +5771,15 @@ msgstr "ë©”ì‹œì˜ ìœ„ìª½ ì¶•:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Rotation:" -msgstr "ìž„ì˜ íšŒì „:" +msgstr "무작위 íšŒì „:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Tilt:" -msgstr "ìž„ì˜ ê¸°ìš¸ê¸°:" +msgstr "무작위 기울기:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Random Scale:" -msgstr "ìž„ì˜ í¬ê¸°:" +msgstr "무작위 í¬ê¸°:" #: editor/plugins/multimesh_editor_plugin.cpp msgid "Populate" @@ -5766,7 +5805,7 @@ msgstr "가시성 ì§ì‚¬ê°í˜•ì„ ë§Œë“¤ê¸°" #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Can only set point into a ParticlesMaterial process material" -msgstr "ì˜¤ì§ ParticlesMaterial 프로세스 메테리얼 ì•ˆì˜ í¬ì¸íŠ¸ë§Œ ì„¤ì • 가능" +msgstr "ParticlesMaterial 프로세스 머티리얼 안ì—ë§Œ ì ì„ ì„¤ì •í• ìˆ˜ 있ìŒ" #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp @@ -5775,54 +5814,51 @@ msgstr "ìƒì„± 시간 (ì´ˆ):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "í˜•íƒœì˜ í‘œë©´ì´ ì˜ì—ì„ ê°–ê³ ìžˆì§€ 않아요." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "노드가 지오미트리를 í¬í•¨í•˜ê³ 있지 않습니다 (페ì´ìФ)." +msgstr "형태가 ë©´ì„ ê°–ê³ ìžˆì§€ 않아요." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\"ì€(는) Spatialì„ ìƒì†ë°›ì§€ 않아요." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "노드가 지오미트리를 í¬í•¨í•˜ê³ 있지 않습니다." +msgstr "\"%s\"ì´(ê°€) 형태를 ê°–ê³ ìžˆì§€ 않아요." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "노드가 지오미트리를 í¬í•¨í•˜ê³ 있지 않습니다." +msgstr "\"%s\"ì´(ê°€) ë©´ 형태를 ê°–ê³ ìžˆì§€ 않아요." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" -msgstr "ì—미터 만들기" +msgstr "방출기 만들기" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Points:" -msgstr "ì—미션 í¬ì¸íЏ:" +msgstr "ë°©ì¶œ ì :" #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points" -msgstr "서피스 í¬ì¸íЏ" +msgstr "표면 ì " #: editor/plugins/particles_editor_plugin.cpp msgid "Surface Points+Normal (Directed)" -msgstr "서피스 í¬ì¸íЏ+ë…¸ë§ (지시ëœ)" +msgstr "표면 ì +노멀 (지시ëœ)" #: editor/plugins/particles_editor_plugin.cpp msgid "Volume" -msgstr "배출량" +msgstr "부피" #: editor/plugins/particles_editor_plugin.cpp msgid "Emission Source: " -msgstr "ì—미션 소스: " +msgstr "ë°©ì¶œ 소스: " #: editor/plugins/particles_editor_plugin.cpp msgid "A processor material of type 'ParticlesMaterial' is required." -msgstr "'ParticlesMaterial' íƒ€ìž…ì˜ í”„ë¡œì„¸ì„œ ë¨¸í‹°ë¦¬ì–¼ì´ í•„ìš”í•©ë‹ˆë‹¤." +msgstr "'ParticlesMaterial' ìœ í˜•ì˜ í”„ë¡œì„¸ì„œ ë¨¸í‹°ë¦¬ì–¼ì´ í•„ìš”í•´ìš”." #: editor/plugins/particles_editor_plugin.cpp msgid "Generating AABB" @@ -5838,74 +5874,74 @@ msgstr "AABB 만들기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Point from Curve" -msgstr "커브ì—서 í¬ì¸íЏ ì‚ì œ" +msgstr "커브ì—서 ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove Out-Control from Curve" -msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ-컨트롤 ì‚ì œ" +msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ-컨트롤 ì‚ì œí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Remove In-Control from Curve" -msgstr "ì»¤ë¸Œì˜ ì¸-컨트롤 ì‚ì œ" +msgstr "ì»¤ë¸Œì˜ ì¸-컨트롤 ì‚ì œí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point to Curve" -msgstr "ì»¤ë¸Œì— í¬ì¸íЏ 추가" +msgstr "ì»¤ë¸Œì— ì 추가하기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Split Curve" -msgstr "커브 나누기" +msgstr "커브 가르기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Point in Curve" -msgstr "ì»¤ë¸Œì˜ í¬ì¸íЏ ì´ë™" +msgstr "ì»¤ë¸Œì˜ ì ì´ë™í•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move In-Control in Curve" -msgstr "ì»¤ë¸Œì˜ ì¸-컨트롤 ì´ë™" +msgstr "ì»¤ë¸Œì˜ ì¸-컨트롤 ì´ë™í•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Move Out-Control in Curve" -msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ-컨트롤 ì´ë™" +msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ-컨트롤 ì´ë™í•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Select Points" -msgstr "í¬ì¸íЏ ì„ íƒ" +msgstr "ì ì„ íƒí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Shift+Drag: Select Control Points" -msgstr "Shift+드래그: 컨트롤 í¬ì¸íЏ ì„ íƒ" +msgstr "Shift+드래그: 컨트롤 ì ì„ íƒí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Click: Add Point" -msgstr "í´ë¦: í¬ì¸íЏ 추가" +msgstr "í´ë¦: ì 추가하기" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Left Click: Split Segment (in curve)" -msgstr "ì„ ë¶„ 나누기 (커브로)" +msgstr "좌í´ë¦: (커브로) ì„ ë¶„ 가르기" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Right Click: Delete Point" -msgstr "ìš°í´ë¦: í¬ì¸íЏ ì‚ì œ" +msgstr "ìš°í´ë¦: ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp msgid "Select Control Points (Shift+Drag)" -msgstr "컨트롤 í¬ì¸íЏ ì„ íƒ (Shift+드래그)" +msgstr "컨트롤 ì ì„ íƒí•˜ê¸° (Shift+드래그)" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Add Point (in empty space)" -msgstr "í¬ì¸íЏ 추가 (빈 공간)" +msgstr "(빈 공간ì—) ì 추가하기" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp msgid "Delete Point" -msgstr "í¬ì¸íЏ ì‚ì œ" +msgstr "ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5916,7 +5952,7 @@ msgstr "커브 닫기" #: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp msgid "Options" -msgstr "옵션" +msgstr "ì„¤ì •" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp @@ -5930,48 +5966,48 @@ msgstr "핸들 ê¸¸ì´ ê±°ìš¸" #: editor/plugins/path_editor_plugin.cpp msgid "Curve Point #" -msgstr "커브 í¬ì¸íЏ #" +msgstr "커브 ì #" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Point Position" -msgstr "커브 í¬ì¸íЏ 위치 ì„¤ì •" +msgstr "커브 ì 위치 ì„¤ì •í•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve In Position" -msgstr "ì»¤ë¸Œì˜ In 위치 ì„¤ì •" +msgstr "ì»¤ë¸Œì˜ ì¸ ìœ„ì¹˜ ì„¤ì •í•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Set Curve Out Position" -msgstr "ì»¤ë¸Œì˜ Out 위치 ì„¤ì •" +msgstr "ì»¤ë¸Œì˜ ì•„ì›ƒ 위치 ì„¤ì •í•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Split Path" -msgstr "경로 나누기" +msgstr "경로 가르기" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Path Point" -msgstr "경로 í¬ì¸íЏ ì‚ì œ" +msgstr "경로 ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Remove Out-Control Point" -msgstr "아웃-컨트롤 í¬ì¸íЏ ì‚ì œ" +msgstr "아웃-컨트롤 ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Remove In-Control Point" -msgstr "ì¸-컨트롤 í¬ì¸íЏ ì‚ì œ" +msgstr "ì¸-컨트롤 ì ì‚ì œí•˜ê¸°" #: editor/plugins/path_editor_plugin.cpp msgid "Split Segment (in curve)" -msgstr "ì„ ë¶„ ë¶„í• (커브)" +msgstr "(커브로) ì„ ë¶„ 가르기" #: editor/plugins/physical_bone_plugin.cpp msgid "Move Joint" -msgstr "ê´€ì ˆ ì´ë™" +msgstr "ê´€ì ˆ ì´ë™í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "The skeleton property of the Polygon2D does not point to a Skeleton2D node" -msgstr "Polygon2Dì˜ ìŠ¤ì¼ˆë ˆí†¤ ì†ì„±ì´ Skeleton2D 노드를 í–¥í•˜ê³ ìžˆì§€ 않ìŒ" +msgstr "Polygon2Dì˜ Skeleton ì†ì„±ì´ Skeleton2D 노드를 향하지 않아요" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Sync Bones" @@ -5982,8 +6018,8 @@ msgid "" "No texture in this polygon.\n" "Set a texture to be able to edit UV." msgstr "" -"ì´ í´ë¦¬ê³¤ì— í…스ì³ê°€ 없습니다.\n" -"UV를 편집하기 위해 í…스ì³ë¥¼ ì„¤ì •í•´ì•¼ 합니다." +"ì´ í´ë¦¬ê³¤ì— í…스처가 없어요.\n" +"UV를 íŽ¸ì§‘í•˜ë ¤ë©´ í…스처를 ì„¤ì •í•˜ì„¸ìš”." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create UV Map" @@ -5993,9 +6029,7 @@ msgstr "UV ë§µ 만들기" msgid "" "Polygon 2D has internal vertices, so it can no longer be edited in the " "viewport." -msgstr "" -"Polygon2Dê°€ ë‚´ë¶€ ê¼ì§“ì ì„ ê°–ê³ ìžˆìŠµë‹ˆë‹¤, ë” ì´ìƒ ë·°í¬íЏì—서 ê¼ì§“ì ì„ íŽ¸ì§‘í• " -"수 없습니다." +msgstr "Polygon2Dì— ë‚´ë¶€ ê¼ì§“ì ì´ ìžˆì–´ìš”, ë” ì´ìƒ ë·°í¬íЏì—서 íŽ¸ì§‘í• ìˆ˜ 없어요." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create Polygon & UV" @@ -6007,23 +6041,23 @@ msgstr "ë‚´ë¶€ ê¼ì§“ì 만들기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Internal Vertex" -msgstr "ë‚´ë¶€ ê¼ì§“ì ì‚ì œ" +msgstr "ë‚´ë¶€ ê¼ì§“ì ì‚ì œí•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Invalid Polygon (need 3 different vertices)" -msgstr "올바르지 ì•Šì€ í´ë¦¬ê³¤ (3ê°œì˜ ë‹¤ë¥¸ ê¼ì§“ì ì´ í•„ìš”í•¨)" +msgstr "ìž˜ëª»ëœ í´ë¦¬ê³¤ (3ê°œì˜ ë‹¤ë¥¸ ê¼ì§“ì ì´ í•„ìš”í•¨)" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Add Custom Polygon" -msgstr "ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ 추가" +msgstr "맞춤 í´ë¦¬ê³¤ 추가하기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Remove Custom Polygon" -msgstr "ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ ì‚ì œ" +msgstr "맞춤 í´ë¦¬ê³¤ ì‚ì œí•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform UV Map" -msgstr "UV ë§µ 변형" +msgstr "UV ë§µ 변형하기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Transform Polygon" @@ -6031,7 +6065,7 @@ msgstr "변형 í´ë¦¬ê³¤" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint Bone Weights" -msgstr "본 무게 페ì¸íЏ" +msgstr "본 가중치 ì¹ í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Open Polygon 2D UV editor." @@ -6047,7 +6081,7 @@ msgstr "UV" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Points" -msgstr "í¬ì¸íЏ" +msgstr "ì " #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Polygons" @@ -6059,43 +6093,43 @@ msgstr "본" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Points" -msgstr "í¬ì¸íЏ ì´ë™" +msgstr "ì ì´ë™í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl: íšŒì „" +msgstr "Ctrl: íšŒì „í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" -msgstr "Shift: ì „ì²´ ì´ë™" +msgstr "Shift: ì „ë¶€ ì´ë™í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift+Ctrl: Scale" -msgstr "Shift+Ctrl: í¬ê¸° ì¡°ì ˆ" +msgstr "Shift+Ctrl: í¬ê¸° ì¡°ì ˆí•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Move Polygon" -msgstr "í´ë¦¬ê³¤ ì´ë™" +msgstr "í´ë¦¬ê³¤ ì´ë™í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Rotate Polygon" -msgstr "í´ë¦¬ê³¤ íšŒì „" +msgstr "í´ë¦¬ê³¤ íšŒì „í•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Scale Polygon" -msgstr "í´ë¦¬ê³¤ í¬ê¸° ì¡°ì ˆ" +msgstr "í´ë¦¬ê³¤ í¬ê¸° ì¡°ì ˆí•˜ê¸°" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Create a custom polygon. Enables custom polygon rendering." -msgstr "ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ 만들기. ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ ë Œë”ë§ì„ 활성화합니다." +msgstr "맞춤 í´ë¦¬ê³¤ì„ 만들어요. 맞춤 í´ë¦¬ê³¤ ë Œë”ë§ì„ 켤게요." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "" "Remove a custom polygon. If none remain, custom polygon rendering is " "disabled." msgstr "" -"ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ì„ ì‚ì œ. 남아있는 í´ë¦¬ê³¤ì´ 없으면 ì‚¬ìš©ìž ì§€ì • í´ë¦¬ê³¤ ë Œë”ë§" -"ì€ ë¹„í™œì„±í™”ë©ë‹ˆë‹¤." +"맞춤 í´ë¦¬ê³¤ì„ ì‚ì œí•´ìš”. 남아있는 맞춤 í´ë¦¬ê³¤ì´ 없으면, 맞춤 í´ë¦¬ê³¤ ë Œë”ë§ì„ " +"ëŒê²Œìš”." #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Paint weights with specified intensity." @@ -6119,7 +6153,7 @@ msgstr "UV->í´ë¦¬ê³¤" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Clear UV" -msgstr "UV ì •ë¦¬" +msgstr "UV 지우기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Settings" @@ -6131,15 +6165,19 @@ msgstr "스냅" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Enable Snap" -msgstr "스냅 활성화" +msgstr "스냅 켜기" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid" msgstr "격ìž" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "ê²©ìž ë³´ê¸°" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" -msgstr "ê²©ìž êµ¬ì„±:" +msgstr "ê²©ìž ì„¤ì •:" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Grid Offset X:" @@ -6163,24 +6201,24 @@ msgstr "ë³¸ì„ í´ë¦¬ê³¤ì— ë™ê¸°í™”" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "ERROR: Couldn't load resource!" -msgstr "오류: 리소스를 불러올 수 없습니다!" +msgstr "오류: 리소스를 불러올 수 없어요!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Add Resource" -msgstr "리소스 추가" +msgstr "리소스 추가하기" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Rename Resource" -msgstr "리소스 ì´ë¦„ 변경" +msgstr "리소스 ì´ë¦„ 바꾸기" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Resource" -msgstr "리소스 ì‚ì œ" +msgstr "리소스 ì‚ì œí•˜ê¸°" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Resource clipboard is empty!" -msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었습니다!" +msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었어요!" #: editor/plugins/resource_preloader_editor_plugin.cpp msgid "Paste Resource" @@ -6193,9 +6231,10 @@ msgstr "ì¸ìŠ¤í„´ìŠ¤:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" -msgstr "타입:" +msgstr "ìœ í˜•:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp @@ -6212,11 +6251,11 @@ msgstr "리소스 프리로ë”" #: editor/plugins/root_motion_editor_plugin.cpp msgid "AnimationTree has no path set to an AnimationPlayer" -msgstr "AnimationTreeê°€ AnimationPlayer로 향하는 경로를 ê°€ì§€ê³ ìžˆì§€ 않습니다" +msgstr "AnimationTreeì— AnimationPlayer를 향하는 경로가 없어요" #: editor/plugins/root_motion_editor_plugin.cpp msgid "Path to AnimationPlayer is invalid" -msgstr "AnimationPlayer로 향하는 경로가 올바르지 않습니다" +msgstr "AnimationPlayer를 향하는 경로가 잘못ëì–´ìš”" #: editor/plugins/script_editor_plugin.cpp msgid "Clear Recent Files" @@ -6224,16 +6263,15 @@ msgstr "최근 íŒŒì¼ ì§€ìš°ê¸°" #: editor/plugins/script_editor_plugin.cpp msgid "Close and save changes?" -msgstr "변경사í•ì„ ì €ìž¥í•˜ê³ ë‹«ê² ìŠµë‹ˆê¹Œ?" +msgstr "변경사í•ì„ ì €ìž¥í•˜ê³ ë‹«ì„까요?" #: editor/plugins/script_editor_plugin.cpp msgid "Error writing TextFile:" -msgstr "í…스트 íŒŒì¼ ì“°ê¸° 오류:" +msgstr "í…스트 íŒŒì¼ ìž‘ì„± 중 오류:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "타ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:" +msgstr "파ì¼ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6241,22 +6279,21 @@ msgstr "íŒŒì¼ ì €ìž¥ 중 오류!" #: editor/plugins/script_editor_plugin.cpp msgid "Error while saving theme." -msgstr "테마 ì €ìž¥ 중 오류 ë°œìƒ." +msgstr "테마 ì €ìž¥ 중 오류." #: editor/plugins/script_editor_plugin.cpp msgid "Error Saving" -msgstr "ì €ìž¥ 중 오류 ë°œìƒ" +msgstr "ì €ìž¥ 중 오류" #: editor/plugins/script_editor_plugin.cpp msgid "Error importing theme." -msgstr "테마 ê°€ì ¸ì˜¤ëŠ” 중 오류 ë°œìƒ." +msgstr "테마 ê°€ì ¸ì˜¤ëŠ” 중 오류." #: editor/plugins/script_editor_plugin.cpp msgid "Error Importing" -msgstr "ê°€ì ¸ì˜¤ëŠ” 중 오류 ë°œìƒ" +msgstr "ê°€ì ¸ì˜¤ëŠ” 중 오류" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "새 í…스트 파ì¼..." @@ -6282,7 +6319,7 @@ msgstr "ì €ìž¥ 중 오류" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme As..." -msgstr "테마 다른 ì´ë¦„으로 ì €ìž¥..." +msgstr "테마를 다른 ì´ë¦„으로 ì €ìž¥..." #: editor/plugins/script_editor_plugin.cpp msgid "%s Class Reference" @@ -6294,32 +6331,37 @@ msgid "Find Next" msgstr "ë‹¤ìŒ ì°¾ê¸°" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "ì´ì „ 찾기" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "í•„í„° 스í¬ë¦½íЏ" +msgstr "스í¬ë¦½íЏ í•„í„°" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." -msgstr "메서드 목ë¡ì˜ ì‚¬ì „ ì‹ ì •ë ¬ì„ í‚¤ê±°ë‚˜ ë•니다." +msgstr "메서드 목ë¡ì˜ ì‚¬ì „ ì‹ ì •ë ¬ì„ í† ê¸€í•´ìš”." #: editor/plugins/script_editor_plugin.cpp msgid "Filter methods" -msgstr "í•„í„° 메서드" +msgstr "메서드 í•„í„°" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" -msgstr "ì •ë ¬" +msgstr "ì •ë ¬í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Up" -msgstr "위로 ì´ë™" +msgstr "위로 ì´ë™í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Move Down" -msgstr "아래로 ì´ë™" +msgstr "아래로 ì´ë™í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp msgid "Next script" @@ -6338,13 +6380,12 @@ msgid "Open..." msgstr "열기..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "스í¬ë¦½íЏ 열기" +msgstr "ë‹«ì€ ìŠ¤í¬ë¦½íЏ 다시 열기" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" -msgstr "ëª¨ë‘ ì €ìž¥" +msgstr "ëª¨ë‘ ì €ìž¥í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp msgid "Soft Reload Script" @@ -6352,15 +6393,15 @@ msgstr "스í¬ë¦½íЏ 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Copy Script Path" -msgstr "스í¬ë¦½íЏ 경로 복사" +msgstr "스í¬ë¦½íЏ 경로 복사하기" #: editor/plugins/script_editor_plugin.cpp msgid "History Previous" -msgstr "ì´ì „ ížˆìŠ¤í† ë¦¬" +msgstr "ì´ì „ 기ë¡" #: editor/plugins/script_editor_plugin.cpp msgid "History Next" -msgstr "ë‹¤ìŒ ížˆìŠ¤í† ë¦¬" +msgstr "ë‹¤ìŒ ê¸°ë¡" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp @@ -6377,7 +6418,7 @@ msgstr "테마 다시 불러오기" #: editor/plugins/script_editor_plugin.cpp msgid "Save Theme" -msgstr "테마 ì €ìž¥" +msgstr "테마 ì €ìž¥í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp msgid "Close All" @@ -6389,28 +6430,28 @@ msgstr "문서 닫기" #: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp msgid "Run" -msgstr "실행" +msgstr "실행하기" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle Scripts Panel" msgstr "스í¬ë¦½íЏ íŒ¨ë„ í† ê¸€" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "한 ë‹¨ê³„ì‹ ì½”ë“œ 실행" +msgid "Step Into" +msgstr "í”„ë¡œì‹œì € 단위 실행하기" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" -msgstr "í”„ë¡œì‹œì € 단위 실행" +msgid "Step Over" +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 msgid "Continue" -msgstr "계ì†" +msgstr "계ì†í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp msgid "Keep Debugger Open" @@ -6434,15 +6475,15 @@ msgstr "피드백으로 Godot 문서를 ê°œì„ í•˜ëŠ”ë° ë„와주세요." #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." -msgstr "ë ˆí¼ëŸ°ìФ 문서 검색." +msgstr "참조 문서 검색하기." #: editor/plugins/script_editor_plugin.cpp msgid "Go to previous edited document." -msgstr "ì´ì „ 편집 문서로 ì´ë™." +msgstr "ì´ì „ì— íŽ¸ì§‘í•œ 문서로 ì´ë™í•˜ê¸°." #: editor/plugins/script_editor_plugin.cpp msgid "Go to next edited document." -msgstr "ë‹¤ìŒ íŽ¸ì§‘ 문서로 ì´ë™." +msgstr "다ìŒì— 편집한 문서로 ì´ë™í•˜ê¸°." #: editor/plugins/script_editor_plugin.cpp msgid "Discard" @@ -6453,8 +6494,8 @@ msgid "" "The following files are newer on disk.\n" "What action should be taken?:" msgstr "" -"다ìŒì˜ 파ì¼ë“¤ì´ 디스í¬ìƒ ë” ìµœì‹ ìž…ë‹ˆë‹¤.\n" -"ì–´ë–¤ ìž‘ì—…ì„ ìˆ˜í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?:" +"해당 파ì¼ì€ 디스í¬ì— 있는 게 ë” ìµœì‹ ì´ì—ìš”.\n" +"어떻게 하실래요?:" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp @@ -6464,7 +6505,7 @@ msgstr "다시 불러오기" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp msgid "Resave" -msgstr "다시 ì €ìž¥" +msgstr "다시 ì €ìž¥í•˜ê¸°" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Debugger" @@ -6475,15 +6516,14 @@ msgid "Search Results" msgstr "검색 ê²°ê³¼" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "최근 씬 지우기" +msgstr "최근 스í¬ë¦½íЏ 지우기" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" -msgstr "ë©”ì„œë“œì— ì—°ê²°:" +msgstr "ë©”ì„œë“œì— ì—°ê²°í•˜ê¸°:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "소스" @@ -6499,12 +6539,12 @@ msgstr "대ìƒ" msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." msgstr "" -"노드 '%s'ì—서 노드 '%s'ê¹Œì§€ì˜ ì—°ê²°ì—서 ì‹œê·¸ë„ '%s'ì— ëŒ€í•œ 메서드 '%s'ê°€ 존재" -"하지 않습니ë”." +"메서드 '%s'ì´(ê°€) ì‹œê·¸ë„ '%s'ì„ ë…¸ë“œ '%s'ì—서 노드 '%s'으로 연결하지 않았어" +"ìš”." #: editor/plugins/script_text_editor.cpp msgid "Line" -msgstr "ë¼ì¸" +msgstr "í–‰" #: editor/plugins/script_text_editor.cpp msgid "(ignore)" @@ -6512,44 +6552,44 @@ msgstr "(무시함)" #: editor/plugins/script_text_editor.cpp msgid "Go to Function" -msgstr "함수로 ì´ë™" +msgstr "함수로 ì´ë™í•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Only resources from filesystem can be dropped." -msgstr "íŒŒì¼ ì‹œìŠ¤í…œì—서 ê°€ì ¸ì˜¨ 리소스만 드ëží• 수 있습니다." +msgstr "íŒŒì¼ ì‹œìŠ¤í…œì˜ ë¦¬ì†ŒìŠ¤ë§Œ 드ë¡í• 수 있어요." #: editor/plugins/script_text_editor.cpp msgid "Lookup Symbol" -msgstr "룩업 심벌" +msgstr "룩업 기호" #: editor/plugins/script_text_editor.cpp msgid "Pick Color" -msgstr "ìƒ‰ìƒ ì„ íƒ" +msgstr "ìƒ‰ìƒ ì„ íƒí•˜ê¸°" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Convert Case" -msgstr "ëŒ€ì†Œë¬¸ìž ë³€í™˜" +msgstr "ëŒ€ì†Œë¬¸ìž ë³€í™˜í•˜ê¸°" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Uppercase" -msgstr "대문ìžë¡œ 변경" +msgstr "대문ìžë¡œ 바꾸기" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Lowercase" -msgstr "소문ìžë¡œ 변경" +msgstr "소문ìžë¡œ 바꾸기" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Capitalize" -msgstr "대문ìžë¡œ 시작" +msgstr "대문ìžë¡œ 시작하기" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp msgid "Syntax Highlighter" -msgstr "구문 ê°•ì¡°" +msgstr "구문 강조하기" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp msgid "Go To" -msgstr "ì´ë™" +msgstr "ì´ë™í•˜ê¸°" #: editor/plugins/script_text_editor.cpp #: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp @@ -6565,9 +6605,14 @@ msgstr "중단ì " msgid "Cut" msgstr "잘ë¼ë‚´ê¸°" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "ëª¨ë‘ ì„ íƒí•˜ê¸°" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" -msgstr "ë¼ì¸ ì‚ì œ" +msgstr "í–‰ ì‚ì œí•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Indent Left" @@ -6583,56 +6628,51 @@ msgstr "ì£¼ì„ í† ê¸€" #: editor/plugins/script_text_editor.cpp msgid "Fold/Unfold Line" -msgstr "ë¼ì¸ 펼치기/ì ‘ê¸°" +msgstr "í–‰ 펼치기/ì ‘ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Fold All Lines" -msgstr "ëª¨ë“ ë¼ì¸ ì ‘ê¸°" +msgstr "ëª¨ë“ í–‰ ì ‘ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Unfold All Lines" -msgstr "ëª¨ë“ ë¼ì¸ 펼치기" +msgstr "ëª¨ë“ í–‰ 펼치기" #: editor/plugins/script_text_editor.cpp msgid "Clone Down" -msgstr "아래로 ë³µì œ" +msgstr "아래로 ë³µì œí•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Complete Symbol" msgstr "ìžë™ 완성" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "ì„ íƒ í¬ê¸° ì¡°ì ˆ" +msgstr "ì„ íƒ í•목 í‰ê°€í•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" -msgstr "후행 공백 ë¬¸ìž ì‚ì œ" +msgstr "후행 공백 ë¬¸ìž ì‚ì œí•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Spaces" -msgstr "들여쓰기를 공백으로 변환" +msgstr "들여쓰기를 공백으로 변환하기" #: editor/plugins/script_text_editor.cpp msgid "Convert Indent to Tabs" -msgstr "들여쓰기를 íƒìœ¼ë¡œ 변환" +msgstr "들여쓰기를 íƒìœ¼ë¡œ 변환하기" #: editor/plugins/script_text_editor.cpp msgid "Auto Indent" msgstr "ìžë™ 들여쓰기" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "ì´ì „ 찾기" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "파ì¼ì—서 찾기..." #: editor/plugins/script_text_editor.cpp msgid "Contextual Help" -msgstr "ë„ì›€ë§ ë³´ê¸°" +msgstr "ìƒí™©ì— 맞는 ë„움" #: editor/plugins/script_text_editor.cpp msgid "Toggle Bookmark" @@ -6640,23 +6680,23 @@ msgstr "ë¶ë§ˆí¬ í† ê¸€" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Bookmark" -msgstr "ë‹¤ìŒ ë¶ë§ˆí¬ë¡œ ì´ë™" +msgstr "ë‹¤ìŒ ë¶ë§ˆí¬ë¡œ ì´ë™í•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Bookmark" -msgstr "ì´ì „ ë¶ë§ˆí¬ë¡œ ì´ë™" +msgstr "ì´ì „ ë¶ë§ˆí¬ë¡œ ì´ë™í•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Remove All Bookmarks" -msgstr "ëª¨ë“ ë¶ë§ˆí¬ ì‚ì œ" +msgstr "ëª¨ë“ ë¶ë§ˆí¬ ì‚ì œí•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." -msgstr "함수로 ì´ë™..." +msgstr "함수로 ì´ë™í•˜ê¸°..." #: editor/plugins/script_text_editor.cpp msgid "Go to Line..." -msgstr "ë¼ì¸ìœ¼ë¡œ ì´ë™..." +msgstr "행으로 ì´ë™í•˜ê¸°..." #: editor/plugins/script_text_editor.cpp #: modules/visual_script/visual_script_editor.cpp @@ -6665,23 +6705,23 @@ msgstr "중단ì í† ê¸€" #: editor/plugins/script_text_editor.cpp msgid "Remove All Breakpoints" -msgstr "중단ì ëª¨ë‘ ì‚ì œ" +msgstr "중단ì ëª¨ë‘ ì‚ì œí•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Go to Next Breakpoint" -msgstr "ë‹¤ìŒ ì¤‘ë‹¨ì 으로 ì´ë™" +msgstr "ë‹¤ìŒ ì¤‘ë‹¨ì 으로 ì´ë™í•˜ê¸°" #: editor/plugins/script_text_editor.cpp msgid "Go to Previous Breakpoint" -msgstr "ì´ì „ 중단ì 으로 ì´ë™" +msgstr "ì´ì „ 중단ì 으로 ì´ë™í•˜ê¸°" #: editor/plugins/shader_editor_plugin.cpp msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" msgstr "" -"ì´ ì…°ì´ë”는 디스í¬ì—서 ìˆ˜ì •ë˜ì—ˆìŠµë‹ˆë‹¤.\n" -"ì–´ë–¤ ìž‘ì—…ì„ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +"ì´ ì…°ì´ë”는 디스í¬ì—서 ìˆ˜ì •í–ˆë„¤ìš”.\n" +"ì–´ë–¤ í–‰ë™ì„ í• ê±´ê°€ìš”?" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" @@ -6689,16 +6729,15 @@ msgstr "ì…°ì´ë”" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "This skeleton has no bones, create some children Bone2D nodes." -msgstr "" -"ì´ ìŠ¤ì¼ˆë ˆí†¤ì€ ë³¸ì„ ê°€ì§€ê³ ìžˆì§€ 않습니다, ìžì‹ìœ¼ë¡œ Bone2D 노드를 추가하세요." +msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ì–´ìš”, Bone2D노드를 ìžì‹ìœ¼ë¡œ 만드세요." #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Create Rest Pose from Bones" -msgstr "본으로부터 íœ´ì‹ í¬ì¦ˆ 만들기" +msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Rest Pose to Bones" -msgstr "ë³¸ì— íœ´ì‹ í¬ì¦ˆ ì„¤ì •" +msgstr "본ì—게 대기 ìžì„¸ ì„¤ì •í•˜ê¸°" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Skeleton2D" @@ -6706,11 +6745,11 @@ msgstr "ìŠ¤ì¼ˆë ˆí†¤2D" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Make Rest Pose (From Bones)" -msgstr "(본으로부터) íœ´ì‹ í¬ì¦ˆ 만들기" +msgstr "(본ì˜) 대기 ìžì„¸ 만들기" #: editor/plugins/skeleton_2d_editor_plugin.cpp msgid "Set Bones to Rest Pose" -msgstr "ë³¸ì„ íœ´ì‹ í¬ì¦ˆë¡œ ì„¤ì •" +msgstr "ë³¸ì„ ëŒ€ê¸° ìžì„¸ë¡œ ì„¤ì •í•˜ê¸°" #: editor/plugins/skeleton_editor_plugin.cpp msgid "Create physical bones" @@ -6758,7 +6797,7 @@ msgstr "ë·° í‰ë©´ 변형." #: editor/plugins/spatial_editor_plugin.cpp msgid "Scaling: " -msgstr "í¬ê¸°: " +msgstr "í¬ê¸° ì¡°ì ˆ 중: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " @@ -6770,11 +6809,11 @@ msgstr "%së„로 íšŒì „." #: editor/plugins/spatial_editor_plugin.cpp msgid "Keying is disabled (no key inserted)." -msgstr "키가 비활성화 ë˜ì–´ 있습니다 (키가 삽입ë˜ì§€ 않았습니다)." +msgstr "키가 êº¼ì ¸ 있어요 (키가 삽입ë˜ì§€ 않아요)." #: editor/plugins/spatial_editor_plugin.cpp msgid "Animation Key Inserted." -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키가 삽입ë˜ì—ˆìŠµë‹ˆë‹¤." +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키를 삽입했어요." #: editor/plugins/spatial_editor_plugin.cpp msgid "Pitch" @@ -6786,19 +6825,19 @@ msgstr "ìš”" #: editor/plugins/spatial_editor_plugin.cpp msgid "Objects Drawn" -msgstr "ê·¸ë ¤ì§„ 오브ì 트" +msgstr "ê·¸ë ¤ì§„ ê°ì²´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Material Changes" -msgstr "머티리얼 변경" +msgstr "머티리얼 바꾸기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Shader Changes" -msgstr "ì…°ì´ë” 변경" +msgstr "ì…°ì´ë” 바꾸기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Surface Changes" -msgstr "서피스 변경" +msgstr "표면 바꾸기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Draw Calls" @@ -6806,7 +6845,7 @@ msgstr "드로우 콜" #: editor/plugins/spatial_editor_plugin.cpp msgid "Vertices" -msgstr "버틱스" +msgstr "ì " #: editor/plugins/spatial_editor_plugin.cpp msgid "Top View." @@ -6854,19 +6893,19 @@ msgstr "ë’·ë©´" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Transform with View" -msgstr "ë³€í˜•ì„ ë·°ì— ì •ë ¬" +msgstr "ë³€í˜•ì„ ë·°ì— ì •ë ¬í•˜ê¸°" #: editor/plugins/spatial_editor_plugin.cpp msgid "Align Rotation with View" -msgstr "íšŒì „ì„ ë·°ì— ì •ë ¬" +msgstr "íšŒì „ì„ ë·°ì— ì •ë ¬í•˜ê¸°" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." -msgstr "ì„ íƒëœ 부모 노드가 없어서 ìžì‹ë…¸ë“œë¥¼ ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ 없습니다." +msgstr "ìžì‹ì„ ì¸ìŠ¤í„´ìŠ¤í• ë¶€ëª¨ê°€ 없어요." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "This operation requires a single selected node." -msgstr "ì´ ìž‘ì—…ì€ í•˜ë‚˜ì˜ ì„ íƒëœ 노드를 필요로 합니다." +msgstr "ì´ ìž‘ì—…ì€ í•˜ë‚˜ì˜ ë…¸ë“œë¥¼ ì„ íƒí•´ì•¼ í•´ìš”." #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock View Rotation" @@ -6874,19 +6913,19 @@ msgstr "ë·° íšŒì „ ìž ê¸ˆ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Normal" -msgstr "Normal 표시" +msgstr "노멀 표시하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Wireframe" -msgstr "Wireframe 표시" +msgstr "와ì´ì–´í”„ë ˆìž„ 표시하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Overdraw" -msgstr "Overdraw 표시" +msgstr "오버드로 표시하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Display Unshaded" -msgstr "ìŒì˜ ì—†ì´ í‘œì‹œ" +msgstr "ì…°ì´ë” ì—†ìŒ í‘œì‹œí•˜ê¸°" #: editor/plugins/spatial_editor_plugin.cpp msgid "View Environment" @@ -6913,49 +6952,53 @@ msgid "Audio Listener" msgstr "오디오 리스너" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "í•„í„° 활성화" +msgstr "ì§„ë™ ì™œê³¡ 켜기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" -msgstr "시네마틱 미리보기" +msgstr "시네마틱 미리 보기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Left" -msgstr "ìžìœ 시ì 왼쪽" +msgstr "ìžìœ 시ì 왼쪽으로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Right" -msgstr "ìžìœ 시ì 오른쪽" +msgstr "ìžìœ 시ì 오른쪽으로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Forward" -msgstr "ìžìœ 시ì 앞으로 ì´ë™" +msgstr "ìžìœ 시ì 앞으로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Backwards" -msgstr "ìžìœ 시ì 뒤로 ì´ë™" +msgstr "ìžìœ 시ì 뒤로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Up" -msgstr "ìžìœ 시ì 위로" +msgstr "ìžìœ 시ì 위로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Down" -msgstr "ìžìœ 시ì 아래로 ì´ë™" +msgstr "ìžìœ 시ì 아래로 가기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Freelook Speed Modifier" -msgstr "ìžìœ 시ì ì†ë„ 변화" +msgstr "ìžìœ 시ì ì†ë„ ìˆ˜ì •ìž" + +#: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "ìžìœ 시ì ì†ë„ ìˆ˜ì •ìž" #: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." msgstr "" -"ì°¸ê³ : FPS ê°’ì€ íŽ¸ì§‘ê¸°ì˜ í”„ë ˆìž„ ì†ë„입니다.\n" -"게임 ë‚´ ì„±ëŠ¥ì„ ë³´ì¦í•˜ëŠ” 표시로 ë³¼ 수 없습니다." +"ì°¸ê³ : FPS ê°’ì€ íŽ¸ì§‘ê¸°ì˜ í”„ë ˆìž„ìœ¼ë¡œ 표시ë˜ìš”.\n" +"ì´ê²ƒì´ 게임 ë‚´ ì„±ëŠ¥ì„ ë³´ìž¥í• ìˆ˜ 없어요." #: editor/plugins/spatial_editor_plugin.cpp msgid "View Rotation Locked" @@ -6971,7 +7014,7 @@ msgstr "노드를 ë°”ë‹¥ì— ìŠ¤ëƒ…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "ì„ íƒ í•ëª©ì„ ìŠ¤ëƒ…í• ë°”ë‹¥ì„ ì°¾ì„ ìˆ˜ 없어요." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -6979,14 +7022,17 @@ msgid "" "Alt+Drag: Move\n" "Alt+RMB: Depth list selection" msgstr "" -"드래그: íšŒì „\n" -"알트+드래그: ì´ë™\n" -"알트+ìš°í´ë¦: 겹친 ëª©ë¡ ì„ íƒ" +"드래그: íšŒì „í•˜ê¸°\n" +"Alt+드래그: ì´ë™í•˜ê¸°\n" +"Alt+ìš°í´ë¦: 겹친 ëª©ë¡ ì„ íƒê¸°í•˜ê¸°" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "로컬 스페ì´ìФ 모드 (%s)" +msgstr "로컬 스페ì´ìФ 사용하기" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "스냅 사용하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7018,7 +7064,7 @@ msgstr "ì›ê·¼/ì§êµ ë·° ì „í™˜" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" -msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 삽입" +msgstr "ì• ë‹ˆë©”ì´ì…˜ 키 삽입하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Origin" @@ -7026,7 +7072,7 @@ msgstr "ì›ì í¬ì»¤ìФ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Focus Selection" -msgstr "ì„ íƒ í¬ì»¤ìФ" +msgstr "ì„ íƒ í•목 í¬ì»¤ìФ" #: editor/plugins/spatial_editor_plugin.cpp msgid "Toggle Freelook" @@ -7035,11 +7081,11 @@ msgstr "ìžìœ 시ì í† ê¸€" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform" -msgstr "변형" +msgstr "변형하기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Object to Floor" -msgstr "물체를 ë°”ë‹¥ì— ìŠ¤ëƒ…" +msgstr "ê°ì²´ë¥¼ ë°”ë‹¥ì— ìŠ¤ëƒ…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -7083,9 +7129,8 @@ msgstr "ê²©ìž ë³´ê¸°" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "ì„¤ì •" +msgstr "ì„¤ì •..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7121,11 +7166,11 @@ msgstr "Z-ì›ê²½ 보기:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Change" -msgstr "변형 변경" +msgstr "변형 바꾸기" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate:" -msgstr "ì´ë™:" +msgstr "ì´ë™í•˜ê¸°:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate (deg.):" @@ -7137,19 +7182,19 @@ msgstr "í¬ê¸° (비율):" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Type" -msgstr "변형 타입" +msgstr "변형 ìœ í˜•" #: editor/plugins/spatial_editor_plugin.cpp msgid "Pre" -msgstr "Pre" +msgstr "ì „" #: editor/plugins/spatial_editor_plugin.cpp msgid "Post" -msgstr "Post" +msgstr "후" #: editor/plugins/spatial_editor_plugin.cpp msgid "Nameless gizmo" -msgstr "ì´ë¦„없는 오브ì íŠ¸ì˜ ì¤‘ì‹¬ì " +msgstr "ì´ë¦„ 없는 기즈모" #: editor/plugins/sprite_editor_plugin.cpp msgid "Create Mesh2D" @@ -7169,31 +7214,31 @@ msgstr "LightOccluder2D 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Sprite is empty!" -msgstr "스프ë¼ì´íŠ¸ê°€ 비었습니다!" +msgstr "스프ë¼ì´íŠ¸ê°€ 없어요!" #: editor/plugins/sprite_editor_plugin.cpp msgid "Can't convert a sprite using animation frames to mesh." -msgstr "스프ë¼ì´íŠ¸ê°€ ì• ë‹ˆë©”ì´ì…˜ í”„ë ˆìž„ì„ ì‚¬ìš©í•´ì„œ 메시로 ì „í™˜ë 수 없습니다." +msgstr "ì• ë‹ˆë©”ì´ì…˜ í”„ë ˆìž„ì„ ì‚¬ìš©í•˜ëŠ” 스프ë¼ì´íŠ¸ë¥¼ 메시로 ë³€í™˜í• ìˆ˜ 없어요." #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't replace by mesh." -msgstr "ìž˜ëª»ëœ í˜•íƒœ, 메시로 ëŒ€ì²´í• ìˆ˜ 없습니다." +msgstr "ìž˜ëª»ëœ í˜•íƒœ, 메시로 ëŒ€ì²´í• ìˆ˜ 없어요." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Mesh2D" -msgstr "Mesh2D로 ì „í™˜" +msgstr "Mesh2D로 변환하기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create polygon." -msgstr "ìž˜ëª»ëœ í˜•íƒœ, í´ë¦¬ê³¤ì„ 만들 수 없습니다." +msgstr "ìž˜ëª»ëœ í˜•íƒœ, í´ë¦¬ê³¤ì„ 만들 수 없어요." #: editor/plugins/sprite_editor_plugin.cpp msgid "Convert to Polygon2D" -msgstr "Polygon2D로 ì „í™˜" +msgstr "Polygon2D로 변환하기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create collision polygon." -msgstr "ìž˜ëª»ëœ í˜•íƒœ, ì¶©ëŒ í´ë¦¬ê³¤ì„ 만들 수 없습니다." +msgstr "ìž˜ëª»ëœ í˜•íƒœ, ì¶©ëŒ í´ë¦¬ê³¤ì„ 만들 수 없어요." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create CollisionPolygon2D Sibling" @@ -7201,7 +7246,7 @@ msgstr "CollisionPolygon2D 노드 만들기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Invalid geometry, can't create light occluder." -msgstr "ìž˜ëª»ëœ í˜•íƒœ, 조명 ì–´í´ë£¨ë”를 만들 수 없습니다." +msgstr "ìž˜ëª»ëœ í˜•íƒœ, 조명 ì–´í´ë£¨ë”를 만들 수 없어요." #: editor/plugins/sprite_editor_plugin.cpp msgid "Create LightOccluder2D Sibling" @@ -7216,12 +7261,17 @@ msgid "Simplification: " msgstr "단순화: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "성장 (픽셀): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "성장 (픽셀): " #: editor/plugins/sprite_editor_plugin.cpp msgid "Update Preview" -msgstr "ì—…ë°ì´íЏ 미리보기" +msgstr "ì—…ë°ì´íЏ 미리 보기" #: editor/plugins/sprite_editor_plugin.cpp msgid "Settings:" @@ -7229,23 +7279,23 @@ msgstr "ì„¤ì •:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "No Frames Selected" -msgstr "í”„ë ˆìž„ì´ ì„ íƒë˜ì§€ 않ìŒ" +msgstr "ì„ íƒí•œ í”„ë ˆìž„ ì—†ìŒ" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add %d Frame(s)" -msgstr "%d í”„ë ˆìž„ 추가" +msgstr "%dê°œì˜ í”„ë ˆìž„ 추가하기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" -msgstr "í”„ë ˆìž„ 추가" +msgstr "í”„ë ˆìž„ 추가하기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "ERROR: Couldn't load frame resource!" -msgstr "오류: í”„ë ˆìž„ 리소스를 불러올 수 없습니다!" +msgstr "오류: í”„ë ˆìž„ 리소스를 불러올 수 없어요!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Resource clipboard is empty or not a texture!" -msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었거나 í…스ì³ê°€ 아닙니다!" +msgstr "리소스 í´ë¦½ë³´ë“œê°€ 비었거나 í…스처가 아니ì—ìš”!" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Paste Frame" @@ -7253,23 +7303,27 @@ msgstr "í”„ë ˆìž„ 붙여넣기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Empty" -msgstr "빈 í”„ë ˆìž„ 추가" +msgstr "빈 í”„ë ˆìž„ 추가하기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Change Animation FPS" -msgstr "ì• ë‹ˆë©”ì´ì…˜ FPS 변경" +msgstr "ì• ë‹ˆë©”ì´ì…˜ FPS 바꾸기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "(empty)" msgstr "(비었ìŒ)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "í”„ë ˆìž„ ì´ë™í•˜ê¸°" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "ì• ë‹ˆë©”ì´ì…˜:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "New Animation" -msgstr "새로운 ì• ë‹ˆë©”ì´ì…˜" +msgstr "새 ì• ë‹ˆë©”ì´ì…˜" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Speed (FPS):" @@ -7285,7 +7339,7 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ í”„ë ˆìž„:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add a Texture from File" -msgstr "파ì¼ì—서 í…ìŠ¤ì³ ì¶”ê°€í•˜ê¸°" +msgstr "파ì¼ì—서 í…스처 추가하기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frames from a Sprite Sheet" @@ -7293,23 +7347,23 @@ msgstr "스프ë¼ì´íЏ 시트ì—서 í”„ë ˆìž„ 추가하기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (Before)" -msgstr "빈 í”„ë ˆìž„ 삽입 (ì´ì „)" +msgstr "빈 í”„ë ˆìž„ 삽입하기 (ì´ì „)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Insert Empty (After)" -msgstr "빈 í”„ë ˆìž„ 삽입 (ì´í›„)" +msgstr "빈 í”„ë ˆìž„ 삽입하기 (ì´í›„)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (Before)" -msgstr "ì´ë™ (ì´ì „)" +msgstr "ì´ë™í•˜ê¸° (ì´ì „)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Move (After)" -msgstr "ì´ë™ (ì´í›„)" +msgstr "ì´ë™í•˜ê¸° (ì´í›„)" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Select Frames" -msgstr "í”„ë ˆìž„ ì„ íƒ" +msgstr "í”„ë ˆìž„ ì„ íƒí•˜ê¸°" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Horizontal:" @@ -7321,7 +7375,7 @@ msgstr "수ì§:" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Select/Clear All Frames" -msgstr "ëª¨ë“ í”„ë ˆìž„ ì„ íƒ/지우기" +msgstr "ëª¨ë“ í”„ë ˆìž„ ì„ íƒí•˜ê¸°/지우기" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Create Frames from Sprite Sheet" @@ -7333,11 +7387,11 @@ msgstr "스프ë¼ì´íЏ í”„ë ˆìž„" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Region Rect" -msgstr "ì˜ì— ì„¤ì •" +msgstr "ì‚¬ê° ì˜ì— ì„¤ì •í•˜ê¸°" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Set Margin" -msgstr "마진 ì„¤ì •" +msgstr "여백 ì„¤ì •í•˜ê¸°" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Snap Mode:" @@ -7374,27 +7428,27 @@ msgstr "분리.:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" -msgstr "í…스ì³ì§€ì—" +msgstr "í…스처 ì˜ì—" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All Items" -msgstr "ëª¨ë“ í•목 추가" +msgstr "ëª¨ë“ í•목 추가하기" #: editor/plugins/theme_editor_plugin.cpp msgid "Add All" -msgstr "ëª¨ë‘ ì¶”ê°€" +msgstr "ëª¨ë‘ ì¶”ê°€í•˜ê¸°" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove All Items" -msgstr "ëª¨ë“ í•목 ì‚ì œ" +msgstr "ëª¨ë“ í•목 ì‚ì œí•˜ê¸°" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp msgid "Remove All" -msgstr "ëª¨ë‘ ì‚ì œ" +msgstr "ëª¨ë‘ ì‚ì œí•˜ê¸°" #: editor/plugins/theme_editor_plugin.cpp msgid "Edit Theme" -msgstr "테마 편집" +msgstr "테마 편집하기" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -7402,11 +7456,11 @@ msgstr "테마 편집 메뉴." #: editor/plugins/theme_editor_plugin.cpp msgid "Add Class Items" -msgstr "í´ëž˜ìФ í•목 추가" +msgstr "í´ëž˜ìФ í•목 추가하기" #: editor/plugins/theme_editor_plugin.cpp msgid "Remove Class Items" -msgstr "í´ëž˜ìФ í•목 ì‚ì œ" +msgstr "í´ëž˜ìФ í•목 ì‚ì œí•˜ê¸°" #: editor/plugins/theme_editor_plugin.cpp msgid "Create Empty Template" @@ -7418,7 +7472,7 @@ msgstr "빈 편집기 템플릿 만들기" #: editor/plugins/theme_editor_plugin.cpp msgid "Create From Current Editor Theme" -msgstr "현재 편집기 테마로부터 만들기" +msgstr "현재 편집기 테마ì—서 만들기" #: editor/plugins/theme_editor_plugin.cpp msgid "Toggle Button" @@ -7426,7 +7480,7 @@ msgstr "í† ê¸€ 버튼" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Button" -msgstr "비활성화 버튼" +msgstr "꺼진 버튼" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" @@ -7434,7 +7488,7 @@ msgstr "í•목" #: editor/plugins/theme_editor_plugin.cpp msgid "Disabled Item" -msgstr "ë¹„í™œì„±í™”ëœ í•목" +msgstr "꺼진 í•목" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -7461,14 +7515,12 @@ msgid "Submenu" msgstr "하위 메뉴" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "í•목 1" +msgstr "하위 í•목 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "í•목 2" +msgstr "하위 í•목 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7508,7 +7560,7 @@ msgstr "ë§Žì€,옵션,갖춤" #: editor/plugins/theme_editor_plugin.cpp msgid "Data Type:" -msgstr "ë°ì´í„° 타입:" +msgstr "ë°ì´í„° ìœ í˜•:" #: editor/plugins/theme_editor_plugin.cpp msgid "Icon" @@ -7536,12 +7588,12 @@ msgstr "ì„ íƒ ì§€ìš°ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Fix Invalid Tiles" -msgstr "ìž˜ëª»ëœ íƒ€ì¼ ìˆ˜ì •" +msgstr "ìž˜ëª»ëœ íƒ€ì¼ ê³ ì¹˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Cut Selection" -msgstr "ì„ íƒ ìž˜ë¼ë‚´ê¸°" +msgstr "ì„ íƒ í•목 잘ë¼ë‚´ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint TileMap" @@ -7549,11 +7601,11 @@ msgstr "타ì¼ë§µ ì¹ í•˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Line Draw" -msgstr "ì§ì„ 그리기" +msgstr "ì„ ê·¸ë¦¬ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rectangle Paint" -msgstr "사ê°ì˜ì— ì¹ í•˜ê¸°" +msgstr "ì‚¬ê° ì˜ì— ì¹ í•˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Bucket Fill" @@ -7573,28 +7625,35 @@ msgstr "바꾸기" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Disable Autotile" -msgstr "ì˜¤í† íƒ€ì¼ ë¹„í™œì„±í™”" +msgstr "ì˜¤í† íƒ€ì¼ ë„기" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Enable Priority" msgstr "ìš°ì„ ìˆœìœ„ 편집" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "íƒ€ì¼ í•„í„°" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "타ì¼ì„ ì‚¬ìš©í•˜ë ¤ë©´ ì´ TileMapì—게 TileSet 리소스를 주세요." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "íƒ€ì¼ ì¹ í•˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" "Shift+ìš°í´ë¦: ì„ ê·¸ë¦¬ê¸°\n" -"Shift+Ctrl+ìš°í´ë¦:사ê°í˜• 페ì¸íЏ" +"Shift+Ctrl+ìš°í´ë¦: ì‚¬ê° ì˜ì— 페ì¸íЏ" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" -msgstr "íƒ€ì¼ ì„ íƒ" +msgstr "íƒ€ì¼ ì„ íƒí•˜ê¸°" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Rotate Left" @@ -7618,19 +7677,19 @@ msgstr "변형 지우기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Add Texture(s) to TileSet." -msgstr "TileSetì— í…ìŠ¤ì³ ì¶”ê°€í•˜ê¸°." +msgstr "TileSetì— í…스처 추가하기." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected Texture from TileSet." -msgstr "ì„ íƒëœ í…스ì³ë¥¼ TileSetì—서 ì‚ì œí•˜ê¸°." +msgstr "ì„ íƒí•œ í…스처를 TileSetì—서 ì‚ì œí•˜ê¸°." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from Scene" -msgstr "씬으로부터 만들기" +msgstr "씬ì—서 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from Scene" -msgstr "씬으로부터 병합하기" +msgstr "씬ì—서 병합하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Next Coordinate" @@ -7694,7 +7753,7 @@ msgstr "비트 ë§ˆìŠ¤í¬ ì§€ìš°ê¸°." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new rectangle." -msgstr "새 사ê°í˜• 만들기." +msgstr "새로운 사ê°í˜• 만들기." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create a new polygon." @@ -7706,57 +7765,62 @@ msgstr "사ê°í˜• ë‚´ë¶€ì— í´ë¦¬ê³¤ì„ ìœ ì§€í•˜ê¸°." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Enable snap and show grid (configurable via the Inspector)." -msgstr "ìŠ¤ëƒ…ì„ í™œì„±í™” í•˜ê³ ê²©ìžë¥¼ ë³´ì´ê¸° (ì¸ìŠ¤íŽ™í„°ë¥¼ 통해 êµ¬ì„±í• ìˆ˜ 있습니다)." +msgstr "ìŠ¤ëƒ…ì„ ì¼œê³ ê²©ìžë¥¼ ë³´ì´ê¸° (ì¸ìŠ¤íŽ™í„°ë¥¼ 통해 ì„¤ì •í•¨)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" -msgstr "íƒ€ì¼ ì´ë¦„ ë³´ì´ê¸° (Alt 키를 누르세요)" +msgstr "íƒ€ì¼ ì´ë¦„ ë³´ì´ê¸° (Alt키를 누르세요)" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"타ì¼ì„ ê²½ê³„ì— ë§žê²Œ íŽ¸ì§‘í•˜ë ¤ë©´ 왼쪽 패ë„ì—서 í…스처를 추가하거나 ì„ íƒí•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"ì„ íƒí•œ í…스ì³ë¥¼ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? 해당 í…스ì³ë¥¼ 사용하는 ëª¨ë“ íƒ€ì¼ì´ ì‚ì œë " -"것입니다." +"ì„ íƒí•œ í…스처를 ì‚ì œí• ê¹Œìš”? ì´ í…스처를 사용하는 ëª¨ë“ íƒ€ì¼ë„ ì‚ì œë ê±°ì—ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." -msgstr "ì‚ì œí• í…스ì³ë¥¼ ì„ íƒí•˜ì§€ 않았습니다." +msgstr "ì‚ì œí• í…스처를 ì„ íƒí•˜ì§€ 않았어요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "씬으로부터 ìƒì„±í•˜ì‹œê² 습니까? 현재 타ì¼ì„ ëª¨ë‘ ë®ì–´ì”니다." +msgstr "씬ì—서 만들까요? ëª¨ë“ í˜„ìž¬ 파ì¼ì„ ë®ì–´ 씌울 ê±°ì—ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" -msgstr "씬으로부터 ë³‘í•©í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "씬ì—서 ë³‘í•©í• ê¹Œìš”?" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Texture" -msgstr "í…ìŠ¤ì³ ì‚ì œ" +msgstr "í…스처 ì‚ì œí•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "%s file(s) were not added because was already on the list." -msgstr "%s 파ì¼ì´ ì´ë¯¸ 목ë¡ì— 존재하여 추가ë˜ì§€ 않습니다." +msgstr "%s 파ì¼ì´ ì´ë¯¸ 목ë¡ì— 있어서 추가하지 않았어요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Drag handles to edit Rect.\n" "Click on another Tile to edit it." msgstr "" -"í•¸ë“¤ì„ ë“œëž˜ê·¸í•˜ì—¬ 사ê°í˜•ì„ íŽ¸ì§‘.\n" -"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." +"í•¸ë“¤ì„ ë“œëž˜ê·¸í•˜ì—¬ 사ê°í˜•ì„ íŽ¸ì§‘í•´ìš”.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete selected Rect." -msgstr "ì„ íƒëœ 사ê°í˜•ì„ ì‚ì œí•˜ê¸°." +msgstr "ì„ íƒí•œ 사ê°í˜•ì„ ì‚ì œí•˜ê¸°." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select current edited sub-tile.\n" "Click on another Tile to edit it." msgstr "" -"현재 íŽ¸ì§‘ëœ ì„œë¸Œ íƒ€ì¼ ì„ íƒ.\n" -"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." +"현재 편집한 하위 íƒ€ì¼ ì„ íƒí•˜ê¸°.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Delete polygon." @@ -7771,7 +7835,7 @@ msgid "" msgstr "" "좌í´ë¦: 비트를 켬.\n" "ìš°í´ë¦: 비트를 ë”.\n" -"Shift+좌í´ë¦: 와ì¼ë“œì¹´ë“œ 비트를 ì„¤ì •í•¨.\n" +"Shift+좌í´ë¦: 와ì¼ë“œì¹´ë“œ 비트를 ì„¤ì •.\n" "다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp @@ -7780,8 +7844,8 @@ msgid "" "bindings.\n" "Click on another Tile to edit it." msgstr "" -"ì•„ì´ì½˜ìœ¼ë¡œ ì‚¬ìš©í• ì„œë¸Œ 타ì¼ì„ ì„¤ì •í•˜ì„¸ìš”, 올바르지 ì•Šì€ ìžë™ íƒ€ì¼ ë°”ì¸ë”©ì—ë„ " -"사용ë©ë‹ˆë‹¤.\n" +"ì•„ì´ì½˜ìœ¼ë¡œ 쓸 하위 타ì¼ì„ ì„ íƒí•˜ì„¸ìš”, ìž˜ëª»ëœ ì˜¤í† íƒ€ì¼ ë°”ì¸ë”©ì—ë„ ì“°ì¼ ê±°ì—" +"ìš”.\n" "다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp @@ -7789,20 +7853,20 @@ msgid "" "Select sub-tile to change its priority.\n" "Click on another Tile to edit it." msgstr "" -"서브 타ì¼ì„ ì„ íƒí•´ ìš°ì„ ìˆœìœ„ë¥¼ 바꿈.\n" -"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦." +"하위 타ì¼ì„ ì„ íƒí•´ì„œ ìš°ì„ ìˆœìœ„ë¥¼ 바꿔요.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "" "Select sub-tile to change its z index.\n" "Click on another Tile to edit it." msgstr "" -"서브 타ì¼ì„ ì„ íƒí•´ z ì¸ë±ìŠ¤ë¥¼ 변경합니다.\n" -"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•©ë‹ˆë‹¤." +"하위 타ì¼ì„ ì„ íƒí•´ì„œ Z ì¸ë±ìŠ¤ë¥¼ 바꿔요.\n" +"다른 타ì¼ì„ íŽ¸ì§‘í•˜ë ¤ë©´ í´ë¦í•˜ì„¸ìš”." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Region" -msgstr "íƒ€ì¼ ì˜ì— ì„¤ì •" +msgstr "íƒ€ì¼ ì˜ì— ì„¤ì •í•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Tile" @@ -7810,23 +7874,23 @@ msgstr "íƒ€ì¼ ë§Œë“¤ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Set Tile Icon" -msgstr "íƒ€ì¼ ì•„ì´ì½˜ ì„¤ì •" +msgstr "íƒ€ì¼ ì•„ì´ì½˜ ì„¤ì •í•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Bitmask" -msgstr "íƒ€ì¼ ë¹„íŠ¸ ë§ˆìŠ¤í¬ íŽ¸ì§‘" +msgstr "íƒ€ì¼ ë¹„íŠ¸ ë§ˆìŠ¤í¬ íŽ¸ì§‘í•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Collision Polygon" -msgstr "ì¶©ëŒ í´ë¦¬ê³¤ 편집" +msgstr "ì¶©ëŒ í´ë¦¬ê³¤ 편집하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Occlusion Polygon" -msgstr "ì–´í´ë£¨ì „ í´ë¦¬ê³¤ 편집" +msgstr "ì–´í´ë£¨ì „ í´ë¦¬ê³¤ 편집하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Navigation Polygon" -msgstr "내비게ì´ì…˜ í´ë¦¬ê³¤ 편집" +msgstr "내비게ì´ì…˜ í´ë¦¬ê³¤ 편집하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Paste Tile Bitmask" @@ -7846,27 +7910,27 @@ msgstr "ë³¼ë¡í•œ í´ë¦¬ê³¤ 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Tile" -msgstr "íƒ€ì¼ ì‚ì œ" +msgstr "íƒ€ì¼ ì‚ì œí•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Collision Polygon" -msgstr "ì¶©ëŒ í´ë¦¬ê³¤ ì‚ì œ" +msgstr "ì¶©ëŒ í´ë¦¬ê³¤ ì‚ì œí•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Occlusion Polygon" -msgstr "ì–´í´ë£¨ì „ í´ë¦¬ê³¤ ì‚ì œ" +msgstr "ì–´í´ë£¨ì „ í´ë¦¬ê³¤ ì‚ì œí•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove Navigation Polygon" -msgstr "내비게ì´ì…˜ í´ë¦¬ê³¤ ì‚ì œ" +msgstr "내비게ì´ì…˜ í´ë¦¬ê³¤ ì‚ì œí•˜ê¸°" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Priority" -msgstr "í•„í„° ìš°ì„ ìˆœìœ„ 편집" +msgstr "í•„í„° ìš°ì„ ìˆœìœ„ 편집하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Edit Tile Z Index" -msgstr "íƒ€ì¼ Z ì¸ë±ìФ 편집" +msgstr "íƒ€ì¼ Z ì¸ë±ìФ 편집하기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create Collision Polygon" @@ -7878,23 +7942,113 @@ msgstr "ì–´í´ë£¨ì „ í´ë¦¬ê³¤ 만들기" #: editor/plugins/tile_set_editor_plugin.cpp msgid "This property can't be changed." -msgstr "ì´ ì†ì„±ì„ 바꿀 수 없습니다." +msgstr "ì´ ì†ì„±ì€ 바꿀 수 없어요." #: editor/plugins/tile_set_editor_plugin.cpp msgid "TileSet" msgstr "타ì¼ì…‹" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "ì´ìš©í• 수 있는 ë²„ì „ 관리 시스템(VCS)ì´ ì—†ì–´ìš”." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "오류" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "커밋 메시지를 ì œê³µí•˜ì§€ 않았어요" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "스테ì´ì§€ì— ì¶”ê°€ëœ íŒŒì¼ì´ 없어요" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "커밋" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "ë²„ì „ 관리 시스템(VCS)ì´ ì´ˆê¸°í™”ë˜ì§€ 않았어요" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "ë²„ì „ 관리 시스템" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "초기화" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "스테ì´ì§• ì˜ì—" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "새 변경 ì‚¬í• ê°ì§€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "변경 사í•" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "ìˆ˜ì •ë¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "ì´ë¦„ 변경ë¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "ì‚ì œë¨" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "타입체ì¸ì§€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "ì„ íƒ í•목 스테ì´ì§€ë¡œ 보내기" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "ëª¨ë‘ ìŠ¤í…Œì´ì§€ë¡œ 보내기" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "커밋 메시지 추가하기" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "커밋 변경 사í•" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "ìƒíƒœ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "ìµœì‹ ë²„ì „ìœ¼ë¡œ 커밋하기 ì „ì— íŒŒì¼ diff 보기" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "íŒŒì¼ diffê°€ ì¼œì ¸ 있지 않아요" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "íŒŒì¼ diffì—서 ê°ì§€í•œ 변경 사í•" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(GLES3ë§Œ 가능)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "ìž…ë ¥ 추가 +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" -msgstr "ì¶œë ¥ 추가 +" +#, fuzzy +msgid "Add Output" +msgstr "ì¶œë ¥ 추가하기 +" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -7909,60 +8063,65 @@ msgid "Boolean" msgstr "불리언" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "샘플" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" -msgstr "ìž…ë ¥ í¬íЏ 추가" +msgstr "ìž…ë ¥ í¬íЏ 추가하기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" -msgstr "ì¶œë ¥ í¬íЏ 추가" +msgstr "ì¶œë ¥ í¬íЏ 추가하기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change input port type" -msgstr "ìž…ë « í¬íЏ 타입 변경" +msgstr "ìž…ë ¥ í¬íЏ ìœ í˜• 바꾸기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port type" -msgstr "ì¶œë ¥ í¬íЏ 타입 변경" +msgstr "ì¶œë ¥ í¬íЏ ìœ í˜• 바꾸기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change input port name" -msgstr "ìž…ë ¥ í¬íЏ ì´ë¦„ 변경" +msgstr "ìž…ë ¥ í¬íЏ ì´ë¦„ 바꾸기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Change output port name" -msgstr "ì¶œë ¥ í¬íЏ ì´ë¦„ 변경" +msgstr "ì¶œë ¥ í¬íЏ ì´ë¦„ 바꾸기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Remove input port" -msgstr "ìž…ë ¥ í¬íЏ ì‚ì œ" +msgstr "ìž…ë ¥ í¬íЏ ì‚ì œí•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Remove output port" -msgstr "ì¶œë ¥ í¬íЏ ì‚ì œ" +msgstr "ì¶œë ¥ í¬íЏ ì‚ì œí•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set expression" -msgstr "í‘œí˜„ì‹ ì„¤ì •" +msgstr "í‘œí˜„ì‹ ì„¤ì •í•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Resize VisualShader node" -msgstr "비주얼 ì…°ì´ë” 노드 í¬ê¸° ì¡°ì •" +msgstr "비주얼 ì…°ì´ë” 노드 í¬ê¸° ì¡°ì •í•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" -msgstr "í†µì¼ ì´ë¦„ ì„¤ì •" +msgstr "Uniform ì´ë¦„ ì„¤ì •í•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Input Default Port" -msgstr "ìž…ë ¥ 기본 í¬íЏ ì„¤ì •" +msgstr "ìž…ë ¥ 기본 í¬íЏ ì„¤ì •í•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" -msgstr "노드를 비주얼 ì…°ì´ë”ì— ì¶”ê°€" +msgstr "노드를 비주얼 ì…°ì´ë”ì— ì¶”ê°€í•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Duplicate Nodes" -msgstr "노드 ë³µì œ" +msgstr "노드 ë³µì œí•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp @@ -7971,15 +8130,15 @@ msgstr "노드 붙여넣기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Delete Nodes" -msgstr "노드 ì‚ì œ" +msgstr "노드 ì‚ì œí•˜ê¸°" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Input Type Changed" -msgstr "비주얼 ì…°ì´ë” ìž…ë ¥ 타입 변경ë¨" +msgstr "비주얼 ì…°ì´ë” ìž…ë ¥ ìœ í˜• 변경ë¨" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vertex" -msgstr "버í…스" +msgstr "ê¼ì§“ì " #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Fragment" @@ -7990,9 +8149,8 @@ msgid "Light" msgstr "조명" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "ì…°ì´ë” 노드 만들기" +msgstr "ê²°ê³¼ ì…°ì´ë” 코드 ë³´ì´ê¸°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8012,11 +8170,11 @@ msgstr "회색조 함수." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." -msgstr "HSV 벡터를 RGB로 변환합니다." +msgstr "HSV 벡터를 RGB로 변환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts RGB vector to HSV equivalent." -msgstr "RGB 벡터를 HSV로 변환합니다." +msgstr "RGB 벡터를 HSV로 변환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sepia function." @@ -8068,7 +8226,7 @@ msgstr "ìƒ‰ìƒ ìœ ë‹ˆí¼." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." -msgstr "ë‘ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ %s 비êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë‘ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ %s 비êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" @@ -8086,20 +8244,20 @@ msgstr "보다 í¬ê±°ë‚˜ 같다 (>=)" msgid "" "Returns an associated vector if the provided scalars are equal, greater or " "less." -msgstr "ì œê³µëœ ìŠ¤ì¹¼ë¼ê°€ 같거나, ë” í¬ê±°ë‚˜, ë” ìž‘ìœ¼ë©´ ê´€ë ¨ 벡터를 반환합니다." +msgstr "ì œê³µëœ ìŠ¤ì¹¼ë¼ê°€ 같거나, ë” í¬ê±°ë‚˜, ë” ìž‘ìœ¼ë©´ ê´€ë ¨ 벡터를 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "무한(INF)ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "INF(무한)ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." msgstr "" -"ìˆ«ìž ì•„ë‹˜(NaN)ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +"NaN(ìˆ«ìž ì•„ë‹˜)ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" @@ -8116,19 +8274,24 @@ msgstr "같지 않다 (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." -msgstr "불리언 ê°’ì´ ì°¸ì´ê±°ë‚˜ ê±°ì§“ì´ë©´ ê´€ë ¨ 벡터를 반환합니다." +msgstr "불리언 ê°’ì´ ì°¸ì´ê±°ë‚˜ ê±°ì§“ì´ë©´ ê´€ë ¨ 벡터를 반환해요." + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "불리언 ê°’ì´ ì°¸ì´ê±°ë‚˜ ê±°ì§“ì´ë©´ ê´€ë ¨ 스칼ë¼ë¥¼ 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." -msgstr "ë‘ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë‘ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the boolean result of the comparison between INF (or NaN) and a " "scalar parameter." msgstr "" -"무한(INF) (ë˜ëŠ” ìˆ«ìž ì•„ë‹˜(NaN))ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’" -"ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +"INF(무한) (ë˜ëŠ” NaN(ìˆ«ìž ì•„ë‹˜))ê³¼ ìŠ¤ì¹¼ë¼ ë§¤ê°œë³€ìˆ˜ ì‚¬ì´ ë¹„êµì˜ 불리언 ê²°ê³¼ ê°’" +"ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean constant." @@ -8172,11 +8335,11 @@ msgstr "ê¼ì§“ì ê³¼ 프래그먼트 ì…°ì´ë” ëª¨ë“œì— ëŒ€í•œ '%s' ìž…ë ¥ 매ê #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." -msgstr "Scalar 함수." +msgstr "ìŠ¤ì¹¼ë¼ í•¨ìˆ˜." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar operator." -msgstr "Scalar ì—°ì‚°ìž." +msgstr "ìŠ¤ì¹¼ë¼ ì—°ì‚°ìž." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "E constant (2.718282). Represents the base of the natural logarithm." @@ -8212,52 +8375,52 @@ msgstr "Sqrt2 ìƒìˆ˜ (1.414214). 2ì˜ ì œê³±ê·¼." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the absolute value of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-cosine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic cosine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-sine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic sine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬íƒ„ì 트 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameters." -msgstr "ë§¤ê°œë³€ìˆ˜ë“¤ì˜ ì•„í¬íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ë“¤ì˜ ì•„í¬íƒ„ì 트 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic tangent of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì—ìŒê³¡íƒ„ì 트 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Finds the nearest integer that is greater than or equal to the parameter." -msgstr "매개변수보다 í¬ê±°ë‚˜ ê°™ì€ ê°€ìž¥ 가까운 ì •ìˆ˜ë¥¼ 찾습니다." +msgstr "매개변수보다 í¬ê±°ë‚˜ ê°™ì€ ê°€ìž¥ 가까운 ì •ìˆ˜ë¥¼ 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Constrains a value to lie between two further values." -msgstr "ë‘ ê°œì˜ ë‹¤ë¥¸ ê°’ 사ì´ì— 놓ì´ëŠ” ê°’ì„ ì œí•œí•©ë‹ˆë‹¤." +msgstr "ë–¨ì–´ì ¸ 있는 ë‘ ê°’ 사ì´ì— 놓ì´ëŠ” ê°’ì„ ì œí•œí•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the cosine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic cosine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in radians to degrees." @@ -8273,15 +8436,15 @@ msgstr "2ê°€ ë°‘ì¸ ì§€ìˆ˜ 함수." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." -msgstr "매개변수보다 ì 거나 ê°™ì€ ê°€ìž¥ 가까운 ì •ìˆ˜ë¥¼ 찾습니다." +msgstr "매개변수보다 ì 거나 ê°™ì€ ê°€ìž¥ 가까운 ì •ìˆ˜ë¥¼ 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Computes the fractional part of the argument." -msgstr "ì¸ìˆ˜ì˜ 프랙탈 구조를 계산합니다." +msgstr "ì¸ìˆ˜ì˜ 소수 ë¶€ë¶„ì„ ê³„ì‚°í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse of the square root of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ ì—함수 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ ì—함수 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Natural logarithm." @@ -8293,11 +8456,11 @@ msgstr "2ê°€ ë°‘ì¸ ë¡œê·¸ 함수." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the greater of two values." -msgstr "ë‘ ê°’ 중 ë” í° ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë‘ ê°’ 중 ë” í° ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the lesser of two values." -msgstr "ë‘ ê°’ 중 ë” ìž‘ì€ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë‘ ê°’ 중 ë” ìž‘ì€ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two scalars." @@ -8305,7 +8468,7 @@ msgstr "ë‘ ìŠ¤ì¹¼ë¼ ê°’ ì‚¬ì´ ì„ í˜• ë³´ê°„." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the opposite value of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë°˜ëŒ€ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë°˜ëŒ€ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - scalar" @@ -8314,11 +8477,11 @@ msgstr "1.0 - 스칼ë¼" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the value of the first parameter raised to the power of the second." -msgstr "첫 번째 매개변수를 ë‘ ë²ˆì§¸ 매개변수로 ì œê³±í•œ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "첫 번째 매개변수를 ë‘ ë²ˆì§¸ 매개변수로 ì œê³±í•œ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in degrees to radians." -msgstr "ê°ë„ 단위를 ë„ì—서 ë¼ë””안으로 변환합니다." +msgstr "ê°ë„ 단위를 ë„ì—서 ë¼ë””안으로 변환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / scalar" @@ -8326,34 +8489,33 @@ msgstr "1.0 / 스칼ë¼" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer to the parameter." -msgstr "매개변수ì—서 가장 가까운 ì •ìˆ˜ë¥¼ 찾습니다." +msgstr "매개변수ì—서 가장 가까운 ì •ìˆ˜ë¥¼ 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest even integer to the parameter." -msgstr "매개변수ì—서 가장 가까운 ì§ìˆ˜ ì •ìˆ˜ë¥¼ 찾습니다." +msgstr "매개변수ì—서 가장 가까운 ì§ìˆ˜ ì •ìˆ˜ë¥¼ 찾아요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Clamps the value between 0.0 and 1.0." -msgstr "ê°’ì„ 0.0ì—서 1.0 사ì´ë¡œ ê³ ì •í•©ë‹ˆë‹¤." +msgstr "ê°’ì„ 0.0ì—서 1.0 사ì´ë¡œ ê³ ì •í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Extracts the sign of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë¶€í˜¸ë¥¼ 추출합니다." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë¶€í˜¸ë¥¼ 추출해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the sine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic sine of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the square root of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì œê³±ê·¼ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8363,11 +8525,10 @@ msgid "" msgstr "" "SmoothStep 함수( 스칼ë¼(edge0), 스칼ë¼(edge1), 스칼ë¼(x) ).\n" "\n" -"'x'ê°€ 'edge0'보다 ìž‘ê³ , 'edge1'보다 í¬ë©´ 0.0ì„ ë°˜í™˜í•©ë‹ˆë‹¤. ê·¸ë ‡ì§€ ì•Šì€ ê²½ìš°, " -"ë°˜í™˜ê°’ì€ ì—르미트 다í•ì‹ì„ 통해 0.0ê³¼ 1.0사ì´ë¡œ ë³´ê°„ë©ë‹ˆë‹¤." +"'x'ê°€ 'edge0'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ , 'edge1'보다 í¬ë©´ 1.0ì„ ë°˜í™˜í•´ìš”. ê·¸" +"ë ‡ì§€ ì•Šì€ ê²½ìš°, ì—르미트 다í•ì‹ì„ í†µí•´ë°˜í™˜ê°’ì„ 0.0ê³¼ 1.0사ì´ë¡œ ë³´ê°„í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8375,39 +8536,39 @@ msgid "" msgstr "" "Step 함수( 스칼ë¼(edge), 스칼ë¼(x) ).\n" "\n" -"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ ê·¸ë ‡ì§€ 않으면 1.0ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ ê·¸ë ‡ì§€ 않으면 1.0ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ íƒ„ì 트 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic tangent of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡íƒ„ì 트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ìŒê³¡íƒ„ì 트 ê°’ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the truncated value of the parameter." -msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì ˆì‚¬ëœ ê°’ì„ ì°¾ìŠµë‹ˆë‹¤." +msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì ˆì‚¬ëœ ê°’ì„ ì°¾ì•„ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds scalar to scalar." -msgstr "스칼ë¼ì— 스칼ë¼ë¥¼ ë”합니다." +msgstr "스칼ë¼ì— 스칼ë¼ë¥¼ ë”í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides scalar by scalar." -msgstr "스칼ë¼ë¥¼ 스칼ë¼ë¡œ 나눕니다." +msgstr "스칼ë¼ë¥¼ 스칼ë¼ë¡œ 나누어요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies scalar by scalar." -msgstr "스칼ë¼ë¥¼ 스칼ë¼ë¡œ 곱합니다." +msgstr "스칼ë¼ë¥¼ 스칼ë¼ë¡œ 곱해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two scalars." -msgstr "ë‘ ìŠ¤ì¹¼ë¼ì˜ 나머지를 반환합니다." +msgstr "ë‘ ìŠ¤ì¹¼ë¼ì˜ 나머지를 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." -msgstr "스칼ë¼ì—서 스칼ë¼ë¥¼ ëºë‹ˆë‹¤." +msgstr "스칼ë¼ì—서 스칼ë¼ë¥¼ 빼요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar constant." @@ -8419,23 +8580,23 @@ msgstr "ìŠ¤ì¹¼ë¼ ìœ ë‹ˆí¼." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." -msgstr "ì„¸ì œê³± í…ìŠ¤ì³ ë£©ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤." +msgstr "ì„¸ì œê³± í…스처 ë£©ì—…ì„ ìˆ˜í–‰í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the texture lookup." -msgstr "í…ìŠ¤ì³ ë£©ì—…ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤." +msgstr "í…스처 ë£©ì—…ì„ ìˆ˜í–‰í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Cubic texture uniform lookup." -msgstr "ì„¸ì œê³± í…ìŠ¤ì³ ìœ ë‹ˆí¼ ë£©ì—…." +msgstr "ì„¸ì œê³± í…스처 ìœ ë‹ˆí¼ ë£©ì—…." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup." -msgstr "2D í…ìŠ¤ì³ ìœ ë‹ˆí¼ ë£©ì—…." +msgstr "2D í…스처 ìœ ë‹ˆí¼ ë£©ì—…." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "2D texture uniform lookup with triplanar." -msgstr "Triplanarê°€ ì ìš©ëœ 2D í…ìŠ¤ì³ ìœ ë‹ˆí¼ ë£©ì—… ." +msgstr "Triplanarê°€ ì ìš©ëœ 2D í…스처 ìœ ë‹ˆí¼ ë£©ì—… ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform function." @@ -8451,40 +8612,40 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" -"벡터 한 ìŒì˜ 외ì ì„ ê³„ì‚°í•©ë‹ˆë‹¤.\n" +"벡터 한 ìŒì˜ 외ì ì„ ê³„ì‚°í•´ìš”.\n" "\n" -"OuterProduct는 첫 매개변수 'c'를 ì—´ 벡터로 취급합니다 (1열로 ì´ë£¨ì–´ì§„ í–‰ë ¬) " -"ê·¸ë¦¬ê³ ë‘ ë²ˆì§¸ 매개변수 'r'ì„ í–‰ 벡터로 취급합니다 (1행으로 ì´ë£¨ì–´ì§„ í–‰ë ¬) ê·¸" -"ë¦¬ê³ ì„ í˜• 대수 í–‰ë ¬ì— 'c * r'ì„ ê³±í•©ë‹ˆë‹¤, í–‰ë ¬ì„ ì‚°ì¶œí•˜ëŠ”ë°, í–‰ì˜ ìˆ˜ëŠ” 'c'ì˜ " -"구성 요소 수ì´ê³ ì—´ì˜ ìˆ˜ëŠ” 'r'ì˜ êµ¬ì„± 요소 수입니다." +"OuterProduct는 첫 매개변수 'c'를 ì—´ 벡터로 ì·¨ê¸‰í•˜ê³ (1열로 ì´ë£¨ì–´ì§„ í–‰ë ¬) ë‘ " +"번째 매개변수 'r'ì„ í–‰ 벡터로 취급해요 (1행으로 ì´ë£¨ì–´ì§„ í–‰ë ¬), ê·¸ë¦¬ê³ ì„ í˜• " +"대수 í–‰ë ¬ì— 'c * r'ì„ ê³±í•´ì„œ í–‰ë ¬ì„ ì‚°ì¶œí•˜ëŠ”ë°, í–‰ 수는 'c'ì˜ êµ¬ì„± 요소 수ì´" +"ê³ ì—´ 수는 'r'ì˜ êµ¬ì„± 요소 수가 ë¼ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "4ê°œì˜ ë²¡í„°ë¡œ ë³€í˜•ì„ í•©ì„±í•©ë‹ˆë‹¤." +msgstr "4ê°œì˜ ë²¡í„°ë¡œ ë³€í˜•ì„ í•©ì„±í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "ë³€í˜•ì„ 4ê°œì˜ ë²¡í„°ë¡œ 분해합니다." +msgstr "ë³€í˜•ì„ 4ê°œì˜ ë²¡í„°ë¡œ ë¶„í•´í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "ë³€í˜•ì˜ í–‰ë ¬ì‹ì„ 계산합니다." +msgstr "ë³€í˜•ì˜ í–‰ë ¬ì‹ì„ 계산해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." -msgstr "ë³€í˜•ì˜ ì—함수를 계산합니다." +msgstr "ë³€í˜•ì˜ ì—함수를 계산해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "ë³€í˜•ì˜ ì „ì¹˜ë¥¼ 계산합니다." +msgstr "ë³€í˜•ì˜ ì „ì¹˜ë¥¼ 계산해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "ë³€í˜•ì— ë³€í˜•ì„ ê³±í•©ë‹ˆë‹¤." +msgstr "ë³€í˜•ì— ë³€í˜•ì„ ê³±í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "ë³€í˜•ì— ë²¡í„°ë¥¼ 곱합니다." +msgstr "ë³€í˜•ì— ë²¡í„°ë¥¼ 곱해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Transform constant." @@ -8504,23 +8665,23 @@ msgstr "벡터 ì—°ì‚°ìž." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes vector from three scalars." -msgstr "세 ê°œì˜ ìŠ¤ì¹¼ë¼ë¡œ 벡터를 합성합니다." +msgstr "세 ê°œì˜ ìŠ¤ì¹¼ë¼ë¡œ 벡터를 합성해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes vector to three scalars." -msgstr "벡터를 세 ê°œì˜ ìŠ¤ì¹¼ë¼ë¡œ 분해합니다." +msgstr "벡터를 세 ê°œì˜ ìŠ¤ì¹¼ë¼ë¡œ ë¶„í•´í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the cross product of two vectors." -msgstr "ë‘ ë²¡í„°ì˜ ë²¡í„°ê³± ê°’ì„ ê³„ì‚°í•©ë‹ˆë‹¤." +msgstr "ë‘ ë²¡í„°ì˜ ë²¡í„°ê³± ê°’ì„ ê³„ì‚°í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the distance between two points." -msgstr "ë‘ ì 사ì´ì˜ 거리를 반환합니다." +msgstr "ë‘ ì 사ì´ì˜ 거리를 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the dot product of two vectors." -msgstr "ë‘ ë²¡í„°ì˜ ìŠ¤ì¹¼ë¼ê³± ê°’ì„ ê³„ì‚°í•©ë‹ˆë‹¤." +msgstr "ë‘ ë²¡í„°ì˜ ìŠ¤ì¹¼ë¼ê³± ê°’ì„ ê³„ì‚°í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8529,27 +8690,26 @@ msgid "" "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 "" -"ê°™ì€ ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 참조 벡터로 반환합니다. 함수ì—는 세 ê°œì˜ ë²¡í„° 매" -"개변수가 있습니다 : ë°©í–¥ì„ ì§€ì •í•˜ëŠ” 벡터 N, ì¸ì‹œë˜íЏ 벡터 I, ê·¸ë¦¬ê³ ì°¸ì¡° 벡" -"í„° Nref. I와 Nrefì˜ ë‚´ì ê°’ì´ 0보다 작으면 ë°˜í™˜ê°’ì€ Nì´ ë©ë‹ˆë‹¤. ê·¸ë ‡ì§€ 않으" -"ë©´ -Nì´ ë°˜í™˜ë©ë‹ˆë‹¤." +"ê°™ì€ ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 참조 벡터로 반환해요. 함수ì—는 세 ê°œì˜ ë²¡í„° 매개" +"변수가 있어요 : ë°©í–¥ì„ ì§€ì •í•˜ëŠ” 벡터 N, ì¸ì‹œë˜íЏ 벡터 I, ê·¸ë¦¬ê³ ì°¸ì¡° 벡터 " +"Nref. 만약 I와 Nrefê°€ 0ì˜ ë²¡í„°ê³±ì´ 0보다 작다면 ë°˜í™˜ê°’ì€ Nì´ ë˜ìš”. ê·¸ë ‡ì§€ 않" +"으면 -Nì´ ë°˜í™˜ë˜ê³ ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." -msgstr "ë²¡í„°ì˜ ê¸¸ì´ë¥¼ 계산합니다." +msgstr "ë²¡í„°ì˜ ê¸¸ì´ë¥¼ 계산해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Linear interpolation between two vectors." msgstr "ë‘ ë²¡í„° ê°„ì˜ ì„ í˜• ë³´ê°„." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "ë‘ ë²¡í„° ê°„ì˜ ì„ í˜• ë³´ê°„." +msgstr "스칼ë¼ë¥¼ 사용하 ë‘ ë²¡í„° ê°„ì˜ ì„ í˜• ë³´ê°„." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." -msgstr "ë²¡í„°ì˜ ë…¸ë©€ ê°’ì„ ê³„ì‚°í•©ë‹ˆë‹¤." +msgstr "ë²¡í„°ì˜ ë…¸ë©€ ê°’ì„ ê³„ì‚°í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - vector" @@ -8564,14 +8724,13 @@ msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" -"반사 ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 반환합니다 (a : ì¸ì‹œë˜íЏ 벡터, b : 노멀 벡터)." +"반사 ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 반환해요 (a : ì¸ì‹œë˜íЏ 벡터, b : 노멀 벡터)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the vector that points in the direction of refraction." -msgstr "반사 ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 반환합니다." +msgstr "반사 ë°©í–¥ì„ ê°€ë¦¬í‚¤ëŠ” 벡터를 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8581,12 +8740,10 @@ msgid "" msgstr "" "SmoothStep 함수( 벡터(edge0), 벡터(edge1), 벡터(x) ).\n" "\n" -"'x'ê°€ 'edge0'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ 'x'ê°€ 'edge1'보다 í¬ë©´ 1.0ì„ ë°˜í™˜í•©ë‹ˆ" -"다. ê·¸ë ‡ì§€ 않으면 반환 ê°’ì€ ì—르미트 다í•ì‹ì„ 통해 0.0ê³¼ 1.0 사ì´ë¡œ ë³´ê°„ë©ë‹ˆ" -"다." +"'x'ê°€ 'edge0'보다 작으면 0.0ì„, 'x'ê°€ 'edge1'보다 í¬ë©´ 1.0ì„ ë°˜í™˜í•´ìš”. ê·¸ë ‡" +"ì§€ ì•Šì€ ê²½ìš° ì—르미트 다í•ì‹ìœ¼ë¡œ ë°˜í™˜ê°’ì„ 0.0ê³¼ 1.0 사ì´ë¡œ ë³´ê°„í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8596,12 +8753,10 @@ msgid "" msgstr "" "SmoothStep 함수( 스칼ë¼(edge0), 스칼ë¼(edge1), 벡터(x) ).\n" "\n" -"'x'ê°€ 'edge0'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ 'x'ê°€ 'edge1'보다 í¬ë©´ 1.0ì„ ë°˜í™˜í•©ë‹ˆ" -"다. ê·¸ë ‡ì§€ 않으면 반환 ê°’ì€ ì—르미트 다í•ì‹ì„ 통해 0.0ê³¼ 1.0 사ì´ë¡œ ë³´ê°„ë©ë‹ˆ" -"다." +"'x'ê°€ 'edge0'보다 작으면 0.0ì„, 'x'ê°€ 'edge1'보다 í¬ë©´ 1.0ì„ ë°˜í™˜í•´ìš”. ê·¸ë ‡" +"ì§€ ì•Šì€ ê²½ìš° ì—르미트 다í•ì‹ìœ¼ë¡œ ë°˜í™˜ê°’ì„ 0.0ê³¼ 1.0 사ì´ë¡œ ë³´ê°„í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8609,10 +8764,9 @@ msgid "" msgstr "" "Step 함수( 벡터(edge), 벡터(x) ).\n" "\n" -"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ ê·¸ë ‡ì§€ 않으면 1.0ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ , ê·¸ë ‡ì§€ ì•Šì€ ê²½ìš° 1.0ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8620,27 +8774,27 @@ msgid "" msgstr "" "Step 함수( 스칼ë¼(edge), 벡터(x) ).\n" "\n" -"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ ê·¸ë ‡ì§€ 않으면 1.0ì„ ë°˜í™˜í•©ë‹ˆë‹¤." +"'x'ê°€ 'edge'보다 작으면 0.0ì„ ë°˜í™˜í•˜ê³ , ê·¸ë ‡ì§€ ì•Šì€ ê²½ìš° 1.0ì„ ë°˜í™˜í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds vector to vector." -msgstr "ë²¡í„°ì— ë²¡í„°ë¥¼ ë”합니다." +msgstr "ë²¡í„°ì— ë²¡í„°ë¥¼ ë”í•´ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides vector by vector." -msgstr "벡터를 벡터로 나눕니다." +msgstr "벡터를 벡터로 나누어요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by vector." -msgstr "벡터를 벡터로 곱합니다." +msgstr "벡터를 벡터로 곱해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two vectors." -msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다." +msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환해요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts vector from vector." -msgstr "벡터ì—서 벡터를 ëºë‹ˆë‹¤." +msgstr "벡터ì—서 벡터를 빼요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector constant." @@ -8656,17 +8810,17 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" -"커스텀 Godot ì…°ì´ë” 언어 ëª…ë ¹ë¬¸ìœ¼ë¡œ, 커스텀 ìž…ë ¥ ë° ì¶œë ¥ í¬íŠ¸ê°€ 있습니다. 버" -"í…스/프래그먼트/조명 í•¨ìˆ˜ì— ì§ì ‘ 코드를 넣는 것ì´ë¯€ë¡œ, 코드 ë‚´ì— í•¨ìˆ˜ ì„ ì–¸ì„ " -"ì 는 ìš©ë„로 ì“°ì§€ 마세요." +"맞춤 ìž…ë ¥ ë° ì¶œë ¥ í¬íŠ¸ë¡œ ì´ë£¨ì–´ì§„, 맞춤 Godot ì…°ì´ë” 언어 ëª…ë ¹ë¬¸. ê¼ì§“ì /프래" +"그먼트/조명 í•¨ìˆ˜ì— ì§ì ‘ 코드를 넣는 것ì´ë¯€ë¡œ 코드 ë‚´ì— í•¨ìˆ˜ ì„ ì–¸ì„ ìž‘ì„±í•˜ëŠ” " +"ìš©ë„로 ì“°ì§€ 마세요." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" -"ì¹´ë©”ë¼ì˜ 화면 방향과 표면 ë…¸ë©€ì˜ ìŠ¤ì¹¼ë¼ê³±ì„ 기반으로 하는 í´ì˜¤í”„를 반환합니" -"다 (í´ì˜¤í”„와 ê´€ë ¨ëœ ìž…ë ¥ì„ ì „ë‹¬í•¨)." +"ì¹´ë©”ë¼ì˜ 화면 방향과 표면 ë…¸ë©€ì˜ ìŠ¤ì¹¼ë¼ê³±ì„ 기반으로 하는 í´ì˜¤í”„를 반환해요 " +"(í´ì˜¤í”„와 ê´€ë ¨ëœ ìž…ë ¥ì„ ì „ë‹¬í•¨)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8674,6 +8828,9 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"ê²°ê³¼ ì…°ì´ë” ìœ„ì— ë°°ì¹˜ëœ, 맞춤 Godot ì…°ì´ë” 언어 ëª…ë ¹ë¬¸. 다양한 함수 ì„ ì–¸ì„ ë†“" +"ì€ ë’¤ ë‚˜ì¤‘ì— ëª…ë ¹ë¬¸ì—서 í˜¸ì¶œí• ìˆ˜ 있어요. 변화, ìœ ë‹ˆí¼, ìƒìˆ˜ë„ ì •ì˜í• 수 있어" +"ìš”." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8727,7 +8884,7 @@ msgstr "비주얼 ì…°ì´ë”" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Edit Visual Property" -msgstr "비주얼 ì†ì„± 편집" +msgstr "비주얼 ì†ì„± 편집하기" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Visual Shader Mode Changed" @@ -8739,19 +8896,19 @@ msgstr "실행가능" #: editor/project_export.cpp msgid "Delete patch '%s' from list?" -msgstr "'%s'ì„(를) 패치 목ë¡ì—서 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "'%s'ì„(를) 패치 목ë¡ì—서 ì‚ì œí• ê¹Œìš”?" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "'%s' í”„ë¦¬ì…‹ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "'%s' í”„ë¦¬ì…‹ì„ ì‚ì œí• ê¹Œìš”?" #: editor/project_export.cpp msgid "" "Failed to export the project for platform '%s'.\n" "Export templates seem to be missing or invalid." msgstr "" -"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없습니다.\n" -"내보내기 í…œí”Œë¦¿ì´ ì—†ê±°ë‚˜ 올바르지 않습니다." +"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없어요.\n" +"내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë˜ê±°ë‚˜ ìž˜ëª»ëœ ë“¯ í•´ìš”." #: editor/project_export.cpp msgid "" @@ -8759,12 +8916,12 @@ msgid "" "This might be due to a configuration issue in the export preset or your " "export settings." msgstr "" -"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없습니다.\n" -"내보내기 프리셋ì´ë‚˜ 내보내기 ì„¤ì •ì˜ êµ¬ì„± ë¬¸ì œê°€ ì›ì¸ìœ¼ë¡œ 보입니다." +"'%s' 플랫í¼ì— 프로ì 트를 내보낼 수 없어요.\n" +"내보내기 프리셋ì´ë‚˜ 내보내기 ì„¤ì • ìƒì˜ ë¬¸ì œ ë•Œë¬¸ì¸ ê²ƒ 같아요." #: editor/project_export.cpp msgid "Release" -msgstr "ë°°í¬" +msgstr "출시" #: editor/project_export.cpp msgid "Exporting All" @@ -8772,11 +8929,11 @@ msgstr "ëª¨ë‘ ë‚´ë³´ë‚´ê¸°" #: editor/project_export.cpp msgid "The given export path doesn't exist:" -msgstr "주어진 내보내기 경로가 존재하지 않습니다:" +msgstr "주어진 내보내기 경로가 ì—†ìŒ:" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ì—†ê±°ë‚˜ ì†ìƒë¨:" +msgstr "ì´ í”Œëž«í¼ì˜ 내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë¨/ì†ìƒë¨:" #: editor/project_export.cpp msgid "Presets" @@ -8784,7 +8941,7 @@ msgstr "프리셋" #: editor/project_export.cpp editor/project_settings_editor.cpp msgid "Add..." -msgstr "추가..." +msgstr "추가하기..." #: editor/project_export.cpp msgid "Export Path" @@ -8800,11 +8957,11 @@ msgstr "프로ì íŠ¸ì˜ ëª¨ë“ ë¦¬ì†ŒìŠ¤ 내보내기" #: editor/project_export.cpp msgid "Export selected scenes (and dependencies)" -msgstr "ì„ íƒëœ 씬 내보내기 (종ì†ëœ 리소스 í¬í•¨)" +msgstr "ì„ íƒí•œ 씬 내보내기 (종ì†ëœ 리소스 í¬í•¨)" #: editor/project_export.cpp msgid "Export selected resources (and dependencies)" -msgstr "ì„ íƒëœ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)" +msgstr "ì„ íƒí•œ 리소스 내보내기 (종ì†ëœ 리소스 í¬í•¨)" #: editor/project_export.cpp msgid "Export Mode:" @@ -8815,14 +8972,18 @@ msgid "Resources to export:" msgstr "내보낼 리소스:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" -msgstr "리소스가 아닌 íŒŒì¼ ë‚´ë³´ë‚´ê¸° í•„í„° (콤마로 구분, 예: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "리소스가 아닌 íŒŒì¼ ë‚´ë³´ë‚´ê¸° í•„í„° (쉼표로 구분, 예: *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" -msgstr "프로ì 트ì—서 ì œì™¸ì‹œí‚¬ íŒŒì¼ í•„í„° (콤마로 구분, 예: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "프로ì 트ì—서 ì œì™¸ì‹œí‚¬ íŒŒì¼ í•„í„° (쉼표로 구분, 예: *.json, *.txt)" #: editor/project_export.cpp msgid "Patches" @@ -8838,7 +8999,7 @@ msgstr "기능" #: editor/project_export.cpp msgid "Custom (comma-separated):" -msgstr "커스텀 (쉼표로 구분):" +msgstr "맞춤 (쉼표로 구분):" #: editor/project_export.cpp msgid "Feature List:" @@ -8858,7 +9019,7 @@ msgstr "í…스트" #: editor/project_export.cpp msgid "Compiled" -msgstr "컴파ì¼" +msgstr "컴파ì¼ë¨" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" @@ -8866,11 +9027,11 @@ msgstr "암호화 (ì•„ëž˜ì— í‚¤ê°’ í•„ìš”)" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" -msgstr "올바르지 ì•Šì€ ì•”í˜¸í™” 키 (64ìž ê¸¸ì´ì–´ì•¼ 함)" +msgstr "ìž˜ëª»ëœ ì•”í˜¸í™” 키 (64ìž ê¸¸ì´ì—¬ì•¼ 함)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "스í¬ë¦½íЏ 암호 키 (256-비트를 hex í¬ë©§ìœ¼ë¡œ):" +msgstr "스í¬ë¦½íЏ 암호화 키 (256-비트를 hex 형ì‹ìœ¼ë¡œ):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -8898,13 +9059,12 @@ msgstr "디버그와 함께 내보내기" #: editor/project_manager.cpp msgid "The path does not exist." -msgstr "경로가 존재하지 않습니다." +msgstr "경로가 없어요." #: editor/project_manager.cpp msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." msgstr "" -"올바르지 ì•Šì€ '.zip' 프로ì 트 파ì¼, 'project.godot' 파ì¼ì„ í¬í•¨í•˜ì§€ ì•Šê³ ìžˆìŠµ" -"니다." +"ìž˜ëª»ëœ '.zip' 프로ì 트 파ì¼ì´ì—ìš”, 'project.godot' 파ì¼ì„ ê°–ê³ ìžˆì§€ 않아요." #: editor/project_manager.cpp msgid "Please choose an empty folder." @@ -8912,11 +9072,11 @@ msgstr "비어있는 í´ë”를 ì„ íƒí•˜ì„¸ìš”." #: editor/project_manager.cpp msgid "Please choose a 'project.godot' or '.zip' file." -msgstr "'project.godot' íŒŒì¼ ì´ë‚˜ '.zip' 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." +msgstr "'project.godot' íŒŒì¼ ë˜ëŠ” '.zip' 파ì¼ì„ ì„ íƒí•˜ì„¸ìš”." #: editor/project_manager.cpp msgid "Directory already contains a Godot project." -msgstr "ë””ë ‰í† ë¦¬ì— Godot 프로ì 트가 ì´ë¯¸ 있습니다." +msgstr "ë””ë ‰í† ë¦¬ì— Godot 프로ì 트가 ì´ë¯¸ 있어요." #: editor/project_manager.cpp msgid "New Game Project" @@ -8928,47 +9088,47 @@ msgstr "ê°€ì ¸ì˜¨ 프로ì 트" #: editor/project_manager.cpp msgid "Invalid Project Name." -msgstr "ì¸ì‹í• 수 없는 프로ì 트 명입니다." +msgstr "ìž˜ëª»ëœ í”„ë¡œì 트 ì´ë¦„." #: editor/project_manager.cpp msgid "Couldn't create folder." -msgstr "í´ë”를 만들 수 없습니다." +msgstr "í´ë”를 만들 수 없어요." #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "ì´ë¯¸ ì§€ì •ëœ ì´ë¦„ì˜ ê²½ë¡œë¥¼ 가진 í´ë”입니다." +msgstr "ì´ë¯¸ ì´ ê²½ë¡œì— ì´ ì´ë¦„ê³¼ ê°™ì€ í´ë”ê°€ 있어요." #: editor/project_manager.cpp msgid "It would be a good idea to name your project." -msgstr "프로ì 트 ì´ë¦„ì„ ì •í•˜ëŠ” ê²ƒì„ ê¶Œí•©ë‹ˆë‹¤." +msgstr "프로ì 트 ì´ë¦„ì„ ì •í•˜ëŠ” 게 ì¢‹ì„ ê±°ì—ìš”." #: editor/project_manager.cpp msgid "Invalid project path (changed anything?)." -msgstr "올바르지 ì•Šì€ í”„ë¡œì 트 경로 (ë”ê°€ ë³€ê²½í•˜ì‹ ê±°ë¼ë„?)." +msgstr "ìž˜ëª»ëœ í”„ë¡œì 트 경로 (프로ì íŠ¸ì— ì†ëŒ€ì…¨ë‚˜ìš”?)." #: editor/project_manager.cpp msgid "" "Couldn't load project.godot in project path (error %d). It may be missing or " "corrupted." msgstr "" -"프로ì 트 경로로부터 project.godot 파ì¼ì„ 불러올 수 없습니다 (오류 %d). 존재하" -"ì§€ 않거나 ì†ìƒë˜ì—ˆì„ 수 있습니다." +"프로ì 트 경로ì—서 project.godotì„ ë¶ˆëŸ¬ì˜¬ 수 없어요 (오류 %d). 누ë½ë˜ê±°ë‚˜ ì†ìƒ" +"ë˜ì—ˆë‚˜ ë´ìš”." #: editor/project_manager.cpp msgid "Couldn't edit project.godot in project path." -msgstr "프로ì 트 ê²½ë¡œì— project.godot 파ì¼ì„ íŽ¸ì§‘í• ìˆ˜ 없습니다." +msgstr "프로ì 트 경로ì—서 project.godot 파ì¼ì„ íŽ¸ì§‘í• ìˆ˜ 없어요." #: editor/project_manager.cpp msgid "Couldn't create project.godot in project path." -msgstr "프로ì 트 ê²½ë¡œì— project.godot 파ì¼ì„ ìƒì„±í• 수 없습니다." +msgstr "프로ì 트 경로ì—서 project.godot 파ì¼ì„ ìƒì„±í• 수 없어요." #: editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "다ìŒì˜ 파ì¼ë“¤ì„ 패키지로부터 ì¶”ì¶œí•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤:" +msgstr "ë‹¤ìŒ íŒŒì¼ì„ 패키지ì—서 ì¶”ì¶œí•˜ëŠ”ë° ì‹¤íŒ¨í•¨:" #: editor/project_manager.cpp msgid "Rename Project" -msgstr "프로ì 트 ì´ë¦„ 변경" +msgstr "프로ì 트 ì´ë¦„ 바꾸기" #: editor/project_manager.cpp msgid "Import Existing Project" @@ -8976,7 +9136,7 @@ msgstr "기존 프로ì 트 ê°€ì ¸ì˜¤ê¸°" #: editor/project_manager.cpp msgid "Import & Edit" -msgstr "ê°€ì ¸ì˜¤ê¸° & 편집" +msgstr "ê°€ì ¸ì˜¤ê¸° & 편집하기" #: editor/project_manager.cpp msgid "Create New Project" @@ -8984,7 +9144,7 @@ msgstr "새 프로ì 트 만들기" #: editor/project_manager.cpp msgid "Create & Edit" -msgstr "ìƒì„± & 편집" +msgstr "만들기 & 편집하기" #: editor/project_manager.cpp msgid "Install Project:" @@ -8992,11 +9152,11 @@ msgstr "프로ì 트 설치:" #: editor/project_manager.cpp msgid "Install & Edit" -msgstr "설치 & 편집" +msgstr "설치 & 편집하기" #: editor/project_manager.cpp msgid "Project Name:" -msgstr "프로ì 트 명:" +msgstr "프로ì 트 ì´ë¦„:" #: editor/project_manager.cpp msgid "Project Path:" @@ -9044,28 +9204,27 @@ msgstr "" #: editor/project_manager.cpp msgid "Renderer can be changed later, but scenes may need to be adjusted." -msgstr "ë Œë”러는 ë‚˜ì¤‘ì— ë°”ê¿€ 수 있지만, ì”¬ì„ ì¡°ì •í•´ì•¼ í• ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤." +msgstr "ë Œë”러는 ë‚˜ì¤‘ì— ë°”ê¿€ 수 있지만, ì”¬ì„ ì¡°ì •í•´ì•¼ í• ì§€ë„ ëª°ë¼ìš”." #: editor/project_manager.cpp msgid "Unnamed Project" -msgstr "ì´ë¦„없는 프로ì 트" +msgstr "ì´ë¦„ 없는 프로ì 트" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "기존 프로ì 트 ê°€ì ¸ì˜¤ê¸°" +msgstr "누ë½ëœ 프로ì 트" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "오류: 프로ì 트가 íŒŒì¼ ì‹œìŠ¤í…œì—서 누ë½ë˜ì—ˆì–´ìš”." #: editor/project_manager.cpp msgid "Can't open project at '%s'." -msgstr "'%s'ì—서 프로ì 트를 ì—´ 수 ì—†ìŒ." +msgstr "'%s'ì—서 프로ì 트를 ì—´ 수 없어요." #: editor/project_manager.cpp msgid "Are you sure to open more than one project?" -msgstr "ë‘ê°œ ì´ìƒì˜ 프로ì 트를 ì—´ë ¤ëŠ” ê²ƒì´ í™•ì‹¤í•©ë‹ˆê¹Œ?" +msgstr "ë‘ ê°œ ì´ìƒì˜ 프로ì 트를 여는 건가요?" #: editor/project_manager.cpp msgid "" @@ -9079,12 +9238,12 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"ë‹¤ìŒ í”„ë¡œì 트 ì„¤ì • 파ì¼ì€ 현재 ë²„ì „ì˜ Godotì—서 ìƒì„±í•œ ê²ƒì´ ì•„ë‹™ë‹ˆë‹¤.\n" +"ë‹¤ìŒ í”„ë¡œì 트 ì„¤ì • 파ì¼ì€ 현재 ë²„ì „ì˜ Godotì—서 ë§Œë“ ê²ƒì´ ì•„ë‹ˆë„¤ìš”.\n" "↵\n" "%s↵\n" "↵\n" -"파ì¼ì„ 연다면, 현재 Godotì˜ êµ¬ì„± íŒŒì¼ í˜•ì‹ìœ¼ë¡œ 변환ë©ë‹ˆë‹¤.\n" -"ê²½ê³ : ë” ì´ìƒ ì´ í”„ë¡œì 트를 ì´ì „ ë²„ì „ì˜ ì—”ì§„ì—서 ì—´ 수 없게 ë©ë‹ˆë‹¤." +"íŒŒì¼ ì—´ê¸°ë¥¼ 계ì†í•œë‹¤ë©´, 현재 Godotì˜ êµ¬ì„± íŒŒì¼ í˜•ì‹ìœ¼ë¡œ 변환ë ê±°ì—ìš”.\n" +"ê²½ê³ : ë” ì´ìƒ ì´ í”„ë¡œì 트를 ì´ì „ ë²„ì „ì˜ ì—”ì§„ì—서 ì—´ 수 ì—†ì„ ê±°ì—ìš”." #: editor/project_manager.cpp msgid "" @@ -9097,21 +9256,20 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"다ìŒì˜ 프로ì 트 ì„¤ì • 파ì¼ì€ ì´ì „ ë²„ì „ì—서 ìƒì„±ëœ 것으로, 현재 ë²„ì „ì— ë§žê²Œ ë³€" -"환해야 합니다:\n" +"ë‹¤ìŒ í”„ë¡œì 트 ì„¤ì • 파ì¼ì€ ì´ì „ ë²„ì „ì— ë§Œë“ ê²ƒìœ¼ë¡œ, 현재 ë²„ì „ì— ë§žê²Œ 변환해야 " +"í•´ìš”:\n" "\n" "%s\n" "\n" -"ë³€í™˜í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n" -"ê²½ê³ : ë” ì´ìƒ ì´ í”„ë¡œì 트를 ì´ì „ ë²„ì „ì˜ ì—”ì§„ì—서 ì—´ 수 없게 ë©ë‹ˆë‹¤." +"ë³€í™˜í• ê¹Œìš”?\n" +"ê²½ê³ : ë” ì´ìƒ ì´ í”„ë¡œì 트를 ì´ì „ ë²„ì „ì˜ ì—”ì§„ì—서 ì—´ 수 ì—†ì„ ê±°ì—ìš”." #: editor/project_manager.cpp msgid "" "The project settings were created by a newer engine version, whose settings " "are not compatible with this version." msgstr "" -"새로운 ë²„ì „ì˜ ì—”ì§„ìœ¼ë¡œ 프로ì 트 ì„¤ì •ì´ ìƒì„±ë˜ì—ˆìŠµë‹ˆë‹¤, ì´ ë²„ì „ì—서는 호환ë˜" -"ì§€ 않습니다." +"프로ì 트 ì„¤ì •ì´ ìƒˆ ë²„ì „ì— ë§žê²Œ 만들어졌어요, ì´ ë²„ì „ì—서는 호환하지 않아요." #: editor/project_manager.cpp msgid "" @@ -9119,69 +9277,67 @@ msgid "" "Please edit the project and set the main scene in the Project Settings under " "the \"Application\" category." msgstr "" -"프로ì 트를 ì‹¤í–‰í• ìˆ˜ 없습니다: ë©”ì¸ ì”¬ì´ ì§€ì •ë˜ì§€ 않았습니다.\n" +"프로ì 트를 ì‹¤í–‰í• ìˆ˜ ì—†ìŒ: ë©”ì¸ ì”¬ì„ ì •ì˜í•˜ì§€ 않았어요.\n" "프로ì 트를 íŽ¸ì§‘í•˜ê³ í”„ë¡œì 트 ì„¤ì •ì˜ \"Application\" ì¹´í…Œê³ ë¦¬ì—서 ë©”ì¸ ì”¬ì„ ì„¤" -"ì •í•˜ì„¸ìš”." +"ì •í•´ì£¼ì„¸ìš”." #: editor/project_manager.cpp msgid "" "Can't run project: Assets need to be imported.\n" "Please edit the project to trigger the initial import." msgstr "" -"프로ì 트 실행 불가: ì• ì…‹ë“¤ì„ ê°€ì ¸ì™€ì•¼ 합니다.\n" -"프로ì 트를 편집하여 최초 ê°€ì ¸ì˜¤ê¸°ê°€ 실행ë˜ë„ë¡ í•˜ì„¸ìš”." +"프로ì 트를 ì‹¤í–‰í• ìˆ˜ ì—†ìŒ: ì• ì…‹ì„ ê°€ì ¸ì™€ì•¼ í•´ìš”.\n" +"프로ì 트를 편집해서 최초 ê°€ì ¸ì˜¤ê¸°ê°€ 실행ë˜ë„ë¡ í•˜ì„¸ìš”." #: editor/project_manager.cpp msgid "Are you sure to run %d projects at once?" -msgstr "한 ë²ˆì— %dê°œì˜ í”„ë¡œì 트를 ì‹¤í–‰í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgstr "한 ë²ˆì— %dê°œì˜ í”„ë¡œì 트를 ì‹¤í–‰í• ê¹Œìš”?" #: editor/project_manager.cpp msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"%dê°œì˜ í”„ë¡œì 트를 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n" -"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않습니다." +"%dê°œì˜ í”„ë¡œì 트를 ì‚ì œí• ê¹Œìš”?\n" +"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않아요." #: editor/project_manager.cpp msgid "" "Remove this project from the list?\n" "The project folder's contents won't be modified." msgstr "" -"ì´ í”„ë¡œì 트를 목ë¡ì—서 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n" -"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않습니다." +"ì´ í”„ë¡œì 트를 목ë¡ì—서 ì‚ì œí• ê¹Œìš”?\n" +"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않아요." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"%dê°œì˜ í”„ë¡œì 트를 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n" -"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않습니다." +"%dê°œì˜ í”„ë¡œì 트를 ì‚ì œí• ê¹Œìš”?\n" +"프로ì 트 í´ë”ì˜ ë‚´ìš©ì€ ìˆ˜ì •ë˜ì§€ 않아요." #: editor/project_manager.cpp msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." msgstr "" -"언어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤.\n" -"ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 편집기나 프로ì 트 ë§¤ë‹ˆì €ë¥¼ ìž¬ì‹œìž‘í• ë•Œ ì—…ë°ì´íЏë©ë‹ˆë‹¤." +"언어가 바뀌었어요.\n" +"ì¸í„°íŽ˜ì´ìŠ¤ëŠ” 편집기나 프로ì 트 ë§¤ë‹ˆì €ë¥¼ 다시 켜면 ì ìš©ë¼ìš”." #: editor/project_manager.cpp msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." msgstr "" -"Godot 프로ì 트가 있는지 %s í´ë”를 ìŠ¤ìº”í•˜ì‹œê² ìŠµë‹ˆê¹Œ?\n" -"약간 ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다." +"Godot 프로ì 트를 확ì¸í•˜ê¸° 위해 %s í´ë”를 ìŠ¤ìº”í• ê¹Œìš”?\n" +"ì‹œê°„ì´ ê±¸ë¦´ 수 있어요." #: editor/project_manager.cpp msgid "Project Manager" msgstr "프로ì 트 ë§¤ë‹ˆì €" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" msgstr "프로ì 트" @@ -9199,7 +9355,7 @@ msgstr "새 프로ì 트" #: editor/project_manager.cpp msgid "Remove Missing" -msgstr "누ë½ëœ 부분 ì‚ì œ" +msgstr "누ë½ëœ 부분 ì‚ì œí•˜ê¸°" #: editor/project_manager.cpp msgid "Templates" @@ -9218,8 +9374,8 @@ msgid "" "You currently don't have any projects.\n" "Would you like to explore official example projects in the Asset Library?" msgstr "" -"현재 프로ì 트가 í•˜ë‚˜ë„ ì—†ìŠµë‹ˆë‹¤.\n" -"ì• ì…‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ê³µì‹ ì˜ˆì œ 프로ì 트를 ì°¾ì•„ë³´ì‹œê² ìŠµë‹ˆê¹Œ?" +"현재 프로ì 트가 í•˜ë‚˜ë„ ì—†ë„¤ìš”.\n" +"ì• ì…‹ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ê³µì‹ ì˜ˆì œ 프로ì 트를 찾아볼까요?" #: editor/project_settings_editor.cpp msgid "Key " @@ -9242,24 +9398,23 @@ msgid "" "Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'" msgstr "" -"올바르지 ì•Šì€ ì•¡ì…˜ ì´ë¦„. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"' 를 í¬í•¨í•˜ë©´ " -"안 ë©ë‹ˆë‹¤" +"ìž˜ëª»ëœ ì•¡ì…˜ ì´ë¦„. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"' 를 í¬í•¨í•˜ë©´ 안 ë¼ìš”" #: editor/project_settings_editor.cpp msgid "An action with the name '%s' already exists." -msgstr "ì´ë¦„ '%s'ì„(를) 가진 ì•¡ì…˜ì´ ì´ë¯¸ 존재합니다." +msgstr "ì´ë¦„ '%s'ì„(를) 가진 ì•¡ì…˜ì´ ì´ë¯¸ 있어요." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" -msgstr "ìž…ë ¥ 앱션 ì´ë²¤íЏ ì´ë¦„ 변경" +msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì´ë¦„ 바꾸기" #: editor/project_settings_editor.cpp msgid "Change Action deadzone" -msgstr "ì•¡ì…˜ ë°ë“œ ì¡´ 변경" +msgstr "ì•¡ì…˜ ë°ë“œì¡´ 바꾸기" #: editor/project_settings_editor.cpp msgid "Add Input Action Event" -msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ 추가" +msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ 추가하기" #: editor/project_settings_editor.cpp msgid "All Devices" @@ -9343,15 +9498,15 @@ msgstr "ìž…ë ¥ ì•¡ì…˜ 지우기" #: editor/project_settings_editor.cpp msgid "Erase Input Action Event" -msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì‚ì œ" +msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì‚ì œí•˜ê¸°" #: editor/project_settings_editor.cpp msgid "Add Event" -msgstr "ì´ë²¤íЏ 추가" +msgstr "ì´ë²¤íЏ 추가하기" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "버튼" +msgstr "Button" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -9375,7 +9530,7 @@ msgstr "íœ ì•„ëž˜ë¡œ." #: editor/project_settings_editor.cpp msgid "Add Global Property" -msgstr "글로벌 ì†ì„± 추가" +msgstr "ì „ì— ì†ì„± 추가하기" #: editor/project_settings_editor.cpp msgid "Select a setting item first!" @@ -9383,27 +9538,26 @@ msgstr "ë¨¼ì € ì„¤ì • í•ëª©ì„ ì„ íƒí•˜ì„¸ìš”!" #: editor/project_settings_editor.cpp msgid "No property '%s' exists." -msgstr "'%s' ì†ì„±ì´ 존재하지 않습니다." +msgstr "'%s' ì†ì„±ì´ 없어요." #: editor/project_settings_editor.cpp msgid "Setting '%s' is internal, and it can't be deleted." -msgstr "'%s' ì„¤ì •ì€ ë‚´ë¶€ì ì¸ ê²ƒìž…ë‹ˆë‹¤, ì‚ì œí• ìˆ˜ 없습니다." +msgstr "'%s' ì„¤ì •ì€ ë‚´ë¶€ì ì¸ ê²ƒì´ê³ , ì‚ì œí• ìˆ˜ 없어요." #: editor/project_settings_editor.cpp msgid "Delete Item" -msgstr "ì•„ì´í…œ ì‚ì œ" +msgstr "í•목 ì‚ì œí•˜ê¸°" #: editor/project_settings_editor.cpp msgid "" "Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or " "'\"'." msgstr "" -"ì¸ì‹í• 수 없는 ì•¡ì…˜ ì´ë¦„입니다. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"' ê°€ í¬í•¨" -"ë˜ë©´ 안 ë©ë‹ˆë‹¤." +"ìž˜ëª»ëœ ì•¡ì…˜ ì´ë¦„. 공백ì´ê±°ë‚˜, '/' , ':', '=', '\\', '\"'를 í¬í•¨í•˜ë©´ 안 ë¼ìš”." #: editor/project_settings_editor.cpp msgid "Add Input Action" -msgstr "ìž…ë ¥ ì•¡ì…˜ 추가" +msgstr "ìž…ë ¥ ì•¡ì…˜ 추가하기" #: editor/project_settings_editor.cpp msgid "Error saving settings." @@ -9414,36 +9568,40 @@ msgid "Settings saved OK." msgstr "ì„¤ì • ì €ìž¥ 완료." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "ìž…ë ¥ ì•¡ì…˜ ì´ë²¤íЏ ì´ë™í•¨" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "기능 ìž¬ì •ì˜" #: editor/project_settings_editor.cpp msgid "Add Translation" -msgstr "ë²ˆì— ì¶”ê°€" +msgstr "ë²ˆì— ì¶”ê°€í•˜ê¸°" #: editor/project_settings_editor.cpp msgid "Remove Translation" -msgstr "ë²ˆì— ì‚ì œ" +msgstr "ë²ˆì— ì‚ì œí•˜ê¸°" #: editor/project_settings_editor.cpp msgid "Add Remapped Path" -msgstr "리맵핑 경로 추가" +msgstr "리맵핑 경로 추가하기" #: editor/project_settings_editor.cpp msgid "Resource Remap Add Remap" -msgstr "리소스 리맵핑 추가" +msgstr "리소스 리맵핑 추가하기" #: editor/project_settings_editor.cpp msgid "Change Resource Remap Language" -msgstr "리소스 리맵핑 언어 변경" +msgstr "리소스 리맵핑 언어 바꾸기" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap" -msgstr "리소스 리맵핑 ì‚ì œ" +msgstr "리소스 리맵핑 ì‚ì œí•˜ê¸°" #: editor/project_settings_editor.cpp msgid "Remove Resource Remap Option" -msgstr "리소스 리맵핑 옵션 ì‚ì œ" +msgstr "리소스 리맵핑 옵션 ì‚ì œí•˜ê¸°" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter" @@ -9451,7 +9609,7 @@ msgstr "ë¡œì¼€ì¼ í•„í„° 변경ë¨" #: editor/project_settings_editor.cpp msgid "Changed Locale Filter Mode" -msgstr "ë¡œì¼€ì¼ í•„í„° 모드 변경" +msgstr "ë¡œì¼€ì¼ í•„í„° 모드 변경ë¨" #: editor/project_settings_editor.cpp msgid "Project Settings (project.godot)" @@ -9467,11 +9625,11 @@ msgstr "ìž¬ì •ì˜..." #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp msgid "The editor must be restarted for changes to take effect." -msgstr "변경 사í•ì„ ì ìš©í•˜ë ¤ë©´ 편집기를 다시 실행해야 합니다." +msgstr "변경 사í•ì„ ì ìš©í•˜ë ¤ë©´ 편집기를 다시 켜야 í•´ìš”." #: editor/project_settings_editor.cpp msgid "Input Map" -msgstr "ìž…ë ¥ ì„¤ì •" +msgstr "ìž…ë ¥ ë§µ" #: editor/project_settings_editor.cpp msgid "Action:" @@ -9483,7 +9641,7 @@ msgstr "ì•¡ì…˜" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "ë°ë“œ ì¡´" +msgstr "ë°ë“œì¡´" #: editor/project_settings_editor.cpp msgid "Device:" @@ -9547,7 +9705,11 @@ msgstr "ì˜¤í† ë¡œë“œ" #: editor/project_settings_editor.cpp msgid "Plugins" -msgstr "플러그ì¸" +msgstr "플러그ì¸(Plugin)" + +#: editor/property_editor.cpp +msgid "Preset..." +msgstr "프리셋..." #: editor/property_editor.cpp msgid "Zero" @@ -9571,19 +9733,19 @@ msgstr "ë””ë ‰í† ë¦¬..." #: editor/property_editor.cpp msgid "Assign" -msgstr "í• ë‹¹" +msgstr "ì§€ì •í•˜ê¸°" #: editor/property_editor.cpp msgid "Select Node" -msgstr "노드 ì„ íƒ" +msgstr "노드 ì„ íƒí•˜ê¸°" #: editor/property_editor.cpp msgid "Error loading file: Not a resource!" -msgstr "íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸° 오류: 리소스가 아닙니다!" +msgstr "íŒŒì¼ ë¶ˆëŸ¬ì˜¤ê¸° 오류: 리소스가 아니ì—ìš”!" #: editor/property_editor.cpp msgid "Pick a Node" -msgstr "노드 ì„ íƒ" +msgstr "노드 ì„ íƒí•˜ê¸°" #: editor/property_editor.cpp msgid "Bit %d, val %d." @@ -9591,19 +9753,19 @@ msgstr "비트 %d, ê°’ %d." #: editor/property_selector.cpp msgid "Select Property" -msgstr "ì†ì„± ì„ íƒ" +msgstr "ì†ì„± ì„ íƒí•˜ê¸°" #: editor/property_selector.cpp msgid "Select Virtual Method" -msgstr "ê°€ìƒ ë©”ì„œë“œ ì„ íƒ" +msgstr "ê°€ìƒ ë©”ì„œë“œ ì„ íƒí•˜ê¸°" #: editor/property_selector.cpp msgid "Select Method" -msgstr "메서드 ì„ íƒ" +msgstr "메서드 ì„ íƒí•˜ê¸°" #: editor/rename_dialog.cpp editor/scene_tree_dock.cpp msgid "Batch Rename" -msgstr "ì¼ê´„ ì´ë¦„ 변경" +msgstr "ì¼ê´„ ì´ë¦„ 바꾸기" #: editor/rename_dialog.cpp msgid "Prefix" @@ -9615,7 +9777,7 @@ msgstr "ì ‘ë¯¸ì‚¬" #: editor/rename_dialog.cpp msgid "Advanced Options" -msgstr "ê³ ê¸‰ 옵션" +msgstr "ê³ ê¸‰ ì„¤ì •" #: editor/rename_dialog.cpp msgid "Substitute" @@ -9631,7 +9793,7 @@ msgstr "ë…¸ë“œì˜ ë¶€ëª¨ ì´ë¦„ (사용 가능한 경우)" #: editor/rename_dialog.cpp msgid "Node type" -msgstr "노드 타입" +msgstr "노드 ìœ í˜•" #: editor/rename_dialog.cpp msgid "Current scene name" @@ -9647,7 +9809,7 @@ msgid "" "Compare counter options." msgstr "" "순차 ì •ìˆ˜ ì¹´ìš´í„°.\n" -"ì¹´ìš´í„° ì„¤ì •ê³¼ 비êµí•¨." +"ì¹´ìš´í„° ì„¤ì •ê³¼ 비êµí•´ìš”." #: editor/rename_dialog.cpp msgid "Per Level counter" @@ -9655,7 +9817,7 @@ msgstr "수준 별 ì¹´ìš´í„°" #: editor/rename_dialog.cpp msgid "If set the counter restarts for each group of child nodes" -msgstr "ì„¤ì •í•œë‹¤ë©´ ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì— ëŒ€í•´ ì¹´ìš´í„°ê°€ 다시 시작ë©ë‹ˆë‹¤" +msgstr "ì„¤ì •í•œë‹¤ë©´ ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작해요" #: editor/rename_dialog.cpp msgid "Initial value for the counter" @@ -9687,19 +9849,19 @@ msgstr "ì •ê·œ 표현ì‹" #: editor/rename_dialog.cpp msgid "Post-Process" -msgstr "후 처리" +msgstr "후처리" #: editor/rename_dialog.cpp msgid "Keep" -msgstr "ìœ ì§€" +msgstr "ìœ ì§€í•˜ê¸°" #: editor/rename_dialog.cpp msgid "CamelCase to under_scored" -msgstr "낙타 대문ìžë¥¼ 밑줄로" +msgstr "CamelCase를 under_scored로 하기" #: editor/rename_dialog.cpp msgid "under_scored to CamelCase" -msgstr "ë°‘ì¤„ì„ ë‚™íƒ€ 대문ìžë¡œ" +msgstr "under_scored를 CamelCase로 하기" #: editor/rename_dialog.cpp msgid "Case" @@ -9707,35 +9869,31 @@ msgstr "문ìž" #: editor/rename_dialog.cpp msgid "To Lowercase" -msgstr "소문ìžë¡œ" +msgstr "소문ìžë¡œ 하기" #: editor/rename_dialog.cpp msgid "To Uppercase" -msgstr "대문ìžë¡œ" +msgstr "대문ìžë¡œ 하기" #: editor/rename_dialog.cpp msgid "Reset" -msgstr "리셋" - -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "오류" +msgstr "ë˜ëŒë¦¬ê¸°" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" -msgstr "부모 노드 ìž¬ì§€ì •" +msgstr "부모 노드 다시 ì§€ì •í•˜ê¸°" #: editor/reparent_dialog.cpp msgid "Reparent Location (Select new Parent):" -msgstr "부모 노드 ìž¬ì§€ì • 위치 (새 부모 노드를 ì„ íƒ):" +msgstr "부모 노드 다시 ì§€ì • 위치 (새 부모 노드를 ì„ íƒí•´ìš”):" #: editor/reparent_dialog.cpp msgid "Keep Global Transform" -msgstr "글로벌 변형 ìœ ì§€" +msgstr "ì „ì— ë³€í˜• ìœ ì§€í•˜ê¸°" #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent" -msgstr "부모 ìž¬ì§€ì •" +msgstr "부모 다시 ì§€ì •í•˜ê¸°" #: editor/run_settings_dialog.cpp msgid "Run Mode:" @@ -9763,72 +9921,86 @@ msgstr "ì”¬ì„ ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ 있는 부모가 없습니다." #: editor/scene_tree_dock.cpp msgid "Error loading scene from %s" -msgstr "%sì—서 씬 로딩 중 오류" +msgstr "%sì—서 씬 불러오는 중 오류" #: editor/scene_tree_dock.cpp msgid "" "Cannot instance the scene '%s' because the current scene exists within one " "of its nodes." -msgstr "" -"한 ë…¸ë“œì— í˜„ìž¬ ì”¬ì´ ì¡´ìž¬í•˜ê¸° 때문ì—, '%s' ì”¬ì„ ì¸ìŠ¤í„´ìŠ¤ í• ìˆ˜ 없습니다." +msgstr "한 ë…¸ë“œì— í˜„ìž¬ ì”¬ì´ ìžˆê¸° 때문ì—, '%s' ì”¬ì„ ì¸ìŠ¤í„´ìŠ¤í• ìˆ˜ 없어요." #: editor/scene_tree_dock.cpp msgid "Instance Scene(s)" msgstr "씬 ì¸ìŠ¤í„´ìŠ¤" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "분기 씬으로 êµì²´í•˜ê¸°" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" -msgstr "ìžì‹ 씬 추가" +msgstr "ìžì‹ 씬 추가하기" #: editor/scene_tree_dock.cpp msgid "Clear Script" -msgstr "스í¬ë¦½íЏ ì‚ì œ" +msgstr "스í¬ë¦½íЏ ì‚ì œí•˜ê¸°" #: editor/scene_tree_dock.cpp msgid "This operation can't be done on the tree root." -msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트ì—서는 불가합니다." +msgstr "ì´ ìž‘ì—…ì€ íŠ¸ë¦¬ 루트ì—서 í• ìˆ˜ 없어요." #: editor/scene_tree_dock.cpp msgid "Move Node In Parent" -msgstr "노드를 부모 노드로 ì´ë™" +msgstr "노드를 부모 노드로 ì´ë™í•˜ê¸°" #: editor/scene_tree_dock.cpp msgid "Move Nodes In Parent" -msgstr "ë…¸ë“œë“¤ì„ ë¶€ëª¨ 노드로 ì´ë™" +msgstr "ë…¸ë“œë“¤ì„ ë¶€ëª¨ 노드로 ì´ë™í•˜ê¸°" #: editor/scene_tree_dock.cpp msgid "Duplicate Node(s)" -msgstr "노드 ë³µì œ" +msgstr "노드 ë³µì œí•˜ê¸°" #: editor/scene_tree_dock.cpp msgid "Can't reparent nodes in inherited scenes, order of nodes can't change." msgstr "" -"ìƒì†ëœ 씬ì—서 부모 노드를 다시 ì§€ì •í• ìˆ˜ 없습니다, ë…¸ë“œì˜ ìˆœì„œëŠ” 바꿀 수 없습" -"니다." +"ìƒì†í•œ 씬ì—서 ë…¸ë“œì˜ ë¶€ëª¨ë¥¼ 다시 ì§€ì •í• ìˆ˜ 없어요, 노드 순서는 바뀌지 않아요." #: editor/scene_tree_dock.cpp msgid "Node must belong to the edited scene to become root." -msgstr "노드는 루트로 ë˜ë ¤ë©´ íŽ¸ì§‘ëœ ì”¬ì— ì†í•´ìžˆì–´ì•¼ 합니다." +msgstr "노드는 루트가 ë˜ê¸° ìœ„í•´ì„ íŽ¸ì§‘í•œ ì”¬ì— ì†í•´ì•¼ í•´ìš”." #: editor/scene_tree_dock.cpp msgid "Instantiated scenes can't become root" -msgstr "ì¸ìŠ¤í„´íŠ¸í™”ëœ ì”¬ì€ ë£¨íŠ¸ê°€ ë 수 없습니다" +msgstr "ì¸ìŠ¤í„´íŠ¸í™”ëœ ì”¬ì€ ë£¨íŠ¸ê°€ ë 수 없어요" #: editor/scene_tree_dock.cpp msgid "Make node as Root" msgstr "노드를 루트로 만들기" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "노드를 ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?" +msgid "Delete %d nodes?" +msgstr "%dê°œì˜ ë…¸ë“œë¥¼ ì‚ì œí• ê¹Œìš”?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "루트 노드 \"%s\"ì„(를) ì‚ì œí• ê¹Œìš”?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "노드 \"%s\"와(ê³¼) ìžì‹ì„ ì‚ì œí• ê¹Œìš”?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "노드 \"%s\"ì„(를) ì‚ì œí• ê¹Œìš”?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." -msgstr "ê·¸ 루트 노드로는 ìˆ˜í–‰í• ìˆ˜ 없습니다." +msgstr "루트 노드로는 ìˆ˜í–‰í• ìˆ˜ 없어요." #: editor/scene_tree_dock.cpp msgid "This operation can't be done on instanced scenes." -msgstr "ì´ ìž‘ì—…ì€ ì¸ìŠ¤í„´ìŠ¤ëœ ì”¬ì—서는 불가합니다." +msgstr "ì´ ìž‘ì—…ì€ ì¸ìŠ¤í„´ìŠ¤ëœ ì”¬ì—서 í• ìˆ˜ 없어요." #: editor/scene_tree_dock.cpp msgid "Save New Scene As..." @@ -9839,16 +10011,15 @@ msgid "" "Disabling \"editable_instance\" will cause all properties of the node to be " "reverted to their default." msgstr "" -"\"editable_instance\"를 비활설화 하면 ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ 기본 값으로 ë˜ëŒì•„ê°‘" -"니다." +"\"editable_instance\"를 ë„게 ë˜ë©´ ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ 기본 값으로 ë˜ëŒì•„와요." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "ìžì‹ë…¸ë“œ 편집 가능" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Placeholderë¡œì¨ ë¶ˆëŸ¬ì˜¤ê¸°" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"\"editable_instance\"를 ë„게 ë˜ë©´ ë…¸ë“œì˜ ëª¨ë“ ì†ì„±ì´ 기본 값으로 ë˜ëŒì•„와요." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9880,11 +10051,11 @@ msgstr "다른 노드" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" -msgstr "다른 씬ì—서 ìˆ˜í–‰í• ìˆ˜ 없는 작업입니다!" +msgstr "다른 씬ì—서 ìˆ˜í–‰í• ìˆ˜ 없는 작업ì´ì—ìš”!" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "ìƒì† 씬 ë‚´ì—서 ìˆ˜í–‰í• ìˆ˜ 없는 작업입니다!" +msgstr "ìƒì† 씬 ë‚´ì—서 ìˆ˜í–‰í• ìˆ˜ 없는 작업ì´ì—ìš”!" #: editor/scene_tree_dock.cpp msgid "Attach Script" @@ -9892,19 +10063,18 @@ msgstr "스í¬ë¦½íЏ ë¶™ì´ê¸°" #: editor/scene_tree_dock.cpp msgid "Remove Node(s)" -msgstr "노드 ì‚ì œ" +msgstr "노드 ì‚ì œí•˜ê¸°" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "ì¶œë ¥ í¬íЏ ì´ë¦„ 변경" +msgstr "노드 ìœ í˜• 바꾸기" #: editor/scene_tree_dock.cpp msgid "" "Couldn't save new scene. Likely dependencies (instances) couldn't be " "satisfied." msgstr "" -"ì”¬ì„ ì €ìž¥í• ìˆ˜ 없습니다. ì•„ë§ˆë„ ì¢…ì† ê´€ê³„ê°€ 만족스럽지 ì•Šì„ ìˆ˜ 있습니다." +"ì”¬ì„ ì €ìž¥í• ìˆ˜ 없어요. ì¢…ì† ê´€ê³„ (ì¸ìŠ¤í„´ìŠ¤)ê°€ 만족스럽지 ì•Šì€ ëª¨ì–‘ì´ì—ìš”." #: editor/scene_tree_dock.cpp msgid "Error saving scene." @@ -9916,19 +10086,27 @@ msgstr "ì €ìž¥í•˜ê¸° 위해 ì”¬ì„ ë³µì œí•˜ëŠ” ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆ #: editor/scene_tree_dock.cpp msgid "Sub-Resources" -msgstr "서브-리소스" +msgstr "하위-리소스" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance" msgstr "ìƒì† 지우기" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "ìžì‹ë…¸ë“œ 편집 가능" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "ìžë¦¬ 표시ìžë¡œ 불러오기" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "문서 열기" #: editor/scene_tree_dock.cpp msgid "Add Child Node" -msgstr "ìžì‹ 노드 추가" +msgstr "ìžì‹ 노드 추가하기" #: editor/scene_tree_dock.cpp msgid "Expand/Collapse All" @@ -9936,15 +10114,11 @@ msgstr "ëª¨ë‘ íŽ¼ì¹˜ê¸°/ì ‘ê¸°" #: editor/scene_tree_dock.cpp msgid "Change Type" -msgstr "타입 변경" - -#: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "스í¬ë¦½íЏ 펼치기" +msgstr "ìœ í˜• 바꾸기" #: editor/scene_tree_dock.cpp msgid "Reparent to New Node" -msgstr "새 ë…¸ë“œì— ë¶€ëª¨ 노드 ìž¬ì§€ì •" +msgstr "새 ë…¸ë“œì— ë¶€ëª¨ 노드 다시 ì§€ì •í•˜ê¸°" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -9952,38 +10126,38 @@ msgstr "씬 루트 만들기" #: editor/scene_tree_dock.cpp msgid "Merge From Scene" -msgstr "다른 씬ì—서 ê°€ì ¸ì˜¤ê¸°" +msgstr "다른 씬ì—서 병합하기" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Save Branch as Scene" -msgstr "ì„ íƒ ë…¸ë“œë¥¼ 다른 씬으로 ì €ìž¥" +msgstr "분기를 다른 씬으로 ì €ìž¥" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp msgid "Copy Node Path" -msgstr "노드 경로 복사" +msgstr "노드 경로 복사하기" #: editor/scene_tree_dock.cpp msgid "Delete (No Confirm)" -msgstr "ì‚ì œ (í™•ì¸ ì—†ìŒ)" +msgstr "ì‚ì œí•˜ê¸° (í™•ì¸ ì—†ìŒ)" #: editor/scene_tree_dock.cpp msgid "Add/Create a New Node." -msgstr "새 노드 추가/만들기." +msgstr "새 노드 추가하기/만들기." #: editor/scene_tree_dock.cpp msgid "" "Instance a scene file as a Node. Creates an inherited scene if no root node " "exists." msgstr "" -"씬 파ì¼ì„ 노드로 추가합니다. 루트 노드가 ì—†ì„ ê²½ìš°, ìƒì†ì”¬ìœ¼ë¡œ 만들어집니다." +"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í•´ìš”. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“¤ì–´ìš”." #: editor/scene_tree_dock.cpp msgid "Attach a new or existing script for the selected node." -msgstr "ì„ íƒëœ ë…¸ë“œì— ìƒˆë¡œìš´ 스í¬ë¦½íŠ¸ë¥¼ ìƒì„±í•˜ê±°ë‚˜ 기존 스í¬ë¦½íŠ¸ë¥¼ 불러옵니다." +msgstr "ì„ íƒí•œ ë…¸ë“œì— ìƒˆë¡œìš´ í˜¹ì€ ì¡´ìž¬í•˜ëŠ” 스í¬ë¦½íŠ¸ë¥¼ 붙여요." #: editor/scene_tree_dock.cpp msgid "Clear a script for the selected node." -msgstr "ì„ íƒëœ ë…¸ë“œì˜ ìŠ¤í¬ë¦½íŠ¸ë¥¼ ì‚ì œí•©ë‹ˆë‹¤." +msgstr "ì„ íƒí•œ ë…¸ë“œì˜ ìŠ¤í¬ë¦½íŠ¸ë¥¼ ì‚ì œí•´ìš”." #: editor/scene_tree_dock.cpp msgid "Remote" @@ -9995,7 +10169,7 @@ msgstr "로컬" #: editor/scene_tree_dock.cpp msgid "Clear Inheritance? (No Undo!)" -msgstr "ìƒì†ì„ ì§€ìš°ì‹œê² ìŠµë‹ˆê¹Œ? (ë˜ëŒë¦¬ê¸° 불가!)" +msgstr "ìƒì†ì„ 지울까요? (ë˜ëŒë¦´ 수 없어요!)" #: editor/scene_tree_editor.cpp msgid "Toggle Visible" @@ -10003,7 +10177,7 @@ msgstr "ë³´ì´ê¸° í† ê¸€" #: editor/scene_tree_editor.cpp msgid "Unlock Node" -msgstr "노드 ìž ê¸ˆ í•´ì œ" +msgstr "노드 ìž ê¸ˆ 풀기" #: editor/scene_tree_editor.cpp msgid "Button Group" @@ -10015,34 +10189,31 @@ msgstr "(ì—°ê²° 시작 ì§€ì )" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" -msgstr "노드 구성 ê²½ê³ :" +msgstr "노드 ì„¤ì • ê²½ê³ :" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"노드가 ì—°ê²°ê³¼ ê·¸ë£¹ì„ ê°–ê³ ìžˆìŠµë‹ˆë‹¤.\n" -"ì‹œê·¸ë„ ë…ì„ í´ë¦í•˜ì—¬ 보세요." +"노드가 %s ì—°ê²°ê³¼ %s ê·¸ë£¹ì„ ê°–ê³ ìžˆì–´ìš”.\n" +"í´ë¦í•˜ë©´ ì‹œê·¸ë„ ë…ì„ ë³´ì—¬ì¤˜ìš”." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"노드가 ì—°ê²°ì„ ê°–ê³ ìžˆìŠµë‹ˆë‹¤\n" -"ì‹œê·¸ë„ ë…ì„ í´ë¦í•˜ì—¬ 보세요." +"노드가 %s ì—°ê²°ì„ ê°–ê³ ìžˆì–´ìš”.\n" +"í´ë¦í•˜ë©´ ì‹œê·¸ë„ ë…ì„ ë³´ì—¬ì¤˜ìš”." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"노드가 그룹 ì•ˆì— ìžˆìŠµë‹ˆë‹¤.\n" -"그룹 ë…ì„ í´ë¦í•˜ì—¬ 보세요." +"노드가 그룹 ì•ˆì— ìžˆì–´ìš”.\n" +"í´ë¦í•˜ë©´ 그룹 ë…ì„ ë³´ì—¬ì¤˜ìš”." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10053,16 +10224,16 @@ msgid "" "Node is locked.\n" "Click to unlock it." msgstr "" -"노드가 ìž ê²¨ìžˆìŠµë‹ˆë‹¤.\n" -"í´ë¦í•˜ì—¬ ìž ê¸ˆì„ í‘¸ì„¸ìš”." +"노드가 ìž ê²¨ìžˆì–´ìš”.\n" +"í´ë¦í•˜ë©´ ìž ê¸ˆì„ í’€ì–´ìš”." #: editor/scene_tree_editor.cpp msgid "" "Children are not selectable.\n" "Click to make selectable." msgstr "" -"ìžì‹ë“¤ì„ ì„ íƒí• 수 없습니다.\n" -"í´ë¦í•˜ë©´ ì„ íƒí• 수 있게 ë©ë‹ˆë‹¤." +"ìžì‹ì„ ì„ íƒí• 수 없어요.\n" +"í´ë¦í•˜ë©´ ì„ íƒí• 수 있어요." #: editor/scene_tree_editor.cpp msgid "Toggle Visibility" @@ -10073,16 +10244,16 @@ msgid "" "AnimationPlayer is pinned.\n" "Click to unpin." msgstr "" -"AnimationPlayerê°€ ê³ ì •ë˜ì–´ìžˆìŠµë‹ˆë‹¤.\n" -"í´ë¦í•˜ì„œ ê³ ì •ì„ í‘¸ì„¸ìš”." +"AnimationPlayerê°€ ê³ ì •ë˜ì–´ 있어요.\n" +"í´ë¦í•˜ë©´ ê³ ì •ì„ í’€ì–´ìš”." #: 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" -msgstr "노드 ì´ë¦„ 변경" +msgstr "노드 ì´ë¦„ 바꾸기" #: editor/scene_tree_editor.cpp msgid "Scene Tree (Nodes):" @@ -10090,56 +10261,55 @@ msgstr "씬 트리 (노드):" #: editor/scene_tree_editor.cpp msgid "Node Configuration Warning!" -msgstr "노드 구성 ê²½ê³ !" +msgstr "노드 ì„¤ì • ê²½ê³ !" #: editor/scene_tree_editor.cpp msgid "Select a Node" -msgstr "노드 ì„ íƒ" +msgstr "노드를 ì„ íƒí•˜ì„¸ìš”" #: editor/script_create_dialog.cpp msgid "Path is empty." -msgstr "경로가 비었습니다." +msgstr "경로가 비었어요." #: editor/script_create_dialog.cpp msgid "Filename is empty." -msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì—ˆìŠµë‹ˆë‹¤." +msgstr "íŒŒì¼ ì´ë¦„ì´ ë¹„ì—ˆì–´ìš”." #: editor/script_create_dialog.cpp msgid "Path is not local." -msgstr "경로가 ë¡œì»¬ì´ ì•„ë‹™ë‹ˆë‹¤." +msgstr "경로가 ë¡œì»¬ì´ ì•„ë‹ˆì—ìš”." #: editor/script_create_dialog.cpp msgid "Invalid base path." -msgstr "올바르지 ì•Šì€ ê¸°ë³¸ 경로." +msgstr "ìž˜ëª»ëœ ê¸°ë³¸ 경로." #: editor/script_create_dialog.cpp msgid "A directory with the same name exists." -msgstr "ê°™ì€ ì´ë¦„ì˜ ë””ë ‰í† ë¦¬ê°€ 존재합니다." +msgstr "ê°™ì€ ì´ë¦„ì˜ ë””ë ‰í† ë¦¬ê°€ 있어요." #: editor/script_create_dialog.cpp msgid "Invalid extension." -msgstr "올바르지 ì•Šì€ í™•ìž¥ìž." +msgstr "ìž˜ëª»ëœ í™•ìž¥ìž." #: editor/script_create_dialog.cpp msgid "Wrong extension chosen." -msgstr "ìž˜ëª»ëœ í™•ìž¥ìž ì„ íƒìž…니다." +msgstr "ìž˜ëª»ëœ í™•ìž¥ìž ì„ íƒ." #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" -msgstr "'%s' 템플릿 불러오기 오류" +msgstr "'%s' 템플릿 불러오는 중 오류" #: editor/script_create_dialog.cpp msgid "Error - Could not create script in filesystem." -msgstr "오류 - íŒŒì¼ ì‹œìŠ¤í…œì— ìŠ¤í¬ë¦½íŠ¸ë¥¼ ìƒì„±í• 수 없습니다." +msgstr "오류 - íŒŒì¼ ì‹œìŠ¤í…œì— ìŠ¤í¬ë¦½íŠ¸ë¥¼ 만들 수 없어요." #: editor/script_create_dialog.cpp msgid "Error loading script from %s" -msgstr "'%s' 스í¬ë¦½íЏ 로딩 중 오류" +msgstr "'%s' 스í¬ë¦½íЏ 불러오는 중 오류" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "ë®ì–´ 쓰기" +msgstr "ìž¬ì •ì˜í•˜ê¸°" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10147,7 +10317,7 @@ msgstr "해당 ì—†ìŒ" #: editor/script_create_dialog.cpp msgid "Open Script / Choose Location" -msgstr "스í¬ë¦½íЏ 열기 / 위치 ì„ íƒ" +msgstr "스í¬ë¦½íЏ 열기 / 위치 ì„ íƒí•˜ê¸°" #: editor/script_create_dialog.cpp msgid "Open Script" @@ -10155,15 +10325,15 @@ msgstr "스í¬ë¦½íЏ 열기" #: editor/script_create_dialog.cpp msgid "File exists, it will be reused." -msgstr "파ì¼ì´ 존재합니다, 재사용ë©ë‹ˆë‹¤." +msgstr "파ì¼ì´ 있어요, 다시 ì‚¬ìš©í• ê²Œìš”." #: editor/script_create_dialog.cpp msgid "Invalid class name." -msgstr "올바르지 ì•Šì€ í´ëž˜ìŠ¤ëª…." +msgstr "ìž˜ëª»ëœ í´ëž˜ìФ ì´ë¦„." #: editor/script_create_dialog.cpp msgid "Invalid inherited parent name or path." -msgstr "올바르지 ì•Šì€ ìƒì†ëœ 부모 ì´ë¦„ ë˜ëŠ” 경로." +msgstr "ìž˜ëª»ëœ ìƒì†ëœ 부모 ì´ë¦„ ë˜ëŠ” 경로." #: editor/script_create_dialog.cpp msgid "Script is valid." @@ -10179,30 +10349,25 @@ msgstr "내장 스í¬ë¦½íЏ (씬 íŒŒì¼ ì•ˆ)." #: editor/script_create_dialog.cpp msgid "Will create a new script file." -msgstr "새 스í¬ë¦½íЏ 파ì¼ì„ ë§Œë“니다." +msgstr "새 스í¬ë¦½íЏ 파ì¼ì„ 만들어요." #: editor/script_create_dialog.cpp msgid "Will load an existing script file." -msgstr "기존 스í¬ë¦½íЏ 파ì¼ì„ 불러옵니다." - -#: editor/script_create_dialog.cpp -msgid "Language" -msgstr "언어" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "ìƒì†" +msgstr "기존 스í¬ë¦½íЏ 파ì¼ì„ 불러와요." #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "í´ëž˜ìŠ¤ëª…" +#, fuzzy +msgid "Class Name:" +msgstr "í´ëž˜ìФ ì´ë¦„" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "템플릿" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "내장 스í¬ë¦½íЏ" #: editor/script_create_dialog.cpp @@ -10218,24 +10383,52 @@ msgid "Bytes:" msgstr "ë°”ì´íЏ:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "ìŠ¤íƒ ì¶”ì " +msgid "Warning:" +msgstr "ê²½ê³ :" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "목ë¡ì—서 한 ê°œ í˜¹ì€ ì—¬ëŸ¬ ê°œì˜ í•ëª©ì„ ì§‘ì–´ 그래프로 ë³´ì—¬ì¤ë‹ˆë‹¤." +msgid "Error:" +msgstr "ì—러:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "C++ 오류" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "C++ 오류:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "C++ 소스" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "소스:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "C++ 소스:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "ìŠ¤íƒ ì¶”ì " #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "오류" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "ìžì‹ 프로세스 ì—°ê²°ë¨" +msgid "Child process connected." +msgstr "ìžì‹ 프로세스 ì—°ê²°ë¨." #: editor/script_editor_debugger.cpp msgid "Copy Error" -msgstr "복사 오류" +msgstr "복사하기 오류" + +#: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "중단ì 넘기기" #: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" @@ -10254,6 +10447,10 @@ msgid "Profiler" msgstr "프로파ì¼ëŸ¬" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "ë„¤íŠ¸ì›Œí¬ í”„ë¡œíŒŒì¼ëŸ¬" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "모니터" @@ -10266,8 +10463,12 @@ msgid "Monitors" msgstr "모니터" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "목ë¡ì—서 한 ê°œ ì´ìƒì˜ í•ëª©ì„ ì§‘ì–´ 그래프로 표시해요." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" -msgstr "리소스별 비디오 메모리 사용량 목ë¡:" +msgstr "리소스 별 비디오 메모리 사용량 목ë¡:" #: editor/script_editor_debugger.cpp msgid "Total:" @@ -10283,7 +10484,7 @@ msgstr "리소스 경로" #: editor/script_editor_debugger.cpp msgid "Type" -msgstr "타입" +msgstr "ìœ í˜•" #: editor/script_editor_debugger.cpp msgid "Format" @@ -10303,7 +10504,7 @@ msgstr "í´ë¦ëœ Control:" #: editor/script_editor_debugger.cpp msgid "Clicked Control Type:" -msgstr "í´ë¦ëœ Control 타입:" +msgstr "í´ë¦ëœ Control ìœ í˜•:" #: editor/script_editor_debugger.cpp msgid "Live Edit Root:" @@ -10311,7 +10512,7 @@ msgstr "실시간 편집 루트:" #: editor/script_editor_debugger.cpp msgid "Set From Tree" -msgstr "트리로부터 ì„¤ì •" +msgstr "트리ì—서 ì„¤ì •í•˜ê¸°" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" @@ -10323,11 +10524,11 @@ msgstr "단축키 지우기" #: editor/settings_config_dialog.cpp msgid "Restore Shortcut" -msgstr "단축키 ë³µì›" +msgstr "단축키 ë³µì›í•˜ê¸°" #: editor/settings_config_dialog.cpp msgid "Change Shortcut" -msgstr "단축키 변경" +msgstr "단축키 바꾸기" #: editor/settings_config_dialog.cpp msgid "Editor Settings" @@ -10343,87 +10544,87 @@ msgstr "ë°”ì¸ë”©" #: editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" -msgstr "Light 반경 변경" +msgstr "조명 반경 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change AudioStreamPlayer3D Emission Angle" -msgstr "AudioStreamPlayer3D ì—미션 ê°ë„ 변경" +msgstr "AudioStreamPlayer3D ë°©ì¶œ ê°ë„ 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera FOV" -msgstr "Camera 시야 변경" +msgstr "ì¹´ë©”ë¼ ì‹œì•¼ 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Camera Size" -msgstr "Camera í¬ê¸° 변경" +msgstr "ì¹´ë©”ë¼ í¬ê¸° 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Notifier AABB" -msgstr "알림 AABB 변경" +msgstr "알림 AABB 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Particles AABB" -msgstr "íŒŒí‹°í´ AABB 변경" +msgstr "íŒŒí‹°í´ AABB 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Probe Extents" -msgstr "프로브 범위 변경" +msgstr "프로브 범위 바꾸기" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Sphere Shape Radius" -msgstr "구체 모양 반경 변경" +msgstr "구체 모양 반경 바꾸기" #: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp msgid "Change Box Shape Extents" -msgstr "박스 모양 범위 변경" +msgstr "박스 모양 범위 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Radius" -msgstr "ìº¡ìŠ ëª¨ì–‘ 반경 변경" +msgstr "ìº¡ìŠ ëª¨ì–‘ 반경 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Capsule Shape Height" -msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë³€ê²½" +msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë°”ê¾¸ê¸°" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Radius" -msgstr "ìº¡ìŠ ëª¨ì–‘ 반지름 변경" +msgstr "ìº¡ìŠ ëª¨ì–‘ 반지름 바꾸기" #: editor/spatial_editor_gizmos.cpp msgid "Change Cylinder Shape Height" -msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë³€ê²½" +msgstr "ìº¡ìŠ ëª¨ì–‘ ë†’ì´ ë°”ê¾¸ê¸°" #: editor/spatial_editor_gizmos.cpp msgid "Change Ray Shape Length" -msgstr "ê´‘ì„ ëª¨ì–‘ ê¸¸ì´ ë³€ê²½" +msgstr "ê´‘ì„ ëª¨ì–‘ ê¸¸ì´ ë°”ê¾¸ê¸°" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Radius" -msgstr "ì›ê¸°ë‘¥ 반지름 변경" +msgstr "ì›ê¸°ë‘¥ 반지름 바꾸기" #: modules/csg/csg_gizmos.cpp msgid "Change Cylinder Height" -msgstr "ì›ê¸°ë‘¥ ë†’ì´ ë³€ê²½" +msgstr "ì›ê¸°ë‘¥ ë†’ì´ ë°”ê¾¸ê¸°" #: modules/csg/csg_gizmos.cpp msgid "Change Torus Inner Radius" -msgstr "í† ëŸ¬ìŠ¤ ë‚´ë¶€ 반지름 변경" +msgstr "í† ëŸ¬ìŠ¤ ë‚´ë¶€ 반지름 바꾸기" #: modules/csg/csg_gizmos.cpp msgid "Change Torus Outer Radius" -msgstr "í† ëŸ¬ìŠ¤ 외부 반지름 변경" +msgstr "í† ëŸ¬ìŠ¤ 외부 반지름 바꾸기" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select the dynamic library for this entry" -msgstr "ì´ ì—”íŠ¸ë¦¬ì— ëŒ€í•œ 다ì´ë‚˜ë¯¹ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì„ íƒ" +msgstr "ì´ ì—”íŠ¸ë¦¬ì— ëŒ€í•œ 다ì´ë‚˜ë¯¹ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì„ íƒí•˜ê¸°" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Select dependencies of the library for this entry" -msgstr "ì´ ì—”íŠ¸ë¦¬ì— ëŒ€í•œ ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 종ì†ì„ ì„ íƒ" +msgstr "ì´ ì—”íŠ¸ë¦¬ì— ëŒ€í•œ ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 종ì†ì„ ì„ íƒí•˜ê¸°" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Remove current entry" -msgstr "현재 엔트리 ì‚ì œ" +msgstr "현재 엔트리 ì‚ì œí•˜ê¸°" #: modules/gdnative/gdnative_library_editor_plugin.cpp msgid "Double click to create a new entry" @@ -10462,10 +10663,6 @@ msgid "Library" msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "ìƒíƒœ" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤: " @@ -10474,6 +10671,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "길ì´ê°€ 1ì¸ ë¬¸ìžì—´ (문ìž)ì´ í•„ìš”í•´ìš”." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "ìŠ¤í… ì¸ìˆ˜ê°€ 0입니다!" @@ -10491,21 +10692,19 @@ msgstr "리소스 파ì¼ì— 기반하지 않ìŒ" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "올바르지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—†ìŒ)" +msgstr "ìž˜ëª»ëœ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—†ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" -msgstr "" -"올바르지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—서 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ)" +msgstr "ìž˜ëª»ëœ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@path ì—서 스í¬ë¦½íŠ¸ë¥¼ 불러올 수 ì—†ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (invalid script at @path)" -msgstr "" -"올바르지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@pathì˜ ìŠ¤í¬ë¦½íŠ¸ê°€ 올바르지 않ìŒ)" +msgstr "ìž˜ëª»ëœ ì¸ìŠ¤í„´ìŠ¤ Dictionary í˜•ì‹ (@pathì˜ ìŠ¤í¬ë¦½íŠ¸ê°€ 올바르지 않ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary (invalid subclasses)" -msgstr "올바르지 ì•Šì€ ì¸ìŠ¤í„´ìŠ¤ Dictionary (하위 í´ëž˜ìŠ¤ê°€ 올바르지 않ìŒ)" +msgstr "ìž˜ëª»ëœ ì¸ìŠ¤í„´ìŠ¤ Dictionary (하위 í´ëž˜ìŠ¤ê°€ 올바르지 않ìŒ)" #: modules/gdscript/gdscript_functions.cpp msgid "Object can't provide a length." @@ -10537,11 +10736,11 @@ msgstr "층:" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Delete Selection" -msgstr "그리드맵 ì„ íƒ ì‚ì œ" +msgstr "그리드맵 ì„ íƒ ì‚ì œí•˜ê¸°" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Fill Selection" -msgstr "그리드맵 채우기 ì„ íƒ" +msgstr "그리드맵 채우기 ì„ íƒí•˜ê¸°" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Paste Selection" @@ -10617,7 +10816,7 @@ msgstr "ì„ íƒ ì§€ìš°ê¸°" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Fill Selection" -msgstr "채우기 ì„ íƒ" +msgstr "채우기 ì„ íƒí•˜ê¸°" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Settings" @@ -10625,7 +10824,15 @@ msgstr "그리드맵 ì„¤ì •" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "Pick Distance:" -msgstr "거리 ì„ íƒ:" +msgstr "거리 ì„ íƒí•˜ê¸°:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "메시 í•„í„°" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "메시를 ì‚¬ìš©í•˜ë ¤ë©´ ì´ GridMapì— MeshLibrary 리소스를 주세요." #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" @@ -10689,7 +10896,7 @@ msgstr "내비게ì´ì…˜ 메시 ìƒì„±ê¸° ì„¤ì •:" #: modules/recast/navigation_mesh_generator.cpp msgid "Parsing Geometry..." -msgstr "지오메트리 ë¶„ì„ ì¤‘..." +msgstr "형태 ë¶„ì„ ì¤‘..." #: modules/recast/navigation_mesh_generator.cpp msgid "Done!" @@ -10721,7 +10928,7 @@ msgstr "" #: modules/visual_script/visual_script.cpp msgid "Node returned an invalid sequence output: " -msgstr "올바르지 ì•Šì€ ì‹œí€€ìŠ¤ ì¶œë ¥ì„ ë°˜í™˜í•œ 노드: " +msgstr "ìž˜ëª»ëœ ì‹œí€€ìŠ¤ ì¶œë ¥ì„ ë°˜í™˜í•œ 노드: " #: modules/visual_script/visual_script.cpp msgid "Found sequence bit but not the node in the stack, report bug!" @@ -10734,15 +10941,15 @@ msgstr "ìŠ¤íƒ ê¹Šì´ë¡œ 오버플로우한 스íƒ: " #: modules/visual_script/visual_script_editor.cpp msgid "Change Signal Arguments" -msgstr "ì‹œê·¸ë„ ì¸ìˆ˜ 변경" +msgstr "ì‹œê·¸ë„ ì¸ìˆ˜ 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument Type" -msgstr "ì¸ìˆ˜ 타입 변경" +msgstr "ì¸ìˆ˜ ìœ í˜• 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Change Argument name" -msgstr "ì¸ìˆ˜ ì´ë¦„ 변경" +msgstr "ì¸ìˆ˜ ì´ë¦„ 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Default Value" @@ -10750,31 +10957,31 @@ msgstr "변수 기본값 ì„¤ì •" #: modules/visual_script/visual_script_editor.cpp msgid "Set Variable Type" -msgstr "변수 타입 ì„¤ì •" +msgstr "변수 ìœ í˜• ì„¤ì •" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "기존 내장 타입 ì´ë¦„ê³¼ ì¶©ëŒí•˜ì§€ 않아야 합니다." +msgstr "존재하는 내장 함수 다시 ì •ì˜í•˜ê¸°." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "새 사ê°í˜• 만들기." +msgstr "새 함수 만들기." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "변수:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "새 사ê°í˜• 만들기." +msgstr "새 변수 만들기." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "시그ë„:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "새로운 í´ë¦¬ê³¤ 만들기." +msgstr "새 ì‹œê·¸ë„ ë§Œë“¤ê¸°." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10786,248 +10993,320 @@ msgstr "ì´ë¯¸ 다른 함수/변수/시그ë„로 ì‚¬ìš©ëœ ì´ë¦„:" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Function" -msgstr "함수명 변경" +msgstr "함수명 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Variable" -msgstr "변수명 변경" +msgstr "변수명 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Rename Signal" -msgstr "시그ë„명 변경" +msgstr "ì‹œê·¸ë„ ì´ë¦„ 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Add Function" -msgstr "함수 추가" +msgstr "함수 추가하기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ìž…ë ¥ í¬íЏ ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" -msgstr "변수 추가" +msgstr "변수 추가하기" #: modules/visual_script/visual_script_editor.cpp msgid "Add Signal" -msgstr "ì‹œê·¸ë„ ì¶”ê°€" +msgstr "ì‹œê·¸ë„ ì¶”ê°€í•˜ê¸°" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "ìž…ë ¥ í¬íЏ 추가하기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "ì¶œë ¥ í¬íЏ 추가하기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "ìž…ë ¥ í¬íЏ ì‚ì œí•˜ê¸°" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "ì¶œë ¥ í¬íЏ ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" -msgstr "í‘œí˜„ì‹ ë³€ê²½" +msgstr "í‘œí˜„ì‹ ë°”ê¾¸ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Nodes" -msgstr "비주얼 스í¬ë¦½íЏ 노드 ì‚ì œ" +msgstr "비주얼 스í¬ë¦½íЏ 노드 ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Duplicate VisualScript Nodes" -msgstr "비주얼 스í¬ë¦½íЏ 노드 ë³µì œ" +msgstr "비주얼 스í¬ë¦½íЏ 노드 ë³µì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"%sì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•©ë‹ˆë‹¤. Shiftì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì " -"ì¸ ì‹œê·¸ë‹ˆì²˜ë¥¼ 드ë¡í•©ë‹ˆë‹¤." +"%sì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•´ìš”. Shiftì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ " +"시그니처를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" -"Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•©ë‹ˆë‹¤. Shift를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œê·¸" -"니처를 드ë¡í•©ë‹ˆë‹¤." +"Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ Getter를 드ë¡í•´ìš”. Shift를 ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ì¼ë°˜ì ì¸ ì‹œê·¸ë‹ˆ" +"처를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." -msgstr "%sì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•©ë‹ˆë‹¤." +msgstr "%sì„(를) ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a simple reference to the node." -msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•©ë‹ˆë‹¤." +msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ ë…¸ë“œì— ëŒ€í•œ 간단한 참조를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a Variable Setter." -msgstr "%sì„(를) ëˆ„ë¥´ê³ ìžˆë¥´ë©´ 변수 Setter를 드ë¡í•©ë‹ˆë‹¤." +msgstr "%sì„(를) ëˆ„ë¥´ê³ ìžˆë¥´ë©´ 변수 Setter를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Hold Ctrl to drop a Variable Setter." -msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 변수 Setter를 드ëží•©ë‹ˆë‹¤." +msgstr "Ctrlì„ ëˆ„ë¥´ê³ ìžˆìœ¼ë©´ 변수 Setter를 드ë¡í•´ìš”." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "Preload 노드 추가" +msgstr "Preload 노드 추가하기" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" -msgstr "트리ì—서 노드 추가" +msgstr "트리ì—서 노드 추가하기" + +#: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" -msgstr "Getter ì†ì„± 추가" +msgstr "Getter ì†ì„± 추가하기" #: modules/visual_script/visual_script_editor.cpp msgid "Add Setter Property" -msgstr "Setter ì†ì„± 추가" +msgstr "Setter ì†ì„± 추가하기" #: modules/visual_script/visual_script_editor.cpp msgid "Change Base Type" -msgstr "기본 타입 변경" +msgstr "기본 ìœ í˜• 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Move Node(s)" -msgstr "노드 ì´ë™" +msgstr "노드 ì´ë™í•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Remove VisualScript Node" -msgstr "비주얼 스í¬ë¦½íЏ 노드 ì‚ì œ" +msgstr "비주얼 스í¬ë¦½íЏ 노드 ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Nodes" -msgstr "노드 ì—°ê²°" +msgstr "노드 연결하기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "그래프 노드 ì—°ê²° í•´ì œ" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" -msgstr "노드 ë°ì´í„° ì—°ê²°" +msgstr "노드 ë°ì´í„° 연결하기" #: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Sequence" -msgstr "노드 시퀀스 ì—°ê²°" +msgstr "노드 시퀀스 연결하기" #: modules/visual_script/visual_script_editor.cpp msgid "Script already has function '%s'" -msgstr "스í¬ë¦½íŠ¸ê°€ ì´ë¯¸ '%s' 함수를 ê°–ê³ ìžˆìŒ" +msgstr "스í¬ë¦½íŠ¸ê°€ ì´ë¯¸ '%s' 함수를 ê°–ê³ ìžˆì–´ìš”" #: modules/visual_script/visual_script_editor.cpp msgid "Change Input Value" -msgstr "ìž…ë ¥ ê°’ 변경" +msgstr "ìž…ë ¥ ê°’ 바꾸기" #: modules/visual_script/visual_script_editor.cpp msgid "Resize Comment" -msgstr "ì£¼ì„ í¬ê¸° ì¡°ì ˆ" +msgstr "ì£¼ì„ í¬ê¸° ì¡°ì ˆí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Can't copy the function node." -msgstr "함수 노드를 ë³µì‚¬í• ìˆ˜ 없습니다." +msgstr "함수 노드를 ë³µì‚¬í• ìˆ˜ 없어요." #: modules/visual_script/visual_script_editor.cpp msgid "Clipboard is empty!" -msgstr "í´ë¦½ë³´ë“œê°€ 비었습니다!" +msgstr "í´ë¦½ë³´ë“œê°€ 비었어요!" #: modules/visual_script/visual_script_editor.cpp msgid "Paste VisualScript Nodes" msgstr "비주얼 스í¬ë¦½íЏ 노드 붙여넣기" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "함수 노드를 ë³µì‚¬í• ìˆ˜ 없어요." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "함수명 바꾸기" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" -msgstr "함수 ì‚ì œ" +msgstr "함수 ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Variable" -msgstr "변수 ì‚ì œ" +msgstr "변수 ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Variable:" -msgstr "변수 편집:" +msgstr "변수 편집하기:" #: modules/visual_script/visual_script_editor.cpp msgid "Remove Signal" -msgstr "ì‹œê·¸ë„ ì‚ì œ" +msgstr "ì‹œê·¸ë„ ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Editing Signal:" -msgstr "ì‹œê·¸ë„ íŽ¸ì§‘:" +msgstr "ì‹œê·¸ë„ íŽ¸ì§‘í•˜ê¸°:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "기본 타입:" +msgid "Make Tool:" +msgstr "ë„구 만들기:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "멤버:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "사용 가능한 노드:" +#, fuzzy +msgid "function_name" +msgstr "함수:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." -msgstr "그래프를 편집하기 위한 함수를 ì„ íƒí•˜ê±°ë‚˜ 만드세요." +msgstr "그래프를 편집하기 위한 함수를 ì„ íƒí•˜ê±°ë‚˜ 만들어요." #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" -msgstr "ì„ íƒ í•목 ì‚ì œ" +msgstr "ì„ íƒ í•목 ì‚ì œí•˜ê¸°" #: modules/visual_script/visual_script_editor.cpp msgid "Find Node Type" -msgstr "노드 타입 찾기" +msgstr "노드 ìœ í˜• 찾기" #: modules/visual_script/visual_script_editor.cpp msgid "Copy Nodes" -msgstr "노드 복사" +msgstr "노드 복사하기" #: modules/visual_script/visual_script_editor.cpp msgid "Cut Nodes" msgstr "노드 잘ë¼ë‚´ê¸°" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "함수명 바꾸기" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "ìƒˆë¡œê³ ì¹¨" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" -msgstr "멤버 편집" +msgstr "멤버 편집하기" #: modules/visual_script/visual_script_flow_control.cpp msgid "Input type not iterable: " -msgstr "ë°˜ë³µí• ìˆ˜ 없는 ìž…ë ¥ 타입: " +msgstr "ë°˜ë³µí• ìˆ˜ 없는 ìž…ë ¥ ìœ í˜•: " #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid" -msgstr "반복ìžê°€ ìœ íš¨í•˜ì§€ 않게 ë¨" +msgstr "반복ìžê°€ 잘못ë˜ì—ˆì–´ìš”" #: modules/visual_script/visual_script_flow_control.cpp msgid "Iterator became invalid: " -msgstr "반복ìžê°€ ìœ íš¨í•˜ì§€ 않게 ë¨: " +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!" -msgstr "기본 오브ì 트는 노드가 아닙니다!" +msgstr "기본 ê°ì²´ëŠ” 노드가 아닙니다!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Path does not lead Node!" -msgstr "노드를 ì§€ì¹í•˜ëŠ” 경로가 아닙니다!" +msgstr "노드를 ì§€ì •í•˜ëŠ” 경로가 아니ì—ìš”!" #: modules/visual_script/visual_script_func_nodes.cpp msgid "Invalid index property name '%s' in node %s." -msgstr "노드 %s ì•ˆì— ì¸ë±ìФ ì†ì„± ì´ë¦„ '%s'ì€(는) 올바르지 않습니다." +msgstr "노드 %s ì•ˆì— ì¸ë±ìФ ì†ì„± ì´ë¦„ '%s'ì´(ê°€) 잘못ë¬ì–´ìš”." #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid argument of type: " -msgstr ": 올바르지 ì•Šì€ ì¸ìˆ˜ 타입: " +msgstr ": ìž˜ëª»ëœ ì¸ìˆ˜ ìœ í˜•: " #: modules/visual_script/visual_script_nodes.cpp msgid ": Invalid arguments: " -msgstr ": 올바르지 ì•Šì€ ì¸ìˆ˜: " +msgstr ": ìž˜ëª»ëœ ì¸ìˆ˜: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "VariableGetì´ ìŠ¤í¬ë¦½íЏì—서 발견ë˜ì§€ 않ìŒ: " +msgstr "VariableGetì„ ìŠ¤í¬ë¦½íЏì—서 ì°¾ì„ ìˆ˜ ì—†ìŒ: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "VariableSetì´ ìŠ¤í¬ë¦½íЏì—서 발견ë˜ì§€ 않ìŒ: " +msgstr "VariableSetì„ ìŠ¤í¬ë¦½íЏì—서 ì°¾ì„ ìˆ˜ ì—†ìŒ: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "" -"커스텀 노드가 _step() 메서드를 ê°–ê³ ìžˆì§€ 않아서, 그래프를 ì²˜ë¦¬í• ìˆ˜ 없습니다." +msgstr "맞춤 ë…¸ë“œì— _step() 메서드가 없어요, 그래프를 ì²˜ë¦¬í• ìˆ˜ 없어요." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" -"_step()ìœ¼ë¡œë¶€í„°ì˜ ì˜¬ë°”ë¥´ì§€ ì•Šì€ ë°˜í™˜ 값으로, integer (seq out), í˜¹ì€ string " -"(error)ê°€ 아니면 안ë©ë‹ˆë‹¤." +"_step()ì—서 ìž˜ëª»ëœ ë°˜í™˜ ê°’ì´ì—ìš”, ì •ìˆ˜ (seq out), ë˜ëŠ” 문ìžì—´ (error)ì´ì–´ì•¼ " +"í•´ìš”." #: modules/visual_script/visual_script_property_selector.cpp msgid "Search VisualScript" -msgstr "비주얼 스í¬ë¦½íЏ 검색" +msgstr "비주얼 스í¬ë¦½íЏ 검색하기" #: modules/visual_script/visual_script_property_selector.cpp msgid "Get %s" @@ -11039,72 +11318,75 @@ msgstr "Set %s" #: platform/android/export/export.cpp msgid "Package name is missing." -msgstr "패키지 ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤." +msgstr "패키지 ì´ë¦„ì´ ì—†ì–´ìš”." #: platform/android/export/export.cpp msgid "Package segments must be of non-zero length." -msgstr "패키지 세그먼트는 길ì´ê°€ 0ì´ ì•„ë‹ˆì–´ì•¼ 합니다." +msgstr "패키지 세그먼트는 길ì´ê°€ 0ì´ ì•„ë‹ˆì–´ì•¼ í•´ìš”." #: platform/android/export/export.cpp msgid "The character '%s' is not allowed in Android application package names." -msgstr "" -"ë¬¸ìž '%s'ì€(는) 안드로ì´ë“œ ì• í”Œë¦¬ì¼€ì´ì…˜ 패키지 ì´ë¦„으로 쓸 수 없습니다." +msgstr "ë¬¸ìž '%s'ì€(는) 안드로ì´ë“œ ì• í”Œë¦¬ì¼€ì´ì…˜ 패키지 ì´ë¦„으로 쓸 수 없어요." #: platform/android/export/export.cpp msgid "A digit cannot be the first character in a package segment." -msgstr "숫ìžëŠ” 패키지 ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžê°€ ë 수 없습니다." +msgstr "숫ìžëŠ” 패키지 ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžë¡œ 쓸 수 없어요." #: platform/android/export/export.cpp msgid "The character '%s' cannot be the first character in a package segment." -msgstr "ë¬¸ìž '%s'ì€(는) 패키지 ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžê°€ ë 수 없습니다." +msgstr "ë¬¸ìž '%s'ì€(는) 패키지 ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžë¡œ 쓸 수 없어요." #: platform/android/export/export.cpp msgid "The package must have at least one '.' separator." -msgstr "패키지는 ì ì–´ë„ í•˜ë‚˜ì˜ '.' 분리 기호를 ê°–ê³ ìžˆì–´ì•¼ 합니다." +msgstr "패키지는 ì ì–´ë„ í•˜ë‚˜ì˜ '.' 분리 기호가 있어야 í•´ìš”." + +#: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "목ë¡ì—서 기기를 ì„ íƒí•˜ì„¸ìš”" #: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." -msgstr "ADB 실행 파ì¼ì´ 편집기 ì„¤ì •ì—서 구성ë˜ì§€ 않았습니다." +msgstr "ADB 실행 파ì¼ì„ 편집기 ì„¤ì •ì—서 ì„¤ì •í•˜ì§€ 않았어요." #: platform/android/export/export.cpp msgid "OpenJDK jarsigner not configured in the Editor Settings." -msgstr "OpenJDK jarsignerê°€ 편집기 ì„¤ì •ì—서 구성ë˜ì§€ 않았습니다." +msgstr "OpenJDK jarsigner를 편집기 ì„¤ì •ì—서 ì„¤ì •í•˜ì§€ 않았어요." #: platform/android/export/export.cpp msgid "Debug keystore not configured in the Editor Settings nor in the preset." -msgstr "Debug keystoreì´ íŽ¸ì§‘ê¸° ì„¤ì • ë˜ëŠ” 프리셋ì—서 구성ë˜ì§€ 않았습니다." +msgstr "Debug keystore를 편집기 ì„¤ì •ê³¼ í”„ë¦¬ì…‹ì— ì„¤ì •í•˜ì§€ 않았어요." #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." -msgstr "" -"커스텀 빌드ì—는 편집기 ì„¤ì •ì—서 올바른 안드로ì´ë“œ SDK 경로가 필요합니다." +msgstr "맞춤 빌드ì—는 편집기 ì„¤ì •ì—서 올바른 안드로ì´ë“œ SDK 경로가 필요해요." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "편집기 ì„¤ì •ì—서 커스텀 ë¹Œë“œì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì•ˆë“œë¡œì´ë“œ SDK 경로입니다." +msgstr "편집기 ì„¤ì •ì—서 맞춤 ë¹Œë“œì— ìž˜ëª»ëœ ì•ˆë“œë¡œì´ë“œ SDK 경로ì´ì—ìš”." #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"컴파ì¼ì„ 하기 위한 안드로ì´ë“œ 프로ì 트가 설치ë˜ì§€ 않았습니다. 편집기 메뉴ì—" -"서 설치하세요." +"프로ì íŠ¸ì— ì•ˆë“œë¡œì´ë“œ 빌드 í…œí”Œë¦¿ì„ ì„¤ì¹˜í•˜ì§€ 않았네요. 프로ì 트 메뉴ì—서 설치" +"하세요." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." -msgstr "APK í™•ìž¥ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ê³µìš© 키입니다." +msgstr "APK í™•ìž¥ì— ìž˜ëª»ëœ ê³µê°œ 키ì´ì—ìš”." #: platform/android/export/export.cpp msgid "Invalid package name:" -msgstr "올바르지 ì•Šì€ íŒ¨í‚¤ì§€ ì´ë¦„:" +msgstr "ìž˜ëª»ëœ íŒ¨í‚¤ì§€ ì´ë¦„:" #: platform/android/export/export.cpp msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" -"커스텀 빌드 템플릿으로 ë¹Œë“œí•˜ë ¤ 했으나, ë²„ì „ ì •ë³´ê°€ 존재하지 않습니다. '프로" -"ì 트' 메뉴ì—서 다시 설치해주세요." +"맞춤 빌드 템플릿으로 ë¹Œë“œí•˜ë ¤ 했으나, ë²„ì „ ì •ë³´ê°€ê°€ 없어요. '프로ì 트' 메뉴ì—" +"서 다시 설치해주세요." #: platform/android/export/export.cpp msgid "" @@ -11113,8 +11395,8 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" -"안드로ì´ë“œ 빌드 ë²„ì „ì´ ë§žì§€ 않습니다:\n" -" ì„¤ì¹˜ëœ í…œí”Œë¦¿: %s\n" +"안드로ì´ë“œ 빌드 ë²„ì „ì´ ë§žì§€ 않ìŒ:\n" +" 설치한 템플릿: %s\n" " Godot ë²„ì „: %s\n" "'프로ì 트' 메뉴ì—서 안드로ì´ë“œ 빌드 í…œí”Œë¦¿ì„ ë‹¤ì‹œ 설치해주세요." @@ -11127,57 +11409,61 @@ msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" -"안드로ì´ë“œ 프로ì íŠ¸ì˜ ë¹Œë“œì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤, ì¶œë ¥í•œ 오류를 확ì¸í•˜ì„¸ìš”.\n" -"ë˜ëŠ” docs.godotengine.orgì—서 안드로ì´ë“œ 빌드 문서를 ì°¾ì„ ìˆ˜ 있습니다." +"안드로ì´ë“œ 프로ì íŠ¸ì˜ ë¹Œë“œì— ì‹¤íŒ¨í–ˆì–´ìš”, ì¶œë ¥í•œ 오류를 확ì¸í•˜ì„¸ìš”.\n" +"ë˜ëŠ” docs.godotengine.orgì—서 안드로ì´ë“œ 빌드 문서를 찾아 보세요." #: platform/android/export/export.cpp msgid "No build apk generated at: " -msgstr "ì—¬ê¸°ì— ë¹Œë“œ apkê°€ ìƒì„±ë˜ì§€ 않았습니다: " +msgstr "ì—¬ê¸°ì— ë¹Œë“œ apk를 만들지 않ìŒ: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." -msgstr "ì‹ë³„ìžê°€ 없습니다." +msgstr "ì‹ë³„ìžê°€ 없어요." #: platform/iphone/export/export.cpp msgid "Identifier segments must be of non-zero length." -msgstr "ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ëŠ” 길ì´ê°€ 0ì´ ì•„ë‹ˆì–´ì•¼ 합니다." +msgstr "ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ëŠ” 길ì´ê°€ 0ì´ ì•„ë‹ˆì–´ì•¼ í•´ìš”." #: platform/iphone/export/export.cpp msgid "The character '%s' is not allowed in Identifier." -msgstr "ë¬¸ìž '%s'ì€(는) ì‹ë³„ìžì— 쓸 수 없습니다." +msgstr "ë¬¸ìž '%s'ì€(는) ì‹ë³„ìžì— 쓸 수 없어요." #: platform/iphone/export/export.cpp msgid "A digit cannot be the first character in a Identifier segment." -msgstr "숫ìžëŠ” ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžê°€ ë 수 없습니다." +msgstr "숫ìžëŠ” ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžë¡œ 쓸 수 없어요." #: platform/iphone/export/export.cpp msgid "" "The character '%s' cannot be the first character in a Identifier segment." -msgstr "ë¬¸ìž '%s'ì€(는) ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžê°€ ë 수 없습니다." +msgstr "ë¬¸ìž '%s'ì€(는) ì‹ë³„ìž ì„¸ê·¸ë¨¼íŠ¸ì˜ ì²« 문ìžë¡œ 쓸 수 없어요." #: platform/iphone/export/export.cpp msgid "The Identifier must have at least one '.' separator." -msgstr "ì‹ë³„ìžëŠ” ì ì–´ë„ í•˜ë‚˜ì˜ '.' 분리 기호를 ê°–ê³ ìžˆì–´ì•¼ 합니다." +msgstr "ì‹ë³„ìžëŠ” ì ì–´ë„ í•˜ë‚˜ì˜ '.' 분리 기호를 ê°–ê³ ìžˆì–´ì•¼ í•´ìš”." #: platform/iphone/export/export.cpp msgid "App Store Team ID not specified - cannot configure the project." -msgstr "ì•±ìŠ¤í† ì–´ 팀 IDê°€ ì§€ì •ë˜ì§€ 않았습니다 - 프로ì 트를 êµ¬ì„±í• ìˆ˜ 없습니다." +msgstr "App Store 팀 ID를 ì§€ì •í•˜ì§€ 않았어요 - 프로ì 트를 êµ¬ì„±í• ìˆ˜ 없어요." #: platform/iphone/export/export.cpp msgid "Invalid Identifier:" -msgstr "올바르지 ì•Šì€ ì‹ë³„ìž:" +msgstr "ìž˜ëª»ëœ ì‹ë³„ìž:" #: platform/iphone/export/export.cpp msgid "Required icon is not specified in the preset." -msgstr "요구ë˜ëŠ” ì•„ì´ì½˜ì´ 프리셋ì—서 ì§€ì •ë˜ì§€ 않았습니다." +msgstr "요구하는 ì•„ì´ì½˜ì„ 프리셋ì—서 ì§€ì •í•˜ì§€ 않았어요." + +#: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" #: platform/javascript/export/export.cpp msgid "Run in Browser" -msgstr "브ë¼ìš°ì €ì—서 실행" +msgstr "브ë¼ìš°ì €ì—서 실행하기" #: platform/javascript/export/export.cpp msgid "Run exported HTML in the system's default browser." -msgstr "내보내기 한 HTMLì„ ì‹œìŠ¤í…œì˜ ê¸°ë³¸ 브ë¼ìš°ì €ë¥¼ 사용하여 실행." +msgstr "내보낸 HTMLì„ ì‹œìŠ¤í…œì˜ ê¸°ë³¸ 브ë¼ìš°ì €ë¥¼ 사용하여 실행하기." #: platform/javascript/export/export.cpp msgid "Could not write file:" @@ -11185,15 +11471,15 @@ msgstr "파ì¼ì— 쓸 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp msgid "Could not open template for export:" -msgstr "내보내기 í…œí”Œë¦¿ì„ ì—´ 수 없습니다:" +msgstr "내보내기 í…œí”Œë¦¿ì„ ì—´ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp msgid "Invalid export template:" -msgstr "올바르지 ì•Šì€ ë‚´ë³´ë‚´ê¸° 템플릿:" +msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:" #: platform/javascript/export/export.cpp msgid "Could not read custom HTML shell:" -msgstr "커스텀 HTML shellì„ ì½ì„ 수 ì—†ìŒ:" +msgstr "맞춤 HTML shellì„ ì½ì„ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp msgid "Could not read boot splash image file:" @@ -11201,68 +11487,67 @@ msgstr "부트 스플래시 ì´ë¯¸ì§€ 파ì¼ì„ ì½ì„ 수 ì—†ìŒ:" #: platform/javascript/export/export.cpp msgid "Using default boot splash image." -msgstr "기본 부트 스플래시 ì´ë¯¸ì§€ 사용." +msgstr "기본 부트 스플래시 ì´ë¯¸ì§€ 사용하기." #: platform/uwp/export/export.cpp msgid "Invalid package unique name." -msgstr "올바르지 ì•Šì€ íŒ¨í‚¤ì§€ ê³ ìœ ì´ë¦„." +msgstr "ìž˜ëª»ëœ íŒ¨í‚¤ì§€ ê³ ìœ ì´ë¦„." #: platform/uwp/export/export.cpp msgid "Invalid product GUID." -msgstr "ìœ ìš”í•˜ì§€ ì•Šì€ í”„ë¡œë•트 GUID." +msgstr "ìž˜ëª»ëœ ì œí’ˆ GUID." #: platform/uwp/export/export.cpp msgid "Invalid publisher GUID." -msgstr "ìœ ìš”í•˜ì§€ ì•Šì€ í¼ë¸”리셔 GUID." +msgstr "ìž˜ëª»ëœ í¼ë¸”리셔 GUID." #: platform/uwp/export/export.cpp msgid "Invalid background color." -msgstr "ìœ ìš”í•˜ì§€ ì•Šì€ ë°°ê²½ 색ìƒ." +msgstr "ìž˜ëª»ëœ ë°°ê²½ 색ìƒ." #: platform/uwp/export/export.cpp msgid "Invalid Store Logo image dimensions (should be 50x50)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (50x50 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ Store ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°(50x50ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid square 44x44 logo image dimensions (should be 44x44)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (44x44 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ì‚¬ê°í˜• 44x44 ë¡œê³ ì´ë¯¸ì§€ í¬ê¸° (44x44ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid square 71x71 logo image dimensions (should be 71x71)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (71x71 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ì‚¬ê°í˜• 71x71 ë¡œê³ ì´ë¯¸ì§€ í¬ê¸° (71x71ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid square 150x150 logo image dimensions (should be 150x150)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (150x150 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ì‚¬ê°í˜• 150x150 ë¡œê³ ì´ë¯¸ì§€ í¬ê¸° (150x150ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid square 310x310 logo image dimensions (should be 310x310)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (310x310 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ì‚¬ê°í˜• 310x310 ë¡œê³ ì´ë¯¸ì§€ í¬ê¸° (310x310ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)." -msgstr "올바르지 ì•Šì€ ë¡œê³ ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (310x150 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ë„“ì€ 310x150 ë¡œê³ ì´ë¯¸ì§€ í¬ê¸° (310x150ì´ì–´ì•¼ í•´ìš”)." #: platform/uwp/export/export.cpp msgid "Invalid splash screen image dimensions (should be 620x300)." -msgstr "" -"올바르지 ì•Šì€ ìŠ¤í”Œëž˜ì‹œ 스í¬ë¦° ì´ë¯¸ì§€ í¬ê¸°ìž…니다 (620x300 ì´ì–´ì•¼ 합니다)." +msgstr "ìž˜ëª»ëœ ìŠ¤í”Œëž˜ì‹œ 스í¬ë¦° ì´ë¯¸ì§€ í¬ê¸° (620x300ì´ì–´ì•¼ í•´ìš”)." #: scene/2d/animated_sprite.cpp msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"AnimatedSpriteì´ í”„ë ˆìž„ì„ ë³´ì—¬ì£¼ê¸° 위해서는 \"Frames\" ì†ì„±ì— SpriteFrames 리" -"소스를 만들거나 ì§€ì •í•´ì•¼ 합니다." +"AnimatedSpriteì´ í”„ë ˆìž„ì„ ë³´ì—¬ì£¼ë ¤ë©´ \"Frames\" ì†ì„±ì— SpriteFrames 리소스를 " +"만들거나 ì§€ì •í•´ì•¼ í•´ìš”." #: scene/2d/canvas_modulate.cpp msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"씬마다 ë³´ì´ëŠ” CanvasModulateê°€ 단 하나만 허용ë©ë‹ˆë‹¤. 첫번째로 ìƒì„±ëœ 것만 ë™" -"ìž‘í•˜ê³ , 나머지는 무시ë©ë‹ˆë‹¤." +"CanvasModulate는 씬 당 단 하나만 ë³´ì¼ ìˆ˜ 있어요. 처ìŒì— ë§Œë“ ê²ƒë§Œ ìž‘ë™í•˜ê³ , " +"나머지는 무시ë¼ìš”." #: scene/2d/collision_object_2d.cpp msgid "" @@ -11270,9 +11555,8 @@ msgid "" "Consider adding a CollisionShape2D or CollisionPolygon2D as a child to " "define its shape." msgstr "" -"ì´ ë…¸ë“œëŠ” Shapeì„ ê°–ëŠ” ìžì‹ 노드가 없습니다, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš© " -"í• ìˆ˜ 없습니다.\n" -"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 Shapeì„ ì •ì˜" +"ì´ ë…¸ë“œëŠ” Shapeê°€ 없어요, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없어요.\n" +"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 Shape를 ì •ì˜" "하세요." #: scene/2d/collision_polygon_2d.cpp @@ -11281,13 +11565,13 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionPolygon2D는 CollisionObject2Dì— ì¶©ëŒ ëª¨ì–‘ì„ ì§€ì •í•˜ê¸° 위해서만 사용ë©" -"니다. Area2D, StaticBody2D, RigidBody2D, KinematicBody2D ë“±ì˜ ìžì‹ 노드로 ì¶”" -"가하여 사용합니다." +"CollisionPolygon2D는 CollisionObject2Dì— ì¶©ëŒ ëª¨ì–‘ì„ ì§€ì •í•˜ê¸° 위해서만 사용ë˜" +"ìš”. Shape를 ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " +"ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요." #: scene/2d/collision_polygon_2d.cpp msgid "An empty CollisionPolygon2D has no effect on collision." -msgstr "빈 CollisionPolygon2D는 ì¶©ëŒì— ì˜í–¥ì„ 주지 않습니다." +msgstr "빈 CollisionPolygon2D는 ì¶©ëŒì— ì˜í–¥ì„ 주지 않아요." #: scene/2d/collision_shape_2d.cpp msgid "" @@ -11295,63 +11579,64 @@ msgid "" "CollisionObject2D derived node. Please only use it as a child of Area2D, " "StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D는 CollisionObject2Dì— ì¶©ëŒ Shapeì„ ì§€ì •í•˜ê¸° 위해서만 사용ë©" -"니다. Area2D, StaticBody2D, RigidBody2D, KinematicBody2D ë“±ì˜ ìžì‹ 노드로 ì¶”" -"가하여 사용합니다." +"CollisionShape2D는 CollisionObject2Dì— ì¶©ëŒ ëª¨ì–‘ì„ ì§€ì •í•˜ê¸° 위해서만 사용ë˜" +"ìš”. Shape를 ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D " +"ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요." #: scene/2d/collision_shape_2d.cpp msgid "" "A shape must be provided for CollisionShape2D to function. Please create a " "shape resource for it!" msgstr "" -"CollisionShape2Dê°€ ê¸°ëŠ¥ì„ í•˜ê¸° 위해서는 반드시 Shapeì´ ì œê³µë˜ì–´ì•¼ 합니다. " -"Shape 리소스를 만드세요!" +"CollisionShape2Dê°€ ìž‘ë™í•˜ë ¤ë©´ 반드시 Shapeê°€ 있어야 í•´ìš”. Shape 리소스를 만들" +"어주세요!" #: scene/2d/cpu_particles_2d.cpp msgid "" "CPUParticles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" -"CPUParticles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " -"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." +"CPUParticles2D ì• ë‹ˆë©”ì´ì…˜ì—는 \"Particles Animation\"ì´ ì¼œì§„ " +"CanvasItemMaterialì„ ì‚¬ìš©í•´ì•¼ í•´ìš”." #: scene/2d/light_2d.cpp msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "ì¡°ëª…ì˜ ëª¨ì–‘ì„ ë‚˜íƒ€ë‚¼ í…스ì³ë¥¼ \"Texture\" ì†ì„±ì— ì§€ì •í•´ì•¼ 합니다." +msgstr "ì¡°ëª…ì˜ ëª¨ì–‘ì„ ë‚˜íƒ€ë‚¼ í…스처를 \"Texture\" ì†ì„±ì— ì§€ì •í•´ì•¼ í•´ìš”." #: scene/2d/light_occluder_2d.cpp msgid "" "An occluder polygon must be set (or drawn) for this occluder to take effect." msgstr "" -"Occluderê°€ ë™ìž‘하기 위해서는 Occluder í´ë¦¬ê³¤ì„ ì§€ì •í•˜ê±°ë‚˜ ê·¸ë ¤ì•¼ 합니다." +"ì´ Occluderê°€ ì˜í–¥ì„ 주게 í•˜ë ¤ë©´ Occluder í´ë¦¬ê³¤ì„ ì„¤ì •í•´ì•¼ (í˜¹ì€ ê·¸ë ¤ì•¼)í•´" +"ìš”." #: scene/2d/light_occluder_2d.cpp msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "Occluder í´ë¦¬ê³¤ì´ 비어있습니다. í´ë¦¬ê³¤ì„ 그리세요." +msgstr "Occluder í´ë¦¬ê³¤ì´ 비어있어요. í´ë¦¬ê³¤ì„ ê·¸ë ¤ì£¼ì„¸ìš”." #: scene/2d/navigation_polygon.cpp msgid "" "A NavigationPolygon resource must be set or created for this node to work. " "Please set a property or draw a polygon." msgstr "" -"ì´ ë…¸ë“œê°€ ë™ìž‘하기 위해서는 NavigationPolygon 리소스를 ì§€ì • ë˜ëŠ” ìƒì„±í•´ì•¼ í•©" -"니다. ì†ì„±ì„ ì§€ì •í•˜ê±°ë‚˜, í´ë¦¬ê³¤ì„ 그리세요." +"ì´ ë…¸ë“œê°€ ìž‘ë™í•˜ë ¤ë©´ NavigationPolygon 리소스를 ì„¤ì •í•˜ê±°ë‚˜ 만들어야 í•´ìš”. ì†" +"ì„±ì„ ì„¤ì •í•˜ê±°ë‚˜ í´ë¦¬ê³¤ì„ ê·¸ë ¤ì£¼ì„¸ìš”." #: scene/2d/navigation_polygon.cpp msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." msgstr "" -"NavigationPolygonInstanceì€ Navigation2D ë…¸ë“œì˜ í•˜ìœ„ì— ìžˆì–´ì•¼ 합니다. ì´ê²ƒì€ " -"내비게ì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•©ë‹ˆë‹¤." +"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ ë˜ëŠ” ê·¸ ì•„ëž˜ì— ìžˆì–´ì•¼ í•´" +"ìš”. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•´ìš”." #: scene/2d/parallax_layer.cpp msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì‹ë…¸ë“œë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." +"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•´ìš”." #: scene/2d/particles_2d.cpp msgid "" @@ -11359,29 +11644,28 @@ msgid "" "Use the CPUParticles2D node instead. You can use the \"Convert to " "CPUParticles\" option for this purpose." msgstr "" -"GPU 기반 파티í´ì€ GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않습니다.\n" -"CPUParticles2D 노드를 사용하세요. ì´ ê²½ìš° \"CPU파티í´ë¡œ 변환\" ì˜µì…˜ì„ ì‚¬ìš©í• " -"수 있습니다." +"GPU 기반 파티í´ì€ GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않아요.\n" +"ëŒ€ì‹ CPUParticles2D 노드를 사용하세요. ì´ ê²½ìš° \"CPU파티í´ë¡œ 변환\" ì˜µì…˜ì„ ì‚¬" +"ìš©í• ìˆ˜ 있어요." #: scene/2d/particles_2d.cpp scene/3d/particles.cpp msgid "" "A material to process the particles is not assigned, so no behavior is " "imprinted." msgstr "" -"파티í´ì„ ì²˜ë¦¬í• ë©”í…Œë¦¬ì–¼ì´ í• ë‹¹ë˜ì§€ 않았기ì—, 아무런 í–‰ë™ë„ ì¸ì‡„ë˜ì§€ 않았습니" -"다." +"파티í´ì„ ì²˜ë¦¬í• ë¨¸í‹°ë¦¬ì–¼ì„ ì§€ì •í•˜ì§€ 않아서, 아무런 ë™ìž‘ë„ ì°ížˆì§€ 않았어요." #: scene/2d/particles_2d.cpp msgid "" "Particles2D animation requires the usage of a CanvasItemMaterial with " "\"Particles Animation\" enabled." msgstr "" -"Particles2D ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ \"Particles Animation\"ì´ í™œì„±í™”ëœ " -"CanvasItemMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." +"Particles2D ì• ë‹ˆë©”ì´ì…˜ì€ \"Particles Animation\"ì´ ì¼œì ¸ 있는 " +"CanvasItemMaterialì„ ì‚¬ìš©í•´ì•¼ í•´ìš”." #: scene/2d/path_2d.cpp msgid "PathFollow2D only works when set as a child of a Path2D node." -msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ë…¸ë“œë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." +msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•´ìš”." #: scene/2d/physics_body_2d.cpp msgid "" @@ -11390,27 +11674,27 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "(ìºë¦í„°ë‚˜ 리지드 모드ì—서) RigidBody2Dì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™" -"안 í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n" +"안 í° ë¶€ë‹´ì´ ë˜ìš”.\n" "ëŒ€ì‹ ìžì‹ ì¶©ëŒ í˜•íƒœì˜ í¬ê¸°ë¥¼ 변경해보세요." #: scene/2d/remote_transform_2d.cpp msgid "Path property must point to a valid Node2D node to work." -msgstr "Path ì†ì„±ì€ 올바른 Node2D 노드를 가리켜야 합니다." +msgstr "Path ì†ì„±ì€ 올바른 Node2D 노드를 가리켜야 í•´ìš”." #: scene/2d/skeleton_2d.cpp msgid "This Bone2D chain should end at a Skeleton2D node." -msgstr "ì´ Bone2D ì²´ì¸ì€ Skeleton2D 노드ì—서 ë나야 합니다." +msgstr "ì´ Bone2D ì²´ì¸ì€ Skeleton2D 노드ì—서 ë나야 í•´ìš”." #: scene/2d/skeleton_2d.cpp msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node." -msgstr "Bone2D는 Skeleton2D나 다른 Bone2Dê°€ 부모 노드로 있어야만 ìž‘ë™í•©ë‹ˆë‹¤." +msgstr "Bone2D는 Skeleton2D나 다른 Bone2Dê°€ 부모 노드로 있어야만 ìž‘ë™í•´ìš”." #: scene/2d/skeleton_2d.cpp msgid "" "This bone lacks a proper REST pose. Go to the Skeleton2D node and set one." msgstr "" -"ì´ ë³¸ì— ì ì ˆí•œ íœ´ì‹ ìžì„¸ê°€ 없습니다. Skeleton2D 노드로 ê°€ 휴ì‹ìœ¼ë¡œ í• ìžì„¸ë¥¼ " -"ì„¤ì •í•˜ì„¸ìš”." +"ì´ ë³¸ì— ì ì ˆí•œ 대기 ìžì„¸ê°€ 없습니다. Skeleton2D 노드로 가서 대기 ìžì„¸ë¥¼ ì„¤ì •" +"하세요." #: scene/2d/tile_map.cpp msgid "" @@ -11418,46 +11702,46 @@ msgid "" "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"Use Parentê°€ 켜진 TileMapì€ í˜•íƒœë¥¼ 주기 위해 부모 CollisionObject2Dê°€ 필요합" +"Use Parentê°€ 켜진 TileMapì€ í˜•íƒœë¥¼ 주기 위한 부모 CollisionObject2Dê°€ 필요합" "니다. 형태를 주기 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 등" -"ì˜ ìžì‹ 노드로 추가하여 사용합니다." +"ì„ ìžì‹ 노드로 사용해주세요." #: scene/2d/visibility_notifier_2d.cpp msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." msgstr "" -"VisibilityEnabler2D는 편집 ì”¬ì˜ ë£¨íŠ¸ì˜ í•˜ìœ„ 노드로 ì¶”ê°€í• ë•Œ 가장 잘 ë™ìž‘합니" -"다." +"VisibilityEnabler2D는 편집한 ì”¬ì˜ ë£¨íŠ¸ì— ì§ì ‘ 부모로 ì‚¬ìš©í• ë•Œ 가장 잘 ìž‘ë™í•´" +"ìš”." #: scene/3d/arvr_nodes.cpp msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera는 반드시 ARVROrigin 노드를 부모로 ê°€ì§€ê³ ìžˆì–´ì•¼ 합니다." +msgstr "ARVRCamera는 반드시 ARVROrigin 노드를 부모로 ê°–ê³ ìžˆì–´ì•¼ í•´ìš”." #: scene/3d/arvr_nodes.cpp msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController는 반드시 ARVROrigin 노드를 부모로 ê°€ì§€ê³ ìžˆì–´ì•¼ 합니다." +msgstr "ARVRController는 반드시 ARVROrigin 노드를 부모로 ê°–ê³ ìžˆì–´ì•¼ í•´ìš”." #: scene/3d/arvr_nodes.cpp msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." msgstr "" -"컨트롤러 IDê°€ 0ì´ ë˜ë©´ 컨트롤러가 ì‹¤ì œ ì»¨íŠ¸ë¡¤ëŸ¬ì— ë°”ì¸ë”©í•˜ì§€ 않게 ë©ë‹ˆë‹¤." +"컨트롤러 IDê°€ 0ì´ ë˜ë©´ 컨트롤러가 ì‹¤ì œ ì»¨íŠ¸ë¡¤ëŸ¬ì— ë°”ì¸ë”©í•˜ì§€ 않게 ë¼ìš”." #: scene/3d/arvr_nodes.cpp msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor는 반드시 ARVROrigin 노드를 부모로 ê°€ì§€ê³ ìžˆì–´ì•¼ 합니다." +msgstr "ARVRAnchor는 반드시 ARVROrigin 노드를 부모로 ê°–ê³ ìžˆì–´ì•¼ í•´ìš”." #: scene/3d/arvr_nodes.cpp msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." -msgstr "앵커 IDê°€ 0ì´ ë˜ë©´ 앵커가 ì‹¤ì œ ì•µì»¤ì— ë°”ì¸ë”©í•˜ì§€ 않게 ë©ë‹ˆë‹¤." +msgstr "앵커 IDê°€ 0ì´ ë˜ë©´ 앵커가 ì‹¤ì œ ì•µì»¤ì— ë°”ì¸ë”©í•˜ì§€ 않게 ë¼ìš”." #: scene/3d/arvr_nodes.cpp msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROriginì€ ìžì‹ìœ¼ë¡œ ARVRCamera 노드가 필요합니다." +msgstr "ARVROriginì€ ìžì‹ìœ¼ë¡œ ARVRCamera 노드가 필요해요." #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -11473,7 +11757,7 @@ msgstr "메시 구분 중: " #: scene/3d/baked_lightmap.cpp msgid "Plotting Lights:" -msgstr "ë¼ì´íЏ 구분 중:" +msgstr "조명 구분 중:" #: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp msgid "Finishing Plot" @@ -11481,7 +11765,7 @@ msgstr "구분 ë남" #: scene/3d/baked_lightmap.cpp msgid "Lighting Meshes: " -msgstr "ë©”ì‹œì— ë¼ì´íŒ… 중: " +msgstr "ë©”ì‹œì— ì¡°ëª… 중: " #: scene/3d/collision_object.cpp msgid "" @@ -11489,10 +11773,9 @@ msgid "" "Consider adding a CollisionShape or CollisionPolygon as a child to define " "its shape." msgstr "" -"ì´ ë…¸ë“œëŠ” Shapeì„ ê°–ëŠ” ìžì‹ 노드가 없습니다, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš© " -"í• ìˆ˜ 없습니다.\n" -"CollisionShape ë˜ëŠ” CollisionPolygon를 ìžì‹ 노드로 추가하여 Shapeì„ ì •ì˜í•˜ì„¸" -"ìš”." +"ì´ ë…¸ë“œëŠ” Shapeê°€ 없어요, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ìž‘ìš©í• ìˆ˜ 없어요.\n" +"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì‹ 노드로 추가해서 Shapeì„ ì •ì˜í•´ë³´" +"세요." #: scene/3d/collision_polygon.cpp msgid "" @@ -11500,13 +11783,13 @@ msgid "" "CollisionObject derived node. Please only use it as a child of Area, " "StaticBody, RigidBody, KinematicBody, etc. to give them a shape." msgstr "" -"CollisionPolygonì€ CollisionObjectì— ì¶©ëŒ Shapeì„ ì§€ì •í•˜ê¸° 위해서만 사용ë©ë‹ˆ" -"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가하여 사용" -"합니다." +"CollisionPolygonì€ CollisionObjectì— ì¶©ëŒ Shapeì„ ì§€ì •í•˜ê¸° 위해서만 사용ë¼" +"ìš”. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용" +"해주세요." #: scene/3d/collision_polygon.cpp msgid "An empty CollisionPolygon has no effect on collision." -msgstr "빈 CollisionPolygon는 ì¶©ëŒì— ì˜í–¥ì„ 주지 않습니다." +msgstr "빈 CollisionPolygon는 ì¶©ëŒì— ì˜í–¥ì„ 주지 않아요." #: scene/3d/collision_shape.cpp msgid "" @@ -11514,29 +11797,29 @@ msgid "" "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " "KinematicBody, etc. to give them a shape." msgstr "" -"CollisionShapeì€ CollisionObjectì— ì¶©ëŒ Shapeì„ ì§€ì •í•˜ê¸° 위해서만 사용ë©ë‹ˆ" -"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가하여 사용" -"합니다." +"CollisionShapeì€ CollisionObjectì— ì¶©ëŒ Shapeì„ ì§€ì •í•˜ê¸° 위해서만 사용ë¼ìš”. " +"Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용해주" +"세요." #: scene/3d/collision_shape.cpp msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." msgstr "" -"CollisionShapeê°€ ì œ ê¸°ëŠ¥ì„ í•˜ë ¤ë©´ Shapeê°€ ì œê³µë˜ì–´ì•¼ 합니다. Shape 리소스를 " -"만드세요." +"CollisionShapeê°€ ì œ ê¸°ëŠ¥ì„ í•˜ë ¤ë©´ Shapeê°€ 있어야 í•´ìš”. Shape 리소스를 만들어" +"주세요." #: scene/3d/collision_shape.cpp msgid "" "Plane shapes don't work well and will be removed in future versions. Please " "don't use them." msgstr "" -"í‰ë©´ ëª¨ì–‘ì€ ìž˜ ìž‘ë™í•˜ì§€ 않으며 ì´í›„ ë²„ì „ì—서 ì œê±°ë ì˜ˆì •ìž…ë‹ˆë‹¤. 사용하지 ë§ì•„" -"주세요." +"í‰ë©´ Shape는 잘 ìž‘ë™í•˜ì§€ 않으며 ì´í›„ ë²„ì „ì—서 ì œê±°ë ì˜ˆì •ì´ì—ìš”. 사용하지 ë§" +"아주세요." #: scene/3d/cpu_particles.cpp msgid "Nothing is visible because no mesh has been assigned." -msgstr "ì§€ì •ëœ ë©”ì‹œê°€ 없으므로 메시를 ë³¼ 수 없습니다." +msgstr "ì§€ì •í•œ 메시가 없어서 아무 ê²ƒë„ ë³´ì´ì§€ 않아요." #: scene/3d/cpu_particles.cpp msgid "" @@ -11544,37 +11827,35 @@ msgid "" "Billboard Mode is set to \"Particle Billboard\"." msgstr "" "CPUParticles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ Billboard Modeê°€ \"Particle Billboard" -"\"로 ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." +"\"로 ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•´ìš”." #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" -msgstr "메시 구분중" +msgstr "메시 구분 중" #: scene/3d/gi_probe.cpp msgid "" "GIProbes are not supported by the GLES2 video driver.\n" "Use a BakedLightmap instead." msgstr "" -"GIProbe는 GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않습니다.\n" -"BakedLightmapì„ ì‚¬ìš©í•˜ì„¸ìš”." +"GIProbe는 GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않아요.\n" +"ëŒ€ì‹ BakedLightmapì„ ì‚¬ìš©í•˜ì„¸ìš”." #: scene/3d/light.cpp msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows." -msgstr "SpotLightì˜ ê°ë„를 90ë„ ì´ìƒìœ¼ë¡œ 잡게ë˜ë©´ 그림ìžë¥¼ 투ì˜í• 수 없습니다." +msgstr "SpotLightì˜ ê°ë„를 90ë„ ì´ìƒìœ¼ë¡œ 잡게ë˜ë©´ 그림ìžë¥¼ 투ì˜í• 수 없어요." #: scene/3d/navigation_mesh.cpp msgid "A NavigationMesh resource must be set or created for this node to work." -msgstr "" -"ì´ ë…¸ë“œê°€ ë™ìž‘하기 위해서는 NavigationMesh 리소스를 ì§€ì •í•˜ê±°ë‚˜ ìƒì„±í•´ì•¼ 합니" -"다." +msgstr "ì´ ë…¸ë“œê°€ ìž‘ë™í•˜ë ¤ë©´ NavigationMesh 리소스를 ì„¤ì •í•˜ê±°ë‚˜ 만들어야 í•´ìš”." #: scene/3d/navigation_mesh.cpp msgid "" "NavigationMeshInstance must be a child or grandchild to a Navigation node. " "It only provides navigation data." msgstr "" -"NavigationMeshInstanceì€ Navigation ë…¸ë“œì˜ í•˜ìœ„ì— ìžˆì–´ì•¼ 합니다. ì´ê²ƒì€ 내비" -"게ì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•©ë‹ˆë‹¤." +"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ê·¸ ì•„ëž˜ì— ìžˆì–´ì•¼ í•´ìš”. ì´" +"ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œì„ ì œê³µí•´ìš”." #: scene/3d/particles.cpp msgid "" @@ -11582,14 +11863,14 @@ msgid "" "Use the CPUParticles node instead. You can use the \"Convert to CPUParticles" "\" option for this purpose." msgstr "" -"GPU 기반 파티í´ì€ GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않습니다.\n" -"CPUParticles 노드를 사용하세요. ì´ ê²½ìš° \"CPU파티í´ë¡œ 변환\" ì˜µì…˜ì„ ì‚¬ìš©í• " -"수 있습니다." +"GPU 기반 파티í´ì€ GLES2 비디오 드ë¼ì´ë²„ì—서 ì§€ì›í•˜ì§€ 않아요.\n" +"ëŒ€ì‹ CPUParticles 노드를 사용하세요. ì´ ê²½ìš° \"CPU파티í´ë¡œ 변환\" ì„¤ì •ì„ ì‚¬ìš©" +"í• ìˆ˜ 있어요." #: scene/3d/particles.cpp msgid "" "Nothing is visible because meshes have not been assigned to draw passes." -msgstr "ë©”ì‹œë“¤ì„ íŒ¨ìŠ¤ë¥¼ 그리ë„ë¡ í• ë‹¹í•˜ì§€ 않았으므로 ë³´ì´ì§€ 않습니다." +msgstr "ë©”ì‹œë“¤ì„ íŒ¨ìŠ¤ë¥¼ 그리ë„ë¡ ì§€ì •í•˜ì§€ 않아서, 아무 ê²ƒë„ ë³´ì´ì§€ 않아요." #: scene/3d/particles.cpp msgid "" @@ -11597,11 +11878,11 @@ msgid "" "Mode is set to \"Particle Billboard\"." msgstr "" "Particles ì• ë‹ˆë©”ì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ Billboard Modeê°€ \"Particle Billboard\"로 " -"ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•©ë‹ˆë‹¤." +"ì„¤ì •ëœ SpatialMaterialì´ í•„ìš”í•´ìš”." #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." -msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ë™ìž‘합니다." +msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•´ìš”." #: scene/3d/path.cpp msgid "" @@ -11609,7 +11890,7 @@ msgid "" "parent Path's Curve resource." msgstr "" "PathFollowì˜ ROTATION_ORIENTED는 부모 Pathì˜ Curve 리소스ì—서 \"Up Vector" -"\"ê°€ 활성화ë˜ì–´ 있어야 합니다." +"\"ê°€ ì¼œì ¸ 있어야 í•´ìš”." #: scene/3d/physics_body.cpp msgid "" @@ -11618,7 +11899,7 @@ msgid "" "Change the size in children collision shapes instead." msgstr "" "(ìºë¦í„°ë‚˜ 리지드 모드ì—서) RigidBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™ì•ˆ " -"í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n" +"í° ë¶€ë‹´ì´ ë¼ìš”.\n" "ëŒ€ì‹ ìžì‹ ì¶©ëŒ í˜•íƒœì˜ í¬ê¸°ë¥¼ 변경해보세요." #: scene/3d/remote_transform.cpp @@ -11626,12 +11907,12 @@ msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." msgstr "" -"\"Remote Path\" ì†ì„±ì€ 올바른 Spatial 노드, ë˜ëŠ” Spatial íŒŒìƒ ë…¸ë“œë¥¼ 가리켜" -"야 합니다." +"\"Remote Path\" ì†ì„±ì€ 올바른 Spatial 노드, ë˜ëŠ” Spatialì—서 파ìƒëœ 노드를 ê°€" +"리켜야 í•´ìš”." #: scene/3d/soft_body.cpp msgid "This body will be ignored until you set a mesh." -msgstr "ì´ ë°”ë””ëŠ” 메시를 ì„¤ì •í• ë•Œê¹Œì§€ 무시ë©ë‹ˆë‹¤." +msgstr "ì´ ë°”ë””ëŠ” 메시를 ì„¤ì •í• ë•Œê¹Œì§€ 무시ë¼ìš”." #: scene/3d/soft_body.cpp msgid "" @@ -11639,8 +11920,8 @@ msgid "" "running.\n" "Change the size in children collision shapes instead." msgstr "" -"SoftBodyì˜ í¬ê¸° ë³€ê²½ì€ ì‹¤í–‰ ì¤‘ì— ë¬¼ë¦¬ ì—”ì§„ì— ì˜í•´ 무시ë©ë‹ˆë‹¤.\n" -"ëŒ€ì‹ ìžì‹ì˜ ì¶©ëŒ í¬ê¸°ë¥¼ 변경하세요." +"실행 ì¤‘ì— SoftBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì— ì˜í•´ 다시 ì •ì˜ë¼ìš”.\n" +"ëŒ€ì‹ ìžì‹ì˜ ì¶©ëŒ ëª¨ì–‘ í¬ê¸°ë¥¼ 변경하세요." #: scene/3d/sprite_3d.cpp msgid "" @@ -11648,14 +11929,14 @@ msgid "" "order for AnimatedSprite3D to display frames." msgstr "" "AnimatedSprite3Dê°€ í”„ë ˆìž„ì„ ë³´ì—¬ì£¼ê¸° 위해서는 \"Frames\" ì†ì„±ì— SpriteFrames " -"리소스 만들거나 ì§€ì •í•´ì•¼ 합니다." +"리소스를 만들거나 ì„¤ì •í•´ì•¼ í•´ìš”." #: scene/3d/vehicle_body.cpp msgid "" "VehicleWheel serves to provide a wheel system to a VehicleBody. Please use " "it as a child of a VehicleBody." msgstr "" -"VehicleWheelì€ VehicleBody로 íœ ì‹œìŠ¤í…œì„ ì œê³µí•˜ëŠ” ê¸°ëŠ¥ì„ í•©ë‹ˆë‹¤. VehicleBody" +"VehicleWheelì€ VehicleBody로 바퀴 ì‹œìŠ¤í…œì„ ì œê³µí•˜ëŠ” ì—í• ì´ì—ìš”. VehicleBody" "ì˜ ìžì‹ìœ¼ë¡œ 사용해주세요." #: scene/3d/world_environment.cpp @@ -11663,21 +11944,22 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" -"WorldEnvironment는 ì‹œê° íš¨ê³¼ë¥¼ 위해 Environment를 갖는 \"Environment\" ì†ì„±" -"ì´ í•„ìš”í•©ë‹ˆë‹¤." +"WorldEnvironmentê°€ ì‹œê° íš¨ê³¼ë¥¼ ê°–ë„ë¡ Environment를 ê°–ê³ ìžˆëŠ” \"Environment" +"\" ì†ì„±ì´ 필요해요." #: scene/3d/world_environment.cpp msgid "" "Only one WorldEnvironment is allowed per scene (or set of instanced scenes)." -msgstr "씬마다 WorldEnvironmentê°€ 단 하나만 허용ë©ë‹ˆë‹¤." +msgstr "" +"씬마다 (í˜¹ì€ ì¸ìŠ¤í„´ìŠ¤ëœ ì”¬ 묶ìŒë§ˆë‹¤) WorldEnvironment는 하나만 허용ë˜ìš”." #: scene/3d/world_environment.cpp msgid "" "This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set " "this environment's Background Mode to Canvas (for 2D scenes)." msgstr "" -"ì´ WorldEnvironment는 무시ë©ë‹ˆë‹¤. (3D ì”¬ì„ ìœ„í•´) Camera를 추가하거나 아니면 " -"(2D ì”¬ì„ ìœ„í•´) ì´ í™˜ê²½ì˜ ë°°ê²½ 모드를 Canvas로 ì„¤ì •í•˜ì„¸ìš”." +"ì´ WorldEnvironment는 무시ë¼ìš”. (3D ì”¬ì„ ìœ„í•´) Camera를 추가하거나 아니면 " +"(2D ì”¬ì„ ìœ„í•´) ì´ í™˜ê²½ì˜ Background Mode를 Canvas로 ì„¤ì •í•˜ì„¸ìš”." #: scene/animation/animation_blend_tree.cpp msgid "On BlendTree node '%s', animation not found: '%s'" @@ -11689,11 +11971,11 @@ msgstr "ì• ë‹ˆë©”ì´ì…˜ì„ ì°¾ì„ ìˆ˜ ì—†ìŒ: '%s'" #: scene/animation/animation_tree.cpp msgid "In node '%s', invalid animation: '%s'." -msgstr "노드 '%s'ì—서, 올바르지 ì•Šì€ ì• ë‹ˆë©”ì´ì…˜: '%s'." +msgstr "노드 '%s'ì—서, ìž˜ëª»ëœ ì• ë‹ˆë©”ì´ì…˜: '%s'." #: scene/animation/animation_tree.cpp msgid "Invalid animation: '%s'." -msgstr "올바르지 ì•Šì€ ì• ë‹ˆë©”ì´ì…˜: '%s'." +msgstr "ìž˜ëª»ëœ ì• ë‹ˆë©”ì´ì…˜: '%s'." #: scene/animation/animation_tree.cpp msgid "Nothing connected to input '%s' of node '%s'." @@ -11701,27 +11983,25 @@ msgstr "노드 '%s'ì˜ '%s' ìž…ë ¥ì— ì•„ë¬´ê²ƒë„ ì—°ê²°ë˜ì§€ 않ìŒ." #: scene/animation/animation_tree.cpp msgid "No root AnimationNode for the graph is set." -msgstr "그래프를 위한 루트 AnimationNodeê°€ ì„¤ì •ë˜ì§€ 않았습니다." +msgstr "그래프를 위한 루트 AnimationNode를 ì„¤ì •í•˜ì§€ 않았어요." #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." msgstr "" -"ì• ë‹ˆë©”ì´ì…˜ì„ ê°–ê³ ìžˆëŠ” AnimationPlayer ë…¸ë“œì˜ ê²½ë¡œê°€ ì„¤ì •ë˜ì§€ 않았습니다." +"ì• ë‹ˆë©”ì´ì…˜ì„ ê°–ê³ ìžˆëŠ” AnimationPlayer ë…¸ë“œì˜ ê²½ë¡œë¥¼ ì„¤ì •í•˜ì§€ 않았어요." #: scene/animation/animation_tree.cpp msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "" -"AnimationPlayerì— ëŒ€í•œ 경로 ì„¤ì •ì´ AnimationPlayer 노드를 í–¥í•˜ê³ ìžˆì§€ 않습니" -"다." +"AnimationPlayerì— ëŒ€í•œ 경로 ì„¤ì •ì´ AnimationPlayer 노드를 í–¥í•˜ê³ ìžˆì§€ 않아요." #: scene/animation/animation_tree.cpp msgid "The AnimationPlayer root node is not a valid node." -msgstr "AnimationPlayer 루트 노드가 올바른 노드가 아닙니다." +msgstr "AnimationPlayer 루트 노드가 올바른 노드가 아니ì—ìš”." #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." -msgstr "" -"ì´ ë…¸ë“œëŠ” ë” ì´ìƒ ì‚¬ìš©í• ìˆ˜ 없습니다. AnimationTree를 사용하시길 ë°”ëžë‹ˆë‹¤." +msgstr "ì´ ë…¸ë“œëŠ” ë” ì´ìƒ ì‚¬ìš©í• ìˆ˜ 없어요. ëŒ€ì‹ AnimationTree를 사용하세요." #: scene/gui/color_picker.cpp msgid "Pick a color from the screen." @@ -11737,11 +12017,11 @@ msgstr "Raw" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." -msgstr "16 진수나 코드 값으로 ì „í™˜í•©ë‹ˆë‹¤." +msgstr "16진수나 코드 값으로 ì „í™˜í•´ìš”." #: scene/gui/color_picker.cpp msgid "Add current color as a preset." -msgstr "현재 색ìƒì„ 프리셋으로 추가합니다." +msgstr "현재 색ìƒì„ 프리셋으로 추가해요." #: scene/gui/container.cpp msgid "" @@ -11749,7 +12029,7 @@ msgid "" "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"Container ìžì²´ëŠ” ìžì‹ 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ ì—†ìŠµë‹ˆë‹¤.\n" +"Container ìžì²´ëŠ” ìžì‹ 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ ì—†ì–´ìš”.\n" "스í¬ë¦½íŠ¸ë¥¼ 추가하지 않는 경우, 순수한 Control 노드를 사용해주세요." #: scene/gui/control.cpp @@ -11757,9 +12037,8 @@ msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" -"Hint Tooltipì€ Controlì˜ Mouse Filterê°€ \"ignore\"로 ì„¤ì •ë˜ì–´ 있기 ë•Œë¬¸ì— ë³´" -"여지지 않습니다. í•´ê²°í•˜ë ¤ë©´, Mouse Filter를 \"Stop\"ì´ë‚˜ \"Pass\"로 ì„¤ì •í•˜ì„¸" -"ìš”." +"Hint Tooltipì€ Controlì˜ Mouse Filterê°€ \"Ignore\"으로 ì„¤ì •ë˜ì–´ 있기 ë•Œë¬¸ì— " +"ë³´ì´ì§€ 않아요. í•´ê²°í•˜ë ¤ë©´, Mouse Filter를 \"Stop\"ì´ë‚˜ \"Pass\"로 ì„¤ì •í•˜ì„¸ìš”." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -11775,12 +12054,12 @@ msgid "" "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Popupì€ popup() ë˜ëŠ” 기타 popup*() 함수로 호출ë˜ê¸° ì „ê¹Œì§€ 기본ì 으로 숨어있습" -"니다. 편집하는 ë™ì•ˆ ë³´ì´ë„ë¡ í• ìˆ˜ëŠ” 있으나, 실행 시ì—는 ë³´ì´ì§€ 않습니다." +"Popupì€ popup() ë˜ëŠ” 기타 popup*() 함수로 호출하기 ì „ê¹Œì§€ 기본ì 으로 숨어있어" +"ìš”. 편집하는 ë™ì•ˆ ë³´ì´ë„ë¡ í• ìˆ˜ëŠ” 있으나, 실행 시ì—는 ë³´ì´ì§€ 않아요." #: scene/gui/range.cpp msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "\"Exp Edit\"ì´ í™œì„±í™”ë˜ë©´, \"Min Value\"는 반드시 0보다 커야 합니다." +msgstr "\"Exp Edit\"ì„ ì¼œë©´, \"Min Value\"는 반드시 0보다 커야 í•´ìš”." #: scene/gui/scroll_container.cpp msgid "" @@ -11788,9 +12067,9 @@ msgid "" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer는 ë‹¨ì¼ ìžì‹ Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n" -"컨테ì´ë„ˆë¥¼ ìžì‹ìœ¼ë¡œ 사용하거나 (VBox, HBox 등), Controlì„ ì‚¬ìš©í•´ ì†ìˆ˜ 최소 수" -"치를 ì„¤ì •í•˜ì„¸ìš”." +"ScrollContainer는 ë‹¨ì¼ ìžì‹ Controlì„ ìž‘ì—…í•˜ê¸° 위한 것ì´ì—ìš”.\n" +"컨테ì´ë„ˆë¥¼ ìžì‹ìœ¼ë¡œ 사용하거나 (VBox, HBox 등), Controlì„ ì‚¬ìš©í•˜ê³ ë§žì¶¤ 최소 " +"수치를 수ë™ìœ¼ë¡œ ì„¤ì •í•˜ì„¸ì˜¤." #: scene/gui/tree.cpp msgid "(Other)" @@ -11801,8 +12080,8 @@ msgid "" "Default Environment as specified in Project Settings (Rendering -> " "Environment -> Default Environment) could not be loaded." msgstr "" -"프로ì 트 ì„¤ì • (Rendering -> Environment -> Default Environment)ì— ì§€ì •ëœ ê¸°" -"본 í™˜ê²½ì€ ë¶ˆëŸ¬ì˜¬ 수 없습니다." +"프로ì 트 ì„¤ì • (Rendering -> Environment -> Default Environment)ì— ì§€ì •í•œ 기" +"본 í™˜ê²½ì€ ë¶ˆëŸ¬ì˜¬ 수 없어요." #: scene/main/viewport.cpp msgid "" @@ -11811,26 +12090,22 @@ msgid "" "obtain a size. Otherwise, make it a RenderTarget and assign its internal " "texture to some node for display." msgstr "" -"ë·°í¬íŠ¸ê°€ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •ë˜ì§€ 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ ìƒì— ì§ì ‘ 표" -"ì‹œí•˜ê³ ìž í• ê²½ìš°, í¬ê¸°ë¥¼ 얻기 위해서 Controlì˜ ìžì‹ 노드로 만들어야 합니다. " -"ê·¸ë ‡ì§€ ì•Šì„ ê²½ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 RenderTarget으로 ì„¤ì •í•˜ê³ ë‚´ë¶€ì " -"ì¸ í…스ì³ë¥¼ 다른 ë…¸ë“œì— í• ë‹¹í•´ì•¼ 합니다." - -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "ìž…ë ¥" +"ë·°í¬íŠ¸ë¥¼ ë Œë” ëŒ€ìƒìœ¼ë¡œ ì„¤ì •í•˜ì§€ 않았어요. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ì— ì§ì ‘ 표시하" +"ë ¤ë©´, í¬ê¸°ë¥¼ 얻기 위해서 Controlì˜ ìžì‹ 노드로 만들어야 í•´ìš”. ê·¸ë ‡ì§€ ì•Šì„ ê²½" +"ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 RenderTarget으로 ì„¤ì •í•˜ê³ ë‚´ë¶€ì ì¸ í…스처를 다" +"른 ë…¸ë“œì— ì§€ì •í•´ì•¼ í•´ìš”." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." -msgstr "ë¯¸ë¦¬ë³´ê¸°ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì†ŒìŠ¤." +msgstr "미리 ë³´ê¸°ì— ìž˜ëª»ëœ ì†ŒìŠ¤." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for shader." -msgstr "ì…°ì´ë”ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ì†ŒìŠ¤." +msgstr "ì…°ì´ë”ì— ìž˜ëª»ëœ ì†ŒìŠ¤." #: scene/resources/visual_shader_nodes.cpp msgid "Invalid comparison function for that type." -msgstr "해당 íƒ€ìž…ì— ì˜¬ë°”ë¥´ì§€ ì•Šì€ ë¹„êµ í•¨ìˆ˜." +msgstr "해당 ìœ í˜•ì— ìž˜ëª»ëœ ë¹„êµ í•¨ìˆ˜." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -11838,15 +12113,73 @@ msgstr "í•¨ìˆ˜ì— ë°°ì¹˜í•¨." #: servers/visual/shader_language.cpp msgid "Assignment to uniform." -msgstr "ê· ì¼í•˜ê²Œ 배치함." +msgstr "ìœ ë‹ˆí¼ì— 배치함." #: servers/visual/shader_language.cpp msgid "Varyings can only be assigned in vertex function." -msgstr "Varyings는 ì˜¤ì§ ë²„í…스 함수ì—서만 ì§€ì •í• ìˆ˜ 있습니다." +msgstr "Varyings는 ì˜¤ì§ ê¼ì§“ì 함수ì—서만 ì§€ì •í• ìˆ˜ 있어요." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." +msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없어요." + +#~ msgid "Snap to Grid" +#~ msgstr "격ìžì— 스냅" + +#~ msgid "Add input +" +#~ msgstr "ìž…ë ¥ 추가하기 +" + +#~ msgid "Language" +#~ msgstr "언어" + +#~ msgid "Inherits" +#~ msgstr "ìƒì†" + +#~ msgid "Base Type:" +#~ msgstr "기본 ìœ í˜•:" + +#~ msgid "Available Nodes:" +#~ msgstr "사용 가능한 노드:" + +#~ msgid "Input" +#~ msgstr "ìž…ë ¥" + +#~ msgid "Properties:" +#~ msgstr "ì†ì„±:" + +#~ msgid "Methods:" +#~ msgstr "메서드:" + +#~ msgid "Theme Properties:" +#~ msgstr "테마 ì†ì„±:" + +#~ msgid "Enumerations:" +#~ msgstr "ì—´ê±°:" + +#~ msgid "Constants:" +#~ msgstr "ìƒìˆ˜:" + +#~ msgid "Class Description:" +#~ msgstr "í´ëž˜ìФ 설명:" + +#~ msgid "Property Descriptions:" +#~ msgstr "ì†ì„± 설명:" + +#~ msgid "Method Descriptions:" +#~ msgstr "메서드 설명:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "맞춤 빌드 ìš© 안드로ì´ë“œ 프로ì 트를 ì„¤ì¹˜í• ê²Œìš”.\n" +#~ "ì´ê²ƒì„ ì‚¬ìš©í•˜ë ¤ë©´ 내보내기 프리셋마다 ì´ ì„¤ì •ì„ ì¼œì¤˜ì•¼ í•´ìš”." + +#~ msgid "Reverse sorting." +#~ msgstr "ì—순 ì •ë ¬." + +#~ msgid "Delete Node(s)?" +#~ msgstr "노드를 ì‚ì œí• ê¹Œìš”?" #~ msgid "No Matches" #~ msgstr "ì¼ì¹˜ ê²°ê³¼ ì—†ìŒ" @@ -12196,9 +12529,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Go to parent folder" #~ msgstr "부모 í´ë”로 ì´ë™" -#~ msgid "Select device from the list" -#~ msgstr "목ë¡ì—서 기기를 ì„ íƒí•˜ì„¸ìš”" - #~ msgid "Open Scene(s)" #~ msgstr "씬(들) 열기" @@ -12259,9 +12589,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "ì„ íƒëœ ì”¬ì„ ì„ íƒëœ ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ì¸ìŠ¤í„´ìŠ¤ 합니다." -#~ msgid "Warnings:" -#~ msgstr "ê²½ê³ :" - #~ msgid "Font Size:" #~ msgstr "í°íЏ í¬ê¸°:" @@ -12304,9 +12631,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Select a split to erase it." #~ msgstr "지우기 위한 ë¶„í• ìœ„ì¹˜ë¥¼ ì„ íƒí•˜ê¸°." -#~ msgid "No name provided" -#~ msgstr "ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않ìŒ" - #~ msgid "Add Node.." #~ msgstr "노드 추가.." @@ -12440,12 +12764,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Warning" #~ msgstr "ê²½ê³ " -#~ msgid "Error:" -#~ msgstr "ì—러:" - -#~ msgid "Function:" -#~ msgstr "함수:" - #~ msgid "Variable" #~ msgstr "변수" @@ -12512,9 +12830,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Connect Graph Nodes" #~ msgstr "그래프 노드 ì—°ê²°" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "그래프 노드 ì—°ê²° í•´ì œ" - #~ msgid "Remove Shader Graph Node" #~ msgstr "ì…°ì´ë” 그래프 노드 ì‚ì œ" @@ -12524,9 +12839,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "그래프 노드 ë³µì œ" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "ì…°ì´ë” 그래프 노드 ì‚ì œ" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "ì—러: 순환 ì—°ê²° ë§í¬" @@ -12953,9 +13265,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Pick New Name and Location For:" #~ msgstr "새로운 ì´ë¦„ê³¼ 위치를 ê³ ë¥´ì„¸ìš”:" -#~ msgid "No files selected!" -#~ msgstr "파ì¼ì´ ì„ íƒë˜ì§€ 않았습니다!" - #~ msgid "Info" #~ msgstr "ì •ë³´" @@ -13352,12 +13661,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Scaling to %s%%." #~ msgstr "%s%%로 í¬ê¸° 변경." -#~ msgid "Up" -#~ msgstr "위" - -#~ msgid "Down" -#~ msgstr "아래" - #~ msgid "Bucket" #~ msgstr "채우기" @@ -13614,9 +13917,6 @@ msgstr "ìƒìˆ˜ëŠ” ìˆ˜ì •í• ìˆ˜ 없습니다." #~ msgid "Group" #~ msgstr "그룹" -#~ msgid "Samples" -#~ msgstr "샘플" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "샘플 변환 모드: (.wav 파ì¼):" diff --git a/editor/translations/lt.po b/editor/translations/lt.po index 79d42d1231..3d9a7bdd68 100644 --- a/editor/translations/lt.po +++ b/editor/translations/lt.po @@ -59,6 +59,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Nemokama" @@ -344,6 +372,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Sukurti" @@ -473,15 +502,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Pasirinkite Nodus, kuriuos norite importuoti" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Norint redaguoti animacijas pasirinkite AnimationPlayer NodÄ… iÅ¡ Scenos." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -617,7 +642,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -629,6 +654,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Pasirinkite Nodus, kuriuos norite importuoti" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -813,7 +843,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -920,7 +951,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -957,7 +989,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1220,7 +1252,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1412,7 +1444,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1466,7 +1500,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1641,6 +1675,7 @@ msgstr "(Esama)" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1717,6 +1752,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1866,6 +1902,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1874,46 +1911,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1922,21 +1940,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "ApraÅ¡ymas:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1952,11 +1961,6 @@ msgid "Property Descriptions" msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "ApraÅ¡ymas:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1968,11 +1972,6 @@ msgid "Method Descriptions" msgstr "ApraÅ¡ymas:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "ApraÅ¡ymas:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2042,8 +2041,8 @@ msgstr "" msgid "Copy Selection" msgstr "Panaikinti pasirinkimÄ…" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2056,6 +2055,50 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "PradÄ—ti!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Atsiųsti" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2601,6 +2644,19 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versija:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2802,10 +2858,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2856,14 +2908,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2881,15 +2929,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2952,6 +3006,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "Atidaryti praeitÄ… Editorių" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2962,6 +3020,11 @@ msgstr "MiniatÅ«ra..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Atidaryti Skriptų Editorių" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Priedai" @@ -2991,12 +3054,6 @@ msgstr "Statusas:" msgid "Edit:" msgstr "Redaguoti" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "PradÄ—ti!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3096,6 +3153,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Atidaryti Skriptų Editorių" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3122,14 +3184,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Atidaryti 2D Editorių" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3801,9 +3855,10 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Atstatyti PriartinimÄ…" #: editor/import_dock.cpp msgid "Reimport" @@ -3930,7 +3985,7 @@ msgstr "Priedai" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4070,6 +4125,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Atidaryti 2D Editorių" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4244,6 +4306,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4422,7 +4485,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4600,6 +4662,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4809,6 +4873,10 @@ msgid "All" msgstr "Visi" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importuoti Animacijas..." @@ -4823,10 +4891,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategorija:" @@ -5100,20 +5164,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "TimeScale Nodas" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5203,8 +5275,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5468,6 +5539,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6107,6 +6182,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6163,7 +6242,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6269,6 +6349,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtrai..." @@ -6375,11 +6460,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6460,7 +6545,7 @@ msgstr "" msgid "Connections to method:" msgstr "Prijunkite prie Nodo:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6544,6 +6629,11 @@ msgstr "Sukurti" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6602,10 +6692,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtrai..." @@ -6927,6 +7013,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6960,6 +7050,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7192,6 +7286,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7242,6 +7340,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Mix Nodas" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animacija" @@ -7566,6 +7669,15 @@ msgid "Enable Priority" msgstr "Redaguoti Filtrus" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrai..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7706,6 +7818,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Panaikinti pasirinkimÄ…" @@ -7875,20 +7992,115 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "BendruomenÄ—" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Sukurti NaujÄ…" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Naujas pavadinimas:" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "IÅ¡trinti EfektÄ…" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Panaikinti pasirinkimÄ…" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Add Output" +msgstr "MÄ—gstamiausi:" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Scalar" msgstr "SkalÄ—:" @@ -7901,6 +8113,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "MÄ—gstamiausi:" @@ -8120,6 +8336,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8769,12 +8990,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9324,6 +9547,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9461,6 +9688,10 @@ msgid "Plugins" msgstr "Priedai" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9628,10 +9859,6 @@ msgstr "" msgid "Reset" msgstr "Atstatyti PriartinimÄ…" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9687,6 +9914,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9727,10 +9958,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "IÅ¡trinti EfektÄ…" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "IÅ¡trinti EfektÄ…" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9749,11 +9994,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9829,6 +10072,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9846,11 +10097,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Atidaryti Skriptų Editorių" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Sukurti NaujÄ…" @@ -10086,58 +10332,83 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Priedai" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Atidaryti Skriptų Editorių" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Ä®vyko klaida kraunant Å¡riftÄ…." + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Errors" +msgid "Source:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "C++ Source:" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Child process connected." +msgstr "Atsijungti" + +#: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Sukurti" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10154,6 +10425,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Importuoti iÅ¡ Nodo:" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10166,6 +10442,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10362,10 +10642,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10374,6 +10650,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10528,6 +10808,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filtrai..." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10665,6 +10954,10 @@ msgid "Create a new variable." msgstr "Sukurti NaujÄ…" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Keisti Poligono SkalÄ™" @@ -10694,6 +10987,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Panaikinti pasirinkimÄ…" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10702,6 +11000,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "MÄ—gstamiausi:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "MÄ—gstamiausi:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Panaikinti pasirinkimÄ…" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Panaikinti pasirinkimÄ…" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10742,10 +11060,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10771,6 +11099,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Atsijungti" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Prijunkite prie Nodo:" @@ -10804,6 +11137,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Sukurti NaujÄ…" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10824,7 +11178,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10832,7 +11186,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10857,6 +11211,15 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "(Esama)" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Redaguoti Filtrus" @@ -10951,6 +11314,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10972,7 +11339,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11051,6 +11419,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11598,10 +11970,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11634,6 +12002,18 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Class Description:" +#~ msgstr "ApraÅ¡ymas:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "ApraÅ¡ymas:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "ApraÅ¡ymas:" + +#, fuzzy #~ msgid "Select Mode (Q)" #~ msgstr "Pasirinkite Nodus, kuriuos norite importuoti" diff --git a/editor/translations/lv.po b/editor/translations/lv.po index fe36132eca..26a3d6d7d1 100644 --- a/editor/translations/lv.po +++ b/editor/translations/lv.po @@ -59,6 +59,34 @@ msgstr "NderÄ«gs arguments, lai izveidotu '%s'" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Bezmaksas" @@ -331,6 +359,7 @@ msgstr "Izveidot %d JAUNU celiņu un ievietot atslÄ“gievietni?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Izveidot" @@ -466,15 +495,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "DzÄ“st izvÄ“lÄ“tos" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -610,7 +633,7 @@ msgid "Scale Ratio:" msgstr "MÄ“roga AttiecÄ«ba:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -622,6 +645,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "DzÄ“st izvÄ“lÄ“tos" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -804,7 +832,8 @@ msgstr "Savieno SignÄlu:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -909,7 +938,8 @@ msgstr "MeklÄ“t:" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -946,7 +976,7 @@ msgid "Resource" msgstr "Resurs" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1222,7 +1252,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1423,7 +1453,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1477,7 +1509,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1648,6 +1680,7 @@ msgstr "Izveidot Funkciju" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1722,6 +1755,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1872,6 +1906,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1880,46 +1915,27 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Apraksts:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1928,21 +1944,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Apraksts:" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "Apraksts:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1958,11 +1965,6 @@ msgid "Property Descriptions" msgstr "Apraksts:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Apraksts:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1974,11 +1976,6 @@ msgid "Method Descriptions" msgstr "Apraksts:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Apraksts:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2047,8 +2044,8 @@ msgstr "" msgid "Copy Selection" msgstr "Noņemt IzvÄ“lÄ“to" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2061,6 +2058,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2607,6 +2646,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2807,10 +2858,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2862,14 +2909,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2887,15 +2930,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2958,6 +3007,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2967,6 +3020,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Savieno SignÄlu:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2995,11 +3053,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3098,6 +3151,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3124,13 +3181,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3797,9 +3847,10 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "AtiestatÄ«t tÄlummaiņu" #: editor/import_dock.cpp msgid "Reimport" @@ -3923,7 +3974,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4064,6 +4115,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4237,6 +4294,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4413,7 +4471,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4586,6 +4643,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4792,6 +4851,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4804,10 +4867,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5080,20 +5139,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "MÄ“roga AttiecÄ«ba:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5183,8 +5250,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5452,6 +5518,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6087,6 +6157,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6142,7 +6216,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6248,6 +6323,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6350,11 +6430,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6435,7 +6515,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Resurs" @@ -6521,6 +6601,11 @@ msgstr "Izveidot" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6579,10 +6664,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6909,6 +6990,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6942,6 +7027,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7174,6 +7263,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7223,6 +7316,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "Funkcijas:" @@ -7546,6 +7643,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7685,6 +7790,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Noņemt IzvÄ“lÄ“to" @@ -7852,19 +7962,116 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Izveidot Jaunu %s" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "NomainÄ«t" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "PÄrsaukt Audio Kopni" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "IzdzÄ“st" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "NomainÄ«t" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "MÄ“roga IzvÄ“le" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "NomainÄ«t" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "FavorÄ«ti:" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7877,6 +8084,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "FavorÄ«ti:" @@ -8096,6 +8307,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8744,12 +8960,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9293,6 +9511,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9430,6 +9652,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9595,10 +9821,6 @@ msgstr "" msgid "Reset" msgstr "AtiestatÄ«t tÄlummaiņu" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9654,6 +9876,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9694,10 +9920,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "IzdzÄ“st" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "IzdzÄ“st" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9716,11 +9956,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9796,6 +10034,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9812,10 +10058,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Izveidot Jaunu %s" @@ -10052,43 +10294,64 @@ msgid "Will load an existing script file." msgstr "IelÄdÄ“t eksistÄ“joÅ¡u Kopnes IzkÄrtojumu." #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Savieno SignÄlu:" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Kļūme lÄdÄ“jot:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "C++ Source" +msgstr "Resurs" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Resurs" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Resurs" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10096,14 +10359,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Savienot" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Izveidot" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10120,6 +10389,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10132,6 +10405,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10328,10 +10605,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10340,6 +10613,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10494,6 +10771,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10634,6 +10919,10 @@ msgid "Create a new variable." msgstr "Izveidot Jaunu %s" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Izveidot" @@ -10663,6 +10952,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Noņemt IzvÄ“lÄ“to" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10671,6 +10965,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "FavorÄ«ti:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "FavorÄ«ti:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Noņemt IzvÄ“lÄ“to" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Noņemt IzvÄ“lÄ“to" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10711,10 +11025,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10739,6 +11063,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Savienot" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10771,6 +11100,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Izveidot Jaunu %s" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10791,7 +11141,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10799,8 +11149,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkcijas:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10823,6 +11174,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funkcijas:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10917,6 +11277,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10938,7 +11302,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11017,6 +11382,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11562,10 +11931,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11597,6 +11962,18 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Apraksts:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Apraksts:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Apraksts:" + #~ msgid "Error initializing FreeType." #~ msgstr "Kļūme inicializÄ“jot FreeType." diff --git a/editor/translations/mi.po b/editor/translations/mi.po index 1bb449ea57..f78d6f5259 100644 --- a/editor/translations/mi.po +++ b/editor/translations/mi.po @@ -49,6 +49,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -313,6 +341,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -438,13 +467,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -577,7 +601,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -589,6 +613,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -765,7 +793,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -866,7 +895,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -903,7 +933,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1166,7 +1196,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1357,7 +1387,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1411,7 +1443,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1576,6 +1608,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1646,6 +1679,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1793,6 +1827,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1801,7 +1836,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1809,38 +1844,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1849,19 +1864,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1876,10 +1883,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1890,10 +1893,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1960,8 +1959,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1974,6 +1973,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2513,6 +2554,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2712,10 +2765,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2766,14 +2815,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2791,15 +2836,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2862,6 +2913,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2871,6 +2926,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2899,11 +2958,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3000,6 +3054,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3026,13 +3084,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3679,8 +3730,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3805,7 +3856,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3940,6 +3991,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4106,6 +4163,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4280,7 +4338,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4448,6 +4505,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4652,6 +4711,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4664,10 +4727,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4930,20 +4989,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5033,8 +5099,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5294,6 +5359,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5923,6 +5992,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5978,7 +6051,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6077,6 +6151,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6178,11 +6257,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6262,7 +6341,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6342,6 +6421,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6399,10 +6483,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6722,6 +6802,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6755,6 +6839,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6981,6 +7069,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7029,6 +7121,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7343,6 +7439,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7473,6 +7577,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7627,16 +7736,105 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7652,6 +7850,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7860,6 +8062,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8503,12 +8710,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9050,6 +9259,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9186,6 +9399,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9349,10 +9566,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9408,6 +9621,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9448,7 +9665,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9470,11 +9699,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9548,6 +9775,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9564,10 +9799,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9794,43 +10025,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9838,7 +10085,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9846,6 +10093,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9862,6 +10113,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9874,6 +10129,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10070,10 +10329,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10082,6 +10337,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10233,6 +10492,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10368,6 +10635,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10396,6 +10667,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10404,6 +10679,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10444,10 +10735,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10472,6 +10773,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10504,6 +10809,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10524,7 +10849,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10532,7 +10857,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10556,6 +10881,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10650,6 +10983,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10671,7 +11008,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10748,6 +11086,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11285,10 +11627,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/ml.po b/editor/translations/ml.po index 876edb73fa..d4b49c12cc 100644 --- a/editor/translations/ml.po +++ b/editor/translations/ml.po @@ -3,12 +3,13 @@ # Copyright (c) 2014-2019 Godot Engine contributors (cf. AUTHORS.md) # This file is distributed under the same license as the Godot source code. # christy james <jkuttu@gmail.com>, 2018. +# Lakshmi-Jayakumar <lakshmi.jayakumar.tkm@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-12-13 14:41+0100\n" -"Last-Translator: christy james <jkuttu@gmail.com>\n" +"PO-Revision-Date: 2019-10-17 04:52+0000\n" +"Last-Translator: Lakshmi-Jayakumar <lakshmi.jayakumar.tkm@gmail.com>\n" "Language-Team: Malayalam <https://hosted.weblate.org/projects/godot-engine/" "godot/ml/>\n" "Language: ml\n" @@ -16,7 +17,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: Poedit 2.2\n" +"X-Generator: Weblate 3.9\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -43,7 +44,7 @@ msgstr "à´ªàµà´°à´µàµ¼à´¤àµà´¤à´•നൠചെയàµà´¯à´¾àµ» കൊടàµà´¤à #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ തരം% sഇനൠഅസാധàµà´µà´¾à´¯ സൂചിക തരം" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" @@ -57,6 +58,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -321,6 +350,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -446,13 +476,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -585,7 +610,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -597,6 +622,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -773,7 +802,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -874,7 +904,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -911,7 +942,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1174,7 +1205,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1365,7 +1396,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1419,7 +1452,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1584,6 +1617,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1654,6 +1688,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1801,6 +1836,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1809,7 +1845,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1817,38 +1853,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1857,19 +1873,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1884,10 +1892,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1898,10 +1902,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1968,8 +1968,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1982,6 +1982,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2521,6 +2563,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2720,10 +2774,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2774,14 +2824,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2799,15 +2845,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2870,6 +2922,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2879,6 +2935,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2907,11 +2967,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3008,6 +3063,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3034,13 +3093,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3687,8 +3739,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3813,7 +3865,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3948,6 +4000,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4114,6 +4172,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4288,7 +4347,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4456,6 +4514,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4660,6 +4720,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4672,10 +4736,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4938,20 +4998,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5041,8 +5108,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5302,6 +5368,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5931,6 +6001,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5986,7 +6060,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6085,6 +6160,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6186,11 +6266,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6270,7 +6350,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6350,6 +6430,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6407,10 +6492,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6730,6 +6811,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6763,6 +6848,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6989,6 +7078,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7037,6 +7130,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7351,6 +7448,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7481,6 +7586,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7635,16 +7745,105 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7660,6 +7859,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7868,6 +8071,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8511,12 +8719,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9058,6 +9268,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9194,6 +9408,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9357,10 +9575,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9416,6 +9630,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9456,7 +9674,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9478,11 +9708,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9556,6 +9784,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9572,10 +9808,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9802,43 +10034,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9846,7 +10094,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9854,6 +10102,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9870,6 +10122,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9882,6 +10138,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10078,10 +10338,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10090,6 +10346,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10241,6 +10501,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10376,6 +10644,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10404,6 +10676,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10412,6 +10688,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10452,10 +10744,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10480,6 +10782,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10512,6 +10818,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10532,7 +10858,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10540,7 +10866,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10564,6 +10890,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10658,6 +10992,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10679,7 +11017,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10756,6 +11095,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11293,10 +11636,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/ms.po b/editor/translations/ms.po index afe9e390fe..74ade07fc8 100644 --- a/editor/translations/ms.po +++ b/editor/translations/ms.po @@ -60,6 +60,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -334,6 +362,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -463,15 +492,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Semua Pilihan" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -604,7 +627,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -616,6 +639,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Semua Pilihan" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -793,7 +821,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -894,7 +923,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -931,7 +961,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1194,7 +1224,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1385,7 +1415,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1439,7 +1471,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1605,6 +1637,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1675,6 +1708,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1822,6 +1856,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1830,7 +1865,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1838,38 +1873,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1878,19 +1893,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1905,10 +1912,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1919,10 +1922,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1990,8 +1989,8 @@ msgstr "" msgid "Copy Selection" msgstr "Semua Pilihan" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2004,6 +2003,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2544,6 +2585,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2744,10 +2797,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2798,14 +2847,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2823,15 +2868,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2894,6 +2945,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2903,6 +2958,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2931,11 +2990,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3032,6 +3086,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3058,13 +3116,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3712,8 +3763,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3838,7 +3889,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3974,6 +4025,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4143,6 +4200,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4318,7 +4376,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4489,6 +4546,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4693,6 +4752,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4705,10 +4768,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4976,20 +5035,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5079,8 +5145,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5342,6 +5407,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5971,6 +6040,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6026,7 +6099,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6125,6 +6199,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6226,11 +6305,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6310,7 +6389,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6390,6 +6469,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6448,10 +6532,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6771,6 +6851,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6804,6 +6888,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7031,6 +7119,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7079,6 +7171,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "Set Peralihan ke:" @@ -7398,6 +7494,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7529,6 +7633,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7685,16 +7794,109 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Komuniti" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Ubah Nama Trek Anim" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Semua Pilihan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Semua Pilihan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7710,6 +7912,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7922,6 +8128,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8566,12 +8777,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9113,6 +9326,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9250,6 +9467,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9414,10 +9635,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9473,6 +9690,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9513,10 +9734,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Semua Pilihan" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Semua Pilihan" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9535,11 +9770,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9614,6 +9847,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9630,10 +9871,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9860,43 +10097,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9904,7 +10157,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9912,6 +10165,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9928,6 +10185,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9940,6 +10201,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10136,10 +10401,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10148,6 +10409,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10302,6 +10567,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10437,6 +10710,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10465,6 +10742,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Semua Pilihan" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10473,6 +10755,25 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Set Peralihan ke:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Buang Trek Anim" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Buang Trek Anim" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10513,10 +10814,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10541,6 +10852,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Anim Menduakan Kunci" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10573,6 +10889,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10593,7 +10929,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10601,7 +10937,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10625,6 +10961,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10719,6 +11063,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10740,7 +11088,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10817,6 +11166,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11354,10 +11707,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/nb.po b/editor/translations/nb.po index 7b642c69e0..d7a63a7f8c 100644 --- a/editor/translations/nb.po +++ b/editor/translations/nb.po @@ -19,7 +19,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-07-29 19:21+0000\n" +"PO-Revision-Date: 2019-10-29 12:49+0000\n" "Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" "Language-Team: Norwegian BokmÃ¥l <https://hosted.weblate.org/projects/godot-" "engine/godot/nb_NO/>\n" @@ -28,7 +28,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.8-dev\n" +"X-Generator: Weblate 3.9.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -69,6 +69,34 @@ msgstr "Ugyldige argumenter for Ã¥ lage \"%s\"" msgid "On call to '%s':" msgstr "NÃ¥r \"%s\" ble anropt:" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Frigjør" @@ -102,14 +130,12 @@ msgid "Delete Selected Key(s)" msgstr "Slett valgte nøkler/taster" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Add Bezier Point" -msgstr "Legg til punkt" +msgstr "Legg til Bezier-punkt" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "Flytt Punkt" +msgstr "Flytt Bezier-punkt" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -140,24 +166,20 @@ msgid "Anim Change Call" msgstr "Anim Forandre Kall" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Anim Endre Nøkkelbildetid" +msgstr "Anim Endre flere Nøkkelbildetider" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Anim Forandre Overgang" +msgstr "Anim Forandre flere Overganger" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Anim Forandre Omforming" +msgstr "Anim Forandre flere Omforminger" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Anim Endre Nøkkelbildeverdi" +msgstr "Anim Endre flere Nøkkelbildeverdier" #: editor/animation_track_editor.cpp #, fuzzy @@ -165,9 +187,8 @@ msgid "Anim Multi Change Call" msgstr "Anim Forandre Kall" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Length" -msgstr "Endre Animasjonsnavn:" +msgstr "Endre Animasjonslengde" #: editor/animation_track_editor.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -180,7 +201,6 @@ msgid "Property Track" msgstr "Egenskapsspor" #: editor/animation_track_editor.cpp -#, fuzzy msgid "3D Transform Track" msgstr "3D transformasjonsspor" @@ -205,19 +225,16 @@ msgid "Animation Playback Track" msgstr "Stopp avspilling av animasjon. (S)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (frames)" -msgstr "Animasjon lengde (i sekunder)." +msgstr "Animasjon lengde (i rammer)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Animation length (seconds)" -msgstr "Animasjon lengde (i sekunder)." +msgstr "Animasjonslengde (sekunder)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Add Track" -msgstr "Anim Legg til Spor" +msgstr "Legg til Spor" #: editor/animation_track_editor.cpp #, fuzzy @@ -363,6 +380,7 @@ msgstr "Lag %d NYE spor og sett inn nøkler?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Lag" @@ -506,15 +524,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Velg Alle" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Kutt Noder" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Velg en AnimationPlayer fra scenetreet for Ã¥ endre animasjoner." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -653,7 +666,8 @@ msgid "Scale Ratio:" msgstr "Skaler Størrelsesforhold:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Velg spor Ã¥ kopiere:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -665,6 +679,11 @@ msgstr "Velg spor Ã¥ kopiere:" msgid "Copy" msgstr "Lim inn" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Kutt Noder" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -703,8 +722,9 @@ msgid "Replaced %d occurrence(s)." msgstr "Erstattet %d forekomst(er)." #: editor/code_editor.cpp editor/editor_help.cpp +#, fuzzy msgid "%d match." -msgstr "" +msgstr "%d samsvar." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy @@ -852,7 +872,8 @@ msgstr "Kobler Til Signal:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -962,7 +983,8 @@ msgstr "Søk:" msgid "Matches:" msgstr "Treff:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -1005,7 +1027,7 @@ msgid "Resource" msgstr "Ressurs" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Bane" @@ -1284,7 +1306,8 @@ msgid "Delete Bus Effect" msgstr "Slett Bus Effekt" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Audio Bus, Dra og Slipp for Ã¥ omorganisere." #: editor/editor_audio_buses.cpp @@ -1358,7 +1381,7 @@ msgstr "Ã…pne Audio Bus oppsett" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "" +msgstr "Det finnes ingen «%s»-fil" #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -1484,7 +1507,9 @@ msgid "Add AutoLoad" msgstr "Legg til AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Bane:" @@ -1539,7 +1564,7 @@ msgstr "Lag mappe" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Navn:" @@ -1694,7 +1719,7 @@ msgstr "Egenskaper:" #: editor/editor_feature_profile.cpp msgid "Enabled Features:" -msgstr "" +msgstr "PÃ¥skrudde funksjoner:" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1732,6 +1757,7 @@ msgstr "Gjeldende:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Ny" @@ -1812,6 +1838,7 @@ msgid "New Folder..." msgstr "Ny Mappe..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Oppdater" @@ -1965,6 +1992,7 @@ msgid "Class:" msgstr "Klasse:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Arver:" @@ -1973,7 +2001,8 @@ msgid "Inherited by:" msgstr "Arvet av:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Kort beskrivelse:" #: editor/editor_help.cpp @@ -1981,41 +2010,19 @@ msgid "Properties" msgstr "Egenskaper" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Egenskaper:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metoder" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metoder" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Egenskaper" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Egenskaper" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signaler:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Nummereringer" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Nummereringer:" - -#: editor/editor_help.cpp msgid "enum " msgstr "num " @@ -2024,21 +2031,13 @@ msgid "Constants" msgstr "Konstanter" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanter:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Beskrivelse" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "Beskrivelse:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Online dokumentasjon:" #: editor/editor_help.cpp @@ -2057,11 +2056,6 @@ msgid "Property Descriptions" msgstr "Egenskapsbeskrivelse:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Egenskapsbeskrivelse:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2075,11 +2069,6 @@ msgid "Method Descriptions" msgstr "Metodebeskrivelse:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Metodebeskrivelse:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2159,8 +2148,8 @@ msgstr "Output:" msgid "Copy Selection" msgstr "Fjern Utvalg" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2173,9 +2162,53 @@ msgstr "Tøm" msgid "Clear Output" msgstr "Nullstill resultat" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stopp" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "Start!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Last ned" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Oppover" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Nytt vindu" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2639,7 +2672,7 @@ msgstr "Lukk Andre Faner" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "" +msgstr "Lukk faner til høyre" #: editor/editor_node.cpp #, fuzzy @@ -2772,6 +2805,19 @@ msgstr "Prosjekt" msgid "Project Settings..." msgstr "Prosjektinnstillinger" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versjon:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -3006,10 +3052,6 @@ msgstr "Sett scenen pÃ¥ pause" msgid "Stop the scene." msgstr "Stopp scenen." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Stopp" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Spill den redigerte scenen." @@ -3066,15 +3108,11 @@ msgid "Inspector" msgstr "Inspektør" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Utvid alle" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Output" @@ -3093,15 +3131,21 @@ msgstr "HÃ¥ndter Eksportmaler" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3165,6 +3209,11 @@ msgstr "Ã…pne den neste Editoren" msgid "Open the previous Editor" msgstr "Ã…pne den forrige Editoren" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Ressurs" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Lager ForhÃ¥ndsvisning av Mesh" @@ -3175,6 +3224,11 @@ msgstr "Miniatyrbilde..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Kjør Skript" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Rediger Poly" @@ -3204,12 +3258,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Rediger" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "Start!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "MÃ¥l:" @@ -3319,6 +3367,11 @@ msgstr "" msgid "New Script" msgstr "Nytt Skript" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Kjør Skript" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Ny %s" @@ -3345,14 +3398,6 @@ msgstr "Lim inn" msgid "Convert To %s" msgstr "Konverter Til %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Ã…pne i Redigeringsverktøy" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3422,7 +3467,7 @@ msgstr "Velg Node(r) for Importering" #: editor/editor_sub_scene.cpp editor/project_manager.cpp msgid "Browse" -msgstr "" +msgstr "Utforsk" #: editor/editor_sub_scene.cpp msgid "Scene Path:" @@ -4071,9 +4116,9 @@ msgstr " Filer" msgid "Import As:" msgstr "Importer Som:" -#: editor/import_dock.cpp editor/property_editor.cpp +#: editor/import_dock.cpp #, fuzzy -msgid "Preset..." +msgid "Preset" msgstr "Preset..." #: editor/import_dock.cpp @@ -4210,7 +4255,7 @@ msgstr "Plugins" msgid "Subfolder:" msgstr "Undermappe:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "SprÃ¥k:" @@ -4365,6 +4410,13 @@ msgstr "Flytt Punkt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Ã…pne i Redigeringsverktøy" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4552,6 +4604,7 @@ msgid "Change Animation Name:" msgstr "Endre Animasjonsnavn:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Fjern Animasjon?" @@ -4737,7 +4790,6 @@ msgstr "Animasjonsnavn:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Error!" @@ -4918,6 +4970,8 @@ msgid "Current:" msgstr "Gjeldende:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Legg til Input" @@ -5140,6 +5194,10 @@ msgid "All" msgstr "Alle" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importer" @@ -5154,11 +5212,6 @@ msgid "Sort:" msgstr "Sorter:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Ber om..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategori:" @@ -5450,23 +5503,33 @@ msgstr "Panorerings-Modus" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Velg Modus" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "SlÃ¥ av/pÃ¥ snapping" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Bruk Snap" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "Snapping innstillinger" +msgid "Toggle grid snapping." +msgstr "SlÃ¥ av/pÃ¥ snapping" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Snap til rutenett" +msgid "Use Grid Snap" +msgstr "Bruk Snap" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "Snapping innstillinger" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5564,8 +5627,8 @@ msgid "View" msgstr "Visning" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Vis Rutenett" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5845,6 +5908,11 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "Hold Shift for Ã¥ endre tangenter individuelt" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Høyreklikk: Fjern Punkt" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Bak GI Probe" @@ -6499,6 +6567,10 @@ msgid "Grid" msgstr "Rutenett" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Vis Rutenett" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Konfigurer Snap" @@ -6560,7 +6632,8 @@ msgstr "Instans:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Type:" @@ -6675,6 +6748,11 @@ msgid "Find Next" msgstr "Finn neste" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Finn forrige" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Lim inn Noder" @@ -6782,14 +6860,14 @@ msgid "Toggle Scripts Panel" msgstr "Veksle skriptpanel" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Hopp Over" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Tre inn i" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Hopp Over" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Brekk" @@ -6871,7 +6949,7 @@ msgstr "Fjern Nylige Scener" msgid "Connections to method:" msgstr "Koble Til Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Ressurs" @@ -6957,6 +7035,11 @@ msgstr "Slett punkter" msgid "Cut" msgstr "Klipp ut" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Velg Alle" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -7019,10 +7102,6 @@ msgid "Auto Indent" msgstr "Automatisk innrykk" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Finn forrige" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtrer Filer..." @@ -7363,6 +7442,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7398,6 +7481,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Bruk Snap" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Bunnvisning" @@ -7633,6 +7720,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7685,6 +7776,11 @@ msgstr "(tom)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Flytt Modus" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animasjoner" @@ -8022,6 +8118,15 @@ msgid "Enable Priority" msgstr "Rediger Filtre" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrer Filer..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8171,6 +8276,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Fjern Kurvepunkt" @@ -8349,18 +8459,117 @@ msgstr "Denne operasjonen kan ikke gjøres uten en scene." msgid "TileSet" msgstr "TileSet..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Legg til Input" +msgid "No commit message was provided" +msgstr "Ingen navn gitt" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Fellesskap" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Store bokstaver" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Lag ny %s" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Forandre" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Endre navn" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Slett" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Forandre" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Slett Valgte" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Lagre Alle" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Synkroniser Skriptforandringer" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Legg til Input" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8378,6 +8587,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Legg til Input" @@ -8607,6 +8820,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9261,12 +9479,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9840,6 +10060,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Fjern Utvalg" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9981,6 +10206,11 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +#, fuzzy +msgid "Preset..." +msgstr "Preset..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -10156,10 +10386,6 @@ msgstr "Store versaler" msgid "Reset" msgstr "Nullstill Zoom" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10215,6 +10441,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10256,10 +10486,24 @@ msgid "Make node as Root" msgstr "Lagre Scene" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Kutt Noder" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Kutt Noder" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10278,11 +10522,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10364,6 +10606,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Ã…pne Godots nettbaserte dokumentasjon" @@ -10383,11 +10633,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Kjør Skript" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Lag ny %s" @@ -10638,24 +10883,19 @@ msgid "Will load an existing script file." msgstr "Last et eksisterende Bus oppsett." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Klasse:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Fjern Mal" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Kjør Skript" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10671,11 +10911,42 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "Advarsler:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Error!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Last Errors" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Last Errors" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Ressurs" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Ressurs" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Ressurs" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10683,8 +10954,9 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Frakoblet" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10692,6 +10964,11 @@ msgid "Copy Error" msgstr "Last Errors" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Slett punkter" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10708,6 +10985,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Eksporter Prosjekt" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10720,6 +11002,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10923,10 +11209,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10935,6 +11217,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -11094,6 +11380,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Lim inn Noder" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11237,6 +11532,10 @@ msgid "Create a new variable." msgstr "Lag ny %s" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signaler:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Lag en ny polygon fra bunnen." @@ -11267,6 +11566,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11275,6 +11579,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Legg til Input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Legg til Input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Fjern punkt" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11320,10 +11644,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Legg til node(r) fra tre" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11351,6 +11685,11 @@ msgstr "Kutt Noder" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Kutt Noder" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Kutt Noder" @@ -11387,6 +11726,27 @@ msgid "Paste VisualScript Nodes" msgstr "Lim inn Noder" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Lag Abonnement" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Fjern Funksjon" @@ -11407,16 +11767,18 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "Lag Ben" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Medlemmer:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Tilgjengelige Noder:" +#, fuzzy +msgid "function_name" +msgstr "Funksjoner:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11442,6 +11804,16 @@ msgstr "Kutt Noder" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Fjern Funksjon" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Oppdater" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Medlemmer" @@ -11537,6 +11909,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Velg enhet fra listen" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11558,7 +11934,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11638,6 +12015,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12188,11 +12569,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "Legg til Input" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12204,9 +12580,8 @@ msgid "Invalid source for shader." msgstr "Ugyldig fontstørrelse." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Ugyldig fontstørrelse." +msgstr "Ugyldig sammenligningsfunksjon for den typen." #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -12224,6 +12599,54 @@ msgstr "" msgid "Constants cannot be modified." msgstr "Konstanter kan ikke endres." +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Snap til rutenett" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Legg til Input" + +#~ msgid "Available Nodes:" +#~ msgstr "Tilgjengelige Noder:" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "Legg til Input" + +#~ msgid "Properties:" +#~ msgstr "Egenskaper:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metoder" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Egenskaper" + +#~ msgid "Enumerations:" +#~ msgstr "Nummereringer:" + +#~ msgid "Constants:" +#~ msgstr "Konstanter:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Beskrivelse:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Egenskapsbeskrivelse:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Metodebeskrivelse:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Ber om..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12345,9 +12768,6 @@ msgstr "Konstanter kan ikke endres." #~ msgid "Go to parent folder" #~ msgstr "GÃ¥ til overnevnt mappe" -#~ msgid "Select device from the list" -#~ msgstr "Velg enhet fra listen" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "Ã…pne Scene" @@ -12396,9 +12816,6 @@ msgstr "Konstanter kan ikke endres." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Instanser den valgte scene(r) som barn av den valgte noden." -#~ msgid "Warnings:" -#~ msgstr "Advarsler:" - #, fuzzy #~ msgid "Font Size:" #~ msgstr "Frontvisning" @@ -12433,9 +12850,6 @@ msgstr "Konstanter kan ikke endres." #~ msgid "Select a split to erase it." #~ msgstr "Velg en Mappe Ã¥ Skanne" -#~ msgid "No name provided" -#~ msgstr "Ingen navn gitt" - #~ msgid "Create Poly" #~ msgstr "Lag Poly" @@ -12740,9 +13154,6 @@ msgstr "Konstanter kan ikke endres." #~ msgid "Move Add Key" #~ msgstr "Flytt Legg-Til-Nøkkel" -#~ msgid "Create Subscription" -#~ msgstr "Lag Abonnement" - #~ msgid "List:" #~ msgstr "Liste:" diff --git a/editor/translations/nl.po b/editor/translations/nl.po index 2c836b5685..950e7f4573 100644 --- a/editor/translations/nl.po +++ b/editor/translations/nl.po @@ -36,12 +36,13 @@ # Bastiaan van der Plaat <bastiaan.v.d.plaat@gmail.com>, 2019. # Hector Peeters <hector.peeters@gmail.com>, 2019. # Shawn Gyina <gyina.shawn@gmail.com>, 2019. +# ebbe <ebbesteenhoudt@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-04 14:23+0000\n" -"Last-Translator: Shawn Gyina <gyina.shawn@gmail.com>\n" +"PO-Revision-Date: 2019-10-18 18:02+0000\n" +"Last-Translator: ebbe <ebbesteenhoudt@gmail.com>\n" "Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/" "nl/>\n" "Language: nl\n" @@ -49,7 +50,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.8-dev\n" +"X-Generator: Weblate 3.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -91,6 +92,34 @@ msgstr "Ongeldig argument in constructie '%s'" msgid "On call to '%s':" msgstr "Tijdens invocatie van '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Vrij" @@ -362,6 +391,7 @@ msgstr "Maak %d NIEUWE tracks aan en keys invoeren?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Maken" @@ -505,14 +535,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Waarschuwing: Geïmporteerde animatie bewerken" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Alles Selecteren" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Niets Selecteren" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Selecteer een AnimationPlayer uit de Scene Tree om animaties te wijzigen." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -645,7 +672,8 @@ msgid "Scale Ratio:" msgstr "Schaal Ratio:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Selecteer sporen om te kopieren:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -657,6 +685,11 @@ msgstr "Selecteer sporen om te kopieren:" msgid "Copy" msgstr "Kopiëren" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Niets Selecteren" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Voeg audiospoor clip toe" @@ -832,9 +865,8 @@ msgid "Disconnects the signal after its first emission." msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Cannot connect signal" -msgstr "Verbind met Signaal: " +msgstr "Kan signaal niet verbinden" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -843,7 +875,8 @@ msgstr "Verbind met Signaal: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -855,9 +888,8 @@ msgid "Connect" msgstr "Verbinden" #: editor/connections_dialog.cpp -#, fuzzy msgid "Signal:" -msgstr "Signalen:" +msgstr "Signaal:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" @@ -881,9 +913,8 @@ msgid "Disconnect" msgstr "Losmaken" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect a Signal to a Method" -msgstr "Verbind met Signaal: " +msgstr "Verbind een Signaal met een Methode" #: editor/connections_dialog.cpp #, fuzzy @@ -949,7 +980,8 @@ msgstr "Zoeken:" msgid "Matches:" msgstr "Overeenkomsten:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -992,7 +1024,7 @@ msgid "Resource" msgstr "Bron" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Pad" @@ -1269,7 +1301,8 @@ msgid "Delete Bus Effect" msgstr "Verwijder audiobuseffect" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Audiobus, versleep om volgorde te veranderen." #: editor/editor_audio_buses.cpp @@ -1468,7 +1501,9 @@ msgid "Add AutoLoad" msgstr "AutoLoad Toevoegen" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pad:" @@ -1523,7 +1558,7 @@ msgstr "Map Maken" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Naam:" @@ -1709,6 +1744,7 @@ msgstr "Huidig:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nieuw" @@ -1787,6 +1823,7 @@ msgid "New Folder..." msgstr "Nieuwe Map..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Verversen" @@ -1939,6 +1976,7 @@ msgid "Class:" msgstr "Klasse:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Erft:" @@ -1947,7 +1985,8 @@ msgid "Inherited by:" msgstr "Geërfd door:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Korte Beschrijving:" #: editor/editor_help.cpp @@ -1955,38 +1994,18 @@ msgid "Properties" msgstr "Eigenschappen" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Eigenschappen:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Methodes" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Methodes:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Thema Eigenschappen" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Thema Eigenschappen:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signalen:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeraties" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeraties:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1995,19 +2014,12 @@ msgid "Constants" msgstr "Constanten" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constanten:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Klassebeschrijving" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Klassebeschrijving:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Online Documentatie:" #: editor/editor_help.cpp @@ -2026,11 +2038,6 @@ msgid "Property Descriptions" msgstr "Eigenschap Beschrijving:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Eigenschap Beschrijving:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2044,11 +2051,6 @@ msgid "Method Descriptions" msgstr "Methode Beschrijving:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Methode Beschrijving:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2119,8 +2121,8 @@ msgstr "Uitvoer:" msgid "Copy Selection" msgstr "Selectie kopiëren" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2133,6 +2135,49 @@ msgstr "Leegmaken" msgid "Clear Output" msgstr "Maak Uitvoer Leeg" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stop" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Start" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Download" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Knooppunt" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2739,6 +2784,19 @@ msgstr "Project" msgid "Project Settings..." msgstr "Projectinstellingen" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versie:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2968,10 +3026,6 @@ msgstr "Pauzeer Scene" msgid "Stop the scene." msgstr "Stop de scene." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Stop" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Speel de bewerkte scene." @@ -3026,14 +3080,10 @@ msgid "Inspector" msgstr "Inspecteur" #: editor/editor_node.cpp -msgid "Node" -msgstr "Knooppunt" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Vergroot onderste paneel" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Output" @@ -3052,15 +3102,21 @@ msgstr "Beheer Export Templates" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3123,6 +3179,11 @@ msgstr "Open de volgende Editor" msgid "Open the previous Editor" msgstr "Open de vorige Editor" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Geen oppervlakte bron gespecificeerd." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Creëren van Mesh Previews" @@ -3132,6 +3193,11 @@ msgid "Thumbnail..." msgstr "Voorbeeld..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Omschrijving:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Bewerk Plugin" @@ -3160,11 +3226,6 @@ msgstr "Staat:" msgid "Edit:" msgstr "Bewerken:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Start" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Meting:" @@ -3271,6 +3332,11 @@ msgstr "Kies een Aanzicht portaal" msgid "New Script" msgstr "Nieuw Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Omschrijving:" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nieuw %s" @@ -3297,13 +3363,6 @@ msgstr "Plakken" msgid "Convert To %s" msgstr "Omzetten naar %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Editor Openen" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Geselecteerde knoop is geen Viewport!" @@ -3983,9 +4042,10 @@ msgstr " Bestanden" msgid "Import As:" msgstr "Importereen Als:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Voorinstelling..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Voorinstelling" #: editor/import_dock.cpp msgid "Reimport" @@ -4115,7 +4175,7 @@ msgstr "Pluginnaam:" msgid "Subfolder:" msgstr "Submap:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Taal:" @@ -4263,6 +4323,12 @@ msgstr "Punt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Editor Openen" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Animatieknoop openen" @@ -4453,6 +4519,7 @@ msgid "Change Animation Name:" msgstr "Verander Animatie Naam:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Animatie verwijderen?" @@ -4630,7 +4697,6 @@ msgstr "Animatie Naam:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Foutmelding!" @@ -4809,6 +4875,8 @@ msgid "Current:" msgstr "Huidig:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Voeg invoer toe" @@ -5021,6 +5089,10 @@ msgid "All" msgstr "Alle" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importeren" @@ -5035,11 +5107,6 @@ msgid "Sort:" msgstr "Sorteren:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Opvragen..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categorie:" @@ -5335,22 +5402,33 @@ msgid "Pan Mode" msgstr "Verschuif Modus" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Uitvoermodus:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Automatisch schikken omschakelen." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Gebruik Uitlijnen" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opties voor automatisch schikken" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Automatisch schikken omschakelen." #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Uitlijnen op raster" +msgid "Use Grid Snap" +msgstr "Rooster Snap" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Opties voor automatisch schikken" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5451,8 +5529,8 @@ msgid "View" msgstr "Weergeven" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Raster Weergeven" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5737,6 +5815,11 @@ msgstr "Schakel Curve Lineaire Raaklijn" msgid "Hold Shift to edit tangents individually" msgstr "Houd Shift ingedrukt om de raaklijnen individueel te bewerken" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Rechter Klik: Verwijder Punt" + #: editor/plugins/gi_probe_editor_plugin.cpp #, fuzzy msgid "Bake GI Probe" @@ -6405,6 +6488,10 @@ msgid "Grid" msgstr "Grid" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Raster Weergeven" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Configureer Snap" @@ -6466,7 +6553,8 @@ msgstr "Instantie:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Type:" @@ -6577,6 +6665,11 @@ msgid "Find Next" msgstr "Vind Volgende" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Vind Vorige" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filter eigenschappen" @@ -6684,14 +6777,14 @@ msgid "Toggle Scripts Panel" msgstr "Schakel Scripten Paneel" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Stap Over" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Stap In" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Stap Over" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Breek" @@ -6777,7 +6870,7 @@ msgstr "Maak Leeg" msgid "Connections to method:" msgstr "Verbind Aan Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Resource" @@ -6864,6 +6957,11 @@ msgstr "Punten aanmaken." msgid "Cut" msgstr "Knippen" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Alles Selecteren" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Verwijder Regel" @@ -6924,10 +7022,6 @@ msgid "Auto Indent" msgstr "Auto Indentatie" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Vind Vorige" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Bestanden Filteren..." @@ -7273,6 +7367,11 @@ msgid "Freelook Speed Modifier" msgstr "Vrijekijk Snelheid Modificator" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Vrijekijk Snelheid Modificator" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7316,6 +7415,10 @@ msgid "Use Local Space" msgstr "Lokale Ruimtemodus (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Gebruik Uitlijnen" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Onderaanzicht" @@ -7560,6 +7663,11 @@ msgid "Simplification: " msgstr "Simplificatie: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Vergroot (Pixels): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Vergroot (Pixels): " @@ -7613,6 +7721,11 @@ msgstr "(leeg)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Frame Plakken" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animaties" @@ -7949,6 +8062,15 @@ msgid "Enable Priority" msgstr "Filters Bewerken" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Bestanden Filteren..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Teken Tegel" @@ -8098,6 +8220,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Tegelnamen tonen (Alt-toets ingedrukt houden)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Geselecteerde Texture verwijderen? Alle tegels die ervan gebruikt maken " @@ -8285,18 +8412,118 @@ msgstr "Deze operatie kan niet uitgevoerd worden zonder scene." msgid "TileSet" msgstr "TileSet..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "Naam van primaire Node, indien beschikbaar" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Fout" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No commit message was provided" +msgstr "Geen naam opgegeven" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Voeg invoer toe" +msgid "Commit" +msgstr "Gemeenschap" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Maak Hoofdletters" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Nieuwe knopen maken." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Wijzig" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Hernoemen" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Verwijder" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Wijzig" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Geselecteerde Verwijderen" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Alles Opslaan" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Scriptveranderingen synchroniseren" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Voeg invoer toe" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8314,6 +8541,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Voeg invoer toe" @@ -8547,6 +8778,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9217,15 +9453,19 @@ msgid "Resources to export:" msgstr "Bronnen te exporteren:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filters voor het exporteren van bestanden dat geen bron zijn (scheiden met " "een komma, bijv.: *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filters voor het uitsluiten van bestanden van het project (scheiden met een " "komma, bijv.: *.json, *.txt)" @@ -9851,6 +10091,11 @@ msgid "Settings saved OK." msgstr "Instellingen succesvol opgeslagen." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Toevoegen Input Action Event" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Override voor Feature" @@ -9996,6 +10241,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Voorinstelling..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Nul" @@ -10178,10 +10427,6 @@ msgstr "Hoofdletters" msgid "Reset" msgstr "Reset Zoom" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Fout" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10237,6 +10482,10 @@ msgid "Instance Scene(s)" msgstr "Instantie Scene(s)" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10281,8 +10530,23 @@ msgid "Make node as Root" msgstr "Klinkt logisch!" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Verwijder knooppunt(en)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Alles Selecteren" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Verwijder Shader Graaf Knooppunt(en)" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Alles Selecteren" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10303,11 +10567,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10390,6 +10652,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Open Godot online documentatie" @@ -10410,11 +10680,6 @@ msgstr "Verander Type" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Omschrijving:" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Voeg nieuwe knooppunt aan" @@ -10671,23 +10936,18 @@ msgid "Will load an existing script file." msgstr "Laad bestaand script" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Taal" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Erft" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Klasse Naam" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Sjabloon" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Ingebouwd Script" #: editor/script_create_dialog.cpp @@ -10704,11 +10964,42 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "Waarschuwingen:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Fout" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Kopieer Fout" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Kopieer Fout" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Resource" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Resource" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Resource" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10716,14 +11007,20 @@ msgid "Errors" msgstr "Fouten" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Verbinding Verbroken" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Kopieer Fout" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Punten aanmaken." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspecteer vorige instantie" @@ -10740,6 +11037,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Project Exporteren" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10752,6 +11054,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10952,10 +11258,6 @@ msgid "Library" msgstr "Bibliotheek" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotheken: " @@ -10964,6 +11266,10 @@ msgid "GDNative" msgstr "GDInheems" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "step argument is nul!" @@ -11126,6 +11432,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filter:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11278,6 +11593,10 @@ msgid "Create a new variable." msgstr "Nieuwe knopen maken." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signalen:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Nieuwe veelhoek aanmaken." @@ -11307,6 +11626,11 @@ msgid "Add Function" msgstr "Functie Toevoegen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Punt verwijderen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Variabele Toevoegen" @@ -11315,6 +11639,26 @@ msgid "Add Signal" msgstr "Signaal Toevoegen" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Voeg invoer toe" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Voeg invoer toe" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Punt verwijderen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Punt verwijderen" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Verander Expressie" @@ -11365,10 +11709,20 @@ msgid "Add Preload Node" msgstr "Preload Node Toevoegen" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Voeg Node(s) Toe Uit Tree" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Getter Property Toevoegen" @@ -11398,6 +11752,11 @@ msgstr "Verbind Aan Node:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Ontkoppel Graaf Knooppunten" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Verbind Aan Node:" @@ -11434,6 +11793,27 @@ msgid "Paste VisualScript Nodes" msgstr "Plak Nodes" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Hernoem Functie" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Verwijder Functie" @@ -11454,16 +11834,18 @@ msgid "Editing Signal:" msgstr "Signaal Bewerken:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Basis Type:" +#, fuzzy +msgid "Make Tool:" +msgstr "Maak Botten" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Leden:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Beschikbare Nodes:" +#, fuzzy +msgid "function_name" +msgstr "Functies:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11488,6 +11870,16 @@ msgstr "Knip Nodes" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Hernoem Functie" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Verversen" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Leden" @@ -11586,6 +11978,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Selecteer apparaat uit de lijst" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11607,7 +12003,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11687,6 +12084,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12317,10 +12718,6 @@ msgstr "" "hebt zijn inhoud direct op het scherm te weergeven. Anders, maak er een " "RenderTarget van en wijs zijn interne texture toe aan een node om te tonen." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Invoer" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12351,6 +12748,62 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Uitlijnen op raster" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Voeg invoer toe" + +#~ msgid "Language" +#~ msgstr "Taal" + +#~ msgid "Inherits" +#~ msgstr "Erft" + +#~ msgid "Base Type:" +#~ msgstr "Basis Type:" + +#~ msgid "Available Nodes:" +#~ msgstr "Beschikbare Nodes:" + +#~ msgid "Input" +#~ msgstr "Invoer" + +#~ msgid "Properties:" +#~ msgstr "Eigenschappen:" + +#~ msgid "Methods:" +#~ msgstr "Methodes:" + +#~ msgid "Theme Properties:" +#~ msgstr "Thema Eigenschappen:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeraties:" + +#~ msgid "Constants:" +#~ msgstr "Constanten:" + +#~ msgid "Class Description:" +#~ msgstr "Klassebeschrijving:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Eigenschap Beschrijving:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Methode Beschrijving:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Opvragen..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Verwijder knooppunt(en)?" + #~ msgid "No Matches" #~ msgstr "Geen Overeenkomsten" @@ -12522,9 +12975,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "Ga naar bovenliggende folder" -#~ msgid "Select device from the list" -#~ msgstr "Selecteer apparaat uit de lijst" - #~ msgid "Open Scene(s)" #~ msgstr "Scene(s) Openen" @@ -12584,9 +13034,6 @@ msgstr "" #~ "Maak een nieuwe kopie van de geselecteerde scene(s) als kind van de " #~ "geselecteerde knoop." -#~ msgid "Warnings:" -#~ msgstr "Waarschuwingen:" - #~ msgid "Font Size:" #~ msgstr "Lettertypegrootte:" @@ -12629,9 +13076,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "Selecteer een map om te scannen" -#~ msgid "No name provided" -#~ msgstr "Geen naam opgegeven" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Node Toevoegen" @@ -12811,18 +13255,12 @@ msgstr "" #~ msgid "Connect Graph Nodes" #~ msgstr "Verbind Graaf Knooppunten" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Ontkoppel Graaf Knooppunten" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Verwijder Shader Graaf Knooppunten" #~ msgid "Move Shader Graph Node" #~ msgstr "Verplaats Shader Graaf Knooppunten" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Verwijder Shader Graaf Knooppunt(en)" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Fout: Cyclische Connectie Link" diff --git a/editor/translations/or.po b/editor/translations/or.po index 6745237b50..19fbf71453 100644 --- a/editor/translations/or.po +++ b/editor/translations/or.po @@ -55,6 +55,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -319,6 +347,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -444,13 +473,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -583,7 +607,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -595,6 +619,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -771,7 +799,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -872,7 +901,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -909,7 +939,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1172,7 +1202,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1363,7 +1393,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1417,7 +1449,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1582,6 +1614,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1652,6 +1685,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1799,6 +1833,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1807,7 +1842,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1815,38 +1850,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1855,19 +1870,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1882,10 +1889,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1896,10 +1899,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1966,8 +1965,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1980,6 +1979,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2519,6 +2560,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2718,10 +2771,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2772,14 +2821,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2797,15 +2842,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2868,6 +2919,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2877,6 +2932,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2905,11 +2964,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3006,6 +3060,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3032,13 +3090,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3685,8 +3736,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3811,7 +3862,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3946,6 +3997,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4112,6 +4169,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4286,7 +4344,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4454,6 +4511,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4658,6 +4717,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4670,10 +4733,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4936,20 +4995,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5039,8 +5105,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5300,6 +5365,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5929,6 +5998,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5984,7 +6057,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6083,6 +6157,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6184,11 +6263,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6268,7 +6347,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6348,6 +6427,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6405,10 +6489,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6728,6 +6808,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6761,6 +6845,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6987,6 +7075,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7035,6 +7127,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7349,6 +7445,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7479,6 +7583,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7633,16 +7742,105 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7658,6 +7856,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7866,6 +8068,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8509,12 +8716,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9056,6 +9265,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9192,6 +9405,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9355,10 +9572,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9414,6 +9627,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9454,7 +9671,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9476,11 +9705,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9554,6 +9781,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9570,10 +9805,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9800,43 +10031,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9844,7 +10091,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9852,6 +10099,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9868,6 +10119,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9880,6 +10135,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10076,10 +10335,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10088,6 +10343,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10239,6 +10498,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10374,6 +10641,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10402,6 +10673,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10410,6 +10685,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10450,10 +10741,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10478,6 +10779,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10510,6 +10815,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10530,7 +10855,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10538,7 +10863,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10562,6 +10887,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10656,6 +10989,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10677,7 +11014,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10754,6 +11092,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11291,10 +11633,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/pl.po b/editor/translations/pl.po index df28369163..cd7c033cb0 100644 --- a/editor/translations/pl.po +++ b/editor/translations/pl.po @@ -21,7 +21,7 @@ # RafaÅ‚ Ziemniak <synaptykq@gmail.com>, 2017. # RM <synaptykq@gmail.com>, 2018. # Sebastian Krzyszkowiak <dos@dosowisko.net>, 2017. -# Sebastian Pasich <sebastian.pasich@gmail.com>, 2017. +# Sebastian Pasich <sebastian.pasich@gmail.com>, 2017, 2019. # siatek papieros <sbigneu@gmail.com>, 2016. # Zatherz <zatherz@linux.pl>, 2017. # Tomek <kobewi4e@gmail.com>, 2018, 2019. @@ -35,11 +35,13 @@ # PrzemysÅ‚aw Pierzga <przemyslawpierzga@gmail.com>, 2019. # Artur MaciÄ…g <arturmaciag@gmail.com>, 2019. # RafaÅ‚ Wyszomirski <rawyszo@gmail.com>, 2019. +# Myver <igormakarowicz@gmail.com>, 2019. +# Maciej Chamera <chameramaciej@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" +"PO-Revision-Date: 2019-10-29 12:49+0000\n" "Last-Translator: Tomek <kobewi4e@gmail.com>\n" "Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/" "godot/pl/>\n" @@ -49,7 +51,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.9.1\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -65,7 +67,7 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "NieprawidÅ‚owe wejÅ›cie %i (nie podano) w wyrażeniu" +msgstr "NiewÅ‚aÅ›ciwe dane %i (nie przekazane) w wyrażeniu" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" @@ -92,9 +94,37 @@ msgstr "Niepoprawne argumenty do utworzenia \"%s\"" msgid "On call to '%s':" msgstr "Przy wywoÅ‚aniu \"%s\":" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Wolny" +msgstr "Wolne" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -356,6 +386,7 @@ msgstr "Utworzyć %d NOWYCH Å›cieżek i wstawić klucze?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Utwórz" @@ -497,14 +528,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Ostrzeżenie: Edytowanie importowanej animacji" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Zaznacz wszystko" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Wybierz wÄ™zeÅ‚" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Wybierz wÄ™zeÅ‚ AnimationPlayer, by tworzyć i edytować animacje." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -636,7 +662,8 @@ msgid "Scale Ratio:" msgstr "Współczynnik skali:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Wybierz Å›cieżki do skopiowania:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -648,6 +675,11 @@ msgstr "Wybierz Å›cieżki do skopiowania:" msgid "Copy" msgstr "Kopiuj" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Wybierz wÄ™zeÅ‚" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Dodaj klip Å›cieżki audio" @@ -685,14 +717,12 @@ msgid "Replaced %d occurrence(s)." msgstr "ZastÄ…piono %d wystÄ…pieÅ„." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Znaleziono %d dopasowaÅ„." +msgstr "%d dopasowanie." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Znaleziono %d dopasowaÅ„." +msgstr "%d dopasowaÅ„." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -829,7 +859,8 @@ msgstr "Nie można połączyć sygnaÅ‚u" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -930,7 +961,8 @@ msgstr "Szukaj:" msgid "Matches:" msgstr "PasujÄ…ce:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -971,7 +1003,7 @@ msgid "Resource" msgstr "Zasoby" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Åšcieżka" @@ -1143,22 +1175,20 @@ msgid "License" msgstr "Licencja" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Licencja zewnÄ™trzna" +msgstr "Licencje zewnÄ™trzne" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot Engine opiera siÄ™ na wielu niezależnych i otwartych bibliotekach stron " -"trzecich, wszystkie zgodne z warunkami licencji MIT. Poniżej znajduje siÄ™ " -"kompletna lista wszystkich takich komponentów stron trzecich wraz z ich " -"oÅ›wiadczeniami o prawach autorskich i postanowieniami licencyjnymi." +"Godot Engine opiera siÄ™ na wielu niezależnych i otwartych bibliotekach, " +"wszystkie zgodne z warunkami licencji MIT. Poniżej znajduje siÄ™ kompletna " +"lista wszystkich takich zewnÄ™trznych komponentów wraz z ich oÅ›wiadczeniami o " +"prawach autorskich i postanowieniami licencyjnymi." #: editor/editor_about.cpp msgid "All Components" @@ -1173,9 +1203,8 @@ msgid "Licenses" msgstr "Licencje" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Błąd otwierania pliku pakietu (nie jest w formacie zip)." +msgstr "Błąd otwierania pliku pakietu, nie jest w formacie ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1243,8 +1272,8 @@ msgid "Delete Bus Effect" msgstr "UsuÅ„ efekt magistrali" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Magistrala audio, przeciÄ…gnij i upuść by przemieÅ›cić." +msgid "Drag & drop to rearrange." +msgstr "PrzeciÄ…gnij i upuść, by zmienić kolejność." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1434,7 +1463,9 @@ msgid "Add AutoLoad" msgstr "Dodaj AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Åšcieżka:" @@ -1488,7 +1519,7 @@ msgstr "Utwórz katalog" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nazwa:" @@ -1662,6 +1693,7 @@ msgstr "Ustaw na bieżący" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Nowy" @@ -1732,6 +1764,7 @@ msgid "New Folder..." msgstr "Utwórz katalog..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "OdÅ›wież" @@ -1879,6 +1912,7 @@ msgid "Class:" msgstr "Klasa:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Dziedziczy:" @@ -1887,46 +1921,26 @@ msgid "Inherited by:" msgstr "Dziedziczone przez:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Krótki opis:" +msgid "Brief Description" +msgstr "Krótki opis" #: editor/editor_help.cpp msgid "Properties" msgstr "WÅ‚aÅ›ciwoÅ›ci" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "WÅ‚aÅ›ciwoÅ›ci:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metody" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metody:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "WÅ‚aÅ›ciwoÅ›ci motywu" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "WÅ‚aÅ›ciwoÅ›ci motywu:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "SygnaÅ‚y:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Wyliczenia" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Wyliczenia:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1935,20 +1949,12 @@ msgid "Constants" msgstr "StaÅ‚e" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "StaÅ‚e:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Opis klasy" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Opis klasy:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Poradniki online:" +msgid "Online Tutorials" +msgstr "Poradniki online" #: editor/editor_help.cpp msgid "" @@ -1965,10 +1971,6 @@ msgid "Property Descriptions" msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1981,10 +1983,6 @@ msgid "Method Descriptions" msgstr "Opisy metod" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Opisy metod:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2053,8 +2051,8 @@ msgstr "WyjÅ›cie:" msgid "Copy Selection" msgstr "Kopiuj zaznaczenie" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2067,10 +2065,51 @@ msgstr "Wyczyść" msgid "Clear Output" msgstr "Wyczyść dane wyjÅ›ciowe" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stop" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Start" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Dół" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Góra" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "WÄ™zeÅ‚" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "PrzychodzÄ…ce RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "PrzychodzÄ…ce RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "WychodzÄ…ce RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "WychodzÄ…ce RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Okno" +msgstr "Nowe okno" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2399,9 +2438,8 @@ msgid "Close Scene" msgstr "Zamknij scenÄ™" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Zamknij scenÄ™" +msgstr "Przywróć zamkniÄ™tÄ… scenÄ™" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2517,9 +2555,8 @@ msgid "Close Tab" msgstr "Zamknij kartÄ™" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Zamknij kartÄ™" +msgstr "Cofnij zamkniÄ™cie karty" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2652,18 +2689,28 @@ msgid "Project" msgstr "Projekt" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Ustawienia projektu" +msgstr "Ustawienia projektu..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Kontrola wersji" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Ustaw kontrolÄ™ wersji" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Wyłącz kontrolÄ™ wersji" #: editor/editor_node.cpp msgid "Export..." msgstr "Eksport..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Zainstaluj szablon eksportu dla Androida" +msgstr "Zainstaluj szablon eksportu dla Androida..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2674,9 +2721,8 @@ msgid "Tools" msgstr "NarzÄ™dzia" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Eksplorator osieroconych zasobów" +msgstr "Eksplorator osieroconych zasobów..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2776,9 +2822,8 @@ msgid "Editor" msgstr "Edytor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Ustawienia edytora" +msgstr "Ustawienia edytora..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2813,14 +2858,12 @@ msgid "Open Editor Settings Folder" msgstr "Otwórz folder ustawieÅ„ edytora" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "ZarzÄ…dzaj funkcjonalnoÅ›ciami edytora" +msgstr "ZarzÄ…dzaj funkcjonalnoÅ›ciami edytora..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "ZarzÄ…dzaj szablonami eksportu" +msgstr "ZarzÄ…dzaj szablonami eksportu..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2876,10 +2919,6 @@ msgstr "Zapauzuj scenÄ™" msgid "Stop the scene." msgstr "Zatrzymaj scenÄ™." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Stop" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Uruchom aktualnie edytowanÄ… scenÄ™." @@ -2930,14 +2969,10 @@ msgid "Inspector" msgstr "Inspektor" #: editor/editor_node.cpp -msgid "Node" -msgstr "WÄ™zeÅ‚" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "RozwiÅ„ panel dolny" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Konsola" @@ -2955,20 +2990,32 @@ msgstr "ZarzÄ…dzaj szablonami" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"To zainstaluje projekt Androida dla dostosowanych wydaÅ„.\n" -"W celu użycia go, musi zostać dołączony do każdego profilu eksportu." +"Ta opcja przygotuje twój projekt dla wÅ‚asnych buildów Androida, instalujÄ…c " +"źródÅ‚owy szablon w \"res://android/build\".\n" +"Możesz wtedy dodać modyfikacje i zbudować podczas eksportu wÅ‚asny pakiet APK " +"(dodajÄ…c moduÅ‚y, zmieniajÄ…c AndroidManifest.xml itp.)\n" +"PamiÄ™taj, że aby stworzyć wÅ‚asny build zamiast używać gotowego APK, opcja " +"\"Use Custom Build\" powinna być włączona w profilu eksportu Androida." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"Szablon budowania Androida jest już zainstalowany i nie bÄ™dzie nadpisany.\n" -"UsuÅ„ rÄ™cznie folder \"build\" przed spróbowaniem tej operacji ponownie." +"Szablon budowania Androida jest już zainstalowany w tym projekcie i nie " +"zostanie on nadpisany.\n" +"UsuÅ„ rÄ™cznie folder \"res://android/build\" przed spróbowaniem tej operacji " +"ponownie." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3030,6 +3077,10 @@ msgstr "Otwórz nastÄ™pny edytor" msgid "Open the previous Editor" msgstr "Otwórz poprzedni edytor" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Nie znaleziono podzasobów." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Tworzenie podglÄ…du Mesh" @@ -3039,6 +3090,10 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Skrypt główny:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Edytuj wtyczkÄ™" @@ -3067,11 +3122,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Edytuj:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Start" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Zmierzono:" @@ -3176,6 +3226,10 @@ msgstr "Wybierz Viewport" msgid "New Script" msgstr "Nowy skrypt" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Rozszerz skrypt" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Nowy %s" @@ -3202,13 +3256,6 @@ msgstr "Wklej" msgid "Convert To %s" msgstr "Konwersja do %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Otwórz edytor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Wybrany wÄ™zeÅ‚ to nie Viewport!" @@ -3288,7 +3335,6 @@ msgid "Import From Node:" msgstr "Zaimportuj z wÄ™zÅ‚a:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "Pobierz ponownie" @@ -3308,6 +3354,8 @@ msgstr "Pobierz" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Oficjalne szablony eksportowe nie sÄ… dostÄ™pne dla kompilacji " +"programistycznych." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3390,23 +3438,20 @@ msgid "Download Complete." msgstr "Pobieranie zakoÅ„czone." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Nie mogÄ™ zapisać motywu do pliku:" +msgstr "Nie można usunąć pliku tymczasowego:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Instalacja szablonów siÄ™ nie udaÅ‚a. Problematyczne archiwa szablonów mogÄ… " -"być znalezione w \"%s\"." +"Instalacja szablonów siÄ™ nie udaÅ‚a.\n" +"Problematyczne archiwa szablonów mogÄ… być znalezione w \"%s\"." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Błąd podczas żądania adresu url: " +msgstr "Błąd podczas żądania adresu URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3593,9 +3638,8 @@ msgid "Move To..." msgstr "PrzenieÅ› do..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nowa scena" +msgstr "Nowa scena..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3663,9 +3707,8 @@ msgid "Overwrite" msgstr "Nadpisz" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Utwórz ze sceny" +msgstr "Utwórz scenÄ™" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3745,21 +3788,18 @@ msgid "Invalid group name." msgstr "NiewÅ‚aÅ›ciwa nazwa grupy." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "ZarzÄ…dzaj grupami" +msgstr "ZmieÅ„ nazwÄ™ grupy" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "UsuÅ„ grupÄ™ obrazków" +msgstr "UsuÅ„ grupÄ™" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupy" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "WÄ™zÅ‚y nie w grupie" @@ -3774,12 +3814,11 @@ msgstr "WÄ™zÅ‚y w grupie" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Puste grupy zostanÄ… automatycznie usuniÄ™te." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Edytor skryptów" +msgstr "Edytor grup" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3880,9 +3919,9 @@ msgstr " Pliki" msgid "Import As:" msgstr "Importuj jako:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Ustawienie predefiniowane..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Profil" #: editor/import_dock.cpp msgid "Reimport" @@ -3989,9 +4028,8 @@ msgid "MultiNode Set" msgstr "Zestaw wielowÄ™zÅ‚owy" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Wybierz wÄ™zeÅ‚ do edycji sygnałów i grup." +msgstr "Wybierz pojedynczy wÄ™zeÅ‚, aby edytować jego sygnaÅ‚y i grupy." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4009,7 +4047,7 @@ msgstr "Nazwa wtyczki:" msgid "Subfolder:" msgstr "Podfolder:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "JÄ™zyk:" @@ -4151,6 +4189,12 @@ msgstr "Punkt" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Otwórz edytor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Otwórz wÄ™zeÅ‚ animacji" @@ -4323,6 +4367,7 @@ msgid "Change Animation Name:" msgstr "ZmieÅ„ nazwÄ™ animacji:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Usunąć animacjÄ™?" @@ -4447,7 +4492,7 @@ msgstr "Kierunki" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Past" -msgstr "Poprzednie" +msgstr "Poprzedni" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Future" @@ -4497,7 +4542,6 @@ msgstr "Nazwa animacji:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Błąd!" @@ -4670,6 +4714,8 @@ msgid "Current:" msgstr "Bieżący:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Dodaj WejÅ›cie" @@ -4770,37 +4816,32 @@ msgid "Request failed, return code:" msgstr "Żądanie nie powiodÅ‚o siÄ™, zwracany kod:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Żądanie nie powiodÅ‚o siÄ™." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Nie mogÄ™ zapisać motywu do pliku:" +msgstr "Nie można zapisać odpowiedzi do:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Błąd pisania." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Żądanie nieudane, zbyt dużo przekierowaÅ„" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "PÄ™tla przekierowaÅ„." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Żądanie nie powiodÅ‚o siÄ™, zwracany kod:" +msgstr "Żądanie nie powiodÅ‚o siÄ™, przekroczono czas" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Czas" +msgstr "Przekroczenie czasu." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4881,24 +4922,22 @@ msgid "All" msgstr "Wszystko" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Importuj ponownie..." +msgstr "Importuj..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Wtyczki" +msgstr "Wtyczki..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Sortuj:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Odwróć sortowanie." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategoria:" @@ -4908,9 +4947,8 @@ msgid "Site:" msgstr "ŹródÅ‚o:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Wsparcie..." +msgstr "Wsparcie" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4921,9 +4959,8 @@ msgid "Testing" msgstr "Testowanie" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Wczytaj..." +msgstr "Wczytywanie..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5092,9 +5129,8 @@ msgid "Paste Pose" msgstr "Wklej pozÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Wyczyść koÅ›ci" +msgstr "Wyczyść prowadnice" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5182,23 +5218,34 @@ msgid "Pan Mode" msgstr "Tryb przesuwania" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Tryb linijki" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Przełącz przyciÄ…ganie." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Użyj przyciÄ…gania" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opcje przyciÄ…gania" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Przełącz przyciÄ…ganie." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +#, fuzzy +msgid "Use Grid Snap" msgstr "PrzyciÄ…gaj do siatki" #: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Opcje przyciÄ…gania" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "Użyj kroków obrotu" @@ -5285,8 +5332,8 @@ msgid "View" msgstr "Widok" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Pokaż siatkÄ™" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5553,6 +5600,11 @@ msgstr "Przełącz stycznÄ… liniowÄ… krzywej" msgid "Hold Shift to edit tangents individually" msgstr "Przytrzymaj Shift aby edytować styczne indywidualnie" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Prawy Klik: UsuÅ„ Punkt" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Wypal sondÄ™ GI" @@ -5828,26 +5880,23 @@ msgstr "Czas generowania (sek):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Powierzchnie geometrii nie zawierajÄ… żadnego obszaru." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "WÄ™zeÅ‚ nie zawiera geometrii (Å›ciany)." +msgstr "Geometria nie zawiera żadnych powierzchni." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" nie dziedziczy ze Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "WÄ™zeÅ‚ nie zawiera geometrii." +msgstr "\"%s\" nie zawiera geometrii." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "WÄ™zeÅ‚ nie zawiera geometrii." +msgstr "\"%s\" nie zawiera geometrii powierzchni." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6191,6 +6240,10 @@ msgid "Grid" msgstr "Siatka" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Pokaż siatkÄ™" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Konfiguruj siatkÄ™:" @@ -6246,7 +6299,8 @@ msgstr "Instancja:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Typ:" @@ -6284,9 +6338,8 @@ msgid "Error writing TextFile:" msgstr "Błąd pisania pliku tekstowego:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Nie mogÅ‚em znaleźć tile:" +msgstr "Nie można zaÅ‚adować pliku w:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6309,7 +6362,6 @@ msgid "Error Importing" msgstr "Błąd importowania" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Nowy plik tekstowy..." @@ -6347,6 +6399,11 @@ msgid "Find Next" msgstr "Znajdź nastÄ™pny" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Znajdź poprzedni" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtruj skrypty" @@ -6391,9 +6448,8 @@ msgid "Open..." msgstr "Otwórz..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Otwórz skrypt" +msgstr "Przywróć zamkniÄ™ty skrypt" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6449,14 +6505,14 @@ msgid "Toggle Scripts Panel" msgstr "Przełącz panel skryptów" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Przekrocz" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Krok w" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Przekrocz" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Przerwa" @@ -6528,15 +6584,14 @@ msgid "Search Results" msgstr "Wyniki wyszukiwania" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Wyczyść listÄ™ ostatnio otwieranych scen" +msgstr "Wyczyść ostatnio otwierane skrypty" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Połączenia do metody:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "ŹródÅ‚o" @@ -6618,6 +6673,11 @@ msgstr "Punkty wstrzymania" msgid "Cut" msgstr "Wytnij" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Zaznacz wszystko" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "UsuÅ„ wiersz" @@ -6655,9 +6715,8 @@ msgid "Complete Symbol" msgstr "UzupeÅ‚nij symbol" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Skaluj zaznaczone" +msgstr "Wylicz wyrażenie" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6676,10 +6735,6 @@ msgid "Auto Indent" msgstr "Automatyczne wciÄ™cie" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Znajdź poprzedni" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Znajdź w plikach..." @@ -6965,9 +7020,8 @@ msgid "Audio Listener" msgstr "SÅ‚uchacz dźwiÄ™ku" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Włącz filtrowanie" +msgstr "Włącz Dopplera" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7002,6 +7056,11 @@ msgid "Freelook Speed Modifier" msgstr "Zmiennik prÄ™dkoÅ›ci \"Wolnego widoku\"" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Zmiennik prÄ™dkoÅ›ci \"Wolnego widoku\"" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7023,7 +7082,7 @@ msgstr "PrzyciÄ…gnij wÄ™zÅ‚y do podÅ‚ogi" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Nie udaÅ‚o siÄ™ znaleźć staÅ‚ej podÅ‚ogi do przyciÄ…gniÄ™cia zaznaczenia." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7036,9 +7095,12 @@ msgstr "" "Alt+PPM: Lista wyboru głębi" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Tryb lokalny przestrzeni (%s)" +msgstr "Użyj przestrzeni lokalnej" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Użyj przyciÄ…gania" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7135,9 +7197,8 @@ msgstr "Pokaż siatkÄ™" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Ustawienia" +msgstr "Ustawienia..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7269,6 +7330,11 @@ msgid "Simplification: " msgstr "Uproszczenie: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Wzrost (piksele): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Wzrost (piksele): " @@ -7317,6 +7383,10 @@ msgid "(empty)" msgstr "(pusty)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "PrzesuÅ„ klatkÄ™" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animacje:" @@ -7514,14 +7584,12 @@ msgid "Submenu" msgstr "Podmenu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Element 1" +msgstr "Podelement 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Element 2" +msgstr "Podpozycja 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7633,17 +7701,25 @@ msgid "Enable Priority" msgstr "Włącz priorytety" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtruj kafelki" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" +"Przypisz temu wÄ™zÅ‚owi TileMap zasób TileSet, aby korzystać z jego kafelków." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Maluj kafelek" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+PPM: Rysuj liniÄ™\n" -"Shift+Ctrl+PPM: Maluj prostokÄ…t" +"Shift+PPM: Rysowanie linii\n" +"Shift+Ctrl+PPM: Malowanie prostokÄ…ta" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7766,6 +7842,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Pokaż nazwy kafelków (przytrzymaj Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Dodaj lub wybierz teksturÄ™ na lewym panelu, aby edytować przywiÄ…zane do niej " +"kafelki." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Usunąć wybranÄ… teksturÄ™? To usunie wszystkie kafelki, które jej używajÄ…." @@ -7936,16 +8019,106 @@ msgstr "Ta wÅ‚aÅ›ciwość nie może zostać zmieniona." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Brak dostÄ™pnych dodatków VCS." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Błąd" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Nie podano wiadomoÅ›ci commitu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Brak plików dodanych do stage'a" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Commit" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "Dodatek VCS nie jest zainicjowany" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "System Kontroli Wersji (VCS)" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inicjuj" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Obszar stage'a" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Wykryj nowe zmiany" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Zmiany" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Zmodyfikowany" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Przemianowany" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "UsuniÄ™ty" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Zmiana typu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Stage'uj zaznaczone" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Stage'uj wszystko" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Dodaj wiadomość comittu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Commituj zmiany" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "Zobacz różnice przed commitowaniem do najnowszej wersji" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Brak aktywnego różnicowania plików (diff)" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Wykryj zmiany w różnicach plików" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Tylko GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Dodaj wejÅ›cie+" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Dodaj wyjÅ›cie+" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7961,6 +8134,11 @@ msgid "Boolean" msgstr "Prawda/faÅ‚sz" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Sample" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Dodaj port wejÅ›ciowy" @@ -8042,9 +8220,8 @@ msgid "Light" msgstr "ÅšwiatÅ‚o" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Utwórz wÄ™zeÅ‚ shadera" +msgstr "Pokaż wynikowy kod shadera." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8173,6 +8350,13 @@ msgstr "" "faÅ‚szywa." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Zwraca powiÄ…zany skalar, jeÅ›li podana wartość boolowska jest prawdziwa albo " +"faÅ‚szywa." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Zwraca wynik boolowski porównania pomiÄ™dzy dwoma parametrami." @@ -8409,7 +8593,6 @@ msgid "Returns the square root of the parameter." msgstr "Zwraca pierwiastek kwadratowy parametru." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8425,7 +8608,6 @@ msgstr "" "pomiÄ™dzy 0.0 i 1.0 używajÄ…c wielomianów Hermite'a." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8603,9 +8785,8 @@ msgid "Linear interpolation between two vectors." msgstr "Liniowo interpoluje pomiÄ™dzy dwoma wektorami." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Liniowo interpoluje pomiÄ™dzy dwoma wektorami." +msgstr "Liniowo interpoluje pomiÄ™dzy dwoma wektorami używajÄ…c skalara." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8632,7 +8813,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Zwraca wektor skierowany w kierunku zaÅ‚amania." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8648,7 +8828,6 @@ msgstr "" "pomiÄ™dzy 0.0 i 1.0 używajÄ…c wielomianów Hermite'a." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8664,7 +8843,6 @@ msgstr "" "pomiÄ™dzy 0.0 i 1.0 używajÄ…c wielomianów Hermite'a." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8675,7 +8853,6 @@ msgstr "" "Zwraca 0.0 jeÅ›li \"x\" jest mniejsze niż krawÄ™dź, w innym przypadku 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8737,6 +8914,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"WÅ‚asne wyrażenie w jÄ™zyku shaderów Godota, znajdujÄ…ce siÄ™ na górze " +"wynikowego shadera. Możesz wewnÄ…trz utworzyć różne definicje funkcji i " +"wywoÅ‚ywać je później Wyrażeniami. Możesz także deklarować zmienne, uniformy " +"i staÅ‚e." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8889,15 +9070,19 @@ msgid "Resources to export:" msgstr "Zasoby do eksportu:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtry do eksportowania plików nie bÄ™dÄ…cych zasobami (oddzielone " "przecinkami, np. *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtry do wykluczenia plików z projektu (rozdzielone przecinkami, np. *." "json, *.txt)" @@ -9130,13 +9315,12 @@ msgid "Unnamed Project" msgstr "Projekt bez nazwy" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importuj istniejÄ…cy projekt" +msgstr "BrakujÄ…cy projekt" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Błąd: Projekt nieobecny w systemie plików." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9235,12 +9419,11 @@ msgstr "" "Zawartość folderu projektu nie zostanie zmodyfikowana." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Usunąć %d projektów z listy?\n" +"Usunąć wszystkie brakujÄ…ce projekty z listy?\n" "Zawartość folderów projektów nie zostanie zmodyfikowana." #: editor/project_manager.cpp @@ -9265,9 +9448,8 @@ msgid "Project Manager" msgstr "Menedżer projektów" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projekt" +msgstr "Projekty" #: editor/project_manager.cpp msgid "Scan" @@ -9498,6 +9680,10 @@ msgid "Settings saved OK." msgstr "Ustawienia zapisane pomyÅ›lnie." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "PrzesuÅ„ zdarzenie akcji wejÅ›cia" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Nadpisanie dla cechy" @@ -9634,6 +9820,10 @@ msgid "Plugins" msgstr "Wtyczki" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Ustawienie predefiniowane..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9801,10 +9991,6 @@ msgstr "Na wielkie litery" msgid "Reset" msgstr "Resetuj" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Błąd" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "ZmieÅ„ nadrzÄ™dny wÄ™zeÅ‚" @@ -9862,6 +10048,10 @@ msgid "Instance Scene(s)" msgstr "Dodaj instancjÄ™ sceny" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "PodmieÅ„ na gałąź sceny" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Dodaj instancjÄ™ sceny" @@ -9904,8 +10094,20 @@ msgid "Make node as Root" msgstr "ZmieÅ„ wÄ™zeÅ‚ na KorzeÅ„" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "UsuÅ„ wÄ™zeÅ‚(y)?" +msgid "Delete %d nodes?" +msgstr "Usunąć %d wÄ™złów?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Usunąć korzeÅ„ \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Usunąć wÄ™zeÅ‚ \"%s\" oraz jego wÄ™zÅ‚y potomne?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Usunąć wÄ™zeÅ‚ \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9928,12 +10130,13 @@ msgstr "" "zostanÄ… przywrócone do domyÅ›lnych." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Edytowalne dzieci" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Wczytaj jako zastÄ™pczy" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Wyłączenie \"edytowalnej instancji\" sprawi, że wszystkie wÅ‚aÅ›ciwoÅ›ci wÄ™zÅ‚a " +"zostanÄ… przywrócone do domyÅ›lnych." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9980,9 +10183,8 @@ msgid "Remove Node(s)" msgstr "UsuÅ„ wÄ™zeÅ‚(y)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "ZmieÅ„ nazwÄ™ portu wyjÅ›ciowego" +msgstr "ZmieÅ„ typ wÄ™zÅ‚a/ów" #: editor/scene_tree_dock.cpp msgid "" @@ -10009,6 +10211,14 @@ msgid "Clear Inheritance" msgstr "Wyczyść dziedziczenie" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Edytowalne dzieci" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Wczytaj jako zastÄ™pczy" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Otwórz dokumentacjÄ™" @@ -10025,10 +10235,6 @@ msgid "Change Type" msgstr "ZmieÅ„ typ" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Rozszerz skrypt" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "ZmieÅ„ nadrzÄ™dny wÄ™zeÅ‚" @@ -10105,30 +10311,27 @@ msgid "Node configuration warning:" msgstr "Ostrzeżenie konfiguracji wÄ™zÅ‚a:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"WÄ™zeÅ‚ posiada połączenie(a) i grupÄ™(y).\n" +"WÄ™zeÅ‚ posiada %s połączeÅ„ i %s grup.\n" "Kliknij, aby wyÅ›wietlić panel sygnałów." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"WÄ™zeÅ‚ posiada połączenia.\n" +"WÄ™zeÅ‚ posiada %s połączenia.\n" "Kliknij, aby wyÅ›wietlić panel sygnałów." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"WÄ™zeÅ‚ jest w grupach.\n" +"WÄ™zeÅ‚ jest w %s grupach.\n" "Kliknij, aby wyÅ›wietlić panel grup." #: editor/scene_tree_editor.cpp @@ -10224,9 +10427,8 @@ msgid "Error loading script from %s" msgstr "Błąd Å‚adowania skryptu z %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Nadpisz" +msgstr "Nadpisuje" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10273,23 +10475,18 @@ msgid "Will load an existing script file." msgstr "Wczytaj istniejÄ…cy plik skryptu." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "JÄ™zyk" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Dziedziczy" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nazwa klasy" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Szablon" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Wbudowany skrypt" #: editor/script_create_dialog.cpp @@ -10305,26 +10502,54 @@ msgid "Bytes:" msgstr "Bajty:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Åšlad stosu" +msgid "Warning:" +msgstr "Ostrzeżenie:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Wybierz jeden lub wiÄ™cej elementów z listy by wyÅ›wietlić graf." +msgid "Error:" +msgstr "Błąd:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Błąd C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Błąd C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "ŹródÅ‚o C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "ŹródÅ‚o:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "ŹródÅ‚o C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Åšlad stosu" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Błędy" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Połączono z procesem potomnym" +msgid "Child process connected." +msgstr "Połączono z procesem potomnym." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Kopiuj błąd" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "PomiÅ„ punkty wstrzymania" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Sprawdź poprzedniÄ… instancjÄ™" @@ -10341,6 +10566,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Profiler sieci" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10353,6 +10582,10 @@ msgid "Monitors" msgstr "Monitory" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Wybierz jeden lub wiÄ™cej elementów z listy by wyÅ›wietlić graf." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Zużycie pamiÄ™ci wideo wedÅ‚ug zasobów:" @@ -10549,10 +10782,6 @@ msgid "Library" msgstr "Biblioteka" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Biblioteki: " @@ -10561,6 +10790,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Oczekiwano ciÄ…gu znaków o dÅ‚ugoÅ›ci 1 (znaku)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Argument kroku wynosi zero!" @@ -10578,7 +10811,7 @@ msgstr "Nie bazuje na pliku zasobów" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (missing @path)" -msgstr "Niepoprawna instancja formatu sÅ‚ownika (brak @path)" +msgstr "Niepoprawna instancja formatu sÅ‚ownika (brakujÄ…cy @path)" #: modules/gdscript/gdscript_functions.cpp msgid "Invalid instance dictionary format (can't load script at @path)" @@ -10713,6 +10946,15 @@ msgstr "Ustawienia GridMap" msgid "Pick Distance:" msgstr "Wybierz odlegÅ‚ość:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Filtruj siatki" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"Przypisz temu wÄ™zÅ‚owi GridMap zasób MeshLibrary, aby korzystać z jego siatek." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Nazwa klasy nie może być sÅ‚owem zastrzeżonym" @@ -10838,28 +11080,28 @@ msgid "Set Variable Type" msgstr "Ustaw typ zmiennej" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Nie może kolidować z nazwÄ… istniejÄ…cego wbudowanego typu." +msgstr "ZastÄ…p istniejÄ…cÄ… funkcjÄ™ wbudowanÄ…." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Utwórz nowy prostokÄ…t." +msgstr "Utwórz nowÄ… funkcjÄ™." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Zmienne:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Utwórz nowy prostokÄ…t." +msgstr "Utwórz nowÄ… zmiennÄ…." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "SygnaÅ‚y:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Utwórz nowy wielokÄ…t." +msgstr "Utwórz nowy sygnaÅ‚." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10886,6 +11128,11 @@ msgid "Add Function" msgstr "Dodaj funkcjÄ™" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "UsuÅ„ port wejÅ›ciowy" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Dodaj zmiennÄ…" @@ -10894,6 +11141,26 @@ msgid "Add Signal" msgstr "Dodaj sygnaÅ‚" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Dodaj port wejÅ›ciowy" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Dodaj port wyjÅ›ciowy" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "UsuÅ„ port wejÅ›ciowy" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "UsuÅ„ port wyjÅ›ciowy" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "ZmieÅ„ wyrażenie" @@ -10938,10 +11205,20 @@ msgid "Add Preload Node" msgstr "Dodaj wstÄ™pnie wczytany wÄ™zeÅ‚" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Dodaj wÄ™zeÅ‚(y) z drzewa" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Dodaj wÅ‚aÅ›ciwość Gettera" @@ -10966,6 +11243,11 @@ msgid "Connect Nodes" msgstr "Podłącz wÄ™zÅ‚y" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Odłącz wÄ™zÅ‚y grafu" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Połącz dane wÄ™zÅ‚a" @@ -10998,6 +11280,28 @@ msgid "Paste VisualScript Nodes" msgstr "Wklej wÄ™zeÅ‚ VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Nie można skopiować wÄ™zÅ‚a funkcji." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "ZmieÅ„ nazwÄ™ funkcji" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "UsuÅ„ funkcjÄ™" @@ -11018,16 +11322,17 @@ msgid "Editing Signal:" msgstr "Edytuj sygnaÅ‚:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Typ bazowy:" +msgid "Make Tool:" +msgstr "Aktywny w edytorze:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "CzÅ‚onkowie:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "DostÄ™pne wÄ™zÅ‚y:" +#, fuzzy +msgid "function_name" +msgstr "Funkcja:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11050,6 +11355,16 @@ msgid "Cut Nodes" msgstr "Wytnij WÄ™zÅ‚y" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "ZmieÅ„ nazwÄ™ funkcji" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "OdÅ›wież" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Edytuj czÅ‚onka" @@ -11147,6 +11462,10 @@ msgid "The package must have at least one '.' separator." msgstr "Paczka musi mieć co najmniej jednÄ… kropkÄ™ jako separator." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Wybierz urzÄ…dzenie z listy" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Plik wykonywalny ADB nie skonfigurowany w Ustawieniach Edytora." @@ -11173,10 +11492,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Projekt Androida nie jest zainstalowany do kompilacji. Zainstaluj z menu " -"Edytor." +"Szablon budowania Androida nie jest zainstalowany dla projektu. Zainstaluj " +"go z menu Projekt." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11261,6 +11581,10 @@ msgid "Required icon is not specified in the preset." msgstr "Wymagana ikona nie jest podana w profilu eksportu." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Uruchom w przeglÄ…darce" @@ -11454,7 +11778,7 @@ msgstr "" msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" -"WÄ™zeÅ‚ typu ParallaxLayer zadziaÅ‚a, jeÅ›li bÄ™dzie dzieckiem wÄ™zÅ‚a " +"WÄ™zeÅ‚ typu ParallaxLayer zadziaÅ‚a tylko jeÅ›li bÄ™dzie dzieckiem wÄ™zÅ‚a " "ParallaxBackground." #: scene/2d/particles_2d.cpp @@ -11929,10 +12253,6 @@ msgstr "" "otrzymaÅ‚ jakiÅ› rozmiar. W przeciwnym wypadku ustawi opcjÄ™ RenderTarget i " "przyporzÄ…dkuj jego teksturÄ™ dla któregoÅ› wÄ™zÅ‚a." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "WejÅ›cie" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "NieprawidÅ‚owe źródÅ‚o do podglÄ…du." @@ -11961,6 +12281,64 @@ msgstr "Varying może być przypisane tylko w funkcji wierzchoÅ‚ków." msgid "Constants cannot be modified." msgstr "StaÅ‚e nie mogÄ… być modyfikowane." +#~ msgid "Snap to Grid" +#~ msgstr "PrzyciÄ…gaj do siatki" + +#~ msgid "Add input +" +#~ msgstr "Dodaj wejÅ›cie+" + +#~ msgid "Language" +#~ msgstr "JÄ™zyk" + +#~ msgid "Inherits" +#~ msgstr "Dziedziczy" + +#~ msgid "Base Type:" +#~ msgstr "Typ bazowy:" + +#~ msgid "Available Nodes:" +#~ msgstr "DostÄ™pne wÄ™zÅ‚y:" + +#~ msgid "Input" +#~ msgstr "WejÅ›cie" + +#~ msgid "Properties:" +#~ msgstr "WÅ‚aÅ›ciwoÅ›ci:" + +#~ msgid "Methods:" +#~ msgstr "Metody:" + +#~ msgid "Theme Properties:" +#~ msgstr "WÅ‚aÅ›ciwoÅ›ci motywu:" + +#~ msgid "Enumerations:" +#~ msgstr "Wyliczenia:" + +#~ msgid "Constants:" +#~ msgstr "StaÅ‚e:" + +#~ msgid "Class Description:" +#~ msgstr "Opis klasy:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Opisy wÅ‚aÅ›ciwoÅ›ci:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Opisy metod:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "To zainstaluje projekt Androida dla dostosowanych wydaÅ„.\n" +#~ "W celu użycia go, musi zostać dołączony do każdego profilu eksportu." + +#~ msgid "Reverse sorting." +#~ msgstr "Odwróć sortowanie." + +#~ msgid "Delete Node(s)?" +#~ msgstr "UsuÅ„ wÄ™zeÅ‚(y)?" + #~ msgid "No Matches" #~ msgstr "Nie znaleziono" @@ -12178,9 +12556,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Go to parent folder" #~ msgstr "Przejdź folder wyżej" -#~ msgid "Select device from the list" -#~ msgstr "Wybierz urzÄ…dzenie z listy" - #~ msgid "Open Scene(s)" #~ msgstr "Otwórz scenÄ™/y" @@ -12241,9 +12616,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Utwórz instancjÄ™ wybranej sceny/scen jako dziecko wybranego wÄ™zÅ‚a." -#~ msgid "Warnings:" -#~ msgstr "Ostrzeżenia:" - #~ msgid "Font Size:" #~ msgstr "Rozmiar czcionki:" @@ -12288,9 +12660,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Select a split to erase it." #~ msgstr "Wybierz podziaÅ‚, by go usunąć." -#~ msgid "No name provided" -#~ msgstr "Nie podano nazwy" - #~ msgid "Add Node.." #~ msgstr "Dodaj wÄ™zeÅ‚..." @@ -12428,12 +12797,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Warning" #~ msgstr "Ostrzeżenie" -#~ msgid "Error:" -#~ msgstr "Błąd:" - -#~ msgid "Function:" -#~ msgstr "Funkcja:" - #~ msgid "Variable" #~ msgstr "Zmienna" @@ -12488,18 +12851,12 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Connect Graph Nodes" #~ msgstr "Połącz wÄ™zÅ‚y grafu" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Odłącz wÄ™zÅ‚y grafu" - #~ msgid "Remove Shader Graph Node" #~ msgstr "UsuÅ„ wÄ™zeÅ‚ Shader Graph" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplikuj wÄ™zÅ‚y grafu" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "UsuÅ„ wÄ™zeÅ‚(y) Shader Graph" - #~ msgid "Error: Missing Input Connections" #~ msgstr "Błąd: BrakujÄ…ce połączenia wejÅ›cia" @@ -12918,9 +13275,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Pick New Name and Location For:" #~ msgstr "Wybierz nowÄ… nazwÄ™ i lokacjÄ™ dla:" -#~ msgid "No files selected!" -#~ msgstr "Nie wybrano pliku!" - #~ msgid "Info" #~ msgstr "Informacje" @@ -13294,12 +13648,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Scaling to %s%%." #~ msgstr "Skalowanie do %s%%." -#~ msgid "Up" -#~ msgstr "Góra" - -#~ msgid "Down" -#~ msgstr "Dół" - #~ msgid "Bucket" #~ msgstr "Wiadro" @@ -13518,9 +13866,6 @@ msgstr "StaÅ‚e nie mogÄ… być modyfikowane." #~ msgid "Group" #~ msgstr "Grupa" -#~ msgid "Samples" -#~ msgstr "Sample" - #~ msgid "Compress (RAM - IMA-ADPCM)" #~ msgstr "Kompresja (RAM - IMA-ADPCM)" diff --git a/editor/translations/pr.po b/editor/translations/pr.po index e9d7b98fac..7f3761e68d 100644 --- a/editor/translations/pr.po +++ b/editor/translations/pr.po @@ -64,6 +64,34 @@ msgstr ": Evil argument of th' type: " msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -346,6 +374,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -475,15 +504,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Slit th' Node" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -616,7 +639,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -628,6 +651,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Slit th' Node" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -808,7 +836,8 @@ msgstr "Slit th' Node" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -914,7 +943,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -951,7 +981,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1217,7 +1247,7 @@ msgid "Delete Bus Effect" msgstr "Yar, Blow th' Selected Down!" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1410,7 +1440,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1464,7 +1496,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1642,6 +1674,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1717,6 +1750,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1866,6 +1900,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1874,50 +1909,29 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Yar, Blow th' Selected Down!" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Theme Properties" msgstr "Paste yer Node" #: editor/editor_help.cpp #, fuzzy -msgid "Theme Properties:" -msgstr "Paste yer Node" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Yer signals:" - -#: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" msgstr "Yer functions:" #: editor/editor_help.cpp -#, fuzzy -msgid "Enumerations:" -msgstr "Yer functions:" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1926,21 +1940,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Yar, Blow th' Selected Down!" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "Yar, Blow th' Selected Down!" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1955,10 +1960,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1969,10 +1970,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2042,8 +2039,8 @@ msgstr "" msgid "Copy Selection" msgstr "Yar, Blow th' Selected Down!" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2056,6 +2053,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2602,6 +2641,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2806,10 +2857,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2861,14 +2908,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2887,15 +2930,21 @@ msgstr "Discharge ye' Variable" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2958,6 +3007,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2968,6 +3021,11 @@ msgstr "" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Edit" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Ye be fixin' Signal:" @@ -2997,11 +3055,6 @@ msgstr "" msgid "Edit:" msgstr "Edit" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3101,6 +3154,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3127,14 +3184,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Edit" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3807,8 +3856,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3936,7 +3985,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4079,6 +4128,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Edit" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4259,6 +4315,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4435,7 +4492,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4607,6 +4663,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4811,6 +4869,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4823,10 +4885,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5104,20 +5162,29 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Slit th' Node" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Toggle ye Breakpoint" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Toggle ye Breakpoint" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5209,8 +5276,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5476,6 +5542,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6117,6 +6187,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6172,7 +6246,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6276,6 +6351,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Paste yer Node" @@ -6381,11 +6461,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6468,7 +6548,7 @@ msgstr "" msgid "Connections to method:" msgstr "Slit th' Node" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6551,6 +6631,11 @@ msgstr "Yar, Blow th' Selected Down!" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -6611,10 +6696,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Find ye Node Type" @@ -6945,6 +7026,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6978,6 +7063,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7211,6 +7300,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7261,6 +7354,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Forge yer Node!" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Yer functions:" @@ -7590,6 +7688,15 @@ msgid "Enable Priority" msgstr "Edit yer Variable:" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Paste yer Node" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7731,6 +7838,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Discharge ye' Signal" @@ -7904,20 +8016,116 @@ msgstr "" msgid "TileSet" msgstr "" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Change" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Rename Function" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Slit th' Node" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Change" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Change" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" +msgid "Add Output" msgstr "Add Signal" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" -msgstr "" - -#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7930,6 +8138,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Add Signal" @@ -8149,6 +8361,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8797,12 +9014,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9352,6 +9571,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9490,6 +9713,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9657,10 +9884,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9716,6 +9939,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9756,10 +9983,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Slit th' Node" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Slit th' Node" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9778,11 +10019,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9857,6 +10096,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Yer functions:" @@ -9874,10 +10121,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Yar, Blow th' Selected Down!" @@ -10119,25 +10362,18 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "Discharge ye' Variable" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Edit" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10153,27 +10389,60 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Error loading yer Calligraphy Pen." + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Slit th' Node" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Slit th' Node" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Errors" +msgid "Source:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "Child process connected." +msgstr "Slit th' Node" + +#: editor/script_editor_debugger.cpp +#, fuzzy msgid "Copy Error" msgstr "Slit th' Node" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Yar, Blow th' Selected Down!" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10190,6 +10459,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Slit th' Node" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10202,6 +10476,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10399,10 +10677,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10411,6 +10685,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "Blimey! Ye step argument be marooned!" @@ -10571,6 +10849,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Paste yer Node" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10718,6 +11005,10 @@ msgid "Create a new variable." msgstr "Yar, Blow th' Selected Down!" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Yer signals:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Yar, Blow th' Selected Down!" @@ -10748,6 +11039,11 @@ msgid "Add Function" msgstr "Add Function" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Discharge ye' Signal" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Add Variable" @@ -10756,6 +11052,26 @@ msgid "Add Signal" msgstr "Add Signal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Add Signal" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Add Signal" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Discharge ye' Signal" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Discharge ye' Signal" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Swap yer Expression" @@ -10804,10 +11120,20 @@ msgid "Add Preload Node" msgstr "Add yer Preload Node" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Add Node(s) From yer Tree" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Add yer Getter Property" @@ -10837,6 +11163,11 @@ msgstr "Slit th' Node" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Slit th' Node" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Slit th' Node" @@ -10871,6 +11202,27 @@ msgid "Paste VisualScript Nodes" msgstr "Paste yer Node" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Rename Function" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Discharge ye' Function" @@ -10891,16 +11243,17 @@ msgid "Editing Signal:" msgstr "Ye be fixin' Signal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "th' Base Type:" +msgid "Make Tool:" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "th' Members:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "yer Nodes doing nothin':" +#, fuzzy +msgid "function_name" +msgstr "Yer functions:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -10925,6 +11278,15 @@ msgstr "Slit th' Node" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Rename Function" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "th' Members:" @@ -11022,6 +11384,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11043,7 +11409,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11123,6 +11490,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11663,10 +12034,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11698,6 +12065,24 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Base Type:" +#~ msgstr "th' Base Type:" + +#~ msgid "Available Nodes:" +#~ msgstr "yer Nodes doing nothin':" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Paste yer Node" + +#, fuzzy +#~ msgid "Enumerations:" +#~ msgstr "Yer functions:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Yar, Blow th' Selected Down!" + #, fuzzy #~ msgid "Select Mode (Q)" #~ msgstr "Slit th' Node" diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po index 3a42ddaad7..ee6244fb84 100644 --- a/editor/translations/pt_BR.po +++ b/editor/translations/pt_BR.po @@ -66,12 +66,17 @@ # Gustavo da Silva Santos <gustavo94.rb@gmail.com>, 2019. # Rafael Roque <rafael.roquec@gmail.com>, 2019. # José Victor Dias Rodrigues <zoldyakopersonal@gmail.com>, 2019. +# Fupi Brazil <fupicat@gmail.com>, 2019. +# Julio Pinto Coelho <juliopcrj@gmail.com>, 2019. +# Perrottacooking <perrottacooking@gmail.com>, 2019. +# Wow Bitch <hahaj@itmailr.com>, 2019. +# Alan Tavares <alan1tavares@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: 2016-05-30\n" -"PO-Revision-Date: 2019-08-21 15:56+0000\n" -"Last-Translator: Julio Yagami <juliohenrique31501234@hotmail.com>\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" +"Last-Translator: Alan Tavares <alan1tavares@gmail.com>\n" "Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_BR/>\n" "Language: pt_BR\n" @@ -98,7 +103,7 @@ msgstr "Entrada inválida %i (não passou) na expressão" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "self não pode ser usado porque a instancia é nul0o (não passou)" +msgstr "self não pode ser usado porque a instancia é nula (não passou)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -120,6 +125,34 @@ msgstr "Argumento inválido do tipo '%s'" msgid "On call to '%s':" msgstr "Na chamada para '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Livre" @@ -189,9 +222,8 @@ msgid "Anim Change Call" msgstr "Alterar Chamada da Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Alterar Tempo de Quadro-Chave da Anim" +msgstr "Alterar Tempo de Quadro-Chave da Animação" #: editor/animation_track_editor.cpp #, fuzzy @@ -204,14 +236,12 @@ msgid "Anim Multi Change Transform" msgstr "Alterar Transformação da Anim" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Alterar Valor de Quadro-Chave da Anim" +msgstr "Alterar Valor de Quadro da Animação" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Alterar Chamada da Anim" +msgstr "Alterar Chamada da Animação" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -389,6 +419,7 @@ msgstr "Criar %d NOVAS trilhas e inserir chaves?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Criar" @@ -531,14 +562,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Aviso: Editando animação importada" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Selecionar Tudo" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Remover Seleção" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Selecione um nó do tipo AnimationPlayer para criar e editar animações." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -670,7 +696,8 @@ msgid "Scale Ratio:" msgstr "Razão de Escala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Selecionar trilhas para copiar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -682,6 +709,11 @@ msgstr "Selecionar trilhas para copiar:" msgid "Copy" msgstr "Copiar" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Remover Seleção" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Adiciona Clipe de Trilha de Ãudio" @@ -721,16 +753,16 @@ msgstr "%d ocorrência(s) substituÃda(s)." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy msgid "%d match." -msgstr "%d correspondência(s) encontrada(s)." +msgstr "%d correspondência." #: editor/code_editor.cpp editor/editor_help.cpp #, fuzzy msgid "%d matches." -msgstr "%d correspondência(s) encontrada(s)." +msgstr "%d correspondências." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" -msgstr "Corresponder Caixa" +msgstr "Caso de correspondência" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Whole Words" @@ -863,7 +895,8 @@ msgstr "Não foi possÃvel conectar o sinal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -964,7 +997,8 @@ msgstr "Pesquisar:" msgid "Matches:" msgstr "Correspondências:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -1005,7 +1039,7 @@ msgid "Resource" msgstr "Recurso" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Caminho" @@ -1178,22 +1212,20 @@ msgid "License" msgstr "Licença" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Licença de Terceiros" +msgstr "Licenças de Terceiros" #: 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"A Godot Engine conta com várias bibliotecas de código aberto e gratuitas de " -"terceiros, todas compatÃveis com os termos de sua licença MIT. O seguinte é " -"uma lista exaustiva de todos esses componentes de terceiros com suas " -"respectivas declarações de direitos autorais e termos de licença." +"Godot Engine depende de várias bibliotecas de código aberto e gratuitas de " +"terceiros, todas compatÃveis com os termos de sua licença MIT. A lista " +"seguinte é uma lista completa de todos esses componentes de terceiros com " +"suas respectivas declarações de direitos autorais e termos de licença." #: editor/editor_about.cpp msgid "All Components" @@ -1208,9 +1240,8 @@ msgid "Licenses" msgstr "Licenças" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Erro ao abrir arquivo de pacote, não está em formato zip." +msgstr "Erro ao abrir arquivo compactado, não está no formato ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1278,8 +1309,8 @@ msgid "Delete Bus Effect" msgstr "Excluir Efeito de Canal" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Pista de Ãudio, arraste e solte para reorganizar." +msgid "Drag & drop to rearrange." +msgstr "Arrastar e soltar para reorganizar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1469,7 +1500,9 @@ msgid "Add AutoLoad" msgstr "Adicionar Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Caminho:" @@ -1523,7 +1556,7 @@ msgstr "Criar Pasta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nome:" @@ -1697,6 +1730,7 @@ msgstr "Definir como atual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Novo" @@ -1767,6 +1801,7 @@ msgid "New Folder..." msgstr "Nova Pasta..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Atualizar" @@ -1916,6 +1951,7 @@ msgid "Class:" msgstr "Classe:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Herda de:" @@ -1924,46 +1960,26 @@ msgid "Inherited by:" msgstr "Herdado por:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Descrição breve:" +msgid "Brief Description" +msgstr "Breve Descrição" #: editor/editor_help.cpp msgid "Properties" msgstr "Propriedades" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propriedades:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Métodos:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propriedades do Tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propriedades do Tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Sinais:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerações" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerações:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1972,20 +1988,12 @@ msgid "Constants" msgstr "Constantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constantes:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descrição da Classe" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descrição da Classe:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutoriais Online:" +msgid "Online Tutorials" +msgstr "Tutoriais Online" #: editor/editor_help.cpp msgid "" @@ -2002,10 +2010,6 @@ msgid "Property Descriptions" msgstr "Descrições da Propriedade" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descrições da Propriedade:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2018,10 +2022,6 @@ msgid "Method Descriptions" msgstr "Descrições do Método" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descrições do Método:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2090,8 +2090,8 @@ msgstr "SaÃda:" msgid "Copy Selection" msgstr "Copiar Seleção" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2104,10 +2104,51 @@ msgstr "Limpar" msgid "Clear Output" msgstr "Limpar SaÃda" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Parar" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Iniciar" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Abaixo" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Acima" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nó" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Incoming RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Janela" +msgstr "Nova Janela" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2435,9 +2476,8 @@ msgid "Close Scene" msgstr "Fechar Cena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Fechar Cena" +msgstr "Reabrir Cena Fechada" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2554,16 +2594,15 @@ msgstr "Rodar Cena" #: editor/editor_node.cpp msgid "Close Tab" -msgstr "Fechar aba" +msgstr "Fechar Aba" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Fechar aba" +msgstr "Desfazer Fechar Aba" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" -msgstr "Fechas as outras abas" +msgstr "Fechas as Outras Abas" #: editor/editor_node.cpp msgid "Close Tabs to the Right" @@ -2692,18 +2731,28 @@ msgid "Project" msgstr "Projeto" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Configurações do Projeto" +msgstr "Configurações do Projeto..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controle de Versão" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Configurar Controle de Versão" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Desativar Controle de Versão" #: editor/editor_node.cpp msgid "Export..." msgstr "Exportar..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Instalar o Modelo de Compilação do Android" +msgstr "Instalar Modelo de Compilação Android..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2714,9 +2763,8 @@ msgid "Tools" msgstr "Ferramentas" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Explorador de Recursos Órfãos" +msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2819,9 +2867,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Configurações do Editor" +msgstr "Configurações do Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2856,14 +2903,12 @@ msgid "Open Editor Settings Folder" msgstr "Abrir Configurações do Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Gerenciar Recursos do Editor" +msgstr "Gerenciar Recursos do Editor..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Gerenciar Modelos de Exportação" +msgstr "Gerenciar Modelos de Exportação..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2919,10 +2964,6 @@ msgstr "Pausa a cena" msgid "Stop the scene." msgstr "Para a cena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Parar" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Roda a cena editada." @@ -2973,14 +3014,10 @@ msgid "Inspector" msgstr "Inspetor" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nó" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Expandir Painel Inferior" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "SaÃda" @@ -3000,18 +3037,22 @@ msgstr "Gerenciar Templates" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"Isso instalará o projeto Android para compilações personalizadas.\n" -"Note que, para usá-lo, ele precisa estar habilitado por predefinição de " -"exportação." #: editor/editor_node.cpp +#, fuzzy msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"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." @@ -3076,6 +3117,11 @@ msgstr "Abrir o próximo Editor" 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." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Criando Previsualizações das Malhas" @@ -3085,6 +3131,11 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Abrir script" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Editar Plugin" @@ -3113,11 +3164,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Editar:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Iniciar" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Medida:" @@ -3223,6 +3269,10 @@ msgstr "Escolha uma Viewport" msgid "New Script" msgstr "Novo Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Estender Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Novo %s" @@ -3249,13 +3299,6 @@ msgstr "Colar" msgid "Convert To %s" msgstr "Converter Para %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Abrir Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "O nó selecionado não é uma Viewport!" @@ -3355,6 +3398,8 @@ msgstr "Baixar" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Modelos de exportação oficiais não estão disponÃveis para compilações de " +"desenvolvimento." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3421,7 +3466,7 @@ msgstr "Sem resposta." #: editor/export_template_manager.cpp msgid "Request Failed." -msgstr "Solicitação Falhou." +msgstr "A Solicitação Falhou." #: editor/export_template_manager.cpp msgid "Redirect Loop." @@ -3437,23 +3482,20 @@ msgid "Download Complete." msgstr "Download completo." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Não pôde salvar tema ao arquivo:" +msgstr "Não é possÃvel remover o arquivo temporário:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Instalação de templates falhou. Os arquivos problemáticos podem ser achados " -"em '%s'." +"Falha na instalação de modelos. \n" +"Os arquivos de modelos problemáticos podem ser encontrados em '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Erro ao solicitar url: " +msgstr "Erro ao solicitar URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3640,9 +3682,8 @@ msgid "Move To..." msgstr "Mover Para..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nova Cena" +msgstr "Nova Cena..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3710,9 +3751,8 @@ msgid "Overwrite" msgstr "Sobrescrever" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Criar a partir de Cena" +msgstr "Criar Cena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3792,23 +3832,20 @@ msgid "Invalid group name." msgstr "Nome de grupo inválido." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Gerenciar Grupos" +msgstr "Renomear Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Excluir Imagem do Grupo" +msgstr "Remover Grupo" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "Nós fora do Grupo" +msgstr "Nodes fora do Grupo" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3821,7 +3858,7 @@ msgstr "Nós no Grupo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Grupos vazios serão removidos automaticamente." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3924,9 +3961,10 @@ msgstr " Arquivos" msgid "Import As:" msgstr "Importar como:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Predefinição..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Predefinições" #: editor/import_dock.cpp msgid "Reimport" @@ -4034,9 +4072,8 @@ msgid "MultiNode Set" msgstr "Múltiplos Nodes definidos" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Selecione um nó para editar Sinais e Grupos." +msgstr "Selecione um nó para editar seus sinais e grupos." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4054,7 +4091,7 @@ msgstr "Nome do Plugin:" msgid "Subfolder:" msgstr "Subpasta:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Idioma:" @@ -4196,6 +4233,12 @@ msgstr "Ponto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Abrir Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Abrir Nó de Animação" @@ -4369,6 +4412,7 @@ msgid "Change Animation Name:" msgstr "Alterar Nome da Animação:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Excluir Animação?" @@ -4546,7 +4590,6 @@ msgstr "Nome da Animação:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Erro!" @@ -4719,6 +4762,8 @@ msgid "Current:" msgstr "Atual:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Adicionar Entrada" @@ -4816,40 +4861,35 @@ msgstr "Não foi possÃvel resolver o hostname:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, return code:" -msgstr "Solicitação falhou, código de retorno:" +msgstr "A solicitação falhou, código de retorno:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "Solicitação Falhou." +msgstr "A solicitação falhou." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Não pôde salvar tema ao arquivo:" +msgstr "Não é possÃvel salvar a resposta para:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Erro ao gravar." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" -msgstr "Solicitação falhou, redirecionamentos demais" +msgstr "A solicitação falhou, muitos redirecionamentos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "Loop de Redirecionamento." +msgstr "Loop de redirecionamento." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Solicitação falhou, código de retorno:" +msgstr "A solicitação falhou, tempo esgotado" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Tempo" +msgstr "Tempo esgotado." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4928,24 +4968,22 @@ msgid "All" msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Re-importar..." +msgstr "Importar..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Plugins" +msgstr "Plugins..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Ordenar:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Inverter ordenação." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categoria:" @@ -4955,9 +4993,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Suporte..." +msgstr "Suporte" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4968,9 +5005,8 @@ msgid "Testing" msgstr "Testando" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Carregar..." +msgstr "Carregando..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5139,9 +5175,8 @@ msgid "Paste Pose" msgstr "Colar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Limpar Esqueletos" +msgstr "Limpar Guias" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5229,21 +5264,33 @@ msgid "Pan Mode" msgstr "Modo Panorâmico" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Modo de InÃcio:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Alternar o snap." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Usar Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opções de agarramento" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Alternar o snap." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Snap de Grade" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Encaixar na grade" +msgid "Snapping Options" +msgstr "Opções de agarramento" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5332,8 +5379,8 @@ msgid "View" msgstr "Visualizar" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Mostrar Grade" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5600,6 +5647,11 @@ msgstr "Alternar Curva Targente Linear" 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" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Cozinhar Sonda GI" @@ -5706,9 +5758,8 @@ msgid "Create Trimesh Collision Sibling" msgstr "Criar Colisão Trimesh Irmã" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Convex Collision Sibling(s)" -msgstr "Criar Colisão Convexa Irmã" +msgstr "Criar Colisão Convexa Irmã(s)" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -5879,26 +5930,23 @@ msgstr "Gerando Tempo (seg):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "As faces da geometria não contêm área." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "O nó não contém geometria (faces)." +msgstr "A geometria não contém nenhuma face." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" não herda de Espacial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "O nó não contém geometria." +msgstr "\"%s\" não contém geometria." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "O nó não contém geometria." +msgstr "\"%s\" não contém geometria de face." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6244,6 +6292,10 @@ msgid "Grid" msgstr "Grade" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar Grade" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurar a grade:" @@ -6299,7 +6351,8 @@ msgstr "Instância:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipo:" @@ -6337,9 +6390,8 @@ msgid "Error writing TextFile:" msgstr "Erro ao escrever arquivo:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Não se pôde achar tile:" +msgstr "Não foi possÃvel carregar o arquivo em:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6362,9 +6414,8 @@ msgid "Error Importing" msgstr "Erro ao importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Novo arquivo de texto ..." +msgstr "Novo arquivo de texto..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6400,6 +6451,11 @@ msgid "Find Next" msgstr "Localizar próximo" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Encontrar Anterior" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Filtrar scripts" @@ -6444,9 +6500,8 @@ msgid "Open..." msgstr "Abrir..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Abrir script" +msgstr "Reabrir Script Fechado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6502,14 +6557,14 @@ msgid "Toggle Scripts Panel" msgstr "Alternar Painel de Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Passo por cima" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Passo para dentro" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Passo por cima" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Pausar" @@ -6581,15 +6636,14 @@ msgid "Search Results" msgstr "Pesquisar resultados" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Limpar Cenas Recentes" +msgstr "Limpar Scripts Recentes" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Conexões com o método:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Origem" @@ -6661,7 +6715,6 @@ msgid "Bookmarks" msgstr "Marcadores" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Breakpoints" msgstr "Pontos de interrupção(Breakpoints)" @@ -6670,6 +6723,11 @@ msgstr "Pontos de interrupção(Breakpoints)" msgid "Cut" msgstr "Recortar" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Selecionar Tudo" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Excluir Linha" @@ -6707,9 +6765,8 @@ msgid "Complete Symbol" msgstr "Completar SÃmbolo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Selecionar Escala" +msgstr "Avaliar Seleção" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6728,10 +6785,6 @@ msgid "Auto Indent" msgstr "Auto Recuar" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Encontrar Anterior" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Procurar nos Arquivos..." @@ -6781,7 +6834,6 @@ msgid "Go to Previous Breakpoint" msgstr "Ir para ponto de interrupção anterior" #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" @@ -6958,12 +7010,10 @@ msgid "Rear" msgstr "Traseira" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" msgstr "Alinhar Transformação com a Vista" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" msgstr "Alinhar Rotação com a Vista" @@ -7020,9 +7070,8 @@ msgid "Audio Listener" msgstr "Ouvinte de Ãudio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Habilitar Filtragem" +msgstr "Ativar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7057,6 +7106,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidade da Visão Livre" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificador de velocidade da Visão Livre" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7078,7 +7132,7 @@ msgstr "Encaixar Nó(s) no Chão" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Não foi encontrado chão sólido onde encaixar a seleção." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7091,9 +7145,12 @@ msgstr "" "Alt + botão direito do mouse: Lista de Profundidade" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Modo Espaço Local (%s)" +msgstr "Usar Espaço Local" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Snap" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7190,9 +7247,8 @@ msgstr "Ver Grade" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Configurações" +msgstr "Configurações..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7324,6 +7380,11 @@ msgid "Simplification: " msgstr "Simplificação: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Produzir (Pixels): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Produzir (Pixels): " @@ -7372,6 +7433,11 @@ msgid "(empty)" msgstr "(vazio)" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Colar Frame" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animações:" @@ -7432,7 +7498,6 @@ msgid "Select/Clear All Frames" msgstr "Selecionar/Deselecionar Todos os Frames" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Create Frames from Sprite Sheet" msgstr "Criar Frames a partir da Planilha de Sprites" @@ -7570,14 +7635,12 @@ msgid "Submenu" msgstr "Submenu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Item 1" +msgstr "Subitem 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Item 2" +msgstr "Subitem 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7689,17 +7752,25 @@ msgid "Enable Priority" msgstr "Ativar Prioridade" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrar Arquivos..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+RMB: Desenhar Linha\n" -"Shift+Ctrl+RMB: Pintar Retângulo" +"Shift+LMB: Desenhar Linha\n" +"Shift+Ctrl+LMB: Pintar Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7758,21 +7829,20 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "Selecione a forma, subtile ou tile anterior." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region Mode" -msgstr "Modo de Região" +msgstr "Modo Região" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Collision Mode" -msgstr "Modo de Colisão" +msgstr "Modo Colisão" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Occlusion Mode" -msgstr "Modo de Oclusão" +msgstr "Modo Oclusão" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Navigation Mode" -msgstr "Modo de Navegação" +msgstr "Modo Navegação" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Bitmask Mode" @@ -7780,11 +7850,11 @@ msgstr "Modo Bitmask" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Priority Mode" -msgstr "Modo de Prioridade" +msgstr "Modo Prioridade" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Icon Mode" -msgstr "Modo de Ãcone" +msgstr "Modo Ãcone" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Z Index Mode" @@ -7823,6 +7893,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Exibir nomes de mosaico (segure a tecla Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Remover Texture Selecionada e TODAS PEÇAS que a usam." @@ -7871,16 +7946,15 @@ msgid "Delete polygon." msgstr "Excluir polÃgono." #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" "Shift+LMB: Set wildcard bit.\n" "Click on another Tile to edit it." msgstr "" -"BEM: ligar bit.\n" -"BDM: desligar bit.\n" -"Shift+BEM: Escolher wildcard.\n" +"LMB: ligar bit.\n" +"RMB: desligar bit.\n" +"Shift+LMB: Escolher bit wildcard.\n" "Clique em outro Mosaico para editá-lo." #: editor/plugins/tile_set_editor_plugin.cpp @@ -7993,16 +8067,119 @@ msgstr "Esta propriedade não pode ser alterada." 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" + +#: 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" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Comunidade" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Capitalizar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Criar um novo retângulo." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Alterar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Renomear" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Excluir" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Alterar" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Excluir Selecionados" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Salvar Tudo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Sincronizar Mudanças de Script" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Estado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "Nenhum arquivo selecionado!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Apenas GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Adicionar Entrada +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Adicionar saÃda +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8018,6 +8195,11 @@ msgid "Boolean" msgstr "Booleano" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "Amostras" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Adicionar porta de entrada" @@ -8099,12 +8281,10 @@ msgid "Light" msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Criar Nó Shader" +msgstr "Mostrar código de resultado do shader." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Create Shader Node" msgstr "Criar Nó Shader" @@ -8169,12 +8349,10 @@ msgid "SoftLight operator." msgstr "Operador SoftLight." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color constant." msgstr "Cor constante." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color uniform." msgstr "Cor uniforme." @@ -8235,6 +8413,14 @@ 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 " +"falso." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Retorna o resultado booleano da comparação entre dois parâmetros." @@ -8265,36 +8451,28 @@ msgstr "Parâmetro de entrada." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "" -"Parâmetro de entrada '%s' para os modos de sombreamento de vértice e " -"fragmento." +msgstr "Parâmetro de entrada '%s' para os modos de shader vértice e fragmento." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for fragment and light shader modes." -msgstr "" -"Parâmetro de entrada '%s' para os modos de sombreamento de fragmento e luz." +msgstr "Parâmetro de entrada '%s' para os modos de fragmento e sombreamento." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for fragment shader mode." -msgstr "Parâmetro de entrada '%s' para o modo de sombreamento de fragmento." +msgstr "Parâmetro de entrada '%s' para o modo de sombreamento." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for light shader mode." -msgstr "Parâmetro de entrada '%s' para o modo de sombreamento de luz." +msgstr "Parâmetro de entrada '%s' para o modo de sombreamento da luz." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for vertex shader mode." -msgstr "Parâmetro de entrada '%s' para o modo de sombreamento de vértice." +msgstr "Parâmetro de entrada '%s' para o modo de sombra do vértice." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for vertex and fragment shader mode." msgstr "" -"Parâmetro de entrada '%s' para o modo de sombreamento de vértice e fragmento." +"Parâmetro de entrada '%s' para os modos de sombra de vértice e fragmentada." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8394,16 +8572,14 @@ msgid "Base-e Exponential." msgstr "Exponencial de Base e." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Base-2 Exponential." -msgstr "Exponencial de Base-2." +msgstr "Exponencial na base 2." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." msgstr "Encontra o inteiro mais próximo que é menor ou igual ao parâmetro." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Computes the fractional part of the argument." msgstr "Calcula a parte decimal do argumento." @@ -8416,9 +8592,8 @@ msgid "Natural logarithm." msgstr "Logaritmo natural." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Base-2 logarithm." -msgstr "Logaritmo de Base-2." +msgstr "Logaritmo de base-2." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the greater of two values." @@ -8592,14 +8767,21 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"Calcular o produto externo de um par de vetores.\n" +"\n" +"OuterProduct trata o primeiro parâmetro \"c\" como um vetor coluna (matriz " +"com uma coluna) e o segundo parâmetro \"r\" como um vetor linha (matriz com " +"uma linha) e faz uma matriz algébrica linear multiplicar \"c * r\", " +"produzindo uma matriz cujo número de linhas é o número de componentes em \"c" +"\" e cujo número de colunas é o número de componentes em \"r\"." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." -msgstr "" +msgstr "Compõe transformação a partir de quatro vetores." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Decomposes transform to four vectors." -msgstr "" +msgstr "Decompõe transformação em quatro vetores." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8807,12 +8989,18 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" +"Expressão personalizada da Godot Shader Language, com quantidade " +"personalizada de portas de entrada e saÃda. Esta é uma injeção direta de " +"código na função vértice/fragmento/luz, não a use para escrever as " +"declarações de função internas." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." msgstr "" +"Retorna falloff baseado no produto escalar do normal da superfÃcie e da " +"direção de visualização da câmera (passe entradas associadas a ela)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8962,15 +9150,19 @@ msgid "Resources to export:" msgstr "Recursos para exportar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"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)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"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)" @@ -9405,9 +9597,8 @@ msgstr "" "ou '\"'" #: editor/project_settings_editor.cpp -#, fuzzy msgid "An action with the name '%s' already exists." -msgstr "A ação \"%s\" já existe!" +msgstr "Já existe uma ação com o nome '%s'." #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -9574,6 +9765,11 @@ 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" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Sobrescrever para Funcionalidade" @@ -9713,6 +9909,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Predefinição..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9881,10 +10081,6 @@ msgstr "Para Maiúscula" msgid "Reset" msgstr "Recompor" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Erro" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Reparentar Nó" @@ -9942,6 +10138,11 @@ msgid "Instance Scene(s)" msgstr "Instanciar Cena(s)" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Salvar Ramo como Cena" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instânciar Cena Filha" @@ -9984,8 +10185,23 @@ msgid "Make node as Root" msgstr "Tornar Raiz o Nó" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Excluir Nó(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Excluir Nós" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Deletar Nó(s) de Shader Graph(s)" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Excluir Nós" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10008,12 +10224,13 @@ msgstr "" "sejam revertidas para o padrão." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Filhos Editáveis" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Carregar como Substituto" +#, 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." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10090,6 +10307,14 @@ msgid "Clear Inheritance" msgstr "Limpar Herança" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Filhos Editáveis" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Carregar como Substituto" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Abrir a documentação" @@ -10108,10 +10333,6 @@ msgid "Change Type" msgstr "Mudar Tipo" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Estender Script" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Reparentar Nó" @@ -10378,23 +10599,18 @@ msgid "Will load an existing script file." msgstr "Carregar arquivo de script existente" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Linguagem" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Herda de" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nome da Classe" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Modelo" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script Embutido" #: editor/script_create_dialog.cpp @@ -10410,19 +10626,50 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Rastreamento de pilha" +#, fuzzy +msgid "Warning:" +msgstr "Avisos:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Escolhe um ou mais itens da lista para mostrar o gráfico." +msgid "Error:" +msgstr "Erro:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Copiar Erro" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Erro:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Origem" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Origem" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Origem" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Rastreamento de pilha" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Erros" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "Processo Filho Conectado" #: editor/script_editor_debugger.cpp @@ -10430,6 +10677,11 @@ msgid "Copy Error" msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Pontos de interrupção(Breakpoints)" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspecionar a Instância Anterior" @@ -10446,6 +10698,11 @@ msgid "Profiler" msgstr "Profilador" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Exportar Perfil" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10458,6 +10715,10 @@ msgid "Monitors" msgstr "Monitores" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Escolhe um ou mais itens da lista para mostrar o gráfico." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista de Uso Memória de VÃdeo por Recurso:" @@ -10656,10 +10917,6 @@ msgid "Library" msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Estado" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotecas: " @@ -10668,6 +10925,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "O argumento step é zero!" @@ -10822,6 +11083,15 @@ msgstr "Configurações do GridMap" msgid "Pick Distance:" msgstr "Escolha uma Distância:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Métodos de filtragem" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Nome da classe não pode ser uma palavra reservada" @@ -10966,6 +11236,10 @@ msgid "Create a new variable." msgstr "Criar um novo retângulo." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Sinais:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Criar um novo polÃgono." @@ -10995,6 +11269,11 @@ msgid "Add Function" msgstr "Adicionar Função" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Remover porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Adicionar Variável" @@ -11003,6 +11282,26 @@ msgid "Add Signal" msgstr "Adicionar Sinal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Adicionar porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Adicionar porta de saÃda" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Remover porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Remover porta de saÃda" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Alterar Expressão" @@ -11047,10 +11346,20 @@ msgid "Add Preload Node" msgstr "Adicionar Nó de Pré-carregamento" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Adicionar Nó(s) a Partir da Ãrvore" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Adicionar Getter de Propriedade" @@ -11075,6 +11384,11 @@ msgid "Connect Nodes" msgstr "Conectar Nodes" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Desconectar Nodes de Grafos" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Conectar dados do nó" @@ -11107,6 +11421,28 @@ msgid "Paste VisualScript Nodes" msgstr "Colar Nodes VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Não é possÃvel copiar o nó de função." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Renomear Função" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Remover Função" @@ -11127,16 +11463,18 @@ msgid "Editing Signal:" msgstr "Editando Sinal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipo de Base:" +#, fuzzy +msgid "Make Tool:" +msgstr "Tornar Local" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membros:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodes DisponÃveis:" +#, fuzzy +msgid "function_name" +msgstr "Função:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11160,6 +11498,16 @@ msgid "Cut Nodes" msgstr "Recortar Nodes" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Renomear Função" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Atualizar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Editar Membro" @@ -11261,6 +11609,10 @@ msgid "The package must have at least one '.' separator." msgstr "O pacote deve ter pelo menos um separador '.'." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Selecione um dispositivo da lista" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "Executável ADB não configurado nas opções do Editor." @@ -11283,9 +11635,13 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" +"O modelo de compilação do Android não foi encontrado, por favor instale " +"modelos relevantes." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11311,7 +11667,7 @@ msgstr "" #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Construindo Projeto Android (gradle)" #: platform/android/export/export.cpp msgid "" @@ -11365,6 +11721,10 @@ msgid "Required icon is not specified in the preset." msgstr "Ãcone necessário não especificado na predefinição." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Rodar no Navegador" @@ -12043,10 +12403,6 @@ msgstr "" "para que ele possa ter um tamanho. Caso contrário, defina-o como destino de " "render e atribua sua textura interna a algum nó para exibir." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrada" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12077,6 +12433,65 @@ msgstr "Variáveis só podem ser atribuÃdas na função de vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem serem modificadas." +#~ msgid "Snap to Grid" +#~ msgstr "Encaixar na grade" + +#~ msgid "Add input +" +#~ msgstr "Adicionar Entrada +" + +#~ msgid "Language" +#~ msgstr "Linguagem" + +#~ msgid "Inherits" +#~ msgstr "Herda de" + +#~ msgid "Base Type:" +#~ msgstr "Tipo de Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodes DisponÃveis:" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Properties:" +#~ msgstr "Propriedades:" + +#~ msgid "Methods:" +#~ msgstr "Métodos:" + +#~ msgid "Theme Properties:" +#~ msgstr "Propriedades do Tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerações:" + +#~ msgid "Constants:" +#~ msgstr "Constantes:" + +#~ msgid "Class Description:" +#~ msgstr "Descrição da Classe:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descrições da Propriedade:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descrições do Método:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Isso instalará o projeto Android para compilações personalizadas.\n" +#~ "Note que, para usá-lo, ele precisa estar habilitado por predefinição de " +#~ "exportação." + +#~ msgid "Reverse sorting." +#~ msgstr "Inverter ordenação." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Excluir Nó(s)?" + #~ msgid "No Matches" #~ msgstr "Sem Correspondências" @@ -12257,9 +12672,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Go to parent folder" #~ msgstr "Ir para pasta pai" -#~ msgid "Select device from the list" -#~ msgstr "Selecione um dispositivo da lista" - #~ msgid "Open Scene(s)" #~ msgstr "Abrir Cena(s)" @@ -12320,9 +12732,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Instanciar a(s) cena(s) selecionada como filho do nó selecionado." -#~ msgid "Warnings:" -#~ msgstr "Avisos:" - #~ msgid "Font Size:" #~ msgstr "Tamanho da Fonte:" @@ -12364,9 +12773,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Select a split to erase it." #~ msgstr "Selecione um item de configuração primeiro!" -#~ msgid "No name provided" -#~ msgstr "Nenhum nome fornecido" - #~ msgid "Add Node.." #~ msgstr "Adicionar Nó.." @@ -12507,12 +12913,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Warning" #~ msgstr "Aviso" -#~ msgid "Error:" -#~ msgstr "Erro:" - -#~ msgid "Function:" -#~ msgstr "Função:" - #~ msgid "Variable" #~ msgstr "Variável" @@ -12579,9 +12979,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Connect Graph Nodes" #~ msgstr "Conectar Nodes de Grafos" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Desconectar Nodes de Grafos" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Remover Nó de Shader Graph" @@ -12591,9 +12988,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplicar Nó(s) de Grafo(s)" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Deletar Nó(s) de Shader Graph(s)" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Erro: VÃnculo de Conexão CÃclico" @@ -13041,9 +13435,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Pick New Name and Location For:" #~ msgstr "Escolha Novo Nome e Localização Para:" -#~ msgid "No files selected!" -#~ msgstr "Nenhum arquivo selecionado!" - #~ msgid "Info" #~ msgstr "Informação" @@ -13442,12 +13833,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Scaling to %s%%." #~ msgstr "Escalonando para %s%%." -#~ msgid "Up" -#~ msgstr "Acima" - -#~ msgid "Down" -#~ msgstr "Abaixo" - #~ msgid "Bucket" #~ msgstr "Balde" @@ -13722,9 +14107,6 @@ msgstr "Constantes não podem serem modificadas." #~ msgid "Group" #~ msgstr "Grupo" -#~ msgid "Samples" -#~ msgstr "Amostras" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Modo de Conversão de Amostras (arquivos .wav):" diff --git a/editor/translations/pt_PT.po b/editor/translations/pt_PT.po index 7016f39d39..41de4d76bd 100644 --- a/editor/translations/pt_PT.po +++ b/editor/translations/pt_PT.po @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-07-29 19:20+0000\n" +"PO-Revision-Date: 2019-10-04 03:16+0000\n" "Last-Translator: João Lopes <linux-man@hotmail.com>\n" "Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/" "godot-engine/godot/pt_PT/>\n" @@ -27,7 +27,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 3.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -69,6 +69,34 @@ msgstr "Argumentos inválidos para construir '%s'" msgid "On call to '%s':" msgstr "Em chamada para '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Livre" @@ -79,7 +107,7 @@ msgstr "Equilibrado" #: editor/animation_bezier_editor.cpp msgid "Mirror" -msgstr "Espelhar" +msgstr "Espelho" #: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp msgid "Time:" @@ -138,29 +166,24 @@ msgid "Anim Change Call" msgstr "Anim Mudar Chamada" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Time" -msgstr "Anim Mudar Tempo do Keyframe" +msgstr "Anim Multi Mudar Tempo do Keyframe" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transition" -msgstr "Anim Mudar Transição" +msgstr "Anim Multi Mudar Transição" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Transform" -msgstr "Anim Mudar Transformação" +msgstr "Anim Multi Mudar Transformação" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Keyframe Value" -msgstr "Anim Mudar Valor do Keyframe" +msgstr "Anim Multi Mudar Valor do Keyframe" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Anim Multi Change Call" -msgstr "Anim Mudar Chamada" +msgstr "Anim Multi Mudar Chamada" #: editor/animation_track_editor.cpp msgid "Change Animation Length" @@ -338,6 +361,7 @@ msgstr "Criar %d NOVAS pistas e inserir chaves?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Criar" @@ -481,14 +505,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Aviso: A editar animação importada" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Selecionar tudo" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Selecionar Nenhum" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Selecione um nó AnimationPlayer para criar e editar animações." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -620,7 +639,8 @@ msgid "Scale Ratio:" msgstr "Proporção de Escala:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Selecionar pistas a copiar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -632,6 +652,11 @@ msgstr "Selecionar pistas a copiar:" msgid "Copy" msgstr "Copiar" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Selecionar Nenhum" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Adicionar Clip da Pista Ãudio" @@ -669,14 +694,12 @@ msgid "Replaced %d occurrence(s)." msgstr "SubstituÃdo %d ocorrência(s)." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "Encontrada(s) %d correspondência(s)." +msgstr "%d correspondência." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "Encontrada(s) %d correspondência(s)." +msgstr "%d correspondências." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -814,7 +837,8 @@ msgstr "ImpossÃvel conectar sinal" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -915,7 +939,8 @@ msgstr "Procurar:" msgid "Matches:" msgstr "Correspondências:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -956,7 +981,7 @@ msgid "Resource" msgstr "Recurso" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Caminho" @@ -1129,12 +1154,10 @@ msgid "License" msgstr "Licença" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Licença de Terceiros" +msgstr "Licenças de Terceiros" #: 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 " @@ -1159,9 +1182,8 @@ msgid "Licenses" msgstr "Licenças" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Error ao abrir Ficheiro comprimido, não está no formato zip." +msgstr "Erro ao abrir ficheiro comprimido, não está no formato ZIP." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1229,8 +1251,8 @@ msgid "Delete Bus Effect" msgstr "Apagar Efeito de Barramento" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Barramento de áudio, arrastar e largar para reorganizar." +msgid "Drag & drop to rearrange." +msgstr "Arrastar e largar para reorganizar." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1421,7 +1443,9 @@ msgid "Add AutoLoad" msgstr "Adicionar Carregamento Automático" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Caminho:" @@ -1475,7 +1499,7 @@ msgstr "Criar Pasta" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nome:" @@ -1650,6 +1674,7 @@ msgstr "Tornar Atual" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Novo" @@ -1720,6 +1745,7 @@ msgid "New Folder..." msgstr "Nova Diretoria..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Atualizar" @@ -1795,32 +1821,28 @@ msgid "Move Favorite Down" msgstr "Mover Favorito para Baixo" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to previous folder." -msgstr "Ir para a pasta acima." +msgstr "Ir para a pasta anterior." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to next folder." -msgstr "Ir para a pasta acima." +msgstr "Ir para a pasta seguinte." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Go to parent folder." msgstr "Ir para a pasta acima." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Refresh files." -msgstr "Procurar ficheiros" +msgstr "Atualizar ficheiros." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." msgstr "(Não) tornar favorita atual pasta." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Toggle the visibility of hidden files." -msgstr "Alternar visibilidade de ficheiros escondidos." +msgstr "Alternar a visibilidade de ficheiros escondidos." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a grid of thumbnails." @@ -1873,6 +1895,7 @@ msgid "Class:" msgstr "Classe:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Herdar:" @@ -1881,46 +1904,26 @@ msgid "Inherited by:" msgstr "Herdado por:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Breve Descrição:" +msgid "Brief Description" +msgstr "Breve Descrição" #: editor/editor_help.cpp msgid "Properties" msgstr "Propriedades" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Propriedades:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Métodos" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Métodos:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Propriedades do Tema" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Propriedades do Tema:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Sinais:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerações" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerações:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1929,20 +1932,12 @@ msgid "Constants" msgstr "Constantes" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constantes:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Descrição da Classe" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Descrição da Classe:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Tutoriais Online:" +msgid "Online Tutorials" +msgstr "Tutoriais Online" #: editor/editor_help.cpp msgid "" @@ -1959,10 +1954,6 @@ msgid "Property Descriptions" msgstr "Descrições da Propriedade" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Descrições da Propriedade:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1975,10 +1966,6 @@ msgid "Method Descriptions" msgstr "Descrições do Método" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Descrições do Método:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2047,8 +2034,8 @@ msgstr "SaÃda:" msgid "Copy Selection" msgstr "Copiar Seleção" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2061,9 +2048,51 @@ msgstr "Limpar" msgid "Clear Output" msgstr "Limpar SaÃda" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Parar" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "InÃcio" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Para baixo" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Para cima" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nó" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "RPC recebido" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "RSET recebido" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "RPC enviado" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "RSET enviado" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Nova Janela" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2324,7 +2353,7 @@ msgstr "Esta operação não pode ser efetuada sem um Nó raiz." #: editor/editor_node.cpp msgid "Export Tile Set" -msgstr "Exportar conjunto de tiles" +msgstr "Exportar conjunto de Tiles" #: editor/editor_node.cpp msgid "This operation can't be done without a selected node." @@ -2393,9 +2422,8 @@ msgid "Close Scene" msgstr "Fechar Cena" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Fechar Cena" +msgstr "Reabrir Cena Fechada" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2512,9 +2540,8 @@ msgid "Close Tab" msgstr "Fechar Separador" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Fechar Separador" +msgstr "Desfazer Fechar Separador" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2647,19 +2674,28 @@ msgid "Project" msgstr "Projeto" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Configurações de Projeto" +msgstr "Configurações de Projeto..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Controle de Versões" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Organizar Controle de Versões" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Desativar Controle de Versões" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "Exportar" +msgstr "Exportar..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Instalar Modelo Android de Compilação" +msgstr "Instalar Modelo Android de Compilação..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2670,9 +2706,8 @@ msgid "Tools" msgstr "Ferramentas" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Explorador de Recursos Órfãos" +msgstr "Explorador de Recursos Órfãos..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2774,9 +2809,8 @@ msgid "Editor" msgstr "Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Configurações do Editor" +msgstr "Configurações do Editor..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2812,14 +2846,12 @@ msgid "Open Editor Settings Folder" msgstr "Abrir Pasta de Configurações do Editor" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Gerir CaracterÃsticas do Editor" +msgstr "Gerir CaracterÃsticas do Editor..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Gerir Modelos de Exportação" +msgstr "Gerir Modelos de Exportação..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2875,10 +2907,6 @@ msgstr "Pausar a Cena" msgid "Stop the scene." msgstr "Para a Cena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Parar" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Executa a cena editada." @@ -2929,14 +2957,10 @@ msgid "Inspector" msgstr "Inspetor" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nó" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Expandir Painel do Fundo" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "SaÃda" @@ -2954,20 +2978,33 @@ msgstr "Gerir Modelos" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"O projeto Android para compilações personalizadas será instalado.\n" -"Para o utilizar, terá de ser ativado nas predefinições de exportação." +"O projeto será preparado para compilações personalizadas Android com a " +"instalação do modelo fonte em \"res://android/build\".\n" +"Poderá depois aplicar modificações e compilar o seu APK personalizado a " +"exportar (com adição de módulos, alterando AndroidManifest.xml, etc.).\n" +"Repare que de forma a criar compilações personalizadas em vez de usar APKs " +"pré-compilados, a opção \"Usar Compilação Personalizada\" deve ser ativada " +"na predefinição da exportação Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"O modelo de compilação Android está instalado e não será substituÃdo.\n" -"Remova manualmente a diretoria \"build\" antes de repetir esta operação." +"O modelo de compilação Android já está instalado neste projeto e não será " +"substituÃdo.\n" +"Remova manualmente a diretoria \"res://android/build\" antes de repetir esta " +"operação." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3029,6 +3066,10 @@ msgstr "Abrir o Editor seguinte" msgid "Open the previous Editor" msgstr "Abrir o Editor anterior" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Sub-recurso não encontrado." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "A criar pré-visualizações de Malha" @@ -3038,6 +3079,10 @@ msgid "Thumbnail..." msgstr "Miniatura..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Script principal:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Editar Plugin" @@ -3066,11 +3111,6 @@ msgstr "Estado:" msgid "Edit:" msgstr "Editar:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "InÃcio" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Medida:" @@ -3112,9 +3152,8 @@ msgid "Calls" msgstr "Chamadas" #: editor/editor_properties.cpp -#, fuzzy msgid "Edit Text:" -msgstr "Editar Tema" +msgstr "Editar Texto:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" @@ -3176,6 +3215,10 @@ msgstr "Escolha uma Vista" msgid "New Script" msgstr "Novo Script" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Estender Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Novo %s" @@ -3202,13 +3245,6 @@ msgstr "Colar" msgid "Convert To %s" msgstr "Converter em %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Abrir Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Nó selecionado não é uma Vista!" @@ -3287,9 +3323,8 @@ msgid "Import From Node:" msgstr "Importar do Nó:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" -msgstr "Transferir novamente" +msgstr "Retransferir" #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3307,6 +3342,8 @@ msgstr "Download" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Modelos de exportação oficiais não estão disponÃveis para compilações de " +"desenvolvimento." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3389,23 +3426,20 @@ msgid "Download Complete." msgstr "Download Completo." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "ImpossÃvel guardar tema para Ficheiro:" +msgstr "ImpossÃvel remover ficheiro temporário:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Falhou a instalação de Modelos. Os ficheiros problemáticos podem ser " -"encontrados em '%s'." +"Falhou a instalação de Modelos.\n" +"Os ficheiros problemáticos podem ser encontrados em '%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Erro ao solicitar url: " +msgstr "Erro ao solicitar URL:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3592,9 +3626,8 @@ msgid "Move To..." msgstr "Mover para..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Nova Cena" +msgstr "Nova Cena..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3662,9 +3695,8 @@ msgid "Overwrite" msgstr "Sobrescrever" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Criar a partir da Cena" +msgstr "Criar Cena" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3744,21 +3776,18 @@ msgid "Invalid group name." msgstr "Nome de grupo inválido." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "Gerir Grupos" +msgstr "Renomear Grupo" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Apagar Modelo" +msgstr "Apagar Grupo" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Grupos" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Nós fora do Grupo" @@ -3773,12 +3802,11 @@ msgstr "Nós no Grupo" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Grupos vazios serão removidos automaticamente." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Editor de Script" +msgstr "Editor de Grupo" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3877,9 +3905,9 @@ msgstr " Ficheiros" msgid "Import As:" msgstr "Importar Como:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Predefinido..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Predefinições" #: editor/import_dock.cpp msgid "Reimport" @@ -3986,9 +4014,8 @@ msgid "MultiNode Set" msgstr "Conjunto MultiNode" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Selecionar um Nó para editar sinais e grupos." +msgstr "Selecione um único nó para editar sinais e grupos." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4006,7 +4033,7 @@ msgstr "Nome do Plugin:" msgid "Subfolder:" msgstr "Sub-pasta:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Linguagem:" @@ -4147,6 +4174,12 @@ msgstr "Ponto" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Abrir Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Abrir Nó Animação" @@ -4319,6 +4352,7 @@ msgid "Change Animation Name:" msgstr "Mudar o Nome da Animação:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Apagar Animação?" @@ -4494,7 +4528,6 @@ msgstr "Nome da Animação:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Erro!" @@ -4666,6 +4699,8 @@ msgid "Current:" msgstr "Atual:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Adicionar entrada" @@ -4766,37 +4801,32 @@ msgid "Request failed, return code:" msgstr "Falha na solicitação, código de retorno:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "Pedido falhado." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "ImpossÃvel guardar tema para Ficheiro:" +msgstr "ImpossÃvel guardar resposta para:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Erro de escrita." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Falha na solicitação, demasiados redirecionamentos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Redirecionar ciclo." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Falha na solicitação, código de retorno:" +msgstr "Falha na solicitação, tempo expirado" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "Tempo" +msgstr "Tempo expirado." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4875,24 +4905,22 @@ msgid "All" msgstr "Todos" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Importar" +msgstr "Importar..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Plugins" +msgstr "Plugins..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Ordenar:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Inverter ordenação." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categoria:" @@ -4902,9 +4930,8 @@ msgid "Site:" msgstr "Site:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Suporte..." +msgstr "Suporte" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4915,9 +4942,8 @@ msgid "Testing" msgstr "Em teste" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Carregar..." +msgstr "A Carregar..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5083,9 +5109,8 @@ msgid "Paste Pose" msgstr "Colar Pose" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "Apagar Ossos" +msgstr "Limpar Guias" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5172,21 +5197,32 @@ msgid "Pan Mode" msgstr "Modo deslocamento" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Modo Régua" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Alternar Ajuste." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Usar Ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Opções de Ajuste" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Alternar Ajuste." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "Ajuste de grelha" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Ajustar à Grelha" +msgid "Snapping Options" +msgstr "Opções de Ajuste" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5272,11 +5308,11 @@ msgstr "Apagar Ossos Personalizados" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "View" -msgstr "Ver" +msgstr "Vista" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Mostrar grelha" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5543,6 +5579,11 @@ msgstr "Alternar tangente linear da curva" msgid "Hold Shift to edit tangents individually" msgstr "Pressione Shift para editar tangentes individualmente" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Clique direito: Apagar Ponto" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Consolidar Sonda GI" @@ -5818,26 +5859,23 @@ msgstr "Tempo de geração (s):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "As faces da geometria não contêm qualquer área." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "O Nó não contêm geometria (faces)." +msgstr "A geometria não contêm quaisquer faces." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" não descende de Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "O Nó não contêm geometria." +msgstr "\"%s\" não contem geometria." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "O Nó não contêm geometria." +msgstr "\"%s\" não contem geometria de faces." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6181,6 +6219,10 @@ msgid "Grid" msgstr "Grelha" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Mostrar grelha" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "Configurar Grelha:" @@ -6236,7 +6278,8 @@ msgstr "Instância:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tipo:" @@ -6274,9 +6317,8 @@ msgid "Error writing TextFile:" msgstr "Erro ao escrever TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Tile não encontrado:" +msgstr "ImpossÃvel carregar ficheiro em:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6299,9 +6341,8 @@ msgid "Error Importing" msgstr "Erro ao importar" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "Novo TextFile..." +msgstr "Novo Ficheiro de Texto..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6337,6 +6378,11 @@ msgid "Find Next" msgstr "Localizar Seguinte" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Localizar Anterior" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Scripts de filtro" @@ -6381,9 +6427,8 @@ msgid "Open..." msgstr "Abrir..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Abrir Script" +msgstr "Reabrir Script Fechado" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6439,14 +6484,14 @@ msgid "Toggle Scripts Panel" msgstr "Alternar painel de Scripts" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Passar sobre" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Passar dentro" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Passar sobre" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Interrupção" @@ -6518,15 +6563,14 @@ msgid "Search Results" msgstr "Resultados da Pesquisa" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "Limpar Cenas Recentes" +msgstr "Limpar Scripts Recentes" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "Conecções ao método:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Fonte" @@ -6606,6 +6650,11 @@ msgstr "Pontos de paragem" msgid "Cut" msgstr "Cortar" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Selecionar tudo" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Apagar linha" @@ -6643,9 +6692,8 @@ msgid "Complete Symbol" msgstr "Completar sÃmbolo" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Escalar Selecção" +msgstr "Avaliar Seleção" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6664,10 +6712,6 @@ msgid "Auto Indent" msgstr "Indentação automática" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Localizar Anterior" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Localizar em Ficheiros..." @@ -6802,7 +6846,7 @@ msgstr "A escalar: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Translating: " -msgstr "A traduzir: " +msgstr "A transladar: " #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotating %s degrees." @@ -6893,14 +6937,12 @@ msgid "Rear" msgstr "Trás" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "Alinhar com a Vista" +msgstr "Alinhar Transformação com Vista" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" -msgstr "Alinhar seleção com vista" +msgstr "Alinhar Rotação com Vista" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -6955,9 +6997,8 @@ msgid "Audio Listener" msgstr "Audição de áudio" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Ativar Filtragem" +msgstr "Ativar Doppler" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -6992,6 +7033,11 @@ msgid "Freelook Speed Modifier" msgstr "Modificador de velocidade Freelook" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Modificador de velocidade Freelook" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7013,7 +7059,7 @@ msgstr "Ajustar Nós ao Fundo" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Não foi encontrado um chão sólido para encaixar a seleção." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7026,9 +7072,12 @@ msgstr "" "Alt+RMB: Seleção lista de profundidade" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Modo Espaço Local (%s)" +msgstr "Usar Espaço Local" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Usar Ajuste" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7125,9 +7174,8 @@ msgstr "Ver grelha" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Configuração" +msgstr "Configuração..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7258,6 +7306,11 @@ msgid "Simplification: " msgstr "Simplificação: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "Crescer (Pixeis): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "Crescer (Pixeis): " @@ -7306,6 +7359,10 @@ msgid "(empty)" msgstr "(vazio)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "Mover Frame" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animações:" @@ -7503,14 +7560,12 @@ msgid "Submenu" msgstr "Sub-menu" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Item 1" +msgstr "Subitem 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Item 2" +msgstr "Subitem 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7622,17 +7677,24 @@ msgid "Enable Priority" msgstr "Ativar Prioridade" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Filtrar Tiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Dê um recurso TileSet a este TileMap para usar os seus Tiles." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Pintar Tile" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+RMB: Desenho de Linha\n" -"Shift+Ctrl+RMB: Pintura de Retângulo" +"Shift+LMB: Desenho de Linha\n" +"Shift+Ctrl+LMB: Pintura de Retângulo" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7752,12 +7814,19 @@ msgstr "Ativar o snap and show grid (configurável através do Inspector)." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Display Tile Names (Hold Alt Key)" -msgstr "Exibir nome dos tiles (segure tecla Alt)" +msgstr "Exibir nome dos Tiles (segure tecla Alt)" + +#: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Adicione ou selecione uma textura no painel esquerdo para editar os Tiles " +"vinculados." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" -"Remover textura selecionada? Todos os tiles que a usam serão removidos." +"Remover textura selecionada? Todos os Tiles que a usam serão removidos." #: editor/plugins/tile_set_editor_plugin.cpp msgid "You haven't selected a texture to remove." @@ -7765,7 +7834,7 @@ msgstr "Não selecionou uma textura para remover." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Create from scene? This will overwrite all current tiles." -msgstr "Criar a partir de cena? Irá substituir todos os tiles atuais." +msgstr "Criar a partir de cena? Irá substituir todos os Tiles atuais." #: editor/plugins/tile_set_editor_plugin.cpp msgid "Merge from scene?" @@ -7925,16 +7994,106 @@ msgstr "Esta propriedade não pode ser alterada." msgid "TileSet" msgstr "TileSet" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Não existem addons VCS disponÃveis." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Erro" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Nenhuma mensagem de gravação foi fornecida" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Nenhum ficheiro adicionado ao palco" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Gravar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "Addon VCS não foi inicializado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "Sistema de Controlo de Versões" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Inicializar" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "Ãrea de Palco" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "Detetar novas alterações" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Alterações" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Modificado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Renomeado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Apagado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Mudança de tipo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Palco Selecionado" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "Tudo no Palco" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Adicionar mensagem de gravação" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "Gravar Alterações" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "Ver diffs dos ficheiros antes de atualizá-los para a última versão" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Nenhum ficheiro diff está ativo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "Detetar alterações em ficheiro diff" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(Apenas GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Adicionar entrada +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Adicionar saÃda +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7950,6 +8109,10 @@ msgid "Boolean" msgstr "Lógico" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Adicionar porta de entrada" @@ -8031,9 +8194,8 @@ msgid "Light" msgstr "Luz" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Criar Nó Shader" +msgstr "Mostrar código-resultado do shader." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8164,6 +8326,13 @@ msgstr "" "falso." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Devolve um escalar associado se o valor lógico fornecido for verdadeiro ou " +"falso." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Devolve o resultado lógico da comparação entre dois parâmetros." @@ -8398,7 +8567,6 @@ msgid "Returns the square root of the parameter." msgstr "Devolve 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" @@ -8408,12 +8576,11 @@ msgid "" msgstr "" "Função SmoothStep( escalar(limite0), escalar(limite1), escalar(x) ).\n" "\n" -"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se x for maior que " +"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se 'x' for maior que " "'limite1'. Caso contrário o valor devolvido é interpolado entre 0.0 and 1.0 " "usando polinomiais Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8590,9 +8757,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 um escalar." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8619,7 +8785,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Devolve um 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" @@ -8629,12 +8794,11 @@ msgid "" msgstr "" "Função SmoothStep( vetor(limite0), vetor(limite1), vetor(x) ).\n" "\n" -"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se x for maior que " +"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se 'x' for maior que " "'limite1'. Caso contrário o valor devolvido é interpolado entre 0.0 and 1.0 " "usando polinomiais Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8644,12 +8808,11 @@ msgid "" msgstr "" "Função SmoothStep( escalar(limite0), escalar(limite1), vetor(x) ).\n" "\n" -"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se x for maior que " +"Devolve 0.0 se 'x' for menor que 'limite0' e 1.0 se 'x' for maior que " "'limite1'. Caso contrário o valor devolvido é interpolado entre 0.0 and 1.0 " "usando polinomiais Hermite." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8660,7 +8823,6 @@ msgstr "" "Devolve 0.0 se 'x' for menor que 'limite', senão devolve 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8723,6 +8885,9 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Expressão personalizada em Linguagem Godot Shader, colocada sobre o shader " +"resultante. Pode colocar várias definições de função e chamá-las depois nas " +"Expressões. Pode também declarar variantes, uniformes e constantes." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8873,15 +9038,19 @@ msgid "Resources to export:" msgstr "Recursos a exportar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para exportar Ficheiros não-recursos (separados por vÃrgula, ex: *." "json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Filtros para excluir Ficheiros do Projeto (separados por vÃrgula, ex: *." "json, *.txt)" @@ -9114,13 +9283,12 @@ msgid "Unnamed Project" msgstr "Projeto sem nome" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Importar Projeto existente" +msgstr "Projeto Inexistente" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Erro: Projeto inexistente no sistema de ficheiros." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9219,12 +9387,11 @@ msgstr "" "O conteúdo da pasta 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 %d projetos da lista?\n" +"Remover todos os projetos inexistentes da lista?\n" "O conteúdo das pastas não será modificado." #: editor/project_manager.cpp @@ -9246,12 +9413,11 @@ msgstr "" #: editor/project_manager.cpp msgid "Project Manager" -msgstr "Gestor de Projeto" +msgstr "Gestor de Projetos" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Projeto" +msgstr "Projetos" #: editor/project_manager.cpp msgid "Scan" @@ -9482,6 +9648,10 @@ msgid "Settings saved OK." msgstr "Configuração guardada." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "Evento Ação de Entrada movido" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Sobrepor por caracterÃstica" @@ -9618,6 +9788,10 @@ msgid "Plugins" msgstr "Plugins" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Predefinido..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Zero" @@ -9785,10 +9959,6 @@ msgstr "Para Maiúsculas" msgid "Reset" msgstr "Restaurar" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Erro" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Recolocar Nó" @@ -9846,6 +10016,10 @@ msgid "Instance Scene(s)" msgstr "Cena(s) da Instância" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Substituir com Cena-Ramo" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instanciar Cena filha" @@ -9886,8 +10060,20 @@ msgid "Make node as Root" msgstr "Tornar Nó Raiz" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Apagar Nó(s)?" +msgid "Delete %d nodes?" +msgstr "Apagar %d Nós?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Apagar Nó raiz \"%s\"?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Apagar Nó \"%s\" e filhos?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Apagar Nó \"%s\"?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9910,12 +10096,13 @@ msgstr "" "para os seus valores padrão." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Filhos editáveis" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Carregar como marcador de posição" +#, 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\" irá reverter todas as propriedades do Nó " +"para os seus valores padrão." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9962,9 +10149,8 @@ msgid "Remove Node(s)" msgstr "Remover Nó(s)" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Mudar nome de porta de saÃda" +msgstr "Mudar tipo de nó(s)" #: editor/scene_tree_dock.cpp msgid "" @@ -9991,6 +10177,14 @@ msgid "Clear Inheritance" msgstr "Limpar herança" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Filhos editáveis" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Carregar como marcador de posição" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Abrir documentação" @@ -10007,13 +10201,8 @@ msgid "Change Type" msgstr "Mudar tipo" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Estender Script" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "Recolocar Nó" +msgstr "Recolocar o Novo Nó" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10088,31 +10277,28 @@ msgid "Node configuration warning:" msgstr "Aviso de configuração do Nó:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Nó tem conexões e grupos.\n" -"Clique para mostrar doca dos sinais." +"Nó tem %s conexão(ões) e %s grupo(s).\n" +"Clique para mostrar doca de sinais." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Nó tem conexões.\n" -"Clique para mostrar doca dos sinais." +"Nó tem %s conexão(ões).\n" +"Clique para mostrar doca de sinais." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Nó está em grupo(s).\n" -"Clique para mostrar doca dos grupos." +"Nó está em %s grupo(s).\n" +"Clique para mostrar doca de grupos." #: editor/scene_tree_editor.cpp msgid "Open Script:" @@ -10207,9 +10393,8 @@ msgid "Error loading script from %s" msgstr "Erro ao carregar Script de '%s'" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "Sobrescrever" +msgstr "Sobrepõe" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10256,23 +10441,18 @@ msgid "Will load an existing script file." msgstr "Vai carregar ficheiro de script existente." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Linguagem" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Herdar" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Nome de classe" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Modelo" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Script incorporado" #: editor/script_create_dialog.cpp @@ -10288,26 +10468,54 @@ msgid "Bytes:" msgstr "Bytes:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "Rastreamento de Pilha" +msgid "Warning:" +msgstr "Aviso:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Escolha um ou mais itens da lista para exibir o gráfico." +msgid "Error:" +msgstr "Erro:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Erro C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Erro C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Código-fonte C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Código-fonte:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Código-fonte C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "Rastreamento de Pilha" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Erros" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "Processo filho conectado" +msgid "Child process connected." +msgstr "Processo filho conectado." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Copiar Erro" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "Saltar Pontos de Paragem" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Inspecionar instância anterior" @@ -10324,6 +10532,10 @@ msgid "Profiler" msgstr "Profiler" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "Traçador de Rede" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Monitor" @@ -10336,6 +10548,10 @@ msgid "Monitors" msgstr "Monitores" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Escolha um ou mais itens da lista para exibir o gráfico." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "Lista de utilização de Memória VÃdeo por recurso:" @@ -10532,10 +10748,6 @@ msgid "Library" msgstr "Biblioteca" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Bibliotecas: " @@ -10544,6 +10756,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Esperado um string de comprimento 1 (um caráter)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "O argumento \"step\" é zero!" @@ -10697,6 +10913,14 @@ msgstr "Configurações do GridMap" msgid "Pick Distance:" msgstr "Distância de escolha:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Meshes de filtro" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "Dá um recurso MeshLibrary a este GridMap para usar os seus meshes." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Nome de classe não pode ser uma palavra-chave reservada" @@ -10822,28 +11046,28 @@ msgid "Set Variable Type" msgstr "Definir tipo de variável" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Não pode coincidir com um nome de um tipo incorporado já existente." +msgstr "Sobrepõe-se a função incorporada." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Criar novo retângulo." +msgstr "Criar uma nova função." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Variáveis:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Criar novo retângulo." +msgstr "Criar uma nova variável." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Sinais:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Criar um novo polÃgono." +msgstr "Criar um novo sinal." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10870,6 +11094,11 @@ msgid "Add Function" msgstr "Adicionar Função" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Remover porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Adicionar Variável" @@ -10878,6 +11107,26 @@ msgid "Add Signal" msgstr "Adicionar Sinal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Adicionar porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Adicionar porta de saÃda" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Remover porta de entrada" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Remover porta de saÃda" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Mudar Expressão" @@ -10899,7 +11148,7 @@ msgstr "" msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature." msgstr "" "Pressione Ctrl para largar um Getter. Pressione Shift para largar uma " -"Assinatura genérica." +"assinatura genérica." #: modules/visual_script/visual_script_editor.cpp msgid "Hold %s to drop a simple reference to the node." @@ -10919,13 +11168,23 @@ msgstr "Pressione Ctrl para largar um Setter variável." #: modules/visual_script/visual_script_editor.cpp msgid "Add Preload Node" -msgstr "Adicionar Nó de carregamento prévio" +msgstr "Adicionar Nó de Pré-carregamento" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Adicionar Nó da Ãrvore" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Adicionar Propriedade Getter" @@ -10950,6 +11209,11 @@ msgid "Connect Nodes" msgstr "Conectar Nós" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Desconectar Nós do gráfico" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Conectar Dados de Nó" @@ -10982,6 +11246,28 @@ msgid "Paste VisualScript Nodes" msgstr "Colar Nós VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "ImpossÃvel copiar o Nó Função." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Mudar nome da Função" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Remover Função" @@ -11002,16 +11288,17 @@ msgid "Editing Signal:" msgstr "A editar Sinal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Tipo de Base:" +msgid "Make Tool:" +msgstr "Ferramenta Fazer:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membros:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nós DisponÃveis:" +#, fuzzy +msgid "function_name" +msgstr "Função:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11034,6 +11321,16 @@ msgid "Cut Nodes" msgstr "Cortar Nós" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Mudar nome da Função" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Atualizar" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Editar Membros" @@ -11075,22 +11372,22 @@ msgstr ": Argumentos inválidos: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableGet not found in script: " -msgstr "VariableGet não encontrada no Script: " +msgstr "VariableGet não encontrado no script: " #: modules/visual_script/visual_script_nodes.cpp msgid "VariableSet not found in script: " -msgstr "VariableSet não encontrada no Script: " +msgstr "VariableSet não encontrado no script: " #: modules/visual_script/visual_script_nodes.cpp msgid "Custom node has no _step() method, can't process graph." -msgstr "ImpossÃvel processar gráfico, Nó personalizado com Método no_step()." +msgstr "ImpossÃvel processar gráfico, Nó personalizado sem método _step()." #: modules/visual_script/visual_script_nodes.cpp msgid "" "Invalid return value from _step(), must be integer (seq out), or string " "(error)." msgstr "" -"Valor de retorno from _step() inválido, tem de ser inteiro (seq out), ou " +"Valor de retorno de _step() inválido, tem de ser inteiro (seq out), ou " "string (error)." #: modules/visual_script/visual_script_property_selector.cpp @@ -11131,6 +11428,10 @@ msgid "The package must have at least one '.' separator." msgstr "O pacote deve ter pelo menos um separador '.'." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Selecionar dispositivo da lista" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "O executável ADB não está configurado nas Configurações do Editor." @@ -11152,14 +11453,17 @@ msgstr "" #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "Caminho inválido para Android SDK no Editor de Configurações." +msgstr "" +"Caminho inválido de Android SDK para compilação personalizada no Editor de " +"Configurações." #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Projeto Android não está instalado para compilação. Instale-o no menu do " -"Editor." +"Modelo de compilação Android não está instalado neste projeto. Instale-o no " +"menu Projeto." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11249,6 +11553,10 @@ msgid "Required icon is not specified in the preset." msgstr "O Ãcone obrigatório não está especificado na predefinição." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Executar no Navegador" @@ -11343,7 +11651,7 @@ msgid "" "Only one visible CanvasModulate is allowed per scene (or set of instanced " "scenes). The first created one will work, while the rest will be ignored." msgstr "" -"Só é permitido um CanvasModulate visÃvel por Cena (ou grupo de Cenas " +"Só é permitido um CanvasModulate visÃvel por cena (ou grupo de cenas " "instanciadas). O primeiro a ser criado funcionará, enquanto o resto será " "ignorado." @@ -11911,10 +12219,6 @@ msgstr "" "Control de modo a que obtenha um tamanho. Caso contrário, torne-a um " "RenderTarget e atribua a sua textura interna a outro Nó para visualizar." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Entrada" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Fonte inválida para previsualização." @@ -11943,6 +12247,64 @@ msgstr "Variações só podem ser atribuÃdas na função vértice." msgid "Constants cannot be modified." msgstr "Constantes não podem ser modificadas." +#~ msgid "Snap to Grid" +#~ msgstr "Ajustar à Grelha" + +#~ msgid "Add input +" +#~ msgstr "Adicionar entrada +" + +#~ msgid "Language" +#~ msgstr "Linguagem" + +#~ msgid "Inherits" +#~ msgstr "Herdar" + +#~ msgid "Base Type:" +#~ msgstr "Tipo de Base:" + +#~ msgid "Available Nodes:" +#~ msgstr "Nós DisponÃveis:" + +#~ msgid "Input" +#~ msgstr "Entrada" + +#~ msgid "Properties:" +#~ msgstr "Propriedades:" + +#~ msgid "Methods:" +#~ msgstr "Métodos:" + +#~ msgid "Theme Properties:" +#~ msgstr "Propriedades do Tema:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerações:" + +#~ msgid "Constants:" +#~ msgstr "Constantes:" + +#~ msgid "Class Description:" +#~ msgstr "Descrição da Classe:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Descrições da Propriedade:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Descrições do Método:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "O projeto Android para compilações personalizadas será instalado.\n" +#~ "Para o utilizar, terá de ser ativado nas predefinições de exportação." + +#~ msgid "Reverse sorting." +#~ msgstr "Inverter ordenação." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Apagar Nó(s)?" + #~ msgid "No Matches" #~ msgstr "Sem combinações" @@ -12304,9 +12666,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgid "Go to parent folder" #~ msgstr "Ir para a pasta acima" -#~ msgid "Select device from the list" -#~ msgstr "Selecionar dispositivo da lista" - #~ msgid "Open Scene(s)" #~ msgstr "Abrir Cena(s)" @@ -12368,9 +12727,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgstr "" #~ "Instancie a(s) Cena(s) selecionada(s) como filha(s) do Nó selecionado." -#~ msgid "Warnings:" -#~ msgstr "Avisos:" - #~ msgid "Font Size:" #~ msgstr "Tamanho do tipo de letra:" @@ -12412,9 +12768,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgid "Select a split to erase it." #~ msgstr "Selecionar uma separação para a apagar." -#~ msgid "No name provided" -#~ msgstr "Nenhum nome foi fornecido" - #~ msgid "Add Node.." #~ msgstr "Adicionar Nó.." @@ -12547,12 +12900,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgid "Warning" #~ msgstr "Aviso" -#~ msgid "Error:" -#~ msgstr "Erro:" - -#~ msgid "Function:" -#~ msgstr "Função:" - #~ msgid "Variable" #~ msgstr "Variável" @@ -12619,9 +12966,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgid "Connect Graph Nodes" #~ msgstr "Conectar Nós do gráfico" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Desconectar Nós do gráfico" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Remover Nó Gráfico Shader" @@ -12631,9 +12975,6 @@ msgstr "Constantes não podem ser modificadas." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Duplicar Nó(s)" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Apagar Nó(s) Gráfico(s) Shader" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Erro: conexão cÃclica" diff --git a/editor/translations/ro.po b/editor/translations/ro.po index 93589e06f6..e3f53a56f3 100644 --- a/editor/translations/ro.po +++ b/editor/translations/ro.po @@ -7,12 +7,13 @@ # Nitroretro <nitroretro@protonmail.com>, 2018. # TigerxWood <TigerxWood@gmail.com>, 2018. # Grigore Antoniuc <grisa181@gmail.com>, 2018. +# Boby Ilea <boby.ilea@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2018-12-13 14:42+0100\n" -"Last-Translator: Nitroretro <nitroretro@protonmail.com>\n" +"PO-Revision-Date: 2019-10-26 03:53+0000\n" +"Last-Translator: Boby Ilea <boby.ilea@gmail.com>\n" "Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/" "godot/ro/>\n" "Language: ro\n" @@ -21,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" -"X-Generator: Poedit 2.2\n" +"X-Generator: Weblate 3.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -32,43 +33,71 @@ msgstr "" #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Bytes insuficienti pentru decodare bytes, sau format invalid" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Intrare invalida %i in expresie" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "self nu poate fi folosit deoarece instanÈ›a este nulă (nefurnizat)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "" +msgstr "Operanzi invalizi la operatorii %s, %s È™i %s" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "" +msgstr "Indice invalid de tip %s pentru tipul de bază %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "Indice numit '%s' invalid pentru tipul de bază %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Argumente invalide pentru a construi '%s'" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "" +msgstr "ÃŽn apelarea lui '%s':" + +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "Gratuit" +msgstr "Gratis" #: editor/animation_bezier_editor.cpp msgid "Balanced" -msgstr "" +msgstr "Echilibrat" #: editor/animation_bezier_editor.cpp msgid "Mirror" @@ -79,9 +108,8 @@ msgid "Time:" msgstr "Timp:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" -msgstr "Nume nou:" +msgstr "Valoare:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -96,14 +124,12 @@ msgid "Delete Selected Key(s)" msgstr "ÅžtergeÈ›i Cheile Selectate" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Add Bezier Point" -msgstr "Adaugă punct" +msgstr "Adaugă Punct Bezier" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Move Bezier Points" -msgstr "Deplasare punct" +msgstr "Mută Punct Bezier" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Duplicate Keys" @@ -353,6 +379,7 @@ msgstr "CreaÈ›i %d piste NOI È™i inseraÈ›i cheie?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "CreaÈ›i" @@ -486,15 +513,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Mod Selectare" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "SelectaÈ›i un Animator din Copacul Scenă să editaÈ›i animaÈ›ii." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -633,8 +655,9 @@ msgid "Scale Ratio:" msgstr "ProporÈ›ie Scalare:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Setează TranziÈ›ii la:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -645,6 +668,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Mod Selectare" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -833,7 +861,8 @@ msgstr "ConectaÈ›i Semnal:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -942,7 +971,8 @@ msgstr "CautaÈ›i:" msgid "Matches:" msgstr "Potriviri:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -985,7 +1015,7 @@ msgid "Resource" msgstr "Resursă" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Cale" @@ -1262,7 +1292,8 @@ msgid "Delete Bus Effect" msgstr "ȘtergeÈ›i Pista Efect" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Pista Audio, TrageÈ›i È™i PlasaÈ›i pentru a rearanja." #: editor/editor_audio_buses.cpp @@ -1463,7 +1494,9 @@ msgid "Add AutoLoad" msgstr "AdaugaÈ›i AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Cale:" @@ -1518,7 +1551,7 @@ msgstr "CreaÈ›i Director" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Nume:" @@ -1702,6 +1735,7 @@ msgstr "Curent:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1782,6 +1816,7 @@ msgid "New Folder..." msgstr "Director Nou..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "ReîmprospătaÈ›i" @@ -1937,6 +1972,7 @@ msgid "Class:" msgstr "Clasă:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "MoÈ™teneÈ™te:" @@ -1945,7 +1981,8 @@ msgid "Inherited by:" msgstr "MoÅŸtenit de:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Descriere Scurtă:" #: editor/editor_help.cpp @@ -1953,41 +1990,19 @@ msgid "Properties" msgstr "Proprietăți" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metode" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metode" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Proprietăți" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Proprietăți" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Semnale:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerări" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerări:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -1996,21 +2011,13 @@ msgid "Constants" msgstr "Constante" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Constante:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Descriere" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "Descriere:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Tutoriale Internet:" #: editor/editor_help.cpp @@ -2029,11 +2036,6 @@ msgid "Property Descriptions" msgstr "Descriere Proprietate:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Descriere Proprietate:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2048,11 +2050,6 @@ msgid "Method Descriptions" msgstr "Descrierea metodei:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Descrierea metodei:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2131,8 +2128,8 @@ msgstr "AfiÈ™are:" msgid "Copy Selection" msgstr "ElminaÈ›i SelecÈ›ia" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2145,6 +2142,50 @@ msgstr "Curăță" msgid "Clear Output" msgstr "Curăță AfiÈ™area" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "OpreÈ™te" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "Start!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Descarcă" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nod" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2743,6 +2784,19 @@ msgstr "Proiect" msgid "Project Settings..." msgstr "Setări ale Proiectului" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versiune:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2972,10 +3026,6 @@ msgstr "ÃŽntrerupere Scenă" msgid "Stop the scene." msgstr "OpreÈ™te scena." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "OpreÈ™te" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Rulează scena editată." @@ -3030,15 +3080,11 @@ msgid "Inspector" msgstr "Inspector" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nod" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Extinde toate" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "IeÈ™ire" @@ -3057,15 +3103,21 @@ msgstr "Administrează Șabloanele de Export" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3128,6 +3180,11 @@ msgstr "Deschide Editorul următor" msgid "Open the previous Editor" msgstr "Deschide Editorul anterior" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Nicio sursă de suprafață specificată." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Se creează Previzualizările Mesh-ului" @@ -3138,6 +3195,11 @@ msgstr "Miniatură..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Execută Scriptul" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Editează Poligon" @@ -3167,12 +3229,6 @@ msgstr "Stare:" msgid "Edit:" msgstr "Modificare" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "Start!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Măsura:" @@ -3271,6 +3327,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Execută Scriptul" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3297,14 +3358,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Deschidere în Editor" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -4003,8 +4056,9 @@ msgstr " FiÈ™iere" msgid "Import As:" msgstr "Importă Ca:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "Presetare..." #: editor/import_dock.cpp @@ -4138,7 +4192,7 @@ msgstr "Plugin-uri" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4292,6 +4346,13 @@ msgstr "Deplasare punct" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Deschidere în Editor" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4476,6 +4537,7 @@ msgid "Change Animation Name:" msgstr "Schimbă Numele AnimaÈ›iei:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Ștergi AnimaÈ›ia?" @@ -4659,7 +4721,6 @@ msgstr "Nume AnimaÈ›ie:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Eroare!" @@ -4836,6 +4897,8 @@ msgid "Current:" msgstr "Curent:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Adaugă Intrare(Input)" @@ -5051,6 +5114,10 @@ msgid "All" msgstr "Toate" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importă" @@ -5065,11 +5132,6 @@ msgid "Sort:" msgstr "Sorare:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Se Solicită..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Categorie:" @@ -5367,23 +5429,33 @@ msgstr "Mod ÃŽn Jur" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Modul de ExecuÈ›ie:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Comutare snapping" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Utilizează Snap" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "OpÈ›iuni Snapping" +msgid "Toggle grid snapping." +msgstr "Comutare snapping" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Snap pe grilă" +msgid "Use Grid Snap" +msgstr "Snap Grilă" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "OpÈ›iuni Snapping" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5481,8 +5553,8 @@ msgid "View" msgstr "Perspectivă" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Arată Grila" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5758,6 +5830,11 @@ msgstr "Comută Tangenta Liniară a Curbei" msgid "Hold Shift to edit tangents individually" msgstr "Èšine apăsat Shift pentru a edita individual tangentele" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Click Drept: Ștergere punct" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Procesează Sonda GI" @@ -6412,6 +6489,10 @@ msgid "Grid" msgstr "Grilă" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Arată Grila" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Configurare Snap" @@ -6473,7 +6554,8 @@ msgstr "Instanță :" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6583,6 +6665,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Proprietățile obiectului." @@ -6690,11 +6777,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6779,7 +6866,7 @@ msgstr "Curăță Scenele Recente" msgid "Connections to method:" msgstr "ConectaÈ›i la Nod:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Resursă" @@ -6865,6 +6952,11 @@ msgstr "Șterge puncte" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6923,10 +7015,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtrează fiÈ™ierele..." @@ -7263,6 +7351,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7298,6 +7390,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Utilizează Snap" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7535,6 +7631,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7587,6 +7687,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Mod Mutare" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "AnimaÈ›ie" @@ -7918,6 +8023,15 @@ msgid "Enable Priority" msgstr "Editează Filtrele" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrează fiÈ™ierele..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8065,6 +8179,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Elimină Obiectul Selectat" @@ -8240,18 +8359,116 @@ msgstr "Această operaÈ›ie nu se poate face fără o scenă." msgid "TileSet" msgstr "Set_de_Plăci..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Adaugă Intrare(Input)" +msgid "No commit message was provided" +msgstr "Niciun nume furnizat" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Comunitate" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "CreaÈ›i %s Nou" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "SchimbaÈ›i" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "RedenumeÈ™te" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "ȘtergeÈ›i" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "SchimbaÈ›i" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "ScalaÈ›i SelecÈ›ia" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "ÃŽnlocuiÈ›i Tot" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Sincronizează Modificările Scriptului" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Adaugă Intrare(Input)" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8269,6 +8486,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Adaugă Intrare(Input)" @@ -8495,6 +8716,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9149,12 +9375,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9717,6 +9945,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Deplasare punct pe curbă" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9856,6 +10089,10 @@ msgid "Plugins" msgstr "Plugin-uri" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Presetare..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -10027,10 +10264,6 @@ msgstr "" msgid "Reset" msgstr "ResetaÈ›i Zoom-area" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10086,6 +10319,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10127,10 +10364,24 @@ msgid "Make node as Root" msgstr "Salvează Scena" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Creează Nod" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Creează Nod" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10149,11 +10400,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10234,6 +10483,14 @@ msgid "Clear Inheritance" msgstr "Curăță Derivarea" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Deschide Recente" @@ -10253,11 +10510,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Execută Scriptul" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "CreaÈ›i %s Nou" @@ -10503,24 +10755,19 @@ msgid "Will load an existing script file." msgstr "ÃŽncărcaÅ£i o Schemă de Pistă Audio existentă." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Clasă:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Elimină Șablon" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Execută Scriptul" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10535,11 +10782,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Eroare!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Eroare!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Eroare!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Resursă" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Resursă" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Resursă" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10547,14 +10824,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Deconectat" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Șterge puncte" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10571,6 +10854,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Exportă Proiectul" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10583,6 +10871,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10785,10 +11077,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10797,6 +11085,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10951,6 +11243,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Proprietățile obiectului." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11091,6 +11392,10 @@ msgid "Create a new variable." msgstr "CreaÈ›i %s Nou" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Semnale:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Creează un nou poligon de la zero." @@ -11120,6 +11425,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Elimină punct" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11128,6 +11438,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Adaugă Intrare(Input)" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Adaugă Intrare(Input)" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Elimină punct" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Elimină punct" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11168,10 +11498,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11197,6 +11537,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Deconectat" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "ConectaÈ›i la Nod:" @@ -11231,6 +11576,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Creează Contur" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11251,15 +11617,16 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "Creează Oase" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Membri:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11284,6 +11651,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "FaceÈ›i FuncÈ›ia" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "ReîmprospătaÈ›i" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Membri" @@ -11379,6 +11756,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Selectează un dispozitiv din listă" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11400,7 +11781,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11479,6 +11861,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Execută în Browser" @@ -12025,11 +12411,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "Adaugă Intrare(Input)" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -12058,6 +12439,48 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Snap pe grilă" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Adaugă Intrare(Input)" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "Adaugă Intrare(Input)" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metode" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Proprietăți" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerări:" + +#~ msgid "Constants:" +#~ msgstr "Constante:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Descriere:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Descriere Proprietate:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Descrierea metodei:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Se Solicită..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12140,9 +12563,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "AccesaÈ›i Directorul Părinte" -#~ msgid "Select device from the list" -#~ msgstr "Selectează un dispozitiv din listă" - #~ msgid "Open Scene(s)" #~ msgstr "Deschide Scena(ele)" @@ -12206,9 +12626,6 @@ msgstr "" #~ msgid "Splits" #~ msgstr "Divizare cale" -#~ msgid "No name provided" -#~ msgstr "Niciun nume furnizat" - #~ msgid "Create Poly" #~ msgstr "Crează Poligon" @@ -12303,9 +12720,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Mută Pista Anim Jos" -#~ msgid "Set Transitions to:" -#~ msgstr "Setează TranziÈ›ii la:" - #~ msgid "Anim Track Rename" #~ msgstr "RedenumeÈ™te Pista Anim" diff --git a/editor/translations/ru.po b/editor/translations/ru.po index 3e61d4d683..4e6bd592b3 100644 --- a/editor/translations/ru.po +++ b/editor/translations/ru.po @@ -55,12 +55,14 @@ # knightpp <kotteam99@gmail.com>, 2019. # КонÑтантин Рин <email.to.rean@gmail.com>, 2019. # Maxim Samburskiy <alpacones@outlook.com>, 2019. +# Dima Koshel <form.eater@gmail.com>, 2019. +# Danil Alexeev <danil@alexeev.xyz>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" -"Last-Translator: КонÑтантин Рин <email.to.rean@gmail.com>\n" +"PO-Revision-Date: 2019-10-22 02:53+0000\n" +"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n" "Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/" "godot/ru/>\n" "Language: ru\n" @@ -69,7 +71,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -89,7 +91,7 @@ msgstr "Ðеправильный ввод %i (не был передан) в Ð²Ñ #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" msgstr "" -"self не может быть иÑпользован, потому что ÑкземплÑÑ€ равен null (не прошел)" +"self не может быть иÑпользован, потому что ÑкземплÑÑ€ равен null (не передан)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -111,6 +113,34 @@ msgstr "ÐедопуÑтимые аргументы Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ msgid "On call to '%s':" msgstr "Ðа вызове '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "Б" + +#: core/ustring.cpp +msgid "KiB" +msgstr "КиБ" + +#: core/ustring.cpp +msgid "MiB" +msgstr "МиБ" + +#: core/ustring.cpp +msgid "GiB" +msgstr "ГиБ" + +#: core/ustring.cpp +msgid "TiB" +msgstr "ТиБ" + +#: core/ustring.cpp +msgid "PiB" +msgstr "ПиБ" + +#: core/ustring.cpp +msgid "EiB" +msgstr "ÐиБ" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "ОÑвободить" @@ -343,11 +373,11 @@ msgstr "Ð’Ñтавить ключ" #: editor/animation_track_editor.cpp msgid "Duplicate Key(s)" -msgstr "Дублировать ключ(ключи)" +msgstr "Дублировать ключ(и)" #: editor/animation_track_editor.cpp msgid "Delete Key(s)" -msgstr "Удалить ключ(ключи)" +msgstr "Удалить ключ(и)" #: editor/animation_track_editor.cpp msgid "Change Animation Update Mode" @@ -381,6 +411,7 @@ msgstr "Создать %d новые дорожки и вÑтавить ключ #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Создать" @@ -496,6 +527,7 @@ msgstr "" "один трек." #: editor/animation_track_editor.cpp +#, fuzzy msgid "" "This animation belongs to an imported scene, so changes to imported tracks " "will not be saved.\n" @@ -507,19 +539,25 @@ msgid "" "Alternatively, use an import preset that imports animations to separate " "files." msgstr "" +"Ðта Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð½Ð¾ÑитÑÑ Ðº импортированной Ñцене, поÑтому Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² " +"импортированных дорожках не ÑохранÑÑŽÑ‚ÑÑ.\n" +"\n" +"Чтобы включить возможноÑть Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких дорожек, перейдите к " +"наÑтройкам импорта Ñцены и уÑтановите Ñледующие параметры\n" +"\"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ > Хранение(Animation > Storage)\" в меню \"Файлы(Files)\", " +"выберите \"ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ > СохранÑть пользовательÑкие дорожки(Animation > Keep " +"Custom Tracks)\", а затем импортируйте заново.\n" +"Кроме того, можно иÑпользовать предуÑтановку импорта, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€ÑƒÐµÑ‚ " +"анимацию Ð´Ð»Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð²." #: editor/animation_track_editor.cpp msgid "Warning: Editing imported animation" msgstr "Предупреждение: Редактирование импортированной анимации" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Выбрать вÑе" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "СброÑить выделение" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Путь к узлу AnimationPlayer, Ñодержащему анимацию, не задан." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -651,7 +689,8 @@ msgid "Scale Ratio:" msgstr "КоÑффициент маÑштабированиÑ:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Выбрать треки Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -663,6 +702,11 @@ msgstr "Выбрать треки Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ:" msgid "Copy" msgstr "Копировать" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "СброÑить выделение" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Добавить звуковую дорожку" @@ -847,7 +891,8 @@ msgstr "Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñигнал" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -948,7 +993,8 @@ msgstr "ПоиÑк:" msgid "Matches:" msgstr "СовпадениÑ:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -989,7 +1035,7 @@ msgid "Resource" msgstr "РеÑурÑ" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Путь" @@ -1261,7 +1307,8 @@ msgid "Delete Bus Effect" msgstr "Удалить Ñффект шины" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Ðудио шина, перетащите Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¸." #: editor/editor_audio_buses.cpp @@ -1452,7 +1499,9 @@ msgid "Add AutoLoad" msgstr "Добавить в автозагрузку" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Путь:" @@ -1463,7 +1512,7 @@ msgstr "Ð˜Ð¼Ñ Ð£Ð·Ð»Ð°:" #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp #: editor/editor_profiler.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "ИмÑ" +msgstr "Ðазвание" #: editor/editor_autoload_settings.cpp msgid "Singleton" @@ -1506,7 +1555,7 @@ msgstr "Создать папку" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "ИмÑ:" @@ -1588,9 +1637,8 @@ msgid "Script Editor" msgstr "Редактор Ñкриптов" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "Открыть библиотеку шаблонов" +msgstr "Библиотека реÑурÑов" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1692,6 +1740,7 @@ msgstr "Выбранный:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Ðовый" @@ -1715,7 +1764,6 @@ msgid "Class Options" msgstr "ОпиÑание клаÑÑа" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "New profile name:" msgstr "Ðовое имÑ:" @@ -1725,9 +1773,8 @@ msgid "Erase Profile" msgstr "Стереть облаÑть" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Profile(s)" -msgstr "Импортированный проект" +msgstr "Импортировать проект" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1769,6 +1816,7 @@ msgid "New Folder..." msgstr "ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Обновить" @@ -1905,6 +1953,8 @@ msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" msgstr "" +"МножеÑтво импортируемых объектов разного типа указывают на файл %s, импорт " +"прерван" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1919,6 +1969,7 @@ msgid "Class:" msgstr "КлаÑÑ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ÐаÑледует:" @@ -1927,7 +1978,8 @@ msgid "Inherited by:" msgstr "УнаÑледован:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Краткое опиÑание:" #: editor/editor_help.cpp @@ -1935,38 +1987,18 @@ msgid "Properties" msgstr "СвойÑтва" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "СвойÑтва:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Методы" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Методы:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "СвойÑтва темы" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "СвойÑтва темы:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Сигналы:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "ПеречиÑлениÑ" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "ПеречиÑлениÑ:" - -#: editor/editor_help.cpp msgid "enum " msgstr "перечиÑление " @@ -1975,19 +2007,12 @@ msgid "Constants" msgstr "КонÑтанты" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "КонÑтанты:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "ОпиÑание клаÑÑа" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "ОпиÑание клаÑÑа:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Онлайн уроки:" #: editor/editor_help.cpp @@ -2005,10 +2030,6 @@ msgid "Property Descriptions" msgstr "ОпиÑание ÑвойÑтв" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "ОпиÑание ÑвойÑтв:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2021,10 +2042,6 @@ msgid "Method Descriptions" msgstr "ОпиÑание методов" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "ОпиÑание методов:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2093,8 +2110,8 @@ msgstr "Вывод:" msgid "Copy Selection" msgstr "Копировать выделенное" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2107,6 +2124,48 @@ msgstr "ОчиÑтить" msgid "Clear Output" msgstr "ОчиÑтить вывод" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "ОÑтановить" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "ЗапуÑтить" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/Ñ" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "Вниз" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Вверх" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Узел" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "ВходÑщий RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "ВходÑщий RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "ИÑходÑщий RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "ИÑходÑщий RSET" + #: editor/editor_node.cpp editor/project_manager.cpp #, fuzzy msgid "New Window" @@ -2699,6 +2758,21 @@ msgstr "Проект" msgid "Project Settings..." msgstr "Параметры проекта" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "ВерÑиÑ:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Set Up Version Control" +msgstr "ÐаÑтроить управление верÑиÑми" + +#: editor/editor_node.cpp +#, fuzzy +msgid "Shut Down Version Control" +msgstr "Выключить управление верÑиÑми" + #: editor/editor_node.cpp msgid "Export..." msgstr "ÐкÑпортировать..." @@ -2924,10 +2998,6 @@ msgstr "ПриоÑтановить Ñцену" msgid "Stop the scene." msgstr "ОÑтановить Ñцену." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "ОÑтановить" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "ЗапуÑтить текущую Ñцену." @@ -2979,14 +3049,10 @@ msgid "Inspector" msgstr "ИнÑпектор" #: editor/editor_node.cpp -msgid "Node" -msgstr "Узел" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Развернуть нижнюю панель" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Вывод" @@ -3007,16 +3073,33 @@ msgstr "Управление шаблонами ÑкÑпорта" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" +"Ðто наÑтроит ваш проект Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких Ñборок Android путём уÑтановки " +"иÑходного шаблона в «res://android/build».\n" +"Затем вы можете модифицировать его (добавить модули, изменить " +"AndroidManifest.xml и Ñ‚. д.) и Ñоздать Ñвой ÑобÑтвенный пользовательÑкий APK " +"Ð´Ð»Ñ ÑкÑпорта.\n" +"Обратите внимание, что Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких Ñборок вмеÑто " +"иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ð¾Ñ‚Ð¾Ð²Ñ‹Ñ… APK-файлов при ÑкÑпорте на Android должна быть " +"включена Ð¾Ð¿Ñ†Ð¸Ñ Â«Ð˜Ñпользовать пользовательÑкую Ñборку»." #: editor/editor_node.cpp +#, fuzzy msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" +"Шаблон Ñборки Android уже уÑтановлен и не будет перезапиÑан.\n" +"Перед повторной попыткой удалите каталог \"build\" вручную." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3078,6 +3161,11 @@ msgstr "Открыть Ñледующий редактор" msgid "Open the previous Editor" msgstr "Открыть предыдущий редактор" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "ПоверхноÑть иÑточника не определена." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Создание предпроÑмотра" @@ -3087,6 +3175,11 @@ msgid "Thumbnail..." msgstr "Миниатюра..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Открыть Ñкрипт" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Редактировать дополнение" @@ -3115,11 +3208,6 @@ msgstr "СтатуÑ:" msgid "Edit:" msgstr "Редактировать:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "ЗапуÑтить" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Единица измерениÑ:" @@ -3225,6 +3313,10 @@ msgstr "Выберите Viewport" msgid "New Script" msgstr "Ðовый Ñкрипт" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "РаÑширить Ñкрипт" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Ðовый %s" @@ -3251,13 +3343,6 @@ msgstr "Ð’Ñтавить" msgid "Convert To %s" msgstr "Преобразовать в %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Открыть редактор" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Выбранный узел не Viewport!" @@ -3355,7 +3440,7 @@ msgstr "Загрузка" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Официальные шаблоны ÑкÑпорта недоÑтупны Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‡Ð¸Ñ… Ñборок." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3736,10 +3821,13 @@ msgid "Filters:" msgstr "Фильтры:" #: editor/find_in_files.cpp +#, fuzzy msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" +"Включает в ÑÐµÐ±Ñ Ñ„Ð°Ð¹Ð»Ñ‹ Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼Ð¸ раÑширениÑми. Добавьте или удалите их в " +"ProjectSettings." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3820,7 +3908,7 @@ msgstr "Узлы в Группе" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "ПуÑтые группы будут автоматичеÑки удалены." #: editor/groups_editor.cpp msgid "Group Editor" @@ -3923,9 +4011,10 @@ msgstr " Файлы" msgid "Import As:" msgstr "Импортировать как:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "ПредуÑтановка..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "ПредуÑтановки" #: editor/import_dock.cpp msgid "Reimport" @@ -4052,7 +4141,7 @@ msgstr "Ð˜Ð¼Ñ Ð”Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ:" msgid "Subfolder:" msgstr "Подпапка:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Язык:" @@ -4194,6 +4283,12 @@ msgstr "Точка" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Открыть редактор" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Открыть Узел Ðнимации" @@ -4364,6 +4459,7 @@ msgid "Change Animation Name:" msgstr "Изменить Ð¸Ð¼Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ð¸:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Удалить анимацию?" @@ -4542,7 +4638,6 @@ msgstr "Ðазвание анимации:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Ошибка!" @@ -4715,6 +4810,8 @@ msgid "Current:" msgstr "Выбранный:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Добавить вход" @@ -4826,7 +4923,7 @@ msgstr "Ðевозможно Ñохранить тему в файл:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Ошибка запиÑи." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4924,6 +5021,10 @@ msgid "All" msgstr "Ð’Ñе" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Переимпортировать..." @@ -4938,10 +5039,6 @@ msgid "Sort:" msgstr "Сортировать:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñортировка." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "КатегориÑ:" @@ -5089,10 +5186,13 @@ msgid "Presets for the anchors and margins values of a Control node." msgstr "ПредуÑтановки Ð´Ð»Ñ Ñкорей и Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ñтупов контрольного узла." #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy msgid "" "When active, moving Control nodes changes their anchors instead of their " "margins." msgstr "" +"ЕÑли активно, при перемещении узлов Control будут изменÑтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñкорей " +"вмеÑто отÑтупов." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Anchors only" @@ -5223,21 +5323,33 @@ msgid "Pan Mode" msgstr "Режим оÑмотра" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Режим запуÑка:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Переключить привÑзки." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "ИÑпользовать привÑзку" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Параметры ПривÑзки" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Переключить привÑзки." #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "ПривÑзка к Ñетке" +#, fuzzy +msgid "Use Grid Snap" +msgstr "ПривÑзка по Ñетке" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "Параметры ПривÑзки" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5330,8 +5442,8 @@ msgid "View" msgstr "Обзор" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Показать Ñетку" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5369,7 +5481,7 @@ msgstr "Кадрировать выбранное" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy msgid "Preview Canvas Scale" -msgstr "ПредпроÑмотр атлаÑа" +msgstr "ПредпроÑмотр маÑштаба холÑта" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5612,6 +5724,11 @@ msgstr "Переключить кривую линейный тангенÑ" msgid "Hold Shift to edit tangents individually" msgstr "Удерживайте Shift, чтобы изменить каÑательные индивидуально" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "ПКМ: Удалить точку" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Запечь GI пробу" @@ -5659,7 +5776,7 @@ msgstr "Создать вогнутую форму" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Failed creating shapes!" -msgstr "" +msgstr "Ðе удалоÑÑŒ Ñоздать форму!" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Convex Shape(s)" @@ -5888,8 +6005,9 @@ msgid "Generation Time (sec):" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ (Ñек):" #: editor/plugins/particles_editor_plugin.cpp +#, fuzzy msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Грани данной геометрии не Ñодержат никакой облаÑти." #: editor/plugins/particles_editor_plugin.cpp #, fuzzy @@ -5898,17 +6016,15 @@ msgstr "Узел не Ñодержит геометрии (грани)." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\" не наÑледуетÑÑ Ð¾Ñ‚ Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Узел не Ñодержит геометрии." +msgstr "\"%s\" не Ñодержит геометрии." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Узел не Ñодержит геометрии." +msgstr "\"%s\" не Ñодержит геометрии Ñ Ð³Ñ€Ð°Ð½Ñми." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6254,6 +6370,10 @@ msgid "Grid" msgstr "Сетка" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Показать Ñетку" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "ÐаÑтройки Ñетки:" @@ -6309,7 +6429,8 @@ msgstr "ÐкземплÑÑ€:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Тип:" @@ -6411,6 +6532,11 @@ msgid "Find Next" msgstr "Ðайти Ñледующее" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Ðайти предыдущее" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "СвойÑтва фильтра" @@ -6515,14 +6641,14 @@ msgid "Toggle Scripts Panel" msgstr "Переключить панель Ñкриптов" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Шаг через" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Шаг в" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Шаг через" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Пауза" @@ -6546,7 +6672,7 @@ msgstr "Открыть онлайн документацию Godot" #: editor/plugins/script_editor_plugin.cpp msgid "Request Docs" -msgstr "Запрашиваемые Документы" +msgstr "Проблема" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6605,7 +6731,7 @@ msgstr "ОчиÑтить поÑледние Ñцены" msgid "Connections to method:" msgstr "ПриÑоединить к узлу:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "ИÑточник" @@ -6686,6 +6812,11 @@ msgstr "Точки оÑтанова" msgid "Cut" msgstr "Вырезать" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Выбрать вÑе" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Удалить Ñтроку" @@ -6744,10 +6875,6 @@ msgid "Auto Indent" msgstr "ÐвтоотÑтуп" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Ðайти предыдущее" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Ðайти в файлах..." @@ -7076,6 +7203,11 @@ msgid "Freelook Speed Modifier" msgstr "Обзор модификатор ÑкороÑти" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Обзор модификатор ÑкороÑти" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7098,8 +7230,9 @@ msgid "Snap Nodes To Floor" msgstr "ПодравнÑть Узел Ñ ÐŸÐ¾Ð»Ð¾Ð¼" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Ðе удалоÑÑŒ найти Ñплошной пол, к которому можно привÑзать выделение." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7117,6 +7250,10 @@ msgid "Use Local Space" msgstr "Режим локального проÑтранÑтва (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "ИÑпользовать привÑзку" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Вид Снизу" @@ -7352,6 +7489,11 @@ msgid "Simplification: " msgstr "Упрощение: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "РоÑÑ‚ (пикÑели): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "РоÑÑ‚ (пикÑели): " @@ -7401,6 +7543,11 @@ msgid "(empty)" msgstr "(пуÑто)" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Ð’Ñтавить кадр" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Ðнимации:" @@ -7600,7 +7747,7 @@ msgstr "Отмеченный переключатель" #: editor/plugins/theme_editor_plugin.cpp msgid "Named Sep." -msgstr "" +msgstr "Имен. раздел." #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" @@ -7730,6 +7877,15 @@ msgid "Enable Priority" msgstr "Редактировать приоритет тайла" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ОтÑортировать файлы..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Задайте TileSet реÑÑƒÑ€Ñ Ñтому Tilemap чтобы иÑпользовать его тайлы." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "РиÑовать тайл" @@ -7876,6 +8032,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Отобразить имена плиток (удерживать нажатой клавишу Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Добавьте или выберите текÑтуру на левой панели, чтобы редактировать тайлы, " +"привÑзанные к ней." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Удалить выделенную текÑтуру? Ðто удалит вÑе тайлы, которые её иÑпользуют." @@ -8046,19 +8209,116 @@ msgstr "Ðто ÑвойÑтво не может быть изменено." msgid "TileSet" msgstr "Ðабор Тайлов" +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No VCS addons are available." +msgstr "Ð˜Ð¼Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÑкого узла, еÑли оно доÑтупно" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Ошибка" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Ðе указано Ñообщение коммита" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Ðе добавлены файлы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñ‚Ð°" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "Коммит" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "Плагин VCS не инициализирован" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "СиÑтема ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Инициализировать" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Staging area" +msgstr "ОблаÑть коммита" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Обнаружить новые изменениÑ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "ИзменениÑ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Изменено" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Переименовано" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Удалено" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Изменить" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Удалить выделенное" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Сохранить вÑÑ‘" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Добавьте Ñообщение коммита" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñ‚Ð°" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "СтатуÑ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "View file diffs before committing them to the latest version" +msgstr "ПроÑмотр различий в файлах перед коммитом" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "Файлы не выбраны!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(только GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Добавить вход" - -#: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy -msgid "Add output +" -msgstr "Добавить вход" +msgid "Add Output" +msgstr "Добавить выход +" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" @@ -8070,7 +8330,12 @@ msgstr "Вектор" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" -msgstr "" +msgstr "ЛогичеÑкое" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "СÑмплы" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" @@ -8123,9 +8388,8 @@ msgid "Set Uniform Name" msgstr "Задать единообразное имÑ" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Set Input Default Port" -msgstr "Задать Порт по умолчанию Ð´Ð»Ñ Ð’Ð²Ð¾Ð´Ð°" +msgstr "Задать входной порт по умолчанию" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add Node to Visual Shader" @@ -8176,7 +8440,7 @@ msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ñ†Ð²ÐµÑ‚Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." -msgstr "" +msgstr "Оператор цвета." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8197,85 +8461,96 @@ msgid "Sepia function." msgstr "Переименовать функцию" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Burn operator." -msgstr "" +msgstr "Оператор выгораниÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Darken operator." -msgstr "" +msgstr "Оператор затемнениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Difference operator." -msgstr "Только разница" +msgstr "Оператор разницы." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Dodge operator." -msgstr "" +msgstr "Оператор выцветаниÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "HardLight operator" -msgstr "" +msgstr "Оператор жёÑткого Ñвета." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Lighten operator." -msgstr "" +msgstr "Оператор оÑветлениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Overlay operator." -msgstr "" +msgstr "Оператор наложениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Screen operator." -msgstr "" +msgstr "Оператор Ñкрана." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "SoftLight operator." -msgstr "" +msgstr "Оператор мÑгкого Ñвета." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Color constant." -msgstr "ПоÑтоÑнный" +msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ ÐºÐ¾Ð½Ñтанта." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Color uniform." -msgstr "ОчиÑтить преобразование" +msgstr "Ð¦Ð²ÐµÑ‚Ð¾Ð²Ð°Ñ uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the %s comparison between two parameters." -msgstr "" +msgstr "Возвращает логичеÑкий результат ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ %s между Ð´Ð²ÑƒÐ¼Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "" +msgstr "Равно (==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "" +msgstr "Больше (>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "" +msgstr "Больше или равно (>=)" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns an associated vector if the provided scalars are equal, greater or " "less." msgstr "" +"Возвращает ÑвÑзанный вектор, еÑли предоÑтавленные ÑкалÑры равны, больше или " +"меньше." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "" +msgstr "Возвращает логичеÑкий результат ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ INF и ÑкалÑрного параметра." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." -msgstr "" +msgstr "Возвращает логичеÑкий результат ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ NaN и ÑкалÑрного параметра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" @@ -8283,39 +8558,55 @@ msgstr "Меньше, чем (<)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "" +msgstr "Меньше или равно (<=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Not Equal (!=)" -msgstr "" +msgstr "Ðе равно (!=)" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns an associated vector if the provided boolean value is true or false." msgstr "" +"Возвращает ÑвÑзанный вектор, еÑли предоÑтавленное логичеÑкое значение равно " +"true или false." #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Returns the boolean result of the comparison between two parameters." +#, fuzzy +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." msgstr "" +"Возвращает ÑвÑзанный ÑкалÑÑ€, еÑли предоÑтавленное логичеÑкое значение равно " +"true или false." + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Returns the boolean result of the comparison between two parameters." +msgstr "Возвращает логичеÑкий результат ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð²ÑƒÑ… параметров." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "Returns the boolean result of the comparison between INF (or NaN) and a " "scalar parameter." msgstr "" +"Возвращает логичеÑкий результат ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ INF (или NaN) и ÑкалÑрного " +"параметра." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Boolean constant." -msgstr "Изменить векторную конÑтанту" +msgstr "ЛогичеÑÐºÐ°Ñ ÐºÐ¾Ð½Ñтанта." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Boolean uniform." -msgstr "" +msgstr "ЛогичеÑÐºÐ°Ñ uniform." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for all shader modes." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ð²Ñех режимов шейдера." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8324,27 +8615,29 @@ msgstr "ПривÑзка к родителю" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader modes." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² вершинного и фрагментного шейдеров." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "'%s' input parameter for fragment and light shader modes." msgstr "" +"Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² фрагментного шейдера и шейдера оÑвещениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for fragment shader mode." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° фрагментного шейдера." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for light shader mode." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° шейдера оÑвещениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex shader mode." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° вершинного шейдера." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "" +msgstr "Входной параметр «%s» Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° вершинного и фрагментного шейдеров." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8357,66 +8650,67 @@ msgstr "СкалÑрный оператор." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "E constant (2.718282). Represents the base of the natural logarithm." msgstr "" +"ЧиÑло e (2,718282). ПредÑтавлÑет Ñобой оÑнование натурального логарифма." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Epsilon constant (0.00001). Smallest possible scalar number." -msgstr "" +msgstr "ÐпÑилон-конÑтанта (0,00001). Ðаименьшее возможное ÑкалÑрное чиÑло." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Phi constant (1.618034). Golden ratio." -msgstr "" +msgstr "КонÑтанта Фи (1,618034). Золотое Ñечение." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/4 constant (0.785398) or 45 degrees." -msgstr "" +msgstr "КонÑтанта Пи/4 (0,785398) или 45 градуÑов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi/2 constant (1.570796) or 90 degrees." -msgstr "" +msgstr "КонÑтанта Пи/2 (1,570796) или 90 градуÑов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Pi constant (3.141593) or 180 degrees." -msgstr "" +msgstr "КонÑтанта Пи (3,141593) или 180 градуÑов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Tau constant (6.283185) or 360 degrees." -msgstr "" +msgstr "КонÑтанта Тау (6,283185) или 360 градуÑов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Sqrt2 constant (1.414214). Square root of 2." -msgstr "" +msgstr "КонÑтанта Sqrt2 (1,414214). Квадратный корень из 2." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the absolute value of the parameter." -msgstr "" +msgstr "Возвращает абÑолютное значение параметра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-cosine of the parameter." -msgstr "" +msgstr "Возвращает арккоÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic cosine of the parameter." -msgstr "" +msgstr "Возвращает обратный гиперболичеÑкий коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-sine of the parameter." -msgstr "" +msgstr "Возвращает аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic sine of the parameter." -msgstr "" +msgstr "Возвращает обратный гиперболичеÑкий ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameter." -msgstr "" +msgstr "Возвращает Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the arc-tangent of the parameters." -msgstr "" +msgstr "Возвращает Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the inverse hyperbolic tangent of the parameter." -msgstr "" +msgstr "Возвращает обратный гиперболичеÑкий Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8424,8 +8718,9 @@ msgid "" msgstr "ВычиÑлÑет ближайшее целое чиÑло, большее или равное аргументу." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Constrains a value to lie between two further values." -msgstr "" +msgstr "Ограничивает значение лежать между Ð´Ð²ÑƒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ значениÑми." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the cosine of the parameter." @@ -8441,11 +8736,11 @@ msgstr "Переводит значение из радиан в градуÑÑ‹. #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-e Exponential." -msgstr "" +msgstr "ÐкÑпонента Ñ Ð¾Ñнованием e." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Base-2 Exponential." -msgstr "" +msgstr "ÐкÑпонента Ñ Ð¾Ñнованием 2." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer less than or equal to the parameter." @@ -8481,16 +8776,16 @@ msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ñкал #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the opposite value of the parameter." -msgstr "" +msgstr "Возвращает значение, противоположное параметру." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - scalar" -msgstr "" +msgstr "1.0 - ÑкалÑÑ€" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the value of the first parameter raised to the power of the second." -msgstr "" +msgstr "Возвращает значение первого параметра, возведенное в Ñтепень второго." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts a quantity in degrees to radians." @@ -8498,7 +8793,7 @@ msgstr "Переводит значение из градуÑов в радиаР#: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / scalar" -msgstr "" +msgstr "1.0 / ÑкалÑÑ€" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Finds the nearest integer to the parameter." @@ -8514,19 +8809,19 @@ msgstr "Ограничивает значение в пределах от 0.0 Ð #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Extracts the sign of the parameter." -msgstr "" +msgstr "Извлекает знак параметра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the sine of the parameter." -msgstr "" +msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic sine of the parameter." -msgstr "" +msgstr "Возвращает гиперболичеÑкий ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the square root of the parameter." -msgstr "" +msgstr "Возвращает квадратный корень из параметра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8538,27 +8833,32 @@ msgid "" msgstr "" #: 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 "" +"Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¨Ð°Ð³( ÑкалÑÑ€(граница), ÑкалÑÑ€(Ñ…) ).\n" +"\n" +"Возвращает 0.0, еÑли x меньше чем граница, иначе — 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the tangent of the parameter." -msgstr "" +msgstr "Возвращает Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the hyperbolic tangent of the parameter." -msgstr "" +msgstr "Возвращает гиперболичеÑкий Ñ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Finds the truncated value of the parameter." -msgstr "" +msgstr "Ðаходит уÑечённое до целого значение параметра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Adds scalar to scalar." -msgstr "" +msgstr "ДобавлÑет ÑкалÑÑ€ к ÑкалÑру." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides scalar by scalar." @@ -8569,12 +8869,13 @@ msgid "Multiplies scalar by scalar." msgstr "Умножает ÑкалÑÑ€ на ÑкалÑÑ€." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Returns the remainder of the two scalars." -msgstr "" +msgstr "Возвращает оÑтаток от двух ÑкалÑров." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." -msgstr "" +msgstr "Вычитает ÑкалÑÑ€ из ÑкалÑра." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8587,12 +8888,14 @@ msgid "Scalar uniform." msgstr "Изменить чиÑловую единицу" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Perform the cubic texture lookup." -msgstr "" +msgstr "ВыполнÑет поиÑк кубичеÑкой текÑтуры." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Perform the texture lookup." -msgstr "" +msgstr "ВыполнÑет поиÑк текÑтуры." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8624,18 +8927,28 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"ВычиÑлÑет внешнее произведение пары векторов.\n" +"\n" +"Внешнее произведение раÑÑматривает первый параметр «c» как вектор-Ñтолбец " +"(матрица, ÑоÑтоÑÑ‰Ð°Ñ Ð¸Ð· одного Ñтолбца), а второй параметр «r» — как вектор-" +"Ñтроку (матрица, ÑоÑтоÑÑ‰Ð°Ñ Ð¸Ð· одной Ñтроки) и оÑущеÑтвлÑет линейно-" +"алгебраичеÑкое умножение «c * r», в результате чего образуетÑÑ Ð¼Ð°Ñ‚Ñ€Ð¸Ñ†Ð°, " +"количеÑтво Ñтрок которой равно количеÑтву компонентов в «c», а количеÑтво " +"Ñтолбцов — количеÑтву компонентов в «r»." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Composes transform from four vectors." -msgstr "" +msgstr "СоÑтавлÑет преобразование из четырёх векторов." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Decomposes transform to four vectors." -msgstr "" +msgstr "РаÑкладывает преобразование на четыре вектора." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the determinant of a transform." -msgstr "" +msgstr "ВычиÑлÑет детерминант Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ (матрицы транÑформации)." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the inverse of a transform." @@ -8643,15 +8956,15 @@ msgstr "ВычиÑлÑет обратную транÑформацию." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the transpose of a transform." -msgstr "" +msgstr "ВычиÑлÑет транÑпонирование преобразованиÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies transform by transform." -msgstr "" +msgstr "Умножает преобразование на преобразование." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Multiplies vector by transform." -msgstr "" +msgstr "Умножает вектор на преобразование." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8700,6 +9013,10 @@ msgid "" "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 "" +"Возвращает вектор, который указывает в том же направлении, что и Ñталонный " +"вектор. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸Ð¼ÐµÐµÑ‚ три векторных параметра: N, вектор Ð´Ð»Ñ Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸, I, " +"вектор инцидента и Nref, Ñталонный вектор. ЕÑли ÑкалÑрное произведение I и " +"Nref меньше нулÑ, возвращаетÑÑ N. Ð’ противном Ñлучае возвращаетÑÑ -N." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the length of a vector." @@ -8716,25 +9033,27 @@ msgstr "Ð›Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ð²ÐµÐºÑ‚ #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." -msgstr "" +msgstr "ВычиÑлÑет нормализованное произведение векторов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 - vector" -msgstr "" +msgstr "1.0 - вектор" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "1.0 / vector" -msgstr "" +msgstr "1.0 / вектор" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns the vector that points in the direction of reflection ( a : incident " "vector, b : normal vector )." msgstr "" +"Возвращает вектор, который указывает в направлении Ð¾Ñ‚Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ( a : вектор " +"падениÑ, b : нормальный вектор )." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the vector that points in the direction of refraction." -msgstr "" +msgstr "Возвращает вектор, который указывает в направлении преломлениÑ." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8782,11 +9101,11 @@ msgstr "Умножает вектор на вектор." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the remainder of the two vectors." -msgstr "" +msgstr "Возвращает оÑтаток от двух векторов." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts vector from vector." -msgstr "" +msgstr "Вычитает вектор из вектора." #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy @@ -8804,6 +9123,9 @@ msgid "" "output ports. This is a direct injection of code into the vertex/fragment/" "light function, do not use it to write the function declarations inside." msgstr "" +"ПользовательÑкое выражение Ñзыка шейдеров Godot Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑким " +"количеÑтвом входных и выходных портов. Ðто прÑмое внедрение кода в функцию " +"вершины/фрагмента/Ñвета, не иÑпользуйте его Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8817,6 +9139,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"ПользовательÑкое выражение Ñзыка шейдеров Godot, которое помещаетÑÑ Ð² " +"верхней чаÑти шейдера. Ð’Ñ‹ можете размеÑтить внутри различные объÑÐ²Ð»ÐµÐ½Ð¸Ñ " +"функций и вызвать их позже в ВыражениÑÑ…. Ð’Ñ‹ также можете объÑвить varyings, " +"uniforms и конÑтанты." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8827,40 +9153,58 @@ msgid "(Fragment/Light mode only) Vector derivative function." msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." msgstr "" +"(Только в режиме Фрагмент/Свет) (Вектор) ÐŸÑ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾ «x» Ñ Ð¸Ñпользованием " +"локального дифференцированиÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." msgstr "" +"(Только в режиме Фрагмент/Свет) (СкалÑÑ€) ÐŸÑ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾ «x» Ñ Ð¸Ñпользованием " +"локального дифференцированиÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." msgstr "" +"(Только в режиме Фрагмент/Свет) (Вектор) ÐŸÑ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾ «y» Ñ Ð¸Ñпользованием " +"локального дифференцированиÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." msgstr "" +"(Только в режиме Фрагмент/Свет) (СкалÑÑ€) ÐŸÑ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾ «y» Ñ Ð¸Ñпользованием " +"локального дифференцированиÑ." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Только в режиме Фрагмент/Свет) (Вектор) Сумма абÑолютных значений " +"производных по «x» и «y»." #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." msgstr "" +"(Только в режиме Фрагмент/Свет) (СкалÑÑ€) Сумма абÑолютных значений " +"производных по «x» и «y»." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" @@ -8960,15 +9304,19 @@ msgid "Resources to export:" msgstr "РеÑурÑÑ‹ Ð´Ð»Ñ ÑкÑпорта:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Фильтр Ð´Ð»Ñ ÑкÑпорта не реÑурÑных файлов (через запÑтую, например: *.json, *." "txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "Фильтр Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ (через запÑтую, например: *.json, *.txt)" #: editor/project_export.cpp @@ -9206,7 +9554,7 @@ msgstr "Импортировать ÑущеÑтвующий проект" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Ошибка: Проект отÑутÑтвует в файловой ÑиÑтеме." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9568,6 +9916,11 @@ msgid "Settings saved OK." msgstr "ÐаÑтройки Ñохранены нормально." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Добавить дейÑтвие" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Переопределение СвойÑтва" @@ -9705,6 +10058,10 @@ msgid "Plugins" msgstr "Плагины" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "ПредуÑтановка..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Ðоль" @@ -9875,10 +10232,6 @@ msgstr "Ð’ верхний региÑтр" msgid "Reset" msgstr "СброÑить" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Ошибка" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Переподчинить узел" @@ -9936,6 +10289,11 @@ msgid "Instance Scene(s)" msgstr "Дополнить Ñценой(ами)" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Сохранить ветку, как Ñцену" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Добавить дочернюю Ñцену" @@ -9978,8 +10336,23 @@ msgid "Make node as Root" msgstr "Сделать узел корневым" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Удалить узел(узлы)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Удалить узлы" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Удалить узел(Ñ‹) графа шейдера" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Удалить узел «%s» и его дочерние Ñлементы?" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Удалить узлы" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10002,12 +10375,13 @@ msgstr "" "узла будут возвращены к значениÑм по умолчанию." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Редактируемые потомки" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Загрузить как заполнитель" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Отключение параметра \"editable_instance\" приведет к тому, что вÑе ÑвойÑтва " +"узла будут возвращены к значениÑм по умолчанию." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10084,6 +10458,14 @@ msgid "Clear Inheritance" msgstr "ОчиÑтить наÑледование" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Редактируемые потомки" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Загрузить как заполнитель" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Открыть документацию" @@ -10100,10 +10482,6 @@ msgid "Change Type" msgstr "Изменить тип" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "РаÑширить Ñкрипт" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Переподчинить узел" @@ -10370,23 +10748,18 @@ msgid "Will load an existing script file." msgstr "Загрузить ÑущеÑтвующий Ñкрипт" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Язык" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "ÐаÑледует" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Ð˜Ð¼Ñ ÐšÐ»Ð°ÑÑа" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Шаблон" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Ð’Ñтроенный Скрипт" #: editor/script_create_dialog.cpp @@ -10402,20 +10775,50 @@ msgid "Bytes:" msgstr "Байты:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "ТраÑÑировка Стека" +#, fuzzy +msgid "Warning:" +msgstr "ПредупреждениÑ:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "" -"Выбрать один или неÑколько Ñлементов из ÑпиÑка, чтобы отобразить график." +msgid "Error:" +msgstr "Ошибка:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Копировать ошибку" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Ошибка:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "ИÑточник" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "ИÑточник" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "ИÑточник" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "ТраÑÑировка Стека" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Ошибки" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "Дочерний процеÑÑ ÑвÑзан" #: editor/script_editor_debugger.cpp @@ -10423,6 +10826,11 @@ msgid "Copy Error" msgstr "Копировать ошибку" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Точки оÑтанова" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "ОÑмотреть предыдущий ÑкземплÑÑ€" @@ -10439,6 +10847,11 @@ msgid "Profiler" msgstr "Профайлер" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "ÐкÑпортировать проект" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Параметр" @@ -10451,6 +10864,11 @@ msgid "Monitors" msgstr "Мониторинг" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" +"Выбрать один или неÑколько Ñлементов из ÑпиÑка, чтобы отобразить график." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "СпиÑок иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¸Ð´ÐµÐ¾Ð¿Ð°Ð¼Ñти реÑурÑами:" @@ -10500,7 +10918,7 @@ msgstr "УÑтановить из дерева" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "ÐкÑпорт измерений в CSV" #: editor/settings_config_dialog.cpp msgid "Erase Shortcut" @@ -10636,22 +11054,17 @@ msgstr "GDNative библиотека" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "Включён GDNative Ñинглтон" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "Отключить Ñчётчик обновлений" +msgstr "Выключен GDNative Ñинглтон" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" msgstr "Библиотека" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "СтатуÑ" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Библиотеки: " @@ -10660,6 +11073,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "ОжидалаÑÑŒ Ñтрока длиной 1 (Ñимвол)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Ðргумент шага равен нулю!" @@ -10813,6 +11230,16 @@ msgstr "GridMap Параметры" msgid "Pick Distance:" msgstr "РаÑÑтоÑние выбора:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Режим фильтра:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"ПредоÑтавьте реÑÑƒÑ€Ñ MeshLibrary Ñтой GridMap, чтобы иÑпользовать его Ñетки." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Ð˜Ð¼Ñ ÐºÐ»Ð°ÑÑа не может быть зарезервированным ключевым Ñловом" @@ -10957,6 +11384,10 @@ msgid "Create a new variable." msgstr "Создать новый прÑмоугольник." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Сигналы:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Создать новый полигон." @@ -10986,6 +11417,11 @@ msgid "Add Function" msgstr "Добавить функцию" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Удалить входной порт" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Добавить переменную" @@ -10994,6 +11430,26 @@ msgid "Add Signal" msgstr "Добавить Ñигнал" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Добавить входной порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Добавить выходной порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Удалить входной порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Удалить выходной порт" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Изменить выражение" @@ -11038,10 +11494,20 @@ msgid "Add Preload Node" msgstr "Добавить предзагрузочный узел" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Добавить узел(узлы) из дерева" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Добавить получающее ÑвойÑтво" @@ -11066,6 +11532,11 @@ msgid "Connect Nodes" msgstr "ПриÑоединить узлы" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Разъединить узлы графа" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "ПриÑоединить данные узла" @@ -11098,6 +11569,28 @@ msgid "Paste VisualScript Nodes" msgstr "Ð’Ñтавить узлы VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Ðе удаётÑÑ Ñкопировать узел функцию." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Переименовать функцию" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Удалить функцию" @@ -11118,16 +11611,18 @@ msgid "Editing Signal:" msgstr "Редактирование Ñигнала:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Базовый тип:" +#, fuzzy +msgid "Make Tool:" +msgstr "Сделать локальным" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "СвойÑтва:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "ДоÑтупные узлы:" +#, fuzzy +msgid "function_name" +msgstr "ФункциÑ:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11151,6 +11646,16 @@ msgid "Cut Nodes" msgstr "Вырезать узлы" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Переименовать функцию" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Обновить" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Редактировать Ñлемент" @@ -11248,6 +11753,10 @@ msgid "The package must have at least one '.' separator." msgstr "Пакет должен иметь Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ один '.' разделитель." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Выберите уÑтройÑтво из ÑпиÑка" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "ИÑполнÑемый файл ADB не Ñконфигурирован в наÑтройках редактора." @@ -11264,15 +11773,23 @@ msgstr "" #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." msgstr "" +"ПользовательÑÐºÐ°Ñ Ñборка требует Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð³Ð¾ пути к Android SDK в " +"наÑтройках редактора." #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" +"Ðеправильный путь к Android SDK Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкой Ñборки в наÑтройках " +"редактора." #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" +"Шаблон Ñборки Android отÑутÑтвует, пожалуйÑта, уÑтановите ÑоответÑтвующие " +"шаблоны." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11287,6 +11804,8 @@ msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" +"Попытка Ñборки из пользовательÑкого шаблона, но информации о верÑии Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ " +"не ÑущеÑтвует. ПожалуйÑта, переуÑтановите из меню «Проект»." #: platform/android/export/export.cpp msgid "" @@ -11295,20 +11814,28 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"ÐеÑоответÑтвие верÑии Ñборки Android:\n" +" УÑтановлен шаблон: %s\n" +" ВерÑÐ¸Ñ Godot: %s\n" +"ПожалуйÑта, переуÑтановите шаблон Ñборки Android из меню «Проект»." #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "Сборка проекта Android (gradle)" #: platform/android/export/export.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" +"Сборка проекта Android не удалаÑÑŒ, проверьте вывод на ошибки.\n" +"Также поÑетите docs.godotengine.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ по Ñборке " +"Android." #: platform/android/export/export.cpp +#, fuzzy msgid "No build apk generated at: " -msgstr "" +msgstr "Ðет Ñборки apk в: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -11348,6 +11875,10 @@ msgid "Required icon is not specified in the preset." msgstr "Требуемый значок не указан в предуÑтановке." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "ЗапуÑтить в браузере" @@ -11870,6 +12401,8 @@ msgid "" "WorldEnvironment requires its \"Environment\" property to contain an " "Environment to have a visible effect." msgstr "" +"WorldEnvironment требует, чтобы ее ÑвойÑтво \"Environment\" Ñодержало " +"Environment, чтобы иметь видимый Ñффект." #: scene/3d/world_environment.cpp msgid "" @@ -11965,6 +12498,9 @@ msgid "" "The Hint Tooltip won't be displayed as the control's Mouse Filter is set to " "\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"." msgstr "" +"ПодÑказка не будет отображатьÑÑ, еÑли Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° мыши Ñлемента ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ " +"уÑтановлено значение «Ignore». Чтобы Ñто иÑправить, уÑтановите MouseFilter в " +"положение «Stop» или «Pass»." #: scene/gui/dialogs.cpp msgid "Alert!" @@ -12028,10 +12564,6 @@ msgstr "" "Ñделайте её целью рендеринга и назначьте её внутреннюю текÑтуру какому-либо " "узлу Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Вход" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Ðеверный иÑточник Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¿Ñ€Ð¾Ñмотра." @@ -12060,6 +12592,65 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть назначены только Ð msgid "Constants cannot be modified." msgstr "КонÑтанты не могут быть изменены." +#~ msgid "Snap to Grid" +#~ msgstr "ПривÑзка к Ñетке" + +#~ msgid "Add input +" +#~ msgstr "Добавить вход +" + +#~ msgid "Language" +#~ msgstr "Язык" + +#~ msgid "Inherits" +#~ msgstr "ÐаÑледует" + +#~ msgid "Base Type:" +#~ msgstr "Базовый тип:" + +#~ msgid "Available Nodes:" +#~ msgstr "ДоÑтупные узлы:" + +#~ msgid "Input" +#~ msgstr "Вход" + +#~ msgid "Properties:" +#~ msgstr "СвойÑтва:" + +#~ msgid "Methods:" +#~ msgstr "Методы:" + +#~ msgid "Theme Properties:" +#~ msgstr "СвойÑтва темы:" + +#~ msgid "Enumerations:" +#~ msgstr "ПеречиÑлениÑ:" + +#~ msgid "Constants:" +#~ msgstr "КонÑтанты:" + +#~ msgid "Class Description:" +#~ msgstr "ОпиÑание клаÑÑа:" + +#~ msgid "Property Descriptions:" +#~ msgstr "ОпиÑание ÑвойÑтв:" + +#~ msgid "Method Descriptions:" +#~ msgstr "ОпиÑание методов:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Данный процеÑÑ ÑƒÑтановит Android проект Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑких Ñборок.\n" +#~ "Обратите внимание, что Ð´Ð»Ñ ÐµÐ³Ð¾ работы, необходимо включить его в каждом " +#~ "преÑете ÑкÑпорта." + +#~ msgid "Reverse sorting." +#~ msgstr "ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ñортировка." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Удалить узел(узлы)?" + #~ msgid "No Matches" #~ msgstr "Ðет Ñовпадений" @@ -12245,9 +12836,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Go to parent folder" #~ msgstr "Перейти к родительÑкой папке" -#~ msgid "Select device from the list" -#~ msgstr "Выберите уÑтройÑтво из ÑпиÑка" - #~ msgid "Open Scene(s)" #~ msgstr "Открыть Ñцену(ны)" @@ -12308,9 +12896,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Добавить выбранную Ñцену(Ñ‹), в качеÑтве потомка выбранного узла." -#~ msgid "Warnings:" -#~ msgstr "ПредупреждениÑ:" - #~ msgid "Font Size:" #~ msgstr "Размер шрифта:" @@ -12353,9 +12938,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Select a split to erase it." #~ msgstr "Выберите разделение, чтобы Ñтереть его." -#~ msgid "No name provided" -#~ msgstr "Ðе указано имÑ" - #~ msgid "Add Node.." #~ msgstr "Добавить Узел.." @@ -12491,12 +13073,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Warning" #~ msgstr "Предупреждение" -#~ msgid "Error:" -#~ msgstr "Ошибка:" - -#~ msgid "Function:" -#~ msgstr "ФункциÑ:" - #~ msgid "Variable" #~ msgstr "ПеременнаÑ" @@ -12563,9 +13139,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Connect Graph Nodes" #~ msgstr "Соединить узлы графа" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Разъединить узлы графа" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Удалить узел графа шейдера" @@ -12575,9 +13148,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Дублировать узел(Ñ‹) графа" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Удалить узел(Ñ‹) графа шейдера" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Ошибка: ЦикличеÑкое подключение" @@ -13018,9 +13588,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Pick New Name and Location For:" #~ msgstr "Выберете новое Ð¸Ð¼Ñ Ð¸ раÑположение длÑ:" -#~ msgid "No files selected!" -#~ msgstr "Файлы не выбраны!" - #~ msgid "Info" #~ msgstr "ИнформациÑ" @@ -13421,12 +13988,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Scaling to %s%%." #~ msgstr "МаÑштабирование до %s%%." -#~ msgid "Up" -#~ msgstr "Вверх" - -#~ msgid "Down" -#~ msgstr "Вниз" - #~ msgid "Bucket" #~ msgstr "Заливка" @@ -13718,9 +14279,6 @@ msgstr "КонÑтанты не могут быть изменены." #~ msgid "Group" #~ msgstr "Группа" -#~ msgid "Samples" -#~ msgstr "СÑмплы" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Режим Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑмплов (.wav файлы):" diff --git a/editor/translations/si.po b/editor/translations/si.po index 2492f11666..a5775be438 100644 --- a/editor/translations/si.po +++ b/editor/translations/si.po @@ -57,6 +57,34 @@ msgstr "'%s' ගොඩනà·à¶œà·“මට à·€à·à¶»à¶¯à·’ à¶à¶»à·Šà¶š" msgid "On call to '%s':" msgstr "'%s' ඇමà¶à·“ම:" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "නිදහස්" @@ -331,6 +359,7 @@ msgstr "%d සදහ෠ලුහුබදින්නන් à·ƒà·à¶¯à· යච#: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "à·ƒà·à¶¯à¶±à·Šà¶±" @@ -465,13 +494,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -604,7 +628,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -616,6 +640,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -794,7 +822,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -895,7 +924,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -932,7 +962,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1195,7 +1225,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1386,7 +1416,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1440,7 +1472,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1605,6 +1637,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1675,6 +1708,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1822,6 +1856,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1830,7 +1865,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1838,38 +1873,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1878,19 +1893,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1905,10 +1912,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1919,10 +1922,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1989,8 +1988,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2003,6 +2002,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2542,6 +2583,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2741,10 +2794,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2796,14 +2845,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2821,15 +2866,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2892,6 +2943,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2901,6 +2956,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2929,11 +2988,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3030,6 +3084,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3056,13 +3114,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3711,8 +3762,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3837,7 +3888,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3973,6 +4024,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4143,6 +4200,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4317,7 +4375,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4486,6 +4543,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4690,6 +4749,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4702,10 +4765,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4972,20 +5031,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5075,8 +5142,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5341,6 +5407,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5970,6 +6040,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6025,7 +6099,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6124,6 +6199,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6225,11 +6305,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6309,7 +6389,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6390,6 +6470,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6447,10 +6532,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6770,6 +6851,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6803,6 +6888,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7031,6 +7120,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7079,6 +7172,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "à·à·Šâ€à¶»à·’à¶:" @@ -7395,6 +7492,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7529,6 +7634,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7685,16 +7795,107 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "à¶à·à¶»à·à¶œà¶à·Š යà¶à·”රු මක෠දමන්න" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7710,6 +7911,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7923,6 +8128,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8569,12 +8779,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9116,6 +9328,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9252,6 +9468,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9415,10 +9635,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9474,6 +9690,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9514,10 +9734,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9536,11 +9770,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9615,6 +9847,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9631,10 +9871,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9861,43 +10097,60 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "à¶šà·à¶©à¶´à¶" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9905,7 +10158,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9913,6 +10166,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9929,6 +10186,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9941,6 +10202,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10137,10 +10402,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10149,6 +10410,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10300,6 +10565,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10437,6 +10710,10 @@ msgid "Create a new variable." msgstr "à·ƒà·à¶¯à¶±à·Šà¶±" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10465,6 +10742,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "යà¶à·”රු මක෠දමන්න" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10473,6 +10755,25 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "සජීවීකරණ පුනරà·à·€à¶»à·Šà¶®à¶±à¶º" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "මෙම ලුහුබදින්න෠ඉවà¶à·Š කරන්න." + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10513,10 +10814,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10541,6 +10852,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "යà¶à·”රු à¶´à·’à¶§à¶´à¶à·Š කරන්න" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10573,6 +10889,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10593,7 +10930,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10601,8 +10938,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "à·à·Šâ€à¶»à·’à¶:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10625,6 +10963,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "à·à·Šâ€à¶»à·’à¶:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10719,6 +11066,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10740,7 +11091,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10817,6 +11169,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11354,10 +11710,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/sk.po b/editor/translations/sk.po index 98d594e40d..88eddf57db 100644 --- a/editor/translations/sk.po +++ b/editor/translations/sk.po @@ -63,6 +63,34 @@ msgstr "Neplatné argumenty pre vytvorenie '%s'" msgid "On call to '%s':" msgstr "Pri volanà '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Voľné" @@ -338,6 +366,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "VytvoriÅ¥" @@ -470,15 +499,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "VÅ¡etky vybrané" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -613,8 +636,9 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "NastaviÅ¥ prechody na:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -625,6 +649,11 @@ msgstr "" msgid "Copy" msgstr "KopÃrovaÅ¥" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "VÅ¡etky vybrané" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -807,7 +836,8 @@ msgstr "PripojiÅ¥ Signál: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -911,7 +941,8 @@ msgstr "HľadaÅ¥:" msgid "Matches:" msgstr "Zhody:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -954,7 +985,7 @@ msgid "Resource" msgstr "Prostriedok" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Cesta" @@ -1226,7 +1257,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1419,7 +1450,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Cesta:" @@ -1473,7 +1506,7 @@ msgstr "VytvoriÅ¥ adresár" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Meno:" @@ -1644,6 +1677,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1722,6 +1756,7 @@ msgid "New Folder..." msgstr "VytvoriÅ¥ adresár" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1872,6 +1907,7 @@ msgid "Class:" msgstr "Trieda:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1880,50 +1916,29 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "Popis:" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Theme Properties" msgstr "Filter:" #: editor/editor_help.cpp #, fuzzy -msgid "Theme Properties:" -msgstr "Filter:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signály:" - -#: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" msgstr "Popis:" #: editor/editor_help.cpp -#, fuzzy -msgid "Enumerations:" -msgstr "Popis:" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1933,21 +1948,12 @@ msgid "Constants" msgstr "KonÅ¡tanty:" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "KonÅ¡tanty:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Popis:" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "Popis:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1963,11 +1969,6 @@ msgid "Property Descriptions" msgstr "Popis:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Popis:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1979,11 +1980,6 @@ msgid "Method Descriptions" msgstr "Popis:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Popis:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2054,8 +2050,8 @@ msgstr "" msgid "Copy Selection" msgstr "OdstrániÅ¥ výber" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2069,6 +2065,48 @@ msgstr "" msgid "Clear Output" msgstr "Popis:" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2615,6 +2653,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2817,10 +2867,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2873,14 +2919,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2899,15 +2941,21 @@ msgstr "VÅ¡etky vybrané" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2973,6 +3021,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2983,6 +3035,11 @@ msgstr "" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Popis:" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Signály:" @@ -3011,11 +3068,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3115,6 +3167,11 @@ msgstr "" msgid "New Script" msgstr "Popis:" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Popis:" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3141,14 +3198,6 @@ msgstr "VložiÅ¥" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Otvorit prieÄinok" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3818,9 +3867,10 @@ msgstr "Súbor:" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "NaÄÃtaÅ¥ predvolené" #: editor/import_dock.cpp msgid "Reimport" @@ -3947,7 +3997,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4091,6 +4141,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Otvorit prieÄinok" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4263,6 +4320,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4441,7 +4499,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4615,6 +4672,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4824,6 +4883,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4836,10 +4899,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5116,20 +5175,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Režim Interpolácie" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5221,8 +5288,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5492,6 +5558,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6138,6 +6208,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6193,7 +6267,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6296,6 +6371,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filter:" @@ -6402,11 +6482,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6490,7 +6570,7 @@ msgstr "Popis:" msgid "Connections to method:" msgstr "PripojiÅ¥ k Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Prostriedok" @@ -6574,6 +6654,11 @@ msgstr "VÅ¡etky vybrané" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6632,10 +6717,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6965,6 +7046,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6998,6 +7083,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7231,6 +7320,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7281,6 +7374,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "VložiÅ¥" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Popis:" @@ -7609,6 +7707,15 @@ msgid "Enable Priority" msgstr "Súbor:" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filter:" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7749,6 +7856,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "VÅ¡etky vybrané" @@ -7924,20 +8036,117 @@ msgstr "" msgid "TileSet" msgstr "Súbor:" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Komunita" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "VytvoriÅ¥ adresár" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "ZmeniÅ¥" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "VÅ¡etky vybrané" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "VymazaÅ¥" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "ZmeniÅ¥" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "ZmeniÅ¥ veľkosÅ¥ výberu" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "ZmeniÅ¥" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" +msgid "Add Output" msgstr "Signály:" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" -msgstr "" - -#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7950,6 +8159,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Signály:" @@ -8172,6 +8385,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8821,12 +9039,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9380,6 +9600,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "VÅ¡etky vybrané" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9518,6 +9743,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9682,10 +9911,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9741,6 +9966,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9782,10 +10011,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "VÅ¡etky vybrané" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "VÅ¡etky vybrané" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9804,11 +10047,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9885,6 +10126,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Popis:" @@ -9903,11 +10152,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Popis:" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "VytvoriÅ¥ adresár" @@ -10146,26 +10390,19 @@ msgid "Will load an existing script file." msgstr "Popis:" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp #, fuzzy -msgid "Class Name" +msgid "Class Name:" msgstr "Trieda:" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "VÅ¡etky vybrané" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Popis:" #: editor/script_create_dialog.cpp #, fuzzy @@ -10182,11 +10419,39 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Zrkadlový" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Prostriedok" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Prostriedok" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Prostriedok" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10194,7 +10459,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -10202,6 +10467,11 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "VÅ¡etky vybrané" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10218,6 +10488,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "VytvoriÅ¥ adresár" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10230,6 +10505,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10428,10 +10707,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10440,6 +10715,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "argument \"step\"/krok je nulový!" @@ -10597,6 +10876,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filter:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10734,6 +11022,10 @@ msgid "Create a new variable." msgstr "VytvoriÅ¥ adresár" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "VytvoriÅ¥ adresár" @@ -10764,6 +11056,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "VÅ¡etky vybrané" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10773,6 +11070,26 @@ msgid "Add Signal" msgstr "Signály:" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Signály:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "VÅ¡etky vybrané" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "VÅ¡etky vybrané" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10813,10 +11130,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10842,6 +11169,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "OdpojiÅ¥" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10875,6 +11207,27 @@ msgid "Paste VisualScript Nodes" msgstr "VložiÅ¥" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "VÅ¡etky vybrané" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Remove Function" msgstr "VÅ¡etky vybrané" @@ -10898,7 +11251,7 @@ msgid "Editing Signal:" msgstr "Signály:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10906,8 +11259,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkcie:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10931,6 +11285,15 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "VÅ¡etky vybrané" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Súbor:" @@ -11026,6 +11389,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11047,7 +11414,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11126,6 +11494,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11683,10 +12055,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -11719,6 +12087,29 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Filter:" + +#, fuzzy +#~ msgid "Enumerations:" +#~ msgstr "Popis:" + +#~ msgid "Constants:" +#~ msgstr "KonÅ¡tanty:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Popis:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Popis:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Popis:" + +#, fuzzy #~ msgid "Tool Select" #~ msgstr "VÅ¡etky vybrané" @@ -11781,9 +12172,6 @@ msgstr "" #~ msgid "Show current scene file." #~ msgstr "VytvoriÅ¥ adresár" -#~ msgid "Set Transitions to:" -#~ msgstr "NastaviÅ¥ prechody na:" - #~ msgid "In" #~ msgstr "V" diff --git a/editor/translations/sl.po b/editor/translations/sl.po index e369352868..8b9ed3f61a 100644 --- a/editor/translations/sl.po +++ b/editor/translations/sl.po @@ -9,12 +9,14 @@ # Yahara Octanis <yaharao55@gmail.com>, 2018. # Tine Jozelj <tine@tjo.space>, 2018. # Andrej Poženel <andrej.pozenel@outlook.com>, 2019. +# Arnold Marko <arnold.marko@gmail.com>, 2019. +# Alex <alexrixhardson@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" -"Last-Translator: Andrej Poženel <andrej.pozenel@outlook.com>\n" +"PO-Revision-Date: 2019-10-26 03:53+0000\n" +"Last-Translator: Alex <alexrixhardson@gmail.com>\n" "Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/" "godot/sl/>\n" "Language: sl\n" @@ -23,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3;\n" -"X-Generator: Weblate 3.9-dev\n" +"X-Generator: Weblate 3.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -34,8 +36,7 @@ msgstr "Neveljavna vrsta argumenta za convert(), uporabite TYPE_* konstanto." #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" -"Ni dovolj pomnilnika za dekodiranje bajtov, ali pa je neveljaven format." +msgstr "Ni dovolj bajtov za dekodiranje, ali pa format ni ustrezen." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -50,13 +51,12 @@ msgid "Invalid operands to operator %s, %s and %s." msgstr "Neveljaven operand za operator %s, %s ter %s." #: core/math/expression.cpp -#, fuzzy msgid "Invalid index of type %s for base type %s" -msgstr "Neveljaven indeks lastnosti imena '%s' v vozliÅ¡Äu %s." +msgstr "Neveljaven indeks tipa '%s' za temeljni tip %s" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "" +msgstr "NapaÄno poimenovan indeks '%s' za temeljni tip %s" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" @@ -66,6 +66,34 @@ msgstr "Neveljavni argumenti za construct '%s'" msgid "On call to '%s':" msgstr "Na klic '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KiB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Prosto" @@ -287,7 +315,7 @@ msgstr "Prihodnost" #: editor/animation_track_editor.cpp msgid "Nearest" -msgstr "" +msgstr "Najbližji" #: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp #: editor/property_editor.cpp @@ -356,6 +384,7 @@ msgstr "Ustvarim %d NOVO sled in vstavim kljuÄe?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Ustvari" @@ -400,6 +429,10 @@ msgid "" "-AudioStreamPlayer2D\n" "-AudioStreamPlayer3D" msgstr "" +"ZvoÄne steze lahko kažejo le na vozliÅ¡Äa tipa:\n" +"- AudioStreamPlayer\n" +"-AudioStreamPlayer2D\n" +"-AudioStreamPlayer3D" #: editor/animation_track_editor.cpp msgid "Animation tracks can only point to AnimationPlayer nodes." @@ -424,7 +457,7 @@ msgstr "" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "" +msgstr "Steza ni tipa Prostorska, zato ne morem vstaviti kljuÄa" #: editor/animation_track_editor.cpp #, fuzzy @@ -489,15 +522,11 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Izberi Gradnik" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"ÄŒe želite urediti animacije, izberite AnimationPlayer iz drevesa scene." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -636,8 +665,9 @@ msgid "Scale Ratio:" msgstr "Razmerje Obsega:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Izberi Lastnost" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -648,6 +678,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Izberi Gradnik" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -835,7 +870,8 @@ msgstr "Povezovanje Signala:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -943,7 +979,8 @@ msgstr "Iskanje:" msgid "Matches:" msgstr "Zadetki:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -986,7 +1023,7 @@ msgid "Resource" msgstr "Viri" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Pot" @@ -1262,7 +1299,8 @@ msgid "Delete Bus Effect" msgstr "IzbriÅ¡i uÄinek Vodila" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "ZvoÄno Vodilo, Povelci in Izpusti za preureditev." #: editor/editor_audio_buses.cpp @@ -1460,7 +1498,9 @@ msgid "Add AutoLoad" msgstr "Dodaj SamodejnoNalaganje" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Pot:" @@ -1515,7 +1555,7 @@ msgstr "Ustvarite Mapo" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Ime:" @@ -1698,6 +1738,7 @@ msgstr "Trenutno:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1778,6 +1819,7 @@ msgid "New Folder..." msgstr "Nova Mapa..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Osveži" @@ -1933,6 +1975,7 @@ msgid "Class:" msgstr "Razred:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Dedovanja:" @@ -1941,7 +1984,8 @@ msgid "Inherited by:" msgstr "Podedovano od:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Kratek Opis:" #: editor/editor_help.cpp @@ -1949,41 +1993,19 @@ msgid "Properties" msgstr "Lastnosti" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metode" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metode" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Lastnosti" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Lastnosti" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Signali:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "OÅ¡tevilÄenja" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "OÅ¡tevilÄenja:" - -#: editor/editor_help.cpp msgid "enum " msgstr "oÅ¡tevil " @@ -1992,21 +2014,13 @@ msgid "Constants" msgstr "Konstante" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstante:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Opis" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "Opis:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Spletne Vaje:" #: editor/editor_help.cpp @@ -2024,11 +2038,6 @@ msgid "Property Descriptions" msgstr "Opis lastnosti:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Opis lastnosti:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2042,11 +2051,6 @@ msgid "Method Descriptions" msgstr "Opis Metode:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Opis Metode:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2125,8 +2129,8 @@ msgstr "Izhod:" msgid "Copy Selection" msgstr "Odstrani izbrano" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2139,6 +2143,50 @@ msgstr "PoÄisti" msgid "Clear Output" msgstr "PoÄisti Izhod" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Ustavi" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "Zaženi!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Prenesi" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Gradnik" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2729,6 +2777,19 @@ msgstr "Projekt" msgid "Project Settings..." msgstr "Nastavitve Projekta" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "RazliÄica:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2956,10 +3017,6 @@ msgstr "Zaustavi prizor" msgid "Stop the scene." msgstr "Ustavi Prizor." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Ustavi" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Zaženi prizor u urejanju." @@ -3015,15 +3072,11 @@ msgid "Inspector" msgstr "Nadzornik" #: editor/editor_node.cpp -msgid "Node" -msgstr "Gradnik" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "RazÅ¡iri vse" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Izhod" @@ -3042,15 +3095,21 @@ msgstr "Upravljaj Izvozne Predloge" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3113,6 +3172,10 @@ msgstr "Odpri naslednji Urejevalnik" msgid "Open the previous Editor" msgstr "Odpri prejÅ¡nji Urejevalnik" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Ustvari Predogled Modela" @@ -3123,6 +3186,11 @@ msgstr "SliÄica..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Zaženi Skripto" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Uredi Poligon" @@ -3152,12 +3220,6 @@ msgstr "Stanje:" msgid "Edit:" msgstr "Uredi" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "Zaženi!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Mera:" @@ -3256,6 +3318,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Zaženi Skripto" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3282,14 +3349,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Odpri 2D Urejevalnik" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3986,8 +4045,9 @@ msgstr " Datoteke" msgid "Import As:" msgstr "Uvozi Kot:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "Prednastavitev..." #: editor/import_dock.cpp @@ -4120,7 +4180,7 @@ msgstr "VtiÄniki" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4274,6 +4334,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Odpri 2D Urejevalnik" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4461,6 +4528,7 @@ msgid "Change Animation Name:" msgstr "Spremeni Ime Animacije:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "IzbriÅ¡em animacijo?" @@ -4644,7 +4712,6 @@ msgstr "Ime Animacije:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Napaka!" @@ -4821,6 +4888,8 @@ msgid "Current:" msgstr "Trenutno:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Dodaj Vnos" @@ -5036,6 +5105,10 @@ msgid "All" msgstr "Vse" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Uvozi" @@ -5050,11 +5123,6 @@ msgid "Sort:" msgstr "Razvrsti:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Zahtevam..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategorija:" @@ -5352,23 +5420,33 @@ msgstr "NaÄin PloÅ¡Äe" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "NaÄin Obsega (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Preklopi pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Uporabi Pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "Možnosti pripenjanja" +msgid "Toggle grid snapping." +msgstr "Preklopi pripenjanje" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Pripni na mrežo" +msgid "Use Grid Snap" +msgstr "Uporabi Pripenjanje" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "Možnosti pripenjanja" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5466,8 +5544,7 @@ msgid "View" msgstr "Pogled" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5738,6 +5815,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6382,6 +6463,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Nastavi Zaskok" @@ -6442,7 +6527,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6552,6 +6638,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Lastnosti objekta." @@ -6659,11 +6750,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6748,7 +6839,7 @@ msgstr "PoÄisti Nedavne Prizore" msgid "Connections to method:" msgstr "Poveži se z Gradnikom:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Viri" @@ -6834,6 +6925,11 @@ msgstr "IzbriÅ¡i toÄke" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "IzbriÅ¡i Vrstico" @@ -6892,10 +6988,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtriraj datoteke..." @@ -7230,6 +7322,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7268,6 +7364,10 @@ msgid "Use Local Space" msgstr "Lokalno prostorski naÄin (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Uporabi Pripenjanje" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7504,6 +7604,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7556,6 +7660,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "NaÄin Premika" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animacija" @@ -7884,6 +7993,15 @@ msgid "Enable Priority" msgstr "Uredi Filtre" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtriraj datoteke..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8032,6 +8150,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Odstrani trenutni vnos" @@ -8209,18 +8332,116 @@ msgstr "Ta operacija ni mogoÄa brez scene." msgid "TileSet" msgstr "Izvozi PloÅ¡Äno Zbirko" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Dodaj Vnos" +msgid "No commit message was provided" +msgstr "Ime ni na voljo" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Skupnost" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Ustvari Nov %s" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Spremeni" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Preimenuj" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "IzbriÅ¡i" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Spremeni" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "IzbriÅ¡i Izbrano" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Zamenjaj Vse" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Usklajuj Spremembe Skript" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Dodaj Vnos" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8238,6 +8459,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Dodaj Vnos" @@ -8464,6 +8689,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9118,12 +9348,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9684,6 +9916,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9822,6 +10058,10 @@ msgid "Plugins" msgstr "VtiÄniki" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Prednastavitev..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9993,10 +10233,6 @@ msgstr "" msgid "Reset" msgstr "Ponastavi PoveÄavo/PomanjÅ¡avo" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10052,6 +10288,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10093,10 +10333,24 @@ msgid "Make node as Root" msgstr "Shrani Prizor" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Izberi Gradnik" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Izberi Gradnik" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10115,11 +10369,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10198,6 +10450,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Odpri Nedavne" @@ -10217,11 +10477,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Zaženi Skripto" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Ustvari Nov %s" @@ -10469,24 +10724,19 @@ msgid "Will load an existing script file." msgstr "Naloži obstojeÄo Postavitev Vodila." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Razred:" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Predloga" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Zaženi Skripto" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10501,11 +10751,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Napaka!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Napaka!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Napaka!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Viri" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Viri" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Viri" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10513,14 +10793,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Nepovezano" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "IzbriÅ¡i toÄke" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10537,6 +10823,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Izvozi Projekt" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10549,6 +10840,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10750,10 +11045,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10762,6 +11053,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "stopnja argumenta je niÄ!" @@ -10918,6 +11213,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Lastnosti objekta." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11064,6 +11368,10 @@ msgid "Create a new variable." msgstr "Ustvari Nov %s" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signali:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Ustvarite Poligon" @@ -11093,6 +11401,11 @@ msgid "Add Function" msgstr "Dodaj Funkcijo" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Odstrani toÄko" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Dodaj Spremenljivko" @@ -11101,6 +11414,26 @@ msgid "Add Signal" msgstr "Dodaj Signal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Dodaj Vnos" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Dodaj Vnos" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Odstrani toÄko" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Odstrani toÄko" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11141,10 +11474,20 @@ msgid "Add Preload Node" msgstr "Dodaj prednaloženo vozliÅ¡Äe" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Dodaj Gradnik(e) iz Drevesa" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Dodaj Getter Lastnost" @@ -11170,6 +11513,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Nepovezano" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Poveži se z Gradnikom:" @@ -11204,6 +11552,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Preimenuj Funkcijo" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Odstrani Funkcijo" @@ -11224,16 +11593,17 @@ msgid "Editing Signal:" msgstr "Urejanje Signala:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Osnovni Tip:" +msgid "Make Tool:" +msgstr "" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ÄŒlani:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Na voljo Nodes:" +#, fuzzy +msgid "function_name" +msgstr "Funkcije:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11258,6 +11628,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Preimenuj Funkcijo" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Osveži" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "ÄŒlani" @@ -11355,6 +11735,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Izberite napravo s seznama" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11376,7 +11760,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11456,6 +11841,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12029,11 +12418,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "Dodaj Vnos" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12062,7 +12446,55 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "" +msgstr "Konstante ni možno spreminjati." + +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Pripni na mrežo" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Dodaj Vnos" + +#~ msgid "Base Type:" +#~ msgstr "Osnovni Tip:" + +#~ msgid "Available Nodes:" +#~ msgstr "Na voljo Nodes:" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "Dodaj Vnos" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metode" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Lastnosti" + +#~ msgid "Enumerations:" +#~ msgstr "OÅ¡tevilÄenja:" + +#~ msgid "Constants:" +#~ msgstr "Konstante:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Opis:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Opis lastnosti:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Opis Metode:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Zahtevam..." #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" @@ -12156,9 +12588,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "Pojdi v nadrejeno mapo" -#~ msgid "Select device from the list" -#~ msgstr "Izberite napravo s seznama" - #~ msgid "Open Scene(s)" #~ msgstr "Odpri Prizor(e)" @@ -12214,9 +12643,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "Izberite Mapo za Skeniranje" -#~ msgid "No name provided" -#~ msgstr "Ime ni na voljo" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Dodaj vozliÅ¡Äe" diff --git a/editor/translations/sq.po b/editor/translations/sq.po index 61e380e91c..dbea1057fc 100644 --- a/editor/translations/sq.po +++ b/editor/translations/sq.po @@ -59,6 +59,34 @@ msgstr "Argumente të gabuar për të ndërtuar '%s'" msgid "On call to '%s':" msgstr "Në thërritje të '%s':" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Liro" @@ -326,6 +354,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Krijo" @@ -451,15 +480,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Zgjidh" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -591,7 +614,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -603,6 +626,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Zgjidh" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Shto Klip Audio" @@ -785,7 +813,8 @@ msgstr "Lidh Sinjalin: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -889,7 +918,8 @@ msgstr "Kërko:" msgid "Matches:" msgstr "Përputhjet:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -932,7 +962,7 @@ msgid "Resource" msgstr "Resursi" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Rrugë" @@ -1207,7 +1237,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1405,7 +1435,9 @@ msgid "Add AutoLoad" msgstr "Shto Autoload" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Rruga:" @@ -1460,7 +1492,7 @@ msgstr "Krijo një Folder" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Emri:" @@ -1648,6 +1680,7 @@ msgstr "(Aktual)" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1724,6 +1757,7 @@ msgid "New Folder..." msgstr "Folder i Ri..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Rifresko" @@ -1875,6 +1909,7 @@ msgid "Class:" msgstr "Klasa:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Trashëgon:" @@ -1883,7 +1918,8 @@ msgid "Inherited by:" msgstr "E trashëguar nga:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Përshkrim i Shkurtër:" #: editor/editor_help.cpp @@ -1891,38 +1927,18 @@ msgid "Properties" msgstr "Vetitë" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Vetitë:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metodat" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metodat:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Vetitë e Temës" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Vetitë e Temës:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Sinjalet:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumeracionet" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumeracionet:" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1931,19 +1947,12 @@ msgid "Constants" msgstr "Konstantet" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstantet:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Përshkrimi i Klasës" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Përshkrimi i Klasës:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +#, fuzzy +msgid "Online Tutorials" msgstr "Tutorialet Online:" #: editor/editor_help.cpp @@ -1961,10 +1970,6 @@ msgid "Property Descriptions" msgstr "Përshkrimi i Vetive" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Përshkrimi i Vetive:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1977,10 +1982,6 @@ msgid "Method Descriptions" msgstr "Përshkrimi i Metodës" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Përshkrimi i Metodes:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2049,8 +2050,8 @@ msgstr "Përfundimi:" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2063,6 +2064,49 @@ msgstr "Pastro" msgid "Clear Output" msgstr "Pastro Përfundimin" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Ndalo" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Fillo" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Shkarko" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nyje" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2660,6 +2704,19 @@ msgstr "Projekti" msgid "Project Settings..." msgstr "Opsionet e Projektit" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Versioni:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2884,10 +2941,6 @@ msgstr "Pusho Skenën" msgid "Stop the scene." msgstr "Ndalo skenën." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Ndalo" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Luaj skenën e modifikuar." @@ -2942,14 +2995,10 @@ msgid "Inspector" msgstr "Inspektori" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nyje" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Zgjero Panelin Fundor" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Përfundimi" @@ -2968,15 +3017,21 @@ msgstr "Menaxho Shabllonet e Eksportit" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3039,6 +3094,10 @@ msgstr "Hap Editorin tjetër" msgid "Open the previous Editor" msgstr "Hap Editorin e mëparshëm" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Duke Krijuar Shikimin Paraprak të Mesh-ave" @@ -3048,6 +3107,11 @@ msgid "Thumbnail..." msgstr "Korniza..." #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Hap Editorin e Shkrimit" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Modifiko Shtojcën" @@ -3076,11 +3140,6 @@ msgstr "Statusi:" msgid "Edit:" msgstr "Modifiko:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Fillo" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Përmasa:" @@ -3187,6 +3246,10 @@ msgstr "Zgjidh një 'Viewport'" msgid "New Script" msgstr "Shkrim i Ri" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "%s i Ri" @@ -3213,13 +3276,6 @@ msgstr "Ngjit" msgid "Convert To %s" msgstr "Konverto në %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Hap Editorin" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Nyja e zgjedhur nuk është një 'Viewport'!" @@ -3899,9 +3955,10 @@ msgstr " Skedarët" msgid "Import As:" msgstr "Importo Si:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Ngarko Gabimet" #: editor/import_dock.cpp msgid "Reimport" @@ -4030,7 +4087,7 @@ msgstr "Emri i Shtojcës:" msgid "Subfolder:" msgstr "Subfolderi:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Gjuha:" @@ -4165,6 +4222,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Hap Editorin" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4332,6 +4395,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4506,7 +4570,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4674,6 +4737,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4884,6 +4949,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importo" @@ -4897,11 +4966,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Duke bër kërkesën..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5174,20 +5238,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Ndrysho Mënyrën" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5277,8 +5349,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5545,6 +5616,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6176,6 +6251,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6231,7 +6310,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6332,6 +6412,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtro vetitë." @@ -6436,11 +6521,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6522,7 +6607,7 @@ msgstr "Pastro Skenat e Fundit" msgid "Connections to method:" msgstr "Lidhë me Nyjen:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Resursi" @@ -6605,6 +6690,11 @@ msgstr "Krijo pika." msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6663,10 +6753,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6991,6 +7077,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7024,6 +7114,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7257,6 +7351,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7305,6 +7403,11 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "Lëviz të Preferuarën Lartë" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Animacionet:" @@ -7622,6 +7725,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtro Skedarët..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7755,6 +7867,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7909,19 +8026,117 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Komuniteti" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Sinkronizo Nryshimet e Skenës" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Ndrysho" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Riemërto" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Fshi" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Ndrysho" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Zgjidh" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Sinkronizo Ndryshimet e Shkrimit" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "Përfundimi" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7935,6 +8150,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Shto te të preferuarat" @@ -8153,6 +8372,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8797,12 +9021,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9352,6 +9578,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9488,6 +9718,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9651,10 +9885,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9710,6 +9940,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9750,10 +9984,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Fshi Nyjen" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Fshi Nyjen" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9772,11 +10020,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9851,6 +10097,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Hap të Fundit" @@ -9869,10 +10123,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Krijo një Folder" @@ -10112,24 +10362,19 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Klasa:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Hiq Shabllonin" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Hap Editorin e Shkrimit" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10144,26 +10389,61 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Pasqyrë" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Ngarko Gabimet" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Errors" +#, fuzzy +msgid "C++ Source" +msgstr "Resursi" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Resursi" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Resursi" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Child process connected." +msgstr "U Shkëput" + +#: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Krijo pika." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10180,6 +10460,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Eksporto Projektin" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10192,6 +10477,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10389,10 +10678,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10401,6 +10686,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10553,6 +10842,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Nyjet filtruese" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10691,6 +10989,10 @@ msgid "Create a new variable." msgstr "Krijo një Folder" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Sinjalet:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Krijo %s të ri" @@ -10720,6 +11022,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Hiq Autoload-in" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10728,6 +11035,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Shto te të preferuarat" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Shto te të preferuarat" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Hiq Autoload-in" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Hiq nga të preferuarat" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10768,10 +11095,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10796,6 +11133,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "U Shkëput" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10828,6 +11170,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Krijo një Shtojcë" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10848,7 +11211,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10856,8 +11219,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funksionet:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10880,6 +11244,16 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funksionet:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Rifresko" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10974,6 +11348,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Zgjidh paisjen nga lista" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10995,7 +11373,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11072,6 +11451,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11609,10 +11992,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11641,6 +12020,34 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Properties:" +#~ msgstr "Vetitë:" + +#~ msgid "Methods:" +#~ msgstr "Metodat:" + +#~ msgid "Theme Properties:" +#~ msgstr "Vetitë e Temës:" + +#~ msgid "Enumerations:" +#~ msgstr "Enumeracionet:" + +#~ msgid "Constants:" +#~ msgstr "Konstantet:" + +#~ msgid "Class Description:" +#~ msgstr "Përshkrimi i Klasës:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Përshkrimi i Vetive:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Përshkrimi i Metodes:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Duke bër kërkesën..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -11668,9 +12075,6 @@ msgstr "" #~ msgid "Delete selected files?" #~ msgstr "Fshi skedarët e zgjedhur?" -#~ msgid "Select device from the list" -#~ msgstr "Zgjidh paisjen nga lista" - #~ msgid "Open Scene(s)" #~ msgstr "Hap Skenat" diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po index e6d1538c83..fd8f5d95b3 100644 --- a/editor/translations/sr_Cyrl.po +++ b/editor/translations/sr_Cyrl.po @@ -58,6 +58,35 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "МикÑ" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Слободно" @@ -356,6 +385,7 @@ msgstr "Ðаправите %d нових трака и убаците кључе #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Ðаправи" @@ -489,15 +519,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Одабери Ñве" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Одабери режим" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Одабери AnimationPlayer из дрвета Ñцене за уређивање анимација." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -636,8 +661,9 @@ msgid "Scale Ratio:" msgstr "Размера Ñкале:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "ПоÑтави прелаз на:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -648,6 +674,11 @@ msgstr "" msgid "Copy" msgstr "Копирај" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Одабери режим" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -836,7 +867,8 @@ msgstr "Везујући Ñигнал:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -947,7 +979,8 @@ msgstr "Тражи:" msgid "Matches:" msgstr "Подударање:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -990,7 +1023,7 @@ msgid "Resource" msgstr "РеÑурÑ" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Пут" @@ -1269,7 +1302,8 @@ msgid "Delete Bus Effect" msgstr "Обриши звучни ефекат" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Звучни баÑ, превуците и иÑпуÑтите за преуређивање." #: editor/editor_audio_buses.cpp @@ -1465,7 +1499,9 @@ msgid "Add AutoLoad" msgstr "Додај аутоматÑко учитавање" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Пут:" @@ -1521,7 +1557,7 @@ msgstr "Ðаправи директоријум" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Име:" @@ -1706,6 +1742,7 @@ msgstr "Тренутно:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Ðова" @@ -1786,6 +1823,7 @@ msgid "New Folder..." msgstr "Ðови директоријум..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "ОÑвежи" @@ -1941,6 +1979,7 @@ msgid "Class:" msgstr "КлаÑа:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "ÐаÑлеђује:" @@ -1949,7 +1988,8 @@ msgid "Inherited by:" msgstr "ÐаÑлеђено од:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Кратак опиÑ:" #: editor/editor_help.cpp @@ -1957,41 +1997,19 @@ msgid "Properties" msgstr "ОÑобине" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Методе" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Методе" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "ОÑобине" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "ОÑобине" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Сигнали:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Енумерације" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Енумерације:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum " @@ -2000,22 +2018,13 @@ msgid "Constants" msgstr "КонÑтанте" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "КонÑтанте:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "ОпиÑ" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "ОпиÑ:" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Онлајн документација" #: editor/editor_help.cpp @@ -2034,11 +2043,6 @@ msgid "Property Descriptions" msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2052,11 +2056,6 @@ msgid "Method Descriptions" msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2135,8 +2134,8 @@ msgstr "Излаз:" msgid "Copy Selection" msgstr "Обриши одабрано" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2150,6 +2149,50 @@ msgstr "Обриши" msgid "Clear Output" msgstr "Излаз" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "ЗауÑтави" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "Започни!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Преучми" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Чвор" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2741,6 +2784,19 @@ msgstr "Пројекат" msgid "Project Settings..." msgstr "ПоÑтавке пројекта" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Верзија:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2970,10 +3026,6 @@ msgstr "Паузирај Ñцену" msgid "Stop the scene." msgstr "ЗауÑави Ñцену." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "ЗауÑтави" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Покрени промењену Ñцену." @@ -3029,15 +3081,11 @@ msgid "Inspector" msgstr "ИнÑпектор" #: editor/editor_node.cpp -msgid "Node" -msgstr "Чвор" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Прошири Ñве" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Излаз" @@ -3056,15 +3104,21 @@ msgstr "Управљај извозним шаблонима" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3127,6 +3181,11 @@ msgstr "Отвори Ñледећи уредник" msgid "Open the previous Editor" msgstr "Отвори претходни уредник" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Извор површине није наведен." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Ðаправи приказ мрежа" @@ -3137,6 +3196,11 @@ msgstr "Сличица..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Покрени Ñкриптицу" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Измени полигон" @@ -3166,12 +3230,6 @@ msgstr "СтатуÑ:" msgid "Edit:" msgstr "Уреди" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "Започни!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Мера:" @@ -3273,6 +3331,11 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Покрени Ñкриптицу" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3299,14 +3362,6 @@ msgstr "Ðалепи" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Отвори 2Д уредник" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -4018,9 +4073,10 @@ msgstr " Датотеке" msgid "Import As:" msgstr "Увези као:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "ПоÑтавке..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "ПоÑтавке" #: editor/import_dock.cpp msgid "Reimport" @@ -4152,7 +4208,7 @@ msgstr "Прикључци" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4306,6 +4362,13 @@ msgstr "Помери тачку" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Отвори 2Д уредник" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4490,6 +4553,7 @@ msgid "Change Animation Name:" msgstr "Измени име анимације:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Обриши анимацију?" @@ -4673,7 +4737,6 @@ msgstr "Име анимације:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Грешка!" @@ -4851,6 +4914,8 @@ msgid "Current:" msgstr "Тренутно:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Додај улаз" @@ -5065,6 +5130,10 @@ msgid "All" msgstr "Ñви" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Увоз" @@ -5079,11 +5148,6 @@ msgid "Sort:" msgstr "Сортирање:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Захтевање..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Категорија:" @@ -5374,23 +5438,33 @@ msgstr "Режим инÑпекције" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Режим Ñкалирања (R)" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Укљ./ИÑкљ. лепљења" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "КориÑти лепљење" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "ПоÑтавке залепљавања" +msgid "Toggle grid snapping." +msgstr "Укљ./ИÑкљ. лепљења" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Залепи за мрежу" +msgid "Use Grid Snap" +msgstr "Лепљење по мрежи" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "ПоÑтавке залепљавања" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5488,8 +5562,8 @@ msgid "View" msgstr "Поглед" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Покажи мрежу" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5767,6 +5841,11 @@ msgstr "Линеарна тангента криве" msgid "Hold Shift to edit tangents individually" msgstr "Држи Shift за уређивање појединачних тангенти" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "ДеÑни клик: обриши тачку" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "ИÑпечи Ñонде глобалног оÑветљења (GI)" @@ -6422,6 +6501,10 @@ msgid "Grid" msgstr "Мрежа" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Покажи мрежу" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Конфигурација лепљења" @@ -6483,7 +6566,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Тип:" @@ -6598,6 +6682,11 @@ msgid "Find Next" msgstr "Тражи Ñледећи" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Ðађи претходни" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "ПоÑтавке објекта." @@ -6707,14 +6796,14 @@ msgid "Toggle Scripts Panel" msgstr "Прикажи панел Ñкриптица" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Корак преко" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Корак у" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Корак преко" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Прекини" @@ -6798,7 +6887,7 @@ msgstr "ОчиÑти недавне Ñцене" msgid "Connections to method:" msgstr "Повежи Ñа чвором:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "" @@ -6887,6 +6976,11 @@ msgstr "Обриши тачке" msgid "Cut" msgstr "ИÑеци" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Одабери Ñве" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Обриши линију" @@ -6948,10 +7042,6 @@ msgid "Auto Indent" msgstr "ÐутоматÑко увлачење" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Ðађи претходни" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Филтрирај датотеке..." @@ -7294,6 +7384,11 @@ msgid "Freelook Speed Modifier" msgstr "Брзина Ñлободног погледа" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Брзина Ñлободног погледа" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7333,6 +7428,10 @@ msgid "Use Local Space" msgstr "Режим Ñкалирања (R)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "КориÑти лепљење" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Поглед одоздо" @@ -7573,6 +7672,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7626,6 +7729,11 @@ msgstr "(празно)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Ðалепи оквир" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Ðнимације" @@ -7971,6 +8079,15 @@ msgid "Enable Priority" msgstr "Уреди филтере" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Филтрирај датотеке..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Цртај полчице" @@ -8120,6 +8237,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Обриши тачку криве" @@ -8300,18 +8422,116 @@ msgstr "Ова операција Ñе не може обавити без ÑцРmsgid "TileSet" msgstr "TileSet..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Грешка" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Додај улаз" +msgid "No commit message was provided" +msgstr "Име није дато" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Заједница" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Велика Ñлова" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Ðаправи нов" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Промене шејдера" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Преименуј" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Обриши" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Увећај одабрано" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Сачувај Ñве" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Синхронизуј промене Ñкриптица" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Додај улаз" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8329,6 +8549,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Додај улаз" @@ -8560,6 +8784,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9228,13 +9457,16 @@ msgstr "РеÑурÑи за извоз:" #: editor/project_export.cpp #, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Филтери за извоз нереÑурÑких датотека (зарез за одвајање, пр. *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Филтери за иÑкључивање датотека из пројекта (зарез за одвајање, пр. *.json, " "*.txt)" @@ -9799,6 +10031,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "Обриши одабрано" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9938,6 +10175,10 @@ msgid "Plugins" msgstr "Прикључци" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "ПоÑтавке..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -10111,10 +10352,6 @@ msgstr "Велика Ñлова" msgid "Reset" msgstr "РеÑетуј увеличање" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Грешка" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10170,6 +10407,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10211,10 +10452,25 @@ msgid "Make node as Root" msgstr "Сачувај Ñцену" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Ðаправи чвор" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Обриши чвор/ове графа шејдера" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Ðаправи чвор" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10233,11 +10489,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10319,6 +10573,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Отвори Godot онлајн документацију" @@ -10338,11 +10600,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Покрени Ñкриптицу" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Ðаправи нов" @@ -10589,24 +10846,19 @@ msgid "Will load an existing script file." msgstr "Учитај поÑтојећи Ð±Ð°Ñ Ñ€Ð°Ñпоред." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "КлаÑа:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Обриши шаблон" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Покрени Ñкриптицу" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10621,20 +10873,57 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "Грешка" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Учитај грешке" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Учитај грешке" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" msgstr "" +"\n" +"Извор: " #: editor/script_editor_debugger.cpp -msgid "Errors" +#, fuzzy +msgid "Source:" msgstr "" +"\n" +"Извор: " #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "C++ Source:" msgstr "" +"\n" +"Извор: " + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Errors" +msgstr "" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Child process connected." +msgstr "Веза прекинута" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10642,6 +10931,11 @@ msgid "Copy Error" msgstr "Учитај грешке" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Обриши тачке" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10658,6 +10952,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Извези пројекат" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10670,6 +10969,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10873,10 +11176,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10885,6 +11184,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -11042,6 +11345,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "ПоÑтавке објекта." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11180,6 +11492,10 @@ msgid "Create a new variable." msgstr "Ðаправи нов" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Сигнали:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Ðаправи нови полигон од почетка." @@ -11209,6 +11525,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Обриши тачку" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11217,6 +11538,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Додај улаз" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Додај улаз" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Обриши тачку" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Обриши тачку" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11257,10 +11598,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11286,6 +11637,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "ИÑкључи чворове графа" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Повежи Ñа чвором:" @@ -11320,6 +11676,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Ðаправи претплату" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11340,15 +11717,16 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "Ðаправи коÑти" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Чланови:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11373,6 +11751,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Промени векторÑку функцију" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "ОÑвежи" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Чланови" @@ -11468,6 +11856,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Одабери уређај Ñа лиÑте" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11489,7 +11881,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11568,6 +11961,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12120,11 +12517,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "Додај улаз" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12156,6 +12548,48 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Залепи за мрежу" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Додај улаз" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "Додај улаз" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Методе" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "ОÑобине" + +#~ msgid "Enumerations:" +#~ msgstr "Енумерације:" + +#~ msgid "Constants:" +#~ msgstr "КонÑтанте:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "ОпиÑ:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Захтевање..." + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12293,9 +12727,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "Иди у родитељÑки директоријум" -#~ msgid "Select device from the list" -#~ msgstr "Одабери уређај Ñа лиÑте" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "Отвори Ñцену" @@ -12368,9 +12799,6 @@ msgstr "" #~ msgid "Splits" #~ msgstr "Раздели пут" -#~ msgid "No name provided" -#~ msgstr "Име није дато" - #~ msgid "Create from scene?" #~ msgstr "Ðаправи од Ñцене?" @@ -12507,9 +12935,6 @@ msgstr "" #~ msgid "Toggle Rot Only" #~ msgstr "Само ротација" -#~ msgid "Change Vec Function" -#~ msgstr "Промени векторÑку функцију" - #~ msgid "Change RGB Uniform" #~ msgstr "Промени RGB униформу (uniform)" @@ -12540,18 +12965,12 @@ msgstr "" #~ msgid "Connect Graph Nodes" #~ msgstr "Повежи чворове графа" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "ИÑкључи чворове графа" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Обриши чвор графа шејдера" #~ msgid "Move Shader Graph Node" #~ msgstr "Помери чвор графа шејдера" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Обриши чвор/ове графа шејдера" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Грешка: пронађена циклична веза" @@ -12567,9 +12986,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Помери траку доле" -#~ msgid "Set Transitions to:" -#~ msgstr "ПоÑтави прелаз на:" - #~ msgid "Anim Track Rename" #~ msgstr "Измени име анимације" @@ -12761,9 +13177,6 @@ msgstr "" #~ msgid "Move Add Key" #~ msgstr "Помери кључ" -#~ msgid "Create Subscription" -#~ msgstr "Ðаправи претплату" - #~ msgid "List:" #~ msgstr "ЛиÑта:" diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po index 49789c467a..5a1d545141 100644 --- a/editor/translations/sr_Latn.po +++ b/editor/translations/sr_Latn.po @@ -61,6 +61,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Slobodno" @@ -340,6 +368,7 @@ msgstr "Napravi %d novih kanala i dodaj kljuÄeve?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Napravi" @@ -469,15 +498,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "Uduplaj Selekciju" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -612,8 +635,9 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Postavi tranzicije na:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -624,6 +648,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Uduplaj Selekciju" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -801,7 +830,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -903,7 +933,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -940,7 +971,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1203,7 +1234,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1394,7 +1425,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1448,7 +1481,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1614,6 +1647,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1684,6 +1718,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1833,6 +1868,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1841,7 +1877,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1849,38 +1885,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1889,19 +1905,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1916,10 +1924,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1930,10 +1934,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2002,8 +2002,8 @@ msgstr "" msgid "Copy Selection" msgstr "ObriÅ¡i Selekciju" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2016,6 +2016,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2556,6 +2598,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2756,10 +2810,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2811,14 +2861,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2836,15 +2882,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2907,6 +2959,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2916,6 +2972,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2944,11 +3004,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3046,6 +3101,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3072,13 +3131,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3727,8 +3779,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3853,7 +3905,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3992,6 +4044,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4162,6 +4220,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4337,7 +4396,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4509,6 +4567,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4714,6 +4774,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4726,10 +4790,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4999,20 +5059,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5102,8 +5169,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5370,6 +5436,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6005,6 +6075,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6060,7 +6134,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6159,6 +6234,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6260,11 +6340,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6344,7 +6424,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6426,6 +6506,11 @@ msgstr "Napravi" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6484,10 +6569,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6811,6 +6892,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6844,6 +6929,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7076,6 +7165,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7124,6 +7217,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy msgid "Animations:" msgstr "Optimizuj Animaciju" @@ -7446,6 +7543,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7583,6 +7688,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "ObriÅ¡i Selekciju" @@ -7749,16 +7859,110 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Zajednica" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Napravi" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Animacija Preimenuj Kanal" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Animacija ObriÅ¡i KljuÄeve" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Skaliraj Selekciju" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7774,6 +7978,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7989,6 +8197,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8637,12 +8850,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9186,6 +9401,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9323,6 +9542,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9487,10 +9710,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9546,6 +9765,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9586,10 +9809,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Animacija ObriÅ¡i KljuÄeve" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Animacija ObriÅ¡i KljuÄeve" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9608,11 +9845,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9687,6 +9922,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9703,10 +9946,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp #, fuzzy msgid "Reparent to New Node" msgstr "Napravi" @@ -9936,43 +10175,60 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +#, fuzzy +msgid "Error:" +msgstr "Ogledalo" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9980,7 +10236,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9988,6 +10244,11 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Napravi" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10004,6 +10265,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10016,6 +10281,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10212,10 +10481,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10224,6 +10489,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10378,6 +10647,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10515,6 +10792,10 @@ msgid "Create a new variable." msgstr "Napravi" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Napravi" @@ -10544,6 +10825,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ObriÅ¡i Selekciju" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10552,6 +10838,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Optimizuj Animaciju" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "ObriÅ¡i Selekciju" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "ObriÅ¡i Selekciju" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "ObriÅ¡i Selekciju" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10592,10 +10898,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10620,6 +10936,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Animacija Uduplaj KljuÄeve" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10652,6 +10973,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Napravi" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10672,7 +11014,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10680,8 +11022,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "Funkcije:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10704,6 +11047,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Funkcije:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10798,6 +11150,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10819,7 +11175,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10896,6 +11253,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11433,10 +11794,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11471,9 +11828,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Pomjeri Kanal Animacije Dole" -#~ msgid "Set Transitions to:" -#~ msgstr "Postavi tranzicije na:" - #~ msgid "Anim Track Change Interpolation" #~ msgstr "Animacija Promjeni Interpolaciju Kanala" diff --git a/editor/translations/sv.po b/editor/translations/sv.po index ed6ea9abe6..e62eadd859 100644 --- a/editor/translations/sv.po +++ b/editor/translations/sv.po @@ -10,12 +10,14 @@ # Magnus Helander <helander@fastmail.net>, 2018. # Daniel K <danielkimblad@hotmail.com>, 2018. # Toiya <elviraa98@gmail.com>, 2019. +# Fredrik Welin <figgemail@gmail.com>, 2019. +# Mattias Münster <mattiasmun@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-03-19 15:04+0000\n" -"Last-Translator: Toiya <elviraa98@gmail.com>\n" +"PO-Revision-Date: 2019-10-22 02:53+0000\n" +"Last-Translator: Mattias Münster <mattiasmun@gmail.com>\n" "Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/" "godot/sv/>\n" "Language: sv\n" @@ -23,7 +25,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.6-dev\n" +"X-Generator: Weblate 3.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -35,14 +37,15 @@ msgstr "Ogiltligt typargument till convert(), använd TYPE_* konstanter." #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." msgstr "" +"Inte tillräckligt antal bytes eller ogiltigt format för avkodning av bytes." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "" +msgstr "Ogiltig indata %i (ej överförd) i uttrycket" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "" +msgstr "\"self\" kan inte användas eftersom instansen är null (ej överförd)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." @@ -64,6 +67,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Gratis" @@ -81,9 +112,8 @@ msgid "Time:" msgstr "Tid:" #: editor/animation_bezier_editor.cpp -#, fuzzy msgid "Value:" -msgstr "Värde" +msgstr "Värde:" #: editor/animation_bezier_editor.cpp msgid "Insert Key Here" @@ -268,9 +298,8 @@ msgid "Discrete" msgstr "Diskret" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Trigger" -msgstr "Trigger" +msgstr "Utlös" #: editor/animation_track_editor.cpp msgid "Capture" @@ -311,7 +340,6 @@ msgid "Delete Key(s)" msgstr "Ta bort Nycklar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Change Animation Update Mode" msgstr "Ändra Animationens Uppdateringsläge" @@ -345,6 +373,7 @@ msgstr "Skapa %d NYA spÃ¥r och infoga nycklar?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Skapa" @@ -479,16 +508,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#, fuzzy -msgid "Select All" -msgstr "Välj Alla" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "Välj Node" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Välj en AnimationPlayer frÃ¥n Scenträdet för att redigera animationer." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -548,7 +571,6 @@ msgid "Duplicate Selection" msgstr "Duplicera urval" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Duplicate Transposed" msgstr "Duplicera Transponerade" @@ -572,7 +594,6 @@ msgid "Optimize Animation" msgstr "Optimera Animation" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clean-Up Animation" msgstr "Städa upp Animation" @@ -589,17 +610,14 @@ msgid "Anim. Optimizer" msgstr "Anim. Optimerare" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Max. Linear Error:" msgstr "Max. Linjärt fel:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Max. Angular Error:" msgstr "Max. Vinkel-fel:" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Max Optimizable Angle:" msgstr "Max Optimerbar vinkel:" @@ -612,33 +630,29 @@ msgid "Remove invalid keys" msgstr "Ta bort ogiltiga nycklar" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Remove unresolved and empty tracks" msgstr "Ta bort olösta och tomma spÃ¥r" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clean-up all animations" msgstr "Städa upp alla animationer" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clean-Up Animation(s) (NO UNDO!)" msgstr "Städa upp Animation(er) (GÃ…R INTE Ã…NGRA!)" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Clean-Up" msgstr "Städa upp" #: editor/animation_track_editor.cpp -#, fuzzy msgid "Scale Ratio:" msgstr "Skalnings förhÃ¥llande:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "Ange övergÃ¥ngar:" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -649,6 +663,11 @@ msgstr "" msgid "Copy" msgstr "Kopiera" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Välj Node" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -663,17 +682,14 @@ msgid "Change Audio Track Clip End Offset" msgstr "" #: editor/array_property_edit.cpp -#, fuzzy msgid "Resize Array" msgstr "Ändra storlek pÃ¥ Array" #: editor/array_property_edit.cpp -#, fuzzy msgid "Change Array Value Type" msgstr "Ändra Arrays Värdetyp" #: editor/array_property_edit.cpp -#, fuzzy msgid "Change Array Value" msgstr "Ändra Arrays Värde" @@ -699,7 +715,6 @@ msgid "%d matches." msgstr "Inga matchningar" #: editor/code_editor.cpp editor/find_in_files.cpp -#, fuzzy msgid "Match Case" msgstr "Matcha gemener/versaler" @@ -716,7 +731,6 @@ msgid "Replace All" msgstr "Ersätt Alla" #: editor/code_editor.cpp -#, fuzzy msgid "Selection Only" msgstr "Endast Urval" @@ -801,12 +815,10 @@ msgid "Remove" msgstr "Ta bort" #: editor/connections_dialog.cpp -#, fuzzy msgid "Add Extra Call Argument:" msgstr "Lägg till extra Call Argument:" #: editor/connections_dialog.cpp -#, fuzzy msgid "Extra Call Arguments:" msgstr "Extra Call Argument:" @@ -825,7 +837,6 @@ msgid "" msgstr "" #: editor/connections_dialog.cpp -#, fuzzy msgid "Oneshot" msgstr "Oneshot" @@ -845,7 +856,8 @@ msgstr "Ansluter Signal:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -899,7 +911,6 @@ msgid "Are you sure you want to remove all connections from the \"%s\" signal?" msgstr "" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp -#, fuzzy msgid "Signals" msgstr "Signaler" @@ -928,7 +939,6 @@ msgid "Change %s Type" msgstr "Ändra Typ" #: editor/create_dialog.cpp editor/project_settings_editor.cpp -#, fuzzy msgid "Change" msgstr "Ändra" @@ -943,7 +953,6 @@ msgid "Favorites:" msgstr "Favoriter:" #: editor/create_dialog.cpp editor/editor_file_dialog.cpp -#, fuzzy msgid "Recent:" msgstr "Senaste:" @@ -956,11 +965,11 @@ msgstr "Sök:" #: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp #: editor/property_selector.cpp editor/quick_open.cpp #: modules/visual_script/visual_script_property_selector.cpp -#, fuzzy msgid "Matches:" msgstr "Matchar:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -972,7 +981,6 @@ msgid "Search Replacement For:" msgstr "Sök Ersättning För:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependencies For:" msgstr "Beroenden För:" @@ -996,7 +1004,6 @@ msgstr "" #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Dependencies" msgstr "Beroenden" @@ -1005,28 +1012,23 @@ msgid "Resource" msgstr "Resurs" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp -#, fuzzy +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Sökväg" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependencies:" msgstr "Beroenden:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Fix Broken" msgstr "Fixa Trasig" #: editor/dependency_editor.cpp -#, fuzzy msgid "Dependency Editor" msgstr "Beroende-Redigerare" #: editor/dependency_editor.cpp -#, fuzzy msgid "Search Replacement Resource:" msgstr "Sök Ersättningsresurs:" @@ -1037,12 +1039,10 @@ msgstr "Sök Ersättningsresurs:" #: editor/script_create_dialog.cpp #: modules/visual_script/visual_script_property_selector.cpp #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Open" msgstr "Öppen" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owners Of:" msgstr "Ägare av:" @@ -1052,7 +1052,6 @@ msgid "Remove selected files from the project? (Can't be restored)" msgstr "Ta bort valda filer frÃ¥n projektet? (gÃ¥r inte Ã¥ngra)" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "The files being removed are required by other resources in order for them to " "work.\n" @@ -1067,7 +1066,6 @@ msgid "Cannot remove:" msgstr "Kan inte ta bort:\n" #: editor/dependency_editor.cpp -#, fuzzy msgid "Error loading:" msgstr "Fel vid laddning:" @@ -1077,27 +1075,22 @@ msgid "Load failed due to missing dependencies:" msgstr "Scenen misslyckades att ladda pÃ¥ grund av att beroenden saknas:" #: editor/dependency_editor.cpp editor/editor_node.cpp -#, fuzzy msgid "Open Anyway" msgstr "Öppna ÄndÃ¥" #: editor/dependency_editor.cpp -#, fuzzy msgid "Which action should be taken?" msgstr "Vilken Ã¥tgärd bör vidtas?" #: editor/dependency_editor.cpp -#, fuzzy msgid "Fix Dependencies" msgstr "Fixa Beroenden" #: editor/dependency_editor.cpp -#, fuzzy msgid "Errors loading!" msgstr "Fel vid laddning!" #: editor/dependency_editor.cpp -#, fuzzy msgid "Permanently delete %d item(s)? (No undo!)" msgstr "Ta bort %d sak(er) permanent? (GÃ¥r inte Ã¥ngra!)" @@ -1119,42 +1112,34 @@ msgid "Delete" msgstr "Ta bort" #: editor/dependency_editor.cpp -#, fuzzy msgid "Owns" msgstr "Äger" #: editor/dependency_editor.cpp -#, fuzzy msgid "Resources Without Explicit Ownership:" msgstr "Resurser Utan Explicit Ägande:" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Key" msgstr "Ändra Ordboksnyckel" #: editor/dictionary_property_edit.cpp -#, fuzzy msgid "Change Dictionary Value" msgstr "Ändra Ordboksvärde" #: editor/editor_about.cpp -#, fuzzy msgid "Thanks from the Godot community!" msgstr "Tack frÃ¥n Godot-gemenskapen!" #: editor/editor_about.cpp -#, fuzzy msgid "Godot Engine contributors" msgstr "Godot Engine bidragare" #: editor/editor_about.cpp -#, fuzzy msgid "Project Founders" msgstr "Projektgrundare" #: editor/editor_about.cpp -#, fuzzy msgid "Lead Developer" msgstr "Lead Developer" @@ -1168,37 +1153,30 @@ msgid "Developers" msgstr "Utvecklare" #: editor/editor_about.cpp -#, fuzzy msgid "Authors" msgstr "Författare" #: editor/editor_about.cpp -#, fuzzy msgid "Platinum Sponsors" msgstr "Platinumsponsorer" #: editor/editor_about.cpp -#, fuzzy msgid "Gold Sponsors" msgstr "Guldsponsorer" #: editor/editor_about.cpp -#, fuzzy msgid "Mini Sponsors" msgstr "Minisponsorer" #: editor/editor_about.cpp -#, fuzzy msgid "Gold Donors" msgstr "Gulddonatorer" #: editor/editor_about.cpp -#, fuzzy msgid "Silver Donors" msgstr "Silverdonatorer" #: editor/editor_about.cpp -#, fuzzy msgid "Bronze Donors" msgstr "Bronsdonatorer" @@ -1229,12 +1207,10 @@ msgstr "" "respektive upphovsrätts uttalanden och licensvillkor." #: editor/editor_about.cpp -#, fuzzy msgid "All Components" msgstr "Alla Komponenter" #: editor/editor_about.cpp -#, fuzzy msgid "Components" msgstr "Komponenter" @@ -1248,7 +1224,6 @@ msgid "Error opening package file, not in ZIP format." msgstr "Fel vid öppning av paketetfil, inte i zip-format." #: editor/editor_asset_installer.cpp -#, fuzzy msgid "Uncompressing Assets" msgstr "Dekomprimerar TillgÃ¥ngar" @@ -1259,7 +1234,6 @@ msgstr "Paketet installerades!" #: editor/editor_asset_installer.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Success!" msgstr "Klart!" @@ -1280,7 +1254,6 @@ msgid "Add Effect" msgstr "Lägg till Effekt" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Rename Audio Bus" msgstr "Byt namn pÃ¥ Ljud-Buss" @@ -1290,62 +1263,51 @@ msgid "Change Audio Bus Volume" msgstr "Växla Ljud-Buss Solo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Solo" msgstr "Växla Ljud-Buss Solo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Mute" msgstr "Växla Ljud-Buss Dämpning" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Toggle Audio Bus Bypass Effects" msgstr "Växla Ljud-Buss Bypass Effekter" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Select Audio Bus Send" msgstr "Välj Ljud-Buss Send" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus Effect" msgstr "Lägg till Ljud-Buss Effekt" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Bus Effect" msgstr "Flytta Buss-Effekt" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Bus Effect" msgstr "Ta bort Buss-Effekt" #: editor/editor_audio_buses.cpp #, fuzzy -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "Ljud-Buss, dra och släpp för att ändra ordning." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Solo" msgstr "Solo" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Mute" msgstr "Dämpa" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bypass" msgstr "Bypass" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Bus options" msgstr "Buss-alternativ" @@ -1355,7 +1317,6 @@ msgid "Duplicate" msgstr "Duplicera" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Volume" msgstr "Ã…terställ Volym" @@ -1368,32 +1329,26 @@ msgid "Audio" msgstr "Ljud" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Audio Bus" msgstr "Lägg till Ljud-Buss" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Master bus can't be deleted!" msgstr "Master-Buss kan inte raderas!" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Delete Audio Bus" msgstr "Ta bort Ljud-Buss" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Duplicate Audio Bus" msgstr "Duplicera Ljud-Buss" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Reset Bus Volume" msgstr "Ã…terställ Buss-Volym" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Move Audio Bus" msgstr "Flytta Ljud-Buss" @@ -1408,7 +1363,6 @@ msgid "Location for New Layout..." msgstr "Plats för Ny Layout..." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Open Audio Bus Layout" msgstr "Öppna Ljud-Buss Layout" @@ -1421,12 +1375,10 @@ msgid "Layout" msgstr "Layout" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Invalid file, not an audio bus layout." msgstr "Ogiltig fil, inte en Ljud-Buss Layout." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Add Bus" msgstr "Lägg till Buss" @@ -1438,12 +1390,10 @@ msgstr "Spara Ljud-Buss Layout Som..." #: editor/editor_audio_buses.cpp editor/editor_properties.cpp #: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp #: editor/script_create_dialog.cpp -#, fuzzy msgid "Load" msgstr "Ladda" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load an existing Bus Layout." msgstr "Ladda en befintlig Buss-Layout." @@ -1452,32 +1402,26 @@ msgid "Save As" msgstr "Spara Som" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Save this Bus Layout to a file." msgstr "Spara Buss-Layouten till en fil." #: editor/editor_audio_buses.cpp editor/import_dock.cpp -#, fuzzy msgid "Load Default" msgstr "Ladda Standard" #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Load the default Bus Layout." msgstr "Ladda standard Buss-Layouten." #: editor/editor_audio_buses.cpp -#, fuzzy msgid "Create a new Bus Layout." msgstr "Skapa en ny Buss-Layout." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Invalid name." msgstr "Ogiltigt namn." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Valid characters:" msgstr "Giltiga tecken:" @@ -1503,27 +1447,22 @@ msgid "Keyword cannot be used as an autoload name." msgstr "" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Autoload '%s' already exists!" msgstr "Autoload '%s' finns redan!" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rename Autoload" msgstr "Byt namn pÃ¥ Autload" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Toggle AutoLoad Globals" msgstr "Växla AutoLoad Globals" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Move Autoload" msgstr "Flytta Autoload" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Remove Autoload" msgstr "Ta bort Autoload" @@ -1532,7 +1471,6 @@ msgid "Enable" msgstr "Aktivera" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Rearrange Autoloads" msgstr "Ändra ordning pÃ¥ Autoloads" @@ -1546,23 +1484,21 @@ msgid "File does not exist." msgstr "Fil existerar inte." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Not in resource path." msgstr "Inte i resursens sökväg." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Add AutoLoad" msgstr "Lägg till AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp -#, fuzzy +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Sökväg:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Node Name:" msgstr "Node Namn:" @@ -1572,7 +1508,6 @@ msgid "Name" msgstr "Namn" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Singleton" msgstr "Singleton" @@ -1604,7 +1539,6 @@ msgid "Please select a base directory first." msgstr "Vänligen välj en baskatalog först" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Choose a Directory" msgstr "Välj en Katalog" @@ -1617,7 +1551,7 @@ msgstr "Skapa Mapp" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Namn:" @@ -1631,7 +1565,6 @@ msgid "Choose" msgstr "Välj" #: editor/editor_export.cpp -#, fuzzy msgid "Storing File:" msgstr "Lagrar Fil:" @@ -1640,7 +1573,6 @@ msgid "No export template found at the expected path:" msgstr "" #: editor/editor_export.cpp -#, fuzzy msgid "Packing" msgstr "Packar" @@ -1697,9 +1629,8 @@ msgid "Script Editor" msgstr "Öppna Skript-Redigerare" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "Bibliotek" +msgstr "TillgÃ¥ngsbibliotek" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1802,6 +1733,7 @@ msgstr "Nuvarande:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Ny" @@ -1854,7 +1786,6 @@ msgid "Select Current Folder" msgstr "Skapa Mapp" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "File Exists, Overwrite?" msgstr "Filen finns redan, skriv över?" @@ -1864,7 +1795,6 @@ msgid "Select This Folder" msgstr "Välj en Node" #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "Copy Path" msgstr "Kopiera Sökvägen" @@ -1884,6 +1814,7 @@ msgid "New Folder..." msgstr "Ny Mapp..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Uppdatera" @@ -1904,12 +1835,10 @@ msgid "Open File(s)" msgstr "Öppna Fil(er)" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a Directory" msgstr "Öppna en Katalog" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a File or Directory" msgstr "Öppna en Fil eller Katalog" @@ -1937,17 +1866,14 @@ msgid "Go Up" msgstr "GÃ¥ Upp" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Hidden Files" msgstr "Växla Dolda Filer" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Favorite" msgstr "Växla Favorit" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Toggle Mode" msgstr "Växla Läge" @@ -2002,7 +1928,6 @@ msgid "View items as a list." msgstr "" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Directories & Files:" msgstr "Kataloger & Filer:" @@ -2017,12 +1942,10 @@ msgid "File:" msgstr "Fil:" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Must use a valid extension." msgstr "MÃ¥ste använda en giltigt filändelse." #: editor/editor_file_system.cpp -#, fuzzy msgid "ScanSources" msgstr "ScanSources" @@ -2033,7 +1956,6 @@ msgid "" msgstr "" #: editor/editor_file_system.cpp -#, fuzzy msgid "(Re)Importing Assets" msgstr "(Om)Importerar TillgÃ¥ngar" @@ -2042,93 +1964,56 @@ msgid "Top" msgstr "Topp" #: editor/editor_help.cpp -#, fuzzy msgid "Class:" msgstr "Klass:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp -#, fuzzy +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Ärver:" #: editor/editor_help.cpp -#, fuzzy msgid "Inherited by:" msgstr "Ärvd av:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Kort Beskrivning:" #: editor/editor_help.cpp -#, fuzzy msgid "Properties" msgstr "Egenskaper" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp -#, fuzzy msgid "Methods" msgstr "Metoder" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "Metoder" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "Egenskaper" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "Egenskaper" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -#, fuzzy -msgid "Signals:" -msgstr "Signaler:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Enumerations" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Enumerations:" - -#: editor/editor_help.cpp -#, fuzzy msgid "enum " msgstr "enum " #: editor/editor_help.cpp -#, fuzzy msgid "Constants" msgstr "Konstanter" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Konstanter:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "Beskrivning" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "Beskrivning:" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Dokumentation Online" #: editor/editor_help.cpp @@ -2147,12 +2032,6 @@ msgid "Property Descriptions" msgstr "Egenskapsbeskrivning:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Egenskapsbeskrivning:" - -#: editor/editor_help.cpp -#, fuzzy msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2166,12 +2045,6 @@ msgid "Method Descriptions" msgstr "Metodbeskrivning:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Metodbeskrivning:" - -#: editor/editor_help.cpp -#, fuzzy msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2225,9 +2098,8 @@ msgid "Member Type" msgstr "Medlemmar" #: editor/editor_help_search.cpp -#, fuzzy msgid "Class" -msgstr "Klass:" +msgstr "Klass" #: editor/editor_inspector.cpp editor/project_settings_editor.cpp msgid "Property:" @@ -2242,7 +2114,6 @@ msgid "Set Multiple:" msgstr "" #: editor/editor_log.cpp -#, fuzzy msgid "Output:" msgstr "Output:" @@ -2251,14 +2122,13 @@ msgstr "Output:" msgid "Copy Selection" msgstr "Ta bort Urval" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp -#, fuzzy msgid "Clear" msgstr "Rensa" @@ -2267,6 +2137,49 @@ msgstr "Rensa" msgid "Clear Output" msgstr "Output:" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Stanna" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Ladda ner" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Node" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2285,7 +2198,6 @@ msgid "OK" msgstr "OK" #: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Error saving resource!" msgstr "Fel vid sparande av resurs!" @@ -2300,17 +2212,14 @@ msgid "Save Resource As..." msgstr "Spara Resurs Som..." #: editor/editor_node.cpp -#, fuzzy msgid "Can't open file for writing:" msgstr "Kan inte öppna fil för skrivande:" #: editor/editor_node.cpp -#, fuzzy msgid "Requested file format unknown:" msgstr "EfterfrÃ¥gade filformat okänt:" #: editor/editor_node.cpp -#, fuzzy msgid "Error while saving." msgstr "Fel vid sparande." @@ -2319,22 +2228,18 @@ msgid "Can't open '%s'. The file could have been moved or deleted." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Error while parsing '%s'." msgstr "Fel vid parsning '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unexpected end of file '%s'." msgstr "Oväntat filslut '%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Missing '%s' or its dependencies." msgstr "Saknar '%s' eller dess beroenden." #: editor/editor_node.cpp -#, fuzzy msgid "Error while loading '%s'." msgstr "Fel vid laddning av '%s'." @@ -2347,12 +2252,10 @@ msgid "Analyzing" msgstr "Analyserar" #: editor/editor_node.cpp -#, fuzzy msgid "Creating Thumbnail" msgstr "Skapar Miniatyr" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a tree root." msgstr "Ã…tgärden kan inte göras utan en trädrot." @@ -2376,27 +2279,22 @@ msgid "Can't overwrite scene that is still open!" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Can't load MeshLibrary for merging!" msgstr "Kan inte ladda MeshLibrary för sammanslagning!" #: editor/editor_node.cpp -#, fuzzy msgid "Error saving MeshLibrary!" msgstr "Fel vid sparande av MeshLibrary!" #: editor/editor_node.cpp -#, fuzzy msgid "Can't load TileSet for merging!" msgstr "Kan inte ladda TileSet för sammanslagning!" #: editor/editor_node.cpp -#, fuzzy msgid "Error saving TileSet!" msgstr "Fel vid sparande av TileSet!" #: editor/editor_node.cpp -#, fuzzy msgid "Error trying to save layout!" msgstr "Fel vid försök att spara layout!" @@ -2405,7 +2303,6 @@ msgid "Default editor layout overridden." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Layout name not found!" msgstr "Layoutnamn hittades inte!" @@ -2414,7 +2311,6 @@ msgid "Restored default layout to base settings." msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "" "This resource belongs to a scene that was imported, so it's not editable.\n" "Please read the documentation relevant to importing scenes to better " @@ -2434,7 +2330,6 @@ msgstr "" "Ändringar pÃ¥ den kommer inte att sparas när du sparar den nuvarande scenen." #: editor/editor_node.cpp -#, fuzzy msgid "" "This resource was imported, so it's not editable. Change its settings in the " "import panel and then re-import." @@ -2475,7 +2370,6 @@ msgid "Current scene was never saved, please save it prior to running." msgstr "Nuvarande scen har aldrig sparats, vänligen spara den innan körning." #: editor/editor_node.cpp -#, fuzzy msgid "Could not start subprocess!" msgstr "Kunde inte starta underprocess!" @@ -2484,7 +2378,6 @@ msgid "Open Scene" msgstr "Öppna Scen" #: editor/editor_node.cpp -#, fuzzy msgid "Open Base Scene" msgstr "Öppna Bas-Scen" @@ -2508,7 +2401,6 @@ msgid "Save & Close" msgstr "Spara & Stäng" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes to '%s' before closing?" msgstr "Spara ändringar i '%s' innan stängning?" @@ -2534,32 +2426,26 @@ msgid "Yes" msgstr "Ja" #: editor/editor_node.cpp -#, fuzzy msgid "This scene has never been saved. Save before running?" msgstr "Denna scenen har aldrig sparats. Spara innan körning?" #: editor/editor_node.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "This operation can't be done without a scene." msgstr "Ã…tgärden kan inte göras utan en scen." #: editor/editor_node.cpp -#, fuzzy msgid "Export Mesh Library" msgstr "Exportera Mesh Library" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a root node." msgstr "Ã…tgärden kan inte göras utan en Rot-Node." #: editor/editor_node.cpp -#, fuzzy msgid "Export Tile Set" msgstr "Exportera Tile Set" #: editor/editor_node.cpp -#, fuzzy msgid "This operation can't be done without a selected node." msgstr "Ã…tgärden kan inte göras utan en vald Node." @@ -2568,17 +2454,14 @@ msgid "Current scene not saved. Open anyway?" msgstr "Nuvarande scen inte sparad. Öppna ändÃ¥?" #: editor/editor_node.cpp -#, fuzzy msgid "Can't reload a scene that was never saved." msgstr "Kan inte ladda om en scen som aldrig har sparats." #: editor/editor_node.cpp -#, fuzzy msgid "Revert" msgstr "Ã…terställ" #: editor/editor_node.cpp -#, fuzzy msgid "This action cannot be undone. Revert anyway?" msgstr "Ã…tgärden kan inte Ã¥ngras. Ã…terställ ändÃ¥?" @@ -2592,12 +2475,10 @@ msgid "Quit" msgstr "Avsluta" #: editor/editor_node.cpp -#, fuzzy msgid "Exit the editor?" msgstr "Stäng redigeraren?" #: editor/editor_node.cpp -#, fuzzy msgid "Open Project Manager?" msgstr "Öppna Projekthanteraren?" @@ -2606,18 +2487,15 @@ msgid "Save & Quit" msgstr "Spara & Avsluta" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes to the following scene(s) before quitting?" msgstr "Spara ändringar av följande scen(er) innan du avslutar?" #: editor/editor_node.cpp -#, fuzzy msgid "Save changes the following scene(s) before opening Project Manager?" msgstr "" "Spara ändringar av följande scen(er) innan du öppnar Projekthanteraren?" #: editor/editor_node.cpp -#, fuzzy msgid "" "This option is deprecated. Situations where refresh must be forced are now " "considered a bug. Please report." @@ -2626,7 +2504,6 @@ msgstr "" "anses nu vara en bugg. Vänligen rapportera." #: editor/editor_node.cpp -#, fuzzy msgid "Pick a Main Scene" msgstr "Välj en Huvudscen" @@ -2640,18 +2517,15 @@ msgid "Reopen Closed Scene" msgstr "Stäng Scen" #: editor/editor_node.cpp -#, fuzzy msgid "Unable to enable addon plugin at: '%s' parsing of config failed." msgstr "" "Kunde inte aktivera addon plugin vid: '%s' parsning av config misslyckades." #: editor/editor_node.cpp -#, fuzzy msgid "Unable to find script field for addon plugin at: 'res://addons/%s'." msgstr "Kan inte hitta skriptfältet för addon plugin vid: 'res://addons/%s'." #: editor/editor_node.cpp -#, fuzzy msgid "Unable to load addon script from path: '%s'." msgstr "Kunde inte ladda addon script frÃ¥n sökväg: '%s'" @@ -2665,21 +2539,18 @@ msgstr "" "verktygsläge." #: editor/editor_node.cpp -#, fuzzy msgid "" "Unable to load addon script from path: '%s' Base type is not EditorPlugin." msgstr "" "Kunde inte ladda addon script frÃ¥n sökväg: '%s' Bastyp är inte EditorPlugin." #: editor/editor_node.cpp -#, fuzzy msgid "Unable to load addon script from path: '%s' Script is not in tool mode." msgstr "" "Kunde inte ladda addon script frÃ¥n sökväg: '%s' Skript är inte i " "verktygsläge." #: editor/editor_node.cpp -#, fuzzy msgid "" "Scene '%s' was automatically imported, so it can't be modified.\n" "To make changes to it, a new inherited scene can be created." @@ -2688,7 +2559,6 @@ msgstr "" "För att kunna göra ändringar till den sÃ¥ kan en ärvd scen skapas." #: editor/editor_node.cpp -#, fuzzy msgid "" "Error loading scene, it must be inside the project path. Use 'Import' to " "open the scene, then save it inside the project path." @@ -2697,17 +2567,14 @@ msgstr "" "'Importera' för att öppna scenen, spara den sen inom projektsökvägen." #: editor/editor_node.cpp -#, fuzzy msgid "Scene '%s' has broken dependencies:" msgstr "Scen '%s' har trasiga beroenden:" #: editor/editor_node.cpp -#, fuzzy msgid "Clear Recent Scenes" msgstr "Rensa Senaste Scener" #: editor/editor_node.cpp -#, fuzzy msgid "" "No main scene has ever been defined, select one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -2718,7 +2585,6 @@ msgstr "" "kategorin." #: editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' does not exist, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -2729,7 +2595,6 @@ msgstr "" "kategorin." #: editor/editor_node.cpp -#, fuzzy msgid "" "Selected scene '%s' is not a scene file, select a valid one?\n" "You can change it later in \"Project Settings\" under the 'application' " @@ -2749,7 +2614,6 @@ msgstr "Ta bort Layout" #: editor/editor_node.cpp editor/import_dock.cpp #: editor/script_create_dialog.cpp -#, fuzzy msgid "Default" msgstr "Standard" @@ -2775,7 +2639,6 @@ msgid "Undo Close Tab" msgstr "Stänga Övriga Flikar" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Close Other Tabs" msgstr "Stänga Övriga Flikar" @@ -2789,7 +2652,6 @@ msgid "Close All Tabs" msgstr "Stäng Alla" #: editor/editor_node.cpp -#, fuzzy msgid "Switch Scene Tab" msgstr "Byt Scen-flik" @@ -2810,12 +2672,10 @@ msgid "Dock Position" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Distraction Free Mode" msgstr "Distraktionsfritt Läge" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle distraction-free mode." msgstr "Växla distraktionsfritt läge." @@ -2828,7 +2688,6 @@ msgid "Scene" msgstr "Scen" #: editor/editor_node.cpp -#, fuzzy msgid "Go to previously opened scene." msgstr "GÃ¥ till föregÃ¥ende öppna scen." @@ -2850,7 +2709,6 @@ msgid "Filter Files..." msgstr "Filtrera Filer..." #: editor/editor_node.cpp -#, fuzzy msgid "Operations with scene files." msgstr "Ã…tgärder med scenfiler." @@ -2868,7 +2726,6 @@ msgid "Open Scene..." msgstr "Öppna Scen..." #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Recent" msgstr "Öppna Senaste" @@ -2902,12 +2759,10 @@ msgstr "Ã…ngra" #: editor/editor_node.cpp editor/plugins/script_text_editor.cpp #: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -#, fuzzy msgid "Redo" msgstr "Ã…ngra" #: editor/editor_node.cpp -#, fuzzy msgid "Revert Scene" msgstr "Ã…terställ Scen" @@ -2924,6 +2779,19 @@ msgstr "Projekt" msgid "Project Settings..." msgstr "Projektinställningar" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Version:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2948,13 +2816,11 @@ msgid "Orphan Resource Explorer..." msgstr "Föräldralös Resursutforskare" #: editor/editor_node.cpp -#, fuzzy msgid "Quit to Project List" msgstr "Avsluta till Projektlistan" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/project_export.cpp -#, fuzzy msgid "Debug" msgstr "Debugga" @@ -3003,9 +2869,8 @@ msgid "" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Sync Scene Changes" -msgstr "Synkronisera Scenändringar" +msgstr "Synkronisera scenändringar" #: editor/editor_node.cpp msgid "" @@ -3016,9 +2881,8 @@ msgid "" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Sync Script Changes" -msgstr "Synkronisera Skript-ändringar" +msgstr "Synkronisera skriptändringar" #: editor/editor_node.cpp msgid "" @@ -3095,12 +2959,10 @@ msgstr "Sök" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "Online Docs" msgstr "Dokumentation Online" #: editor/editor_node.cpp -#, fuzzy msgid "Q&A" msgstr "FrÃ¥gor och svar" @@ -3110,7 +2972,7 @@ msgstr "" #: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp msgid "Community" -msgstr "Community" +msgstr "Gemenskap" #: editor/editor_node.cpp msgid "About" @@ -3136,13 +2998,7 @@ msgstr "Pausa Scen" msgid "Stop the scene." msgstr "Stanna scenen." -#: editor/editor_node.cpp editor/editor_profiler.cpp -#, fuzzy -msgid "Stop" -msgstr "Stanna" - #: editor/editor_node.cpp -#, fuzzy msgid "Play the edited scene." msgstr "Spela den redigerade scenen." @@ -3191,20 +3047,15 @@ msgid "FileSystem" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Inspector" msgstr "Inspektör" #: editor/editor_node.cpp -msgid "Node" -msgstr "Node" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "Expandera alla" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -3223,15 +3074,21 @@ msgstr "Mallar" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3255,7 +3112,6 @@ msgid "Password:" msgstr "Lösenord:" #: editor/editor_node.cpp -#, fuzzy msgid "Open & Run a Script" msgstr "Öppna & Kör ett Skript" @@ -3268,7 +3124,6 @@ msgid "Load Errors" msgstr "" #: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Select" msgstr "Välj" @@ -3281,7 +3136,6 @@ msgid "Open 3D Editor" msgstr "" #: editor/editor_node.cpp -#, fuzzy msgid "Open Script Editor" msgstr "Öppna Skript-Redigerare" @@ -3297,6 +3151,11 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "Resurser" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3308,6 +3167,11 @@ msgstr "Miniatyr..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "Öppna Skript" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "Redigera Polygon" @@ -3337,11 +3201,6 @@ msgstr "Status:" msgid "Edit:" msgstr "Redigera" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3389,7 +3248,6 @@ msgid "Edit Text:" msgstr "Redigera tema..." #: editor/editor_properties.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "On" msgstr "PÃ¥" @@ -3440,10 +3298,14 @@ msgid "Pick a Viewport" msgstr "" #: editor/editor_properties.cpp editor/property_editor.cpp -#, fuzzy msgid "New Script" msgstr "Nytt Skript" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Öppna Skript" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3470,14 +3332,6 @@ msgstr "Klistra in" msgid "Convert To %s" msgstr "Konvertera till %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "Öppna Skript-Redigerare" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3520,12 +3374,10 @@ msgid "Write your logic in the _run() method." msgstr "" #: editor/editor_run_script.cpp -#, fuzzy msgid "There is an edited scene already." msgstr "Det finns en redigerad scen redan." #: editor/editor_run_script.cpp -#, fuzzy msgid "Couldn't instance script:" msgstr "Kunde inte insansiera Skript:" @@ -3534,7 +3386,6 @@ msgid "Did you forget the 'tool' keyword?" msgstr "" #: editor/editor_run_script.cpp -#, fuzzy msgid "Couldn't run script:" msgstr "Kunde inte köra Skript:" @@ -3543,7 +3394,6 @@ msgid "Did you forget the '_run' method?" msgstr "" #: editor/editor_sub_scene.cpp -#, fuzzy msgid "Select Node(s) to Import" msgstr "Välj Nod(er) att Importera" @@ -3556,7 +3406,6 @@ msgid "Scene Path:" msgstr "" #: editor/editor_sub_scene.cpp -#, fuzzy msgid "Import From Node:" msgstr "Importera FrÃ¥n Node:" @@ -3570,7 +3419,6 @@ msgid "Uninstall" msgstr "Avinstallera" #: editor/export_template_manager.cpp -#, fuzzy msgid "(Installed)" msgstr "(Installerad)" @@ -3588,7 +3436,6 @@ msgid "(Missing)" msgstr "(Saknas)" #: editor/export_template_manager.cpp -#, fuzzy msgid "(Current)" msgstr "(Nuvarande)" @@ -3597,7 +3444,6 @@ msgid "Retrieving mirrors, please wait..." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove template version '%s'?" msgstr "Ta bort mallversionen '%s'?" @@ -3623,7 +3469,6 @@ msgid "Extracting Export Templates" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Importing:" msgstr "Importerar:" @@ -3640,7 +3485,6 @@ msgstr "" #: editor/export_template_manager.cpp #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Can't connect." msgstr "Kan inte ansluta." @@ -3663,7 +3507,6 @@ msgid "Failed:" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Complete." msgstr "Nedladdning Klar." @@ -3688,7 +3531,6 @@ msgid "Connecting to Mirror..." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Disconnected" msgstr "FrÃ¥nkopplad" @@ -3712,7 +3554,6 @@ msgid "Can't Connect" msgstr "Kan inte Ansluta" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connected" msgstr "Ansluten" @@ -3722,12 +3563,10 @@ msgid "Requesting..." msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Downloading" msgstr "Laddar ner" #: editor/export_template_manager.cpp -#, fuzzy msgid "Connection Error" msgstr "Anslutningsfel" @@ -3741,22 +3580,18 @@ msgid "Uncompressing Android Build Sources" msgstr "Dekomprimerar TillgÃ¥ngar" #: editor/export_template_manager.cpp -#, fuzzy msgid "Current Version:" msgstr "Nuvarande Version:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Installed Versions:" msgstr "Installerade Versioner:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Install From File" msgstr "Installera FrÃ¥n Fil" #: editor/export_template_manager.cpp -#, fuzzy msgid "Remove Template" msgstr "Ta Bort Mall" @@ -3770,7 +3605,6 @@ msgid "Export Template Manager" msgstr "" #: editor/export_template_manager.cpp -#, fuzzy msgid "Download Templates" msgstr "Ladda Ner Mallar" @@ -3819,7 +3653,6 @@ msgid "Provided name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "A file or folder with this name already exists." msgstr "En fil eller mapp med detta namn finns redan." @@ -3828,12 +3661,10 @@ msgid "Name contains invalid characters." msgstr "" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming file:" msgstr "Byter namn pÃ¥ filen:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Renaming folder:" msgstr "Byter namn pÃ¥ mappen:" @@ -3858,7 +3689,6 @@ msgid "Open Scenes" msgstr "Öppna Scen" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Instance" msgstr "Instans" @@ -4020,7 +3850,6 @@ msgid "Replace..." msgstr "Ersätt..." #: editor/find_in_files.cpp editor/progress_dialog.cpp scene/gui/dialogs.cpp -#, fuzzy msgid "Cancel" msgstr "Avbryt" @@ -4115,12 +3944,10 @@ msgid "Import as Single Scene" msgstr "" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Animations" msgstr "Importera med Separata Animationer" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials" msgstr "Importera med Separata Material" @@ -4137,7 +3964,6 @@ msgid "Import with Separate Objects+Animations" msgstr "" #: editor/import/resource_importer_scene.cpp -#, fuzzy msgid "Import with Separate Materials+Animations" msgstr "Importera med Separata Material+Animationer" @@ -4204,13 +4030,13 @@ msgid " Files" msgstr "" #: editor/import_dock.cpp -#, fuzzy msgid "Import As:" msgstr "Importera Som:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "Ã…terställ Zoom" #: editor/import_dock.cpp msgid "Reimport" @@ -4249,12 +4075,10 @@ msgid "Save As..." msgstr "Spara Som..." #: editor/inspector_dock.cpp -#, fuzzy msgid "Copy Params" msgstr "Kopiera Params" #: editor/inspector_dock.cpp -#, fuzzy msgid "Paste Params" msgstr "Klistra in Params" @@ -4268,12 +4092,10 @@ msgid "Copy Resource" msgstr "Kopiera Resurs" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Built-In" msgstr "Gör Inbyggd" #: editor/inspector_dock.cpp -#, fuzzy msgid "Make Sub-Resources Unique" msgstr "Gör Under-resurser Unika" @@ -4307,7 +4129,6 @@ msgid "History of recently edited objects." msgstr "" #: editor/inspector_dock.cpp -#, fuzzy msgid "Object properties." msgstr "Objektegenskaper." @@ -4321,7 +4142,6 @@ msgid "Changes may be lost!" msgstr "" #: editor/multi_node_edit.cpp -#, fuzzy msgid "MultiNode Set" msgstr "MultiNode Ange" @@ -4348,7 +4168,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp #, fuzzy msgid "Language:" msgstr "SprÃ¥k" @@ -4496,6 +4316,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "Öppna Skript-Redigerare" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4566,7 +4393,6 @@ msgstr "Uppdatera Ändringar" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Edit Filters" msgstr "Redigera Filter" @@ -4613,7 +4439,6 @@ msgstr "Ta bort Nod(er)" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Delete Node(s)" msgstr "Ta bort Nod(er)" @@ -4682,6 +4507,7 @@ msgid "Change Animation Name:" msgstr "Ändra Animationsnamn:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Ta bort Animation?" @@ -4732,12 +4558,10 @@ msgid "No animation resource on clipboard!" msgstr "Inte i resursens sökväg." #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Pasted Animation" msgstr "Inklistrad Animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Paste Animation" msgstr "Klistra in Animation" @@ -4775,14 +4599,13 @@ msgid "Scale animation playback globally for the node." msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation Tools" msgstr "Animeringsverktyg" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Animation" -msgstr "Animation" +msgstr "Animering" #: editor/plugins/animation_player_editor_plugin.cpp #, fuzzy @@ -4859,7 +4682,6 @@ msgid "Pin AnimationPlayer" msgstr "Klistra in Animation" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Create New Animation" msgstr "Skapa Ny Animation" @@ -4871,8 +4693,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp -#, fuzzy msgid "Error!" msgstr "Fel!" @@ -4900,7 +4720,6 @@ msgstr "Lägg Till Översättning" #: editor/plugins/animation_state_machine_editor.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Node" msgstr "Lägg Till Node" @@ -4984,18 +4803,15 @@ msgstr "ÖvergÃ¥ng" #: editor/plugins/animation_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "AnimationTree" -msgstr "Animation" +msgstr "Animationsträd" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "New name:" msgstr "Nytt namn:" #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Scale:" msgstr "Skala:" @@ -5049,11 +4865,12 @@ msgid "X-Fade Time (s):" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Current:" msgstr "Nuvarande:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -5078,7 +4895,6 @@ msgid "Animation tree is invalid." msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Animation Node" msgstr "Animations-Node" @@ -5087,7 +4903,6 @@ msgid "OneShot Node" msgstr "OneShot-Node" #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Mix Node" msgstr "Mix-Node" @@ -5121,7 +4936,6 @@ msgid "Import Animations..." msgstr "Importera Animationer..." #: editor/plugins/animation_tree_player_editor_plugin.cpp -#, fuzzy msgid "Edit Node Filters" msgstr "Redigera Node-Filter" @@ -5131,7 +4945,6 @@ msgid "Filters..." msgstr "Filter..." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Contents:" msgstr "InnehÃ¥ll:" @@ -5237,7 +5050,6 @@ msgid "Install..." msgstr "Installera" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Retry" msgstr "Försök igen" @@ -5271,6 +5083,10 @@ msgid "All" msgstr "Alla" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Importera" @@ -5284,16 +5100,11 @@ msgid "Sort:" msgstr "Sortera:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategori:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Site:" msgstr "Webbplats:" @@ -5342,7 +5153,6 @@ msgstr "" #: editor/plugins/camera_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/rename_dialog.cpp -#, fuzzy msgid "Preview" msgstr "Förhandsgranska" @@ -5568,24 +5378,32 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Växla Läge" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy -msgid "Snapping Options" -msgstr "Alternativ" +msgid "Toggle grid snapping." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "Alternativ" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "" @@ -5643,13 +5461,11 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Makes sure the object's children are not selectable." msgstr "Ser till att objektets barn inte är valbara." #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Restores the object's children's ability to be selected." msgstr "Ã…terställer objektets barns egenskap att väljas." @@ -5676,8 +5492,7 @@ msgid "View" msgstr "Visa" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5785,7 +5600,6 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Create Node" msgstr "Skapa Node" @@ -5800,7 +5614,6 @@ msgid "Change Default Type" msgstr "Ändra Typ" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "" "Drag & drop + Shift : Add node as sibling\n" "Drag & drop + Alt : Change node type" @@ -5846,7 +5659,6 @@ msgstr "" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Particles" msgstr "Partiklar" @@ -5951,10 +5763,13 @@ msgid "Toggle Curve Linear Tangent" msgstr "" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Hold Shift to edit tangents individually" msgstr "HÃ¥ll Skift för att redigera tangenter individuellt" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6106,12 +5921,10 @@ msgid "Remove Selected Item" msgstr "" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Import from Scene" msgstr "Importera frÃ¥n Scen" #: editor/plugins/mesh_library_editor_plugin.cpp -#, fuzzy msgid "Update from Scene" msgstr "Uppdatera frÃ¥n scen" @@ -6176,17 +5989,14 @@ msgid "Source Mesh:" msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "X-Axis" msgstr "X-Axel" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Y-Axis" msgstr "Y-Axel" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Z-Axis" msgstr "Z-Axel" @@ -6195,7 +6005,6 @@ msgid "Mesh Up Axis:" msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Random Rotation:" msgstr "Slumpmässig Rotation:" @@ -6204,7 +6013,6 @@ msgid "Random Tilt:" msgstr "" #: editor/plugins/multimesh_editor_plugin.cpp -#, fuzzy msgid "Random Scale:" msgstr "Slumpmässig Skala:" @@ -6277,7 +6085,6 @@ msgid "Surface Points+Normal (Directed)" msgstr "" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Volume" msgstr "Volym" @@ -6381,7 +6188,6 @@ msgstr "" #: editor/plugins/path_2d_editor_plugin.cpp #: editor/plugins/path_editor_plugin.cpp editor/plugins/theme_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp -#, fuzzy msgid "Options" msgstr "Alternativ" @@ -6607,6 +6413,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6657,14 +6467,13 @@ msgstr "Klistra in Resurs" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Instance:" msgstr "Instans:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp -#, fuzzy +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Typ:" @@ -6752,7 +6561,6 @@ msgid "Save File As..." msgstr "Spara Som..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Import Theme" msgstr "Importera Tema" @@ -6761,7 +6569,6 @@ msgid "Error while saving theme" msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Error saving" msgstr "Fel vid sparande" @@ -6776,11 +6583,15 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Find Next" msgstr "Hitta Nästa" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Filtrera noder" @@ -6795,31 +6606,26 @@ msgid "Filter methods" msgstr "Filtrera noder" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Sort" msgstr "Sortera" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Move Up" msgstr "Flytta Upp" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp -#, fuzzy msgid "Move Down" msgstr "Flytta Ner" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Next script" msgstr "Nästa Skript" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Previous script" msgstr "FöregÃ¥ende Skript" @@ -6861,9 +6667,8 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Theme" -msgstr "Spara Tema" +msgstr "Tema" #: editor/plugins/script_editor_plugin.cpp #, fuzzy @@ -6871,12 +6676,10 @@ msgid "Import Theme..." msgstr "Importera Tema" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reload Theme" msgstr "Ladda om Tema" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Save Theme" msgstr "Spara Tema" @@ -6897,11 +6700,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6947,7 +6750,6 @@ msgid "Go to next edited document." msgstr "" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Discard" msgstr "Kasta" @@ -6959,13 +6761,11 @@ msgstr "" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "Reload" msgstr "Ladda om" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "Resave" msgstr "Spara om" @@ -6988,7 +6788,7 @@ msgstr "Rensa Senaste Scener" msgid "Connections to method:" msgstr "Anslut Till Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Källa:" @@ -7031,22 +6831,18 @@ msgid "Lookup Symbol" msgstr "" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Pick Color" msgstr "Välj Färg" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp -#, fuzzy msgid "Convert Case" msgstr "Konvertera gemener/versaler" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp -#, fuzzy msgid "Uppercase" msgstr "Versaler" #: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp -#, fuzzy msgid "Lowercase" msgstr "Gemener" @@ -7075,12 +6871,15 @@ msgstr "Radera punkter" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp -#, fuzzy msgid "Cut" msgstr "Klipp" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Välj Alla" + #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Delete Line" msgstr "Ta bort rad" @@ -7136,15 +6935,10 @@ msgid "Convert Indent to Tabs" msgstr "Konvertera till %s" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Auto Indent" msgstr "Automatisk Indentering" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Filtrera Filer..." @@ -7243,9 +7037,8 @@ msgid "Create physical bones" msgstr "" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "Singleton" +msgstr "Skelett" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -7262,7 +7055,6 @@ msgid "Orthogonal" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Perspective" msgstr "Perspektiv" @@ -7271,17 +7063,14 @@ msgid "Transform Aborted." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "X-Axis Transform." msgstr "X-Axel Transformering." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Y-Axis Transform." msgstr "Y-Axel Transformering." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Z-Axis Transform." msgstr "Z-Axel Transformering." @@ -7290,7 +7079,6 @@ msgid "View Plane Transform." msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Scaling: " msgstr "Skalning: " @@ -7299,7 +7087,6 @@ msgid "Translating: " msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rotating %s degrees." msgstr "Roterar %s grader." @@ -7345,57 +7132,46 @@ msgid "Vertices" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View." msgstr "Vy OvanifrÃ¥n." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom View." msgstr "Vy UnderifrÃ¥n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Bottom" msgstr "Botten" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View." msgstr "Vy frÃ¥n vänster." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left" msgstr "Vänster" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View." msgstr "Vy frÃ¥n höger." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right" msgstr "Höger" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View." msgstr "Vy FramifrÃ¥n." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front" msgstr "Framsida" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View." msgstr "Vy BakifrÃ¥n." #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear" msgstr "Baksida" @@ -7410,12 +7186,10 @@ msgid "Align Rotation with View" msgstr "Vy frÃ¥n höger" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "No parent to instance a child at." msgstr "Ingen förälder att instansiera ett barn till." #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "This operation requires a single selected node." msgstr "Ã…tgärden kräver en enstaka vald Node." @@ -7449,7 +7223,6 @@ msgid "View Gizmos" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "View Information" msgstr "Visa Information" @@ -7462,7 +7235,6 @@ msgid "Half Resolution" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Audio Listener" msgstr "Ljud-Lyssnare" @@ -7504,6 +7276,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7538,32 +7314,30 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Vy underifrÃ¥n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Top View" msgstr "Vy ovanifrÃ¥n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Rear View" msgstr "Vy bakifrÃ¥n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Front View" msgstr "Vy framifrÃ¥n" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Left View" msgstr "Vy frÃ¥n vänster" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Right View" msgstr "Vy frÃ¥n höger" @@ -7589,7 +7363,6 @@ msgstr "" #: editor/plugins/spatial_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform" msgstr "Transformera" @@ -7780,6 +7553,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7827,12 +7604,16 @@ msgid "Change Animation FPS" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "(empty)" msgstr "(tom)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Flytta Nod(er)" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animationer" @@ -7846,7 +7627,6 @@ msgid "Speed (FPS):" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Loop" msgstr "Loop" @@ -7873,12 +7653,10 @@ msgid "Insert Empty (After)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (Before)" msgstr "Flytta (före)" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Move (After)" msgstr "Flytta (efter)" @@ -7959,7 +7737,6 @@ msgid "Add All Items" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Add All" msgstr "Lägg till Alla" @@ -7968,7 +7745,6 @@ msgid "Remove All Items" msgstr "" #: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp -#, fuzzy msgid "Remove All" msgstr "Ta bort Alla" @@ -7990,7 +7766,6 @@ msgid "Remove Class Items" msgstr "" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Create Empty Template" msgstr "Skapa tom mall" @@ -8093,7 +7868,6 @@ msgid "Has,Many,Options" msgstr "Alternativ" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Data Type:" msgstr "Datatyp:" @@ -8102,12 +7876,10 @@ msgid "Icon" msgstr "Ikon" #: editor/plugins/theme_editor_plugin.cpp editor/rename_dialog.cpp -#, fuzzy msgid "Style" msgstr "Stil" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Font" msgstr "Font" @@ -8173,6 +7945,15 @@ msgid "Enable Priority" msgstr "Redigera Filter" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Filtrera Filer..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8318,6 +8099,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Flytta nuvarande spÃ¥r upp." @@ -8494,34 +8280,135 @@ msgstr "Ã…tgärden kan inte göras utan en scen." msgid "TileSet" msgstr "TileSet..." -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Fel" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Lägg till Signal" +msgid "Commit" +msgstr "Community" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Skapa Ny" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Ändra" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Byt namn" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Ta bort" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Ändra" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Skala urval" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Spara Alla" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Synkronisera Skript-ändringar" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Status" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Add Output" +msgstr "Output:" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Scalar" msgstr "Skala:" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector" -msgstr "Inspektör" +msgstr "Vektor" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Favoriter:" @@ -8586,7 +8473,6 @@ msgstr "Duplicera Nod(er)" #: editor/plugins/visual_shader_editor_plugin.cpp #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Paste Nodes" msgstr "Klistra in Noder" @@ -8747,6 +8633,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9400,21 +9291,21 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Patches" msgstr "Patchar" #: editor/project_export.cpp -#, fuzzy msgid "Make Patch" msgstr "Gör Patch" @@ -9461,7 +9352,6 @@ msgid "Script Encryption Key (256-bits as hex):" msgstr "" #: editor/project_export.cpp -#, fuzzy msgid "Export PCK/Zip" msgstr "Exportera PCK/Zip" @@ -9488,7 +9378,6 @@ msgid "Export With Debug" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "The path does not exist." msgstr "Sökvägen finns inte." @@ -9509,7 +9398,6 @@ msgid "Directory already contains a Godot project." msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "New Game Project" msgstr "Nytt Spelprojekt" @@ -9532,7 +9420,6 @@ msgid "There is already a folder in this path with the specified name." msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "It would be a good idea to name your project." msgstr "Det vore en bra idé att namnge ditt projekt." @@ -9559,12 +9446,10 @@ msgid "The following files failed extraction from package:" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Rename Project" msgstr "Byt namn pÃ¥ Projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Import Existing Project" msgstr "Importera Befintligt Projekt" @@ -9574,7 +9459,6 @@ msgid "Import & Edit" msgstr "Importera" #: editor/project_manager.cpp -#, fuzzy msgid "Create New Project" msgstr "Skapa Nytt Projekt" @@ -9584,7 +9468,6 @@ msgid "Create & Edit" msgstr "Skapa Skript" #: editor/project_manager.cpp -#, fuzzy msgid "Install Project:" msgstr "Installera Projekt:" @@ -9594,12 +9477,10 @@ msgid "Install & Edit" msgstr "Installera" #: editor/project_manager.cpp -#, fuzzy msgid "Project Name:" msgstr "Projektnamn:" #: editor/project_manager.cpp -#, fuzzy msgid "Project Path:" msgstr "Sökväg till projektet:" @@ -9641,7 +9522,6 @@ msgid "Renderer can be changed later, but scenes may need to be adjusted." msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Unnamed Project" msgstr "Namnlöst Projekt" @@ -9746,7 +9626,6 @@ msgid "" msgstr "" #: editor/project_manager.cpp -#, fuzzy msgid "Project Manager" msgstr "Projektledare" @@ -9756,17 +9635,14 @@ msgid "Projects" msgstr "Projekt" #: editor/project_manager.cpp -#, fuzzy msgid "Scan" msgstr "Skanna" #: editor/project_manager.cpp -#, fuzzy msgid "Select a Folder to Scan" msgstr "Välj en mapp att skanna" #: editor/project_manager.cpp -#, fuzzy msgid "New Project" msgstr "Nytt Projekt" @@ -9776,17 +9652,14 @@ msgid "Remove Missing" msgstr "Ta bort Animation" #: editor/project_manager.cpp -#, fuzzy msgid "Templates" msgstr "Mallar" #: editor/project_manager.cpp -#, fuzzy msgid "Restart Now" msgstr "Starta om nu" #: editor/project_manager.cpp -#, fuzzy msgid "Can't run project" msgstr "Kan inte köra projektet" @@ -9797,7 +9670,6 @@ msgid "" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Key " msgstr "Nyckel " @@ -9810,7 +9682,6 @@ msgid "Joy Axis" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Mouse Button" msgstr "Musknapp" @@ -9844,7 +9715,6 @@ msgid "All Devices" msgstr "Enhet" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Device" msgstr "Enhet" @@ -9912,7 +9782,6 @@ msgid "Joypad Axis Index:" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Axis" msgstr "Axel" @@ -9995,16 +9864,18 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Add Translation" msgstr "Lägg Till Översättning" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Remove Translation" msgstr "Ta bort Översättning" @@ -10061,16 +9932,14 @@ msgid "Action:" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Action" -msgstr "Funktion:" +msgstr "Ã…tgärd" #: editor/project_settings_editor.cpp msgid "Deadzone" -msgstr "" +msgstr "Dödzon" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Device:" msgstr "Enhet:" @@ -10079,17 +9948,14 @@ msgid "Index:" msgstr "" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Localization" msgstr "Lokalisering" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translations" msgstr "Översättningar" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Translations:" msgstr "Översättningar:" @@ -10139,7 +10005,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp -#, fuzzy +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "Noll" @@ -10160,12 +10029,10 @@ msgid "Dir..." msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Assign" msgstr "Tilldela" #: editor/property_editor.cpp -#, fuzzy msgid "Select Node" msgstr "Välj Node" @@ -10174,7 +10041,6 @@ msgid "Error loading file: Not a resource!" msgstr "" #: editor/property_editor.cpp -#, fuzzy msgid "Pick a Node" msgstr "Välj en Node" @@ -10316,13 +10182,7 @@ msgstr "Versaler" msgid "Reset" msgstr "Ã…terställ Zoom" -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Error" -msgstr "Fel" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent Node" msgstr "Byt Förälder-Node" @@ -10343,7 +10203,6 @@ msgid "Run Mode:" msgstr "" #: editor/run_settings_dialog.cpp -#, fuzzy msgid "Current Scene" msgstr "Nuvarande Scen" @@ -10364,7 +10223,6 @@ msgid "No parent to instance the scenes at." msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Error loading scene from %s" msgstr "Fel vid laddning av scen frÃ¥n %s" @@ -10379,7 +10237,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Instansiera Barn-Scen" @@ -10388,22 +10249,18 @@ msgid "Clear Script" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "This operation can't be done on the tree root." msgstr "Ã…tgärden kan inte göras pÃ¥ trädroten." #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Node In Parent" msgstr "Flytta Node i Förälder" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Move Nodes In Parent" msgstr "Flytta Noder i Förälder" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Duplicate Node(s)" msgstr "Duplicera Nod(er)" @@ -10426,8 +10283,21 @@ msgstr "Vettigt!" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Delete Node(s)?" -msgstr "Ta bort Nod(er)?" +msgid "Delete %d nodes?" +msgstr "Ta bort Nod(er)" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Ta bort Nod(er)" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10449,12 +10319,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy -msgid "Editable Children" -msgstr "Redigerbara Barn" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10500,12 +10367,10 @@ msgid "Can't operate on nodes the current scene inherits from!" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach Script" msgstr "Fäst Skript" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Remove Node(s)" msgstr "Ta bort Nod(er)" @@ -10521,7 +10386,6 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Error saving scene." msgstr "Fel vid sparande av scenen." @@ -10539,12 +10403,19 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Redigerbara Barn" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Öppna Senaste" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add Child Node" msgstr "Lägg till Barn-Node" @@ -10554,17 +10425,11 @@ msgid "Expand/Collapse All" msgstr "Stäng Alla" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change Type" msgstr "Ändra Typ" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Öppna Skript" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Byt Förälder-Node" @@ -10582,7 +10447,6 @@ msgid "Save Branch as Scene" msgstr "" #: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp -#, fuzzy msgid "Copy Node Path" msgstr "Kopiera Node-Sökväg" @@ -10602,7 +10466,6 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Attach a new or existing script for the selected node." msgstr "Koppla pÃ¥ ett nytt eller befintligt Skript till vald Node." @@ -10699,12 +10562,10 @@ msgid "Invalid node name, the following characters are not allowed:" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Rename Node" msgstr "Byt namn pÃ¥ Node" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Scene Tree (Nodes):" msgstr "Scenträd (Noder):" @@ -10713,7 +10574,6 @@ msgid "Node Configuration Warning!" msgstr "" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Select a Node" msgstr "Välj en Node" @@ -10751,7 +10611,6 @@ msgid "Wrong extension chosen." msgstr "" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading template '%s'" msgstr "Fel vid laddning av mall '%s'" @@ -10760,7 +10619,6 @@ msgid "Error - Could not create script in filesystem." msgstr "Fel - Kunde inte skapa Skript i filsystemet." #: editor/script_create_dialog.cpp -#, fuzzy msgid "Error loading script from %s" msgstr "Fel vid laddning av Skript frÃ¥n %s" @@ -10821,27 +10679,19 @@ msgid "Will load an existing script file." msgstr "Ladda in befintlig Skript-fil" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "SprÃ¥k" - -#: editor/script_create_dialog.cpp -#, fuzzy -msgid "Inherits" -msgstr "Ärver" - -#: editor/script_create_dialog.cpp #, fuzzy -msgid "Class Name" +msgid "Class Name:" msgstr "Klassnamn" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "Mall" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Öppna Skript" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10856,21 +10706,50 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "Varning" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "" +msgid "Error:" +msgstr "Fel:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Fel" #: editor/script_editor_debugger.cpp #, fuzzy +msgid "C++ Error:" +msgstr "Fel:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Källa:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Källa:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Källa:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Fel" #: editor/script_editor_debugger.cpp #, fuzzy -msgid "Child Process Connected" +msgid "Child process connected." msgstr "Barnprocess Ansluten" #: editor/script_editor_debugger.cpp @@ -10879,6 +10758,11 @@ msgid "Copy Error" msgstr "Fel" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Radera punkter" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10895,11 +10779,15 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Exportera Projekt" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Value" msgstr "Värde" @@ -10908,11 +10796,14 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Total:" msgstr "Totalt:" @@ -10933,12 +10824,10 @@ msgid "Format" msgstr "" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Usage" msgstr "Användning" #: editor/script_editor_debugger.cpp -#, fuzzy msgid "Misc" msgstr "Övrigt" @@ -10982,7 +10871,6 @@ msgid "Editor Settings" msgstr "" #: editor/settings_config_dialog.cpp -#, fuzzy msgid "Shortcuts" msgstr "Genvägar" @@ -11110,16 +10998,10 @@ msgid "Disabled GDNative Singleton" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Library" msgstr "Bibliotek" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Status" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Libraries: " msgstr "Bibliotek: " @@ -11128,21 +11010,22 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Not a script with an instance" msgstr "Inte ett Skript med en instans" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Not based on a script" msgstr "Inte baserad pÃ¥ ett Skript" #: modules/gdscript/gdscript_functions.cpp -#, fuzzy msgid "Not based on a resource file" msgstr "Inte baserad pÃ¥ en resursfil" @@ -11231,17 +11114,14 @@ msgid "Clip Below" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Edit X Axis" msgstr "Redigera X-Axel" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Edit Y Axis" msgstr "Redigera Y-Axel" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Edit Z Axis" msgstr "Redigera Z-Axel" @@ -11274,7 +11154,6 @@ msgid "Cursor Clear Rotation" msgstr "" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Clear Selection" msgstr "Rensa Urval" @@ -11291,6 +11170,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Filtrera noder" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11332,12 +11220,10 @@ msgid "Eroding walkable area..." msgstr "" #: modules/recast/navigation_mesh_generator.cpp -#, fuzzy msgid "Partitioning..." msgstr "Partitionerar..." #: modules/recast/navigation_mesh_generator.cpp -#, fuzzy msgid "Creating contours..." msgstr "Skapar konturer..." @@ -11431,6 +11317,10 @@ msgid "Create a new variable." msgstr "Skapa Ny" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Signaler:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Skapa Prenumeration" @@ -11444,36 +11334,55 @@ msgid "Name already in use by another func/var/signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Rename Function" msgstr "Byt namn pÃ¥ funktion" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Rename Variable" msgstr "Byt namn pÃ¥ variabel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Rename Signal" msgstr "Byt namn pÃ¥ Signal" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Function" msgstr "Lägg till Funktion" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Delete input port" +msgstr "Ta bort Autoload" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Lägg till Variabel" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Add Signal" msgstr "Lägg till Signal" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Favoriter:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Favoriter:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Ta bort Autoload" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Ta Bort Mall" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11514,10 +11423,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11530,7 +11449,6 @@ msgid "Change Base Type" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Move Node(s)" msgstr "Flytta Nod(er)" @@ -11539,12 +11457,16 @@ msgid "Remove VisualScript Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Connect Nodes" msgstr "Anslut Noder" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Anslut Noder" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Anslut Noder" @@ -11554,7 +11476,6 @@ msgid "Connect Node Sequence" msgstr "Anslut Noder" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Script already has function '%s'" msgstr "Skript har redan funktionen '%s'" @@ -11580,17 +11501,35 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Create Function" +msgstr "Byt namn pÃ¥ funktion" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Ta bort Funktion" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Remove Variable" msgstr "Ta bort Variabeln" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Editing Variable:" msgstr "Redigerar Variabel:" @@ -11603,18 +11542,18 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "" +#, fuzzy +msgid "Make Tool:" +msgstr "Gör Patch" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Members:" msgstr "Medlemmar:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy -msgid "Available Nodes:" -msgstr "Tillgängliga Noder:" +msgid "function_name" +msgstr "Funktioner:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11633,12 +11572,21 @@ msgid "Copy Nodes" msgstr "Kopiera Noder" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Cut Nodes" msgstr "Klipp ut Noder" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "Byt namn pÃ¥ funktion" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Uppdatera" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Medlemmar" @@ -11679,12 +11627,10 @@ msgid ": Invalid arguments: " msgstr "" #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableGet not found in script: " msgstr "VariableGet hittades inte i Skript: " #: modules/visual_script/visual_script_nodes.cpp -#, fuzzy msgid "VariableSet not found in script: " msgstr "VariableSet hittades inte i Skript: " @@ -11736,6 +11682,11 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +#, fuzzy +msgid "Select device from the list" +msgstr "Välj enhet frÃ¥n listan" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11757,7 +11708,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11836,11 +11788,14 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Kör i Webbläsare" #: platform/javascript/export/export.cpp -#, fuzzy msgid "Run exported HTML in the system's default browser." msgstr "Kör exporterad HTML i systemets standardwebbläsare." @@ -11939,7 +11894,6 @@ msgid "" msgstr "" #: scene/2d/collision_polygon_2d.cpp -#, fuzzy msgid "" "CollisionPolygon2D only serves to provide a collision shape to a " "CollisionObject2D derived node. Please only use it as a child of Area2D, " @@ -11950,12 +11904,10 @@ msgstr "" "StaticBody2D, RigidBody2D, KinematicBody2D, etc. för att ge dem en form." #: scene/2d/collision_polygon_2d.cpp -#, fuzzy msgid "An empty CollisionPolygon2D has no effect on collision." msgstr "En tom CollisionPolygon2D har ingen effekt pÃ¥ kollision." #: scene/2d/collision_shape_2d.cpp -#, fuzzy msgid "" "CollisionShape2D only serves to provide a collision shape to a " "CollisionObject2D derived node. Please only use it as a child of Area2D, " @@ -11999,7 +11951,6 @@ msgid "" msgstr "" #: scene/2d/navigation_polygon.cpp -#, fuzzy msgid "" "NavigationPolygonInstance must be a child or grandchild to a Navigation2D " "node. It only provides navigation data." @@ -12008,7 +11959,6 @@ msgstr "" "Navigation2D-Node. Den ger bara navigationsdata." #: scene/2d/parallax_layer.cpp -#, fuzzy msgid "" "ParallaxLayer node only works when set as child of a ParallaxBackground node." msgstr "" @@ -12035,7 +11985,6 @@ msgid "" msgstr "" #: scene/2d/path_2d.cpp -#, fuzzy msgid "PathFollow2D only works when set as a child of a Path2D node." msgstr "" "PathFollow2D fungerar bara när den är satt som ett barn till en Path2D-Node." @@ -12048,7 +11997,6 @@ msgid "" msgstr "" #: scene/2d/remote_transform_2d.cpp -#, fuzzy msgid "Path property must point to a valid Node2D node to work." msgstr "" "Sökvägs-egenskapen mÃ¥ste peka pÃ¥ en giltigt Node2D Node för att fungera." @@ -12144,7 +12092,6 @@ msgid "" msgstr "" #: scene/3d/collision_polygon.cpp -#, fuzzy msgid "" "CollisionPolygon only serves to provide a collision shape to a " "CollisionObject derived node. Please only use it as a child of Area, " @@ -12155,12 +12102,10 @@ msgstr "" "StaticBody, RigidBody, KinematicBody, etc. för att ge dem en form." #: scene/3d/collision_polygon.cpp -#, fuzzy msgid "An empty CollisionPolygon has no effect on collision." msgstr "En tom CollisionPolygon har ingen effekt pÃ¥ kollision." #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "CollisionShape only serves to provide a collision shape to a CollisionObject " "derived node. Please only use it as a child of Area, StaticBody, RigidBody, " @@ -12380,12 +12325,10 @@ msgid "" msgstr "" #: scene/gui/dialogs.cpp -#, fuzzy msgid "Alert!" msgstr "Varning!" #: scene/gui/dialogs.cpp -#, fuzzy msgid "Please Confirm..." msgstr "Vänligen Bekräfta..." @@ -12425,10 +12368,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12461,6 +12400,49 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Add input +" +#~ msgstr "Lägg till Signal" + +#~ msgid "Language" +#~ msgstr "SprÃ¥k" + +#~ msgid "Inherits" +#~ msgstr "Ärver" + +#~ msgid "Available Nodes:" +#~ msgstr "Tillgängliga Noder:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "Metoder" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "Egenskaper" + +#~ msgid "Enumerations:" +#~ msgstr "Enumerations:" + +#~ msgid "Constants:" +#~ msgstr "Konstanter:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Beskrivning:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Egenskapsbeskrivning:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Metodbeskrivning:" + +#, fuzzy +#~ msgid "Delete Node(s)?" +#~ msgstr "Ta bort Nod(er)?" + +#, fuzzy #~ msgid "Error: could not load file." #~ msgstr "Fel - Kunde inte skapa Skript i filsystemet." @@ -12567,10 +12549,6 @@ msgstr "" #~ msgstr "GÃ¥ till överordnad mapp" #, fuzzy -#~ msgid "Select device from the list" -#~ msgstr "Välj enhet frÃ¥n listan" - -#, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "Öppna Scen" @@ -12594,10 +12572,6 @@ msgstr "" #~ msgstr "Instansiera valda scen(er) som barn till vald Node." #, fuzzy -#~ msgid "Warnings:" -#~ msgstr "Varning" - -#, fuzzy #~ msgid "Font Size:" #~ msgstr "Vy framifrÃ¥n" @@ -12731,9 +12705,6 @@ msgstr "" #~ msgid "Warning" #~ msgstr "Varning" -#~ msgid "Error:" -#~ msgstr "Fel:" - #, fuzzy #~ msgid "Variable" #~ msgstr "Variabel" @@ -12748,9 +12719,6 @@ msgstr "" #~ msgid "Move Anim Track Down" #~ msgstr "Flytta Anim SpÃ¥r NerÃ¥t" -#~ msgid "Set Transitions to:" -#~ msgstr "Ange övergÃ¥ngar:" - #~ msgid "Anim Track Rename" #~ msgstr "Anim Byt Namn PÃ¥ SpÃ¥r" diff --git a/editor/translations/ta.po b/editor/translations/ta.po index 521b42b338..08faf73931 100644 --- a/editor/translations/ta.po +++ b/editor/translations/ta.po @@ -59,6 +59,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -335,6 +363,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -464,15 +493,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -605,7 +628,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -617,6 +640,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -794,7 +822,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -896,7 +925,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -933,7 +963,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1196,7 +1226,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1387,7 +1417,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1441,7 +1473,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1607,6 +1639,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1677,6 +1710,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1824,6 +1858,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1832,7 +1867,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1840,38 +1875,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1880,19 +1895,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1907,10 +1914,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1921,10 +1924,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1992,8 +1991,8 @@ msgstr "" msgid "Copy Selection" msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2006,6 +2005,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2546,6 +2587,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2746,10 +2799,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2800,14 +2849,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2825,15 +2870,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2896,6 +2947,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2905,6 +2960,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2933,11 +2992,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3035,6 +3089,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3061,13 +3119,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3716,8 +3767,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3842,7 +3893,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3978,6 +4029,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4147,6 +4204,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4322,7 +4380,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4494,6 +4551,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4698,6 +4757,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4710,10 +4773,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4981,20 +5040,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5084,8 +5150,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5347,6 +5412,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5978,6 +6047,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6033,7 +6106,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6132,6 +6206,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6233,11 +6312,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6317,7 +6396,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6397,6 +6476,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6455,10 +6539,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6778,6 +6858,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6811,6 +6895,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7038,6 +7126,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7087,6 +7179,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "சேர௠மà¯à®•à¯à®•ியபà¯à®ªà¯à®³à¯à®³à®¿à®¯à¯ˆ நகரà¯à®¤à¯à®¤à¯" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "மாறà¯à®±à®™à¯à®•ளை இதறà¯à®•௠அமை:" @@ -7405,6 +7502,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7536,6 +7641,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7692,16 +7802,108 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "அசைவூடà¯à®Ÿà¯ பாதைகà¯à®•௠மறà¯à®ªà¯†à®¯à®°à¯ இடà¯" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7717,6 +7919,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7929,6 +8135,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8573,12 +8784,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9120,6 +9333,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9257,6 +9474,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9421,10 +9642,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9480,6 +9697,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9520,10 +9741,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9542,11 +9777,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9621,6 +9854,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9637,10 +9878,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9868,43 +10105,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9912,7 +10165,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9920,6 +10173,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9936,6 +10193,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9948,6 +10209,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10144,10 +10409,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10156,6 +10417,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10310,6 +10575,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10445,6 +10718,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10473,6 +10750,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "அனைதà¯à®¤à¯ தேரà¯à®µà¯à®•ளà¯" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10481,6 +10763,25 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "மாறà¯à®±à®™à¯à®•ளை இதறà¯à®•௠அமை:" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "அசைவூடà¯à®Ÿà¯ பாதையை நீகà¯à®•à¯" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "அசைவூடà¯à®Ÿà¯ பாதையை நீகà¯à®•à¯" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10521,10 +10822,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10549,6 +10860,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "அசைவூடà¯à®Ÿà¯ போலிபசà¯à®šà®¾à®µà®¿à®•ளà¯" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10581,6 +10897,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10601,7 +10937,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10609,7 +10945,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10633,6 +10969,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10727,6 +11071,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10748,7 +11096,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10825,6 +11174,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11362,10 +11715,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/te.po b/editor/translations/te.po index 24f581a5e6..617809b62d 100644 --- a/editor/translations/te.po +++ b/editor/translations/te.po @@ -57,6 +57,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -321,6 +349,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -446,13 +475,8 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -msgid "Select None" +msgid "Select an AnimationPlayer node to create and edit animations." msgstr "" #: editor/animation_track_editor.cpp @@ -585,7 +609,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -597,6 +621,10 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +msgid "Select All/None" +msgstr "" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -773,7 +801,8 @@ msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -874,7 +903,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -911,7 +941,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1174,7 +1204,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1365,7 +1395,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1419,7 +1451,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1584,6 +1616,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1654,6 +1687,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1801,6 +1835,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1809,7 +1844,7 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" +msgid "Brief Description" msgstr "" #: editor/editor_help.cpp @@ -1817,38 +1852,18 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1857,19 +1872,11 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1884,10 +1891,6 @@ msgid "Property Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1898,10 +1901,6 @@ msgid "Method Descriptions" msgstr "" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -1968,8 +1967,8 @@ msgstr "" msgid "Copy Selection" msgstr "" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -1982,6 +1981,48 @@ msgstr "" msgid "Clear Output" msgstr "" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2521,6 +2562,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "" @@ -2720,10 +2773,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2774,14 +2823,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2799,15 +2844,21 @@ msgstr "" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2870,6 +2921,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2879,6 +2934,10 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2907,11 +2966,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3008,6 +3062,10 @@ msgstr "" msgid "New Script" msgstr "" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3034,13 +3092,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3687,8 +3738,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3813,7 +3864,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -3948,6 +3999,12 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4114,6 +4171,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4288,7 +4346,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4456,6 +4513,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4660,6 +4719,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." msgstr "" @@ -4672,10 +4735,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -4938,20 +4997,27 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Toggle grid snapping." +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5041,8 +5107,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5302,6 +5367,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -5931,6 +6000,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -5986,7 +6059,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6085,6 +6159,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "" @@ -6186,11 +6265,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6270,7 +6349,7 @@ msgstr "" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6350,6 +6429,11 @@ msgstr "" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6407,10 +6491,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6730,6 +6810,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6763,6 +6847,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -6989,6 +7077,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7037,6 +7129,10 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7351,6 +7447,14 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7481,6 +7585,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" @@ -7635,16 +7744,106 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "సంఘం" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "Add Output" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7660,6 +7859,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -7868,6 +8071,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8511,12 +8719,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9058,6 +9268,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9194,6 +9408,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9357,10 +9575,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9416,6 +9630,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9456,7 +9674,19 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +msgid "Delete %d nodes?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" msgstr "" #: editor/scene_tree_dock.cpp @@ -9478,11 +9708,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9556,6 +9784,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9572,10 +9808,6 @@ msgid "Change Type" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "" @@ -9802,43 +10034,59 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Inherits" +msgid "Template:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Built-in Script:" msgstr "" #: editor/script_create_dialog.cpp -msgid "Template" +msgid "Attach Node Script" msgstr "" -#: editor/script_create_dialog.cpp -msgid "Built-in Script" +#: editor/script_editor_debugger.cpp +msgid "Remote " msgstr "" -#: editor/script_create_dialog.cpp -msgid "Attach Node Script" +#: editor/script_editor_debugger.cpp +msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Remote " +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Bytes:" +msgid "Error:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "C++ Error" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -9846,7 +10094,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -9854,6 +10102,10 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -9870,6 +10122,10 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -9882,6 +10138,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10078,10 +10338,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10090,6 +10346,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10241,6 +10501,14 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10376,6 +10644,10 @@ msgid "Create a new variable." msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Create a new signal." msgstr "" @@ -10404,6 +10676,10 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Delete input port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10412,6 +10688,22 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Add Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Add Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Input Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Remove Output Port" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10452,10 +10744,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10480,6 +10782,10 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Disconnect Nodes" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10512,6 +10818,26 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Create Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -10532,7 +10858,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10540,7 +10866,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10564,6 +10890,14 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Make Function" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10658,6 +10992,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10679,7 +11017,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -10756,6 +11095,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11293,10 +11636,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" diff --git a/editor/translations/th.po b/editor/translations/th.po index 1b847414c4..2bd671a4f4 100644 --- a/editor/translations/th.po +++ b/editor/translations/th.po @@ -63,6 +63,35 @@ msgstr ": ประเภทตัวà¹à¸›à¸£à¹„ม่ถูà¸à¸•้à¸à¸‡: " msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "ร่วม" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "ฟรี" @@ -361,6 +390,7 @@ msgstr "เพิ่ม %d à¹à¸—ร็à¸à¹ƒà¸«à¸¡à¹ˆà¹à¸¥à¸°à¹€à¸žà¸´à¹ˆà¸¡à¸ #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "สร้าง" @@ -495,14 +525,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "เลืà¸à¸à¸—ั้งหมด" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "ไม่เลืà¸à¸" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "เลืà¸à¸ AnimationPlayer จาà¸à¸œà¸±à¸‡à¸‰à¸²à¸à¹€à¸žà¸·à¹ˆà¸à¹à¸à¹‰à¹„ขà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -641,8 +667,9 @@ msgid "Scale Ratio:" msgstr "à¸à¸±à¸•ราส่วนเวลา:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "เลืà¸à¸à¸„ุณสมบัติ" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -653,6 +680,11 @@ msgstr "" msgid "Copy" msgstr "คัดลà¸à¸" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "ไม่เลืà¸à¸" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -839,7 +871,8 @@ msgstr "เชื่à¸à¸¡à¹‚ยงสัà¸à¸à¸²à¸“:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -948,7 +981,8 @@ msgstr "ค้นหา:" msgid "Matches:" msgstr "พบ:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -991,7 +1025,7 @@ msgid "Resource" msgstr "รีซà¸à¸£à¹Œà¸ª" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡" @@ -1266,7 +1300,8 @@ msgid "Delete Bus Effect" msgstr "ลบเà¸à¸Ÿà¹€à¸Ÿà¸à¸•์เสียง" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Audio Bus ลาà¸à¹à¸¥à¸°à¸§à¸²à¸‡à¹€à¸žà¸·à¹ˆà¸à¸¢à¹‰à¸²à¸¢à¸•ำà¹à¸«à¸™à¹ˆà¸‡" #: editor/editor_audio_buses.cpp @@ -1462,7 +1497,9 @@ msgid "Add AutoLoad" msgstr "เพิ่มà¸à¸à¹‚ต้โหลด" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡:" @@ -1517,7 +1554,7 @@ msgstr "สร้างโฟลเดà¸à¸£à¹Œ" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "ชื่à¸:" @@ -1706,6 +1743,7 @@ msgstr "ปัจจุบัน:" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "ไฟล์ใหม่" @@ -1786,6 +1824,7 @@ msgid "New Folder..." msgstr "สร้างโฟลเดà¸à¸£à¹Œ..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "รีเฟรช" @@ -1941,6 +1980,7 @@ msgid "Class:" msgstr "คลาส:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "สืบทà¸à¸”จาà¸:" @@ -1949,7 +1989,8 @@ msgid "Inherited by:" msgstr "สืบทà¸à¸”โดย:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "รายละเà¸à¸µà¸¢à¸”:" #: editor/editor_help.cpp @@ -1957,41 +1998,19 @@ msgid "Properties" msgstr "คุณสมบัติ" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "คุณสมบัติ:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "คุณสมบัติ" #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "คุณสมบัติ:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "สัà¸à¸à¸²à¸“:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "ค่าคงที่" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "ค่าคงที่:" - -#: editor/editor_help.cpp msgid "enum " msgstr "à¸à¸¥à¸¸à¹ˆà¸¡à¸„่าคงที่ " @@ -2000,21 +2019,13 @@ msgid "Constants" msgstr "ค่าคงที่" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "ค่าคงที่:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "รายละเà¸à¸µà¸¢à¸”" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "รายละเà¸à¸µà¸¢à¸”:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "สà¸à¸™à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸à¸à¸™à¹„ลน์:" #: editor/editor_help.cpp @@ -2032,11 +2043,6 @@ msgid "Property Descriptions" msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2048,11 +2054,6 @@ msgid "Method Descriptions" msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2129,8 +2130,8 @@ msgstr "ข้à¸à¸„วาม:" msgid "Copy Selection" msgstr "ลบที่เลืà¸à¸" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2143,6 +2144,49 @@ msgstr "ลบ" msgid "Clear Output" msgstr "ลบข้à¸à¸„วาม" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "หยุด" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +#, fuzzy +msgid "Start" +msgstr "เริ่ม!" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "ลง" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "ขึ้น" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "โหนด" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp #, fuzzy msgid "New Window" @@ -2719,6 +2763,19 @@ msgstr "โปรเจà¸à¸•์" msgid "Project Settings..." msgstr "ตัวเลืà¸à¸à¹‚ปรเจà¸à¸•์" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "รุ่น:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp msgid "Export..." msgstr "ส่งà¸à¸à¸..." @@ -2935,10 +2992,6 @@ msgstr "หยุดชั่วคราว" msgid "Stop the scene." msgstr "หยุด" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "หยุด" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "เล่นฉาà¸à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™" @@ -2994,15 +3047,11 @@ msgid "Inspector" msgstr "คุณสมบัติ" #: editor/editor_node.cpp -msgid "Node" -msgstr "โหนด" - -#: editor/editor_node.cpp #, fuzzy msgid "Expand Bottom Panel" msgstr "ขยายโฟลเดà¸à¸£à¹Œ" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "ข้à¸à¸„วาม" @@ -3021,15 +3070,21 @@ msgstr "จัดà¸à¸²à¸£à¹à¸¡à¹ˆà¹à¸šà¸šà¸ªà¹ˆà¸‡à¸à¸à¸" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3092,6 +3147,11 @@ msgstr "เปิดตัวà¹à¸à¹‰à¹„ขถัดไป" msgid "Open the previous Editor" msgstr "เปิดตัวà¹à¸à¹‰à¹„ขà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "ไม่ได้ระบุพื้นผิวต้นฉบับ" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸ าพตัวà¸à¸¢à¹ˆà¸²à¸‡ Mesh" @@ -3102,6 +3162,11 @@ msgstr "รูปตัวà¸à¸¢à¹ˆà¸²à¸‡..." #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "เปิดสคริปต์" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "à¹à¸à¹‰à¹„ขรูปหลายเหลี่ยม" @@ -3131,12 +3196,6 @@ msgstr "สถานะ:" msgid "Edit:" msgstr "à¹à¸à¹‰à¹„ข" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -#, fuzzy -msgid "Start" -msgstr "เริ่ม!" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "วัด:" @@ -3237,6 +3296,11 @@ msgstr "เลืà¸à¸ Viewport" msgid "New Script" msgstr "สคริปต์ใหม่" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "เปิดสคริปต์" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "%s ใหม่" @@ -3263,14 +3327,6 @@ msgstr "วาง" msgid "Convert To %s" msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™ %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "เปิดในโปรà¹à¸à¸£à¸¡à¹à¸à¹‰à¹„ข" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "โหนดที่เลืà¸à¸à¹„ม่ใช่ Viewport!" @@ -3965,9 +4021,10 @@ msgstr " ไฟล์" msgid "Import As:" msgstr "นำเข้าเป็น:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "à¹à¸šà¸š..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸à¸à¸" #: editor/import_dock.cpp msgid "Reimport" @@ -4099,7 +4156,7 @@ msgstr "ปลั๊à¸à¸à¸´à¸™" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp #, fuzzy msgid "Language:" msgstr "ภาษา" @@ -4255,6 +4312,13 @@ msgstr "ย้ายจุด" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "เปิดในโปรà¹à¸à¸£à¸¡à¹à¸à¹‰à¹„ข" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4443,6 +4507,7 @@ msgid "Change Animation Name:" msgstr "เปลี่ยนชื่à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "ลบà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™?" @@ -4626,7 +4691,6 @@ msgstr "ชื่à¸à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "ผิดพลาด!" @@ -4804,6 +4868,8 @@ msgid "Current:" msgstr "ปัจจุบัน:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" @@ -5018,6 +5084,10 @@ msgid "All" msgstr "ทั้งหมด" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "นำเข้าà¸à¸µà¸à¸„รั้ง..." @@ -5032,11 +5102,6 @@ msgid "Sort:" msgstr "เรียงตาม:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "หมวดหมู่:" @@ -5329,25 +5394,35 @@ msgstr "โหมดมุมมà¸à¸‡" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "โหมดà¸à¸²à¸£à¸—ำงาน:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "เปิด/ปิด à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "ตัวเลืà¸à¸à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" +msgid "Toggle grid snapping." +msgstr "เปิด/ปิด à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" +msgid "Use Grid Snap" msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "ตัวเลืà¸à¸à¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¸«à¸¡à¸¸à¸™" @@ -5443,8 +5518,8 @@ msgid "View" msgstr "มุมมà¸à¸‡" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "à¹à¸ªà¸”งเส้นตาราง" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5723,6 +5798,11 @@ msgstr "เปิด/ปิดเส้นสัมผัสà¹à¸™à¸§à¹‚ค้ภmsgid "Hold Shift to edit tangents individually" msgstr "à¸à¸” Shift ค้างเพื่à¸à¸›à¸£à¸±à¸šà¹€à¸ªà¹‰à¸™à¸ªà¸±à¸¡à¸œà¸±à¸ªà¹à¸¢à¸à¸à¸±à¸™" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "คลิà¸à¸‚วา: ลบจุด" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "สร้าง GI Probe" @@ -6376,6 +6456,10 @@ msgid "Grid" msgstr "เส้นตาราง" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "à¹à¸ªà¸”งเส้นตาราง" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "ตั้งค่าà¸à¸²à¸£à¸ˆà¸³à¸à¸±à¸”" @@ -6437,7 +6521,8 @@ msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "ประเภท:" @@ -6548,6 +6633,11 @@ msgid "Find Next" msgstr "ค้นหาต่à¸à¹„ป" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "ค้นหาà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "ตัวà¸à¸£à¸à¸‡" @@ -6655,14 +6745,14 @@ msgid "Toggle Scripts Panel" msgstr "เปิด/ปิดà¹à¸œà¸‡à¸ªà¸„ริปต์" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "บรรทัดต่à¸à¹„ป" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "คำสั่งต่à¸à¹„ป" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "บรรทัดต่à¸à¹„ป" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "หยุดพัà¸" @@ -6746,7 +6836,7 @@ msgstr "ล้างรายà¸à¸²à¸£à¸‰à¸²à¸à¸¥à¹ˆà¸²à¸ªà¸¸à¸”" msgid "Connections to method:" msgstr "เชื่à¸à¸¡à¹„ปยังโหนด:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "ต้นฉบับ:" @@ -6834,6 +6924,11 @@ msgstr "ลบจุด" msgid "Cut" msgstr "ตัด" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "เลืà¸à¸à¸—ั้งหมด" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "ลบบรรทัด" @@ -6894,10 +6989,6 @@ msgid "Auto Indent" msgstr "ย่à¸à¸«à¸™à¹‰à¸²à¸à¸±à¸•โนมัติ" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "ค้นหาà¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "คัดà¸à¸£à¸à¸‡à¹„ฟล์..." @@ -7240,6 +7331,11 @@ msgid "Freelook Speed Modifier" msgstr "ปรับความเร็วมุมมà¸à¸‡à¸à¸´à¸ªà¸£à¸°" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "ปรับความเร็วมุมมà¸à¸‡à¸à¸´à¸ªà¸£à¸°" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7279,6 +7375,10 @@ msgid "Use Local Space" msgstr "โหมดพิà¸à¸±à¸”ภายใน (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "จำà¸à¸±à¸”à¸à¸²à¸£à¹€à¸„ลื่à¸à¸™à¸¢à¹‰à¸²à¸¢" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "มุมล่าง" @@ -7520,6 +7620,11 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy +msgid "Shrink (Pixels): " +msgstr "Snap (พิà¸à¹€à¸‹à¸¥):" + +#: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy msgid "Grow (Pixels): " msgstr "Snap (พิà¸à¹€à¸‹à¸¥):" @@ -7573,6 +7678,11 @@ msgstr "(ว่างเปล่า)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "วางเฟรม" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™" @@ -7913,6 +8023,15 @@ msgid "Enable Priority" msgstr "à¹à¸à¹‰à¹„ขตัวà¸à¸£à¸à¸‡" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "คัดà¸à¸£à¸à¸‡à¹„ฟล์..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "วาด Tile" @@ -8062,6 +8181,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "ลบรายà¸à¸²à¸£" @@ -8245,18 +8369,118 @@ msgstr "ทำไม่ได้ถ้าไม่มีฉาà¸" msgid "TileSet" msgstr "Tile Set" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "ผิดพลาด" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" +msgid "No commit message was provided" +msgstr "ไม่ได้ระบุชื่à¸" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "ชุมชน" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "à¸à¸±à¸à¸©à¸£à¹à¸£à¸à¸žà¸´à¸¡à¸žà¹Œà¹ƒà¸«à¸à¹ˆ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "สร้าง %s ใหม่" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "เปลี่ยน" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "เปลี่ยนชื่à¸" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "ลบ" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "เปลี่ยน" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "ลบสิ่งที่เลืà¸à¸" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "บันทึà¸à¸—ั้งหมด" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "ซิงค์à¸à¸²à¸£à¹à¸à¹‰à¹„ขสคริปต์" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "สถานะ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ไว้!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8275,6 +8499,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "ไฟล์เสียง" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" @@ -8506,6 +8735,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9171,13 +9405,17 @@ msgid "Resources to export:" msgstr "รีซà¸à¸£à¹Œà¸ªà¸—ี่จะส่งà¸à¸à¸:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "ตัวà¸à¸£à¸à¸‡à¹„ฟล์ที่จะส่งà¸à¸à¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•ิม (คั่นด้วยจุลภาค ตัวà¸à¸¢à¹ˆà¸²à¸‡à¹€à¸Šà¹ˆà¸™: *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "ตัวà¸à¸£à¸à¸‡à¹„ฟล์ที่จะไม่ส่งà¸à¸à¸ (คั่นด้วยจุลภาค ตัวà¸à¸¢à¹ˆà¸²à¸‡à¹€à¸Šà¹ˆà¸™: *.json, *.txt)" #: editor/project_export.cpp @@ -9754,6 +9992,11 @@ msgid "Settings saved OK." msgstr "บันทึà¸à¹à¸¥à¹‰à¸§" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "เพิ่มปุ่มà¸à¸”ขà¸à¸‡à¸à¸²à¸£à¸à¸£à¸°à¸—ำ" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "à¸à¸³à¸«à¸™à¸”ค่าเฉพาะขà¸à¸‡à¸Ÿà¸µà¹€à¸ˆà¸à¸£à¹Œ" @@ -9893,6 +10136,10 @@ msgid "Plugins" msgstr "ปลั๊à¸à¸à¸´à¸™" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "à¹à¸šà¸š..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "ศูนย์" @@ -10068,10 +10315,6 @@ msgstr "ตัวพิมพ์ใหà¸à¹ˆ" msgid "Reset" msgstr "รีเซ็ตซูม" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "ผิดพลาด" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "หาโหนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ" @@ -10127,6 +10370,11 @@ msgid "Instance Scene(s)" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "บันทึà¸à¸à¸´à¹ˆà¸‡à¹€à¸›à¹‡à¸™à¸‰à¸²à¸" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸¥à¸¹à¸" @@ -10168,8 +10416,23 @@ msgid "Make node as Root" msgstr "เข้าใจ!" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "ลบโหนด?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "ลบโหนด" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "ลบโหนด" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "ลบโหนด" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10190,12 +10453,10 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "à¹à¸à¹‰à¹„ขโหนดลูà¸à¹„ด้" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "โหลดเป็นตัวà¹à¸—น" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy @@ -10276,6 +10537,14 @@ msgid "Clear Inheritance" msgstr "ลบà¸à¸²à¸£à¸ªà¸·à¸šà¸—à¸à¸”" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "à¹à¸à¹‰à¹„ขโหนดลูà¸à¹„ด้" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "โหลดเป็นตัวà¹à¸—น" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "เปิดคู่มืà¸" @@ -10295,11 +10564,6 @@ msgstr "เปลี่ยนประเภท" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "เปิดสคริปต์" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "หาโหนดà¹à¸¡à¹ˆà¹ƒà¸«à¸¡à¹ˆ" @@ -10566,23 +10830,18 @@ msgid "Will load an existing script file." msgstr "โหลดสคริปต์จาà¸à¸”ิสà¸à¹Œ" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "ภาษา" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "สืบทà¸à¸”จาà¸" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "ชื่à¸à¸„ลาส" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "à¹à¸¡à¹ˆà¹à¸šà¸š" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "à¸à¸±à¸‡à¸ªà¸„ริปต์" #: editor/script_create_dialog.cpp @@ -10599,19 +10858,50 @@ msgstr "ไบต์:" #: editor/script_editor_debugger.cpp #, fuzzy -msgid "Stack Trace" -msgstr "สà¹à¸•ค" +msgid "Warning:" +msgstr "คำเตืà¸à¸™" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "เลืà¸à¸à¸‚้à¸à¸¡à¸¹à¸¥à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸à¹€à¸žà¸·à¹ˆà¸à¹à¸ªà¸”งà¸à¸£à¸²à¸Ÿ" +msgid "Error:" +msgstr "ผิดพลาด:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "คัดลà¸à¸à¸œà¸´à¸”พลาด" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "ผิดพลาด:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "ต้นฉบับ:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "ต้นฉบับ:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "ต้นฉบับ:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Stack Trace" +msgstr "สà¹à¸•ค" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "ข้à¸à¸œà¸´à¸”พลาด" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "เชื่à¸à¸¡à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¹à¸¥à¹‰à¸§" #: editor/script_editor_debugger.cpp @@ -10619,6 +10909,11 @@ msgid "Copy Error" msgstr "คัดลà¸à¸à¸œà¸´à¸”พลาด" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "ลบจุด" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "ตรวจสà¸à¸šà¸à¸´à¸™à¸ªà¹à¸•นซ์à¸à¹ˆà¸à¸™à¸«à¸™à¹‰à¸²" @@ -10635,6 +10930,11 @@ msgid "Profiler" msgstr "ประสิทธิภาพ" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "ส่งà¸à¸à¸à¹‚ปรเจà¸à¸•์" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "ข้à¸à¸¡à¸¹à¸¥" @@ -10647,6 +10947,10 @@ msgid "Monitors" msgstr "à¸à¸²à¸£à¸ªà¸±à¸‡à¹€à¸à¸•à¸à¸²à¸£à¸“์" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "เลืà¸à¸à¸‚้à¸à¸¡à¸¹à¸¥à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸à¹€à¸žà¸·à¹ˆà¸à¹à¸ªà¸”งà¸à¸£à¸²à¸Ÿ" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "รายชื่à¸à¸£à¸µà¸‹à¸à¸£à¹Œà¸ªà¸—ี่ใช้หน่วยความจำวีดีโà¸:" @@ -10854,10 +11158,6 @@ msgid "Library" msgstr "ไลบรารี" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "สถานะ" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "ไลบรารี: " @@ -10866,6 +11166,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "ตัวà¹à¸›à¸£ step เป็นศูนย์!" @@ -11021,6 +11325,15 @@ msgstr "à¸à¸²à¸£à¸•ั้งค่า GridMap" msgid "Pick Distance:" msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸à¸:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "โหมดà¸à¸²à¸£à¸à¸£à¸à¸‡:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11160,6 +11473,10 @@ msgid "Create a new variable." msgstr "สร้าง %s ใหม่" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "สัà¸à¸à¸²à¸“:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "สร้างรูปหลายเหลี่ยมจาà¸à¸„วามว่างเปล่า" @@ -11189,6 +11506,11 @@ msgid "Add Function" msgstr "เพิ่มฟังà¸à¹Œà¸Šà¸±à¸™" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "ลบจุด" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "เพิ่มตัวà¹à¸›à¸£" @@ -11197,6 +11519,26 @@ msgid "Add Signal" msgstr "เพิ่มสัà¸à¸à¸²à¸“" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "ลบจุด" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "ลบจุด" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "à¹à¸à¹‰à¹„ขสมà¸à¸²à¸£" @@ -11237,10 +11579,20 @@ msgid "Add Preload Node" msgstr "เพิ่มโหนด Preload" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "เพิ่มโหนดจาà¸à¸œà¸±à¸‡" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "เพิ่มตัวรับคุณสมบัติ" @@ -11266,6 +11618,11 @@ msgstr "เชื่à¸à¸¡à¹‚หนด" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "ตัดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸à¹‚หนด" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "เชื่à¸à¸¡à¹‚หนด" @@ -11300,6 +11657,28 @@ msgid "Paste VisualScript Nodes" msgstr "วางโหนด" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "คัดลà¸à¸à¹‚หนดฟังà¸à¹Œà¸Šà¸±à¸™à¹„ม่ได้" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "เปลี่ยนชื่à¸à¸Ÿà¸±à¸‡à¸à¹Œà¸Šà¸±à¸™" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "ลบฟังà¸à¹Œà¸Šà¸±à¸™" @@ -11320,16 +11699,18 @@ msgid "Editing Signal:" msgstr "à¹à¸à¹‰à¹„ขสัà¸à¸à¸²à¸“:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "ชนิด:" +#, fuzzy +msgid "Make Tool:" +msgstr "ระยะใà¸à¸¥à¹‰" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "ตัวà¹à¸›à¸£:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "โหนดที่มีให้ใช้:" +#, fuzzy +msgid "function_name" +msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11354,6 +11735,16 @@ msgstr "ตัดโหนด" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "เปลี่ยนชื่à¸à¸Ÿà¸±à¸‡à¸à¹Œà¸Šà¸±à¸™" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "รีเฟรช" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "ตัวà¹à¸›à¸£" @@ -11449,6 +11840,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "เลืà¸à¸à¸à¸¸à¸›à¸à¸£à¸“์จาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11470,7 +11865,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11550,6 +11946,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "รันในเบราเซà¸à¸£à¹Œ" @@ -12155,11 +12555,6 @@ msgstr "" "ให้à¹à¸à¹‰à¹„ขโหนดนี้ให้เป็นโหนดลูà¸à¸‚à¸à¸‡ Control à¹à¸•่ถ้าไม่ ให้ปรับเป็น render target à¹à¸¥à¸°à¸™à¸³à¹„ปใช้เป็น " "texture ขà¸à¸‡à¹‚หนดà¸à¸·à¹ˆà¸™" -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12191,6 +12586,66 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "จำà¸à¸±à¸”ด้วยเส้นตาราง" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" + +#~ msgid "Language" +#~ msgstr "ภาษา" + +#~ msgid "Inherits" +#~ msgstr "สืบทà¸à¸”จาà¸" + +#~ msgid "Base Type:" +#~ msgstr "ชนิด:" + +#~ msgid "Available Nodes:" +#~ msgstr "โหนดที่มีให้ใช้:" + +#, fuzzy +#~ msgid "Input" +#~ msgstr "เพิ่มà¸à¸´à¸™à¸žà¸¸à¸•" + +#~ msgid "Properties:" +#~ msgstr "คุณสมบัติ:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "รายชื่à¸à¹€à¸¡à¸—็à¸à¸”" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "คุณสมบัติ:" + +#~ msgid "Enumerations:" +#~ msgstr "ค่าคงที่:" + +#~ msgid "Constants:" +#~ msgstr "ค่าคงที่:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "รายละเà¸à¸µà¸¢à¸”:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "รายละเà¸à¸µà¸¢à¸”ตัวà¹à¸›à¸£:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "รายละเà¸à¸µà¸¢à¸”เมท็à¸à¸”:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¹‰à¸à¸‡à¸‚à¸..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "ลบโหนด?" + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "เปิดไฟล์ file_type_cache.cch เพื่à¸à¹€à¸‚ียนไม่ได้ จะไม่บันทึà¸à¹à¸„ชขà¸à¸‡à¸Šà¸™à¸´à¸”ไฟล์!" @@ -12367,9 +12822,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "ไปยังโฟลเดà¸à¸£à¹Œà¸«à¸¥à¸±à¸" -#~ msgid "Select device from the list" -#~ msgstr "เลืà¸à¸à¸à¸¸à¸›à¸à¸£à¸“์จาà¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸" - #~ msgid "Open Scene(s)" #~ msgstr "เปิดไฟล์ฉาà¸" @@ -12434,10 +12886,6 @@ msgstr "" #~ msgstr "à¸à¸´à¸™à¸ªà¹à¸•นซ์ฉาà¸à¸—ี่เลืà¸à¸à¹ƒà¸«à¹‰à¹€à¸›à¹‡à¸™à¹‚หนดลูà¸à¸‚à¸à¸‡à¹‚หนดที่เลืà¸à¸" #, fuzzy -#~ msgid "Warnings:" -#~ msgstr "คำเตืà¸à¸™" - -#, fuzzy #~ msgid "Font Size:" #~ msgstr "ขนาดฟà¸à¸™à¸•์ต้นฉบับ:" @@ -12479,9 +12927,6 @@ msgstr "" #~ msgid "Select a split to erase it." #~ msgstr "à¸à¸£à¸¸à¸“าเลืà¸à¸à¸•ัวเลืà¸à¸à¸à¹ˆà¸à¸™!" -#~ msgid "No name provided" -#~ msgstr "ไม่ได้ระบุชื่à¸" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "เพิ่มโหนด" @@ -12619,12 +13064,6 @@ msgstr "" #~ msgid "Warning" #~ msgstr "คำเตืà¸à¸™" -#~ msgid "Error:" -#~ msgstr "ผิดพลาด:" - -#~ msgid "Function:" -#~ msgstr "ฟังà¸à¹Œà¸Šà¸±à¸™:" - #~ msgid "Variable" #~ msgstr "ตัวà¹à¸›à¸£" @@ -12688,9 +13127,6 @@ msgstr "" #~ msgid "Connect Graph Nodes" #~ msgstr "เชื่à¸à¸¡à¸•่à¸à¹‚หนด" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "ตัดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸à¹‚หนด" - #~ msgid "Remove Shader Graph Node" #~ msgstr "ลบโหนด" @@ -12700,9 +13136,6 @@ msgstr "" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "ทำซ้ำโหนด" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "ลบโหนด" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "ผิดพลาด: เชื่à¸à¸¡à¸•่à¸à¹€à¸›à¹‡à¸™à¸§à¸‡" @@ -13130,9 +13563,6 @@ msgstr "" #~ msgid "Pick New Name and Location For:" #~ msgstr "เลืà¸à¸à¸Šà¸·à¹ˆà¸à¹à¸¥à¸°à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่à¸à¸¢à¸¹à¹ˆà¹ƒà¸«à¸¡à¹ˆà¹ƒà¸«à¹‰à¸à¸±à¸š:" -#~ msgid "No files selected!" -#~ msgstr "ไม่ได้เลืà¸à¸à¹„ฟล์ไว้!" - #~ msgid "Info" #~ msgstr "ข้à¸à¸¡à¸¹à¸¥" @@ -13514,12 +13944,6 @@ msgstr "" #~ msgid "Scaling to %s%%." #~ msgstr "ปรับขนาดเป็น %s%%" -#~ msgid "Up" -#~ msgstr "ขึ้น" - -#~ msgid "Down" -#~ msgstr "ลง" - #~ msgid "Bucket" #~ msgstr "ถัง" @@ -13766,9 +14190,6 @@ msgstr "" #~ msgid "Shrink By:" #~ msgstr "ลดไป:" -#~ msgid "Samples" -#~ msgstr "ไฟล์เสียง" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "à¸à¸²à¸£à¹à¸›à¸¥à¸‡à¹„ฟล์เสียง: (ไฟล์ .wav):" diff --git a/editor/translations/tr.po b/editor/translations/tr.po index afbea77509..2673676cb8 100644 --- a/editor/translations/tr.po +++ b/editor/translations/tr.po @@ -9,7 +9,7 @@ # Enescan Yerlikaya <enescanyerlikaya@gmail.com>, 2017. # Fatih Mert DoÄŸancan <fatihmertdogancan@hotmail.com>, 2017. # hubbyist <hub@legrud.net>, 2017. -# H.Hüseyin CİHANGİR <hashusfb@gmail.com>, 2018. +# H.Hüseyin CİHANGİR <hashusfb@gmail.com>, 2018, 2019. # Kaan Gül <qaantum@hotmail.com>, 2018. # M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016. # monolifed <monolifed@gmail.com>, 2018. @@ -29,12 +29,21 @@ # Enes Can Yerlikaya <enescanyerlikaya@gmail.com>, 2019. # Ömer Akgöz <omerakgoz34@gmail.com>, 2019. # Mehmet Dursun <mehmet.dursun@gmail.com>, 2019. +# Ali Can Çekmez <alcamez@icloud.com>, 2019. +# Erdem Gez <erdemgezzz@gmail.com>, 2019. +# rayray61 <laladodo000@gmail.com>, 2019. +# enesygt <enesyigittt@gmail.com>, 2019. +# Mustafa Turhan <odunluzikkim@gmail.com>, 2019. +# Ullima <nacej@my6mail.com>, 2019. +# Bera Koklu <bkoklu001@student.hampton.k12.va.us>, 2019. +# Mehmet AKDEMİR <mamoo81@gmail.com>, 2019. +# Oguz Ersen <oguzersen@protonmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-29 13:34+0000\n" -"Last-Translator: Mehmet Dursun <mehmet.dursun@gmail.com>\n" +"PO-Revision-Date: 2019-10-27 07:47+0000\n" +"Last-Translator: Oguz Ersen <oguzersen@protonmail.com>\n" "Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/" "godot/tr/>\n" "Language: tr\n" @@ -42,7 +51,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.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -85,6 +94,34 @@ msgstr "'%s' oluÅŸturulurken geçersiz argümanlar atandı" msgid "On call to '%s':" msgstr "'%s' çaÄŸrıldığında:" +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MiB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GiB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TiB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PiB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EiB" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Ücretsiz" @@ -349,6 +386,7 @@ msgstr "%d YENİ izler oluÅŸtur ve anahtarlar gir?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "OluÅŸtur" @@ -491,14 +529,12 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Uyarı: İçe aktarılan animasyonu düzenleme" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Hepsini seç" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Hiçbir Åžey Seçilmedi" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" +"Sahne AÄŸacı'ndan animasyonları düzenleyebilmek için bir AnimationPlayer " +"seçin." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -630,7 +666,8 @@ msgid "Scale Ratio:" msgstr "Ölçek Oranı:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Kopyalanacak izleri seç:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -642,6 +679,11 @@ msgstr "Kopyalanacak izleri seç:" msgid "Copy" msgstr "Tıpkıla" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Hiçbir Åžey Seçilmedi" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Ses İz Klipsi Ekle" @@ -680,12 +722,11 @@ msgstr "DeÄŸiÅŸtirildi %d oluÅŸ(sn)." #: editor/code_editor.cpp editor/editor_help.cpp msgid "%d match." -msgstr "" +msgstr "% d eÅŸleÅŸme." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "EÅŸleÅŸme Yok" +msgstr "%d eÅŸleÅŸme." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -800,7 +841,7 @@ msgstr "ErtelenmiÅŸ" #: editor/connections_dialog.cpp msgid "" "Defers the signal, storing it in a queue and only firing it at idle time." -msgstr "" +msgstr "Sinyali savunur, sıraya kaydeder ve sadece rölantide iken ateÅŸler." #: editor/connections_dialog.cpp msgid "Oneshot" @@ -808,12 +849,11 @@ msgstr "Tek sefer" #: editor/connections_dialog.cpp msgid "Disconnects the signal after its first emission." -msgstr "" +msgstr "İlk yayılmasından sonra sinyal baÄŸlantısını keser." #: editor/connections_dialog.cpp -#, fuzzy msgid "Cannot connect signal" -msgstr "BaÄŸlantı Sinyali: " +msgstr "Sinyale baÄŸlanamıyor" #: editor/connections_dialog.cpp editor/dependency_editor.cpp #: editor/export_template_manager.cpp editor/groups_editor.cpp @@ -822,7 +862,8 @@ msgstr "BaÄŸlantı Sinyali: " #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -834,9 +875,8 @@ msgid "Connect" msgstr "BaÄŸla" #: editor/connections_dialog.cpp -#, fuzzy msgid "Signal:" -msgstr "Sinyaller:" +msgstr "Sinyal:" #: editor/connections_dialog.cpp msgid "Connect '%s' to '%s'" @@ -860,14 +900,12 @@ msgid "Disconnect" msgstr "BaÄŸlantıyı kes" #: editor/connections_dialog.cpp -#, fuzzy msgid "Connect a Signal to a Method" -msgstr "BaÄŸlantı Sinyali: " +msgstr "Bir Yönteme Bir Sinyal BaÄŸlayın" #: editor/connections_dialog.cpp -#, fuzzy msgid "Edit Connection:" -msgstr "BaÄŸlantıları Düzenle " +msgstr "BaÄŸlantıyı Düzenle:" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from the \"%s\" signal?" @@ -927,7 +965,8 @@ msgstr "Ara:" msgid "Matches:" msgstr "EÅŸleÅŸmeler:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -943,22 +982,20 @@ msgid "Dependencies For:" msgstr "Åžunun İçin Bağımlılıklar:" #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Scene '%s' is currently being edited.\n" "Changes will only take effect when reloaded." msgstr "" "'%s' Sahnesi ÅŸu anda düzenleniyor.\n" -"Yeniden yüklenene kadar deÄŸiÅŸiklikler etki etmeyecek." +"DeÄŸiÅŸiklikler sadece yeniden yüklendikten sonra etki edecektir." #: editor/dependency_editor.cpp -#, fuzzy msgid "" "Resource '%s' is in use.\n" "Changes will only take effect when reloaded." msgstr "" -"Kaynak '%s' kullanımda.\n" -"DeÄŸiÅŸiklikler yeniden yükleme yapılınca etkin olacak." +"'%s' kaynağı kullanılıyor.\n" +"DeÄŸiÅŸiklikler yeniden yükleme yapıldığında etkin olacak." #: editor/dependency_editor.cpp #: modules/gdnative/gdnative_library_editor_plugin.cpp @@ -970,7 +1007,7 @@ msgid "Resource" msgstr "Kaynak" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "Yol" @@ -1005,9 +1042,8 @@ msgid "Owners Of:" msgstr "Åžunların sahipleri:" #: editor/dependency_editor.cpp -#, fuzzy msgid "Remove selected files from the project? (Can't be restored)" -msgstr "Seçili dosyaları projeden kaldır? (geri alınamaz)" +msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)" #: editor/dependency_editor.cpp msgid "" @@ -1051,9 +1087,8 @@ msgid "Permanently delete %d item(s)? (No undo!)" msgstr "%d Öğeleri kalıcı olarak silsin mi? (Geri alınamaz!)" #: editor/dependency_editor.cpp -#, fuzzy msgid "Show Dependencies" -msgstr "Bağımlılıklar" +msgstr "Bağımlılıkları göster" #: editor/dependency_editor.cpp msgid "Orphan Resource Explorer" @@ -1144,12 +1179,10 @@ msgid "License" msgstr "Lisans" #: editor/editor_about.cpp -#, fuzzy msgid "Third-party Licenses" -msgstr "Üçüncü Parti Lisans" +msgstr "Üçüncü Parti Lisanslar" #: 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 " @@ -1158,8 +1191,9 @@ msgid "" msgstr "" "Godot Oyun Motoru, bazı ücretsiz ve açık kaynaklı üçüncü parti " "kütüphanelerden faydalanır, bunların hepsinin kullanım koÅŸulları MIT " -"lisansına uygundur. AÅŸağıda, bu üçüncü parti bileÅŸenlerin ayrıntılı telif " -"hakkı bildirimleri ve lisans koÅŸulları belirtilmiÅŸtir." +"lisansına uygundur. AÅŸağıda, bu tür üçüncü parti bileÅŸenlerinin telif hakkı " +"beyanları ve lisans koÅŸulları ile birlikte ayrıntılı bir listesi " +"bulunmaktadır." #: editor/editor_about.cpp msgid "All Components" @@ -1174,9 +1208,8 @@ msgid "Licenses" msgstr "Lisanslar" #: editor/editor_asset_installer.cpp editor/project_manager.cpp -#, fuzzy msgid "Error opening package file, not in ZIP format." -msgstr "Paket dosyası açılamıyor, zip formatında deÄŸil." +msgstr "Paket dosyası açılırken hata oluÅŸtu, zip formatında deÄŸil." #: editor/editor_asset_installer.cpp msgid "Uncompressing Assets" @@ -1244,8 +1277,8 @@ msgid "Delete Bus Effect" msgstr "Bus Efekti Sil" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Audio Bus, düzenlemek için Sürükle-Bırak." +msgid "Drag & drop to rearrange." +msgstr "Düzenlemek için Sürükle-Bırak." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1318,7 +1351,7 @@ msgstr "Audio Bus YerleÅŸim Düzenini Aç" #: editor/editor_audio_buses.cpp msgid "There is no '%s' file." -msgstr "" +msgstr "'%s' dosyası bulunamadı." #: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp msgid "Layout" @@ -1375,23 +1408,20 @@ msgid "Valid characters:" msgstr "Geçerli damgalar:" #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing engine class name." -msgstr "Geçersiz isim. Varolan bir motor sınıf ismi ile çakışmamalı." +msgstr "Varolan bir motor sınıf ismi ile çakışmamalı." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing built-in type name." -msgstr "Geçersiz ad. Var olan gömülü türdeki ad ile çakışmamalı." +msgstr "Var olan gömülü türdeki ad ile çakışmamalı." #: editor/editor_autoload_settings.cpp -#, fuzzy msgid "Must not collide with an existing global constant name." -msgstr "Geçersiz ad. Var olan genel deÄŸiÅŸmeyen bir adla çakışmamalıdır." +msgstr "Var olan genel deÄŸiÅŸmeyen bir adla çakışmamalıdır." #: editor/editor_autoload_settings.cpp msgid "Keyword cannot be used as an autoload name." -msgstr "" +msgstr "Anahtar kelime otomatik-yükleme ismi olarak kullanılamaz." #: editor/editor_autoload_settings.cpp msgid "Autoload '%s' already exists!" @@ -1422,9 +1452,8 @@ msgid "Rearrange Autoloads" msgstr "KendindenYüklenme'leri Yeniden Sırala" #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid path." -msgstr "Gecersiz Yol." +msgstr "Geçersiz yol." #: editor/editor_autoload_settings.cpp editor/script_create_dialog.cpp msgid "File does not exist." @@ -1439,7 +1468,9 @@ msgid "Add AutoLoad" msgstr "KendindenYüklenme Ekle" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "Dosya yolu:" @@ -1450,7 +1481,7 @@ msgstr "Düğüm adı:" #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp #: editor/editor_profiler.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "Ad" +msgstr "İsim" #: editor/editor_autoload_settings.cpp msgid "Singleton" @@ -1477,9 +1508,8 @@ msgid "[unsaved]" msgstr "[kaydedilmemiÅŸ]" #: editor/editor_dir_dialog.cpp -#, fuzzy msgid "Please select a base directory first." -msgstr "Lütfen öncelikle bir taban dizini seçin" +msgstr "Lütfen önce bir taban dizini seçin." #: editor/editor_dir_dialog.cpp msgid "Choose a Directory" @@ -1494,7 +1524,7 @@ msgstr "Klasör OluÅŸtur" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "İsim:" @@ -1565,22 +1595,19 @@ msgstr "Åžablon dosyası bulunamadı:" #: editor/editor_export.cpp msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB." -msgstr "" +msgstr "32-bit dışa aktarımlarda gömülü PCK 4GiB'tan büyük olamaz." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "3D Editor" -msgstr "Düzenleyici" +msgstr "3D Düzenleyici" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Script Editor" -msgstr "Betik Düzenleyiciyi Aç" +msgstr "Kod Düzenleyici" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Asset Library" -msgstr "Malvarlığı Kütüphanesini Aç" +msgstr "Varlık Kütüphanesi" #: editor/editor_feature_profile.cpp #, fuzzy @@ -1588,104 +1615,91 @@ msgid "Scene Tree Editing" msgstr "Sahne AÄŸacı (Düğümler):" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Dock" -msgstr "İçe Aktar" +msgstr "Dock İçe Aktar" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Node Dock" -msgstr "Biçimi Taşı" +msgstr "Dock Nod" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "FileSystem and Import Docks" -msgstr "DosyaSistemi" +msgstr "DosyaSistemi ve İçe Aktarım" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Erase profile '%s'? (no undo)" -msgstr "Tümünü DeÄŸiÅŸtir (geri alma yok)" +msgstr "'%s' profilini sil? (geri alınamaz)" #: editor/editor_feature_profile.cpp msgid "Profile must be a valid filename and must not contain '.'" -msgstr "" +msgstr "Profil geçerli bir dosya adı olmalı ve '.' içermemelidir" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Profile with this name already exists." -msgstr "Bu isimde zaten bir dosya ve ya klasör mevcut." +msgstr "Bu isimde zaten bir profil mevcut." #: editor/editor_feature_profile.cpp msgid "(Editor Disabled, Properties Disabled)" -msgstr "" +msgstr "(Editör Pasif, Özellikler Pasif)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Properties Disabled)" -msgstr "Sadece Özellikler" +msgstr "(Özellikler Devre Dışı)" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "(Editor Disabled)" -msgstr "Klip Devre dışı" +msgstr "Editör Devre dışı" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Options:" -msgstr "Sınıf Açıklaması:" +msgstr "Sınıf Seçenekleri:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enable Contextual Editor" -msgstr "Sonraki Düzenleyiciyi aç" +msgstr "İçeriksel Düzenleyiciyi EtkinleÅŸtir" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enabled Properties:" -msgstr "Özellikler:" +msgstr "Etkin Özellikler:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enabled Features:" -msgstr "Özellikler" +msgstr "Aktif Özellikler:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Enabled Classes:" -msgstr "Sınıfları Ara" +msgstr "Aktif Sınıflar:" #: editor/editor_feature_profile.cpp msgid "File '%s' format is invalid, import aborted." -msgstr "" +msgstr "'%s' dosyası geçersiz, içe aktarma iptal edildi." #: editor/editor_feature_profile.cpp msgid "" "Profile '%s' already exists. Remove it first before importing, import " "aborted." msgstr "" +"'%s' profili zaten var. İçe aktarmadan önce silin, içe aktarma iptal edildi." #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Error saving profile to path: '%s'." -msgstr "Åžablon '%s' yüklenirken hata" +msgstr "Profil yolu kaydetme hatası: '%s'." #: editor/editor_feature_profile.cpp msgid "Unset" -msgstr "" +msgstr "Ayarı kaldır" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Current Profile:" -msgstr "Åžu Anki Sürüm:" +msgstr "Åžu Anki Profil:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Make Current" -msgstr "Geçerli:" +msgstr "Geçerli Yap" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Yeni" @@ -1699,37 +1713,30 @@ msgid "Export" msgstr "Dışa Aktar" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Available Profiles:" -msgstr "Kullanılabilir Düğümler:" +msgstr "Kullanılabilir Profiller:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Class Options" -msgstr "Sınıf Açıklaması" +msgstr "Sınıf Seçenekleri" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "New profile name:" -msgstr "Yeni ad:" +msgstr "Yeni profil ismi:" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Erase Profile" -msgstr "Alanı Sil" +msgstr "Profili Sil" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Import Profile(s)" -msgstr "İçe Aktarılan Proje" +msgstr "Profil(leri) İçe Aktar" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Export Profile" -msgstr "Projeyi Dışa Aktar" +msgstr "Profil Dışa Aktar" #: editor/editor_feature_profile.cpp -#, fuzzy msgid "Manage Editor Feature Profiles" msgstr "Dışa Aktarım Åžablonlarını Yönet" @@ -1755,7 +1762,6 @@ msgstr "Dosya Yöneticisinde Aç" #: editor/editor_file_dialog.cpp editor/editor_node.cpp #: editor/filesystem_dock.cpp editor/project_manager.cpp -#, fuzzy msgid "Show in File Manager" msgstr "Dosya Yöneticisinde Göster" @@ -1764,6 +1770,7 @@ msgid "New Folder..." msgstr "Yeni Klasör..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Yenile" @@ -1781,7 +1788,7 @@ msgstr "Bir Dosya Aç" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open File(s)" -msgstr "Dosya(leri) Aç" +msgstr "Dosya(ları) Aç" #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp msgid "Open a Directory" @@ -1839,38 +1846,32 @@ msgid "Move Favorite Down" msgstr "BeÄŸenileni AÅŸağı Taşı" #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to previous folder." -msgstr "Üst klasöre git" +msgstr "Önceki klasöre git." #: editor/editor_file_dialog.cpp -#, fuzzy msgid "Go to next folder." -msgstr "Üst klasöre git" +msgstr "Sonraki klasöre git." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Go to parent folder." -msgstr "Üst klasöre git" +msgstr "Üst klasöre git." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Refresh files." -msgstr "Dosyaları ara" +msgstr "Dosyaları yenile." #: editor/editor_file_dialog.cpp msgid "(Un)favorite current folder." msgstr "Bu klasörü favorilerden çıkar/favorilere ekle." #: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp -#, fuzzy msgid "Toggle the visibility of hidden files." -msgstr "Gizli Dosyalari Aç / Kapat" +msgstr "Gizli Dosyaları Aç / Kapat." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp -#, fuzzy msgid "View items as a grid of thumbnails." -msgstr "Öğeleri küçük resim ızgarası ÅŸeklinde göster" +msgstr "Öğeleri küçük resim ızgarası ÅŸeklinde göster." #: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp msgid "View items as a list." @@ -1899,10 +1900,13 @@ msgid "ScanSources" msgstr "KaynaklarıTara" #: editor/editor_file_system.cpp +#, fuzzy msgid "" "There are multiple importers for different types pointing to file %s, import " "aborted" msgstr "" +"%s dosyasına iÅŸaret eden farklı tipler için birden fazla içe aktarım var, " +"içe aktarma iptal edildi" #: editor/editor_file_system.cpp msgid "(Re)Importing Assets" @@ -1917,6 +1921,7 @@ msgid "Class:" msgstr "Sınıf:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Kalıtçılar:" @@ -1925,46 +1930,26 @@ msgid "Inherited by:" msgstr "Åžundan miras alındı:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "Kısa Açıklama:" +msgid "Brief Description" +msgstr "Kısa Açıklama" #: editor/editor_help.cpp msgid "Properties" msgstr "Özellikler" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Özellikler:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Metotlar" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Metotlar:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "Tema Özellikleri" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Tema Özellikleri:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Sinyaller:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Numaralandırmalar" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Numaralandırmalar:" - -#: editor/editor_help.cpp msgid "enum " msgstr "enum… " @@ -1973,20 +1958,12 @@ msgid "Constants" msgstr "Sabitler" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "Sabitler:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "Sınıf Açıklaması" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "Sınıf Açıklaması:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Çevrimiçi Rehberler:" +msgid "Online Tutorials" +msgstr "Çevrimiçi Rehberler" #: editor/editor_help.cpp msgid "" @@ -2003,10 +1980,6 @@ msgid "Property Descriptions" msgstr "Özellik Açıklamaları" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "Özellik Açıklamaları:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2019,10 +1992,6 @@ msgid "Method Descriptions" msgstr "Metot Açıklamaları" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Metot Açıklamaları:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2088,12 +2057,11 @@ msgid "Output:" msgstr "Çıktı:" #: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Copy Selection" -msgstr "Seçimi Kaldır" +msgstr "Seçimi Kopyala" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2106,10 +2074,51 @@ msgstr "Temizle" msgid "Clear Output" msgstr "Çıktıyı Temizle" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Durdur" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "BaÅŸlat" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "AÅŸağı" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "Yukarı" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Düğüm" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Gelen RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "Gelen RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "Giden RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "Giden RSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "Pencere" +msgstr "Yeni Pencere" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2129,7 +2138,6 @@ msgid "Error saving resource!" msgstr "Kaynak kaydedilirken hata!" #: editor/editor_node.cpp -#, fuzzy msgid "" "This resource can't be saved because it does not belong to the edited scene. " "Make it unique first." @@ -2253,7 +2261,6 @@ msgstr "" "aktarma kısmını okuyunuz." #: editor/editor_node.cpp -#, fuzzy msgid "" "This resource belongs to a scene that was instanced or inherited.\n" "Changes to it won't be kept when saving the current scene." @@ -2284,14 +2291,13 @@ msgstr "" "aktarma kısmını okuyunuz." #: editor/editor_node.cpp -#, fuzzy msgid "" "This is a remote object, so changes to it won't be kept.\n" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" "Bu bir uzak nesne, yani yaptığınız deÄŸiÅŸiklikler saklanmayacaktır.\n" -"Lütfen, bu iÅŸ akışını daha iyi anlamak için dökümantasyondaki sahneleri içe " +"Lütfen, bu iÅŸ akışını daha iyi anlamak için belgelemedeki sahneleri içe " "aktarma kısmını okuyunuz." #: editor/editor_node.cpp @@ -2315,9 +2321,8 @@ msgid "Open Base Scene" msgstr "Ana Sahneyi Aç" #: editor/editor_node.cpp -#, fuzzy msgid "Quick Open..." -msgstr "Sahneyi Hızlı Aç..." +msgstr "Hızlı Aç..." #: editor/editor_node.cpp msgid "Quick Open Scene..." @@ -2442,9 +2447,8 @@ msgid "Close Scene" msgstr "Sahneyi Kapat" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Sahneyi Kapat" +msgstr "Kapalı Sahneyi Yeniden Aç" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2547,7 +2551,6 @@ msgstr "Varsayılan" #: editor/editor_node.cpp editor/editor_properties.cpp #: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp -#, fuzzy msgid "Show in FileSystem" msgstr "Dosya Sisteminde Göster" @@ -2560,9 +2563,8 @@ msgid "Close Tab" msgstr "Sekmeyi Kapat" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Sekmeyi Kapat" +msgstr "Sekmeyi Kapat'ı geri al" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2570,12 +2572,11 @@ msgstr "DiÄŸer Sekmeleri Kapat" #: editor/editor_node.cpp msgid "Close Tabs to the Right" -msgstr "" +msgstr "Sekmeleri SaÄŸa DoÄŸru Kapat" #: editor/editor_node.cpp -#, fuzzy msgid "Close All Tabs" -msgstr "Tümünü Kapat" +msgstr "Tüm Sekmeleri Kapat" #: editor/editor_node.cpp msgid "Switch Scene Tab" @@ -2618,9 +2619,8 @@ msgid "Go to previously opened scene." msgstr "Daha önce açılan sahneye git." #: editor/editor_node.cpp -#, fuzzy msgid "Copy Text" -msgstr "Dosya Yolunu Tıpkıla" +msgstr "Metni Kopyala" #: editor/editor_node.cpp msgid "Next tab" @@ -2697,17 +2697,29 @@ msgid "Project" msgstr "Proje" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Proje Ayarları" +msgstr "Proje Ayarları..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "Sürüm Kontrol" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "Sürüm Kontrolü Kur" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Sürüm Kontrolü Kapat" #: editor/editor_node.cpp msgid "Export..." msgstr "Dışa Aktar..." #: editor/editor_node.cpp +#, fuzzy msgid "Install Android Build Template..." -msgstr "" +msgstr "Android Yapı Åžablonunu Yükle ..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2718,9 +2730,8 @@ msgid "Tools" msgstr "Araçlar" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "Orphan Kaynak AraÅŸtırıcı" +msgstr "Orphan Kaynak Göstericisi..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2745,7 +2756,7 @@ msgstr "" #: editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "AÄŸ DS'li Küçük Dağıtım" +msgstr "AÄŸ DS ile Küçük Dağıtım" #: editor/editor_node.cpp msgid "" @@ -2823,32 +2834,28 @@ msgid "Editor" msgstr "Düzenleyici" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Düzenleyici Ayarları" +msgstr "Düzenleyici Ayarları..." #: editor/editor_node.cpp msgid "Editor Layout" msgstr "Düzenleyici YerleÅŸim Düzeni" #: editor/editor_node.cpp -#, fuzzy msgid "Take Screenshot" -msgstr "Anlamlı!" +msgstr "Ekran Görüntüsü Al" #: editor/editor_node.cpp -#, fuzzy msgid "Screenshots are stored in the Editor Data/Settings Folder." -msgstr "Düzenleyici Verileri/Ayarları Klasörünü Aç" +msgstr "Ekran Görüntüleri Düzenleyici Verileri/Ayarları Klasöründe saklanır." #: editor/editor_node.cpp msgid "Toggle Fullscreen" msgstr "Tam Ekran Aç / Kapat" #: editor/editor_node.cpp -#, fuzzy msgid "Toggle System Console" -msgstr "CanvasItem'ı Görünür Duruma Getir" +msgstr "Sistem Terminalini Aç / Kapat" #: editor/editor_node.cpp msgid "Open Editor Data/Settings Folder" @@ -2863,14 +2870,12 @@ msgid "Open Editor Settings Folder" msgstr "Düzenleyici Ayarları Klasörünü Aç" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "Dışa Aktarım Åžablonlarını Yönet" +msgstr "Düzenleyici Özelliklerini Yönet..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Dışa Aktarım Åžablonlarını Yönet" +msgstr "Dışa Aktarım Åžablonlarını Yönet..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2892,7 +2897,7 @@ msgstr "Çevrimiçi Belgeler" #: editor/editor_node.cpp msgid "Q&A" -msgstr "SSS" +msgstr "S&C" #: editor/editor_node.cpp msgid "Issue Tracker" @@ -2926,10 +2931,6 @@ msgstr "Sahneyi Duraklat" msgid "Stop the scene." msgstr "Sahneyi durdur." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Durdur" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "DüzenlenmiÅŸ sahneyi oynat." @@ -2961,19 +2962,16 @@ msgid "Spins when the editor window redraws." msgstr "Düzenleyici penceresi yeniden boyandığında döner." #: editor/editor_node.cpp -#, fuzzy msgid "Update Continuously" -msgstr "Kesintisiz" +msgstr "Sürekli Güncelle" #: editor/editor_node.cpp -#, fuzzy msgid "Update When Changed" -msgstr "DeÄŸiÅŸiklikleri güncelle" +msgstr "DeÄŸiÅŸiklik OlduÄŸunda Güncelle" #: editor/editor_node.cpp -#, fuzzy msgid "Hide Update Spinner" -msgstr "Güncelleme Topacını Devre Dışı Bırak" +msgstr "Güncelleme Topacını Gizle" #: editor/editor_node.cpp msgid "FileSystem" @@ -2984,14 +2982,10 @@ msgid "Inspector" msgstr "Denetçi" #: editor/editor_node.cpp -msgid "Node" -msgstr "Düğüm" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Alt Panoyu GeniÅŸlet" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Çıktı" @@ -3001,25 +2995,33 @@ msgstr "Kaydetme" #: editor/editor_node.cpp msgid "Android build template is missing, please install relevant templates." -msgstr "" +msgstr "Android yapı ÅŸablonu eksik, lütfen uygun ÅŸablonları yükleyin." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Templates" -msgstr "Dışa Aktarım Åžablonlarını Yönet" +msgstr "Åžablonlarını Yönet" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp +#, fuzzy msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" +"Android yapı ÅŸablonu zaten yüklü ve üzerine yazılmayacak.\n" +"Bu iÅŸlemi tekrar denemeden önce \"build\" dizinini el ile kaldırın." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3071,7 +3073,7 @@ msgstr "Betik Düzenleyiciyi Aç" #: editor/editor_node.cpp editor/project_manager.cpp msgid "Open Asset Library" -msgstr "Malvarlığı Kütüphanesini Aç" +msgstr "Projeler Kütüphanesini Aç" #: editor/editor_node.cpp msgid "Open the next Editor" @@ -3081,6 +3083,10 @@ msgstr "Sonraki Düzenleyiciyi aç" msgid "Open the previous Editor" msgstr "Önceki Düzenleyiciyi Aç" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Alt kaynağı bulunamadı." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Mesh Önizlemeleri OluÅŸturuluyor" @@ -3090,6 +3096,10 @@ msgid "Thumbnail..." msgstr "Küçük Resim..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "Ana Betik:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Eklentiyi Düzenle" @@ -3118,11 +3128,6 @@ msgstr "Durum:" msgid "Edit:" msgstr "Düzenle:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "BaÅŸlat" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Ölçüm:" @@ -3164,9 +3169,8 @@ msgid "Calls" msgstr "ÇaÄŸrılar" #: editor/editor_properties.cpp -#, fuzzy msgid "Edit Text:" -msgstr "Tema düzenle..." +msgstr "Metin Düzenle:" #: editor/editor_properties.cpp editor/script_create_dialog.cpp msgid "On" @@ -3202,7 +3206,6 @@ msgstr "" "uyuÅŸmuyor." #: editor/editor_properties.cpp -#, fuzzy msgid "" "Can't create a ViewportTexture on resources saved as a file.\n" "Resource needs to belong to a scene." @@ -3212,7 +3215,6 @@ msgstr "" "Kaynak bir sahneye ait olmalı." #: editor/editor_properties.cpp -#, fuzzy msgid "" "Can't create a ViewportTexture on this resource because it's not set as " "local to scene.\n" @@ -3232,6 +3234,11 @@ msgstr "Bir Görüntükapısı Seçin" msgid "New Script" msgstr "Yeni Betik" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Betik Aç" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Yeni %s" @@ -3258,13 +3265,6 @@ msgstr "Yapıştır" msgid "Convert To %s" msgstr "Åžuna Dönüştür %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Düzenleyiciyi Aç" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Seçili düğüm bir Viewport deÄŸil!" @@ -3363,6 +3363,8 @@ msgstr "İndir" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." msgstr "" +"Resmi dışa aktarım ÅŸablonları, geliÅŸtirici sürümleri için kullanılabilir " +"deÄŸildir." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3445,9 +3447,8 @@ msgid "Download Complete." msgstr "İndirme Tamamlandı." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Tema dosyaya kaydedilemiyor:" +msgstr "Geçici dosya kaldırılamıyor:" #: editor/export_template_manager.cpp #, fuzzy @@ -3459,9 +3460,8 @@ msgstr "" "'%s'." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Url isteÄŸi hatası: " +msgstr "URL isteÄŸi hatası:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3510,9 +3510,8 @@ msgid "SSL Handshake Error" msgstr "SSL El Sıkışma Hatası" #: editor/export_template_manager.cpp -#, fuzzy msgid "Uncompressing Android Build Sources" -msgstr "Varlıklar Çıkartılıyor" +msgstr "Android İnÅŸa Kaynakları Çıkartılıyor" #: editor/export_template_manager.cpp msgid "Current Version:" @@ -3531,9 +3530,8 @@ msgid "Remove Template" msgstr "Åžablonu Kaldır" #: editor/export_template_manager.cpp -#, fuzzy msgid "Select Template File" -msgstr "Åžablon dosyası seç" +msgstr "Åžablon Dosyası Seç" #: editor/export_template_manager.cpp msgid "Export Template Manager" @@ -3611,14 +3609,12 @@ msgid "Duplicating folder:" msgstr "Klasör çoÄŸaltılıyor:" #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Inherited Scene" -msgstr "Yeni Miras Alınmış Sahne ..." +msgstr "Yeni Miras Alınmış Sahne" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scenes" -msgstr "Sahneyi Aç" +msgstr "Sahneleri Aç" #: editor/filesystem_dock.cpp msgid "Instance" @@ -3685,14 +3681,12 @@ msgid "Rename" msgstr "Yeniden Adlandır" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Previous Folder/File" -msgstr "Önceki Klasör" +msgstr "Önceki Klasör/Dosya" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Next Folder/File" -msgstr "Sonraki Klasör" +msgstr "Sonraki Klasör/Dosya" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" @@ -3728,9 +3722,8 @@ msgid "Overwrite" msgstr "Üzerine Yaz" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Sahneden OluÅŸtur" +msgstr "Sahne OluÅŸtur" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3753,10 +3746,13 @@ msgid "Filters:" msgstr "Süzgeçler:" #: editor/find_in_files.cpp +#, fuzzy msgid "" "Include the files with the following extensions. Add or remove them in " "ProjectSettings." msgstr "" +"Bu uzantıdaki dosyaları dahil et. Uzantıları ProjeAyarlarından ekle ya da " +"sil." #: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp #: editor/plugins/script_text_editor.cpp @@ -3813,9 +3809,8 @@ msgid "Rename Group" msgstr "Grupları Düzenle" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Bediz ÖbeÄŸini Sil" +msgstr "Grup Sil" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" @@ -3837,12 +3832,11 @@ msgstr "Gruptaki Düğümler" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "BoÅŸ gruplar otomatik olarak silinecektir." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Betik Düzenleyiciyi Aç" +msgstr "Grup Düzenleyici" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3943,9 +3937,9 @@ msgstr " Dosyalar" msgid "Import As:" msgstr "Åžu Åžekilde İçe Aktar:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Ön ayar..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Önayar" #: editor/import_dock.cpp msgid "Reimport" @@ -4074,7 +4068,7 @@ msgstr "Eklentinin Adı:" msgid "Subfolder:" msgstr "Alt Klasör:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Dil:" @@ -4149,14 +4143,12 @@ msgid "Move Node Point" msgstr "Düğüm Noktasını Taşı" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Change BlendSpace1D Limits" -msgstr "BlendSpace1D'nin Sınırlarını DeÄŸiÅŸtir" +msgstr "BlendSpace1D Sınırlarını DeÄŸiÅŸtir" #: editor/plugins/animation_blend_space_1d_editor.cpp -#, fuzzy msgid "Change BlendSpace1D Labels" -msgstr "BlendSpace1D'nin Etiketlerini DeÄŸiÅŸtir" +msgstr "BlendSpace1D Etiketlerini DeÄŸiÅŸtir" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp @@ -4197,7 +4189,6 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Set the blending position within the space" msgstr "Harmanlama konumunu uzay içinde ayarla" @@ -4219,6 +4210,12 @@ msgstr "Nokta" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Düzenleyiciyi Aç" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Animasyon Düğümünü Aç" @@ -4233,7 +4230,6 @@ msgid "Add Triangle" msgstr "Üçgen Ekle" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Change BlendSpace2D Limits" msgstr "BlendSpace2D Sınırlarını DeÄŸiÅŸtir" @@ -4243,12 +4239,10 @@ msgid "Change BlendSpace2D Labels" msgstr "BlendSpace2D Etiketlerini DeÄŸiÅŸtir" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Point" msgstr "BlendSpace2D Noktasını Kaldır" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Remove BlendSpace2D Triangle" msgstr "BlendSpace2D Üçgenini Kaldır" @@ -4257,9 +4251,8 @@ msgid "BlendSpace2D does not belong to an AnimationTree node." msgstr "BlendSpace2D bir AnimationTree düğümüne ait deÄŸil." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "No triangles exist, so no blending can take place." -msgstr "Herhangi bir üçgen bulunmuyor, harmanlama iÅŸlemi yapılamaz." +msgstr "Herhangi bir üçgen bulunmuyor, burada harmanlama iÅŸlemi yapılamaz." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Toggle Auto Triangles" @@ -4267,16 +4260,15 @@ msgstr "Otomatik Üçgenleri Aç / Kapat" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Create triangles by connecting points." -msgstr "" +msgstr "BaÄŸlantı noktalarından üçgen yarat." #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Erase points and triangles." -msgstr "%d Üçgenlerini Ayrıştırma:" +msgstr "Noktaları ve üçgenleri sil." #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Generate blend triangles automatically (instead of manually)" -msgstr "" +msgstr "Otomatik üçgen harmanlayıcı oluÅŸtur (el ile)" #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4284,9 +4276,8 @@ msgid "Blend:" msgstr "Karışma:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Parameter Changed" -msgstr "Materyal DeÄŸiÅŸiklikleri" +msgstr "Parametre DeÄŸiÅŸti" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp @@ -4311,48 +4302,43 @@ msgstr "Biçimi Taşı" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Unable to connect, port may be in use or connection may be invalid." msgstr "" +"BaÄŸlanılamıyor, port kullanımda olabilir veya baÄŸlantı geçersiz olabilir." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Connected" -msgstr "BaÄŸlı" +msgstr "Düğümler BaÄŸlandı" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Nodes Disconnected" -msgstr "BaÄŸlantı kesildi" +msgstr "Düğümlerin BaÄŸlantısı Kesildi" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Set Animation" -msgstr "Animasyon" +msgstr "Animasyon Ata" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Delete Node" -msgstr "Düğümleri Sil" +msgstr "Düğüm Sil" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/scene_tree_dock.cpp msgid "Delete Node(s)" -msgstr "Düğümleri Sil" +msgstr "Düğüm(leri) Sil" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Toggle Filter On/Off" -msgstr "Dikkat-Dağıtmayan Kipine geç." +msgstr "Süzgeç Aç/Kapat" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Change Filter" -msgstr "DeÄŸiÅŸtirilen Yerel Süzgeç" +msgstr "Süzgeç DeÄŸiÅŸtir" #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "No animation player set, so unable to retrieve track names." -msgstr "" +msgstr "Animasyon oynatıcısı atanmadı, parça isimleri alınamıyor." #: editor/plugins/animation_blend_tree_editor_plugin.cpp msgid "Player path set is invalid, so unable to retrieve track names." @@ -4367,34 +4353,30 @@ msgstr "" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp -#, fuzzy msgid "Node Renamed" -msgstr "Düğüm adı:" +msgstr "Düğüm Yeniden Adlandırıldı" #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Add Node..." -msgstr "Düğüm Ekle" +msgstr "Düğüm Ekle..." #: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/root_motion_editor_plugin.cpp -#, fuzzy msgid "Edit Filtered Tracks:" -msgstr "Süzgeçleri Düzenle" +msgstr "SüzgeçlenmiÅŸ Parçaları Düzenle:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable Filtering" -msgstr "Düzenlenebilir Çocuklar" +msgstr "Süzgeçlemeyi Aç" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" -msgstr "KendindenOynatmayı Aç/Kapat" +msgstr "Otomatik Oynatmayı Aç/Kapat" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Animation Name:" -msgstr "Yeni Animasyon Adı:" +msgstr "Yeni Animasyon İsmi:" #: editor/plugins/animation_player_editor_plugin.cpp msgid "New Anim" @@ -4402,9 +4384,10 @@ msgstr "Yeni Animasyon" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Change Animation Name:" -msgstr "Animasyonun Adını DeÄŸiÅŸtir:" +msgstr "Animasyon İsmini DeÄŸiÅŸtir:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Animasyon Silinsin mi?" @@ -4414,14 +4397,12 @@ msgid "Remove Animation" msgstr "Animasyonu Kaldır" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Invalid animation name!" -msgstr "HATA: Geçersiz animasyon adı!" +msgstr "Geçersiz animasyon ismi!" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Animation name already exists!" -msgstr "HATA: Bu animasyon adı zaten var!" +msgstr "Animasyon ismi zaten var!" #: editor/plugins/animation_player_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp @@ -4588,7 +4569,6 @@ msgstr "Animasyon Adı:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Hata!" @@ -4626,19 +4606,19 @@ msgstr "Son(lar)" #: editor/plugins/animation_state_machine_editor.cpp msgid "Immediate" -msgstr "" +msgstr "Hemen" #: editor/plugins/animation_state_machine_editor.cpp msgid "Sync" -msgstr "" +msgstr "EÅŸitle" #: editor/plugins/animation_state_machine_editor.cpp msgid "At End" -msgstr "" +msgstr "Sonunda" #: editor/plugins/animation_state_machine_editor.cpp msgid "Travel" -msgstr "" +msgstr "Seyahat" #: editor/plugins/animation_state_machine_editor.cpp msgid "Start and end nodes are needed for a sub-transition." @@ -4661,7 +4641,7 @@ msgstr "GeçiÅŸ Düğümü" #: editor/plugins/animation_state_machine_editor.cpp msgid "Set Start Node (Autoplay)" -msgstr "" +msgstr "BaÅŸlangıç Düğümünü Ayarla (Otomatik Oynat)" #: editor/plugins/animation_state_machine_editor.cpp msgid "" @@ -4669,6 +4649,9 @@ msgid "" "RMB to add new nodes.\n" "Shift+LMB to create connections." msgstr "" +"Düğümleri seç ve taşı.\n" +"Yeni düğümler eklemek için RMB.\n" +"Yeni baÄŸlantılar için Shift+LMB." #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy @@ -4766,6 +4749,8 @@ msgid "Current:" msgstr "Geçerli:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "GiriÅŸ Ekle" @@ -4877,7 +4862,7 @@ msgstr "Tema dosyaya kaydedilemiyor:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Yazma hatası." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" @@ -4973,13 +4958,17 @@ msgstr "Sonraki" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Last" -msgstr "" +msgstr "Son" #: editor/plugins/asset_library_editor_plugin.cpp msgid "All" msgstr "Hepsi" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Yeniden İçe Aktar..." @@ -4994,11 +4983,6 @@ msgid "Sort:" msgstr "Sırala:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "İsteniyor..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Kategori:" @@ -5297,23 +5281,33 @@ msgstr "Kaydırma Biçimi" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Çalışma Kipi:" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Yapılmayı aç/kapat" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Yapışma Kullan" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snapping Options" -msgstr "Yapışma ayarları" +msgid "Toggle grid snapping." +msgstr "Yapılmayı aç/kapat" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "Izgaraya yapış" +msgid "Use Grid Snap" +msgstr "Izgara Yapışması" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "Yapışma ayarları" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5411,8 +5405,8 @@ msgid "View" msgstr "Görüş" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Izgarayı Göster" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5689,6 +5683,11 @@ msgstr "EÄŸri DoÄŸrusal Tanjantını Aç/Kapa" msgid "Hold Shift to edit tangents individually" msgstr "Tanjantları tek tek düzenlemek için Shift'e basılı tut" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "SaÄŸ tıkla: Nokta Sil" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "GI Prob PiÅŸir" @@ -5786,7 +5785,7 @@ msgstr "Anahat OluÅŸtur" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Mesh" -msgstr "Örüntü" +msgstr "Örgü" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" @@ -6342,6 +6341,10 @@ msgid "Grid" msgstr "Izgara" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Izgarayı Göster" + +#: editor/plugins/polygon_2d_editor_plugin.cpp #, fuzzy msgid "Configure Grid:" msgstr "Yapışmayı Yapılandır" @@ -6403,7 +6406,8 @@ msgstr "Örnek:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Tür:" @@ -6514,6 +6518,11 @@ msgid "Find Next" msgstr "Sonraki Bul" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Öncekini Bul" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Özellikleri süz" @@ -6589,12 +6598,11 @@ msgstr "Sonraki GeçmiÅŸ" #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp msgid "Theme" -msgstr "Kalıp" +msgstr "Tema" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Import Theme..." -msgstr "Kalıbı İçe Aktar" +msgstr "Tema İçe Aktar..." #: editor/plugins/script_editor_plugin.cpp msgid "Reload Theme" @@ -6621,14 +6629,14 @@ msgid "Toggle Scripts Panel" msgstr "Betikler Panelini Aç/Kapa" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Adımla" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "İçeri Adımla" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Adımla" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Ara Ver" @@ -6712,7 +6720,7 @@ msgstr "En Son Sahneleri Temizle" msgid "Connections to method:" msgstr "Düğüme BaÄŸla:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "Kaynak:" @@ -6724,7 +6732,7 @@ msgstr "Sinyaller" #: editor/plugins/script_text_editor.cpp msgid "Target" -msgstr "Amaç" +msgstr "Hedef" #: editor/plugins/script_text_editor.cpp #, fuzzy @@ -6799,6 +6807,11 @@ msgstr "Noktalar oluÅŸtur." msgid "Cut" msgstr "Kes" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Hepsini seç" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Satırı Sil" @@ -6859,10 +6872,6 @@ msgid "Auto Indent" msgstr "Kendinden Girintili" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Öncekini Bul" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Dosyaları Süz..." @@ -6965,9 +6974,8 @@ msgid "Create physical bones" msgstr "Yönlendirici Örüntüsü OluÅŸtur" #: editor/plugins/skeleton_editor_plugin.cpp -#, fuzzy msgid "Skeleton" -msgstr "İskelet..." +msgstr "İskelet" #: editor/plugins/skeleton_editor_plugin.cpp #, fuzzy @@ -7205,6 +7213,11 @@ msgid "Freelook Speed Modifier" msgstr "Serbestbakış Hız DeÄŸiÅŸtirici" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Serbestbakış Hız DeÄŸiÅŸtirici" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7244,6 +7257,10 @@ msgid "Use Local Space" msgstr "Yerel Uzay Kipi (%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Yapışma Kullan" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "Alttan Görünüm" @@ -7485,6 +7502,11 @@ msgstr "" #: editor/plugins/sprite_editor_plugin.cpp #, fuzzy +msgid "Shrink (Pixels): " +msgstr "Yapış (Noktalara):" + +#: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy msgid "Grow (Pixels): " msgstr "Yapış (Noktalara):" @@ -7538,6 +7560,11 @@ msgstr "(boÅŸ)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Çerçeveyi Yapıştır" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Animasyonlar" @@ -7875,6 +7902,15 @@ msgid "Enable Priority" msgstr "Süzgeçleri Düzenle" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Dosyaları Süz..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Karo Boya" @@ -8024,6 +8060,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Mevcut giriyi kaldır" @@ -8209,18 +8250,118 @@ msgstr "Bu iÅŸlem bir sahne olmadan yapılamaz." msgid "TileSet" msgstr "Karo Takımı" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Hata" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "GiriÅŸ Ekle" +msgid "No commit message was provided" +msgstr "İsim saÄŸlanmadı" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "Topluluk" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "Büyük harfe çevirme" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Yeni %s oluÅŸtur" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "DeÄŸiÅŸtir" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Yeniden Adlandır" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Sil" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "DeÄŸiÅŸtir" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Seçilenleri Sil" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Tümünü kaydet" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Betik DeÄŸiÅŸikliklerini EÅŸ Zamanla" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "Durum" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "No file diff is active" +msgstr "Hiçbir Dizeç Seçilmedi!" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "GiriÅŸ Ekle" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8229,9 +8370,8 @@ msgid "Scalar" msgstr "Ölçekle:" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector" -msgstr "Denetçi" +msgstr "Vektör" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -8239,6 +8379,11 @@ msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "Örnekler" + +#: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy msgid "Add input port" msgstr "GiriÅŸ Ekle" @@ -8469,6 +8614,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9134,15 +9284,19 @@ msgid "Resources to export:" msgstr "Dışa aktarılacak kaynaklar:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Kaynak olmayan dosyaları dışa aktarmak için kullanılan süzgeçler (virgülle " "ayrılmış, ör. * .json, * .txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Dışa aktarma iÅŸleminden hariç tutulacak süzgeçler (virgülle ayrılmış, ör. * ." "json, * .txt)" @@ -9727,6 +9881,11 @@ msgid "Settings saved OK." msgstr "Ayarlar kaydedildi TAMAM." #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "GiriÅŸ İşlem Olayı Ekle" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "ÖzelliÄŸin Üzerine Yaz" @@ -9865,6 +10024,10 @@ msgid "Plugins" msgstr "Eklentiler" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Ön ayar..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Sıfır" @@ -10040,10 +10203,6 @@ msgstr "Büyük harf" msgid "Reset" msgstr "YaklaÅŸmayı Sıfırla" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Hata" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Düğümün EbeveynliÄŸini DeÄŸiÅŸtir" @@ -10101,6 +10260,11 @@ msgid "Instance Scene(s)" msgstr "Sahne(leri) Örnekle" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Replace with Branch Scene" +msgstr "Dalı Sahne olarak Kaydet" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Çocuk Sahnesini Örnekle" @@ -10142,8 +10306,23 @@ msgid "Make node as Root" msgstr "Anlamlı!" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Düğüm(ler) Silinsin mi?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Düğümleri Sil" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete the root node \"%s\"?" +msgstr "Gölgelendirici Çizge Düğümünü Sil" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Düğümleri Sil" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -10164,12 +10343,10 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Düzenlenebilir Çocuklar" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Yer Tutucu Olarak Yükle" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -10250,6 +10427,14 @@ msgid "Clear Inheritance" msgstr "Kalıtı Temizle" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Düzenlenebilir Çocuklar" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Yer Tutucu Olarak Yükle" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "Çevrimiçi Godot dökümanlarını aç" @@ -10269,11 +10454,6 @@ msgstr "Türü DeÄŸiÅŸtir" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Betik Aç" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Düğümün EbeveynliÄŸini DeÄŸiÅŸtir" @@ -10542,23 +10722,18 @@ msgid "Will load an existing script file." msgstr "Mevcut betik dosyasını yükle" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Dil" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "Miras Alınmışlar" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Sınıf İsmi" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Åžablon" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Gömme Betik" #: editor/script_create_dialog.cpp @@ -10575,19 +10750,50 @@ msgstr "Baytlar:" #: editor/script_editor_debugger.cpp #, fuzzy -msgid "Stack Trace" -msgstr "Çerçeveleri Yığ" +msgid "Warning:" +msgstr "Uyarılar" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "GrafiÄŸi görüntülemek için listeden bir veya daha fazla öğe seçin." +msgid "Error:" +msgstr "Hata:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Hatayı Kopyala" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Hata:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Kaynak:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Kaynak:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "Kaynak:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Stack Trace" +msgstr "Çerçeveleri Yığ" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Hatalar" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +#, fuzzy +msgid "Child process connected." msgstr "Çocuk Süreç BaÄŸlandı" #: editor/script_editor_debugger.cpp @@ -10595,6 +10801,11 @@ msgid "Copy Error" msgstr "Hatayı Kopyala" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Noktalar oluÅŸtur." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "Önceki ÖrneÄŸi İncele" @@ -10611,6 +10822,11 @@ msgid "Profiler" msgstr "Kesitçi" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Projeyi Dışa Aktar" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Görüntülük" @@ -10623,6 +10839,10 @@ msgid "Monitors" msgstr "Monitörler" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "GrafiÄŸi görüntülemek için listeden bir veya daha fazla öğe seçin." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "KaynaÄŸa Göre İzleti BelleÄŸi Kullanımının Dizelgesi:" @@ -10830,10 +11050,6 @@ msgid "Library" msgstr "Kütüphane" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "Durum" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Kütüphaneler: " @@ -10842,6 +11058,10 @@ msgid "GDNative" msgstr "GDYerel" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "adım deÄŸiÅŸtirgeni sıfır!" @@ -10998,6 +11218,15 @@ msgstr "IzgaraHaritası Ayarları" msgid "Pick Distance:" msgstr "Uzaklık Seç:" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Süzgeç kipi:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz" @@ -11142,6 +11371,10 @@ msgid "Create a new variable." msgstr "Yeni %s oluÅŸtur" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Sinyaller:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Sıfırdan yeni bir çokgen oluÅŸturun." @@ -11171,6 +11404,11 @@ msgid "Add Function" msgstr "Fonksiyon Ekle" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Noktayı kaldır" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "DeÄŸiÅŸken Ekle" @@ -11179,6 +11417,26 @@ msgid "Add Signal" msgstr "Sinyal Ekle" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "GiriÅŸ Ekle" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "GiriÅŸ Ekle" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Noktayı kaldır" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Noktayı kaldır" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "İfadeyi DeÄŸiÅŸtir" @@ -11223,10 +11481,20 @@ msgid "Add Preload Node" msgstr "Önyüklenen Düğüm Ekle" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "AÄŸaçtan Düğüm(ler) Ekle" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Alıcı Özellik Ekle" @@ -11252,6 +11520,11 @@ msgstr "Düğümleri BaÄŸla" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Çizge Düğümlerinin BaÄŸlantılarını Kes" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Düğümleri BaÄŸla" @@ -11286,6 +11559,28 @@ msgid "Paste VisualScript Nodes" msgstr "GörselBetik Düğümleri Yapıştır" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Fonksiyon düğümü kopyalanamıyor." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "İşlevi Yeniden Adlandır" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "İşlevi Kaldır" @@ -11306,16 +11601,18 @@ msgid "Editing Signal:" msgstr "Sinyal Düzenleniyor:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Taban Türü:" +#, fuzzy +msgid "Make Tool:" +msgstr "YerelleÅŸtir" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Üyeler:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Kullanılabilir Düğümler:" +#, fuzzy +msgid "function_name" +msgstr "Fonksiyon:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy @@ -11340,6 +11637,16 @@ msgstr "Düğümleri Kes" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "İşlevi Yeniden Adlandır" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Yenile" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "Üyeler" @@ -11437,6 +11744,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Listeden aygıt seç" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11457,9 +11768,11 @@ msgid "Invalid Android SDK path for custom build in Editor Settings." msgstr "" #: platform/android/export/export.cpp +#, fuzzy msgid "" -"Android project is not installed for compiling. Install from Editor menu." -msgstr "" +"Android build template not installed in the project. Install it from the " +"Project menu." +msgstr "Android yapı ÅŸablonu eksik, lütfen ilgili ÅŸablonları yükleyin." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11538,6 +11851,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Tarayıcıda Çalıştır" @@ -12194,42 +12511,100 @@ msgstr "" "yapın böylece bir boyut elde edebilir. Aksi takdirde, Görüntüleme için bunu " "bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata." -#: scene/resources/visual_shader.cpp -#, fuzzy -msgid "Input" -msgstr "GiriÅŸ Ekle" - #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for preview." -msgstr "Geçersiz kaynak!" +msgstr "Önizleme için geçersiz kaynak." #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for shader." -msgstr "Geçersiz kaynak!" +msgstr "Gölgelendirici için geçersiz kaynak." #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "Geçersiz kaynak!" +msgstr "Bu tür için geçersiz karşılaÅŸtırma iÅŸlevi." #: servers/visual/shader_language.cpp msgid "Assignment to function." -msgstr "" +msgstr "İşleve atama." #: servers/visual/shader_language.cpp +#, fuzzy msgid "Assignment to uniform." -msgstr "" +msgstr "DeÄŸiÅŸmeze atama." #: servers/visual/shader_language.cpp +#, fuzzy msgid "Varyings can only be assigned in vertex function." -msgstr "" +msgstr "DeÄŸiÅŸkenler yalnızca tepe iÅŸlevinde atanabilir." #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "Izgaraya yapış" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "GiriÅŸ Ekle" + +#~ msgid "Language" +#~ msgstr "Dil" + +#~ msgid "Inherits" +#~ msgstr "Miras Alınmışlar" + +#~ msgid "Base Type:" +#~ msgstr "Taban Türü:" + +#~ msgid "Available Nodes:" +#~ msgstr "Kullanılabilir Düğümler:" + +#~ msgid "Input" +#~ msgstr "GiriÅŸ" + +#~ msgid "Properties:" +#~ msgstr "Özellikler:" + +#~ msgid "Methods:" +#~ msgstr "Metotlar:" + +#~ msgid "Theme Properties:" +#~ msgstr "Tema Özellikleri:" + +#~ msgid "Enumerations:" +#~ msgstr "Numaralandırmalar:" + +#~ msgid "Constants:" +#~ msgstr "Sabitler:" + +#~ msgid "Class Description:" +#~ msgstr "Sınıf Açıklaması:" + +#~ msgid "Property Descriptions:" +#~ msgstr "Özellik Açıklamaları:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Metot Açıklamaları:" + +#, fuzzy +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "Bu, özel yapımlar için Android projesini yükleyecektir.\n" +#~ "Bunu kullanmak için, içe aktarım ön ayarı başına etkinleÅŸtirilmesi " +#~ "gerektiÄŸine dikkat edin." + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "İsteniyor..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Düğüm(ler) Silinsin mi?" + #~ msgid "" #~ "Can't open file_type_cache.cch for writing, not saving file type cache!" #~ msgstr "" @@ -12410,9 +12785,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Go to parent folder" #~ msgstr "Üst klasöre git" -#~ msgid "Select device from the list" -#~ msgstr "Listeden aygıt seç" - #~ msgid "Open Scene(s)" #~ msgstr "Sahne(ler) Aç" @@ -12477,10 +12849,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgstr "Seçilen sahneyi/sahneleri seçilen düğüme çocuk olarak örneklendir." #, fuzzy -#~ msgid "Warnings:" -#~ msgstr "Uyarılar" - -#, fuzzy #~ msgid "Font Size:" #~ msgstr "Kaynak Yazı Türü Boyutu:" @@ -12523,9 +12891,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Select a split to erase it." #~ msgstr "Önce bir ayar öğesi seçin!" -#~ msgid "No name provided" -#~ msgstr "İsim saÄŸlanmadı" - #, fuzzy #~ msgid "Add Node.." #~ msgstr "Düğüm Ekle" @@ -12667,12 +13032,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Warning" #~ msgstr "Uyarı" -#~ msgid "Error:" -#~ msgstr "Hata:" - -#~ msgid "Function:" -#~ msgstr "Fonksiyon:" - #~ msgid "Variable" #~ msgstr "DeÄŸiÅŸken" @@ -12736,9 +13095,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Connect Graph Nodes" #~ msgstr "Çizge Düğümlerini BaÄŸla" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Çizge Düğümlerinin BaÄŸlantılarını Kes" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Gölgelendirici Çizge Düğümünü Kaldır" @@ -12748,9 +13104,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Grafik Düğüm(lerini) ÇoÄŸalt" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Gölgelendirici Çizge Düğümünü Sil" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Hata: Döngüsel BaÄŸlantı BaÄŸlantısı" @@ -13173,9 +13526,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Pick New Name and Location For:" #~ msgstr "Åžunun için yeni ad ile konum seçin:" -#~ msgid "No files selected!" -#~ msgstr "Hiçbir Dizeç Seçilmedi!" - #~ msgid "Info" #~ msgstr "Bilgi" @@ -13576,12 +13926,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Scaling to %s%%." #~ msgstr "Åžuna %s%% Ölçeklendiriliyor." -#~ msgid "Up" -#~ msgstr "Yukarı" - -#~ msgid "Down" -#~ msgstr "AÅŸağı" - #~ msgid "Bucket" #~ msgstr "Kova" @@ -13866,9 +14210,6 @@ msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez." #~ msgid "Group" #~ msgstr "Öbek" -#~ msgid "Samples" -#~ msgstr "Örnekler" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "Örnek Dönüşüm Biçimi: (.wav dizeçleri):" diff --git a/editor/translations/uk.po b/editor/translations/uk.po index bee04e31b7..8b99271a09 100644 --- a/editor/translations/uk.po +++ b/editor/translations/uk.po @@ -11,12 +11,13 @@ # ОлекÑандр Пилипчук <pilipchukap@rambler.ru>, 2018. # Kirill Omelchenko <kirill.omelchenko@gmail.com>, 2018. # ÐлекÑандр <ol-vin@mail.ru>, 2018. +# Богдан Матвіїв <bomtvv@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Ukrainian (Godot Engine)\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-08-04 14:22+0000\n" -"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"PO-Revision-Date: 2019-10-11 15:07+0000\n" +"Last-Translator: Богдан Матвіїв <bomtvv@gmail.com>\n" "Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/" "godot/uk/>\n" "Language: uk\n" @@ -25,13 +26,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 3.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." msgstr "" -"Ðекоректний аргумент типу у convert(), Ñлід викориÑтовувати Ñталі TYPE_*." +"Ðекоректний тип аргументу Ð´Ð»Ñ convert(), Ñлід викориÑтовувати конÑтанту " +"TYPE_*." #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp @@ -68,6 +70,34 @@ msgstr "Ðекоректні аргументи Ð´Ð»Ñ Ð¿Ð¾Ð±ÑƒÐ´Ð¾Ð²Ð¸ «%s»" msgid "On call to '%s':" msgstr "При виклику «%s»:" +#: core/ustring.cpp +msgid "B" +msgstr "Б" + +#: core/ustring.cpp +msgid "KiB" +msgstr "КіБ" + +#: core/ustring.cpp +msgid "MiB" +msgstr "МіБ" + +#: core/ustring.cpp +msgid "GiB" +msgstr "ГіБ" + +#: core/ustring.cpp +msgid "TiB" +msgstr "ТіБ" + +#: core/ustring.cpp +msgid "PiB" +msgstr "ПіБ" + +#: core/ustring.cpp +msgid "EiB" +msgstr "ЕіБ" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Вивільнити" @@ -332,6 +362,7 @@ msgstr "Створити %d нові доріжки Ñ– вÑтавити ключ #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Створити" @@ -475,14 +506,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "ПопередженнÑ: Редагуємо імпортовану анімацію" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Виділити вÑе" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "СкаÑувати позначеннÑ" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Виберіть вузол AnimationPlayer Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ– Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ð¹." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -615,7 +641,8 @@ msgid "Scale Ratio:" msgstr "Ð¡Ð¿Ñ–Ð²Ð²Ñ–Ð´Ð½Ð¾ÑˆÐµÐ½Ð½Ñ Ð¼Ð°Ñштабу:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Виберіть доріжки Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -627,6 +654,11 @@ msgstr "Виберіть доріжки Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ:" msgid "Copy" msgstr "Копіювати" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "СкаÑувати позначеннÑ" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Додати кліп звукової доріжки" @@ -664,14 +696,12 @@ msgid "Replaced %d occurrence(s)." msgstr "Замінено %d випадок(-ів)." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "ВиÑвлено %d відповідників." +msgstr "%d відповідник." #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "ВиÑвлено %d відповідників." +msgstr "%d відповідників." #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -809,7 +839,8 @@ msgstr "Ðе вдалоÑÑ Ð·'єднати Ñигнал" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -910,7 +941,8 @@ msgstr "Пошук:" msgid "Matches:" msgstr "Збіги:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -951,7 +983,7 @@ msgid "Resource" msgstr "РеÑурÑ" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "ШлÑÑ…" @@ -1125,12 +1157,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 " @@ -1138,7 +1168,7 @@ msgid "" "respective copyright statements and license terms." msgstr "" "Рушій Godot ÑпираєтьÑÑ Ð½Ð° Ñ€Ñд Ñторонніх безкоштовних Ñ– відкритих бібліотек, " -"ÑуміÑних з умовами ліцензії MIT. Ðижче наводитьÑÑ Ð²Ð¸Ñ‡ÐµÑ€Ð¿Ð½Ð¸Ð¹ ÑпиÑок вÑÑ–Ñ… " +"ÑуміÑних з умовами Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ MIT. Ðижче наведено вичерпний ÑпиÑок вÑÑ–Ñ… " "таких Ñторонніх компонентів з відповідними заÑвами авторÑьких прав Ñ– умов " "ліцензійної угоди." @@ -1155,9 +1185,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" @@ -1225,8 +1254,8 @@ msgid "Delete Bus Effect" msgstr "Вилучити ефект шини" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "Ðудіо шина, перетÑгнути, щоб змінити." +msgid "Drag & drop to rearrange." +msgstr "ПорÑдок можна змінити перетÑгуваннÑм зі ÑкиданнÑм." #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1416,7 +1445,9 @@ msgid "Add AutoLoad" msgstr "Додати автозавантаженнÑ" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "ШлÑÑ…:" @@ -1427,7 +1458,7 @@ msgstr "Ім'Ñ Ð’ÑƒÐ·Ð»Ð°:" #: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp #: editor/editor_profiler.cpp editor/settings_config_dialog.cpp msgid "Name" -msgstr "Ім'Ñ" +msgstr "Ðазва" #: editor/editor_autoload_settings.cpp msgid "Singleton" @@ -1470,7 +1501,7 @@ msgstr "Створити Теку" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Ім'Ñ:" @@ -1646,6 +1677,7 @@ msgstr "Зробити поточним" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Ðовий" @@ -1716,6 +1748,7 @@ msgid "New Folder..." msgstr "Створити теку..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Оновити" @@ -1865,6 +1898,7 @@ msgid "Class:" msgstr "КлаÑ:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "УÑпадковує:" @@ -1873,46 +1907,26 @@ msgid "Inherited by:" msgstr "УÑпадковано:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "СтиÑлий опиÑ:" +msgid "Brief Description" +msgstr "СтиÑлий опиÑ" #: editor/editor_help.cpp msgid "Properties" msgstr "ВлаÑтивоÑті" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "ВлаÑтивоÑті:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Методи" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Методи:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "ВлаÑтивоÑті теми" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "ВлаÑтивоÑті теми:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "Сигнали:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "Перелічуваний" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "Перелічуваний:" - -#: editor/editor_help.cpp msgid "enum " msgstr "перелічуваний " @@ -1921,20 +1935,12 @@ msgid "Constants" msgstr "КонÑтанти" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "КонÑтанти:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "Підручники в інтернеті:" +msgid "Online Tutorials" +msgstr "Підручники в інтернеті" #: editor/editor_help.cpp msgid "" @@ -1951,10 +1957,6 @@ msgid "Property Descriptions" msgstr "ОпиÑи влаÑтивоÑтей" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "ОпиÑи влаÑтивоÑтей:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1967,10 +1969,6 @@ msgid "Method Descriptions" msgstr "ОпиÑи методів" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "ОпиÑи методів:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2039,8 +2037,8 @@ msgstr "Вивід:" msgid "Copy Selection" msgstr "Копіювати позначене" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2053,9 +2051,51 @@ msgstr "ОчиÑтити" msgid "Clear Output" msgstr "ОчиÑтити вивід" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Зупинити" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Початок" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/Ñ" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "ОтриманнÑ" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "ВивантаженнÑ" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Вузол" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "Вхідний RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "Вхідний RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "Вихідний RPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "Вихідний RSET" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" -msgstr "" +msgstr "Ðове вікно" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2382,9 +2422,8 @@ msgid "Close Scene" msgstr "Закрити Ñцену" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "Закрити Ñцену" +msgstr "Повторно відкрити закриту Ñцену" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2504,9 +2543,8 @@ msgid "Close Tab" msgstr "Закрити вкладку" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "Закрити вкладку" +msgstr "СкаÑувати Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²ÐºÐ»Ð°Ð´ÐºÐ¸" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2639,19 +2677,28 @@ msgid "Project" msgstr "Проєкт" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "Параметри проєкту" +msgstr "Параметри проєкту…" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "Ð’Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" #: editor/editor_node.cpp -#, fuzzy msgid "Export..." -msgstr "ЕкÑпортуваннÑ" +msgstr "ЕкÑпортувати…" #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "Ð’Ñтановити шаблон Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Android" +msgstr "Ð’Ñтановити шаблон Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Android…" #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2662,9 +2709,8 @@ msgid "Tools" msgstr "ІнÑтрументи" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "ОглÑд підключених реÑурÑів" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ñиротілими реÑурÑами…" #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2767,9 +2813,8 @@ msgid "Editor" msgstr "Редактор" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "Параметри редактора" +msgstr "Параметри редактора…" #: editor/editor_node.cpp msgid "Editor Layout" @@ -2804,14 +2849,12 @@ msgid "Open Editor Settings Folder" msgstr "Відкрити теку параметрів редактора" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñми редактора" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑ‚Ñми редактора…" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпорту" +msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпортуваннÑ…" #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2867,10 +2910,6 @@ msgstr "Пауза Ñцени" msgid "Stop the scene." msgstr "Зупинити Ñцену." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Зупинити" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Відтворити поточну відредаговану Ñцену." @@ -2921,14 +2960,10 @@ msgid "Inspector" msgstr "ІнÑпектор" #: editor/editor_node.cpp -msgid "Node" -msgstr "Вузол" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Розгорнути нижню панель" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Результат" @@ -2948,22 +2983,32 @@ msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"У результаті Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— дії буде вÑтановлено проєкт Android Ð´Ð»Ñ " -"нетипового збираннÑ.\n" -"Зауважте, що Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб ним можна було ÑкориÑтатиÑÑ, його Ñлід увімкнути " -"екÑпортуваннÑм набору правил." +"Це налаштує ваш проєкт на викориÑÑ‚Ð°Ð½Ð½Ñ Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… збірок Android шлÑхом " +"вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° джерела до «res://android/build».\n" +"Далі, ви можете внеÑти зміни Ñ– зібрати влаÑний нетиповий APK при " +"екÑпортуванні (додаючи модулі, змінюючи AndroidManifest.xml тощо).\n" +"Зауважте, що з метою ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… збірок, заміÑть викориÑÑ‚Ð°Ð½Ð½Ñ " +"попередньо зібраних APK, Ñлід позначити пункт «СкориÑтатиÑÑ Ð½ÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð¾ÑŽ " +"збіркою» у шаблоні екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Android." #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" "Шаблон Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Android вже вÑтановлено. Його не буде перезапиÑано.\n" -"Вилучіть каталог «build» вручну, перш ніж намагатиÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ цю дію." +"Вилучіть каталог «res://android/build» вручну, перш ніж намагатиÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ñ‚Ð¸ " +"цю дію." #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -3025,6 +3070,10 @@ msgstr "Відкрити наÑтупний редактор" msgid "Open the previous Editor" msgstr "Відкрити попередній редактор" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "Підлеглих реÑурÑів не знайдено." + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду Ñітки" @@ -3034,6 +3083,10 @@ msgid "Thumbnail..." msgstr "Мініатюра..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "ОÑновний Ñкрипт:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ°" @@ -3062,11 +3115,6 @@ msgstr "СтатуÑ:" msgid "Edit:" msgstr "Редагувати:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Початок" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Вимірювати:" @@ -3172,6 +3220,10 @@ msgstr "Виберіть панель переглÑду" msgid "New Script" msgstr "Ðовий Ñкрипт" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "Розширити Ñкрипт" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Ðовий %s" @@ -3198,13 +3250,6 @@ msgstr "Ð’Ñтавити" msgid "Convert To %s" msgstr "Перетворити на %s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "Відкрити вікно редактора" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "Позначений вузол не Ñ” панеллю переглÑду!" @@ -3283,9 +3328,8 @@ msgid "Import From Node:" msgstr "Імпортувати з вузла:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" -msgstr "Перезавантажити" +msgstr "Отримати повторно" #: editor/export_template_manager.cpp msgid "Uninstall" @@ -3302,7 +3346,7 @@ msgstr "Завантажити" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "Ð”Ð»Ñ Ñ‚ÐµÑтових збірок не передбачено офіційних шаблонів екÑпортуваннÑ." #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3385,23 +3429,20 @@ msgid "Download Complete." msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð¾." #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ тему до файла:" +msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." msgstr "" -"Ðе вдалоÑÑ Ð²Ñтановити шаблони. Проблемні архіви із шаблонами можна знайти " -"тут: «%s»." +"Ðе вдалоÑÑ Ð²Ñтановити шаблони.\n" +"Проблемні архіви із шаблонами можна знайти тут: «%s»." #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "Помилка запиту url: " +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ за такою адреÑою:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3588,9 +3629,8 @@ msgid "Move To..." msgstr "ПереміÑтити до..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "Ðова Ñцена" +msgstr "Створити Ñцену…" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3658,9 +3698,8 @@ msgid "Overwrite" msgstr "ПерезапиÑати" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "Створити зі Ñцени" +msgstr "Створити Ñцену" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3740,21 +3779,18 @@ msgid "Invalid group name." msgstr "ÐеприпуÑтима назва групи." #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð°Ð¼Ð¸" +msgstr "ÐŸÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "Видалити компонуваннÑ" +msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð³Ñ€ÑƒÐ¿Ð¸" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" msgstr "Групи" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" msgstr "Вузли поза групою" @@ -3769,12 +3805,11 @@ msgstr "Вузли у групі" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "Порожні групи буде автоматично вилучено." #: editor/groups_editor.cpp -#, fuzzy msgid "Group Editor" -msgstr "Редактор Ñкриптів" +msgstr "Редактор груп" #: editor/groups_editor.cpp msgid "Manage Groups" @@ -3873,9 +3908,9 @@ msgstr " Файли" msgid "Import As:" msgstr "Імпортувати Ñк:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "Заздалегідь уÑтановлений..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "Ðабір" #: editor/import_dock.cpp msgid "Reimport" @@ -3982,9 +4017,8 @@ msgid "MultiNode Set" msgstr "Мультивузловий набір" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "Виберіть вузол Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñигналів та груп." +msgstr "Виберіть окремий вузол Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¹Ð¾Ð³Ð¾ Ñигналів та груп." #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -4002,7 +4036,7 @@ msgstr "Ðазва додатка:" msgid "Subfolder:" msgstr "Підтека:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Мова:" @@ -4147,6 +4181,12 @@ msgstr "Точка" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "Відкрити вікно редактора" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Відкрити вузол анімації" @@ -4320,6 +4360,7 @@ msgid "Change Animation Name:" msgstr "Змінити ім'Ñ Ð°Ð½Ñ–Ð¼Ð°Ñ†Ñ–Ñ—:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Видалити анімацію?" @@ -4495,7 +4536,6 @@ msgstr "Ðазва анімації:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Помилка!" @@ -4668,6 +4708,8 @@ msgid "Current:" msgstr "Поточний:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Додати вхід" @@ -4768,37 +4810,32 @@ msgid "Request failed, return code:" msgstr "Помилка запиту, код поверненнÑ:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." -msgstr "Запит не вдавÑÑ." +msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ запит." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ тему до файла:" +msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ відповідь Ñюди:" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸ÑуваннÑ." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "Запит не вдавÑÑ, забагато перенаправлень" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." msgstr "Циклічне переÑпрÑмуваннÑ." #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "Помилка запиту, код поверненнÑ:" +msgstr "Помилка запиту, перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° відповідь" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "ЧаÑ" +msgstr "Перевищено Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° відповідь." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4877,24 +4914,22 @@ msgid "All" msgstr "Ð’Ñе" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "Імпортувати" +msgstr "Імпортувати…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "Плаґіни (додатки)" +msgstr "Додатки…" #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "Сортувати:" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "Обернений порÑдок." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "КатегоріÑ:" @@ -4904,9 +4939,8 @@ msgid "Site:" msgstr "Сайт:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "Підтримка..." +msgstr "Підтримка" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4917,9 +4951,8 @@ msgid "Testing" msgstr "ТеÑтуваннÑ" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "Завантажити…" +msgstr "ЗавантаженнÑ…" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -5087,9 +5120,8 @@ msgid "Paste Pose" msgstr "Ð’Ñтавити позу" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "ОчиÑтити кіÑтки" +msgstr "Вилучити напрÑмні" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Create Custom Bone(s) from Node(s)" @@ -5177,21 +5209,32 @@ msgid "Pan Mode" msgstr "Режим панорамуваннÑ" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "Режим вимірюваннÑ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "Увімкнути або вимкнути прив'ÑзуваннÑ." #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "За допомогою функції прив'Ñзки" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "Параметри прив'Ñзки" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "Увімкнути або вимкнути прив'ÑзуваннÑ." + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Use Grid Snap" +msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ ґратки" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ Ñітки" +msgid "Snapping Options" +msgstr "Параметри прив'Ñзки" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5280,8 +5323,8 @@ msgid "View" msgstr "ПереглÑд" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Показати Ñітку" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5549,6 +5592,11 @@ msgstr "Перемкнути дотичну до кривої" msgid "Hold Shift to edit tangents individually" msgstr "Утримуйте Shift, щоб змінити дотичні окремо" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Клацніть правою кнопкою миші: видалити точку" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "Запекти пробу GI" @@ -5825,26 +5873,23 @@ msgstr "Ð§Ð°Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— (Ñек):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "Сторони геометричної фігури не обмежують жодної площі." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "Вузол не міÑтить геометрії (граней)." +msgstr "Ð“ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ñ–Ñ Ð½Ðµ міÑтить жодної грані." #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "«%s» не уÑпадковує влаÑтивоÑті від Spatial." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "Вузол не міÑтить геометрії." +msgstr "«%s» не міÑтить геометричної конÑтрукції." #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "Вузол не міÑтить геометрії." +msgstr "«%s» не міÑтить геометрії граней." #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -6113,7 +6158,7 @@ msgstr "ПереміÑтити точки" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Ctrl: Rotate" -msgstr "Ctrl: повернути" +msgstr "Ctrl: Повернути" #: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Shift: Move All" @@ -6189,6 +6234,10 @@ msgid "Grid" msgstr "Сітка" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Показати Ñітку" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ñітки:" @@ -6244,7 +6293,8 @@ msgstr "ЕкземплÑÑ€:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "Тип:" @@ -6282,9 +6332,8 @@ msgid "Error writing TextFile:" msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запиÑати TextFile:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "Ðеможливо знайти плитку:" +msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ цей файл:" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6307,7 +6356,6 @@ msgid "Error Importing" msgstr "Помилка імпортуваннÑ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." msgstr "Створити текÑтовий файл…" @@ -6345,6 +6393,11 @@ msgid "Find Next" msgstr "Знайти наÑтупне" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "Знайти попереднє" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" msgstr "Фільтрувати Ñкрипти" @@ -6389,9 +6442,8 @@ msgid "Open..." msgstr "Відкрити..." #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "Відкрити Ñкрипт" +msgstr "Повторно відкрити закритий Ñкрипт" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6447,14 +6499,14 @@ msgid "Toggle Scripts Panel" msgstr "Перемкнути панель Ñкриптів" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "Крок через" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "Крок в" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "Крок через" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "Пауза" @@ -6526,15 +6578,14 @@ msgid "Search Results" msgstr "Результати пошуку" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "ОчиÑтити недавні Ñцени" +msgstr "Спорожнити ÑпиÑок нещодавніх Ñкриптів" #: editor/plugins/script_text_editor.cpp msgid "Connections to method:" msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· методом:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "Джерело" @@ -6616,6 +6667,11 @@ msgstr "Точки зупину" msgid "Cut" msgstr "Вирізати" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Виділити вÑе" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "Видалити Ñ€Ñдок" @@ -6653,9 +6709,8 @@ msgid "Complete Symbol" msgstr "Завершити Ñимвол" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "Вибір маÑштабу" +msgstr "Оцінка позначеного" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6674,10 +6729,6 @@ msgid "Auto Indent" msgstr "ÐвтовідÑтуп" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "Знайти попереднє" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "Знайти у файлах…" @@ -6963,9 +7014,8 @@ msgid "Audio Listener" msgstr "ПроÑÐ»ÑƒÑ…Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÑƒÐºÑƒ" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "Увімкнути фільтруваннÑ" +msgstr "Увімкнути ефект Доплера" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -7000,6 +7050,11 @@ msgid "Freelook Speed Modifier" msgstr "Коефіцієнт швидкоÑті оглÑду" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "Коефіцієнт швидкоÑті оглÑду" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7022,7 +7077,7 @@ msgstr "Приліпити вузли до підлоги" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ твердої оÑнови Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾Ð³Ð¾ фрагмента." #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7035,9 +7090,12 @@ msgstr "" "Alt+Права кнопка: Вибір у ÑпиÑку за глибиною" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "Режим локального проÑтору (%s)" +msgstr "ВикориÑтати локальний проÑтір" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "За допомогою функції прив'Ñзки" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7134,9 +7192,8 @@ msgstr "ПереглÑд ґратки" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "Параметри" +msgstr "Параметри…" #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7269,6 +7326,11 @@ msgid "Simplification: " msgstr "СпрощеннÑ: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі): " @@ -7317,6 +7379,10 @@ msgid "(empty)" msgstr "(порожньо)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "ПереÑунути кадр" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "Ðнімації:" @@ -7423,7 +7489,7 @@ msgstr "Крок:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "Sep.:" -msgstr "Інт.:" +msgstr "Роздільник:" #: editor/plugins/texture_region_editor_plugin.cpp msgid "TextureRegion" @@ -7514,14 +7580,12 @@ msgid "Submenu" msgstr "Підменю" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "Елемент 1" +msgstr "Піделемент 1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "Елемент 2" +msgstr "Піделемент 2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7633,17 +7697,24 @@ msgid "Enable Priority" msgstr "Увімкнути пріоритетніÑть" #: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "Фільтрувати плитки" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "Додати реÑÑƒÑ€Ñ TileSet до цієї TileMap Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¹Ð¾Ð³Ð¾ плиток." + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "Ðамалювати плитку" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+права кнопка: малювати лінію\n" -"Shift+Ctrl+права кнопка: малювати прÑмокутник" +"Shift+ліва кнопка: малювати лінію\n" +"Shift+Ctrl+ліва кнопка: малювати прÑмокутник" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" @@ -7768,6 +7839,13 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "Показати назви плиток (Ñкщо затиÑнути клавішу Alt)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" +"Додайте або виберіть текÑтуру на лівій панелі Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð»Ð¸Ñ‚Ð¾Ðº, " +"пов'Ñзаних із нею." + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "" "Вилучити позначену текÑтуру? ÐаÑлідком буде Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÑƒÑÑ–Ñ… плиток, у Ñких Ñ—Ñ— " @@ -7940,16 +8018,107 @@ msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— влаÑтивоÑті не можна зміРmsgid "TileSet" msgstr "Ðабір плиток" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "Ðемає доÑтупних доданків ÑиÑтем ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми." + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "Помилка" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "Ðе було вказано Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ внеÑку" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "Ðе додано жодних файлів Ð´Ð»Ñ Ð²Ð½ÐµÑку" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "ВнеÑок" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "Додаток ÑиÑтеми ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми не ініціалізовано" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "СиÑтема ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "Ініціалізувати" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "ОблаÑть внеÑку" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "ВиÑвити зміни" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "Зміни" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "Змінено" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "Перейменовано" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "Вилучено" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "Зміна типу" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "Вибрано Ð´Ð»Ñ Ð²Ð½ÐµÑку" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "ВнеÑти вÑе" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "Додати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ внеÑку" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "ВнеÑти зміни" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "СтатуÑ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" +"ПереглÑнути відмінноÑті у файлах, перш ніж внеÑти Ñ—Ñ… до найÑвіжішої верÑÑ–Ñ—" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "Ðемає активних відмінноÑтей між файлами" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "ВиÑвити зміни у відмінноÑÑ‚ÑÑ… між файлами" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "(лише GLES3)" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" -msgstr "Додати вхід +" - -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +#, fuzzy +msgid "Add Output" msgstr "Додати вихід +" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7965,6 +8134,10 @@ msgid "Boolean" msgstr "Булеве" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "Додати вхідний порт" @@ -8046,9 +8219,8 @@ msgid "Light" msgstr "Світло" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "Створити вузол шейдера" +msgstr "Показати отриманий код шейдера." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Create Shader Node" @@ -8177,6 +8349,12 @@ msgstr "" "Повертає пов'Ñзаний вектор за заданим булевим значеннÑм «true» або «false»." #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" +"Повертає пов'Ñзаний вектор за заданим булевим значеннÑм «true» або «false»." + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "Повертає булевий результат порівнÑÐ½Ð½Ñ Ð¼Ñ–Ð¶ двома параметрами." @@ -8417,7 +8595,6 @@ msgid "Returns the square root of the parameter." msgstr "Повертає квадратний корінь з параметра." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8432,7 +8609,6 @@ msgstr "" "у проміжку від 0.0 до 1.0, Ñку визначено на оÑнові поліномів Ерміта." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8609,9 +8785,9 @@ msgid "Linear interpolation between two vectors." msgstr "Лінійна інтерполÑÑ†Ñ–Ñ Ð²Ñ–Ð´ двох векторних значень." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "Лінійна інтерполÑÑ†Ñ–Ñ Ð²Ñ–Ð´ двох векторних значень." +msgstr "" +"Лінійна інтерполÑÑ†Ñ–Ñ Ð²Ñ–Ð´ двох векторних значень з викориÑтаннÑм ÑкалÑра." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8638,7 +8814,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "Повертає вектор, Ñкий вказує напрÑмок рефракції." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8653,7 +8828,6 @@ msgstr "" "у проміжку від 0.0 до 1.0, Ñку визначено на оÑнові поліномів Ерміта." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8668,7 +8842,6 @@ msgstr "" "у проміжку від 0.0 до 1.0, Ñку визначено на оÑнові поліномів Ерміта." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8679,7 +8852,6 @@ msgstr "" "Повертає 0.0, Ñкщо «x» Ñ” меншим за «межа». Якщо це не так, повертає 1.0." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8742,6 +8914,10 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"Ðетиповий вираз мовою шейдерів Godot, Ñкий буде додано над отриманим " +"шейдером. Ви можете розташовувати різні Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¹ вÑередині коду Ñ– " +"викликати його пізніше у виразах. Ви також можете оголошувати змінні, " +"уніформи та Ñталі." #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." @@ -8894,15 +9070,19 @@ msgid "Resources to export:" msgstr "ЕкÑпортовані реÑурÑи:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Фільтри екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð², Ñкі не міÑÑ‚Ñть реÑурÑів (з відокремленнÑм " "комами, приклад: *.json, *.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" "Фільтри Ð²Ð¸ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² з проєкту (з відокремленнÑм комами, приклад: *." "json, *.txt)" @@ -9134,13 +9314,12 @@ msgid "Unnamed Project" msgstr "Проєкт без назви" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "Імпортувати наÑвний проєкт" +msgstr "Ðе виÑтачає проєкту" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "Помилка: у файловій ÑиÑтемі немає проєкту." #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9239,12 +9418,11 @@ msgstr "" "ВміÑÑ‚ теки не буде змінено." #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." msgstr "" -"Вилучити %d проєктів зі ÑпиÑку?\n" +"Вилучити уÑÑ– проєкти, Ñких не знайдено, зі ÑпиÑку?\n" "ВміÑÑ‚ тек проєктів змінено не буде." #: editor/project_manager.cpp @@ -9269,9 +9447,8 @@ msgid "Project Manager" msgstr "Керівник проекту" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "Проєкт" +msgstr "Проєкти" #: editor/project_manager.cpp msgid "Scan" @@ -9502,6 +9679,10 @@ msgid "Settings saved OK." msgstr "Параметри уÑпішно збережено." #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "ПереÑунуто подію дії із Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "Перевизначено Ð´Ð»Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñті" @@ -9638,6 +9819,10 @@ msgid "Plugins" msgstr "Плаґіни (додатки)" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Заздалегідь уÑтановлений..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "Ðуль" @@ -9807,10 +9992,6 @@ msgstr "ВЕРХÐІЙ РЕГІСТР" msgid "Reset" msgstr "Скинути" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "Помилка" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "Змінити батьківÑький вузол" @@ -9868,6 +10049,10 @@ msgid "Instance Scene(s)" msgstr "Сцени екземплÑра" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "Замінити гілкою Ñцени" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "Створити екземплÑÑ€ дочірньої Ñцени" @@ -9910,8 +10095,20 @@ msgid "Make node as Root" msgstr "Зробити вузол кореневим" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Вилучити вузли?" +msgid "Delete %d nodes?" +msgstr "Вилучити %d вузлів?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "Вилучити кореневий вузол «%s»?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "Вилучити вузол «%s» Ñ– його дочірні запиÑи?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "Вилучити вузол «%s»?" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9934,12 +10131,13 @@ msgstr "" "уÑÑ–Ñ… влаÑтивоÑтей вузла." #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "Редагований дочірній елемент" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "Завантажити Ñк заповнювач" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "" +"Ð’Ð¸Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Â«editable_instance» призведе до Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ñ… значень Ð´Ð»Ñ " +"уÑÑ–Ñ… влаÑтивоÑтей вузла." #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9986,9 +10184,8 @@ msgid "Remove Node(s)" msgstr "Вилучити вузли" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "Змінити назву вихідного порту" +msgstr "Змінити тип вузлів" #: editor/scene_tree_dock.cpp msgid "" @@ -10015,6 +10212,14 @@ msgid "Clear Inheritance" msgstr "УÑунути уÑпадкуваннÑ" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "Редагований дочірній елемент" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "Завантажити Ñк заповнювач" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "Відкрити документацію" @@ -10031,10 +10236,6 @@ msgid "Change Type" msgstr "Змінити тип" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "Розширити Ñкрипт" - -#: editor/scene_tree_dock.cpp msgid "Reparent to New Node" msgstr "Змінити батьківÑький вузол на новий" @@ -10111,30 +10312,27 @@ msgid "Node configuration warning:" msgstr "ÐŸÐ¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ Ð½Ð°Ð»Ð°ÑˆÑ‚Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÑƒÐ·Ð»Ð°:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." msgstr "" -"Вузол міÑтить з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– групи.\n" +"Вузол міÑтить %s з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ– %s групи.\n" "Клацніть, щоб переглÑнути панель Ñигналів." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." msgstr "" -"Вузол міÑтить з'єднаннÑ\n" +"Вузол міÑтить %s з'єднань.\n" "Клацніть, щоб переглÑнути панель Ñигналів." #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." msgstr "" -"Вузол належить групам.\n" +"Вузол належить %s групам.\n" "Клацніть, щоб переглÑнути панель груп." #: editor/scene_tree_editor.cpp @@ -10230,9 +10428,8 @@ msgid "Error loading script from %s" msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби завантажити Ñкрипт з %s" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "ПерезапиÑати" +msgstr "ПеревизначеннÑ" #: editor/script_create_dialog.cpp msgid "N/A" @@ -10279,23 +10476,18 @@ msgid "Will load an existing script file." msgstr "Завантажити наÑвний файл Ñкрипту." #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "Мова" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "УÑпадковує" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "Ðазва клаÑу" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "Шаблон" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "Вбудований Ñкрипт" #: editor/script_create_dialog.cpp @@ -10311,26 +10503,54 @@ msgid "Bytes:" msgstr "Байтів:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека" +msgid "Warning:" +msgstr "ПопередженнÑ:" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "Виберіть один або декілька пунктів зі ÑпиÑку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду графу." +msgid "Error:" +msgstr "Помилка:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "Помилка C++" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "Помилка C++:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "Код C++" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "Код:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "Код C++:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "ТраÑÑƒÐ²Ð°Ð½Ð½Ñ Ñтека" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "Помилки" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "З'єднано дочірній процеÑ" +msgid "Child process connected." +msgstr "З'єднано дочірній процеÑ." #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "Помилка копіюваннÑ" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "ПропуÑтити точки зупину" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "ІнÑпектувати попередній екземплÑÑ€" @@ -10347,6 +10567,10 @@ msgid "Profiler" msgstr "ЗаÑіб профілюваннÑ" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "ЗаÑіб Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼ÐµÑ€ÐµÐ¶Ñ–" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "Монітор" @@ -10359,6 +10583,10 @@ msgid "Monitors" msgstr "Монітори" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "Виберіть один або декілька пунктів зі ÑпиÑку Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду графу." + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "СпиÑок викориÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐµÐ¾Ð¿Ð°Ð¼'Ñті за реÑурÑами:" @@ -10555,10 +10783,6 @@ msgid "Library" msgstr "Бібліотека" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "СтатуÑ" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "Бібліотеки: " @@ -10567,6 +10791,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "Мало бути вказано Ñ€Ñдок довжини 1 (Ñимвол)." + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Ðргумент кроку дорівнює нулеві!" @@ -10720,6 +10948,15 @@ msgstr "Параметри GridMap" msgid "Pick Distance:" msgstr "ВідÑтань вибору:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "Фільтрувати Ñітки" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" +"Додайте реÑÑƒÑ€Ñ MeshLibrary до цього GridMap, щоб ÑкориÑтатиÑÑ Ð¹Ð¾Ð³Ð¾ Ñітками." + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "Ðазвою клаÑу не може бути зарезервоване ключове Ñлово" @@ -10845,28 +11082,28 @@ msgid "Set Variable Type" msgstr "Ð’Ñтановити тип змінної" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "Ðазва не повинна збігатиÑÑ Ñ–Ð· наÑвною назвою вбудованого типу." +msgstr "ÐŸÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñвної вбудованої функції." #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "Створити прÑмокутник." +msgstr "Створити функцію." #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "Змінні:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "Створити прÑмокутник." +msgstr "Створити змінну." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "Сигнали:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "Створити новий полігон." +msgstr "Створити Ñигнал." #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10893,6 +11130,11 @@ msgid "Add Function" msgstr "Додати функцію" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Вилучити вхідний порт" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Додати змінну" @@ -10901,6 +11143,26 @@ msgid "Add Signal" msgstr "Додати Ñигнал" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Додати вхідний порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Додати вихідний порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Вилучити вхідний порт" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Вилучити вихідний порт" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "Змінити вираз" @@ -10945,10 +11207,20 @@ msgid "Add Preload Node" msgstr "Додати попередньо завантажений вузол" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "Додати вузли з дерева" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "Додати влаÑтивіÑть отримувача" @@ -10973,6 +11245,11 @@ msgid "Connect Nodes" msgstr "Приєднати вузли" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "Роз'єднати вузли графу" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "Приєднати дані вузла" @@ -11005,6 +11282,28 @@ msgid "Paste VisualScript Nodes" msgstr "Ð’Ñтавити вузли (Візуального Ñкриптингу) VisualScript" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "Ðеможливо Ñкопіювати вузол функції." + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Перейменувати функцію" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Вилучити функцію" @@ -11025,16 +11324,17 @@ msgid "Editing Signal:" msgstr "Ð ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñигналу:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "Базовий тип:" +msgid "Make Tool:" +msgstr "ІнÑтрумент збираннÑ:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "Члени:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "ДоÑтупні вузли:" +#, fuzzy +msgid "function_name" +msgstr "ФункціÑ:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11057,6 +11357,16 @@ msgid "Cut Nodes" msgstr "Вирізати вузли" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Перейменувати функцію" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Оновити" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "Редагувати член" @@ -11155,6 +11465,10 @@ msgid "The package must have at least one '.' separator." msgstr "У назві пакунка має бути принаймні один роздільник «.»." #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "Вибрати приÑтрій зі ÑпиÑку" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "У параметрах редактора не налаштовано виконуваного файла ADB." @@ -11182,10 +11496,11 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" -"Ð”Ð»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð½Ðµ вÑтановлено проєкт Android. Ð’Ñтановіть його за допомогою " -"меню редактора." +"У проєкті не вÑтановлено шаблон Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Android. Ð’Ñтановіть його за " +"допомогою меню «Проєкт»." #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11277,6 +11592,10 @@ msgid "Required icon is not specified in the preset." msgstr "У шаблоні не вказано потрібної піктограми." #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "ЗапуÑтити в браузері" @@ -11949,10 +12268,6 @@ msgstr "" "Control, щоб у неї був розмір. Крім того, можна зробити Ñ—Ñ— RenderTarget Ñ– " "пов'Ñзати Ñ—Ñ— внутрішню текÑтуру з одним із вузлів Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ." -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Вхідні дані" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "Ðекоректне джерело Ð´Ð»Ñ Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð½ÑŒÐ¾Ð³Ð¾ переглÑду." @@ -11981,6 +12296,66 @@ msgstr "Змінні величини можна пов'Ñзувати лише msgid "Constants cannot be modified." msgstr "Сталі не можна змінювати." +#~ msgid "Snap to Grid" +#~ msgstr "ÐŸÑ€Ð¸Ð»Ð¸Ð¿Ð°Ð½Ð½Ñ Ð´Ð¾ Ñітки" + +#~ msgid "Add input +" +#~ msgstr "Додати вхід +" + +#~ msgid "Language" +#~ msgstr "Мова" + +#~ msgid "Inherits" +#~ msgstr "УÑпадковує" + +#~ msgid "Base Type:" +#~ msgstr "Базовий тип:" + +#~ msgid "Available Nodes:" +#~ msgstr "ДоÑтупні вузли:" + +#~ msgid "Input" +#~ msgstr "Вхідні дані" + +#~ msgid "Properties:" +#~ msgstr "ВлаÑтивоÑті:" + +#~ msgid "Methods:" +#~ msgstr "Методи:" + +#~ msgid "Theme Properties:" +#~ msgstr "ВлаÑтивоÑті теми:" + +#~ msgid "Enumerations:" +#~ msgstr "Перелічуваний:" + +#~ msgid "Constants:" +#~ msgstr "КонÑтанти:" + +#~ msgid "Class Description:" +#~ msgstr "ÐžÐ¿Ð¸Ñ ÐºÐ»Ð°Ñу:" + +#~ msgid "Property Descriptions:" +#~ msgstr "ОпиÑи влаÑтивоÑтей:" + +#~ msgid "Method Descriptions:" +#~ msgstr "ОпиÑи методів:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "У результаті Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— дії буде вÑтановлено проєкт Android Ð´Ð»Ñ " +#~ "нетипового збираннÑ.\n" +#~ "Зауважте, що Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб ним можна було ÑкориÑтатиÑÑ, його Ñлід " +#~ "увімкнути екÑпортуваннÑм набору правил." + +#~ msgid "Reverse sorting." +#~ msgstr "Обернений порÑдок." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Вилучити вузли?" + #~ msgid "No Matches" #~ msgstr "Ðемає збігів" @@ -12337,9 +12712,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Go to parent folder" #~ msgstr "Перейти до батьківÑької теки" -#~ msgid "Select device from the list" -#~ msgstr "Вибрати приÑтрій зі ÑпиÑку" - #~ msgid "Open Scene(s)" #~ msgstr "Відкрити Ñцену(и)" @@ -12400,9 +12772,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "Додати вибрану Ñцену(и), Ñк нащадка вибраного вузла." -#~ msgid "Warnings:" -#~ msgstr "ПопередженнÑ:" - #~ msgid "Font Size:" #~ msgstr "Розмір шрифту:" @@ -12442,9 +12811,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Select a split to erase it." #~ msgstr "Виберіть поділ Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ витираннÑ." -#~ msgid "No name provided" -#~ msgstr "Ім'Ñ Ð½Ðµ вказано" - #~ msgid "Add Node.." #~ msgstr "Додати вузол…" @@ -12577,12 +12943,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Warning" #~ msgstr "ПопередженнÑ" -#~ msgid "Error:" -#~ msgstr "Помилка:" - -#~ msgid "Function:" -#~ msgstr "ФункціÑ:" - #~ msgid "Variable" #~ msgstr "Змінна" @@ -12649,9 +13009,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Connect Graph Nodes" #~ msgstr "З'єднати вузли графу" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "Роз'єднати вузли графу" - #~ msgid "Remove Shader Graph Node" #~ msgstr "Вилучити вузол графу шейдера" @@ -12661,9 +13018,6 @@ msgstr "Сталі не можна змінювати." #~ msgid "Duplicate Graph Node(s)" #~ msgstr "Дублювати вузли графу" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "Вилучити взули графу шейдера" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "Помилка: циклічне поÑиланнÑ" diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po index d02d8f8c2c..c68843bd77 100644 --- a/editor/translations/ur_PK.po +++ b/editor/translations/ur_PK.po @@ -62,6 +62,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -329,6 +357,7 @@ msgstr "" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "" @@ -454,15 +483,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "" - #: editor/animation_track_editor.cpp -#, fuzzy -msgid "Select None" -msgstr ".تمام کا انتخاب" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -595,7 +618,7 @@ msgid "Scale Ratio:" msgstr "" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +msgid "Select Tracks to Copy" msgstr "" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -607,6 +630,11 @@ msgstr "" msgid "Copy" msgstr "" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr ".تمام کا انتخاب" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "" @@ -787,7 +815,8 @@ msgstr ".تمام کا انتخاب" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -892,7 +921,8 @@ msgstr "" msgid "Matches:" msgstr "" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -929,7 +959,7 @@ msgid "Resource" msgstr "" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "" @@ -1194,7 +1224,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1388,7 +1418,9 @@ msgid "Add AutoLoad" msgstr "" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "" @@ -1442,7 +1474,7 @@ msgstr "" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "" @@ -1613,6 +1645,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1687,6 +1720,7 @@ msgid "New Folder..." msgstr "" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "" @@ -1839,6 +1873,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1847,47 +1882,28 @@ msgid "Inherited by:" msgstr "" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "" +#, fuzzy +msgid "Brief Description" +msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp msgid "Methods" msgstr "" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Theme Properties" msgstr ".تمام کا انتخاب" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1896,21 +1912,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp -#, fuzzy -msgid "Class Description:" -msgstr "سب سکریپشن بنائیں" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "" #: editor/editor_help.cpp @@ -1926,11 +1933,6 @@ msgid "Property Descriptions" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "سب سکریپشن بنائیں" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1942,11 +1944,6 @@ msgid "Method Descriptions" msgstr "سب سکریپشن بنائیں" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "سب سکریپشن بنائیں" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2014,8 +2011,8 @@ msgstr "" msgid "Copy Selection" msgstr ".تمام کا انتخاب" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2029,6 +2026,48 @@ msgstr "" msgid "Clear Output" msgstr "سب سکریپشن بنائیں" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2572,6 +2611,18 @@ msgstr "" msgid "Project Settings..." msgstr "" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2773,10 +2824,6 @@ msgstr "" msgid "Stop the scene." msgstr "" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "" @@ -2827,14 +2874,10 @@ msgid "Inspector" msgstr "" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -2853,15 +2896,21 @@ msgstr ".تمام کا انتخاب" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2925,6 +2974,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2934,6 +2987,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "سب سکریپشن بنائیں" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -2962,11 +3020,6 @@ msgstr "" msgid "Edit:" msgstr "" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3065,6 +3118,11 @@ msgstr "" msgid "New Script" msgstr "سب سکریپشن بنائیں" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "سب سکریپشن بنائیں" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3091,14 +3149,6 @@ msgstr "" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "سب سکریپشن بنائیں" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3759,8 +3809,8 @@ msgstr "" msgid "Import As:" msgstr "" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +msgid "Preset" msgstr "" #: editor/import_dock.cpp @@ -3886,7 +3936,7 @@ msgstr "" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "" @@ -4029,6 +4079,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "" @@ -4200,6 +4257,7 @@ msgid "Change Animation Name:" msgstr "" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "" @@ -4376,7 +4434,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "" @@ -4548,6 +4605,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -4752,6 +4811,10 @@ msgid "All" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr ".سپورٹ" @@ -4765,10 +4828,6 @@ msgid "Sort:" msgstr "" #: editor/plugins/asset_library_editor_plugin.cpp -msgid "Reverse sorting." -msgstr "" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "" @@ -5049,20 +5108,28 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "ایکشن منتقل کریں" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" +msgstr "" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5153,8 +5220,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5419,6 +5485,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6062,6 +6132,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6117,7 +6191,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6218,6 +6293,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "سب سکریپشن بنائیں" @@ -6322,11 +6402,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6408,7 +6488,7 @@ msgstr "سب سکریپشن بنائیں" msgid "Connections to method:" msgstr "" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6491,6 +6571,11 @@ msgstr ".تمام کا انتخاب" msgid "Cut" msgstr "" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6549,10 +6634,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "" @@ -6878,6 +6959,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6911,6 +6996,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7144,6 +7233,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7193,6 +7286,11 @@ msgid "(empty)" msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy +msgid "Move Frame" +msgstr "ایکشن منتقل کریں" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "" @@ -7514,6 +7612,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7654,6 +7761,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr ".تمام کا انتخاب" @@ -7823,19 +7935,115 @@ msgstr "" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add input +" +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "کمیونٹی" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr ".تمام کا انتخاب" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" +msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Add Output" +msgstr "سب سکریپشن بنائیں" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -7848,6 +8056,11 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +#, fuzzy +msgid "Sampler" +msgstr "نمونے" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" msgstr "" @@ -8063,6 +8276,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8710,12 +8928,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9266,6 +9486,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr ".تمام کا انتخاب" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9403,6 +9628,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9566,10 +9795,6 @@ msgstr "" msgid "Reset" msgstr "" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9625,6 +9850,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9666,10 +9895,24 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr ".اینیمیشن Ú©ÛŒ کیز Ú©Ùˆ ڈیلیٹ کرو" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -9688,11 +9931,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9769,6 +10010,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9786,11 +10035,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "سب سکریپشن بنائیں" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "سب سکریپشن بنائیں" @@ -10025,25 +10269,18 @@ msgid "Will load an existing script file." msgstr "سب سکریپشن بنائیں" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +msgid "Class Name:" msgstr "" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr ".تمام کا انتخاب" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "سب سکریپشن بنائیں" #: editor/script_create_dialog.cpp #, fuzzy @@ -10060,11 +10297,35 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10072,7 +10333,7 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" +msgid "Child process connected." msgstr "" #: editor/script_editor_debugger.cpp @@ -10080,6 +10341,11 @@ msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr ".تمام کا انتخاب" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10096,6 +10362,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr ".تمام کا انتخاب" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10108,6 +10379,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10308,10 +10583,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10320,6 +10591,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "سٹیپ Ú©Û’ ارگمنٹس Ø³ÙØ± Ûیں!" @@ -10477,6 +10752,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "سب سکریپشن بنائیں" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10614,6 +10898,10 @@ msgid "Create a new variable." msgstr "سب سکریپشن بنائیں" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "سب سکریپشن بنائیں" @@ -10644,6 +10932,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -10652,6 +10945,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10692,10 +11005,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10721,6 +11044,11 @@ msgid "Connect Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "سب سکریپشن بنائیں" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "" @@ -10753,6 +11081,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Remove Function" msgstr ".تمام کا انتخاب" @@ -10775,7 +11124,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10783,7 +11132,7 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" +msgid "function_name" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10807,6 +11156,15 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr ".تمام کا انتخاب" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Refresh Graph" +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10902,6 +11260,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -10923,7 +11285,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11000,6 +11363,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -11538,10 +11905,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "" @@ -11571,6 +11934,18 @@ msgid "Constants cannot be modified." msgstr "" #, fuzzy +#~ msgid "Class Description:" +#~ msgstr "سب سکریپشن بنائیں" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "سب سکریپشن بنائیں" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "سب سکریپشن بنائیں" + +#, fuzzy #~ msgid "Tool Select" #~ msgstr ".تمام کا انتخاب" @@ -11593,6 +11968,3 @@ msgstr "" #, fuzzy #~ msgid "Can't write file." #~ msgstr "سب سکریپشن بنائیں" - -#~ msgid "Samples" -#~ msgstr "نمونے" diff --git a/editor/translations/vi.po b/editor/translations/vi.po index 2cad1f6396..f3570ad0ff 100644 --- a/editor/translations/vi.po +++ b/editor/translations/vi.po @@ -10,12 +10,14 @@ # 38569459 <xxx38569459@gmail.com>, 2018. # TyTYct Hihi <tytyct@gmail.com>, 2019. # Steve Dang <itsnguu@outlook.com>, 2019. +# Peter Anh <peteranh3105@gmail.com>, 2019. +# DÅ©ng Äinh <dqdthanhthanh@gmail.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Godot Engine editor\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2019-07-29 19:20+0000\n" -"Last-Translator: Steve Dang <itsnguu@outlook.com>\n" +"PO-Revision-Date: 2019-10-04 03:15+0000\n" +"Last-Translator: DÅ©ng Äinh <dqdthanhthanh@gmail.com>\n" "Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/" "godot/vi/>\n" "Language: vi\n" @@ -23,7 +25,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.8-dev\n" +"X-Generator: Weblate 3.9-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp @@ -34,7 +36,7 @@ msgstr "Hà m convert() có đối số không hợp lệ, sá» dụng các hằn #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "" +msgstr "Số byte không đủ để giải mã, hoặc cấu trúc không chÃnh xác." #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" @@ -46,7 +48,7 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "" +msgstr "Toán hạng không hợp lệ cho toán tá» %s, %s và %s." #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" @@ -58,12 +60,40 @@ msgstr "" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "" +msgstr "Äối số không hợp lệ để dá»±ng '%s'" #: core/math/expression.cpp msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "Miá»…n phÃ" @@ -338,6 +368,7 @@ msgstr "Tạo %d track má»›i và chèn key?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "Tạo" @@ -468,14 +499,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "Cảnh bảo: Chỉnh sá»a hoạt ảnh đã nháºp" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "Chá»n Toà n Bá»™" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "Chá»n Không có" +#, fuzzy +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "Chá»n má»™t AnimationPlayer từ Scene Tree để chỉnh sá»a animation." #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -607,7 +634,8 @@ msgid "Scale Ratio:" msgstr "Tỉ lệ Scale:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "Chá»n các Track để sao chép:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -619,6 +647,11 @@ msgstr "Chá»n các Track để sao chép:" msgid "Copy" msgstr "Sao chép" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "Chá»n Không có" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "Thêm Track Âm thanh" @@ -800,7 +833,8 @@ msgstr "Không thể kết nối tÃn hiệu" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -850,7 +884,7 @@ msgstr "Bạn muốn xoá tất cả kết nối từ tÃn hiệu \"%s\"?" #: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp msgid "Signals" -msgstr "TÃn hiệu" +msgstr "TÃn hiệu (Signal)" #: editor/connections_dialog.cpp msgid "Are you sure you want to remove all connections from this signal?" @@ -901,7 +935,8 @@ msgstr "Tìm kiếm:" msgid "Matches:" msgstr "Phù hợp:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -943,7 +978,7 @@ msgid "Resource" msgstr "Tà i nguyên" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "ÄÆ°á»ng dẫn" @@ -1214,7 +1249,7 @@ msgid "Delete Bus Effect" msgstr "" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1406,7 +1441,9 @@ msgid "Add AutoLoad" msgstr "Thêm AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "ÄÆ°á»ng dẫn:" @@ -1460,7 +1497,7 @@ msgstr "Tạo thư mục" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "Tên:" @@ -1628,6 +1665,7 @@ msgstr "Äặt là m hiện tại" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "Má»›i" @@ -1699,6 +1737,7 @@ msgid "New Folder..." msgstr "Thư mục má»›i ..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "Là m má»›i" @@ -1850,6 +1889,7 @@ msgid "Class:" msgstr "Lá»›p:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "Thừa kế:" @@ -1858,7 +1898,8 @@ msgid "Inherited by:" msgstr "ÄÆ°á»£c thừa kế bởi:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "Mô tả ngắn gá»n:" #: editor/editor_help.cpp @@ -1866,38 +1907,18 @@ msgid "Properties" msgstr "Thuá»™c tÃnh" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "Thuá»™c tÃnh:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "Hà m" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "Hà m:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "TÃn hiệu:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -1906,20 +1927,12 @@ msgid "Constants" msgstr "" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp msgid "Class Description" -msgstr "Mô tả lá»›p:" +msgstr "Mô tả lá»›p" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "Mô tả:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "Hướng dẫn trá»±c tuyến:" #: editor/editor_help.cpp @@ -1935,11 +1948,6 @@ msgid "Property Descriptions" msgstr "Mô tả ngắn gá»n:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Mô tả ngắn gá»n:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1950,10 +1958,6 @@ msgid "Method Descriptions" msgstr "Mô tả hà m" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "Mô tả hà m:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2020,8 +2024,8 @@ msgstr "Äầu ra:" msgid "Copy Selection" msgstr "Sao chép lá»±a chá»n" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2034,6 +2038,49 @@ msgstr "Xoá" msgid "Clear Output" msgstr "Xoá đầu ra" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "Dừng" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "Bắt đầu" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "Tải" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "Nút" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2608,6 +2655,19 @@ msgstr "Dá»± án" msgid "Project Settings..." msgstr "List Project" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "Phiên bản:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2712,7 +2772,7 @@ msgstr "" #: editor/editor_node.cpp editor/script_create_dialog.cpp msgid "Editor" -msgstr "Trình biên táºp" +msgstr "Editor (trình biên táºp)" #: editor/editor_node.cpp #, fuzzy @@ -2817,10 +2877,6 @@ msgstr "Tạm dừng Cảnh" msgid "Stop the scene." msgstr "Dừng cảnh." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "Dừng" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "Chạy cảnh đã chỉnh sá»a." @@ -2873,14 +2929,10 @@ msgid "Inspector" msgstr "Quản lý đối tượng" #: editor/editor_node.cpp -msgid "Node" -msgstr "Nút" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "Mở rá»™ng bảng Ä‘iá»u khiển phÃa dưới" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "Äầu ra" @@ -2898,15 +2950,21 @@ msgstr "Quản lý Mẫu" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -2969,6 +3027,10 @@ msgstr "" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -2978,6 +3040,11 @@ msgid "Thumbnail..." msgstr "" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "Tạo Script" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "" @@ -3006,11 +3073,6 @@ msgstr "Trạng thái:" msgid "Edit:" msgstr "Sá»a:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "Bắt đầu" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "Äo đạc:" @@ -3109,6 +3171,11 @@ msgstr "" msgid "New Script" msgstr "Mã lệnh má»›i" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "Tạo Script" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "Má»›i %s" @@ -3135,13 +3202,6 @@ msgstr "Dán" msgid "Convert To %s" msgstr "" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -3681,7 +3741,7 @@ msgstr "Xoá bố cục" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "Nhóm" +msgstr "Nhóm (Groups)" #: editor/groups_editor.cpp #, fuzzy @@ -3803,8 +3863,9 @@ msgstr " Tệp tin" msgid "Import As:" msgstr "Nháºp và o vá»›i:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" msgstr "Cà i sẵn ..." #: editor/import_dock.cpp @@ -3930,7 +3991,7 @@ msgstr "" msgid "Subfolder:" msgstr "Thư mục phụ:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "Ngôn ngữ:" @@ -4070,6 +4131,12 @@ msgstr "Äiểm" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "Mở nút Hoạt ảnh" @@ -4242,6 +4309,7 @@ msgid "Change Animation Name:" msgstr "Äổi tên Hoạt ảnh:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "Xoá Hoạt ảnh?" @@ -4417,7 +4485,6 @@ msgstr "Tên Hoạt ảnh:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "Lá»—i!" @@ -4590,6 +4657,8 @@ msgid "Current:" msgstr "Hiện tại:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "Thêm Input" @@ -4801,6 +4870,10 @@ msgid "All" msgstr "Tất cả" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "Nháºp và o" @@ -4814,11 +4887,6 @@ msgid "Sort:" msgstr "Sắp xếp:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "Äang yêu cầu..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "Danh mục:" @@ -5094,21 +5162,31 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "Chế độ Tỉ lệ" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "Sá» dụng Snap" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" +msgid "Toggle grid snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" -msgstr "Snap dạng lưới" +#, fuzzy +msgid "Use Grid Snap" +msgstr "Sá» dụng Snap" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5197,8 +5275,8 @@ msgid "View" msgstr "Hiện thị" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "Hiện lưới" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5463,6 +5541,11 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "Nhấp chuá»™t phải: Xóa Point" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6103,6 +6186,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "Hiện lưới" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6158,7 +6245,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6266,6 +6354,11 @@ msgid "Find Next" msgstr "Tìm tiếp theo" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "Lá»c các thuá»™c tÃnh" @@ -6372,11 +6465,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6459,7 +6552,7 @@ msgstr "Dá»n các cảnh gần đây" msgid "Connections to method:" msgstr "Kết nối đến Node:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" msgstr "" @@ -6544,6 +6637,11 @@ msgstr "Tạo các Ä‘iểm." msgid "Cut" msgstr "Cắt" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "Chá»n Toà n Bá»™" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "" @@ -6602,10 +6700,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "Tìm..." @@ -6936,6 +7030,10 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Freelook Slow Modifier" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6969,6 +7067,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "Sá» dụng Snap" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7202,6 +7304,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7252,6 +7358,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "Di chuyển Nút" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "Các Công cụ Animation" @@ -7579,6 +7690,15 @@ msgid "Enable Priority" msgstr "" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "Lá»c tệp tin ..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -7721,6 +7841,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "Xóa Texture hiện tại từ TileSet" @@ -7891,18 +8016,115 @@ msgstr "" msgid "TileSet" msgstr "Xuất Tile Set" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "Thêm Input" +msgid "Commit" +msgstr "Cá»™ng đồng" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "Tạo nodes má»›i." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "Äổi" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "Äổi tên" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "Xóa" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "Äổi" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "Xoá lá»±a chá»n" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "Chá»n Toà n Bá»™" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "Äổi" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "Thêm Input" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -7919,6 +8141,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "Thêm Input" @@ -8143,6 +8369,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -8793,12 +9024,14 @@ msgstr "" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9293,7 +9526,7 @@ msgstr "" #: editor/project_settings_editor.cpp msgid "Button" -msgstr "" +msgstr "Button (nút, phÃm)" #: editor/project_settings_editor.cpp msgid "Left Button." @@ -9354,6 +9587,10 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9492,6 +9729,10 @@ msgid "Plugins" msgstr "" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "Cà i sẵn ..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9660,10 +9901,6 @@ msgstr "" msgid "Reset" msgstr "Äặt lại phóng" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -9719,6 +9956,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -9759,8 +10000,22 @@ msgid "Make node as Root" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "Xóa Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "Xóa Node(s)" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "" + +#: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "Xóa Node(s)" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9781,11 +10036,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -9861,6 +10114,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" msgstr "" @@ -9879,11 +10140,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "Tạo Script" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "Tạo các nút má»›i." @@ -10124,24 +10380,19 @@ msgid "Will load an existing script file." msgstr "" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Lá»›p:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "Khung project" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "Tạo Script" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10156,11 +10407,41 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +#, fuzzy +msgid "Warning:" +msgstr "Cảnh báo" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Error:" +msgstr "Lá»—i!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "Lá»—i!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "Lá»—i!" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "Sao chép Tà i nguyên" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "Quét nguồn" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10168,14 +10449,20 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "Các Nút đã ngắt Kết nối" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "Tạo các Ä‘iểm." + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10192,6 +10479,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "Xuất hồ sÆ¡" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10204,6 +10496,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10402,10 +10698,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10414,6 +10706,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10569,6 +10865,15 @@ msgstr "" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "Lá»c các nút" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -10706,6 +11011,10 @@ msgid "Create a new variable." msgstr "Tạo nodes má»›i." #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "TÃn hiệu:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "Tạo" @@ -10735,6 +11044,11 @@ msgid "Add Function" msgstr "Thêm Hà m" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "Xoá Function" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "Thêm Biến" @@ -10743,6 +11057,26 @@ msgid "Add Signal" msgstr "Thêm TÃn hiệu" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "Thêm Input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "Thêm Input" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "Xoá Function" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "Xóa Template" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -10783,10 +11117,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -10812,6 +11156,11 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "Äứt kết nối" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "Kết nối đến Node:" @@ -10845,6 +11194,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "Äổi tên Hà m" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "Xoá Function" @@ -10865,7 +11235,7 @@ msgid "Editing Signal:" msgstr "Chỉnh sá»a Signal:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -10873,8 +11243,9 @@ msgid "Members:" msgstr "Những Thà nh viên:" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "Nodes khả dụng:" +#, fuzzy +msgid "function_name" +msgstr "Hà m:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -10897,6 +11268,16 @@ msgid "Cut Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "Äổi tên Hà m" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "Là m má»›i" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "" @@ -10991,6 +11372,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11012,7 +11397,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11091,6 +11477,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "Chạy trong Trình duyệt web" @@ -11638,14 +12028,9 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "Nháºp" - #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid source for preview." -msgstr "nguồn vô hiệu cho shader." +msgstr "nguồn vô hiệu cho xem trước" #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for shader." @@ -11670,7 +12055,44 @@ msgstr "" #: servers/visual/shader_language.cpp msgid "Constants cannot be modified." -msgstr "" +msgstr "Không thể chỉnh sá»a hằng số." + +#~ msgid "Snap to Grid" +#~ msgstr "Snap dạng lưới" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "Thêm Input" + +#~ msgid "Available Nodes:" +#~ msgstr "Nodes khả dụng:" + +#~ msgid "Input" +#~ msgstr "Nháºp" + +#~ msgid "Properties:" +#~ msgstr "Thuá»™c tÃnh:" + +#~ msgid "Methods:" +#~ msgstr "Hà m:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "Mô tả:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Mô tả ngắn gá»n:" + +#~ msgid "Method Descriptions:" +#~ msgstr "Mô tả hà m:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "Äang yêu cầu..." + +#~ msgid "Delete Node(s)?" +#~ msgstr "Xóa Node(s)?" #~ msgid "No Matches" #~ msgstr "Không khá»›p" diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po index b79ebd625f..86aa897888 100644 --- a/editor/translations/zh_CN.po +++ b/editor/translations/zh_CN.po @@ -54,12 +54,16 @@ # liu lizhi <kz-xy@163.com>, 2019. # çŽ‹å¾ <jackey20000331@gmail.com>, 2019. # 巴哈姆特 <ttwings@126.com>, 2019. +# Morge Tolbert <pygyme@gmail.com>, 2019. +# idleman <1524328475@qq.com>, 2019. +# king <wangding1992@126.com>, 2019. +# silentbird <silentbird520@outlook.com>, 2019. msgid "" msgstr "" "Project-Id-Version: Chinese (Simplified) (Godot Engine)\n" "POT-Creation-Date: 2018-01-20 12:15+0200\n" -"PO-Revision-Date: 2019-08-29 13:35+0000\n" -"Last-Translator: yzt <834950797@qq.com>\n" +"PO-Revision-Date: 2019-10-22 02:53+0000\n" +"Last-Translator: idleman <1524328475@qq.com>\n" "Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/" "godot-engine/godot/zh_Hans/>\n" "Language: zh_CN\n" @@ -67,50 +71,78 @@ 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.9.1-dev\n" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Invalid type argument to convert(), use TYPE_* constants." -msgstr "convertå‡½æ•°å‚æ•°ç±»åž‹éžæ³•ï¼Œè¯·ä¼ å…¥ä»¥â€œTYPE_â€æ‰“头的常é‡ã€‚" +msgstr "convert()çš„å‚æ•°ç±»åž‹æ— 效,请使用TYPE_*常é‡ã€‚" #: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp #: modules/mono/glue/gd_glue.cpp #: modules/visual_script/visual_script_builtin_funcs.cpp msgid "Not enough bytes for decoding bytes, or invalid format." -msgstr "没有足够的å—节æ¥è§£ç æˆ–æ— æ•ˆçš„æ ¼å¼ã€‚" +msgstr "è§£ç çš„å—节ä¸è¶³ï¼Œæˆ–æ— æ•ˆçš„æ ¼å¼ã€‚" #: core/math/expression.cpp msgid "Invalid input %i (not passed) in expression" -msgstr "表达å¼ä¸æœ‰éžæ³•的输入 %i (未通过)" +msgstr "表达å¼ä¸æœ‰æ— 效输入 %i (未通过)" #: core/math/expression.cpp msgid "self can't be used because instance is null (not passed)" -msgstr "selfæ— æ³•ä½¿ç”¨å› ä¸ºå®žä¾‹ä¸ºç©º(ä¸é€šè¿‡)" +msgstr "selfæ— æ³•ä½¿ç”¨å› ä¸ºå®žä¾‹ä¸ºç©º(未通过)" #: core/math/expression.cpp msgid "Invalid operands to operator %s, %s and %s." -msgstr "æ“作符的æ“ä½œæ•°æ— æ•ˆ%s, %s and %s." +msgstr "æ“作符 %s çš„æ“作数 %s å’Œ %s æ— æ•ˆã€‚" #: core/math/expression.cpp msgid "Invalid index of type %s for base type %s" -msgstr "æ— æ•ˆç±»åž‹ç´¢å¼• %s,从基类 %s" +msgstr "类型 %s (基类 %s) çš„ç´¢å¼•æ— æ•ˆ" #: core/math/expression.cpp msgid "Invalid named index '%s' for base type %s" -msgstr "从基类 %s æ— æ•ˆçš„å称索引 '%s'" +msgstr "命å的索引 '%s' 对基类 %s æ— æ•ˆ" #: core/math/expression.cpp msgid "Invalid arguments to construct '%s'" -msgstr "æž„é€ çš„å‚æ•°æ— 效: '%s'" +msgstr "æž„é€ '%s' çš„å‚æ•°æ— 效" #: core/math/expression.cpp msgid "On call to '%s':" -msgstr "对'%s'调用 :" +msgstr "对'%s'的调用 :" + +#: core/ustring.cpp +msgid "B" +msgstr "B" + +#: core/ustring.cpp +msgid "KiB" +msgstr "KB" + +#: core/ustring.cpp +msgid "MiB" +msgstr "MB" + +#: core/ustring.cpp +msgid "GiB" +msgstr "GB" + +#: core/ustring.cpp +msgid "TiB" +msgstr "TB" + +#: core/ustring.cpp +msgid "PiB" +msgstr "PB" + +#: core/ustring.cpp +msgid "EiB" +msgstr "EB" #: editor/animation_bezier_editor.cpp msgid "Free" -msgstr "释放" +msgstr "自由" #: editor/animation_bezier_editor.cpp msgid "Balanced" @@ -154,7 +186,7 @@ msgstr "动画å¤åˆ¶å…³é”®å¸§" #: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp msgid "Anim Delete Keys" -msgstr "åˆ é™¤å…³é”®å¸§" +msgstr "åŠ¨ç”»åˆ é™¤å…³é”®å¸§" #: editor/animation_track_editor.cpp msgid "Anim Change Keyframe Time" @@ -276,7 +308,7 @@ msgstr "æ’值模å¼" #: editor/animation_track_editor.cpp msgid "Loop Wrap Mode (Interpolate end with beginning on loop)" -msgstr "循环包裹模å¼ï¼ˆæ’入开始循环结æŸï¼‰" +msgstr "æ— ç¼å¾ªçŽ¯æ¨¡å¼ï¼ˆä½¿ç”¨å¾ªçޝ开始æ’值循环结æŸï¼‰" #: editor/animation_track_editor.cpp msgid "Remove this track." @@ -372,6 +404,7 @@ msgstr "创建%d个新轨é“å¹¶æ’入关键帧?" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "创建" @@ -405,7 +438,7 @@ msgstr "釿–°æŽ’列轨é“" #: editor/animation_track_editor.cpp msgid "Transform tracks only apply to Spatial-based nodes." -msgstr "å˜æ¢è½¨è¿¹ä»…适用于基于空间的节点。" +msgstr "å˜æ¢è½¨è¿¹ä»…应用基于Spatial节点的节点。" #: editor/animation_track_editor.cpp msgid "" @@ -425,7 +458,7 @@ msgstr "动画轨迹åªèƒ½æŒ‡å‘AnimationPlayer节点。" #: editor/animation_track_editor.cpp msgid "An animation player can't animate itself, only other players." -msgstr "åŠ¨ç”»æ’æ”¾å™¨ä¸èƒ½æ’放本身,åªèƒ½æ’æ”¾å…¶ä»–æ’æ”¾å™¨ã€‚" +msgstr "åŠ¨ç”»æ’æ”¾å™¨ä¸èƒ½åŠ¨ç”»åŒ–è‡ªå·±ï¼Œåªèƒ½åŠ¨ç”»åŒ–å…¶ä»–æ’æ”¾å™¨ã€‚" #: editor/animation_track_editor.cpp msgid "Not possible to add a new track without a root" @@ -441,7 +474,7 @@ msgstr "轨é“è·¯å¾„æ— æ•ˆï¼Œå› æ¤æ— æ³•æ·»åŠ é”®ã€‚" #: editor/animation_track_editor.cpp msgid "Track is not of type Spatial, can't insert key" -msgstr "Track䏿˜¯Spatial类型,ä¸èƒ½ä½œä¸ºé”®å€¼æ’å…¥" +msgstr "轨é“䏿˜¯Spatial类型,ä¸èƒ½æ’入键" #: editor/animation_track_editor.cpp msgid "Add Transform Track Key" @@ -453,7 +486,7 @@ msgstr "æ·»åŠ è½¨é“é”®" #: editor/animation_track_editor.cpp msgid "Track path is invalid, so can't add a method key." -msgstr "è·Ÿè¸ªè·¯å¾„æ— æ•ˆï¼Œæ‰€ä»¥ä¸èƒ½æ·»åŠ æ–¹æ³•å¸§ã€‚" +msgstr "轨é“è·¯å¾„æ— æ•ˆï¼Œæ‰€ä»¥ä¸èƒ½æ·»åŠ æ–¹æ³•å¸§ã€‚" #: editor/animation_track_editor.cpp msgid "Add Method Track Key" @@ -506,14 +539,9 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "è¦å‘Š: æ£åœ¨ç¼–辑导入的动画" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "全选" - #: editor/animation_track_editor.cpp -msgid "Select None" -msgstr "å–æ¶ˆé€‰æ‹©" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "选择一个AnimationPlayer节点以创建和编辑动画。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -537,7 +565,7 @@ msgstr "ç§’" #: editor/animation_track_editor.cpp msgid "FPS" -msgstr "帧数" +msgstr ":abbr:`FPS(Frames Per Second,æ¯ç§’ä¼ è¾“å¸§æ•°)`" #: editor/animation_track_editor.cpp editor/editor_properties.cpp #: editor/plugins/polygon_2d_editor_plugin.cpp @@ -645,7 +673,8 @@ msgid "Scale Ratio:" msgstr "缩放比率:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "选择è¦å¤åˆ¶çš„轨é“:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -657,6 +686,11 @@ msgstr "选择è¦å¤åˆ¶çš„轨é“:" msgid "Copy" msgstr "å¤åˆ¶" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "å–æ¶ˆé€‰æ‹©" + #: editor/animation_track_editor_plugins.cpp msgid "Add Audio Track Clip" msgstr "æ·»åŠ éŸ³é¢‘è½¨é“剪辑" @@ -694,14 +728,12 @@ msgid "Replaced %d occurrence(s)." msgstr "替æ¢äº†%d项。" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d match." -msgstr "找到%d个匹é…项。" +msgstr "%d 匹é…。" #: editor/code_editor.cpp editor/editor_help.cpp -#, fuzzy msgid "%d matches." -msgstr "找到%d个匹é…项。" +msgstr "ï¼…d匹é…项。" #: editor/code_editor.cpp editor/find_in_files.cpp msgid "Match Case" @@ -835,7 +867,8 @@ msgstr "æ— æ³•è¿žæŽ¥ä¿¡å·" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -936,7 +969,8 @@ msgstr "æœç´¢:" msgid "Matches:" msgstr "匹é…项:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -975,7 +1009,7 @@ msgid "Resource" msgstr "资æº" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "路径" @@ -1145,20 +1179,18 @@ 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 " "is an exhaustive list of all such third-party components with their " "respective copyright statements and license terms." msgstr "" -"Godot引擎ä¾èµ–第三方开æºä»£ç 库,全部符åˆMIT 许å¯è¯çš„æ¡æ¬¾ã€‚ä¸‹é¢åˆ—出所有第三方组" -"件相关的版æƒå£°æ˜Žå’Œè®¸å¯åè®®æ¡æ¬¾ã€‚" +"Godot引擎ä¾èµ–多个第三方å…费开æºä»£ç 库,这些库全部兼容MIT许å¯è¯çš„æ¡æ¬¾ã€‚ä»¥ä¸‹æ˜¯" +"所有æ¤ç±»ç¬¬ä¸‰æ–¹ç»„ä»¶åŠå…¶å„自版æƒå£°æ˜Žå’Œè®¸å¯æ¡æ¬¾çš„详尽列表。" #: editor/editor_about.cpp msgid "All Components" @@ -1173,9 +1205,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" @@ -1243,8 +1274,8 @@ msgid "Delete Bus Effect" msgstr "åˆ é™¤éŸ³é¢‘æ€»çº¿æ•ˆæžœ" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." -msgstr "éŸ³é¢‘æ€»çº¿ï¼Œæ‹–æ”¾é‡æ–°æŽ’列。" +msgid "Drag & drop to rearrange." +msgstr "æ‹–æ”¾ä»¥é‡æ–°æŽ’列。" #: editor/editor_audio_buses.cpp msgid "Solo" @@ -1434,7 +1465,9 @@ msgid "Add AutoLoad" msgstr "æ·»åŠ è‡ªåŠ¨åŠ è½½" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "路径:" @@ -1488,7 +1521,7 @@ msgstr "新建目录" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "åç§°:" @@ -1655,6 +1688,7 @@ msgstr "设为当å‰" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "新建" @@ -1725,6 +1759,7 @@ msgid "New Folder..." msgstr "新建文件夹 ..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "刷新" @@ -1872,6 +1907,7 @@ msgid "Class:" msgstr "ç±»:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "基类:" @@ -1880,46 +1916,26 @@ msgid "Inherited by:" msgstr "派生类:" #: editor/editor_help.cpp -msgid "Brief Description:" -msgstr "简介:" +msgid "Brief Description" +msgstr "简述" #: editor/editor_help.cpp msgid "Properties" msgstr "属性" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "属性:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "方法" #: editor/editor_help.cpp -msgid "Methods:" -msgstr "方法:" - -#: editor/editor_help.cpp msgid "Theme Properties" msgstr "主题属性" #: editor/editor_help.cpp -msgid "Theme Properties:" -msgstr "Theme Properties:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "ä¿¡å·:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "枚举" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "枚举:" - -#: editor/editor_help.cpp msgid "enum " msgstr "枚举 " @@ -1928,20 +1944,12 @@ msgid "Constants" msgstr "常é‡" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "常é‡:" - -#: editor/editor_help.cpp msgid "Class Description" msgstr "类说明" #: editor/editor_help.cpp -msgid "Class Description:" -msgstr "类说明:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" -msgstr "在线教程:" +msgid "Online Tutorials" +msgstr "在线教程" #: editor/editor_help.cpp msgid "" @@ -1957,10 +1965,6 @@ msgid "Property Descriptions" msgstr "属性说明" #: editor/editor_help.cpp -msgid "Property Descriptions:" -msgstr "属性说明:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -1973,10 +1977,6 @@ msgid "Method Descriptions" msgstr "方法说明" #: editor/editor_help.cpp -msgid "Method Descriptions:" -msgstr "方法说明:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2045,8 +2045,8 @@ msgstr "日志:" msgid "Copy Selection" msgstr "å¤åˆ¶é€‰æ‹©" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2059,10 +2059,51 @@ msgstr "清除" msgid "Clear Output" msgstr "清空输出" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "åœæ¢" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "开始" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "%s/s" + +#: editor/editor_network_profiler.cpp +msgid "Down" +msgstr "å‘下" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "å‘上" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "节点" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "ä¼ å…¥RPC" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "ä¼ å…¥RSET" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "ä¼ å‡ºRPC" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "ä¼ å‡ºRSET" + #: editor/editor_node.cpp editor/project_manager.cpp -#, fuzzy msgid "New Window" -msgstr "窗å£" +msgstr "新窗å£" #: editor/editor_node.cpp msgid "Project export failed with error code %d." @@ -2214,7 +2255,6 @@ msgstr "" "æ¤èµ„æºå·²å¯¼å…¥, å› æ¤æ— 法编辑。在 \"导入\" 颿¿ä¸æ›´æ”¹å…¶è®¾ç½®, ç„¶åŽé‡æ–°å¯¼å…¥ã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "" "This scene was imported, so changes to it won't be kept.\n" "Instancing it or inheriting will allow making changes to it.\n" @@ -2222,18 +2262,17 @@ msgid "" "understand this workflow." msgstr "" "场景已被导入, 对它的更改将ä¸ä¼šä¿ç•™ã€‚\n" -"å…许对它的实例或继承进行更改。\n" +"对其进行实例化或继承将å…许对其进行更改。\n" "请阅读与导入场景相关的文档, 以便更好地ç†è§£æ¤å·¥ä½œæµã€‚" #: editor/editor_node.cpp -#, fuzzy msgid "" "This is a remote object, so changes to it won't be kept.\n" "Please read the documentation relevant to debugging to better understand " "this workflow." msgstr "" -"è¿™æ˜¯ä¸€ä¸ªè¿œç¨‹å¯¹è±¡ï¼Œå› æ¤å¯¹å®ƒçš„æ›´æ”¹å°†ä¸ä¼šè¢«ä¿ç•™ã€‚\n" -"请阅读与调试相关的文档,以便更好地ç†è§£è¿™ä¸ªå·¥ä½œæµã€‚" +"è¿™æ˜¯ä¸€ä¸ªè¿œç¨‹å¯¹è±¡ï¼Œå› æ¤ä¸ä¼šä¿ç•™å¯¹å…¶çš„æ›´æ”¹ã€‚ 请阅读与调试相关的文档,以更好地了" +"è§£æ¤å·¥ä½œæµç¨‹ã€‚" #: editor/editor_node.cpp msgid "There is no defined scene to run." @@ -2378,9 +2417,8 @@ msgid "Close Scene" msgstr "å…³é—场景" #: editor/editor_node.cpp -#, fuzzy msgid "Reopen Closed Scene" -msgstr "å…³é—场景" +msgstr "釿–°æ‰“开关é—的场景" #: editor/editor_node.cpp msgid "Unable to enable addon plugin at: '%s' parsing of config failed." @@ -2486,9 +2524,8 @@ msgid "Close Tab" msgstr "关闿 ‡ç¾é¡µ" #: editor/editor_node.cpp -#, fuzzy msgid "Undo Close Tab" -msgstr "关闿 ‡ç¾é¡µ" +msgstr "æ’¤é”€å…³é—æ ‡ç¾é¡µ" #: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp msgid "Close Other Tabs" @@ -2621,18 +2658,28 @@ msgid "Project" msgstr "项目" #: editor/editor_node.cpp -#, fuzzy msgid "Project Settings..." -msgstr "项目设置" +msgstr "项目设置..." + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control" +msgstr "版本控制" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "设置版本控制" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "å…³é—版本控制" #: editor/editor_node.cpp msgid "Export..." msgstr "导出..." #: editor/editor_node.cpp -#, fuzzy msgid "Install Android Build Template..." -msgstr "安装 Android 构建模æ¿" +msgstr "安装 Android 构建模æ¿..." #: editor/editor_node.cpp msgid "Open Project Data Folder" @@ -2643,9 +2690,8 @@ msgid "Tools" msgstr "工具" #: editor/editor_node.cpp -#, fuzzy msgid "Orphan Resource Explorer..." -msgstr "查看å¤ç«‹èµ„æº" +msgstr "å•ä¸€èµ„æºæµè§ˆå™¨..." #: editor/editor_node.cpp msgid "Quit to Project List" @@ -2738,9 +2784,8 @@ msgid "Editor" msgstr "编辑器" #: editor/editor_node.cpp -#, fuzzy msgid "Editor Settings..." -msgstr "编辑器设置" +msgstr "编辑器设置..." #: editor/editor_node.cpp msgid "Editor Layout" @@ -2775,14 +2820,12 @@ msgid "Open Editor Settings Folder" msgstr "æ‰“å¼€â€œç¼–è¾‘å™¨è®¾ç½®â€æ–‡ä»¶å¤¹" #: editor/editor_node.cpp -#, fuzzy msgid "Manage Editor Features..." -msgstr "管ç†ç¼–辑器功能" +msgstr "管ç†ç¼–辑器功能..." #: editor/editor_node.cpp -#, fuzzy msgid "Manage Export Templates..." -msgstr "管ç†å¯¼å‡ºæ¨¡æ¿" +msgstr "管ç†å¯¼å‡ºæ¨¡æ¿..." #: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp msgid "Help" @@ -2804,7 +2847,7 @@ msgstr "在线文档" #: editor/editor_node.cpp msgid "Q&A" -msgstr "常è§é—®é¢˜ä¸Žç”案" +msgstr "é—®ç”" #: editor/editor_node.cpp msgid "Issue Tracker" @@ -2838,10 +2881,6 @@ msgstr "æš‚åœè¿è¡Œåœºæ™¯" msgid "Stop the scene." msgstr "åœæ¢è¿è¡Œåœºæ™¯ã€‚" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "åœæ¢" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "打开并è¿è¡Œåœºæ™¯ã€‚" @@ -2880,9 +2919,8 @@ msgid "Update When Changed" msgstr "当有更改时更新" #: editor/editor_node.cpp -#, fuzzy msgid "Hide Update Spinner" -msgstr "ç¦ç”¨è‡ªåŠ¨æ›´æ–°" +msgstr "éšè—更新微调" #: editor/editor_node.cpp msgid "FileSystem" @@ -2893,14 +2931,10 @@ msgid "Inspector" msgstr "å±žæ€§é¢æ¿" #: editor/editor_node.cpp -msgid "Node" -msgstr "节点" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "å±•å¼€åº•éƒ¨é¢æ¿" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "日志" @@ -2918,20 +2952,28 @@ msgstr "ç®¡ç†æ¨¡æ¿" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" -"将安装Android项目以进行自定义构建。\n" -"注æ„,为了å¯ç”¨ï¼Œéœ€è¦ä¸ºæ¯ä¸ªå¯¼å‡ºé¢„设å¯ç”¨ã€‚" +"é€šè¿‡å°†æºæ¨¡æ¿å®‰è£…到“ res:// android / buildâ€ï¼Œå°†ä¸ºè‡ªå®šä¹‰Android构建设置项" +"目。 ç„¶åŽï¼Œæ‚¨å¯ä»¥åº”用修改并在导出时构建自己的自定义APKï¼ˆæ·»åŠ æ¨¡å—,更改" +"AndroidManifest.xmlç‰ï¼‰ã€‚ 请注æ„ï¼Œä¸ºäº†è¿›è¡Œè‡ªå®šä¹‰æž„å»ºè€Œä¸æ˜¯ä½¿ç”¨é¢„先构建的APK," +"应在Android导出预设ä¸å¯ç”¨â€œä½¿ç”¨è‡ªå®šä¹‰æž„建â€é€‰é¡¹ã€‚" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" -"Android 构建模æ¿å·²ç»å®‰è£…且ä¸ä¼šè¢«è¦†ç›–。\n" -"请先移除“buildâ€ç›®å½•å†é‡æ–°å°è¯•æ¤æ“作。" +"Android构建模æ¿å·²å®‰è£…在æ¤é¡¹ç›®ä¸ï¼Œå¹¶ä¸”ä¸ä¼šè¢«è¦†ç›–。 冿¬¡å°è¯•æ‰§è¡Œæ¤æ“作之å‰ï¼Œè¯·" +"æ‰‹åŠ¨åˆ é™¤â€œ res:// android / buildâ€ç›®å½•。" #: editor/editor_node.cpp msgid "Import Templates From ZIP File" @@ -2993,6 +3035,10 @@ msgstr "打开下一个编辑器" msgid "Open the previous Editor" msgstr "打开上一个编辑器" +#: editor/editor_path.cpp +msgid "No sub-resources found." +msgstr "找ä¸åˆ°å资æºã€‚" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "åˆ›å»ºç½‘æ ¼é¢„è§ˆ" @@ -3002,6 +3048,10 @@ msgid "Thumbnail..." msgstr "缩略图..." #: editor/editor_plugin_settings.cpp +msgid "Main Script:" +msgstr "主脚本:" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "编辑æ’ä»¶" @@ -3030,11 +3080,6 @@ msgstr "状æ€ï¼š" msgid "Edit:" msgstr "编辑:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "开始" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "测é‡:" @@ -3135,6 +3180,10 @@ msgstr "选择1个视å£" msgid "New Script" msgstr "新建脚本" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +msgid "Extend Script" +msgstr "打开脚本" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "新建%s" @@ -3161,13 +3210,6 @@ msgstr "粘贴" msgid "Convert To %s" msgstr "转æ¢ä¸º%s" -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -msgid "Open Editor" -msgstr "打开编辑器" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "é€‰å®šçš„èŠ‚ç‚¹ä¸æ˜¯ä¸€ä¸ªViewport节点ï¼" @@ -3246,7 +3288,6 @@ msgid "Import From Node:" msgstr "从节点ä¸å¯¼å…¥:" #: editor/export_template_manager.cpp -#, fuzzy msgid "Redownload" msgstr "釿–°ä¸‹è½½" @@ -3265,7 +3306,7 @@ msgstr "下载" #: editor/export_template_manager.cpp msgid "Official export templates aren't available for development builds." -msgstr "" +msgstr "开呿ž„建下官方导出模æ¿ä¸å¯ç”¨ã€‚" #: editor/export_template_manager.cpp msgid "(Missing)" @@ -3346,21 +3387,18 @@ msgid "Download Complete." msgstr "下载完æˆã€‚" #: editor/export_template_manager.cpp -#, fuzzy msgid "Cannot remove temporary file:" -msgstr "æ— æ³•ä¿å˜ä¸»é¢˜åˆ°æ–‡ä»¶:" +msgstr "æ— æ³•ç§»é™¤ä¸´æ—¶æ–‡ä»¶:" #: editor/export_template_manager.cpp -#, fuzzy msgid "" "Templates installation failed.\n" "The problematic templates archives can be found at '%s'." -msgstr "模æ¿å®‰è£…失败。å¯ä»¥åœ¨ '%s' 䏿‰¾åˆ°è¿™äº›é—®é¢˜æ¨¡æ¿æ–‡æ¡£ã€‚" +msgstr "模æ¿å®‰è£…å¤±è´¥ã€‚æœ‰é—®é¢˜çš„æ¨¡æ¿æ–‡æ¡£åœ¨ '%s' 。" #: editor/export_template_manager.cpp -#, fuzzy msgid "Error requesting URL:" -msgstr "请求链接错误: " +msgstr "错误的请求链接:" #: editor/export_template_manager.cpp msgid "Connecting to Mirror..." @@ -3477,9 +3515,8 @@ msgid "No name provided." msgstr "没有æä¾›ä»»ä½•å称。" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Provided name contains invalid characters." -msgstr "æä¾›çš„åç§°åŒ…å«æ— 效å—符" +msgstr "å˜åœ¨æ— 效å—符。" #: editor/filesystem_dock.cpp msgid "A file or folder with this name already exists." @@ -3510,7 +3547,6 @@ msgid "New Inherited Scene" msgstr "新继承的场景" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Open Scenes" msgstr "打开场景" @@ -3519,12 +3555,10 @@ msgid "Instance" msgstr "创建实例节点" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Add to Favorites" msgstr "æ·»åŠ åˆ°æ”¶è—夹" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Remove from Favorites" msgstr "从收è—夹ä¸åˆ 除" @@ -3549,9 +3583,8 @@ msgid "Move To..." msgstr "移动..." #: editor/filesystem_dock.cpp -#, fuzzy msgid "New Scene..." -msgstr "新建场景" +msgstr "新建场景..." #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "New Script..." @@ -3579,21 +3612,18 @@ msgid "Rename" msgstr "é‡å‘½å" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Previous Folder/File" -msgstr "上一个文件夹" +msgstr "上一个文件夹/文件" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Next Folder/File" -msgstr "下一个文件夹" +msgstr "下一个文件夹/文件" #: editor/filesystem_dock.cpp msgid "Re-Scan Filesystem" msgstr "釿–°æ‰«ææ–‡ä»¶ç³»ç»Ÿ" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Toggle Split Mode" msgstr "åˆ‡æ¢æ‹†åˆ†æ¨¡å¼" @@ -3622,9 +3652,8 @@ msgid "Overwrite" msgstr "覆盖" #: editor/filesystem_dock.cpp -#, fuzzy msgid "Create Scene" -msgstr "从场景ä¸åˆ›å»º" +msgstr "创建场景" #: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp msgid "Create Script" @@ -3702,23 +3731,20 @@ msgid "Invalid group name." msgstr "ç»„åæ— 效。" #: editor/groups_editor.cpp -#, fuzzy msgid "Rename Group" -msgstr "管ç†åˆ†ç»„" +msgstr "é‡å‘½å组" #: editor/groups_editor.cpp -#, fuzzy msgid "Delete Group" -msgstr "åˆ é™¤å›¾ç‰‡åˆ†ç»„" +msgstr "åˆ é™¤åˆ†ç»„" #: editor/groups_editor.cpp editor/node_dock.cpp msgid "Groups" -msgstr "分组" +msgstr "编组" #: editor/groups_editor.cpp -#, fuzzy msgid "Nodes Not in Group" -msgstr "ä¸åœ¨åˆ†ç»„ä¸çš„节点" +msgstr "节点ä¸åœ¨åˆ†ç»„ä¸" #: editor/groups_editor.cpp editor/scene_tree_dock.cpp #: editor/scene_tree_editor.cpp @@ -3731,7 +3757,7 @@ msgstr "分组ä¸çš„节点" #: editor/groups_editor.cpp msgid "Empty groups will be automatically removed." -msgstr "" +msgstr "空的分组会自动移除。" #: editor/groups_editor.cpp msgid "Group Editor" @@ -3834,9 +3860,9 @@ msgstr " 文件" msgid "Import As:" msgstr "导入为:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "预设..." +#: editor/import_dock.cpp +msgid "Preset" +msgstr "预置" #: editor/import_dock.cpp msgid "Reimport" @@ -3941,9 +3967,8 @@ msgid "MultiNode Set" msgstr "多节点组" #: editor/node_dock.cpp -#, fuzzy msgid "Select a single node to edit its signals and groups." -msgstr "请选择一个节点æ¥è®¾ç½®ä¿¡å·æˆ–分组。" +msgstr "选择一个节点以编辑其信å·å’Œç»„。" #: editor/plugin_config_dialog.cpp msgid "Edit a Plugin" @@ -3961,7 +3986,7 @@ msgstr "æ’ä»¶å:" msgid "Subfolder:" msgstr "åæ–‡ä»¶å¤¹ï¼š" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "è¯è¨€ï¼š" @@ -4101,14 +4126,19 @@ msgstr "点" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +msgid "Open Editor" +msgstr "打开编辑器" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp msgid "Open Animation Node" msgstr "打开动画节点" #: editor/plugins/animation_blend_space_2d_editor.cpp -#, fuzzy msgid "Triangle already exists." -msgstr "三角形已ç»å˜åœ¨" +msgstr "三角形已ç»å˜åœ¨ã€‚" #: editor/plugins/animation_blend_space_2d_editor.cpp msgid "Add Triangle" @@ -4248,9 +4278,8 @@ msgid "Edit Filtered Tracks:" msgstr "编辑轨é“过滤器:" #: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy msgid "Enable Filtering" -msgstr "å…许过滤" +msgstr "å¯ç”¨è¿‡æ»¤" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -4269,6 +4298,7 @@ msgid "Change Animation Name:" msgstr "é‡å‘½å动画:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "是å¦åˆ 除动画?" @@ -4384,9 +4414,8 @@ msgid "Enable Onion Skinning" msgstr "å¯ç”¨æ´‹è‘±çš®(Onion Skinning)" #: editor/plugins/animation_player_editor_plugin.cpp -#, fuzzy msgid "Onion Skinning Options" -msgstr "洋葱皮(Onion Skining)" +msgstr "洋葱皮选项" #: editor/plugins/animation_player_editor_plugin.cpp msgid "Directions" @@ -4444,7 +4473,6 @@ msgstr "动画åç§°:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "错误ï¼" @@ -4615,6 +4643,8 @@ msgid "Current:" msgstr "当å‰:" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" @@ -4715,37 +4745,32 @@ msgid "Request failed, return code:" msgstr "请求失败,错误代ç :" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed." msgstr "请求失败。" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Cannot save response to:" -msgstr "æ— æ³•ä¿å˜ä¸»é¢˜åˆ°æ–‡ä»¶:" +msgstr "æ— æ³•å°†å“应ä¿å˜åˆ°ï¼š" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Write error." -msgstr "" +msgstr "写错误。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Request failed, too many redirects" msgstr "请求失败,é‡å®šå‘次数过多" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Redirect loop." -msgstr "循环é‡å®šå‘。" +msgstr "é‡å®šå‘循环。" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Request failed, timeout" -msgstr "请求失败,错误代ç :" +msgstr "请求失败,超时" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Timeout." -msgstr "æ—¶é—´" +msgstr "超时。" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Bad download hash, assuming file has been tampered with." @@ -4788,9 +4813,8 @@ msgid "Idle" msgstr "空闲" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Install..." -msgstr "安装" +msgstr "安装..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Retry" @@ -4825,25 +4849,22 @@ msgid "All" msgstr "全部" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp msgid "Import..." -msgstr "釿–°å¯¼å…¥..." +msgstr "导入…" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Plugins..." -msgstr "æ’ä»¶" +msgstr "æ’ä»¶..." #: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp msgid "Sort:" msgstr "排åº:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "æ£åœ¨è¯·æ±‚。。" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "分类:" @@ -4853,9 +4874,8 @@ msgid "Site:" msgstr "站点:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Support" -msgstr "支æŒ..." +msgstr "支æŒ" #: editor/plugins/asset_library_editor_plugin.cpp msgid "Official" @@ -4866,9 +4886,8 @@ msgid "Testing" msgstr "测试" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy msgid "Loading..." -msgstr "åŠ è½½..." +msgstr "载入ä¸..." #: editor/plugins/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -4924,39 +4943,32 @@ msgid "Rotation Step:" msgstr "旋转æ¥é•¿:" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move Vertical Guide" -msgstr "ç§»åŠ¨åž‚ç›´æ ‡å°º" +msgstr "移动垂直å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Vertical Guide" -msgstr "åˆ›å»ºæ–°çš„åž‚ç›´æ ‡å°º" +msgstr "创建垂直å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove Vertical Guide" -msgstr "åˆ é™¤åž‚ç›´æ ‡å°º" +msgstr "åˆ é™¤åž‚ç›´å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Move Horizontal Guide" -msgstr "ç§»åŠ¨æ°´å¹³æ ‡å°º" +msgstr "移动水平å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Horizontal Guide" -msgstr "åˆ›å»ºæ°´å¹³æ ‡å°º" +msgstr "创建水平å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Remove Horizontal Guide" -msgstr "ç§»é™¤æ°´å¹³æ ‡å°º" +msgstr "移除水平å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Horizontal and Vertical Guides" -msgstr "åˆ›å»ºåž‚ç›´æ°´å¹³æ ‡å°º" +msgstr "创建垂直水平å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Move pivot" @@ -5012,46 +5024,39 @@ msgstr "编辑锚点" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Lock Selected" -msgstr "选择工具" +msgstr "é”定选定" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Unlock Selected" -msgstr "åˆ é™¤å·²é€‰ä¸" +msgstr "è§£é”æ‰€é€‰" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Group Selected" -msgstr "å¤åˆ¶é€‰æ‹©" +msgstr "分组选择" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Ungroup Selected" -msgstr "å¤åˆ¶é€‰æ‹©" +msgstr "å–æ¶ˆé€‰å®šåˆ†ç»„" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Paste Pose" msgstr "粘贴姿势" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Guides" -msgstr "清除姿势" +msgstr "清除å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Create Custom Bone(s) from Node(s)" -msgstr "从节点制作自定义骨骼" +msgstr "从节点创建自定义骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Clear Bones" -msgstr "清除姿势" +msgstr "清除骨骼" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Make IK Chain" @@ -5122,25 +5127,35 @@ msgstr "点击设置对象的旋转ä¸å¿ƒã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Pan Mode" -msgstr "移动画布" +msgstr "平移模å¼" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +msgid "Ruler Mode" +msgstr "æ ‡å°ºæ¨¡å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "开关å¸é™„。" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "使用å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "å¸é™„选项" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "开关å¸é™„。" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "å¸é™„åˆ°ç½‘æ ¼" +msgid "Use Grid Snap" +msgstr "ç½‘æ ¼å¸é™„" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "å¸é™„选项" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" @@ -5155,7 +5170,6 @@ msgid "Use Pixel Snap" msgstr "使用åƒç´ å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Smart Snapping" msgstr "智能å¸é™„" @@ -5165,54 +5179,48 @@ msgid "Configure Snap..." msgstr "设置å¸é™„..." #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Parent" -msgstr "å¸é™„到父节点" +msgstr "å¸é™„到父级" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Anchor" -msgstr "å¸é™„到node锚点" +msgstr "å¸é™„到节点锚点" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Sides" -msgstr "å¸é™„到nodeè¾¹" +msgstr "å¸é™„到节点侧" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Node Center" msgstr "å¸é™„到节点ä¸å¿ƒä½ç½®" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Other Nodes" msgstr "å¸é™„到其他node节点" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Snap to Guides" -msgstr "å¸é™„åˆ°æ ‡å°º" +msgstr "å¸é™„到å‚考线" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Lock the selected object in place (can't be moved)." -msgstr "é”定选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" +msgstr "将所选对象é”定到该ä½ç½®ï¼ˆæ— 法移动)。" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Unlock the selected object (can be moved)." -msgstr "è§£é”选ä¸å¯¹è±¡çš„ä½ç½®ã€‚" +msgstr "è§£é”æ‰€é€‰å¯¹è±¡ï¼ˆå¯ä»¥ç§»åŠ¨ï¼‰ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Makes sure the object's children are not selectable." -msgstr "ç¡®ä¿èŠ‚ç‚¹çš„å噿— 法被选ä¸ã€‚" +msgstr "ç¡®ä¿å¯¹è±¡çš„å项ä¸å¯é€‰æ‹©ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp msgid "Restores the object's children's ability to be selected." -msgstr "æ¢å¤èŠ‚ç‚¹çš„åå™èƒ½å¤Ÿè¢«é€‰ä¸ã€‚" +msgstr "æ¢å¤é€‰æ‹©å¯¹è±¡çš„å级的功能。" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Skeleton Options" @@ -5236,8 +5244,8 @@ msgid "View" msgstr "视图" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "æ˜¾ç¤ºç½‘æ ¼" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5273,9 +5281,8 @@ msgid "Frame Selection" msgstr "最大化显示选ä¸èŠ‚ç‚¹" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Preview Canvas Scale" -msgstr "ç²¾çµé›†é¢„览" +msgstr "预览画布比例" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Translation mask for inserting keys." @@ -5329,26 +5336,25 @@ msgid "Divide grid step by 2" msgstr "ç½‘æ ¼æ¥è¿›é™¤ä»¥2" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Pan View" -msgstr "Rear视图" +msgstr "平移视图" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Add %s" -msgstr "æ·»åŠ (Add) %s" +msgstr "æ·»åŠ %s" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Adding %s..." -msgstr "æ·»åŠ (Adding) %s..." +msgstr "æ£åœ¨æ·»åŠ ï¼…s ..." #: editor/plugins/canvas_item_editor_plugin.cpp msgid "Cannot instantiate multiple nodes without root." -msgstr "æ— æ³•å®žä¾‹åŒ–æ²¡æœ‰æ ¹çš„å¤šä¸ªèŠ‚ç‚¹ã€‚" +msgstr "æ²¡æœ‰æ ¹èŠ‚ç‚¹æ— æ³•å®žä¾‹åŒ–å¤šä¸ªèŠ‚ç‚¹ã€‚" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "Create Node" -msgstr "新节点" +msgstr "创建节点" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp @@ -5356,9 +5362,8 @@ msgid "Error instancing scene from %s" msgstr "从%s实例化场景出错" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy msgid "Change Default Type" -msgstr "修改默认值" +msgstr "更改默认类型" #: editor/plugins/canvas_item_editor_plugin.cpp msgid "" @@ -5370,7 +5375,7 @@ msgstr "" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Create Polygon3D" -msgstr "创建3D多边形" +msgstr "创建Polygon3D" #: editor/plugins/collision_polygon_editor_plugin.cpp msgid "Edit Poly" @@ -5393,14 +5398,13 @@ msgstr "åŠ è½½Emission Mask(å‘å°„å±è”½ï¼‰" #: editor/plugins/cpu_particles_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "Restart" -msgstr "ç«‹å³é‡æ–°å¯åЍ" +msgstr "釿–°å¯åЍ" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Clear Emission Mask" -msgstr "清除Emission Mask(å‘å°„å±è”½ï¼‰" +msgstr "清除å‘å°„å±è”½" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5416,12 +5420,12 @@ msgstr "生æˆé¡¶ç‚¹è®¡æ•°:" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Emission Mask" -msgstr "å‘å…‰é®ç½©ï¼ˆmask)" +msgstr "å‘å°„é®ç½©" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp msgid "Capture from Pixel" -msgstr "从åƒç´ æ•æ‰" +msgstr "从åƒç´ æ•获" #: editor/plugins/cpu_particles_2d_editor_plugin.cpp #: editor/plugins/particles_2d_editor_plugin.cpp @@ -5443,14 +5447,12 @@ msgid "Create Emission Points From Node" msgstr "从节点创建å‘射器(Emission)" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 0" msgstr "å¹³é¢0" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Flat 1" -msgstr "å¹³é¢1" +msgstr "å¹³é¢ 1" #: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp msgid "Ease In" @@ -5477,33 +5479,28 @@ msgid "Load Curve Preset" msgstr "åŠ è½½æ›²çº¿é¢„è®¾" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Add Point" -msgstr "æ·»åŠ é¡¶ç‚¹" +msgstr "æ·»åŠ ç‚¹" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Remove Point" -msgstr "移除顶点" +msgstr "移除点" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Left Linear" msgstr "左线性" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Right Linear" msgstr "å³çº¿æ€§" #: editor/plugins/curve_editor_plugin.cpp -#, fuzzy msgid "Load Preset" -msgstr "åŠ è½½é¢„è®¾" +msgstr "载入预置" #: editor/plugins/curve_editor_plugin.cpp msgid "Remove Curve Point" -msgstr "移除路径顶点" +msgstr "移除曲线点" #: editor/plugins/curve_editor_plugin.cpp msgid "Toggle Curve Linear Tangent" @@ -5513,6 +5510,11 @@ msgstr "åˆ‡æ¢æ›²çº¿çº¿æ€§Tangent" msgid "Hold Shift to edit tangents individually" msgstr "æŒ‰ä½ Shift å¯å•独编辑切线" +#: editor/plugins/curve_editor_plugin.cpp +#, fuzzy +msgid "Right click to add point" +msgstr "é¼ æ ‡å³é”®:åˆ é™¤ç‚¹" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "渲染GI Probe" @@ -5554,22 +5556,20 @@ msgid "This doesn't work on scene root!" msgstr "æ¤æ“ä½œæ— æ³•å¼•ç”¨åœ¨æ ¹èŠ‚ç‚¹ä¸Šï¼" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Trimesh Static Shape" -msgstr "创建Trimesh(ä¸‰ç»´ç½‘æ ¼)形状" +msgstr "åˆ›å»ºä¸‰ç»´ç½‘æ ¼é™æ€å½¢çж" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Failed creating shapes!" msgstr "创建形状失败ï¼" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Convex Shape(s)" -msgstr "创建 凸(Convex) 形状" +msgstr "创建凸形" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Navigation Mesh" -msgstr "创建导航Mesh(ç½‘æ ¼)" +msgstr "åˆ›å»ºå¯¼èˆªç½‘æ ¼" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Contained Mesh is not of type ArrayMesh." @@ -5581,7 +5581,7 @@ msgstr "UV展开失败,å¯èƒ½è¯¥ç½‘æ ¼å¹¶éžæµå½¢ï¼Ÿ" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "No mesh to debug." -msgstr "没有è¦è°ƒè¯•çš„mesh。" +msgstr "没有è¦è°ƒè¯•çš„ç½‘æ ¼ã€‚" #: editor/plugins/mesh_instance_editor_plugin.cpp #: editor/plugins/sprite_editor_plugin.cpp @@ -5614,16 +5614,15 @@ msgstr "网络" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Static Body" -msgstr "åˆ›å»ºä¸‰ç»´é™æ€èº«ä½“(Body)" +msgstr "åˆ›å»ºä¸‰ç»´é™æ€å®žä½“(Body)" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Trimesh Collision Sibling" msgstr "创建三维碰撞åŒçº§" #: editor/plugins/mesh_instance_editor_plugin.cpp -#, fuzzy msgid "Create Convex Collision Sibling(s)" -msgstr "创建凸(Convex)碰撞åŒçº§" +msgstr "创建凸型碰撞åŒçº§" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "Create Outline Mesh..." @@ -5631,7 +5630,7 @@ msgstr "åˆ›å»ºè½®å»“ç½‘æ ¼(Outline Mesh)..." #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV1" -msgstr "查看UV1" +msgstr "视图UV1" #: editor/plugins/mesh_instance_editor_plugin.cpp msgid "View UV2" @@ -5791,26 +5790,23 @@ msgstr "ç”Ÿæˆæ—¶é—´ï¼ˆç§’):" #: editor/plugins/particles_editor_plugin.cpp msgid "The geometry's faces don't contain any area." -msgstr "" +msgstr "å‡ ä½•ï¼ˆé¢ï¼‰ä¸åŒ…å«ä»»ä½•区域。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "The geometry doesn't contain any faces." -msgstr "节点ä¸åŒ…å«å‡ 何(é¢ï¼‰ã€‚" +msgstr "å‡ ä½•ä½“ä¸åŒ…å«ä»»ä½•é¢ã€‚" #: editor/plugins/particles_editor_plugin.cpp msgid "\"%s\" doesn't inherit from Spatial." -msgstr "" +msgstr "\"%s\"ä¸ä»Žç©ºé—´(Spatial)继承。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain geometry." -msgstr "节点ä¸åŒ…å«å‡ 何。" +msgstr "\"%s\"ä¸åŒ…å«å‡ 何体。" #: editor/plugins/particles_editor_plugin.cpp -#, fuzzy msgid "\"%s\" doesn't contain face geometry." -msgstr "节点ä¸åŒ…å«å‡ 何。" +msgstr "\"%s\"ä¸åŒ…å«é¢å‡ 何体。" #: editor/plugins/particles_editor_plugin.cpp msgid "Create Emitter" @@ -5981,7 +5977,6 @@ msgid "Split Segment (in curve)" msgstr "拆分(曲线)" #: editor/plugins/physical_bone_plugin.cpp -#, fuzzy msgid "Move Joint" msgstr "移动关节" @@ -6149,6 +6144,10 @@ msgid "Grid" msgstr "ç½‘æ ¼" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "æ˜¾ç¤ºç½‘æ ¼" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "é…ç½®ç½‘æ ¼ï¼š" @@ -6204,7 +6203,8 @@ msgstr "实例:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "类型:" @@ -6242,9 +6242,8 @@ msgid "Error writing TextFile:" msgstr "写入文本文件时出错:" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Could not load file at:" -msgstr "找ä¸åˆ°ç –å—:" +msgstr "æ— æ³•åœ¨ä»¥ä¸‹ä½ç½®åŠ è½½æ–‡ä»¶ï¼š" #: editor/plugins/script_editor_plugin.cpp msgid "Error saving file!" @@ -6267,9 +6266,8 @@ msgid "Error Importing" msgstr "导入出错" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "New Text File..." -msgstr "新建文本文档..." +msgstr "新文本文件..." #: editor/plugins/script_editor_plugin.cpp msgid "Open File" @@ -6305,18 +6303,21 @@ msgid "Find Next" msgstr "查找下一项" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "查找上一项" + +#: editor/plugins/script_editor_plugin.cpp msgid "Filter scripts" -msgstr "属性ç›é€‰" +msgstr "过滤脚本" #: editor/plugins/script_editor_plugin.cpp msgid "Toggle alphabetical sorting of the method list." msgstr "åˆ‡æ¢æŒ‰å—æ¯è¡¨æŽ’åºæ–¹å¼æŽ’列方法。" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Filter methods" -msgstr "ç›é€‰æ¨¡å¼ï¼š" +msgstr "过滤方å¼" #: editor/plugins/script_editor_plugin.cpp msgid "Sort" @@ -6351,9 +6352,8 @@ msgid "Open..." msgstr "打开…" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reopen Closed Script" -msgstr "打开脚本" +msgstr "釿–°æ‰“开关é—的脚本" #: editor/plugins/script_editor_plugin.cpp msgid "Save All" @@ -6409,14 +6409,14 @@ msgid "Toggle Scripts Panel" msgstr "切æ¢è„šæœ¬é¢æ¿" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "啿¥è·³è¿‡" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "啿¥è¿›å…¥" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "啿¥è·³è¿‡" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "跳过" @@ -6434,18 +6434,16 @@ msgid "Debug with External Editor" msgstr "使用外部编辑器进行调试" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Open Godot online documentation." -msgstr "打开Godot在线文档" +msgstr "打开Godot在线文档。" #: editor/plugins/script_editor_plugin.cpp msgid "Request Docs" msgstr "请求文档" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Help improve the Godot documentation by giving feedback." -msgstr "通过æä¾›å馈å助改进Godot文档" +msgstr "通过æä¾›å馈帮助改进godot文档。" #: editor/plugins/script_editor_plugin.cpp msgid "Search the reference documentation." @@ -6490,22 +6488,18 @@ msgid "Search Results" msgstr "æœç´¢ç»“æžœ" #: editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Clear Recent Scripts" -msgstr "清除近期的场景" +msgstr "清除最近的脚本" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Connections to method:" -msgstr "连接到节点:" +msgstr "与方法的连接:" -#: editor/plugins/script_text_editor.cpp -#, fuzzy +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp msgid "Source" -msgstr "æº:" +msgstr "æº" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Signal" msgstr "ä¿¡å·" @@ -6514,10 +6508,9 @@ msgid "Target" msgstr "æž„å»ºç›®æ ‡" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "" "Missing connected method '%s' for signal '%s' from node '%s' to node '%s'." -msgstr "没有任何物体连接到节点 '%s' 的输入 '%s' 。" +msgstr "从节点'ï¼…s'到节点'ï¼…s'的信å·'ï¼…s'缺少连接方法'ï¼…s'。" #: editor/plugins/script_text_editor.cpp msgid "Line" @@ -6574,15 +6567,19 @@ msgid "Bookmarks" msgstr "书ç¾" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Breakpoints" -msgstr "创建点。" +msgstr "æ–点" #: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp #: scene/gui/text_edit.cpp msgid "Cut" msgstr "剪切" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "全选" + #: editor/plugins/script_text_editor.cpp msgid "Delete Line" msgstr "åˆ é™¤çº¿" @@ -6620,9 +6617,8 @@ msgid "Complete Symbol" msgstr "代ç 补全" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Evaluate Selection" -msgstr "缩放选ä¸é¡¹" +msgstr "评估选择" #: editor/plugins/script_text_editor.cpp msgid "Trim Trailing Whitespace" @@ -6641,10 +6637,6 @@ msgid "Auto Indent" msgstr "自动缩进" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "查找上一项" - -#: editor/plugins/script_text_editor.cpp msgid "Find in Files..." msgstr "åœ¨æ–‡ä»¶ä¸æŸ¥æ‰¾..." @@ -6653,24 +6645,20 @@ msgid "Contextual Help" msgstr "æœç´¢å…‰æ ‡ä½ç½®" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Toggle Bookmark" -msgstr "切æ¢è‡ªç”±è§‚察模å¼" +msgstr "切æ¢ä¹¦ç¾" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Next Bookmark" -msgstr "å‰å¾€ä¸‹ä¸€ä¸ªæ–点" +msgstr "转到下一个书ç¾" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Go to Previous Bookmark" -msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ–点" +msgstr "转到上一个书ç¾" #: editor/plugins/script_text_editor.cpp -#, fuzzy msgid "Remove All Bookmarks" -msgstr "移除类项目" +msgstr "åˆ é™¤æ‰€æœ‰ä¹¦ç¾" #: editor/plugins/script_text_editor.cpp msgid "Go to Function..." @@ -6698,13 +6686,12 @@ msgid "Go to Previous Breakpoint" msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ–点" #: editor/plugins/shader_editor_plugin.cpp -#, fuzzy msgid "" "This shader has been modified on on disk.\n" "What action should be taken?" msgstr "" -"ç£ç›˜ä¸çš„下列文件已更新。\n" -"请选择执行那项æ“作?:" +"æ¤ç€è‰²å™¨å·²åœ¨ç£ç›˜ä¸Šä¿®æ”¹.\n" +"应该采å–什么行动?" #: editor/plugins/shader_editor_plugin.cpp msgid "Shader" @@ -6875,14 +6862,12 @@ msgid "Rear" msgstr "åŽæ–¹" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Transform with View" -msgstr "对é½è§†å›¾" +msgstr "å°†å˜æ¢ä¸Žè§†å›¾å¯¹é½" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Align Rotation with View" -msgstr "选ä¸é¡¹ä¸Žè§†å›¾å¯¹é½" +msgstr "将旋转与视图对é½" #: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp msgid "No parent to instance a child at." @@ -6937,9 +6922,8 @@ msgid "Audio Listener" msgstr "音频监å¬å™¨" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Enable Doppler" -msgstr "å…许过滤" +msgstr "å¯ç”¨å¤šæ™®å‹’效应" #: editor/plugins/spatial_editor_plugin.cpp msgid "Cinematic Preview" @@ -6974,6 +6958,11 @@ msgid "Freelook Speed Modifier" msgstr "自由视图速度调整" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "自由视图速度调整" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -6995,7 +6984,7 @@ msgstr "将节点å¸é™„至地é¢" #: editor/plugins/spatial_editor_plugin.cpp msgid "Couldn't find a solid floor to snap the selection to." -msgstr "" +msgstr "找ä¸åˆ°ä¸€ä¸ªåšå®žçš„åœ°æ¿æ¥å¿«é€Ÿé€‰æ‹©ã€‚" #: editor/plugins/spatial_editor_plugin.cpp msgid "" @@ -7008,9 +6997,12 @@ msgstr "" "Alt+é¼ æ ‡å³é”®ï¼šæ˜¾ç¤ºåˆ—表" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Use Local Space" -msgstr "æœ¬åœ°ç©ºé—´æ¨¡å¼ (%s)" +msgstr "使用本地空间" + +#: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "使用å¸é™„" #: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" @@ -7037,9 +7029,8 @@ msgid "Right View" msgstr "å³è§†å›¾" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Switch Perspective/Orthogonal View" -msgstr "åˆ‡æ¢æŠ•å½±ï¼ˆæ£äº¤ï¼‰è§†å›¾" +msgstr "åˆ‡æ¢æŠ•å½±/æ£äº¤è§†å›¾" #: editor/plugins/spatial_editor_plugin.cpp msgid "Insert Animation Key" @@ -7063,9 +7054,8 @@ msgid "Transform" msgstr "å˜æ¢" #: editor/plugins/spatial_editor_plugin.cpp -#, fuzzy msgid "Snap Object to Floor" -msgstr "å¸é™„物体到地é¢" +msgstr "将对象å¸é™„到地æ¿" #: editor/plugins/spatial_editor_plugin.cpp msgid "Transform Dialog..." @@ -7109,9 +7099,8 @@ msgstr "æ˜¾ç¤ºç½‘æ ¼" #: editor/plugins/spatial_editor_plugin.cpp #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "Settings..." -msgstr "设置" +msgstr "设置..." #: editor/plugins/spatial_editor_plugin.cpp msgid "Snap Settings" @@ -7119,7 +7108,7 @@ msgstr "å¸é™„设置" #: editor/plugins/spatial_editor_plugin.cpp msgid "Translate Snap:" -msgstr "移动å¸é™„:" +msgstr "转化å¸é™„:" #: editor/plugins/spatial_editor_plugin.cpp msgid "Rotate Snap (deg.):" @@ -7242,6 +7231,11 @@ msgid "Simplification: " msgstr "简å•化: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "扩展(åƒç´ ): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "扩展(åƒç´ ): " @@ -7254,14 +7248,12 @@ msgid "Settings:" msgstr "设置:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "No Frames Selected" -msgstr "最大化显示选ä¸èŠ‚ç‚¹" +msgstr "未选择帧" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Add %d Frame(s)" -msgstr "æ·»åŠ å¸§" +msgstr "æ·»åŠ %d帧" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Add Frame" @@ -7292,6 +7284,10 @@ msgid "(empty)" msgstr "(空)" #: editor/plugins/sprite_frames_editor_plugin.cpp +msgid "Move Frame" +msgstr "移动帧" + +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Animations:" msgstr "动画:" @@ -7340,24 +7336,20 @@ msgid "Select Frames" msgstr "选择帧" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Horizontal:" -msgstr "水平翻转" +msgstr "æ°´å¹³:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Vertical:" -msgstr "顶点" +msgstr "垂直:" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Select/Clear All Frames" -msgstr "全选" +msgstr "选择/清除所有帧" #: editor/plugins/sprite_frames_editor_plugin.cpp -#, fuzzy msgid "Create Frames from Sprite Sheet" -msgstr "从场景ä¸åˆ›å»º" +msgstr "从 Sprite Sheet ä¸åˆ›å»ºå¸§" #: editor/plugins/sprite_frames_editor_plugin.cpp msgid "SpriteFrames" @@ -7425,9 +7417,8 @@ msgid "Remove All" msgstr "移除全部" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Edit Theme" -msgstr "编辑主题..." +msgstr "编辑主题" #: editor/plugins/theme_editor_plugin.cpp msgid "Theme editing menu." @@ -7454,23 +7445,20 @@ msgid "Create From Current Editor Theme" msgstr "从当å‰ç¼–辑器主题模æ¿åˆ›å»º" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Toggle Button" -msgstr "é¼ æ ‡æŒ‰é”®" +msgstr "åˆ‡æ¢æŒ‰é’®" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Button" -msgstr "ä¸é”®" +msgstr "ä¸å¯ç”¨çš„æŒ‰é’®" #: editor/plugins/theme_editor_plugin.cpp msgid "Item" msgstr "项目(Item)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled Item" -msgstr "å·²ç¦ç”¨" +msgstr "ä¸å¯ç”¨çš„项目" #: editor/plugins/theme_editor_plugin.cpp msgid "Check Item" @@ -7489,23 +7477,20 @@ msgid "Checked Radio Item" msgstr "已选å•选项目" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Named Sep." -msgstr "称为 Sep。" +msgstr "命å为 Sep。" #: editor/plugins/theme_editor_plugin.cpp msgid "Submenu" msgstr "åèœå•(Submenu)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 1" -msgstr "项目(Item)" +msgstr "å项目1" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Subitem 2" -msgstr "项目(Item)" +msgstr "å项目2" #: editor/plugins/theme_editor_plugin.cpp msgid "Has" @@ -7516,9 +7501,8 @@ msgid "Many" msgstr "许多(Many)" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Disabled LineEdit" -msgstr "å·²ç¦ç”¨" +msgstr "行编辑ä¸å¯ç”¨" #: editor/plugins/theme_editor_plugin.cpp msgid "Tab 1" @@ -7533,9 +7517,8 @@ msgid "Tab 3" msgstr "分页3" #: editor/plugins/theme_editor_plugin.cpp -#, fuzzy msgid "Editable Item" -msgstr "å…许编辑åå™èŠ‚ç‚¹" +msgstr "å¯ç¼–辑节点" #: editor/plugins/theme_editor_plugin.cpp msgid "Subtree" @@ -7615,49 +7598,50 @@ msgid "Disable Autotile" msgstr "ç¦ç”¨æ™ºèƒ½ç£è´´(Autotile)" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Enable Priority" -msgstr "编辑ç£è´´ä¼˜å…ˆçº§" +msgstr "å¯ç”¨ä¼˜å…ˆçº§" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Filter tiles" +msgstr "过滤tiles" + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "为æ¤tilemapæä¾›tileset资æºä»¥ä½¿ç”¨å…¶tile。" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "绘制ç£è´´" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "" "Shift+LMB: Line Draw\n" "Shift+Ctrl+LMB: Rectangle Paint" msgstr "" -"Shift+é¼ æ ‡å³é”®ï¼šç»˜åˆ¶ç›´çº¿\n" -"Shift+Ctrl+é¼ æ ‡å³é”®ï¼šç»˜åˆ¶çŸ©å½¢" +"Shift+é¼ æ ‡å·¦é”®ï¼šç»˜åˆ¶ç›´çº¿\n" +"Shift+Ctrl+é¼ æ ‡å·¦é”®ï¼šç»˜åˆ¶çŸ©å½¢" #: editor/plugins/tile_map_editor_plugin.cpp msgid "Pick Tile" msgstr "选择ç£è´´" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Left" msgstr "å‘左旋转" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Rotate Right" msgstr "å‘峿—‹è½¬" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Flip Horizontally" msgstr "水平翻转" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Flip Vertically" msgstr "垂直翻转" #: editor/plugins/tile_map_editor_plugin.cpp -#, fuzzy msgid "Clear Transform" msgstr "æ¸…é™¤å˜æ¢" @@ -7694,44 +7678,36 @@ msgid "Select the previous shape, subtile, or Tile." msgstr "选择上一个形状,åç –å—ï¼Œæˆ–ç –å—。" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Region Mode" -msgstr "è¿è¡Œæ¨¡å¼:" +msgstr "区域模å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Collision Mode" -msgstr "æ’值模å¼" +msgstr "碰撞模å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Occlusion Mode" -msgstr "ç¼–è¾‘é®æŒ¡å¤šè¾¹å½¢" +msgstr "鮿Œ¡æ¨¡å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Navigation Mode" -msgstr "创建导航Mesh(ç½‘æ ¼)" +msgstr "导航模å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Bitmask Mode" -msgstr "旋转模å¼" +msgstr "ä½æŽ©ç æ¨¡å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Priority Mode" -msgstr "导出模å¼:" +msgstr "优先模å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Icon Mode" -msgstr "移动画布" +msgstr "å›¾æ ‡æ¨¡å¼" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "Z Index Mode" -msgstr "移动画布" +msgstr "Z索引模å¼" #: editor/plugins/tile_set_editor_plugin.cpp msgid "Copy bitmask." @@ -7768,6 +7744,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "显示ç£è´´çš„åå—ï¼ˆæŒ‰ä½ Alt 键)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "åœ¨å·¦ä¾§é¢æ¿ä¸Šæ·»åŠ æˆ–é€‰æ‹©çº¹ç†ä»¥ç¼–辑与其绑定的图å—。" + +#: editor/plugins/tile_set_editor_plugin.cpp msgid "Remove selected texture? This will remove all tiles which use it." msgstr "åˆ é™¤é€‰å®šçš„çº¹ç†ï¼Ÿè¿™å°†åˆ 除使用它的所有ç£è´´ã€‚" @@ -7816,7 +7797,6 @@ msgid "Delete polygon." msgstr "åˆ é™¤å¤šè¾¹å½¢ã€‚" #: editor/plugins/tile_set_editor_plugin.cpp -#, fuzzy msgid "" "LMB: Set bit on.\n" "RMB: Set bit off.\n" @@ -7825,7 +7805,8 @@ msgid "" msgstr "" "é¼ æ ‡å·¦é”®ï¼š å¯ç”¨æ¯”特。\n" "é¼ æ ‡å³é”®ï¼š 关闿¯”特。\n" -"点击å¦ä¸€ä¸ªç£è´´è¿›è¡Œç¼–辑。" +"Shift+é¼ æ ‡å·¦é”®: 设置通é…符ä½.\n" +"点击å¦ä¸€ä¸ªç“¦ç‰‡è¿›è¡Œç¼–辑。" #: editor/plugins/tile_set_editor_plugin.cpp msgid "" @@ -7936,28 +7917,115 @@ msgstr "ä¸èƒ½ä¿®æ”¹è¯¥å±žæ€§ã€‚" msgid "TileSet" msgstr "ç –å—集" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "没有å¯ç”¨çš„VCSæ’件。" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "错误" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "没有æä¾›æäº¤æ¶ˆæ¯" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "æ²¡æœ‰æ–‡ä»¶æ·»åŠ åˆ°èˆžå°" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit" +msgstr "æäº¤" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "VCSæ’件未åˆå§‹åŒ–" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "版本控制系统" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "åˆå§‹åŒ–" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "æš‚å˜åŒºåŸŸ" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect new changes" +msgstr "检测新å˜åŒ–" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Changes" +msgstr "修改" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "已修改" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Renamed" +msgstr "æ›´å" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Deleted" +msgstr "å·²åˆ é™¤" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Typechange" +msgstr "类型更改" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage Selected" +msgstr "舞å°é€‰å®š" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Stage All" +msgstr "所有舞å°" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "æ·»åŠ æäº¤æ¶ˆæ¯" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Commit Changes" +msgstr "æäº¤å˜æ›´" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "状æ€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "在æäº¤åˆ°æœ€æ–°ç‰ˆæœ¬ä¹‹å‰æŸ¥çœ‹æ–‡ä»¶å·®å¼‚" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "没有文件差异处于活动状æ€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "检测文件差异的å˜åŒ–" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "åªä½¿ç”¨GLES3" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" +msgid "Add Output" +msgstr "æ·»åŠ è¾“å‡º+" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy -msgid "Add output +" -msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" - -#: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar" -msgstr "缩放:" +msgstr "æ ‡é‡" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Vector" -msgstr "å‘é‡" +msgstr "Vector" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Boolean" @@ -7965,52 +8033,48 @@ msgstr "布尔值" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy +msgid "Sampler" +msgstr "音效" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add input port" -msgstr "æ·»åŠ è¾“å…¥äº‹ä»¶" +msgstr "æ·»åŠ è¾“å…¥ç«¯å£" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Add output port" msgstr "å¢žåŠ è¾“å‡ºç«¯å£" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port type" -msgstr "修改默认值" +msgstr "更改输入端å£ç±»åž‹" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port type" -msgstr "修改默认值" +msgstr "更改输出端å£ç±»åž‹" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change input port name" -msgstr "更改输入åç§°" +msgstr "更改输入端å£åç§°" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Change output port name" -msgstr "更改输入åç§°" +msgstr "更改输出端å£åç§°" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove input port" -msgstr "移除顶点" +msgstr "移除输入端å£" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Remove output port" -msgstr "移除顶点" +msgstr "移除输出端å£" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Set expression" -msgstr "更改表达å¼" +msgstr "设置表达å¼" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Resize VisualShader node" -msgstr "å¯è§†ç€è‰²å™¨" +msgstr "调整å¯è§†ç€è‰²å™¨èŠ‚ç‚¹" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Set Uniform Name" @@ -8054,28 +8118,24 @@ msgid "Light" msgstr "ç¯å…‰" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Show resulted shader code." -msgstr "新节点" +msgstr "显示生æˆçš„ç€è‰²å™¨ä»£ç 。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Create Shader Node" -msgstr "新节点" +msgstr "创建ç€è‰²å™¨èŠ‚ç‚¹" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color function." -msgstr "转到函数" +msgstr "颜色函数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Color operator." msgstr "颜色è¿ç®—符。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Grayscale function." -msgstr "创建方法" +msgstr "ç°åº¦åŠŸèƒ½ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Converts HSV vector to RGB equivalent." @@ -8086,27 +8146,22 @@ msgid "Converts RGB vector to HSV equivalent." msgstr "å°†RGBå‘é‡è½¬æ¢ä¸ºç‰æ•ˆçš„HSVå‘é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Sepia function." -msgstr "é‡å‘½å函数" +msgstr "棕è¤è‰²åŠŸèƒ½ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Burn operator." -msgstr "Burn æ“作。" +msgstr "烧录è¿ç®—符。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Darken operator." -msgstr "Darken è¿ç®—符。" +msgstr "å˜æš—è¿ç®—符。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Difference operator." -msgstr "ä»…ä¸åŒ" +msgstr "差异è¿ç®—符。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Dodge operator." msgstr "Dodge è¿ç®—符。" @@ -8135,26 +8190,24 @@ msgid "Color constant." msgstr "颜色常é‡." #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Color uniform." -msgstr "颜色å‡åŒ€ã€‚" +msgstr "颜色统一。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the boolean result of the %s comparison between two parameters." msgstr "è¿”å›žä¸¤ä¸ªå‚æ•°ä¹‹é—´ï¼…s比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Equal (==)" -msgstr "ç‰äºŽ (==)" +msgstr "ç‰äºŽï¼ˆ==)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than (>)" -msgstr "大于 (>)" +msgstr "大于(>)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Greater Than or Equal (>=)" -msgstr "大于ç‰äºŽ (>=)" +msgstr "大于或ç‰äºŽï¼ˆ> =)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8163,18 +8216,16 @@ msgid "" msgstr "如果æä¾›çš„æ ‡é‡ç›¸ç‰ï¼Œæ›´å¤§æˆ–æ›´å°ï¼Œåˆ™è¿”回关è”çš„å‘é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns the boolean result of the comparison between INF and a scalar " "parameter." -msgstr "返回 INF å’Œæ ‡é‡å‚数之间比较的布尔结果。" +msgstr "返回INFå’Œæ ‡é‡å‚数之间比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Returns the boolean result of the comparison between NaN and a scalar " "parameter." -msgstr "返回 NaN å’Œæ ‡é‡å‚数之间比较的布尔结果。" +msgstr "返回NaNå’Œæ ‡é‡å‚数之间比较的布尔结果。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than (<)" @@ -8182,17 +8233,21 @@ msgstr "å°äºŽ (*)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Less Than or Equal (<=)" -msgstr "å°äºŽæˆ–ç‰äºŽ (+)" +msgstr "å°äºŽæˆ–ç‰äºŽï¼ˆ<=)" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Not Equal (!=)" -msgstr "ä¸ç‰äºŽï¼ˆ!=)" +msgstr "ä¸ç‰äºŽï¼ˆï¼=)" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "Returns an associated vector if the provided boolean value is true or false." -msgstr "如果æä¾›çš„布尔值为true或false,则返回关è”çš„å‘é‡ã€‚" +msgstr "如果æä¾›çš„布尔值是true或false,则返回关è”çš„å‘é‡ã€‚" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "如果æä¾›çš„布尔值是true或false,则返回关è”çš„å‘é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." @@ -8229,23 +8284,20 @@ msgid "'%s' input parameter for fragment and light shader modes." msgstr "'%s'为片段和ç¯å…‰ç€è‰²å™¨æ¨¡æ¿çš„è¾“å…¥å‚æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for fragment shader mode." -msgstr "'%s' 为片段ç€è‰²å™¨æ¨¡å¼çš„è¾“å…¥å‚æ•°ã€‚" +msgstr "片段ç€è‰²å™¨æ¨¡å¼çš„'ï¼…s'è¾“å…¥å‚æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for light shader mode." -msgstr "'%s' 为ç¯å…‰ç€è‰²å™¨æ¨¡æ¿çš„è¾“å…¥å‚æ•°ã€‚" +msgstr "ç¯å…‰ç€è‰²å™¨æ¨¡å¼çš„'ï¼…s'è¾“å…¥å‚æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "'%s' input parameter for vertex shader mode." -msgstr "'%s' 为顶点ç€è‰²å™¨æ¨¡æ¿çš„è¾“å…¥å‚æ•°ã€‚" +msgstr "顶点ç€è‰²å™¨æ¨¡å¼çš„'ï¼…s'è¾“å…¥å‚æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "'%s' input parameter for vertex and fragment shader mode." -msgstr "'%s'为顶点和片段ç€è‰²å™¨æ¨¡æ¿çš„è¾“å…¥å‚æ•°ã€‚" +msgstr "用于顶点和片段ç€è‰²å™¨æ¨¡å¼çš„'ï¼…s'è¾“å…¥å‚æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar function." @@ -8430,7 +8482,6 @@ msgid "Returns the square root of the parameter." msgstr "è¿”å›žå‚æ•°çš„å¹³æ–¹æ ¹ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" "\n" @@ -8444,7 +8495,6 @@ msgstr "" "回Hermiteå¤šé¡¹å¼æ’值的值。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), scalar(x) ).\n" "\n" @@ -8463,14 +8513,12 @@ msgid "Returns the hyperbolic tangent of the parameter." msgstr "è¿”å›žå‚æ•°çš„åŒæ›²æ£åˆ‡å€¼ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Finds the truncated value of the parameter." msgstr "æŸ¥æ‰¾å‚æ•°çš„æˆªæ–值。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Adds scalar to scalar." -msgstr "呿 ‡é‡æ·»åŠ æ ‡é‡ã€‚" +msgstr "å°†æ ‡é‡æ·»åŠ åˆ°æ ‡é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Divides scalar by scalar." @@ -8481,23 +8529,20 @@ msgid "Multiplies scalar by scalar." msgstr "å°†æ ‡é‡ä¹˜ä»¥æ ‡é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Returns the remainder of the two scalars." -msgstr "è¿”å›žä¸¤ä¸ªæ ‡é‡çš„剩余部分。" +msgstr "è¿”å›žä¸¤ä¸ªæ ‡é‡çš„余数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Subtracts scalar from scalar." msgstr "ä»Žæ ‡é‡ä¸å‡åŽ»æ ‡é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar constant." -msgstr "修改Scalar常é‡ç³»æ•°" +msgstr "æ ‡é‡å¸¸æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Scalar uniform." -msgstr "修改Uniform Scalar" +msgstr "æ ‡é‡ä¸€è‡´ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Perform the cubic texture lookup." @@ -8508,24 +8553,20 @@ msgid "Perform the texture lookup." msgstr "æ‰§è¡Œç«‹æ–¹ä½“çº¹ç†æŸ¥æ‰¾ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Cubic texture uniform lookup." -msgstr "修改Uniform纹ç†" +msgstr "立方纹ç†å‡åŒ€æŸ¥æ‰¾ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup." -msgstr "修改Uniform纹ç†" +msgstr "2D 纹ç†å‡åŒ€æŸ¥æ‰¾ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "2D texture uniform lookup with triplanar." -msgstr "修改Uniform纹ç†" +msgstr "2D 纹ç†å‡åŒ€æŸ¥æ‰¾ä¸Žä¸‰å¹³é¢ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform function." -msgstr "å˜æ¢å¯¹è¯æ¡†..." +msgstr "转æ¢å‡½æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8537,6 +8578,9 @@ msgid "" "whose number of rows is the number of components in 'c' and whose number of " "columns is the number of components in 'r'." msgstr "" +"计算一对矢é‡çš„外部乘积。 OuterProduct å°†ç¬¬ä¸€ä¸ªå‚æ•°\"c\"视为列矢é‡ï¼ˆåŒ…å«ä¸€åˆ—çš„" +"çŸ©é˜µï¼‰ï¼Œå°†ç¬¬äºŒä¸ªå‚æ•°\"r\"视为行矢é‡ï¼ˆå…·æœ‰ä¸€è¡Œçš„矩阵),并执行线性代数矩阵乘以" +"\"c = r\",生æˆè¡Œæ•°ä¸º\"c\"ä¸çš„组件,其列数是\"r\"ä¸çš„组件数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes transform from four vectors." @@ -8567,24 +8611,20 @@ msgid "Multiplies vector by transform." msgstr "ç”¨å˜æ¢ä¹˜ä»¥å‘é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform constant." -msgstr "å·²å¿½ç•¥å˜æ¢ã€‚" +msgstr "å˜æ¢å¸¸æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Transform uniform." -msgstr "å·²å¿½ç•¥å˜æ¢ã€‚" +msgstr "å˜æ¢ç»Ÿä¸€ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector function." -msgstr "对函数的赋值。" +msgstr "å‘é‡åŠŸèƒ½ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector operator." -msgstr "更改 Vec è¿ç®—符(Vec Operator)" +msgstr "å‘é‡è¿ç®—符。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Composes vector from three scalars." @@ -8625,9 +8665,8 @@ msgid "Linear interpolation between two vectors." msgstr "两个å‘é‡ä¹‹é—´çš„线性æ’值。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Linear interpolation between two vectors using scalar." -msgstr "两个å‘é‡ä¹‹é—´çš„线性æ’值。" +msgstr "ä½¿ç”¨æ ‡é‡çš„两个矢é‡ä¹‹é—´çš„线性æ’值。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "Calculates the normalize product of vector." @@ -8652,7 +8691,6 @@ msgid "Returns the vector that points in the direction of refraction." msgstr "è¿”å›žæŒ‡å‘æŠ˜å°„æ–¹å‘的矢é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n" "\n" @@ -8660,13 +8698,11 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" -"\n" -"如果'x'å°äºŽ'edge0'则返回0.0,如果x大于'edge1'则返回1.0。å¦åˆ™åœ¨0.0å’Œ1.0之间返" -"回Hermiteå¤šé¡¹å¼æ’值的值。" +"平滑æ¥å‡½æ•°ï¼ˆçŸ¢é‡ï¼ˆè¾¹ç¼˜0)ã€çŸ¢é‡ï¼ˆè¾¹ç¼˜1)ã€çŸ¢é‡ï¼ˆx))。 如果\"x\"å°äºŽ" +"\"edge0\",则返回 0.0;如果\"x\"大于\"edge1\",则返回 0.0。å¦åˆ™ï¼Œè¿”回值将使用" +"赫密特多项å¼åœ¨ 0.0 å’Œ 1.0 之间æ’值。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n" "\n" @@ -8674,13 +8710,12 @@ msgid "" "'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 " "using Hermite polynomials." msgstr "" -"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n" +"smoothstepå‡½æ•°ï¼ˆæ ‡é‡ï¼ˆedge0ï¼‰ã€æ ‡é‡ï¼ˆedge1)ã€å‘é‡ï¼ˆx))。\n" "\n" "如果'x'å°äºŽ'edge0'则返回0.0,如果x大于'edge1'则返回1.0。å¦åˆ™åœ¨0.0å’Œ1.0之间返" "回Hermiteå¤šé¡¹å¼æ’值的值。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( vector(edge), vector(x) ).\n" "\n" @@ -8691,7 +8726,6 @@ msgstr "" "如果'x'å°äºŽ'edge'则返回0.0,å¦åˆ™è¿”回1.0。" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "" "Step function( scalar(edge), vector(x) ).\n" "\n" @@ -8722,14 +8756,12 @@ msgid "Subtracts vector from vector." msgstr "从å‘é‡ä¸å‡åŽ»å‘é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector constant." -msgstr "修改Vec常é‡ç³»æ•°" +msgstr "å‘é‡å¸¸æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp -#, fuzzy msgid "Vector uniform." -msgstr "对uniform的赋值。" +msgstr "å‘é‡ä¸€è‡´ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8744,7 +8776,7 @@ msgstr "" msgid "" "Returns falloff based on the dot product of surface normal and view " "direction of camera (pass associated inputs to it)." -msgstr "" +msgstr "æ ¹æ®è¡¨é¢æ³•线和相机视图方å‘的点积返回衰å‡ï¼ˆå°†ç›¸å…³è¾“å…¥ä¼ é€’ç»™å®ƒï¼‰ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" @@ -8752,50 +8784,52 @@ msgid "" "shader. You can place various function definitions inside and call it later " "in the Expressions. You can also declare varyings, uniforms and constants." msgstr "" +"自定义的Godotç€è‰²å™¨è¯è¨€è¡¨è¾¾å¼ï¼Œä½äºŽç”Ÿæˆçš„ç€è‰²å™¨é¡¶éƒ¨ã€‚您å¯ä»¥åœ¨å…¶ä¸æ”¾ç½®å„ç§å‡½æ•°" +"定义,然åŽåœ¨è¡¨è¾¾å¼ä¸è°ƒç”¨å®ƒã€‚您还å¯ä»¥å£°æ˜Žå˜åŒ–,统一和常é‡ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Scalar derivative function." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰æ ‡é‡å¯¼æ•°å‡½æ•°ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(Fragment/Light mode only) Vector derivative function." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/ç¯å…‰æ¨¡å¼ï¼‰çŸ¢é‡å¯¼æ•°åŠŸèƒ½ã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'x' using local " "differencing." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆçŸ¢é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„“ xâ€ä¸çš„导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'x' using local " "differencing." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰ä½¿ç”¨æœ¬åœ°å·®åˆ†çš„“ xâ€ä¸çš„导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Derivative in 'y' using local " "differencing." -msgstr "" +msgstr "(仅适用于片段/光照模å¼ï¼‰ï¼ˆçŸ¢é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„'y'导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Derivative in 'y' using local " "differencing." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„'y'导数。" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and " "'y'." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆå‘é‡ï¼‰â€œ xâ€å’Œâ€œ yâ€ä¸çš„ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "" "(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and " "'y'." -msgstr "" +msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰â€œ xâ€å’Œâ€œ yâ€ä¸çš„ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚" #: editor/plugins/visual_shader_editor_plugin.cpp msgid "VisualShader" @@ -8819,7 +8853,7 @@ msgstr "从列表ä¸åˆ 除补ä¸''%s'?" #: editor/project_export.cpp msgid "Delete preset '%s'?" -msgstr "åˆ é™¤å½“å‰çš„ '%s' ?" +msgstr "åˆ é™¤é¢„è®¾çš„â€œï¼…sâ€ï¼Ÿ" #: editor/project_export.cpp msgid "" @@ -8840,7 +8874,7 @@ msgstr "" #: editor/project_export.cpp msgid "Release" -msgstr "å‘行" +msgstr "å‘布" #: editor/project_export.cpp msgid "Exporting All" @@ -8852,7 +8886,7 @@ msgstr "指定导出路径ä¸å˜åœ¨ï¼š" #: editor/project_export.cpp msgid "Export templates for this platform are missing/corrupted:" -msgstr "没有æ¤å¹³å°çš„导出模æ¿:" +msgstr "该平å°çš„导出模æ¿ä¸¢å¤±/æŸå:" #: editor/project_export.cpp msgid "Presets" @@ -8891,22 +8925,26 @@ msgid "Resources to export:" msgstr "导出的资æº:" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" -msgstr "导出éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "ç›é€‰å¯¼å‡ºéžèµ„æºæ–‡ä»¶ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt)" #: editor/project_export.cpp +#, fuzzy msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" -msgstr "排除导出的éžèµ„æºæ–‡ä»¶ç›é€‰ï¼ˆä½¿ç”¨è‹±æ–‡é€—å·åˆ†éš”,如:*.json,*.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" +msgstr "è¿‡æ»¤ä»Žé¡¹ç›®ä¸æŽ’é™¤æ–‡ä»¶ï¼ˆä»¥é€—å·åˆ†éš”,例如:*。json,*。txt)" #: editor/project_export.cpp msgid "Patches" -msgstr "Patch" +msgstr "è¡¥ä¸" #: editor/project_export.cpp msgid "Make Patch" -msgstr "制作Patch" +msgstr "制作补ä¸" #: editor/project_export.cpp msgid "Features" @@ -8926,7 +8964,7 @@ msgstr "脚本" #: editor/project_export.cpp msgid "Script Export Mode:" -msgstr "脚本导出方å¼:" +msgstr "脚本导出模å¼:" #: editor/project_export.cpp msgid "Text" @@ -8938,7 +8976,7 @@ msgstr "编译" #: editor/project_export.cpp msgid "Encrypted (Provide Key Below)" -msgstr "使用下列密ç åŠ å¯†" +msgstr "åŠ å¯†ï¼ˆåœ¨ä¸‹é¢æä¾›å¯†é’¥ï¼‰" #: editor/project_export.cpp msgid "Invalid Encryption Key (must be 64 characters long)" @@ -8946,7 +8984,7 @@ msgstr "æ— æ•ˆçš„åŠ å¯†å¯†é’¥ï¼ˆé•¿åº¦å¿…é¡»ä¸º64个å—符)" #: editor/project_export.cpp msgid "Script Encryption Key (256-bits as hex):" -msgstr "脚本密匙(256ä½16进制ç ):" +msgstr "è„šæœ¬åŠ å¯†å¯†é’¥ï¼ˆ256ä½16进制ç ):" #: editor/project_export.cpp msgid "Export PCK/Zip" @@ -8962,7 +9000,7 @@ msgstr "全部导出" #: editor/project_export.cpp msgid "Export templates for this platform are missing:" -msgstr "没有下列平å°çš„导出模æ¿:" +msgstr "该平å°çš„导出模æ¿ä¸¢å¤±ï¼š" #: editor/project_export.cpp msgid "Manage Export Templates" @@ -8970,11 +9008,11 @@ msgstr "管ç†å¯¼å‡ºæ¨¡æ¿" #: editor/project_export.cpp msgid "Export With Debug" -msgstr "导出为调试" +msgstr "使用调试导出" #: editor/project_manager.cpp msgid "The path does not exist." -msgstr "路径ä¸å˜åœ¨ã€‚" +msgstr "该路径ä¸å˜åœ¨ã€‚" #: editor/project_manager.cpp msgid "Invalid '.zip' project file, does not contain a 'project.godot' file." @@ -9010,7 +9048,7 @@ msgstr "æ— æ³•åˆ›å»ºæ–‡ä»¶å¤¹ã€‚" #: editor/project_manager.cpp msgid "There is already a folder in this path with the specified name." -msgstr "å·²å˜åœ¨ä¸Žç»™å®šå称相åŒçš„目录。" +msgstr "æ¤è·¯å¾„ä¸å·²ç»æœ‰ä¸€ä¸ªå…·æœ‰æŒ‡å®šå称的文件夹。" #: editor/project_manager.cpp msgid "It would be a good idea to name your project." @@ -9037,7 +9075,7 @@ msgstr "æ— æ³•åœ¨é¡¹ç›®ç›®å½•ä¸‹åˆ›å»ºproject.godot文件。" #: editor/project_manager.cpp msgid "The following files failed extraction from package:" -msgstr "æå–以下文件失败:" +msgstr "ä»¥ä¸‹æ–‡ä»¶æ— æ³•ä»ŽåŒ…ä¸æå–:" #: editor/project_manager.cpp msgid "Rename Project" @@ -9124,13 +9162,12 @@ msgid "Unnamed Project" msgstr "未命å项目" #: editor/project_manager.cpp -#, fuzzy msgid "Missing Project" -msgstr "导入现有项目" +msgstr "缺少项目" #: editor/project_manager.cpp msgid "Error: Project is missing on the filesystem." -msgstr "" +msgstr "错误:文件系统上丢失项目。" #: editor/project_manager.cpp msgid "Can't open project at '%s'." @@ -9141,7 +9178,6 @@ msgid "Are you sure to open more than one project?" msgstr "æ‚¨ç¡®å®šè¦æ‰“开多个项目å—?" #: editor/project_manager.cpp -#, fuzzy msgid "" "The following project settings file does not specify the version of Godot " "through which it was created.\n" @@ -9153,15 +9189,14 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"以下项目设置文件没有指定创建它的Godot版本:\n" +"以下项目设置文件未指定创建它的 Godot 版本。\n" "\n" "%s\n" "\n" -"å¦‚æžœä½ ç»§ç»æ‰“开它,它将被转æ¢ä¸ºGodot的当å‰é…ç½®æ–‡ä»¶æ ¼å¼ã€‚\n" -"è¦å‘Šï¼šæ‚¨å°†æ— 法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开项目。" +"å¦‚æžœç»§ç»æ‰“开它,它将转æ¢ä¸ºæˆˆå¤šçš„当å‰é…ç½®æ–‡ä»¶æ ¼å¼ã€‚ è¦å‘Šï¼š æ‚¨å°†æ— æ³•å†ä½¿ç”¨ä»¥å‰" +"版本的引擎打开项目。" #: 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" @@ -9172,10 +9207,9 @@ msgid "" "Warning: You won't be able to open the project with previous versions of the " "engine anymore." msgstr "" -"以下项目设置文件是由旧的引擎版本生æˆçš„,需è¦ä¸ºæ¤ç‰ˆæœ¬è½¬æ¢ï¼š\n" +"以下项目设置文件由较旧的引擎版本生æˆï¼Œéœ€è¦ä¸ºæ¤ç‰ˆæœ¬è¿›è¡Œè½¬æ¢ï¼š\n" "%s\n" -"是å¦è¦è½¬æ¢å®ƒï¼Ÿ\n" -"è¦å‘Šï¼šæ‚¨å°†æ— 法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开项目。" +" 是å¦è¦è½¬æ¢å®ƒï¼Ÿ è¦å‘Šï¼š æ‚¨å°†æ— æ³•å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开项目。" #: editor/project_manager.cpp msgid "" @@ -9184,14 +9218,13 @@ msgid "" msgstr "项目设置是由更新的引擎版本创建的,其设置与æ¤ç‰ˆæœ¬ä¸å…¼å®¹ã€‚" #: 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" -"ä½ ä¹Ÿå¯ä»¥ç¨åŽåœ¨é¡¹ç›®è®¾ç½®çš„Application分类下修改。" +"æ— æ³•è¿è¡Œé¡¹ç›®ï¼šæœªå®šä¹‰ä¸»åœºæ™¯ã€‚ \n" +"请编辑项目并在“应用程åºâ€ç±»åˆ«ä¸‹çš„“项目设置â€ä¸è®¾ç½®ä¸»åœºæ™¯ã€‚" #: editor/project_manager.cpp msgid "" @@ -9202,55 +9235,46 @@ msgstr "" "请编辑项目导入åˆå§‹åŒ–资æºã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "Are you sure to run %d projects at once?" -msgstr "æ‚¨ç¡®å®šè¦æ‰§è¡Œå¤šä¸ªé¡¹ç›®å—?" +msgstr "您确定è¦ç«‹å³è¿è¡Œï¼…d个项目å—?" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove %d projects from the list?\n" "The project folders' contents won't be modified." -msgstr "移除æ¤é¡¹ç›®ï¼ˆé¡¹ç›®çš„æ–‡ä»¶ä¸å—å½±å“)" +msgstr "从列表ä¸åˆ 除%d个项目? 项目文件夹的内容ä¸ä¼šè¢«ä¿®æ”¹ã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove this project from the list?\n" "The project folder's contents won't be modified." -msgstr "移除æ¤é¡¹ç›®ï¼ˆé¡¹ç›®çš„æ–‡ä»¶ä¸å—å½±å“)" +msgstr "从列表ä¸åˆ 除该项目? 项目文件夹的内容ä¸ä¼šè¢«ä¿®æ”¹ã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "" "Remove all missing projects from the list?\n" "The project folders' contents won't be modified." -msgstr "移除æ¤é¡¹ç›®ï¼ˆé¡¹ç›®çš„æ–‡ä»¶ä¸å—å½±å“)" +msgstr "从列表ä¸åˆ 除所有丢失的项目? 项目文件夹的内容ä¸ä¼šè¢«ä¿®æ”¹ã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "" "Language changed.\n" "The interface will update after restarting the editor or project manager." -msgstr "" -"è¯è¨€å·²æ›´æ”¹ã€‚\n" -"用户界é¢å°†åœ¨ä¸‹æ¬¡ç¼–辑器或项目管ç†å™¨å¯åŠ¨æ—¶æ›´æ–°ã€‚" +msgstr "è¯è¨€å·²æ›´æ”¹ã€‚ 釿–°å¯åŠ¨ç¼–è¾‘å™¨æˆ–é¡¹ç›®ç®¡ç†å™¨åŽï¼Œç•Œé¢å°†æ›´æ–°ã€‚" #: editor/project_manager.cpp -#, fuzzy msgid "" "Are you sure to scan %s folders for existing Godot projects?\n" "This could take a while." -msgstr "æ‚¨ç¡®è®¤è¦æ‰«æ%s目录下现有的Godot项目å—?" +msgstr "æ‚¨ç¡®å®šè¦æ‰«æï¼…s文件夹ä¸çš„现有Godot项目å—? è¿™å¯èƒ½éœ€è¦ä¸€æ®µæ—¶é—´ã€‚" #: editor/project_manager.cpp msgid "Project Manager" msgstr "项目管ç†å™¨" #: editor/project_manager.cpp -#, fuzzy msgid "Projects" -msgstr "项目" +msgstr "工程" #: editor/project_manager.cpp msgid "Scan" @@ -9265,9 +9289,8 @@ msgid "New Project" msgstr "新建" #: editor/project_manager.cpp -#, fuzzy msgid "Remove Missing" -msgstr "移除顶点" +msgstr "åˆ é™¤ç¼ºå¤±" #: editor/project_manager.cpp msgid "Templates" @@ -9282,13 +9305,12 @@ msgid "Can't run project" msgstr "æ— æ³•è¿è¡Œé¡¹ç›®" #: 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 "" -"æ‚¨ç›®å‰æ²¡æœ‰ä»»ä½•项目。\n" -"是å¦è¦æ‰“开资æºå•†åº—æµè§ˆå®˜æ–¹æ ·ä¾‹é¡¹ç›®ï¼Ÿ" +"æ‚¨ç›®å‰æ²¡æœ‰ä»»ä½•项目。 \n" +"æ‚¨æƒ³åœ¨ç´ æèµ„æºåº“䏿µè§ˆæ£å¼çš„示例项目å—?" #: editor/project_settings_editor.cpp msgid "Key " @@ -9314,9 +9336,8 @@ msgstr "" "æ— æ•ˆçš„æ“作å称。æ“作åä¸èƒ½ä¸ºç©ºï¼Œä¹Ÿä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者空å—符串" #: editor/project_settings_editor.cpp -#, fuzzy msgid "An action with the name '%s' already exists." -msgstr "动作%så·²å˜åœ¨ï¼" +msgstr "å为'%s'çš„æ“作已å˜åœ¨ã€‚" #: editor/project_settings_editor.cpp msgid "Rename Input Action Event" @@ -9481,6 +9502,10 @@ msgid "Settings saved OK." msgstr "ä¿å˜è®¾ç½®æˆåŠŸã€‚" #: editor/project_settings_editor.cpp +msgid "Moved Input Action Event" +msgstr "输入动作事件" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "é‡å†™åŠŸèƒ½" @@ -9533,9 +9558,8 @@ msgid "Override For..." msgstr "é‡å†™çš„......" #: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp -#, fuzzy msgid "The editor must be restarted for changes to take effect." -msgstr "编辑器需è¦é‡å¯ä»¥è®©ä¿®æ”¹ç”Ÿæ•ˆ" +msgstr "å¿…é¡»é‡æ–°å¯åŠ¨ç¼–è¾‘å™¨æ‰èƒ½ä½¿æ›´æ”¹ç”Ÿæ•ˆã€‚" #: editor/project_settings_editor.cpp msgid "Input Map" @@ -9547,7 +9571,7 @@ msgstr "动作:" #: editor/project_settings_editor.cpp msgid "Action" -msgstr "动作" +msgstr "动作(``Action``)" #: editor/project_settings_editor.cpp msgid "Deadzone" @@ -9579,7 +9603,7 @@ msgstr "é‡å®šå‘" #: editor/project_settings_editor.cpp msgid "Resources:" -msgstr "资æº:" +msgstr "资æºï¼š" #: editor/project_settings_editor.cpp msgid "Remaps by Locale:" @@ -9594,14 +9618,12 @@ msgid "Locales Filter" msgstr "区域ç›é€‰å™¨" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show All Locales" -msgstr "显示所有区域设置" +msgstr "显示所有è¯è¨€è®¾ç½®" #: editor/project_settings_editor.cpp -#, fuzzy msgid "Show Selected Locales Only" -msgstr "仅显示选定的区域设置" +msgstr "仅显示选定的è¯è¨€çŽ¯å¢ƒ" #: editor/project_settings_editor.cpp msgid "Filter mode:" @@ -9613,13 +9635,17 @@ msgstr "区域:" #: editor/project_settings_editor.cpp msgid "AutoLoad" -msgstr "è‡ªåŠ¨åŠ è½½(AutoLoad)" +msgstr "è‡ªåŠ¨åŠ è½½" #: editor/project_settings_editor.cpp msgid "Plugins" msgstr "æ’ä»¶" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "预设..." + +#: editor/property_editor.cpp msgid "Zero" msgstr "置零" @@ -9684,7 +9710,6 @@ msgid "Suffix" msgstr "åŽç¼€" #: editor/rename_dialog.cpp -#, fuzzy msgid "Advanced Options" msgstr "高级选项" @@ -9788,10 +9813,6 @@ msgstr "转为大写" msgid "Reset" msgstr "é‡ç½®" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "错误" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "é‡è®¾çˆ¶èŠ‚ç‚¹" @@ -9847,6 +9868,10 @@ msgid "Instance Scene(s)" msgstr "实例化场景" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "替æ¢ä¸ºåˆ†æ”¯åœºæ™¯" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "实例化å场景" @@ -9887,8 +9912,20 @@ msgid "Make node as Root" msgstr "å°†èŠ‚ç‚¹è®¾ç½®ä¸ºæ ¹èŠ‚ç‚¹" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" -msgstr "确定è¦åˆ 除节点å—?" +msgid "Delete %d nodes?" +msgstr "åˆ é™¤ï¼…d个节点?" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "åˆ é™¤æ ¹èŠ‚ç‚¹â€œï¼…sâ€ï¼Ÿ" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" +msgstr "åˆ é™¤èŠ‚ç‚¹â€œï¼…sâ€åŠå…¶å节点?" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\"?" +msgstr "åˆ é™¤èŠ‚ç‚¹â€œï¼…sâ€ï¼Ÿ" #: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." @@ -9909,12 +9946,11 @@ msgid "" msgstr "ç¦ç”¨â€œå¯ç¼–辑实例â€å°†å¯¼è‡´èŠ‚ç‚¹çš„æ‰€æœ‰å±žæ€§æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "å…许编辑åå™èŠ‚ç‚¹" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" -msgstr "åŠ è½½ä¸ºå ä½ç¬¦" +#, fuzzy +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." +msgstr "ç¦ç”¨â€œå¯ç¼–辑实例â€å°†å¯¼è‡´èŠ‚ç‚¹çš„æ‰€æœ‰å±žæ€§æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚" #: editor/scene_tree_dock.cpp msgid "Make Local" @@ -9941,9 +9977,8 @@ msgid "User Interface" msgstr "用户界é¢" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Other Node" -msgstr "åˆ é™¤èŠ‚ç‚¹" +msgstr "其他节点" #: editor/scene_tree_dock.cpp msgid "Can't operate on nodes from a foreign scene!" @@ -9962,9 +9997,8 @@ msgid "Remove Node(s)" msgstr "移除节点" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Change type of node(s)" -msgstr "更改输入åç§°" +msgstr "更改节点的类型" #: editor/scene_tree_dock.cpp msgid "" @@ -9989,31 +10023,32 @@ msgid "Clear Inheritance" msgstr "清除继承" #: editor/scene_tree_dock.cpp -#, fuzzy +msgid "Editable Children" +msgstr "å…许编辑åå™èŠ‚ç‚¹" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "åŠ è½½ä¸ºå ä½ç¬¦" + +#: editor/scene_tree_dock.cpp msgid "Open Documentation" -msgstr "打开Godot文档" +msgstr "打开文档" #: editor/scene_tree_dock.cpp msgid "Add Child Node" msgstr "æ·»åŠ å节点" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Expand/Collapse All" -msgstr "全部折å " +msgstr "展开/折å 全部" #: editor/scene_tree_dock.cpp msgid "Change Type" msgstr "更改类型" #: editor/scene_tree_dock.cpp -msgid "Extend Script" -msgstr "打开脚本" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" -msgstr "é‡è®¾çˆ¶èŠ‚ç‚¹" +msgstr "釿–°åˆ†é…到新节点" #: editor/scene_tree_dock.cpp msgid "Make Scene Root" @@ -10036,9 +10071,8 @@ msgid "Delete (No Confirm)" msgstr "ç¡®è®¤åˆ é™¤" #: editor/scene_tree_dock.cpp -#, fuzzy msgid "Add/Create a New Node." -msgstr "æ·»åŠ /创建节点" +msgstr "æ·»åŠ /创建新节点。" #: editor/scene_tree_dock.cpp msgid "" @@ -10071,55 +10105,42 @@ msgid "Toggle Visible" msgstr "切æ¢å¯è§æ€§" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Unlock Node" -msgstr "选择节点" +msgstr "è§£é”节点" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Button Group" -msgstr "按键 7" +msgstr "按钮组" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "(Connecting From)" -msgstr "连接错误" +msgstr "(连接从)" #: editor/scene_tree_editor.cpp msgid "Node configuration warning:" msgstr "节点é…ç½®è¦å‘Š:" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s) and %s group(s).\n" "Click to show signals dock." -msgstr "" -"节点具有信å·è¿žæŽ¥å’Œåˆ†ç»„。\n" -"å•å‡»ä»¥æ˜¾ç¤ºä¿¡å·æŽ¥å£ã€‚" +msgstr "节点具有%s个连接和%s个组。 å•击以显示信å·åº•座。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node has %s connection(s).\n" "Click to show signals dock." -msgstr "" -"节点有信å·è¿žæŽ¥ã€‚\n" -"å•å‡»æŸ¥çœ‹ä¿¡å·æ 。" +msgstr "节点具有%s个连接。 å•击以显示信å·åº•座。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "" "Node is in %s group(s).\n" "Click to show groups dock." -msgstr "" -"分组ä¸çš„节点。\n" -"å•击显示分组æ 。" +msgstr "节点ä½äºŽ %s 组ä¸ã€‚ å•击以显示分组æ 。" #: editor/scene_tree_editor.cpp -#, fuzzy msgid "Open Script:" -msgstr "打开脚本" +msgstr "打开脚本:" #: editor/scene_tree_editor.cpp msgid "" @@ -10170,39 +10191,32 @@ msgid "Select a Node" msgstr "选择一个节点" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is empty." -msgstr "文件路径为空" +msgstr "路径为空。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Filename is empty." -msgstr "文件å为空" +msgstr "文件å为空。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Path is not local." -msgstr "必须是项目内的路径" +msgstr "è·¯å¾„ä¸æ˜¯æœ¬åœ°çš„。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid base path." -msgstr "çˆ¶è·¯å¾„éžæ³•" +msgstr "æ— æ•ˆçš„åŸºæœ¬è·¯å¾„ã€‚" #: editor/script_create_dialog.cpp -#, fuzzy msgid "A directory with the same name exists." -msgstr "å˜åœ¨åŒå目录" +msgstr "å˜åœ¨å…·æœ‰ç›¸åŒå称的目录。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid extension." -msgstr "扩展åéžæ³•" +msgstr "æ‰©å±•åæ— 效。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Wrong extension chosen." -msgstr "选择了错误的扩展å" +msgstr "选择了错误的扩展å。" #: editor/script_create_dialog.cpp msgid "Error loading template '%s'" @@ -10217,16 +10231,14 @@ msgid "Error loading script from %s" msgstr "从%såŠ è½½è„šæœ¬å‡ºé”™" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Overrides" -msgstr "覆盖" +msgstr "é‡å†™" #: editor/script_create_dialog.cpp msgid "N/A" msgstr "N/A" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Open Script / Choose Location" msgstr "打开脚本/选择ä½ç½®" @@ -10235,63 +10247,50 @@ msgid "Open Script" msgstr "打开脚本" #: editor/script_create_dialog.cpp -#, fuzzy msgid "File exists, it will be reused." -msgstr "文件已å˜åœ¨, 将被é‡ç”¨" +msgstr "文件å˜åœ¨ï¼Œå°†è¢«é‡ç”¨ã€‚" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid class name." -msgstr "ç±»åéžæ³•" +msgstr "æ— æ•ˆçš„ç±»åˆ«å称。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Invalid inherited parent name or path." -msgstr "éžæ³•的基类å称或脚本路径" +msgstr "æ— æ•ˆçš„ç»§æ‰¿çˆ¶å称或路径。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Script is valid." -msgstr "脚本å¯ç”¨" +msgstr "脚本有效。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Allowed: a-z, A-Z, 0-9, _ and ." -msgstr "ä»…å…许使用: a-z, A-Z, 0-9 或 _" +msgstr "å…许:a-z,a-z,0-9,u和。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Built-in script (into scene file)." -msgstr "内置脚本(ä¿å˜åœ¨åœºæ™¯æ–‡ä»¶ä¸)" +msgstr "内置脚本(到场景文件ä¸ï¼‰ã€‚" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will create a new script file." -msgstr "创建新脚本" +msgstr "将创建一个新的脚本文件。" #: editor/script_create_dialog.cpp -#, fuzzy msgid "Will load an existing script file." -msgstr "åŠ è½½çŽ°æœ‰è„šæœ¬" +msgstr "å°†åŠ è½½çŽ°æœ‰çš„è„šæœ¬æ–‡ä»¶ã€‚" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "è¯è¨€" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "继承自" - -#: editor/script_create_dialog.cpp -msgid "Class Name" +#, fuzzy +msgid "Class Name:" msgstr "ç±»å" #: editor/script_create_dialog.cpp -msgid "Template" +#, fuzzy +msgid "Template:" msgstr "模æ¿" #: editor/script_create_dialog.cpp -msgid "Built-in Script" +#, fuzzy +msgid "Built-in Script:" msgstr "内置脚本" #: editor/script_create_dialog.cpp @@ -10307,26 +10306,54 @@ msgid "Bytes:" msgstr "å—节:" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "æ ˆè¿½è¸ª" +msgid "Warning:" +msgstr "è¦å‘Šï¼š" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." -msgstr "从列表ä¸é€‰å–一个或多个项目以显示图形。" +msgid "Error:" +msgstr "错误:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error" +msgstr "C ++错误" + +#: editor/script_editor_debugger.cpp +msgid "C++ Error:" +msgstr "C++错误:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source" +msgstr "C++æºç¨‹åº" + +#: editor/script_editor_debugger.cpp +msgid "Source:" +msgstr "æºæ–‡ä»¶:" + +#: editor/script_editor_debugger.cpp +msgid "C++ Source:" +msgstr "C++æºç¨‹åºï¼š" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" +msgstr "æ ˆè¿½è¸ª" #: editor/script_editor_debugger.cpp msgid "Errors" msgstr "错误" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "å进程已连接" +msgid "Child process connected." +msgstr "å进程已连接。" #: editor/script_editor_debugger.cpp msgid "Copy Error" msgstr "å¤åˆ¶é”™è¯¯ä¿¡æ¯" #: editor/script_editor_debugger.cpp +msgid "Skip Breakpoints" +msgstr "跳过æ–点" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "编辑上一个实例" @@ -10343,6 +10370,10 @@ msgid "Profiler" msgstr "性能分æž" #: editor/script_editor_debugger.cpp +msgid "Network Profiler" +msgstr "网络é…ç½®" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "监视" @@ -10355,6 +10386,10 @@ msgid "Monitors" msgstr "显示" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "从列表ä¸é€‰å–一个或多个项目以显示图形。" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "å 用显å˜çš„资æºåˆ—表:" @@ -10404,7 +10439,7 @@ msgstr "ä»Žåœºæ™¯æ ‘è®¾ç½®" #: editor/script_editor_debugger.cpp msgid "Export measures as CSV" -msgstr "" +msgstr "导出为CSVæ ¼å¼" #: editor/settings_config_dialog.cpp msgid "Erase Shortcut" @@ -10540,22 +10575,17 @@ msgstr "动æ€é“¾æŽ¥åº“" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Enabled GDNative Singleton" -msgstr "" +msgstr "å¯ç”¨gdnative singleton" #: modules/gdnative/gdnative_library_singleton_editor.cpp -#, fuzzy msgid "Disabled GDNative Singleton" -msgstr "ç¦ç”¨è‡ªåŠ¨æ›´æ–°" +msgstr "ç¦ç”¨çš„ GDNative å•例" #: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Library" msgstr "库" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "状æ€" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "库: " @@ -10564,6 +10594,10 @@ msgid "GDNative" msgstr "GDNative" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "预期为长度为1çš„å—符串(一个å—符)。" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "Step傿•°ä¸º 0 ï¼" @@ -10632,9 +10666,8 @@ msgid "GridMap Fill Selection" msgstr "å¡«å……é€‰æ‹©ç½‘æ ¼åœ°å›¾" #: modules/gridmap/grid_map_editor_plugin.cpp -#, fuzzy msgid "GridMap Paste Selection" -msgstr "åˆ é™¤é€‰æ‹©çš„GridMap" +msgstr "GridMap粘贴选择" #: modules/gridmap/grid_map_editor_plugin.cpp msgid "GridMap Paint" @@ -10716,6 +10749,14 @@ msgstr "GridMap设置" msgid "Pick Distance:" msgstr "拾å–è·ç¦»:" +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Filter meshes" +msgstr "è¿‡æ»¤ç½‘æ ¼" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "呿¤GridMapæä¾›MeshLibrary资æºä»¥ä½¿ç”¨å…¶ç½‘æ ¼ã€‚" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "ç±»åä¸èƒ½æ˜¯ä¿ç•™å…³é”®å—" @@ -10836,28 +10877,28 @@ msgid "Set Variable Type" msgstr "设置å˜é‡ç±»åž‹" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Override an existing built-in function." -msgstr "与引擎内置类型å称冲çªã€‚" +msgstr "覆盖现有的内置函数。" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new function." -msgstr "新建一个四边形。" +msgstr "创建一个新函数。" #: modules/visual_script/visual_script_editor.cpp msgid "Variables:" msgstr "å˜é‡ï¼š" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new variable." -msgstr "新建一个四边形。" +msgstr "创建一个新å˜é‡ã€‚" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "ä¿¡å·:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Create a new signal." -msgstr "创建新多边形。" +msgstr "创建一个新信å·ã€‚" #: modules/visual_script/visual_script_editor.cpp msgid "Name is not a valid identifier:" @@ -10884,6 +10925,11 @@ msgid "Add Function" msgstr "æ·»åŠ å‡½æ•°" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "移除输入端å£" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "æ·»åŠ å˜é‡" @@ -10892,6 +10938,26 @@ msgid "Add Signal" msgstr "æ·»åŠ ä¿¡å·" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "æ·»åŠ è¾“å…¥ç«¯å£" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "å¢žåŠ è¾“å‡ºç«¯å£" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "移除输入端å£" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "移除输出端å£" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "更改表达å¼" @@ -10932,10 +10998,20 @@ msgid "Add Preload Node" msgstr "æ·»åŠ Preload节点" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "ä»Žæ ‘ä¸æ·»åŠ èŠ‚ç‚¹" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "æ·»åŠ å±žæ€§Getter" @@ -10960,6 +11036,11 @@ msgid "Connect Nodes" msgstr "连接节点" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Disconnect Nodes" +msgstr "æ–å¼€Graph Node连接" + +#: modules/visual_script/visual_script_editor.cpp msgid "Connect Node Data" msgstr "连接节点数æ®" @@ -10992,6 +11073,28 @@ msgid "Paste VisualScript Nodes" msgstr "粘贴 VisualScript 节点" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Can't create function with a function node." +msgstr "æ— æ³•å¤åˆ¶å‡½æ•°èŠ‚ç‚¹ã€‚" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "é‡å‘½å函数" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "åˆ é™¤å‡½æ•°" @@ -11012,21 +11115,21 @@ msgid "Editing Signal:" msgstr "编辑信å·:" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" -msgstr "基础类型:" +msgid "Make Tool:" +msgstr "制作工具:" #: modules/visual_script/visual_script_editor.cpp msgid "Members:" msgstr "æˆå‘˜ï¼š" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "有效节点:" +#, fuzzy +msgid "function_name" +msgstr "函数:" #: modules/visual_script/visual_script_editor.cpp -#, fuzzy msgid "Select or create a function to edit its graph." -msgstr "选择或创建一个函数æ¥ç¼–辑" +msgstr "选择或创建一个函数æ¥ç¼–辑其图形。" #: modules/visual_script/visual_script_editor.cpp msgid "Delete Selected" @@ -11045,6 +11148,16 @@ msgid "Cut Nodes" msgstr "剪切节点" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Make Function" +msgstr "é‡å‘½å函数" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "刷新" + +#: modules/visual_script/visual_script_editor.cpp msgid "Edit Member" msgstr "编辑æˆå‘˜" @@ -11139,6 +11252,10 @@ msgid "The package must have at least one '.' separator." msgstr "包必须至少有一个“.â€åˆ†éš”符。" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "从列表ä¸é€‰æ‹©è®¾å¤‡" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "未在编辑器设置ä¸é…ç½®ADB坿‰§è¡Œæ–‡ä»¶ã€‚" @@ -11152,16 +11269,17 @@ msgstr "未在编辑器设置或预设ä¸é…置调试密钥库。" #: platform/android/export/export.cpp msgid "Custom build requires a valid Android SDK path in Editor Settings." -msgstr "" +msgstr "自定义构建需è¦åœ¨â€œç¼–辑器设置â€ä¸ä½¿ç”¨æœ‰æ•ˆçš„Android SDK路径。" #: platform/android/export/export.cpp msgid "Invalid Android SDK path for custom build in Editor Settings." -msgstr "" +msgstr "用于“编辑器设置â€ä¸è‡ªå®šä¹‰æž„建的Android SDKè·¯å¾„æ˜¯æ— æ•ˆçš„ã€‚" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." -msgstr "" +"Android build template not installed in the project. Install it from the " +"Project menu." +msgstr "未在项目ä¸å®‰è£…Android构建模æ¿ã€‚从项目èœå•安装它。" #: platform/android/export/export.cpp msgid "Invalid public key for APK expansion." @@ -11176,6 +11294,7 @@ msgid "" "Trying to build from a custom built template, but no version info for it " "exists. Please reinstall from the 'Project' menu." msgstr "" +"å°è¯•ä»Žè‡ªå®šä¹‰æž„å»ºçš„æ¨¡æ¿æž„建,但是ä¸å˜åœ¨å…¶ç‰ˆæœ¬ä¿¡æ¯ã€‚请从“项目â€èœå•ä¸é‡æ–°å®‰è£…。" #: platform/android/export/export.cpp msgid "" @@ -11184,20 +11303,26 @@ msgid "" " Godot Version: %s\n" "Please reinstall Android build template from 'Project' menu." msgstr "" +"Android构建版本ä¸åŒ¹é…:\n" +" 安装的模æ¿ï¼š\n" +" Godot版本:%s\n" +"请从“项目â€èœå•ä¸é‡æ–°å®‰è£…Android构建模æ¿ã€‚" #: platform/android/export/export.cpp msgid "Building Android Project (gradle)" -msgstr "" +msgstr "构建android项目(gradle)" #: platform/android/export/export.cpp msgid "" "Building of Android project failed, check output for the error.\n" "Alternatively visit docs.godotengine.org for Android build documentation." msgstr "" +"Android项目构建失败,请检查输出以了解错误。 或者访问docs.godotengine.org获å–" +"Android构建文档。" #: platform/android/export/export.cpp msgid "No build apk generated at: " -msgstr "" +msgstr "在以下ä½ç½®æœªç”Ÿæˆæž„建APK: " #: platform/iphone/export/export.cpp msgid "Identifier is missing." @@ -11237,6 +11362,10 @@ msgid "Required icon is not specified in the preset." msgstr "é¢„è®¾ä¸æœªæŒ‡å®šå¿…éœ€çš„å›¾æ ‡ã€‚" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "在æµè§ˆå™¨ä¸è¿è¡Œ" @@ -11313,13 +11442,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)." msgstr "å¯åŠ¨ç”»é¢å›¾ç‰‡å°ºå¯¸æ— 效(应为620x300)。" #: scene/2d/animated_sprite.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite to display frames." msgstr "" -"SpriteFrames资æºå¿…须是通过AnimatedSprite节点的frames属性创建的,å¦åˆ™æ— 法显示" -"动画帧。" +"必须创建SpriteFrames资æºï¼Œæˆ–在“ Framesâ€å±žæ€§ä¸è®¾ç½®SpriteFrames资æºï¼Œä»¥ä¾¿" +"AnimatedSprite显示帧。" #: scene/2d/canvas_modulate.cpp msgid "" @@ -11374,11 +11502,10 @@ msgid "" msgstr "CPUParticles2D动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å动画â€çš„CanvasItemMaterial。" #: scene/2d/light_2d.cpp -#, fuzzy msgid "" "A texture with the shape of the light must be supplied to the \"Texture\" " "property." -msgstr "光照的形状与纹ç†å¿…é¡»æä¾›ç»™çº¹ç†å±žæ€§ã€‚" +msgstr "必须将具有ç¯å…‰å½¢çŠ¶çš„çº¹ç†æä¾›ç»™â€œçº¹ç†â€ï¼ˆTexture)属性。" #: scene/2d/light_occluder_2d.cpp msgid "" @@ -11386,9 +11513,8 @@ msgid "" msgstr "æ¤é®å…‰ä½“必须设置é®å…‰å½¢çжæ‰èƒ½èµ·åˆ°é®å…‰ä½œç”¨ã€‚" #: scene/2d/light_occluder_2d.cpp -#, fuzzy msgid "The occluder polygon for this occluder is empty. Please draw a polygon." -msgstr "æ¤é®å…‰ä½“çš„é®å…‰å½¢çŠ¶ä¸ºç©ºï¼Œè¯·ä¸ºå…¶ç»˜åˆ¶ä¸€ä¸ªé®å…‰å½¢çжï¼" +msgstr "æ¤å°å µå™¨çš„å°å µå™¨å¤šè¾¹å½¢ä¸ºç©ºã€‚请绘制一个多边形。" #: scene/2d/navigation_polygon.cpp msgid "" @@ -11465,55 +11591,47 @@ msgid "" msgstr "该骨骼没有一个åˆé€‚çš„ REST 姿势。请到 Skeleton2D 节点ä¸è®¾ç½®ä¸€ä¸ªã€‚" #: scene/2d/tile_map.cpp -#, fuzzy msgid "" "TileMap with Use Parent on needs a parent CollisionObject2D to give shapes " "to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, " "KinematicBody2D, etc. to give them a shape." msgstr "" -"CollisionShape2D类型节点åªèƒ½ä¸ºCollisionObject2D的派生类æä¾›ç¢°æ’žå½¢çŠ¶æ•°æ®ï¼Œè¯·å°†" -"其放在Area2Dã€StaticBody2Dã€RigidBody2D或者是KinematicBody2D节点下。" +"å¯ç”¨äº†â€œä½¿ç”¨çˆ¶çº§â€çš„TileMap需è¦çˆ¶çº§CollisionObject2Dæ‰èƒ½æä¾›å½¢çŠ¶ã€‚è¯·ä½¿ç”¨å®ƒä½œä¸º" +"Area2D,StaticBody2D,RigidBody2D,KinematicBody2Dç‰çš„å项æ¥èµ‹äºˆå®ƒä»¬å½¢çŠ¶ã€‚" #: scene/2d/visibility_notifier_2d.cpp -#, fuzzy msgid "" "VisibilityEnabler2D works best when used with the edited scene root directly " "as parent." -msgstr "VisibilityEnable2Dç±»åž‹çš„èŠ‚ç‚¹ç”¨äºŽåœºæ™¯çš„æ ¹èŠ‚ç‚¹æ‰èƒ½èŽ·å¾—æœ€å¥½çš„æ•ˆæžœã€‚" +msgstr "å½“ç›´æŽ¥å°†å·²ç¼–è¾‘çš„åœºæ™¯æ ¹ä½œä¸ºçˆ¶çº§ä½¿ç”¨æ—¶ï¼ŒVisibilityEnabler2D效果最佳。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRCamera must have an ARVROrigin node as its parent." -msgstr "ARVRCamera 必须处于 ARVROrigin 节点之下" +msgstr "ARVRCamera必须将ARVROrigin节点作为其父节点。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRController must have an ARVROrigin node as its parent." -msgstr "ARVRController 必须处于 ARVROrigin 节点之下" +msgstr "ARVRController必须具有ARVROrigin节点作为其父节点。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The controller ID must not be 0 or this controller won't be bound to an " "actual controller." -msgstr "控制器 id å¿…é¡»ä¸ä¸º 0 æˆ–æ¤æŽ§åˆ¶å™¨å°†ä¸ç»‘定到实际的控制器" +msgstr "控制器IDä¸èƒ½ä¸º0,å¦åˆ™æ¤æŽ§åˆ¶å™¨å°†ä¸ä¼šç»‘定到实际的控制器。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVRAnchor must have an ARVROrigin node as its parent." -msgstr "ARVRAnchor 必须处于 ARVROrigin 节点之下" +msgstr "ARVRAnchor必须具有ARVROrigin节点作为其父节点。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "" "The anchor ID must not be 0 or this anchor won't be bound to an actual " "anchor." -msgstr "锚 id å¿…é¡»ä¸æ˜¯ 0 或这个锚点将ä¸ç»‘定到实际的锚" +msgstr "锚点IDä¸èƒ½ä¸º0,å¦åˆ™æ¤é”šç‚¹å°†ä¸ä¼šç»‘定到实际的锚点。" #: scene/3d/arvr_nodes.cpp -#, fuzzy msgid "ARVROrigin requires an ARVRCamera child node." -msgstr "ARVROrigin 必须拥有 ARVRCamera å节点" +msgstr "ARVROrigin需è¦ä¸€ä¸ªARVRCameraå节点。" #: scene/3d/baked_lightmap.cpp msgid "%d%%" @@ -11571,13 +11689,10 @@ msgstr "" "在Areaã€StaticBodyã€RigidBody或KinematicBody节点下。" #: scene/3d/collision_shape.cpp -#, fuzzy msgid "" "A shape must be provided for CollisionShape to function. Please create a " "shape resource for it." -msgstr "" -"CollisionShape节点必须拥有一个形状æ‰èƒ½è¿›è¡Œç¢°æ’žæ£€æµ‹å·¥ä½œï¼Œè¯·ä¸ºå®ƒåˆ›å»ºä¸€ä¸ªå½¢çŠ¶èµ„" -"æºï¼" +msgstr "å¿…é¡»æä¾›å½¢çŠ¶ä»¥ä½¿CollisionShape起作用。请为其创建形状资æºã€‚" #: scene/3d/collision_shape.cpp msgid "" @@ -11590,11 +11705,12 @@ msgid "Nothing is visible because no mesh has been assigned." msgstr "æ— ç‰©å¯è§ï¼Œå› ä¸ºæ²¡æœ‰æŒ‡å®šç½‘æ ¼ã€‚" #: scene/3d/cpu_particles.cpp -#, fuzzy msgid "" "CPUParticles animation requires the usage of a SpatialMaterial whose " "Billboard Mode is set to \"Particle Billboard\"." -msgstr "CPUParticles动画需è¦ä½¿ç”¨å¯åŠ¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" +msgstr "" +"CPUParticles动画需è¦ä½¿ç”¨SpatialMaterial,其“公告牌模å¼â€è®¾ç½®ä¸ºâ€œ Particle " +"Billboardâ€ã€‚" #: scene/3d/gi_probe.cpp msgid "Plotting Meshes" @@ -11638,23 +11754,22 @@ msgid "" msgstr "ç²’åä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshe)指定到绘制通é“(draw passes)。" #: scene/3d/particles.cpp -#, fuzzy msgid "" "Particles animation requires the usage of a SpatialMaterial whose Billboard " "Mode is set to \"Particle Billboard\"." -msgstr "ç²’å动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œBillboard Particlesâ€çš„SpatialMaterial。" +msgstr "" +"ç²’å动画需è¦ä½¿ç”¨SpatialMaterial,其“公告牌模å¼â€è®¾ç½®ä¸ºâ€œ Particle Billboardâ€ã€‚" #: scene/3d/path.cpp msgid "PathFollow only works when set as a child of a Path node." msgstr "PathFollowç±»åž‹çš„èŠ‚ç‚¹åªæœ‰ä½œä¸ºPath类型节点的å节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" #: scene/3d/path.cpp -#, fuzzy msgid "" "PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its " "parent Path's Curve resource." msgstr "" -"PathFollow ROTATION_ORIENTED需è¦åœ¨å…¶çˆ¶è·¯å¾„的曲线资æºä¸å¯ç”¨â€œUp Vectorâ€ã€‚" +"PathFollowçš„ROTATION_ORIENTEDè¦æ±‚在其父路径的Curve资æºä¸å¯ç”¨â€œå‘上矢é‡â€ã€‚" #: scene/3d/physics_body.cpp msgid "" @@ -11667,16 +11782,14 @@ msgstr "" "建议您修改å节点的碰撞形状。" #: scene/3d/remote_transform.cpp -#, fuzzy msgid "" "The \"Remote Path\" property must point to a valid Spatial or Spatial-" "derived node to work." -msgstr "path属性必须指å‘ä¸€ä¸ªåˆæ³•çš„Spatial节点æ‰èƒ½æ£å¸¸å·¥ä½œã€‚" +msgstr "“远程路径â€å±žæ€§å¿…é¡»æŒ‡å‘æœ‰æ•ˆçš„Spatial或Spatial派生的节点æ‰èƒ½å·¥ä½œã€‚" #: scene/3d/soft_body.cpp -#, fuzzy msgid "This body will be ignored until you set a mesh." -msgstr "这个物体将被忽略,除éžè®¾ç½®ä¸€ä¸ªç½‘æ ¼" +msgstr "åœ¨è®¾ç½®ç½‘æ ¼ä¹‹å‰ï¼Œå°†å¿½ç•¥è¯¥å®žä½“。" #: scene/3d/soft_body.cpp msgid "" @@ -11688,13 +11801,11 @@ msgstr "" "建议修改å节点的碰撞体形状尺寸。" #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the \"Frames\" property in " "order for AnimatedSprite3D to display frames." msgstr "" -"SpriteFrame资æºå¿…须是通过AnimatedSprite3D节点的Frames属性创建的,å¦åˆ™æ— 法显示" -"动画帧。" +"必须在“framesâ€å±žæ€§ä¸åˆ›å»ºæˆ–设置spriteframes资æºï¼Œä»¥ä¾¿animatedsprite3d显示帧。" #: scene/3d/vehicle_body.cpp msgid "" @@ -11745,9 +11856,8 @@ msgid "Nothing connected to input '%s' of node '%s'." msgstr "没有任何物体连接到节点 '%s' 的输入 '%s' 。" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "No root AnimationNode for the graph is set." -msgstr "å›¾è¡¨æ²¡æœ‰è®¾ç½®åŠ¨ç”»èŠ‚ç‚¹ä½œä¸ºæ ¹èŠ‚ç‚¹ã€‚" +msgstr "æ²¡æœ‰ä¸ºå›¾è®¾ç½®æ ¹AnimationNode。" #: scene/animation/animation_tree.cpp msgid "Path to an AnimationPlayer node containing animations is not set." @@ -11758,9 +11868,8 @@ msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node." msgstr "åŠ¨ç”»æ’æ”¾å™¨çš„è·¯å¾„æ²¡æœ‰åŠ è½½ä¸€ä¸ª AnimationPlayer 节点。" #: scene/animation/animation_tree.cpp -#, fuzzy msgid "The AnimationPlayer root node is not a valid node." -msgstr "AnimationPlayer çš„æ ¹èŠ‚ç‚¹ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„节点。" +msgstr "AnimationPlayeræ ¹èŠ‚ç‚¹ä¸æ˜¯æœ‰æ•ˆèŠ‚ç‚¹ã€‚" #: scene/animation/animation_tree_player.cpp msgid "This node has been deprecated. Use AnimationTree instead." @@ -11771,14 +11880,12 @@ msgid "Pick a color from the screen." msgstr "从å±å¹•ä¸é€‰æ‹©ä¸€ç§é¢œè‰²ã€‚" #: scene/gui/color_picker.cpp -#, fuzzy msgid "HSV" msgstr "HSV" #: scene/gui/color_picker.cpp -#, fuzzy msgid "Raw" -msgstr "å航" +msgstr "原始" #: scene/gui/color_picker.cpp msgid "Switch between hexadecimal and code values." @@ -11789,14 +11896,13 @@ msgid "Add current color as a preset." msgstr "将当å‰é¢œè‰²æ·»åŠ ä¸ºé¢„è®¾ã€‚" #: scene/gui/container.cpp -#, fuzzy msgid "" "Container by itself serves no purpose unless a script configures its " "children placement behavior.\n" "If you don't intend to add a script, use a plain Control node instead." msgstr "" -"除éžåœ¨è„šæœ¬å†…é…置其å项的放置行为,å¦åˆ™å®¹å™¨æœ¬èº«æ²¡æœ‰ç”¨å¤„。\n" -"å¦‚æžœæ‚¨ä¸æ‰“ç®—æ·»åŠ è„šæœ¬ï¼Œè¯·ä½¿ç”¨ç®€å•的“控件â€èŠ‚ç‚¹ã€‚" +"除éžè„šæœ¬é…置其å代放置行为,å¦åˆ™å®¹å™¨æœ¬èº«æ²¡æœ‰ä»»ä½•作用。 å¦‚æžœæ‚¨ä¸æƒ³æ·»åŠ è„šæœ¬ï¼Œè¯·" +"改用普通的Control节点。" #: scene/gui/control.cpp msgid "" @@ -11815,29 +11921,26 @@ msgid "Please Confirm..." msgstr "请确认..." #: scene/gui/popup.cpp -#, fuzzy msgid "" "Popups will hide by default unless you call popup() or any of the popup*() " "functions. Making them visible for editing is fine, but they will hide upon " "running." msgstr "" -"Popupå¯¹è±¡é»˜è®¤ä¿æŒéšè—,除éžä½ 调用popup()或其他popup相关方法。编辑时å¯ä»¥è®©å®ƒä»¬" -"ä¿æŒå¯è§ï¼Œä½†å®ƒåœ¨è¿è¡Œæ—¶ä»¬ä¼šè‡ªåЍéšè—。" +"默认情况下,弹出窗å£å°†éšè—ï¼Œé™¤éžæ‚¨è°ƒç”¨popup()或任何popup *()函数。使它们" +"å¯è§ä»¥è¿›è¡Œç¼–辑是å¯ä»¥çš„,但是它们会在è¿è¡Œæ—¶éšè—。" #: scene/gui/range.cpp -#, fuzzy msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0." -msgstr "如果exp_edit为true, 则min_value必须为>0。" +msgstr "如果å¯ç”¨äº†â€œ Exp Editâ€ï¼Œåˆ™â€œ Min Valueâ€å¿…须大于0。" #: scene/gui/scroll_container.cpp -#, fuzzy msgid "" "ScrollContainer is intended to work with a single child control.\n" "Use a container as child (VBox, HBox, etc.), or a Control and set the custom " "minimum size manually." msgstr "" -"ScrollContainer旨在与å•ä¸ªåæŽ§ä»¶é…åˆä½¿ç”¨ã€‚\n" -"请使用Container(VBox,HBoxç‰ï¼‰ä½œä¸ºå…¶å控件或手动设置Control的最å°å°ºå¯¸ã€‚" +"ScrollContainer旨在与å•ä¸ªåæŽ§ä»¶ä¸€èµ·ä½¿ç”¨ã€‚ 使用容器作为å容器(VBox,HBoxç‰ï¼‰" +"或控件,并手动设置自定义最å°å°ºå¯¸ã€‚" #: scene/gui/tree.cpp msgid "(Other)" @@ -11860,10 +11963,6 @@ msgstr "" "示其内容,使其æˆä¸ºå控件的所以它å¯ä»¥æœ‰ä¸€ä¸ªå°ºå¯¸å¤§å°å€¼ã€‚å¦åˆ™è¯·è®¾ç½®ä¸ºRender " "target,并将其内部纹ç†åˆ†é…给一些节点以显示。" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "输入" - #: scene/resources/visual_shader_nodes.cpp msgid "Invalid source for preview." msgstr "预览的æºèµ„æºæ— 效。" @@ -11873,9 +11972,8 @@ msgid "Invalid source for shader." msgstr "éžæ³•çš„ç€è‰²å™¨æºã€‚" #: scene/resources/visual_shader_nodes.cpp -#, fuzzy msgid "Invalid comparison function for that type." -msgstr "è¯¥ç±»åž‹çš„æ¯”è¾ƒå‡½æ•°æ— æ•ˆã€‚" +msgstr "è¯¥ç±»åž‹çš„æ¯”è¾ƒåŠŸèƒ½æ— æ•ˆã€‚" #: servers/visual/shader_language.cpp msgid "Assignment to function." @@ -11893,6 +11991,64 @@ msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸æŒ‡å®šã€‚" msgid "Constants cannot be modified." msgstr "ä¸å…许修改常é‡ã€‚" +#~ msgid "Snap to Grid" +#~ msgstr "å¸é™„åˆ°ç½‘æ ¼" + +#~ msgid "Add input +" +#~ msgstr "æ·»åŠ è¾“å…¥+" + +#~ msgid "Language" +#~ msgstr "è¯è¨€" + +#~ msgid "Inherits" +#~ msgstr "继承自" + +#~ msgid "Base Type:" +#~ msgstr "基础类型:" + +#~ msgid "Available Nodes:" +#~ msgstr "有效节点:" + +#~ msgid "Input" +#~ msgstr "输入" + +#~ msgid "Properties:" +#~ msgstr "属性:" + +#~ msgid "Methods:" +#~ msgstr "方法:" + +#~ msgid "Theme Properties:" +#~ msgstr "Theme Properties:" + +#~ msgid "Enumerations:" +#~ msgstr "枚举:" + +#~ msgid "Constants:" +#~ msgstr "常é‡:" + +#~ msgid "Class Description:" +#~ msgstr "类说明:" + +#~ msgid "Property Descriptions:" +#~ msgstr "属性说明:" + +#~ msgid "Method Descriptions:" +#~ msgstr "方法说明:" + +#~ msgid "" +#~ "This will install the Android project for custom builds.\n" +#~ "Note that, in order to use it, it needs to be enabled per export preset." +#~ msgstr "" +#~ "将安装Android项目以进行自定义构建。\n" +#~ "注æ„,为了å¯ç”¨ï¼Œéœ€è¦ä¸ºæ¯ä¸ªå¯¼å‡ºé¢„设å¯ç”¨ã€‚" + +#~ msgid "Reverse sorting." +#~ msgstr "å呿ޒåºã€‚" + +#~ msgid "Delete Node(s)?" +#~ msgstr "确定è¦åˆ 除节点å—?" + #~ msgid "No Matches" #~ msgstr "æ— åŒ¹é…项" @@ -12071,9 +12227,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Go to parent folder" #~ msgstr "转到上层文件夹" -#~ msgid "Select device from the list" -#~ msgstr "从列表ä¸é€‰æ‹©è®¾å¤‡" - #~ msgid "Open Scene(s)" #~ msgstr "打开场景" @@ -12134,9 +12287,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Instance the selected scene(s) as child of the selected node." #~ msgstr "将选ä¸çš„场景实例为选ä¸èŠ‚ç‚¹çš„å节点。" -#~ msgid "Warnings:" -#~ msgstr "è¦å‘Šï¼š" - #~ msgid "Font Size:" #~ msgstr "å—体大å°:" @@ -12180,9 +12330,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Select a split to erase it." #~ msgstr "选择一个拆分以擦除它。" -#~ msgid "No name provided" -#~ msgstr "未æä¾›åç§°" - #~ msgid "Add Node.." #~ msgstr "æ·»åŠ èŠ‚ç‚¹.." @@ -12316,12 +12463,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Warning" #~ msgstr "è¦å‘Š" -#~ msgid "Error:" -#~ msgstr "错误:" - -#~ msgid "Function:" -#~ msgstr "函数:" - #~ msgid "Variable" #~ msgstr "å˜é‡" @@ -12388,9 +12529,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Connect Graph Nodes" #~ msgstr "连接Graph Node" -#~ msgid "Disconnect Graph Nodes" -#~ msgstr "æ–å¼€Graph Node连接" - #~ msgid "Remove Shader Graph Node" #~ msgstr "移除Graph Node节点" @@ -12400,9 +12538,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Duplicate Graph Node(s)" #~ msgstr "å¤åˆ¶Graph Node节点" -#~ msgid "Delete Shader Graph Node(s)" -#~ msgstr "åˆ é™¤Graph Node节点" - #~ msgid "Error: Cyclic Connection Link" #~ msgstr "错误:循环的连接" @@ -12846,9 +12981,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Pick New Name and Location For:" #~ msgstr "选择新å称和路径:" -#~ msgid "No files selected!" -#~ msgstr "没有选ä¸ä»»ä½•文件ï¼" - #~ msgid "Info" #~ msgstr "ä¿¡æ¯" @@ -13244,12 +13376,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Scaling to %s%%." #~ msgstr "缩放到%s%%。" -#~ msgid "Up" -#~ msgstr "å‘上" - -#~ msgid "Down" -#~ msgstr "å‘下" - #~ msgid "Bucket" #~ msgstr "æ¡¶(Bucket)" @@ -13538,9 +13664,6 @@ msgstr "ä¸å…许修改常é‡ã€‚" #~ msgid "Group" #~ msgstr "分组" -#~ msgid "Samples" -#~ msgstr "音效" - #~ msgid "Sample Conversion Mode: (.wav files):" #~ msgstr "éŸ³æ•ˆè½¬æ¢æ–¹å¼ï¼ˆ.wav文件):" diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po index 89e0d28fcf..2a343a6590 100644 --- a/editor/translations/zh_HK.po +++ b/editor/translations/zh_HK.po @@ -58,6 +58,34 @@ msgstr "" msgid "On call to '%s':" msgstr "" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +msgid "MiB" +msgstr "" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "" @@ -354,6 +382,7 @@ msgstr "新增 %d 個新軌跡並æ’入關éµå¹€ï¼Ÿ" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create" msgstr "新增" @@ -492,15 +521,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "å…¨é¸" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "ä¸é¸" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "ç”±Scene Treeé¸å–ä¸€å€‹å‹•ç•«æ’æ”¾å™¨ä»¥ç·¨è¼¯ç•¶ä¸å‹•畫。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -649,8 +673,9 @@ msgid "Scale Ratio:" msgstr "縮放比例:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" -msgstr "" +#, fuzzy +msgid "Select Tracks to Copy" +msgstr "鏿“‡æ¨¡å¼" #: editor/animation_track_editor.cpp editor/editor_log.cpp #: editor/editor_properties.cpp @@ -661,6 +686,11 @@ msgstr "" msgid "Copy" msgstr "複製" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "ä¸é¸" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -845,7 +875,8 @@ msgstr "連接訊號:" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -957,7 +988,8 @@ msgstr "æœå°‹ï¼š" msgid "Matches:" msgstr "å»åˆï¼š" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -994,7 +1026,7 @@ msgid "Resource" msgstr "資æº" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "路徑" @@ -1274,7 +1306,7 @@ msgid "Delete Bus Effect" msgstr "刪除é¸ä¸æª”案" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +msgid "Drag & drop to rearrange." msgstr "" #: editor/editor_audio_buses.cpp @@ -1489,7 +1521,9 @@ msgid "Add AutoLoad" msgstr "新增AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "路徑:" @@ -1544,7 +1578,7 @@ msgstr "新增資料夾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "å稱:" @@ -1727,6 +1761,7 @@ msgstr "" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "" @@ -1809,6 +1844,7 @@ msgid "New Folder..." msgstr "新增資料夾" #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "釿–°æ•´ç†" @@ -1966,6 +2002,7 @@ msgid "Class:" msgstr "" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "" @@ -1975,7 +2012,7 @@ msgstr "" #: editor/editor_help.cpp #, fuzzy -msgid "Brief Description:" +msgid "Brief Description" msgstr "簡述:" #: editor/editor_help.cpp @@ -1983,44 +2020,21 @@ msgid "Properties" msgstr "" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Methods" msgstr "鏿“‡æ¨¡å¼" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "鏿“‡æ¨¡å¼" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "篩é¸:" #: editor/editor_help.cpp #, fuzzy -msgid "Theme Properties:" -msgstr "篩é¸:" - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "訊號:" - -#: editor/editor_help.cpp -#, fuzzy msgid "Enumerations" msgstr "ç¿»è¯:" #: editor/editor_help.cpp -#, fuzzy -msgid "Enumerations:" -msgstr "ç¿»è¯:" - -#: editor/editor_help.cpp msgid "enum " msgstr "" @@ -2030,22 +2044,13 @@ msgid "Constants" msgstr "常數" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "æè¿°ï¼š" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "æè¿°ï¼š" - -#: editor/editor_help.cpp -#, fuzzy -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "é—œé–‰å ´æ™¯" #: editor/editor_help.cpp @@ -2061,11 +2066,6 @@ msgid "Property Descriptions" msgstr "簡述:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "簡述:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2077,11 +2077,6 @@ msgid "Method Descriptions" msgstr "æè¿°ï¼š" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "æè¿°ï¼š" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2156,8 +2151,8 @@ msgstr "" msgid "Copy Selection" msgstr "移除é¸é …" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2171,6 +2166,49 @@ msgstr "清空" msgid "Clear Output" msgstr "下一個腳本" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "åœæ¢" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "下載" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +msgid "Node" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2755,6 +2793,19 @@ msgstr "專案" msgid "Project Settings..." msgstr "專案è¨å®š" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "版本:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2969,10 +3020,6 @@ msgstr "æš«åœå ´æ™¯" msgid "Stop the scene." msgstr "åœæ¢é‹è¡Œå ´æ™¯" -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "åœæ¢" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "é‹è¡Œä¿®æ”¹çš„å ´æ™¯" @@ -3026,14 +3073,10 @@ msgid "Inspector" msgstr "監視器" #: editor/editor_node.cpp -msgid "Node" -msgstr "" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "" @@ -3052,15 +3095,21 @@ msgstr "管ç†è¼¸å‡ºç¯„本" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3128,6 +3177,11 @@ msgstr "è¦é›¢é–‹ç·¨è¼¯å™¨å—Ž?" msgid "Open the previous Editor" msgstr "" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "資æº" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "" @@ -3139,6 +3193,11 @@ msgstr "縮圖" #: editor/editor_plugin_settings.cpp #, fuzzy +msgid "Main Script:" +msgstr "下一個腳本" + +#: editor/editor_plugin_settings.cpp +#, fuzzy msgid "Edit Plugin" msgstr "æ’ä»¶" @@ -3169,11 +3228,6 @@ msgstr "狀態:" msgid "Edit:" msgstr "編輯" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "" @@ -3274,6 +3328,11 @@ msgstr "" msgid "New Script" msgstr "下一個腳本" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "下一個腳本" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "" @@ -3301,14 +3360,6 @@ msgstr "貼上" msgid "Convert To %s" msgstr "轉為..." -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "開啟資料夾" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "" @@ -4020,9 +4071,10 @@ msgstr "檔案" msgid "Import As:" msgstr "å°Žå…¥" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "é‡è¨ç¸®æ”¾æ¯”例" #: editor/import_dock.cpp #, fuzzy @@ -4157,7 +4209,7 @@ msgstr "æ’件列表:" msgid "Subfolder:" msgstr "" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp #, fuzzy msgid "Language:" msgstr "語言" @@ -4305,6 +4357,13 @@ msgstr "" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "開啟資料夾" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4491,6 +4550,7 @@ msgid "Change Animation Name:" msgstr "更改動畫å稱:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "刪除動畫?" @@ -4677,7 +4737,6 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "錯誤!" @@ -4855,6 +4914,8 @@ msgid "Current:" msgstr "" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "" @@ -5071,6 +5132,10 @@ msgid "All" msgstr "全部" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "å°Žå…¥" @@ -5085,11 +5150,6 @@ msgid "Sort:" msgstr "排åºï¼š" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "請求ä¸..." - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "分類:" @@ -5372,24 +5432,32 @@ msgid "Pan Mode" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "鏿“‡æ¨¡å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Toggle smart snapping." msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +msgid "Use Smart Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#, fuzzy -msgid "Snapping Options" -msgstr "é¸é …" +msgid "Toggle grid snapping." +msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snap to Grid" +msgid "Use Grid Snap" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Snapping Options" +msgstr "é¸é …" + +#: editor/plugins/canvas_item_editor_plugin.cpp msgid "Use Rotation Snap" msgstr "" @@ -5481,8 +5549,7 @@ msgid "View" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +msgid "Always Show Grid" msgstr "" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5753,6 +5820,10 @@ msgstr "" msgid "Hold Shift to edit tangents individually" msgstr "" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "" @@ -6402,6 +6473,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6457,7 +6532,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6568,6 +6644,11 @@ msgid "Find Next" msgstr "" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "篩é¸:" @@ -6679,11 +6760,11 @@ msgid "Toggle Scripts Panel" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" +msgid "Step Into" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Into" +msgid "Step Over" msgstr "" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp @@ -6769,7 +6850,7 @@ msgstr "é—œé–‰å ´æ™¯" msgid "Connections to method:" msgstr "連到:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "來æº:" @@ -6856,6 +6937,11 @@ msgstr "刪除" msgid "Cut" msgstr "剪下" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "å…¨é¸" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -6918,10 +7004,6 @@ msgid "Auto Indent" msgstr "" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "ç¯©é¸æª”案..." @@ -7262,6 +7344,11 @@ msgid "Freelook Speed Modifier" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "下滾" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7296,6 +7383,10 @@ msgid "Use Local Space" msgstr "" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "" @@ -7533,6 +7624,10 @@ msgid "Simplification: " msgstr "" #: editor/plugins/sprite_editor_plugin.cpp +msgid "Shrink (Pixels): " +msgstr "" + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "" @@ -7585,6 +7680,11 @@ msgstr "" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "移動模å¼" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "新增動畫" @@ -7920,6 +8020,15 @@ msgid "Enable Priority" msgstr "檔案" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ç¯©é¸æª”案..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "" @@ -8064,6 +8173,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "åªé™é¸ä¸" @@ -8241,20 +8355,118 @@ msgstr "ä¸èƒ½åŸ·è¡Œé€™å€‹å‹•ä½œï¼Œå› ç‚ºæ²’æœ‰tree root." msgid "TileSet" msgstr "TileSet..." +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit" +msgstr "社群" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Initialize" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "新增" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "當改變時更新" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "釿–°å‘½å..." + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "刪除" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "當改變時更新" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "刪除é¸ä¸æª”案" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "å…¨é¸" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "åŒæ¥æ›´æ–°è…³æœ¬" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + #: editor/plugins/visual_shader_editor_plugin.cpp msgid "(GLES3 only)" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add input +" +msgid "Add Output" msgstr "新增訊號" #: editor/plugins/visual_shader_editor_plugin.cpp -msgid "Add output +" -msgstr "" - -#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Scalar" msgstr "" @@ -8268,6 +8480,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "新增訊號" @@ -8492,6 +8708,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9149,12 +9370,14 @@ msgstr "資æº" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9728,6 +9951,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "縮放selection" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9866,6 +10094,10 @@ msgid "Plugins" msgstr "æ’ä»¶" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -10042,10 +10274,6 @@ msgstr "轉為..." msgid "Reset" msgstr "é‡è¨ç¸®æ”¾æ¯”例" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10101,6 +10329,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10143,10 +10375,24 @@ msgid "Make node as Root" msgstr "儲å˜å ´æ™¯" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "ä¸é¸" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "ä¸é¸" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10165,11 +10411,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10251,6 +10495,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "開啓最近的" @@ -10270,11 +10522,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "下一個腳本" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "新增" @@ -10523,25 +10770,18 @@ msgid "Will load an existing script file." msgstr "下一個腳本" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "語言" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "å稱:" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Template" +msgid "Template:" msgstr "移除é¸é …" #: editor/script_create_dialog.cpp #, fuzzy -msgid "Built-in Script" +msgid "Built-in Script:" msgstr "é‹è¡Œè…³æœ¬" #: editor/script_create_dialog.cpp @@ -10559,11 +10799,40 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" +msgid "Warning:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +msgid "Error:" +msgstr "錯誤:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "載入錯誤" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "錯誤:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "來æº:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "來æº:" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "來æº:" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10571,8 +10840,9 @@ msgid "Errors" msgstr "錯誤" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "䏿–·" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10580,6 +10850,11 @@ msgid "Copy Error" msgstr "載入錯誤" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "刪除" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10596,6 +10871,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "匯出" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10608,6 +10888,10 @@ msgid "Monitors" msgstr "" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp msgid "List of Video Memory Usage by Resource:" msgstr "" @@ -10809,10 +11093,6 @@ msgid "Library" msgstr "MeshLibrary..." #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10821,6 +11101,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp msgid "Step argument is zero!" msgstr "" @@ -10982,6 +11266,15 @@ msgstr "è¨å®š" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "篩é¸:" + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11122,6 +11415,10 @@ msgid "Create a new variable." msgstr "新增" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "訊號:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "縮放selection" @@ -11153,6 +11450,11 @@ msgid "Add Function" msgstr "行為" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "åªé™é¸ä¸" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11161,6 +11463,26 @@ msgid "Add Signal" msgstr "新增訊號" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "新增訊號" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "新增訊號" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "åªé™é¸ä¸" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "åªé™é¸ä¸" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11202,10 +11524,20 @@ msgid "Add Preload Node" msgstr "新增節點" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "由主幹新增節點" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11233,6 +11565,11 @@ msgstr "連到:" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "連到:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "連到:" @@ -11269,6 +11606,27 @@ msgid "Paste VisualScript Nodes" msgstr "貼上" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "åªé™é¸ä¸" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Remove Function" msgstr "åªé™é¸ä¸" @@ -11292,7 +11650,7 @@ msgid "Editing Signal:" msgstr "連接" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11300,8 +11658,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "行為" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11325,6 +11684,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "åªé™é¸ä¸" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "釿–°æ•´ç†" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "檔案" @@ -11420,6 +11789,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "從列表é¸å–è¨å‚™" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11441,7 +11814,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11520,6 +11894,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp #, fuzzy msgid "Run in Browser" msgstr "ç€è¦½" @@ -12072,10 +12450,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12107,6 +12481,37 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#~ msgid "Language" +#~ msgstr "語言" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "鏿“‡æ¨¡å¼" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "篩é¸:" + +#, fuzzy +#~ msgid "Enumerations:" +#~ msgstr "ç¿»è¯:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "æè¿°ï¼š" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "簡述:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "æè¿°ï¼š" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "請求ä¸..." + #, fuzzy #~ msgid "Error: could not load file." #~ msgstr "無法新增資料夾" @@ -12180,9 +12585,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "無法新增資料夾" -#~ msgid "Select device from the list" -#~ msgstr "從列表é¸å–è¨å‚™" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "é–‹å•“å ´æ™¯" @@ -12289,9 +12691,6 @@ msgstr "" #~ msgid "Convert To Lowercase" #~ msgstr "轉為..." -#~ msgid "Error:" -#~ msgstr "錯誤:" - #~ msgid "Errors:" #~ msgstr "錯誤:" diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po index cfda19870f..e2d7adf9e7 100644 --- a/editor/translations/zh_TW.po +++ b/editor/translations/zh_TW.po @@ -71,6 +71,35 @@ msgstr "ç„¡æ•ˆåƒæ•¸é¡žåž‹: '%s'" msgid "On call to '%s':" msgstr "調用“%sâ€æ™‚:" +#: core/ustring.cpp +msgid "B" +msgstr "" + +#: core/ustring.cpp +msgid "KiB" +msgstr "" + +#: core/ustring.cpp +#, fuzzy +msgid "MiB" +msgstr "æ··åˆ" + +#: core/ustring.cpp +msgid "GiB" +msgstr "" + +#: core/ustring.cpp +msgid "TiB" +msgstr "" + +#: core/ustring.cpp +msgid "PiB" +msgstr "" + +#: core/ustring.cpp +msgid "EiB" +msgstr "" + #: editor/animation_bezier_editor.cpp msgid "Free" msgstr "释放" @@ -354,6 +383,7 @@ msgstr "新增 %d 個動畫軌並æ’å…¥ç•«æ ¼ï¼Ÿ" #: editor/plugins/particles_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp #: editor/script_create_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Create" msgstr "新增" @@ -498,15 +528,10 @@ msgstr "" msgid "Warning: Editing imported animation" msgstr "è¦å‘Šï¼šæ£åœ¨ç·¨è¼¯åŒ¯å…¥çš„å‹•ç•«" -#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp -#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp -msgid "Select All" -msgstr "鏿“‡å…¨éƒ¨" - #: editor/animation_track_editor.cpp #, fuzzy -msgid "Select None" -msgstr "鏿“‡æ¨¡å¼" +msgid "Select an AnimationPlayer node to create and edit animations." +msgstr "å¾žå ´æ™¯æ¨¹ä¸é¸æ“‡ä¸€å€‹ AnimationPlayer 來編輯動畫。" #: editor/animation_track_editor.cpp msgid "Only show tracks from nodes selected in tree." @@ -647,7 +672,8 @@ msgid "Scale Ratio:" msgstr "縮放比例:" #: editor/animation_track_editor.cpp -msgid "Select tracks to copy:" +#, fuzzy +msgid "Select Tracks to Copy" msgstr "鏿“‡è¦è¤‡è£½çš„軌é“:" #: editor/animation_track_editor.cpp editor/editor_log.cpp @@ -659,6 +685,11 @@ msgstr "鏿“‡è¦è¤‡è£½çš„軌é“:" msgid "Copy" msgstr "複製" +#: editor/animation_track_editor.cpp +#, fuzzy +msgid "Select All/None" +msgstr "鏿“‡æ¨¡å¼" + #: editor/animation_track_editor_plugins.cpp #, fuzzy msgid "Add Audio Track Clip" @@ -845,7 +876,8 @@ msgstr "無法連接訊號" #: editor/plugins/canvas_item_editor_plugin.cpp #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp -#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp #: editor/project_settings_editor.cpp editor/property_editor.cpp #: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp #: modules/visual_script/visual_script_editor.cpp @@ -947,7 +979,8 @@ msgstr "æœå°‹:" msgid "Matches:" msgstr "ç¬¦åˆæ¢ä»¶:" -#: editor/create_dialog.cpp editor/plugin_config_dialog.cpp +#: editor/create_dialog.cpp editor/editor_plugin_settings.cpp +#: editor/plugin_config_dialog.cpp #: editor/plugins/asset_library_editor_plugin.cpp #: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp #: modules/visual_script/visual_script_property_selector.cpp @@ -989,7 +1022,7 @@ msgid "Resource" msgstr "資æº" #: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp -#: editor/project_settings_editor.cpp editor/script_create_dialog.cpp +#: editor/project_settings_editor.cpp msgid "Path" msgstr "路徑" @@ -1273,7 +1306,8 @@ msgid "Delete Bus Effect" msgstr "刪除 Bus 效果" #: editor/editor_audio_buses.cpp -msgid "Audio Bus, Drag and Drop to rearrange." +#, fuzzy +msgid "Drag & drop to rearrange." msgstr "Audio Busã€‚æ‹–æ”¾ä»¥é‡æ–°æŽ’列。" #: editor/editor_audio_buses.cpp @@ -1478,7 +1512,9 @@ msgid "Add AutoLoad" msgstr "新增 AutoLoad" #: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp -#: editor/plugins/animation_tree_editor_plugin.cpp scene/gui/file_dialog.cpp +#: editor/editor_plugin_settings.cpp +#: editor/plugins/animation_tree_editor_plugin.cpp +#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp msgid "Path:" msgstr "路徑:" @@ -1534,7 +1570,7 @@ msgstr "新增資料夾" #: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp #: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp -#: scene/gui/file_dialog.cpp +#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp msgid "Name:" msgstr "å稱:" @@ -1727,6 +1763,7 @@ msgstr "ç•¶å‰ï¼š" #: editor/editor_feature_profile.cpp #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "New" msgstr "新增" @@ -1807,6 +1844,7 @@ msgid "New Folder..." msgstr "新增資料夾..." #: editor/editor_file_dialog.cpp +#: editor/plugins/version_control_editor_plugin.cpp msgid "Refresh" msgstr "釿–°æ•´ç†" @@ -1963,6 +2001,7 @@ msgid "Class:" msgstr "Class:" #: editor/editor_help.cpp editor/scene_tree_editor.cpp +#: editor/script_create_dialog.cpp msgid "Inherits:" msgstr "繼承:" @@ -1971,7 +2010,8 @@ msgid "Inherited by:" msgstr "繼承:" #: editor/editor_help.cpp -msgid "Brief Description:" +#, fuzzy +msgid "Brief Description" msgstr "ç°¡è¦èªªæ˜Žï¼š" #: editor/editor_help.cpp @@ -1979,41 +2019,19 @@ msgid "Properties" msgstr "性質" #: editor/editor_help.cpp -msgid "Properties:" -msgstr "效能:" - -#: editor/editor_help.cpp msgid "Methods" msgstr "方法" #: editor/editor_help.cpp #, fuzzy -msgid "Methods:" -msgstr "方法" - -#: editor/editor_help.cpp -#, fuzzy msgid "Theme Properties" msgstr "éŽæ¿¾æª”案..." #: editor/editor_help.cpp -#, fuzzy -msgid "Theme Properties:" -msgstr "éŽæ¿¾æª”案..." - -#: editor/editor_help.cpp modules/visual_script/visual_script_editor.cpp -msgid "Signals:" -msgstr "訊號:" - -#: editor/editor_help.cpp msgid "Enumerations" msgstr "枚舉" #: editor/editor_help.cpp -msgid "Enumerations:" -msgstr "枚舉:" - -#: editor/editor_help.cpp msgid "enum " msgstr "枚舉 " @@ -2022,21 +2040,13 @@ msgid "Constants" msgstr "定數" #: editor/editor_help.cpp -msgid "Constants:" -msgstr "定數:" - -#: editor/editor_help.cpp #, fuzzy msgid "Class Description" msgstr "æè¿°:" #: editor/editor_help.cpp #, fuzzy -msgid "Class Description:" -msgstr "æè¿°:" - -#: editor/editor_help.cpp -msgid "Online Tutorials:" +msgid "Online Tutorials" msgstr "線上教å¸:" #: editor/editor_help.cpp @@ -2054,11 +2064,6 @@ msgid "Property Descriptions" msgstr "Property 說明:" #: editor/editor_help.cpp -#, fuzzy -msgid "Property Descriptions:" -msgstr "Property 說明:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this property. Please help us by " "[color=$color][url=$url]contributing one[/url][/color]!" @@ -2072,11 +2077,6 @@ msgid "Method Descriptions" msgstr "Method 說明:" #: editor/editor_help.cpp -#, fuzzy -msgid "Method Descriptions:" -msgstr "Method 說明:" - -#: editor/editor_help.cpp msgid "" "There is currently no description for this method. Please help us by [color=" "$color][url=$url]contributing one[/url][/color]!" @@ -2152,8 +2152,8 @@ msgstr "輸出:" msgid "Copy Selection" msgstr "è¤‡è£½é¸æ“‡" -#: editor/editor_log.cpp editor/editor_profiler.cpp -#: editor/editor_properties.cpp +#: editor/editor_log.cpp editor/editor_network_profiler.cpp +#: editor/editor_profiler.cpp editor/editor_properties.cpp #: editor/plugins/animation_tree_player_editor_plugin.cpp #: editor/property_editor.cpp editor/scene_tree_dock.cpp #: editor/script_editor_debugger.cpp @@ -2167,6 +2167,50 @@ msgstr "清除" msgid "Clear Output" msgstr "輸出:" +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#: editor/editor_profiler.cpp +msgid "Stop" +msgstr "åœæ¢" + +#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp +#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp +msgid "Start" +msgstr "é–‹å§‹" + +#: editor/editor_network_profiler.cpp +msgid "%s/s" +msgstr "" + +#: editor/editor_network_profiler.cpp +#, fuzzy +msgid "Down" +msgstr "下載" + +#: editor/editor_network_profiler.cpp +msgid "Up" +msgstr "" + +#: editor/editor_network_profiler.cpp editor/editor_node.cpp +#, fuzzy +msgid "Node" +msgstr "節點" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Incoming RSET" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RPC" +msgstr "" + +#: editor/editor_network_profiler.cpp +msgid "Outgoing RSET" +msgstr "" + #: editor/editor_node.cpp editor/project_manager.cpp msgid "New Window" msgstr "" @@ -2741,6 +2785,19 @@ msgstr "專案" msgid "Project Settings..." msgstr "專案è¨å®š" +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Version Control" +msgstr "版本:" + +#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp +msgid "Set Up Version Control" +msgstr "" + +#: editor/editor_node.cpp +msgid "Shut Down Version Control" +msgstr "" + #: editor/editor_node.cpp #, fuzzy msgid "Export..." @@ -2957,10 +3014,6 @@ msgstr "æš«åœå ´æ™¯" msgid "Stop the scene." msgstr "åœæ¢æ¤å ´æ™¯." -#: editor/editor_node.cpp editor/editor_profiler.cpp -msgid "Stop" -msgstr "åœæ¢" - #: editor/editor_node.cpp msgid "Play the edited scene." msgstr "é‹è¡Œç·¨è¼¯éŽçš„å ´æ™¯ã€‚" @@ -3015,15 +3068,10 @@ msgid "Inspector" msgstr "å±¬æ€§é¢æ¿" #: editor/editor_node.cpp -#, fuzzy -msgid "Node" -msgstr "節點" - -#: editor/editor_node.cpp msgid "Expand Bottom Panel" msgstr "å±•é–‹åº•éƒ¨é¢æ¿" -#: editor/editor_node.cpp scene/resources/visual_shader.cpp +#: editor/editor_node.cpp msgid "Output" msgstr "輸出(output)" @@ -3042,15 +3090,21 @@ msgstr "管ç†è¼¸å‡ºæ¨¡æ¿" #: editor/editor_node.cpp msgid "" -"This will install the Android project for custom builds.\n" -"Note that, in order to use it, it needs to be enabled per export preset." +"This will set up your project for custom Android builds by installing the " +"source template to \"res://android/build\".\n" +"You can then apply modifications and build your own custom APK on export " +"(adding modules, changing the AndroidManifest.xml, etc.).\n" +"Note that in order to make custom builds instead of using pre-built APKs, " +"the \"Use Custom Build\" option should be enabled in the Android export " +"preset." msgstr "" #: editor/editor_node.cpp msgid "" -"Android build template is already installed and it won't be overwritten.\n" -"Remove the \"build\" directory manually before attempting this operation " -"again." +"The Android build template is already installed in this project and it won't " +"be overwritten.\n" +"Remove the \"res://android/build\" directory manually before attempting this " +"operation again." msgstr "" #: editor/editor_node.cpp @@ -3113,6 +3167,11 @@ msgstr "開啟下一個編輯器" msgid "Open the previous Editor" msgstr "開啟上一個編輯器" +#: editor/editor_path.cpp +#, fuzzy +msgid "No sub-resources found." +msgstr "æœªæŒ‡å®šè¡¨é¢æºã€‚" + #: editor/editor_plugin.cpp msgid "Creating Mesh Previews" msgstr "å‰µå»ºç¶²æ ¼é 覽" @@ -3122,6 +3181,11 @@ msgid "Thumbnail..." msgstr "縮圖…" #: editor/editor_plugin_settings.cpp +#, fuzzy +msgid "Main Script:" +msgstr "開啟最近å˜å–" + +#: editor/editor_plugin_settings.cpp msgid "Edit Plugin" msgstr "編輯擴充功能" @@ -3150,11 +3214,6 @@ msgstr "狀態:" msgid "Edit:" msgstr "編輯:" -#: editor/editor_profiler.cpp editor/plugins/animation_state_machine_editor.cpp -#: editor/rename_dialog.cpp -msgid "Start" -msgstr "é–‹å§‹" - #: editor/editor_profiler.cpp msgid "Measure:" msgstr "措施:" @@ -3253,6 +3312,11 @@ msgstr "鏿“‡ä¸€å€‹è¦–å£" msgid "New Script" msgstr "新建腳本" +#: editor/editor_properties.cpp editor/scene_tree_dock.cpp +#, fuzzy +msgid "Extend Script" +msgstr "開啟最近å˜å–" + #: editor/editor_properties.cpp editor/property_editor.cpp msgid "New %s" msgstr "新建 %s" @@ -3280,14 +3344,6 @@ msgstr "粘貼" msgid "Convert To %s" msgstr "è½‰æ›æˆ..." -#: editor/editor_properties.cpp -#: editor/plugins/animation_blend_space_1d_editor.cpp -#: editor/plugins/animation_blend_space_2d_editor.cpp -#: editor/plugins/animation_blend_tree_editor_plugin.cpp -#, fuzzy -msgid "Open Editor" -msgstr "ç›¸ä¾æ€§ç·¨è¼¯å™¨" - #: editor/editor_properties.cpp editor/property_editor.cpp msgid "Selected node is not a Viewport!" msgstr "é¸å®šçš„ç¯€é»žä¸æ˜¯è¦–å£!" @@ -3989,9 +4045,10 @@ msgstr " 資料夾" msgid "Import As:" msgstr "導入為:" -#: editor/import_dock.cpp editor/property_editor.cpp -msgid "Preset..." -msgstr "é è¨ã€‚。。" +#: editor/import_dock.cpp +#, fuzzy +msgid "Preset" +msgstr "é è¨" #: editor/import_dock.cpp msgid "Reimport" @@ -4121,7 +4178,7 @@ msgstr "挿件å稱:" msgid "Subfolder:" msgstr "å資料夾:" -#: editor/plugin_config_dialog.cpp +#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp msgid "Language:" msgstr "語言:" @@ -4268,6 +4325,13 @@ msgstr "點" #: editor/plugins/animation_blend_space_1d_editor.cpp #: editor/plugins/animation_blend_space_2d_editor.cpp #: editor/plugins/animation_blend_tree_editor_plugin.cpp +#, fuzzy +msgid "Open Editor" +msgstr "ç›¸ä¾æ€§ç·¨è¼¯å™¨" + +#: editor/plugins/animation_blend_space_1d_editor.cpp +#: editor/plugins/animation_blend_space_2d_editor.cpp +#: editor/plugins/animation_blend_tree_editor_plugin.cpp #: editor/plugins/animation_state_machine_editor.cpp #, fuzzy msgid "Open Animation Node" @@ -4451,6 +4515,7 @@ msgid "Change Animation Name:" msgstr "更改動畫å稱:" #: editor/plugins/animation_player_editor_plugin.cpp +#: editor/plugins/sprite_frames_editor_plugin.cpp msgid "Delete Animation?" msgstr "刪除動畫?" @@ -4633,7 +4698,6 @@ msgstr "å‹•ç•«å稱:" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/script_editor_plugin.cpp #: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp -#: editor/script_create_dialog.cpp msgid "Error!" msgstr "錯誤ï¼" @@ -4809,6 +4873,8 @@ msgid "Current:" msgstr "ç•¶å‰ï¼š" #: editor/plugins/animation_tree_player_editor_plugin.cpp +#: editor/plugins/visual_shader_editor_plugin.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Add Input" msgstr "æ·»åŠ è¼¸å…¥" @@ -5022,6 +5088,10 @@ msgid "All" msgstr "全部" #: editor/plugins/asset_library_editor_plugin.cpp +msgid "No results for \"%s\"." +msgstr "" + +#: editor/plugins/asset_library_editor_plugin.cpp #, fuzzy msgid "Import..." msgstr "å°Žå…¥" @@ -5036,11 +5106,6 @@ msgid "Sort:" msgstr "排åº:" #: editor/plugins/asset_library_editor_plugin.cpp -#, fuzzy -msgid "Reverse sorting." -msgstr "æ£åœ¨è«‹æ±‚…" - -#: editor/plugins/asset_library_editor_plugin.cpp #: editor/project_settings_editor.cpp msgid "Category:" msgstr "類別:" @@ -5322,22 +5387,33 @@ msgid "Pan Mode" msgstr "平移模å¼" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Toggle snapping." +#, fuzzy +msgid "Ruler Mode" +msgstr "縮放模å¼" + +#: editor/plugins/canvas_item_editor_plugin.cpp +#, fuzzy +msgid "Toggle smart snapping." msgstr "切æ›å¸é™„。" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/spatial_editor_plugin.cpp -msgid "Use Snap" +#, fuzzy +msgid "Use Smart Snap" msgstr "使用å¸é™„" #: editor/plugins/canvas_item_editor_plugin.cpp -msgid "Snapping Options" -msgstr "å¸é™„é¸é …" +#, fuzzy +msgid "Toggle grid snapping." +msgstr "切æ›å¸é™„。" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy -msgid "Snap to Grid" -msgstr "å¸é™„åˆ°ç¶²æ ¼" +msgid "Use Grid Snap" +msgstr "ç¶²æ ¼å¸é™„" + +#: editor/plugins/canvas_item_editor_plugin.cpp +msgid "Snapping Options" +msgstr "å¸é™„é¸é …" #: editor/plugins/canvas_item_editor_plugin.cpp #, fuzzy @@ -5439,8 +5515,8 @@ msgid "View" msgstr "視圖" #: editor/plugins/canvas_item_editor_plugin.cpp -#: editor/plugins/polygon_2d_editor_plugin.cpp -msgid "Show Grid" +#, fuzzy +msgid "Always Show Grid" msgstr "é¡¯ç¤ºç¶²æ ¼" #: editor/plugins/canvas_item_editor_plugin.cpp @@ -5713,6 +5789,10 @@ msgstr "åˆ‡æ›æ›²ç·šç›´ç·šåˆ‡ç·š" msgid "Hold Shift to edit tangents individually" msgstr "æŒ‰ä½ Shift éµå¯å–®ç¨ç·¨è¼¯åˆ‡ç·š" +#: editor/plugins/curve_editor_plugin.cpp +msgid "Right click to add point" +msgstr "" + #: editor/plugins/gi_probe_editor_plugin.cpp msgid "Bake GI Probe" msgstr "渲染 GI Probe" @@ -6363,6 +6443,10 @@ msgid "Grid" msgstr "" #: editor/plugins/polygon_2d_editor_plugin.cpp +msgid "Show Grid" +msgstr "é¡¯ç¤ºç¶²æ ¼" + +#: editor/plugins/polygon_2d_editor_plugin.cpp msgid "Configure Grid:" msgstr "" @@ -6418,7 +6502,8 @@ msgstr "" #: editor/plugins/resource_preloader_editor_plugin.cpp #: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp -#: editor/scene_tree_editor.cpp +#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp +#: modules/visual_script/visual_script_editor.cpp msgid "Type:" msgstr "" @@ -6529,6 +6614,11 @@ msgid "Find Next" msgstr "查找下一個" #: editor/plugins/script_editor_plugin.cpp +#: editor/plugins/script_text_editor.cpp +msgid "Find Previous" +msgstr "查找上一個" + +#: editor/plugins/script_editor_plugin.cpp #, fuzzy msgid "Filter scripts" msgstr "éŽæ¿¾æª”案..." @@ -6637,14 +6727,14 @@ msgid "Toggle Scripts Panel" msgstr "\"切æ›è…³æœ¬\" 颿¿" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp -msgid "Step Over" -msgstr "è·¨éŽ" - -#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Step Into" msgstr "æ¥å…¥" #: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp +msgid "Step Over" +msgstr "è·¨éŽ" + +#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp msgid "Break" msgstr "è·³éŽ" @@ -6727,7 +6817,7 @@ msgstr "æ¸…é™¤æœ€è¿‘é–‹å•Ÿçš„å ´æ™¯" msgid "Connections to method:" msgstr "連接到節點:" -#: editor/plugins/script_text_editor.cpp +#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp #, fuzzy msgid "Source" msgstr "資æº" @@ -6814,6 +6904,11 @@ msgstr "刪除" msgid "Cut" msgstr "剪切" +#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp +#: scene/gui/text_edit.cpp +msgid "Select All" +msgstr "鏿“‡å…¨éƒ¨" + #: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Delete Line" @@ -6876,10 +6971,6 @@ msgid "Auto Indent" msgstr "自動縮進" #: editor/plugins/script_text_editor.cpp -msgid "Find Previous" -msgstr "查找上一個" - -#: editor/plugins/script_text_editor.cpp #, fuzzy msgid "Find in Files..." msgstr "åœ¨æª”ä¸æŸ¥æ‰¾..。" @@ -7213,6 +7304,11 @@ msgid "Freelook Speed Modifier" msgstr "自由視圖速度調節" #: editor/plugins/spatial_editor_plugin.cpp +#, fuzzy +msgid "Freelook Slow Modifier" +msgstr "自由視圖速度調節" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "" "Note: The FPS value displayed is the editor's framerate.\n" "It cannot be used as a reliable indication of in-game performance." @@ -7247,6 +7343,10 @@ msgid "Use Local Space" msgstr "本地空間模å¼ï¼ˆ%s)" #: editor/plugins/spatial_editor_plugin.cpp +msgid "Use Snap" +msgstr "使用å¸é™„" + +#: editor/plugins/spatial_editor_plugin.cpp msgid "Bottom View" msgstr "底部視圖" @@ -7487,6 +7587,11 @@ msgid "Simplification: " msgstr "簡化: " #: editor/plugins/sprite_editor_plugin.cpp +#, fuzzy +msgid "Shrink (Pixels): " +msgstr "擴展(åƒç´ ): " + +#: editor/plugins/sprite_editor_plugin.cpp msgid "Grow (Pixels): " msgstr "擴展(åƒç´ ): " @@ -7540,6 +7645,11 @@ msgstr "(空)" #: editor/plugins/sprite_frames_editor_plugin.cpp #, fuzzy +msgid "Move Frame" +msgstr "粘貼幀" + +#: editor/plugins/sprite_frames_editor_plugin.cpp +#, fuzzy msgid "Animations:" msgstr "動畫:" @@ -7874,6 +7984,15 @@ msgid "Enable Priority" msgstr "編輯ç£è²¼å„ªå…ˆç´š" #: editor/plugins/tile_map_editor_plugin.cpp +#, fuzzy +msgid "Filter tiles" +msgstr "ç¯©é¸æª”案..." + +#: editor/plugins/tile_map_editor_plugin.cpp +msgid "Give a TileSet resource to this TileMap to use its tiles." +msgstr "" + +#: editor/plugins/tile_map_editor_plugin.cpp msgid "Paint Tile" msgstr "繪製ç£è²¼" @@ -8021,6 +8140,11 @@ msgid "Display Tile Names (Hold Alt Key)" msgstr "顯示ç£è²¼å稱 (æŒ‰ä½ ALT éµ)" #: editor/plugins/tile_set_editor_plugin.cpp +msgid "" +"Add or select a texture on the left panel to edit the tiles bound to it." +msgstr "" + +#: editor/plugins/tile_set_editor_plugin.cpp #, fuzzy msgid "Remove selected texture? This will remove all tiles which use it." msgstr "刪除é¸å®šçš„ç´‹ç†ï¼Ÿé€™å°‡åˆªé™¤ä½¿ç”¨å®ƒçš„æ‰€æœ‰ç£è²¼ã€‚" @@ -8189,18 +8313,116 @@ msgstr "無法更改æ¤å±¬æ€§ã€‚" msgid "TileSet" msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp -msgid "(GLES3 only)" +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No VCS addons are available." msgstr "" -#: editor/plugins/visual_shader_editor_plugin.cpp +#: editor/plugins/version_control_editor_plugin.cpp editor/rename_dialog.cpp +msgid "Error" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No commit message was provided" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No files added to stage" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp #, fuzzy -msgid "Add input +" -msgstr "æ·»åŠ è¼¸å…¥" +msgid "Commit" +msgstr "社å€" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "VCS Addon is not initialized" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Version Control System" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Initialize" +msgstr "首嗿¯å¤§å¯«" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Staging area" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Detect new changes" +msgstr "創建新矩形。" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Changes" +msgstr "æ›´æ›" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Modified" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Renamed" +msgstr "é‡å‘½å" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Deleted" +msgstr "刪除" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Typechange" +msgstr "æ›´æ›" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage Selected" +msgstr "縮放所é¸" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Stage All" +msgstr "全部ä¿å˜" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Add a commit message" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +#, fuzzy +msgid "Commit Changes" +msgstr "åŒæ¥è…³æœ¬çš„變更" + +#: editor/plugins/version_control_editor_plugin.cpp +#: modules/gdnative/gdnative_library_singleton_editor.cpp +msgid "Status" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "View file diffs before committing them to the latest version" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "No file diff is active" +msgstr "" + +#: editor/plugins/version_control_editor_plugin.cpp +msgid "Detect changes in file diff" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp +msgid "(GLES3 only)" +msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy -msgid "Add output +" +msgid "Add Output" msgstr "æ·»åŠ è¼¸å…¥" #: editor/plugins/visual_shader_editor_plugin.cpp @@ -8218,6 +8440,10 @@ msgid "Boolean" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "Sampler" +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp #, fuzzy msgid "Add input port" msgstr "æ·»åŠ è¼¸å…¥" @@ -8444,6 +8670,11 @@ msgid "" msgstr "" #: editor/plugins/visual_shader_editor_plugin.cpp +msgid "" +"Returns an associated scalar if the provided boolean value is true or false." +msgstr "" + +#: editor/plugins/visual_shader_editor_plugin.cpp msgid "Returns the boolean result of the comparison between two parameters." msgstr "" @@ -9096,12 +9327,14 @@ msgstr "è¦è¼¸å‡ºçš„資æº:" #: editor/project_export.cpp msgid "" -"Filters to export non-resource files (comma separated, e.g: *.json, *.txt)" +"Filters to export non-resource files/folders\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp msgid "" -"Filters to exclude files from project (comma separated, e.g: *.json, *.txt)" +"Filters to exclude files/folders from project\n" +"(comma-separated, e.g: *.json, *.txt, docs/*)" msgstr "" #: editor/project_export.cpp @@ -9676,6 +9909,11 @@ msgid "Settings saved OK." msgstr "" #: editor/project_settings_editor.cpp +#, fuzzy +msgid "Moved Input Action Event" +msgstr "æ‰€æœ‰çš„é¸æ“‡" + +#: editor/project_settings_editor.cpp msgid "Override for Feature" msgstr "" @@ -9818,6 +10056,10 @@ msgid "Plugins" msgstr "挿件" #: editor/property_editor.cpp +msgid "Preset..." +msgstr "é è¨ã€‚。。" + +#: editor/property_editor.cpp msgid "Zero" msgstr "" @@ -9990,10 +10232,6 @@ msgstr "è½‰æ›æˆ..." msgid "Reset" msgstr "é‡è¨ç¸®æ”¾å¤§å°" -#: editor/rename_dialog.cpp -msgid "Error" -msgstr "" - #: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp msgid "Reparent Node" msgstr "" @@ -10049,6 +10287,10 @@ msgid "Instance Scene(s)" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Replace with Branch Scene" +msgstr "" + +#: editor/scene_tree_dock.cpp msgid "Instance Child Scene" msgstr "" @@ -10090,10 +10332,24 @@ msgid "Make node as Root" msgstr "儲å˜å ´æ™¯" #: editor/scene_tree_dock.cpp -msgid "Delete Node(s)?" +#, fuzzy +msgid "Delete %d nodes?" +msgstr "刪除" + +#: editor/scene_tree_dock.cpp +msgid "Delete the root node \"%s\"?" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Delete node \"%s\" and its children?" msgstr "" #: editor/scene_tree_dock.cpp +#, fuzzy +msgid "Delete node \"%s\"?" +msgstr "刪除" + +#: editor/scene_tree_dock.cpp msgid "Can not perform with the root node." msgstr "" @@ -10112,11 +10368,9 @@ msgid "" msgstr "" #: editor/scene_tree_dock.cpp -msgid "Editable Children" -msgstr "" - -#: editor/scene_tree_dock.cpp -msgid "Load As Placeholder" +msgid "" +"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and " +"cause all properties of the node to be reverted to their default." msgstr "" #: editor/scene_tree_dock.cpp @@ -10196,6 +10450,14 @@ msgid "Clear Inheritance" msgstr "" #: editor/scene_tree_dock.cpp +msgid "Editable Children" +msgstr "" + +#: editor/scene_tree_dock.cpp +msgid "Load As Placeholder" +msgstr "" + +#: editor/scene_tree_dock.cpp #, fuzzy msgid "Open Documentation" msgstr "開啟最近å˜å–" @@ -10215,11 +10477,6 @@ msgstr "" #: editor/scene_tree_dock.cpp #, fuzzy -msgid "Extend Script" -msgstr "開啟最近å˜å–" - -#: editor/scene_tree_dock.cpp -#, fuzzy msgid "Reparent to New Node" msgstr "新增 %s" @@ -10469,24 +10726,19 @@ msgid "Will load an existing script file." msgstr "讀å–ç¾å˜çš„ Bus é…置。" #: editor/script_create_dialog.cpp -msgid "Language" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Inherits" -msgstr "" - -#: editor/script_create_dialog.cpp -msgid "Class Name" -msgstr "" +#, fuzzy +msgid "Class Name:" +msgstr "Class:" #: editor/script_create_dialog.cpp -msgid "Template" -msgstr "" +#, fuzzy +msgid "Template:" +msgstr "移除範本" #: editor/script_create_dialog.cpp -msgid "Built-in Script" -msgstr "" +#, fuzzy +msgid "Built-in Script:" +msgstr "開啟最近å˜å–" #: editor/script_create_dialog.cpp msgid "Attach Node Script" @@ -10502,11 +10754,42 @@ msgid "Bytes:" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Stack Trace" -msgstr "" +#, fuzzy +msgid "Warning:" +msgstr "è¦å‘Š" #: editor/script_editor_debugger.cpp -msgid "Pick one or more items from the list to display the graph." +#, fuzzy +msgid "Error:" +msgstr "錯誤ï¼" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error" +msgstr "連接..." + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Error:" +msgstr "連接..." + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source" +msgstr "資æº" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Source:" +msgstr "資æº" + +#: editor/script_editor_debugger.cpp +#, fuzzy +msgid "C++ Source:" +msgstr "資æº" + +#: editor/script_editor_debugger.cpp +msgid "Stack Trace" msgstr "" #: editor/script_editor_debugger.cpp @@ -10514,8 +10797,9 @@ msgid "Errors" msgstr "" #: editor/script_editor_debugger.cpp -msgid "Child Process Connected" -msgstr "" +#, fuzzy +msgid "Child process connected." +msgstr "æ–·ç·š" #: editor/script_editor_debugger.cpp #, fuzzy @@ -10523,6 +10807,11 @@ msgid "Copy Error" msgstr "連接..." #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Skip Breakpoints" +msgstr "刪除" + +#: editor/script_editor_debugger.cpp msgid "Inspect Previous Instance" msgstr "" @@ -10539,6 +10828,11 @@ msgid "Profiler" msgstr "" #: editor/script_editor_debugger.cpp +#, fuzzy +msgid "Network Profiler" +msgstr "輸出專案" + +#: editor/script_editor_debugger.cpp msgid "Monitor" msgstr "" @@ -10552,6 +10846,10 @@ msgid "Monitors" msgstr "監看畫é¢" #: editor/script_editor_debugger.cpp +msgid "Pick one or more items from the list to display the graph." +msgstr "" + +#: editor/script_editor_debugger.cpp #, fuzzy msgid "List of Video Memory Usage by Resource:" msgstr "影片記憶體使用容é‡åˆ—表(ä¾è³‡æºåˆ¥):" @@ -10763,10 +11061,6 @@ msgid "Library" msgstr "" #: modules/gdnative/gdnative_library_singleton_editor.cpp -msgid "Status" -msgstr "" - -#: modules/gdnative/gdnative_library_singleton_editor.cpp msgid "Libraries: " msgstr "" @@ -10775,6 +11069,10 @@ msgid "GDNative" msgstr "" #: modules/gdscript/gdscript_functions.cpp +msgid "Expected a string of length 1 (a character)." +msgstr "" + +#: modules/gdscript/gdscript_functions.cpp #, fuzzy msgid "Step argument is zero!" msgstr "step引數為0!" @@ -10943,6 +11241,15 @@ msgstr "專案è¨å®š" msgid "Pick Distance:" msgstr "" +#: modules/gridmap/grid_map_editor_plugin.cpp +#, fuzzy +msgid "Filter meshes" +msgstr "éŽæ¿¾æª”案..." + +#: modules/gridmap/grid_map_editor_plugin.cpp +msgid "Give a MeshLibrary resource to this GridMap to use its meshes." +msgstr "" + #: modules/mono/csharp_script.cpp msgid "Class name can't be a reserved keyword" msgstr "" @@ -11084,6 +11391,10 @@ msgid "Create a new variable." msgstr "創建新矩形。" #: modules/visual_script/visual_script_editor.cpp +msgid "Signals:" +msgstr "訊號:" + +#: modules/visual_script/visual_script_editor.cpp #, fuzzy msgid "Create a new signal." msgstr "創建新多邊形。" @@ -11113,6 +11424,11 @@ msgid "Add Function" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Delete input port" +msgstr "刪除點" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Variable" msgstr "" @@ -11121,6 +11437,26 @@ msgid "Add Signal" msgstr "" #: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Input Port" +msgstr "æ·»åŠ è¼¸å…¥" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Add Output Port" +msgstr "æ·»åŠ è¼¸å…¥" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Input Port" +msgstr "刪除點" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Remove Output Port" +msgstr "刪除點" + +#: modules/visual_script/visual_script_editor.cpp msgid "Change Expression" msgstr "" @@ -11161,10 +11497,20 @@ msgid "Add Preload Node" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't drop nodes because script '%s' is not used in this scene." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Node(s) From Tree" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "" +"Can't drop properties because script '%s' is not used in this scene.\n" +"Drop holding 'Shift' to just copy the signature." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp msgid "Add Getter Property" msgstr "" @@ -11192,6 +11538,11 @@ msgstr "連接..." #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Disconnect Nodes" +msgstr "連接..." + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Connect Node Data" msgstr "連接..." @@ -11225,6 +11576,27 @@ msgid "Paste VisualScript Nodes" msgstr "" #: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function with a function node." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Can't create function of nodes from nodes of multiple functions." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Select atleast one node with sequence port." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +msgid "Try to only have one sequence input in selection." +msgstr "" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Create Function" +msgstr "創建輪廓" + +#: modules/visual_script/visual_script_editor.cpp msgid "Remove Function" msgstr "" @@ -11245,7 +11617,7 @@ msgid "Editing Signal:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Base Type:" +msgid "Make Tool:" msgstr "" #: modules/visual_script/visual_script_editor.cpp @@ -11253,8 +11625,9 @@ msgid "Members:" msgstr "" #: modules/visual_script/visual_script_editor.cpp -msgid "Available Nodes:" -msgstr "" +#, fuzzy +msgid "function_name" +msgstr "函數:" #: modules/visual_script/visual_script_editor.cpp msgid "Select or create a function to edit its graph." @@ -11278,6 +11651,16 @@ msgstr "" #: modules/visual_script/visual_script_editor.cpp #, fuzzy +msgid "Make Function" +msgstr "函數:" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy +msgid "Refresh Graph" +msgstr "釿–°æ•´ç†" + +#: modules/visual_script/visual_script_editor.cpp +#, fuzzy msgid "Edit Member" msgstr "éŽæ¿¾æª”案..." @@ -11373,6 +11756,10 @@ msgid "The package must have at least one '.' separator." msgstr "" #: platform/android/export/export.cpp +msgid "Select device from the list" +msgstr "從清單ä¸é¸æ“‡è¨å‚™" + +#: platform/android/export/export.cpp msgid "ADB executable not configured in the Editor Settings." msgstr "" @@ -11394,7 +11781,8 @@ msgstr "" #: platform/android/export/export.cpp msgid "" -"Android project is not installed for compiling. Install from Editor menu." +"Android build template not installed in the project. Install it from the " +"Project menu." msgstr "" #: platform/android/export/export.cpp @@ -11473,6 +11861,10 @@ msgid "Required icon is not specified in the preset." msgstr "" #: platform/javascript/export/export.cpp +msgid "Stop HTTP Server" +msgstr "" + +#: platform/javascript/export/export.cpp msgid "Run in Browser" msgstr "" @@ -12042,10 +12434,6 @@ msgid "" "texture to some node for display." msgstr "" -#: scene/resources/visual_shader.cpp -msgid "Input" -msgstr "" - #: scene/resources/visual_shader_nodes.cpp #, fuzzy msgid "Invalid source for preview." @@ -12077,6 +12465,47 @@ msgstr "" msgid "Constants cannot be modified." msgstr "" +#, fuzzy +#~ msgid "Snap to Grid" +#~ msgstr "å¸é™„åˆ°ç¶²æ ¼" + +#, fuzzy +#~ msgid "Add input +" +#~ msgstr "æ·»åŠ è¼¸å…¥" + +#~ msgid "Properties:" +#~ msgstr "效能:" + +#, fuzzy +#~ msgid "Methods:" +#~ msgstr "方法" + +#, fuzzy +#~ msgid "Theme Properties:" +#~ msgstr "éŽæ¿¾æª”案..." + +#~ msgid "Enumerations:" +#~ msgstr "枚舉:" + +#~ msgid "Constants:" +#~ msgstr "定數:" + +#, fuzzy +#~ msgid "Class Description:" +#~ msgstr "æè¿°:" + +#, fuzzy +#~ msgid "Property Descriptions:" +#~ msgstr "Property 說明:" + +#, fuzzy +#~ msgid "Method Descriptions:" +#~ msgstr "Method 說明:" + +#, fuzzy +#~ msgid "Reverse sorting." +#~ msgstr "æ£åœ¨è«‹æ±‚…" + #~ msgid "No Matches" #~ msgstr "ç„¡ç¬¦åˆæ¢ä»¶" @@ -12199,9 +12628,6 @@ msgstr "" #~ msgid "Go to parent folder" #~ msgstr "無法新增資料夾" -#~ msgid "Select device from the list" -#~ msgstr "從清單ä¸é¸æ“‡è¨å‚™" - #, fuzzy #~ msgid "Open Scene(s)" #~ msgstr "é–‹å•Ÿå ´æ™¯" diff --git a/main/SCsub b/main/SCsub index 62bc155c67..73cec1d250 100644 --- a/main/SCsub +++ b/main/SCsub @@ -28,7 +28,8 @@ env.CommandNoCache("#main/splash_editor.gen.h", "#main/splash_editor.png", run_i env.Depends("#main/app_icon.gen.h", "#main/app_icon.png") env.CommandNoCache("#main/app_icon.gen.h", "#main/app_icon.png", run_in_subprocess(main_builders.make_app_icon)) -SConscript('tests/SCsub') +if env["tools"]: + SConscript('tests/SCsub') lib = env.add_library("main", env.main_sources) env.Prepend(LIBS=[lib]) diff --git a/main/main.cpp b/main/main.cpp index 9ae885a5ce..28ab80bec2 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -444,6 +444,32 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph if (I->next()) { audio_driver = I->next()->get(); + + bool found = false; + for (int i = 0; i < OS::get_singleton()->get_audio_driver_count(); i++) { + if (audio_driver == OS::get_singleton()->get_audio_driver_name(i)) { + found = true; + } + } + + if (!found) { + OS::get_singleton()->print("Unknown audio driver '%s', aborting.\nValid options are ", audio_driver.utf8().get_data()); + + for (int i = 0; i < OS::get_singleton()->get_audio_driver_count(); i++) { + if (i == OS::get_singleton()->get_audio_driver_count() - 1) { + OS::get_singleton()->print(" and "); + } else if (i != 0) { + OS::get_singleton()->print(", "); + } + + OS::get_singleton()->print("'%s'", OS::get_singleton()->get_audio_driver_name(i)); + } + + OS::get_singleton()->print(".\n"); + + goto error; + } + N = I->next()->next(); } else { OS::get_singleton()->print("Missing audio driver argument, aborting.\n"); @@ -455,6 +481,32 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph if (I->next()) { video_driver = I->next()->get(); + + bool found = false; + for (int i = 0; i < OS::get_singleton()->get_video_driver_count(); i++) { + if (video_driver == OS::get_singleton()->get_video_driver_name(i)) { + found = true; + } + } + + if (!found) { + OS::get_singleton()->print("Unknown video driver '%s', aborting.\nValid options are ", video_driver.utf8().get_data()); + + for (int i = 0; i < OS::get_singleton()->get_video_driver_count(); i++) { + if (i == OS::get_singleton()->get_video_driver_count() - 1) { + OS::get_singleton()->print(" and "); + } else if (i != 0) { + OS::get_singleton()->print(", "); + } + + OS::get_singleton()->print("'%s'", OS::get_singleton()->get_video_driver_name(i)); + } + + OS::get_singleton()->print(".\n"); + + goto error; + } + N = I->next()->next(); } else { OS::get_singleton()->print("Missing video driver argument, aborting.\n"); @@ -930,10 +982,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph video_mode.height = GLOBAL_GET("display/window/size/height"); if (globals->has_setting("display/window/size/test_width") && globals->has_setting("display/window/size/test_height")) { + int tw = globals->get("display/window/size/test_width"); - int th = globals->get("display/window/size/test_height"); - if (tw > 0 && th > 0) { + if (tw > 0) { video_mode.width = tw; + } + int th = globals->get("display/window/size/test_height"); + if (th > 0) { video_mode.height = th; } } @@ -989,10 +1044,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } if (video_driver_idx < 0) { - - //OS::get_singleton()->alert("Invalid Video Driver: " + video_driver); video_driver_idx = 0; - //goto error; } if (audio_driver == "") { // specified in project.godot @@ -1009,10 +1061,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph } if (audio_driver_idx < 0) { - - OS::get_singleton()->alert("Invalid Audio Driver: " + audio_driver); audio_driver_idx = 0; - //goto error; } { @@ -1182,7 +1231,7 @@ Error Main::setup2(Thread::ID p_main_tid_override) { boot_logo.instance(); Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo); if (load_err) - ERR_PRINTS("Non-existing or invalid boot splash at: " + boot_logo_path + ". Loading default splash."); + ERR_PRINTS("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash."); } Color boot_bg_color = GLOBAL_DEF("application/boot_splash/bg_color", boot_splash_bg_color); @@ -1299,8 +1348,8 @@ Error Main::setup2(Thread::ID p_main_tid_override) { ClassDB::set_current_api(ClassDB::API_NONE); //no more api is registered at this point - print_verbose("CORE API HASH: " + itos(ClassDB::get_api_hash(ClassDB::API_CORE))); - print_verbose("EDITOR API HASH: " + itos(ClassDB::get_api_hash(ClassDB::API_EDITOR))); + print_verbose("CORE API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_CORE))); + print_verbose("EDITOR API HASH: " + uitos(ClassDB::get_api_hash(ClassDB::API_EDITOR))); MAIN_PRINT("Main: Done"); return OK; @@ -1374,8 +1423,6 @@ bool Main::start() { } } - GLOBAL_DEF("editor/active", editor); - String main_loop_type; #ifdef TOOLS_ENABLED if (doc_tool != "") { @@ -1457,12 +1504,11 @@ bool Main::start() { }; if (test != "") { -#ifdef DEBUG_ENABLED +#ifdef TOOLS_ENABLED main_loop = test_main(test, args); if (!main_loop) return false; - #endif } else if (script != "") { @@ -1808,9 +1854,7 @@ bool Main::start() { // Hide console window if requested (Windows-only). bool hide_console = EditorSettings::get_singleton()->get_setting("interface/editor/hide_console_window"); OS::get_singleton()->set_console_visible(!hide_console); - } - if (project_manager || editor) { // Load SSL Certificates from Editor Settings (or builtin) Crypto::load_default_certificates(EditorSettings::get_singleton()->get_setting("network/ssl/editor_ssl_certificates").operator String()); } diff --git a/main/splash.png b/main/splash.png Binary files differindex 32960db65f..7bddd4325a 100644 --- a/main/splash.png +++ b/main/splash.png diff --git a/main/splash_editor.png b/main/splash_editor.png Binary files differindex d8677f1749..8c605f0eed 100644 --- a/main/splash_editor.png +++ b/main/splash_editor.png diff --git a/main/tests/test_astar.cpp b/main/tests/test_astar.cpp index d34ff0d95e..4b60a3e94a 100644 --- a/main/tests/test_astar.cpp +++ b/main/tests/test_astar.cpp @@ -31,8 +31,10 @@ #include "test_astar.h" #include "core/math/a_star.h" +#include "core/math/math_funcs.h" #include "core/os/os.h" +#include <math.h> #include <stdio.h> namespace TestAStar { @@ -87,11 +89,268 @@ bool test_abcx() { return ok; } +bool test_add_remove() { + AStar a; + bool ok = true; + + // Manual tests + a.add_point(1, Vector3(0, 0, 0)); + a.add_point(2, Vector3(0, 1, 0)); + a.add_point(3, Vector3(1, 1, 0)); + a.add_point(4, Vector3(2, 0, 0)); + a.connect_points(1, 2, true); + a.connect_points(1, 3, true); + a.connect_points(1, 4, false); + + ok = ok && (a.are_points_connected(2, 1) == true); + ok = ok && (a.are_points_connected(4, 1) == true); + ok = ok && (a.are_points_connected(2, 1, false) == true); + ok = ok && (a.are_points_connected(4, 1, false) == false); + + a.disconnect_points(1, 2, true); + ok = ok && (a.get_point_connections(1).size() == 2); // 3, 4 + ok = ok && (a.get_point_connections(2).size() == 0); + + a.disconnect_points(4, 1, false); + ok = ok && (a.get_point_connections(1).size() == 2); // 3, 4 + ok = ok && (a.get_point_connections(4).size() == 0); + + a.disconnect_points(4, 1, true); + ok = ok && (a.get_point_connections(1).size() == 1); // 3 + ok = ok && (a.get_point_connections(4).size() == 0); + + a.connect_points(2, 3, false); + ok = ok && (a.get_point_connections(2).size() == 1); // 3 + ok = ok && (a.get_point_connections(3).size() == 1); // 1 + + a.connect_points(2, 3, true); + ok = ok && (a.get_point_connections(2).size() == 1); // 3 + ok = ok && (a.get_point_connections(3).size() == 2); // 1, 2 + + a.disconnect_points(2, 3, false); + ok = ok && (a.get_point_connections(2).size() == 0); + ok = ok && (a.get_point_connections(3).size() == 2); // 1, 2 + + a.connect_points(4, 3, true); + ok = ok && (a.get_point_connections(3).size() == 3); // 1, 2, 4 + ok = ok && (a.get_point_connections(4).size() == 1); // 3 + + a.disconnect_points(3, 4, false); + ok = ok && (a.get_point_connections(3).size() == 2); // 1, 2 + ok = ok && (a.get_point_connections(4).size() == 1); // 3 + + a.remove_point(3); + ok = ok && (a.get_point_connections(1).size() == 0); + ok = ok && (a.get_point_connections(2).size() == 0); + ok = ok && (a.get_point_connections(4).size() == 0); + + a.add_point(0, Vector3(0, -1, 0)); + a.add_point(3, Vector3(2, 1, 0)); + // 0: (0, -1) + // 1: (0, 0) + // 2: (0, 1) + // 3: (2, 1) + // 4: (2, 0) + + // Tests for get_closest_position_in_segment + a.connect_points(2, 3); + ok = ok && (a.get_closest_position_in_segment(Vector3(0.5, 0.5, 0)) == Vector3(0.5, 1, 0)); + + a.connect_points(3, 4); + a.connect_points(0, 3); + a.connect_points(1, 4); + a.disconnect_points(1, 4, false); + a.disconnect_points(4, 3, false); + a.disconnect_points(3, 4, false); + // Remaining edges: <2, 3>, <0, 3>, <1, 4> (directed) + ok = ok && (a.get_closest_position_in_segment(Vector3(2, 0.5, 0)) == Vector3(1.75, 0.75, 0)); + ok = ok && (a.get_closest_position_in_segment(Vector3(-1, 0.2, 0)) == Vector3(0, 0, 0)); + ok = ok && (a.get_closest_position_in_segment(Vector3(3, 2, 0)) == Vector3(2, 1, 0)); + + Math::seed(0); + + // Random tests for connectivity checks + for (int i = 0; i < 20000; i++) { + int u = Math::rand() % 5; + int v = Math::rand() % 4; + if (u == v) v = 4; + if (Math::rand() % 2 == 1) { + // Add a (possibly existing) directed edge and confirm connectivity + a.connect_points(u, v, false); + ok = ok && (a.are_points_connected(u, v, false) == true); + } else { + // Remove a (possibly nonexistent) directed edge and confirm disconnectivity + a.disconnect_points(u, v, false); + ok = ok && (a.are_points_connected(u, v, false) == false); + } + } + + // Random tests for point removal + for (int i = 0; i < 20000; i++) { + a.clear(); + for (int j = 0; j < 5; j++) + a.add_point(j, Vector3(0, 0, 0)); + + // Add or remove random edges + for (int j = 0; j < 10; j++) { + int u = Math::rand() % 5; + int v = Math::rand() % 4; + if (u == v) v = 4; + if (Math::rand() % 2 == 1) + a.connect_points(u, v, false); + else + a.disconnect_points(u, v, false); + } + + // Remove point 0 + a.remove_point(0); + // White box: this will check all edges remaining in the segments set + for (int j = 1; j < 5; j++) { + ok = ok && (a.are_points_connected(0, j, true) == false); + } + } + + // It's been great work, cheers \(^ ^)/ + return ok; +} + +bool test_solutions() { + // Random stress tests with Floyd-Warshall + + const int N = 30; + Math::seed(0); + + for (int test = 0; test < 1000; test++) { + AStar a; + Vector3 p[N]; + bool adj[N][N] = { { false } }; + + // Assign initial coordinates + for (int u = 0; u < N; u++) { + p[u].x = Math::rand() % 100; + p[u].y = Math::rand() % 100; + p[u].z = Math::rand() % 100; + a.add_point(u, p[u]); + } + + // Generate a random sequence of operations + for (int i = 0; i < 1000; i++) { + // Pick two different vertices + int u, v; + u = Math::rand() % N; + v = Math::rand() % (N - 1); + if (u == v) v = N - 1; + + // Pick a random operation + int op = Math::rand(); + switch (op % 9) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + // Add edge (u, v); possibly bidirectional + a.connect_points(u, v, op % 2); + adj[u][v] = true; + if (op % 2) adj[v][u] = true; + break; + case 6: + case 7: + // Remove edge (u, v); possibly bidirectional + a.disconnect_points(u, v, op % 2); + adj[u][v] = false; + if (op % 2) adj[v][u] = false; + break; + case 8: + // Remove point u and add it back; clears adjacent edges and changes coordinates + a.remove_point(u); + p[u].x = Math::rand() % 100; + p[u].y = Math::rand() % 100; + p[u].z = Math::rand() % 100; + a.add_point(u, p[u]); + for (v = 0; v < N; v++) + adj[u][v] = adj[v][u] = false; + break; + } + } + + // Floyd-Warshall + float d[N][N]; + for (int u = 0; u < N; u++) + for (int v = 0; v < N; v++) + d[u][v] = (u == v || adj[u][v]) ? p[u].distance_to(p[v]) : INFINITY; + + for (int w = 0; w < N; w++) + for (int u = 0; u < N; u++) + for (int v = 0; v < N; v++) + if (d[u][v] > d[u][w] + d[w][v]) + d[u][v] = d[u][w] + d[w][v]; + + // Display statistics + int count = 0; + for (int u = 0; u < N; u++) + for (int v = 0; v < N; v++) + if (adj[u][v]) count++; + printf("Test #%4d: %3d edges, ", test + 1, count); + count = 0; + for (int u = 0; u < N; u++) + for (int v = 0; v < N; v++) + if (!Math::is_inf(d[u][v])) count++; + printf("%3d/%d pairs of reachable points\n", count - N, N * (N - 1)); + + // Check A*'s output + bool match = true; + for (int u = 0; u < N; u++) + for (int v = 0; v < N; v++) + if (u != v) { + PoolVector<int> route = a.get_id_path(u, v); + if (!Math::is_inf(d[u][v])) { + // Reachable + if (route.size() == 0) { + printf("From %d to %d: A* did not find a path\n", u, v); + match = false; + goto exit; + } + float astar_dist = 0; + for (int i = 1; i < route.size(); i++) { + if (!adj[route[i - 1]][route[i]]) { + printf("From %d to %d: edge (%d, %d) does not exist\n", + u, v, route[i - 1], route[i]); + match = false; + goto exit; + } + astar_dist += p[route[i - 1]].distance_to(p[route[i]]); + } + if (!Math::is_equal_approx(astar_dist, d[u][v])) { + printf("From %d to %d: Floyd-Warshall gives %.6f, A* gives %.6f\n", + u, v, d[u][v], astar_dist); + match = false; + goto exit; + } + } else { + // Unreachable + if (route.size() > 0) { + printf("From %d to %d: A* somehow found a nonexistent path\n", u, v); + match = false; + goto exit; + } + } + } + + exit: + if (!match) return false; + } + return true; +} + typedef bool (*TestFunc)(void); TestFunc test_funcs[] = { test_abc, test_abcx, + test_add_remove, + test_solutions, NULL }; diff --git a/main/tests/test_oa_hash_map.cpp b/main/tests/test_oa_hash_map.cpp index bf5b4588ea..beee52d1de 100644 --- a/main/tests/test_oa_hash_map.cpp +++ b/main/tests/test_oa_hash_map.cpp @@ -140,6 +140,19 @@ MainLoop *test() { OS::get_singleton()->print("test for issue #31402 passed.\n"); } + // test collision resolution, should not crash or run indefinitely + { + OAHashMap<int, int> map(4); + map.set(1, 1); + map.set(5, 1); + map.set(9, 1); + map.set(13, 1); + map.remove(5); + map.remove(9); + map.remove(13); + map.set(5, 1); + } + return NULL; } } // namespace TestOAHashMap diff --git a/misc/dist/html/fixed-size.html b/misc/dist/html/fixed-size.html index 14766e8239..1cc6fd715e 100644 --- a/misc/dist/html/fixed-size.html +++ b/misc/dist/html/fixed-size.html @@ -229,6 +229,7 @@ $GODOT_HEAD_INCLUDE (function() { + const EXECUTABLE_NAME = '$GODOT_BASENAME'; const MAIN_PACK = '$GODOT_BASENAME.pck'; const DEBUG_ENABLED = $GODOT_DEBUG_ENABLED; const INDETERMINATE_STATUS_STEP_MS = 100; @@ -380,7 +381,7 @@ $GODOT_HEAD_INCLUDE } else { setStatusMode('indeterminate'); engine.setCanvas(canvas); - engine.startGame(MAIN_PACK).then(() => { + engine.startGame(EXECUTABLE_NAME, MAIN_PACK).then(() => { setStatusMode('hidden'); initializing = false; }, displayFailureNotice); diff --git a/misc/dist/html/full-size.html b/misc/dist/html/full-size.html index 349420b3f3..9269227d02 100644 --- a/misc/dist/html/full-size.html +++ b/misc/dist/html/full-size.html @@ -142,6 +142,7 @@ $GODOT_HEAD_INCLUDE (function() { + const EXECUTABLE_NAME = '$GODOT_BASENAME'; const MAIN_PACK = '$GODOT_BASENAME.pck'; const INDETERMINATE_STATUS_STEP_MS = 100; @@ -182,7 +183,7 @@ $GODOT_HEAD_INCLUDE }); animationCallbacks = animationCallbacks.filter(function(value) { return (value != animateStatusIndeterminate); - } + }); switch (mode) { case 'progress': statusProgress.style.display = 'block'; @@ -254,7 +255,7 @@ $GODOT_HEAD_INCLUDE } else { setStatusMode('indeterminate'); engine.setCanvas(canvas); - engine.startGame(MAIN_PACK).then(() => { + engine.startGame(EXECUTABLE_NAME, MAIN_PACK).then(() => { setStatusMode('hidden'); initializing = false; }, displayFailureNotice); diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png Binary files differindex 1299ceaee5..7c9cac3f0e 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-480h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png Binary files differindex 604a7ba701..0226bdf7cd 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png Binary files differindex bffb8c9fde..25904c186c 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-667h@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png Binary files differindex 47826cd683..649df071f9 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png Binary files differindex 0f44a704b5..f3bd86a7de 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape-X.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png Binary files differindex 07ab777bc2..d5692eaffa 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png Binary files differindex 774b9c5bbf..8c4fe87b9c 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png Binary files differindex fff36679c7..e755beb803 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-736h@3x.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png Binary files differindex 0804519faa..f676fda263 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait-X.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png Binary files differindex 833142222c..43da4f3ed6 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait.png diff --git a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png Binary files differindex 4c934c4a53..075a6790ce 100644 --- a/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png +++ b/misc/dist/ios_xcode/godot_ios/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png diff --git a/misc/hooks/pre-commit-clang-format b/misc/hooks/pre-commit-clang-format index 3a0ac9f389..e309233a8b 100755 --- a/misc/hooks/pre-commit-clang-format +++ b/misc/hooks/pre-commit-clang-format @@ -86,7 +86,7 @@ do if grep -q "thirdparty" <<< $file; then continue; fi - if grep -q "platform/android/java/src/com" <<< $file; then + if grep -q "platform/android/java/lib/src/com" <<< $file; then continue; fi diff --git a/misc/ide/jetbrains/AndroidManifest.xml b/misc/ide/jetbrains/AndroidManifest.xml deleted file mode 100644 index 232a95e779..0000000000 --- a/misc/ide/jetbrains/AndroidManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - package="com.godot.game" - android:versionCode="1" - android:versionName="1.0" - android:installLocation="auto" - > -<supports-screens android:smallScreens="true" - android:normalScreens="true" - android:largeScreens="true" - android:xlargeScreens="true"/> - - <uses-feature android:glEsVersion="0x00020000" android:required="true" /> - - - - <application android:label="@string/godot_project_name_string" android:icon="@drawable/icon" android:allowBackup="false" tools:ignore="GoogleAppIndexingWarning" > - <activity android:name="org.godotengine.godot.Godot" - android:label="@string/godot_project_name_string" - android:theme="@android:style/Theme.NoTitleBar.Fullscreen" - android:launchMode="singleTask" - android:screenOrientation="landscape" - android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize" - android:resizeableActivity="false" - tools:ignore="UnusedAttribute"> - - <intent-filter> - <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - </activity> - <service android:name="org.godotengine.godot.GodotDownloaderService" /> - - - - </application> - - <instrumentation android:icon="@drawable/icon" - android:label="@string/godot_project_name_string" - android:name="org.godotengine.godot.GodotInstrumentation" - android:targetPackage="com.godot.game" /> - -</manifest> diff --git a/misc/ide/jetbrains/build.gradle b/misc/ide/jetbrains/build.gradle deleted file mode 100644 index dea81b4ea3..0000000000 --- a/misc/ide/jetbrains/build.gradle +++ /dev/null @@ -1,108 +0,0 @@ -buildscript { - repositories { - google() - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' - } -} - -allprojects { - repositories { - google() - jcenter() - } -} - -apply plugin: 'com.android.library' - -dependencies { - implementation "com.android.support:support-core-utils:28.0.0" -} - -def pathToRootDir = "../../../" -// Note: Only keep the abis you support to speed up the gradle 'assemble' task. -def supportedAbis = ["armv7", "arm64v8", "x86", "x86_64"] - -android { - - lintOptions { - abortOnError false - disable "MissingTranslation", 'UnusedResources' - } - - compileSdkVersion 28 - buildToolsVersion "28.0.3" - useLibrary 'org.apache.http.legacy' - - packagingOptions { - exclude 'META-INF/LICENSE' - exclude 'META-INF/NOTICE' - } - defaultConfig { - minSdkVersion 18 - targetSdkVersion 28 - } - - sourceSets { - main { - manifest.srcFile "AndroidManifest.xml" - java.srcDirs = ["${pathToRootDir}platform/android/java/src"] - res.srcDirs = ["${pathToRootDir}platform/android/java/res"] - aidl.srcDirs = ["${pathToRootDir}platform/android/java/aidl"] - assets.srcDirs = ["${pathToRootDir}platform/android/java/assets"] - } - debug.jniLibs.srcDirs = ["${pathToRootDir}platform/android/java/libs/debug"] - release.jniLibs.srcDirs = ["${pathToRootDir}platform/android/java/libs/release"] - } - - libraryVariants.all { variant -> - variant.outputs.all { output -> - output.outputFileName = "godot-lib.${variant.name}.aar" - } - - def buildType = variant.buildType.name.capitalize() - - def taskPrefix = "" - if (project.path != ":") { - taskPrefix = project.path + ":" - } - - // Disable the externalNativeBuild* task as it would cause build failures since the cmake build - // files is only setup for editing support. - gradle.startParameter.excludedTaskNames += taskPrefix + "externalNativeBuild" + buildType - - // Create tasks to generate the Godot native libraries. - def taskName = "compileGodotNativeLibs" + buildType - def releaseTarget = "release" - if (buildType == "Debug") { - releaseTarget += "_debug" - } - - def abiTaskNames = [] - // Creating gradle tasks to generate the native libraries for the supported abis. - supportedAbis.each { abi -> - def abiTaskName = taskName + abi.capitalize() - abiTaskNames += abiTaskName - tasks.create(name: abiTaskName, type: Exec) { - executable "scons" - args "--directory=${pathToRootDir}", "platform=android", "target=${releaseTarget}", "android_arch=${abi}" - } - } - - // Creating gradle task to run all of the previously generated tasks. - tasks.create(name: taskName, type: GradleBuild) { - tasks = abiTaskNames - } - - // Schedule the tasks so the generated libs are present before the aar file is packaged. - tasks["merge${buildType}JniLibFolders"].dependsOn taskName - } - - externalNativeBuild { - cmake { - path "CMakeLists.txt" - } - } -} diff --git a/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar b/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar Binary files differdeleted file mode 100644 index f6b961fd5a..0000000000 --- a/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.jar +++ /dev/null diff --git a/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties b/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 22e7a5c60b..0000000000 --- a/misc/ide/jetbrains/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed Aug 21 13:47:30 PDT 2019 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/misc/ide/jetbrains/gradlew b/misc/ide/jetbrains/gradlew deleted file mode 100755 index cccdd3d517..0000000000 --- a/misc/ide/jetbrains/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/misc/ide/jetbrains/gradlew.bat b/misc/ide/jetbrains/gradlew.bat deleted file mode 100644 index f9553162f1..0000000000 --- a/misc/ide/jetbrains/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/misc/scripts/fix_style.sh b/misc/scripts/fix_style.sh index 7a335c21ea..19ca781535 100755 --- a/misc/scripts/fix_style.sh +++ b/misc/scripts/fix_style.sh @@ -41,7 +41,7 @@ if $run_clang_format; then echo -e "Formatting ${extension} files..." find \( -path "./.git" \ -o -path "./thirdparty" \ - -o -path "./platform/android/java/src/com" \ + -o -path "./platform/android/java/lib/src/com/google" \ \) -prune \ -o -name "*${extension}" \ -exec clang-format -i {} \; @@ -54,7 +54,7 @@ if $run_fix_headers; then find \( -path "./.git" -o -path "./thirdparty" \) -prune \ -o -regex '.*\.\(c\|h\|cpp\|hpp\|cc\|hh\|cxx\|m\|mm\|java\)' \ > tmp-files - cat tmp-files | grep -v ".git\|thirdparty\|theme_data.h\|platform/android/java/src/com\|platform/android/java/src/org/godotengine/godot/input/InputManager" > files + cat tmp-files | grep -v ".git\|thirdparty\|theme_data.h\|platform/android/java/lib/src/com/google\|platform/android/java/lib/src/org/godotengine/godot/input/InputManager" > files python misc/scripts/fix_headers.py rm -f tmp-files files fi diff --git a/misc/scripts/sort-demos.sh b/misc/scripts/sort-demos.sh deleted file mode 100644 index 5e01b86b46..0000000000 --- a/misc/scripts/sort-demos.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# When scanning for demos, the project manager sorts them based on their -# timestamp, i.e. last modification date. This can make for a pretty -# messy output, so this script 'touches' each project.godot file in reverse -# alphabetical order to ensure a nice listing. -# -# It's good practice to run it once before packaging demos on the build -# server. - -if [ ! -d "demos" ]; then - echo "Run this script from the root directory where 'demos/' is contained." - exit 1 -fi - -if [ -e demos.list ]; then - rm -f demos.list -fi - -for dir in 2d 3d gui misc viewport; do - find "demos/$dir" -name "project.godot" |sort >> demos.list -done -cat demos.list |sort -r > demos_r.list - -while read line; do - touch $line - sleep 0.2 -done < demos_r.list - -#rm -f demos.list demos_r.list diff --git a/misc/travis/android-tools-linux.sh b/misc/travis/android-tools-linux.sh index fb6e2f0f9b..d0c123ee6c 100755 --- a/misc/travis/android-tools-linux.sh +++ b/misc/travis/android-tools-linux.sh @@ -24,12 +24,12 @@ ANDROID_SDK_URL=$ANDROID_BASE_URL/$ANDROID_SDK_FILENAME ANDROID_SDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_SDK_DIR ANDROID_SDK_SHA256=92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9 -ANDROID_NDK_RELEASE=r18 +ANDROID_NDK_RELEASE=r20 ANDROID_NDK_DIR=android-ndk ANDROID_NDK_FILENAME=android-ndk-$ANDROID_NDK_RELEASE-linux-x86_64.zip ANDROID_NDK_URL=$ANDROID_BASE_URL/$ANDROID_NDK_FILENAME ANDROID_NDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_NDK_DIR -ANDROID_NDK_SHA1=2ac2e8e1ef73ed551cac3a1479bb28bd49369212 +ANDROID_NDK_SHA1=8665fc84a1b1f0d6ab3b5fdd1e30200cc7b9adff echo echo "Download and install Android development tools ..." @@ -70,12 +70,13 @@ if [ ! -d $ANDROID_NDK_DIR ]; then echo fi -echo "Installing: Android Tools ..." mkdir -p ~/.android && echo "count=0" > ~/.android/repositories.cfg +echo "Installing: Accepting Licenses ..." yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager --licenses > /dev/null +echo "Installing: Android Build and Platform Tools ..." yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager 'tools' > /dev/null yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager 'platform-tools' > /dev/null -yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager 'build-tools;28.0.1' > /dev/null +yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager 'build-tools;28.0.3' > /dev/null echo EXPORT_VAL="export ANDROID_HOME=$ANDROID_SDK_PATH" diff --git a/misc/travis/android-tools-osx.sh b/misc/travis/android-tools-osx.sh deleted file mode 100755 index 96125a3a3f..0000000000 --- a/misc/travis/android-tools-osx.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/bin/bash - -# SDK -# https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip -# SHA-256 4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9 -# latest version available here: https://developer.android.com/studio/index.html - -# NDK -# https://dl.google.com/android/repository/android-ndk-r15c-darwin-x86_64.zip -# SHA-1 ea4b5d76475db84745aa8828000d009625fc1f98 -# latest version available here: https://developer.android.com/ndk/downloads/index.html - -BASH_RC=~/.bashrc -GODOT_BUILD_TOOLS_PATH=./godot-dev/build-tools -mkdir -p $GODOT_BUILD_TOOLS_PATH -cd $GODOT_BUILD_TOOLS_PATH - -ANDROID_BASE_URL=http://dl.google.com/android/repository - -ANDROID_SDK_RELEASE=3859397 -ANDROID_SDK_DIR=android-sdk -ANDROID_SDK_FILENAME=sdk-tools-darwin-$ANDROID_SDK_RELEASE.zip -ANDROID_SDK_URL=$ANDROID_BASE_URL/$ANDROID_SDK_FILENAME -ANDROID_SDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_SDK_DIR -ANDROID_SDK_SHA256=4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9 - -ANDROID_NDK_RELEASE=r15c -ANDROID_NDK_DIR=android-ndk -ANDROID_NDK_FILENAME=android-ndk-$ANDROID_NDK_RELEASE-darwin-x86_64.zip -ANDROID_NDK_URL=$ANDROID_BASE_URL/$ANDROID_NDK_FILENAME -ANDROID_NDK_PATH=$GODOT_BUILD_TOOLS_PATH/$ANDROID_NDK_DIR -ANDROID_NDK_SHA1=ea4b5d76475db84745aa8828000d009625fc1f98 - -echo -echo "Download and install Android development tools ..." -echo - -if [ ! -e $ANDROID_SDK_FILENAME ]; then - echo "Downloading: Android SDK ..." - curl -L -O $ANDROID_SDK_URL -else - echo $ANDROID_SDK_SHA1 $ANDROID_SDK_FILENAME > $ANDROID_SDK_FILENAME.sha1 - if [ $(shasum -a 256 < $ANDROID_SDK_FILENAME | awk '{print $1;}') != $ANDROID_SDK_SHA1 ]; then - echo "Downloading: Android SDK ..." - curl -L -O $ANDROID_SDK_URL - fi -fi - -if [ ! -d $ANDROID_SDK_DIR ]; then - echo "Extracting: Android SDK ..." - mkdir -p $ANDROID_SDK_DIR && tar -xf $ANDROID_SDK_FILENAME -C $ANDROID_SDK_DIR - echo -fi - -if [ ! -e $ANDROID_NDK_FILENAME ]; then - echo "Downloading: Android NDK ..." - curl -L -O $ANDROID_NDK_URL -else - echo $ANDROID_NDK_MD5 $ANDROID_NDK_FILENAME > $ANDROID_NDK_FILENAME.md5 - if [ $(shasum -a 1 < $ANDROID_NDK_FILENAME | awk '{print $1;}') != $ANDROID_NDK_SHA1 ]; then - echo "Downloading: Android NDK ..." - curl -L -O $ANDROID_NDK_URL - fi -fi - -if [ ! -d $ANDROID_NDK_DIR ]; then - echo "Extracting: Android NDK ..." - tar -xf $ANDROID_NDK_FILENAME - mv android-ndk-$ANDROID_NDK_RELEASE $ANDROID_NDK_DIR - echo -fi - -echo "Installing: Android Tools ..." -#$ANDROID_SDK_DIR/tools/bin/sdkmanager --all -yes | $ANDROID_SDK_DIR/tools/bin/sdkmanager --licenses > /dev/null -$ANDROID_SDK_DIR/tools/bin/sdkmanager 'tools' > /dev/null -$ANDROID_SDK_DIR/tools/bin/sdkmanager 'platform-tools' > /dev/null -$ANDROID_SDK_DIR/tools/bin/sdkmanager 'build-tools;26.0.2' > /dev/null -echo - -EXPORT_VAL="export ANDROID_HOME=$ANDROID_SDK_PATH" -if ! grep -q "^$EXPORT_VAL" $BASH_RC; then - echo $EXPORT_VAL >> $BASH_RC -fi -#eval $EXPORT_VAL - -EXPORT_VAL="export ANDROID_NDK_ROOT=$ANDROID_NDK_PATH" -if ! grep -q "^$EXPORT_VAL" $BASH_RC; then - echo $EXPORT_VAL >> $BASH_RC -fi -#eval $EXPORT_VAL - -EXPORT_VAL="export PATH=$PATH:$ANDROID_SDK_PATH/tools" -if ! grep -q "^export PATH=.*$ANDROID_SDK_PATH/tools.*" $BASH_RC; then - echo $EXPORT_VAL >> $BASH_RC -fi -#eval $EXPORT_VAL - -EXPORT_VAL="export PATH=$PATH:$ANDROID_SDK_PATH/tools/bin" -if ! grep -q "^export PATH=.*$ANDROID_SDK_PATH/tools/bin.*" $BASH_RC; then - echo $EXPORT_VAL >> $BASH_RC -fi -#eval $EXPORT_VAL - -echo -echo "Done!" -echo diff --git a/misc/travis/clang-format.sh b/misc/travis/clang-format.sh index 48378281d4..097b2a9378 100755 --- a/misc/travis/clang-format.sh +++ b/misc/travis/clang-format.sh @@ -11,7 +11,7 @@ else RANGE=HEAD fi -FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -v platform/android/java/src/com/ | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|m|mm|inc|java|glsl)$") +FILES=$(git diff-tree --no-commit-id --name-only -r $RANGE | grep -v thirdparty/ | grep -v platform/android/java/lib/src/com/ | grep -E "\.(c|h|cpp|hpp|cc|hh|cxx|m|mm|inc|java|glsl)$") echo "Checking files:\n$FILES" # create a random filename to store our generated patch diff --git a/modules/assimp/SCsub b/modules/assimp/SCsub index 275f1ff5e9..5e66b50de3 100644 --- a/modules/assimp/SCsub +++ b/modules/assimp/SCsub @@ -72,6 +72,9 @@ env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_NO_X3D_IMPORTER']) env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_NO_GLTF_IMPORTER']) env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_NO_GLTF2_IMPORTER']) env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_SINGLETHREADED']) +env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_NO_M3D_IMPORTER']) +env_assimp.Append(CPPDEFINES=['ASSIMP_BUILD_NO_MMD_IMPORTER']) + if(env['platform'] == 'windows'): env_assimp.Append(CPPDEFINES=['PLATFORM_WINDOWS']) diff --git a/modules/assimp/editor_scene_importer_assimp.cpp b/modules/assimp/editor_scene_importer_assimp.cpp index e5439fd132..830e6e7e0c 100644 --- a/modules/assimp/editor_scene_importer_assimp.cpp +++ b/modules/assimp/editor_scene_importer_assimp.cpp @@ -29,34 +29,42 @@ /*************************************************************************/ #include "editor_scene_importer_assimp.h" -#include "core/bind/core_bind.h" #include "core/io/image_loader.h" -#include "editor/editor_file_system.h" #include "editor/import/resource_importer_scene.h" -#include "editor_settings.h" #include "import_utils.h" #include "scene/3d/camera.h" #include "scene/3d/light.h" #include "scene/3d/mesh_instance.h" -#include "scene/animation/animation_player.h" #include "scene/main/node.h" #include "scene/resources/material.h" #include "scene/resources/surface_tool.h" -#include <assimp/SceneCombiner.h> -#include <assimp/cexport.h> -#include <assimp/cimport.h> #include <assimp/matrix4x4.h> -#include <assimp/pbrmaterial.h> #include <assimp/postprocess.h> #include <assimp/scene.h> -#include <zutil.h> -#include <assimp/DefaultLogger.hpp> #include <assimp/Importer.hpp> #include <assimp/LogStream.hpp> -#include <assimp/Logger.hpp> #include <string> +// move into assimp +aiBone *get_bone_by_name(const aiScene *scene, aiString bone_name) { + for (unsigned int mesh_id = 0; mesh_id < scene->mNumMeshes; ++mesh_id) { + aiMesh *mesh = scene->mMeshes[mesh_id]; + + // iterate over all the bones on the mesh for this node only! + for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; boneIndex++) { + + aiBone *bone = mesh->mBones[boneIndex]; + if (bone->mName == bone_name) { + printf("matched bone by name: %s\n", bone->mName.C_Str()); + return bone; + } + } + } + + return NULL; +} + void EditorSceneImporterAssimp::get_extensions(List<String> *r_extensions) const { const String import_setting_string = "filesystem/import/open_asset_import/"; @@ -68,18 +76,15 @@ void EditorSceneImporterAssimp::get_extensions(List<String> *r_extensions) const ImportFormat import = { exts, true }; import_format.insert("fbx", import); } - { - Vector<String> exts; - exts.push_back("pmx"); - ImportFormat import = { exts, true }; - import_format.insert("mmd", import); - } for (Map<String, ImportFormat>::Element *E = import_format.front(); E; E = E->next()) { - _register_project_setting_import(E->key(), import_setting_string, E->get().extensions, r_extensions, E->get().is_default); + _register_project_setting_import(E->key(), import_setting_string, E->get().extensions, r_extensions, + E->get().is_default); } } -void EditorSceneImporterAssimp::_register_project_setting_import(const String generic, const String import_setting_string, const Vector<String> &exts, List<String> *r_extensions, const bool p_enabled) const { +void EditorSceneImporterAssimp::_register_project_setting_import(const String generic, const String import_setting_string, + const Vector<String> &exts, List<String> *r_extensions, + const bool p_enabled) const { const String use_generic = "use_" + generic; _GLOBAL_DEF(import_setting_string + use_generic, p_enabled, true); if (ProjectSettings::get_singleton()->get(import_setting_string + use_generic)) { @@ -96,7 +101,8 @@ uint32_t EditorSceneImporterAssimp::get_import_flags() const { void EditorSceneImporterAssimp::_bind_methods() { } -Node *EditorSceneImporterAssimp::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { +Node *EditorSceneImporterAssimp::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, + List<String> *r_missing_deps, Error *r_err) { Assimp::Importer importer; std::wstring w_path = ProjectSettings::get_singleton()->globalize_path(p_path).c_str(); std::string s_path(w_path.begin(), w_path.end()); @@ -114,9 +120,11 @@ Node *EditorSceneImporterAssimp::import_scene(const String &p_path, uint32_t p_f //importer.SetPropertyFloat(AI_CONFIG_PP_DB_THRESHOLD, 1.0f); int32_t post_process_Steps = aiProcess_CalcTangentSpace | - aiProcess_GlobalScale | // imports models and listens to their file scale for CM to M conversions + aiProcess_GlobalScale | + // imports models and listens to their file scale for CM to M conversions //aiProcess_FlipUVs | - aiProcess_FlipWindingOrder | // very important for culling so that it is done in the correct order. + aiProcess_FlipWindingOrder | + // very important for culling so that it is done in the correct order. //aiProcess_DropNormals | //aiProcess_GenSmoothNormals | //aiProcess_JoinIdenticalVertices | @@ -131,8 +139,9 @@ Node *EditorSceneImporterAssimp::import_scene(const String &p_path, uint32_t p_f aiProcess_TransformUVCoords | aiProcess_FindInstances | //aiProcess_FixInfacingNormals | - aiProcess_ValidateDataStructure | + //aiProcess_ValidateDataStructure | aiProcess_OptimizeMeshes | + aiProcess_PopulateArmatureData | //aiProcess_OptimizeGraph | //aiProcess_Debone | // aiProcess_EmbedTextures | @@ -157,7 +166,8 @@ struct EditorSceneImporterAssetImportInterpolate { float t2 = t * t; float t3 = t2 * t; - return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); + return 0.5f * ((2.0f * p1) + (-p0 + p2) * t + (2.0f * p0 - 5.0f * p1 + 4 * p2 - p3) * t2 + + (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * t3); } T bezier(T start, T control_1, T control_2, T end, float t) { @@ -199,7 +209,8 @@ struct EditorSceneImporterAssetImportInterpolate<Quat> { }; template <class T> -T EditorSceneImporterAssimp::_interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, float p_time, AssetImportAnimation::Interpolation p_interp) { +T EditorSceneImporterAssimp::_interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, float p_time, + AssetImportAnimation::Interpolation p_interp) { //could use binary search, worth it? int idx = -1; for (int i = 0; i < p_times.size(); i++) { @@ -271,48 +282,257 @@ T EditorSceneImporterAssimp::_interpolate_track(const Vector<float> &p_times, co ERR_FAIL_V(p_values[0]); } -Spatial *EditorSceneImporterAssimp::_generate_scene(const String &p_path, aiScene *scene, const uint32_t p_flags, int p_bake_fps, const int32_t p_max_bone_weights) { +aiBone *EditorSceneImporterAssimp::get_bone_from_stack(ImportState &state, aiString name) { + List<aiBone *>::Element *iter; + aiBone *bone = NULL; + for (iter = state.bone_stack.front(); iter; iter = iter->next()) { + bone = (aiBone *)iter->get(); + + if (bone && bone->mName == name) { + state.bone_stack.erase(bone); + return bone; + } + } + + return NULL; +} + +Spatial * +EditorSceneImporterAssimp::_generate_scene(const String &p_path, aiScene *scene, const uint32_t p_flags, int p_bake_fps, + const int32_t p_max_bone_weights) { ERR_FAIL_COND_V(scene == NULL, NULL); ImportState state; state.path = p_path; state.assimp_scene = scene; state.max_bone_weights = p_max_bone_weights; - state.root = memnew(Spatial); - state.fbx = false; state.animation_player = NULL; - //fill light map cache - for (size_t l = 0; l < scene->mNumLights; l++) { + // populate light map + for (unsigned int l = 0; l < scene->mNumLights; l++) { aiLight *ai_light = scene->mLights[l]; ERR_CONTINUE(ai_light == NULL); state.light_cache[AssimpUtils::get_assimp_string(ai_light->mName)] = l; } - //fill camera cache - for (size_t c = 0; c < scene->mNumCameras; c++) { + // fill camera cache + for (unsigned int c = 0; c < scene->mNumCameras; c++) { aiCamera *ai_camera = scene->mCameras[c]; ERR_CONTINUE(ai_camera == NULL); state.camera_cache[AssimpUtils::get_assimp_string(ai_camera->mName)] = c; } if (scene->mRootNode) { + state.nodes.push_back(scene->mRootNode); - //generate nodes - for (uint32_t i = 0; i < scene->mRootNode->mNumChildren; i++) { - _generate_node(state, NULL, scene->mRootNode->mChildren[i], state.root); + // make flat node tree - in order to make processing deterministic + for (unsigned int i = 0; i < scene->mRootNode->mNumChildren; i++) { + _generate_node(state, scene->mRootNode->mChildren[i]); } - // finalize skeleton - for (Map<Skeleton *, const Spatial *>::Element *key_value_pair = state.armature_skeletons.front(); key_value_pair; key_value_pair = key_value_pair->next()) { - Skeleton *skeleton = key_value_pair->key(); - // convert world to local for skeleton bone rests - skeleton->localize_rests(); + RegenerateBoneStack(state); + + Node *last_valid_parent = NULL; + + List<const aiNode *>::Element *iter; + for (iter = state.nodes.front(); iter; iter = iter->next()) { + const aiNode *element_assimp_node = iter->get(); + const aiNode *parent_assimp_node = element_assimp_node->mParent; + + String node_name = AssimpUtils::get_assimp_string(element_assimp_node->mName); + //print_verbose("node: " + node_name); + + Spatial *spatial = NULL; + Transform transform = AssimpUtils::assimp_matrix_transform(element_assimp_node->mTransformation); + + // retrieve this node bone + aiBone *bone = get_bone_from_stack(state, element_assimp_node->mName); + + if (state.light_cache.has(node_name)) { + spatial = create_light(state, node_name, transform); + } else if (state.camera_cache.has(node_name)) { + spatial = create_camera(state, node_name, transform); + } else if (state.armature_nodes.find(element_assimp_node)) { + // create skeleton + print_verbose("Making skeleton: " + node_name); + Skeleton *skeleton = memnew(Skeleton); + spatial = skeleton; + if (!state.armature_skeletons.has(element_assimp_node)) { + state.armature_skeletons.insert(element_assimp_node, skeleton); + } + } else if (bone != NULL) { + continue; + } else if (element_assimp_node->mNumMeshes > 0) { + spatial = memnew(Spatial); + } else { + spatial = memnew(Spatial); + } + + ERR_CONTINUE_MSG(spatial == NULL, "FBX Import - are we out of ram?"); + // we on purpose set the transform and name after creating the node. + + spatial->set_name(node_name); + spatial->set_global_transform(transform); + + // first element is root + if (iter == state.nodes.front()) { + state.root = spatial; + } + + // flat node map parent lookup tool + state.flat_node_map.insert(element_assimp_node, spatial); + + Map<const aiNode *, Spatial *>::Element *parent_lookup = state.flat_node_map.find(parent_assimp_node); + + // note: this always fails on the root node :) keep that in mind this is by design + if (parent_lookup) { + Spatial *parent_node = parent_lookup->value(); + + ERR_FAIL_COND_V_MSG(parent_node == NULL, state.root, + "Parent node invalid even though lookup successful, out of ram?") + + if (parent_node && spatial != state.root) { + parent_node->add_child(spatial); + spatial->set_owner(state.root); + } else if (spatial == state.root) { + // required - think about it root never has a parent yet is valid, anything else without a parent is not valid. + } else // Safety for instances + { + WARN_PRINT( + "Failed to find parent node instance after lookup, serious warning report to godot with model"); + memdelete(spatial); // this node is broken + } + } else if (spatial != state.root) { + // if the ainode is not in the tree + // parent it to the last good parent found + if (last_valid_parent) { + last_valid_parent->add_child(spatial); + spatial->set_owner(state.root); + } else { + // this is a serious error? + memdelete(spatial); + } + } + + // update last valid parent + last_valid_parent = spatial; + } + print_verbose("node counts: " + itos(state.nodes.size())); + + // make clean bone stack + RegenerateBoneStack(state); + + print_verbose("generating godot bone data"); + + print_verbose("Godot bone stack count: " + itos(state.bone_stack.size())); + + // This is a list of bones, duplicates are from other meshes and must be dealt with properly + for (List<aiBone *>::Element *element = state.bone_stack.front(); element; element = element->next()) { + aiBone *bone = element->get(); + + ERR_CONTINUE_MSG(!bone, "invalid bone read from assimp?"); + + // Utilities for armature lookup - for now only FBX makes these + aiNode *armature_for_bone = bone->mArmature; + + // Utilities for bone node lookup - for now only FBX makes these + aiNode *bone_node = bone->mNode; + aiNode *parent_node = bone_node->mParent; + + String bone_name = AssimpUtils::get_anim_string_from_assimp(bone->mName); + ERR_CONTINUE_MSG(armature_for_bone == NULL, "Armature for bone invalid: " + bone_name); + Skeleton *skeleton = state.armature_skeletons[armature_for_bone]; + + state.skeleton_bone_map[bone] = skeleton; + + if (bone_name.empty()) { + bone_name = "untitled_bone_name"; + WARN_PRINT("Untitled bone name detected... report with file please"); + } + + // todo: this is where skin support goes + if (skeleton && skeleton->find_bone(bone_name) == -1) { + print_verbose("[Godot Glue] Imported bone" + bone_name); + int boneIdx = skeleton->get_bone_count(); + + Transform pform = AssimpUtils::assimp_matrix_transform(bone->mNode->mTransformation); + skeleton->add_bone(bone_name); + skeleton->set_bone_rest(boneIdx, pform); + skeleton->set_bone_pose(boneIdx, pform); + + if (parent_node != NULL) { + int parent_bone_id = skeleton->find_bone(AssimpUtils::get_anim_string_from_assimp(parent_node->mName)); + int current_bone_id = boneIdx; + skeleton->set_bone_parent(current_bone_id, parent_bone_id); + } + } } print_verbose("generating mesh phase from skeletal mesh"); - generate_mesh_phase_from_skeletal_mesh(state); + + List<Spatial *> cleanup_template_nodes; + + for (Map<const aiNode *, Spatial *>::Element *key_value_pair = state.flat_node_map.front(); key_value_pair; key_value_pair = key_value_pair->next()) { + const aiNode *assimp_node = key_value_pair->key(); + Spatial *mesh_template = key_value_pair->value(); + Node *parent_node = mesh_template->get_parent(); + + ERR_CONTINUE(assimp_node == NULL); + ERR_CONTINUE(mesh_template == NULL); + + if (mesh_template == state.root) { + continue; + } + + if (parent_node == NULL) { + print_error("Found invalid parent node!"); + continue; // root node + } + + String node_name = AssimpUtils::get_assimp_string(assimp_node->mName); + Transform node_transform = AssimpUtils::assimp_matrix_transform(assimp_node->mTransformation); + + if (assimp_node->mNumMeshes > 0) { + MeshInstance *mesh = create_mesh(state, assimp_node, node_name, parent_node, node_transform); + if (mesh) { + + parent_node->remove_child(mesh_template); + + // re-parent children + List<Node *> children; + // re-parent all children to new node + // note: since get_child_count will change during execution we must build a list first to be safe. + for (int childId = 0; childId < mesh_template->get_child_count(); childId++) { + // get child + Node *child = mesh_template->get_child(childId); + children.push_back(child); + } + + for (List<Node *>::Element *element = children.front(); element; element = element->next()) { + // reparent the children to the real mesh node. + mesh_template->remove_child(element->get()); + mesh->add_child(element->get()); + element->get()->set_owner(state.root); + } + + // update mesh in list so that each mesh node is available + // this makes the template unavailable which is the desired behaviour + state.flat_node_map[assimp_node] = mesh; + + cleanup_template_nodes.push_back(mesh_template); + + // clean up this list we don't need it + children.clear(); + } + } + } + + for (List<Spatial *>::Element *element = cleanup_template_nodes.front(); element; element = element->next()) { + if (element->get()) { + memdelete(element->get()); + } + } } if (p_flags & IMPORT_ANIMATION && scene->mNumAnimations) { @@ -326,29 +546,39 @@ Spatial *EditorSceneImporterAssimp::_generate_scene(const String &p_path, aiScen } } + // + // Cleanup operations + // + + state.mesh_cache.clear(); + state.material_cache.clear(); + state.light_cache.clear(); + state.camera_cache.clear(); + state.assimp_node_map.clear(); + state.path_to_image_cache.clear(); + state.nodes.clear(); + state.flat_node_map.clear(); + state.armature_skeletons.clear(); + state.bone_stack.clear(); return state.root; } -void EditorSceneImporterAssimp::_insert_animation_track(ImportState &scene, const aiAnimation *assimp_anim, int p_track, int p_bake_fps, Ref<Animation> animation, float ticks_per_second, Skeleton *p_skeleton, const NodePath &p_path, const String &p_name) { - - const aiNodeAnim *assimp_track = assimp_anim->mChannels[p_track]; +void EditorSceneImporterAssimp::_insert_animation_track(ImportState &scene, const aiAnimation *assimp_anim, int track_id, + int anim_fps, Ref<Animation> animation, float ticks_per_second, + Skeleton *skeleton, const NodePath &node_path, + const String &node_name, aiBone *track_bone) { + const aiNodeAnim *assimp_track = assimp_anim->mChannels[track_id]; //make transform track int track_idx = animation->get_track_count(); animation->add_track(Animation::TYPE_TRANSFORM); - animation->track_set_path(track_idx, p_path); + animation->track_set_path(track_idx, node_path); //first determine animation length - float increment = 1.0 / float(p_bake_fps); + float increment = 1.0 / float(anim_fps); float time = 0.0; bool last = false; - int skeleton_bone = -1; - - if (p_skeleton) { - skeleton_bone = p_skeleton->find_bone(p_name); - } - Vector<Vector3> pos_values; Vector<float> pos_times; Vector<Vector3> scale_values; @@ -373,6 +603,7 @@ void EditorSceneImporterAssimp::_insert_animation_track(ImportState &scene, cons scale_values.push_back(Vector3(scale.x, scale.y, scale.z)); scale_times.push_back(assimp_track->mScalingKeys[sc].mTime / ticks_per_second); } + while (true) { Vector3 pos; Quat rot; @@ -383,26 +614,34 @@ void EditorSceneImporterAssimp::_insert_animation_track(ImportState &scene, cons } if (rot_values.size()) { - rot = _interpolate_track<Quat>(rot_times, rot_values, time, AssetImportAnimation::INTERP_LINEAR).normalized(); + rot = _interpolate_track<Quat>(rot_times, rot_values, time, + AssetImportAnimation::INTERP_LINEAR) + .normalized(); } if (scale_values.size()) { scale = _interpolate_track<Vector3>(scale_times, scale_values, time, AssetImportAnimation::INTERP_LINEAR); } - if (skeleton_bone >= 0) { - Transform xform; - xform.basis.set_quat_scale(rot, scale); - xform.origin = pos; + if (skeleton) { + int skeleton_bone = skeleton->find_bone(node_name); - Transform rest_xform = p_skeleton->get_bone_rest(skeleton_bone); - xform = rest_xform.affine_inverse() * xform; - rot = xform.basis.get_rotation_quat(); - scale = xform.basis.get_scale(); - pos = xform.origin; - } + if (skeleton_bone >= 0 && track_bone) { + + Transform xform; + xform.basis.set_quat_scale(rot, scale); + xform.origin = pos; - rot.normalize(); + xform = skeleton->get_bone_pose(skeleton_bone).inverse() * xform; + + rot = xform.basis.get_rotation_quat(); + rot.normalize(); + scale = xform.basis.get_scale(); + pos = xform.origin; + } else { + ERR_FAIL_MSG("Skeleton bone lookup failed for skeleton: " + skeleton->get_name()); + } + } animation->track_set_interpolation_type(track_idx, Animation::INTERPOLATION_LINEAR); animation->transform_track_insert_key(track_idx, time, pos, rot, scale); @@ -417,6 +656,53 @@ void EditorSceneImporterAssimp::_insert_animation_track(ImportState &scene, cons } } +// I really do not like this but need to figure out a better way of removing it later. +Node *EditorSceneImporterAssimp::get_node_by_name(ImportState &state, String name) { + for (Map<const aiNode *, Spatial *>::Element *key_value_pair = state.flat_node_map.front(); key_value_pair; key_value_pair = key_value_pair->next()) { + const aiNode *assimp_node = key_value_pair->key(); + Spatial *node = key_value_pair->value(); + + String node_name = AssimpUtils::get_assimp_string(assimp_node->mName); + if (name == node_name && node) { + return node; + } + } + return NULL; +} + +/* Bone stack is a fifo handler for multiple armatures since armatures aren't a thing in assimp (yet) */ +void EditorSceneImporterAssimp::RegenerateBoneStack(ImportState &state) { + + state.bone_stack.clear(); + // build bone stack list + for (unsigned int mesh_id = 0; mesh_id < state.assimp_scene->mNumMeshes; ++mesh_id) { + aiMesh *mesh = state.assimp_scene->mMeshes[mesh_id]; + + // iterate over all the bones on the mesh for this node only! + for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; boneIndex++) { + aiBone *bone = mesh->mBones[boneIndex]; + + // doubtful this is required right now but best to check + if (!state.bone_stack.find(bone)) { + //print_verbose("[assimp] bone stack added: " + String(bone->mName.C_Str()) ); + state.bone_stack.push_back(bone); + } + } + } +} + +/* Bone stack is a fifo handler for multiple armatures since armatures aren't a thing in assimp (yet) */ +void EditorSceneImporterAssimp::RegenerateBoneStack(ImportState &state, aiMesh *mesh) { + state.bone_stack.clear(); + // iterate over all the bones on the mesh for this node only! + for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; boneIndex++) { + aiBone *bone = mesh->mBones[boneIndex]; + if (state.bone_stack.find(bone) == NULL) { + state.bone_stack.push_back(bone); + } + } +} + // animation tracks are per bone void EditorSceneImporterAssimp::_import_animation(ImportState &state, int p_animation_index, int p_bake_fps) { @@ -428,7 +714,7 @@ void EditorSceneImporterAssimp::_import_animation(ImportState &state, int p_anim if (name == String()) { name = "Animation " + itos(p_animation_index + 1); } - + print_verbose("import animation: " + name); float ticks_per_second = anim->mTicksPerSecond; if (state.assimp_scene->mMetaData != NULL && Math::is_equal_approx(ticks_per_second, 0.0f)) { @@ -451,34 +737,60 @@ void EditorSceneImporterAssimp::_import_animation(ImportState &state, int p_anim animation->set_name(name); animation->set_length(anim->mDuration / ticks_per_second); - //regular tracks + // generate bone stack for animation import + RegenerateBoneStack(state); + //regular tracks for (size_t i = 0; i < anim->mNumChannels; i++) { const aiNodeAnim *track = anim->mChannels[i]; String node_name = AssimpUtils::get_assimp_string(track->mNodeName); - + print_verbose("track name import: " + node_name); if (track->mNumRotationKeys == 0 && track->mNumPositionKeys == 0 && track->mNumScalingKeys == 0) { continue; //do not bother } - for (Map<Skeleton *, const Spatial *>::Element *key_value_pair = state.armature_skeletons.front(); key_value_pair; key_value_pair = key_value_pair->next()) { - Skeleton *skeleton = key_value_pair->key(); - - bool is_bone = skeleton->find_bone(node_name) != -1; - //print_verbose("Bone " + node_name + " is bone? " + (is_bone ? "Yes" : "No")); - NodePath node_path; + Skeleton *skeleton = NULL; + NodePath node_path; + aiBone *bone = NULL; - if (is_bone) { - String path = state.root->get_path_to(skeleton); - path += ":" + node_name; - node_path = path; - } else { - ERR_CONTINUE(!state.node_map.has(node_name)); - Node *node = state.node_map[node_name]; - node_path = state.root->get_path_to(node); + // Import skeleton bone animation for this track + // Any bone will do, no point in processing more than just what is in the skeleton + { + bone = get_bone_from_stack(state, track->mNodeName); + + if (bone) { + // get skeleton by bone + skeleton = state.armature_skeletons[bone->mArmature]; + + if (skeleton) { + String path = state.root->get_path_to(skeleton); + path += ":" + node_name; + node_path = path; + + if (node_path != NodePath()) { + _insert_animation_track(state, anim, i, p_bake_fps, animation, ticks_per_second, skeleton, + node_path, node_name, bone); + } else { + print_error("Failed to find valid node path for animation"); + } + } } + } - _insert_animation_track(state, anim, i, p_bake_fps, animation, ticks_per_second, skeleton, node_path, node_name); + // not a bone + // note this is flaky it uses node names which is unreliable + Node *allocated_node = get_node_by_name(state, node_name); + // todo: implement skeleton grabbing for node based animations too :) + // check if node exists, if it does then also apply animation track for node and bones above are all handled. + // this is now inclusive animation handling so that + // we import all the data and do not miss anything. + if (allocated_node) { + node_path = state.root->get_path_to(allocated_node); + + if (node_path != NodePath()) { + _insert_animation_track(state, anim, i, p_bake_fps, animation, ticks_per_second, skeleton, + node_path, node_name, nullptr); + } } } @@ -493,10 +805,9 @@ void EditorSceneImporterAssimp::_import_animation(ImportState &state, int p_anim ERR_CONTINUE(prop_name.split("*").size() != 2); - ERR_CONTINUE(!state.node_map.has(mesh_name)); - - const MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(state.node_map[mesh_name]); - + Node *item = get_node_by_name(state, mesh_name); + ERR_CONTINUE_MSG(!item, "failed to look up node by name"); + const MeshInstance *mesh_instance = Object::cast_to<MeshInstance>(item); ERR_CONTINUE(mesh_instance == NULL); String base_path = state.root->get_path_to(mesh_instance); @@ -527,20 +838,35 @@ void EditorSceneImporterAssimp::_import_animation(ImportState &state, int p_anim state.animation_player->add_animation(name, animation); } } - // -// Mesh Generation from indicies ? why do we need so much mesh code +// Mesh Generation from indices ? why do we need so much mesh code // [debt needs looked into] -Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( - ImportState &state, - const Vector<int> &p_surface_indices, - const aiNode *assimp_node, - Skeleton *p_skeleton) { +Ref<Mesh> +EditorSceneImporterAssimp::_generate_mesh_from_surface_indices(ImportState &state, const Vector<int> &p_surface_indices, + const aiNode *assimp_node, Ref<Skin> &skin, + Skeleton *&skeleton_assigned) { Ref<ArrayMesh> mesh; mesh.instance(); bool has_uvs = false; + Map<String, uint32_t> morph_mesh_string_lookup; + + for (int i = 0; i < p_surface_indices.size(); i++) { + const unsigned int mesh_idx = p_surface_indices[0]; + const aiMesh *ai_mesh = state.assimp_scene->mMeshes[mesh_idx]; + for (size_t j = 0; j < ai_mesh->mNumAnimMeshes; j++) { + String ai_anim_mesh_name = AssimpUtils::get_assimp_string(ai_mesh->mAnimMeshes[j]->mName); + if (!morph_mesh_string_lookup.has(ai_anim_mesh_name)) { + morph_mesh_string_lookup.insert(ai_anim_mesh_name, j); + mesh->set_blend_shape_mode(Mesh::BLEND_SHAPE_MODE_NORMALIZED); + if (ai_anim_mesh_name.empty()) { + ai_anim_mesh_name = String("morph_") + itos(j); + } + mesh->add_blend_shape(ai_anim_mesh_name); + } + } + } // // Process Vertex Weights // @@ -550,19 +876,30 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( Map<uint32_t, Vector<BoneInfo> > vertex_weights; - if (p_skeleton) { + if (ai_mesh->mNumBones > 0) { for (size_t b = 0; b < ai_mesh->mNumBones; b++) { aiBone *bone = ai_mesh->mBones[b]; - String bone_name = AssimpUtils::get_assimp_string(bone->mName); - int bone_index = p_skeleton->find_bone(bone_name); - ERR_CONTINUE(bone_index == -1); //bone refers to an unexisting index, wtf. + if (!skeleton_assigned) { + print_verbose("Assigned mesh skeleton during mesh creation"); + skeleton_assigned = state.skeleton_bone_map[bone]; + + if (!skin.is_valid()) { + print_verbose("Configured new skin"); + skin.instance(); + } else { + print_verbose("Reusing existing skin!"); + } + } + // skeleton_assigned = + String bone_name = AssimpUtils::get_assimp_string(bone->mName); + int bone_index = skeleton_assigned->find_bone(bone_name); + ERR_CONTINUE(bone_index == -1); for (size_t w = 0; w < bone->mNumWeights; w++) { aiVertexWeight ai_weights = bone->mWeights[w]; BoneInfo bi; - uint32_t vertex_index = ai_weights.mVertexId; bi.bone = bone_index; bi.weight = ai_weights.mWeight; @@ -599,7 +936,8 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( // Assign vertex colors if (ai_mesh->HasVertexColors(0)) { - Color color = Color(ai_mesh->mColors[0]->r, ai_mesh->mColors[0]->g, ai_mesh->mColors[0]->b, ai_mesh->mColors[0]->a); + Color color = Color(ai_mesh->mColors[0]->r, ai_mesh->mColors[0]->g, ai_mesh->mColors[0]->b, + ai_mesh->mColors[0]->a); st->add_color(color); } @@ -665,6 +1003,8 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( if (AI_SUCCESS == ai_material->Get(AI_MATKEY_TWOSIDED, mat_two_sided)) { if (mat_two_sided > 0) { mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); + } else { + mat->set_cull_mode(SpatialMaterial::CULL_BACK); } } @@ -677,9 +1017,29 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( // Culling handling for meshes // cull all back faces - mat->set_cull_mode(SpatialMaterial::CULL_BACK); + mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); // Now process materials + aiTextureType base_color = aiTextureType_BASE_COLOR; + { + String filename, path; + AssimpImageData image_data; + + if (AssimpUtils::GetAssimpTexture(state, ai_material, base_color, filename, path, image_data)) { + AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); + + // anything transparent must be culled + if (image_data.raw_image->detect_alpha() != Image::ALPHA_NONE) { + mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + mat->set_depth_draw_mode(SpatialMaterial::DepthDrawMode::DEPTH_DRAW_ALPHA_OPAQUE_PREPASS); + mat->set_cull_mode( + SpatialMaterial::CULL_DISABLED); // since you can see both sides in transparent mode + } + + mat->set_texture(SpatialMaterial::TEXTURE_ALBEDO, image_data.texture); + } + } + aiTextureType tex_diffuse = aiTextureType_DIFFUSE; { String filename, path; @@ -692,7 +1052,8 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( if (image_data.raw_image->detect_alpha() != Image::ALPHA_NONE) { mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); mat->set_depth_draw_mode(SpatialMaterial::DepthDrawMode::DEPTH_DRAW_ALPHA_OPAQUE_PREPASS); - mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); // since you can see both sides in transparent mode + mat->set_cull_mode( + SpatialMaterial::CULL_DISABLED); // since you can see both sides in transparent mode } mat->set_texture(SpatialMaterial::TEXTURE_ALBEDO, image_data.texture); @@ -703,7 +1064,8 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( if (Math::is_equal_approx(clr_diffuse.a, 1.0f) == false) { mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); mat->set_depth_draw_mode(SpatialMaterial::DepthDrawMode::DEPTH_DRAW_ALPHA_OPAQUE_PREPASS); - mat->set_cull_mode(SpatialMaterial::CULL_DISABLED); // since you can see both sides in transparent mode + mat->set_cull_mode( + SpatialMaterial::CULL_DISABLED); // since you can see both sides in transparent mode } mat->set_albedo(Color(clr_diffuse.r, clr_diffuse.g, clr_diffuse.b, clr_diffuse.a)); } @@ -731,6 +1093,60 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( } } + aiTextureType tex_normal_camera = aiTextureType_NORMAL_CAMERA; + { + String filename, path; + Ref<ImageTexture> texture; + AssimpImageData image_data; + + // Process texture normal map + if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_normal_camera, filename, path, image_data)) { + AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); + mat->set_feature(SpatialMaterial::Feature::FEATURE_NORMAL_MAPPING, true); + mat->set_texture(SpatialMaterial::TEXTURE_NORMAL, image_data.texture); + } + } + + aiTextureType tex_emission_color = aiTextureType_EMISSION_COLOR; + { + String filename, path; + Ref<ImageTexture> texture; + AssimpImageData image_data; + + // Process texture normal map + if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_emission_color, filename, path, image_data)) { + AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); + mat->set_feature(SpatialMaterial::Feature::FEATURE_NORMAL_MAPPING, true); + mat->set_texture(SpatialMaterial::TEXTURE_NORMAL, image_data.texture); + } + } + + aiTextureType tex_metalness = aiTextureType_METALNESS; + { + String filename, path; + Ref<ImageTexture> texture; + AssimpImageData image_data; + + // Process texture normal map + if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_metalness, filename, path, image_data)) { + AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); + mat->set_texture(SpatialMaterial::TEXTURE_METALLIC, image_data.texture); + } + } + + aiTextureType tex_roughness = aiTextureType_DIFFUSE_ROUGHNESS; + { + String filename, path; + Ref<ImageTexture> texture; + AssimpImageData image_data; + + // Process texture normal map + if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_roughness, filename, path, image_data)) { + AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); + mat->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, image_data.texture); + } + } + aiTextureType tex_emissive = aiTextureType_EMISSIVE; { String filename = ""; @@ -745,7 +1161,8 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( } else { // Process emission textures aiString texture_emissive_path; - if (AI_SUCCESS == ai_material->Get(AI_MATKEY_FBX_MAYA_EMISSION_TEXTURE, AI_PROPERTIES, texture_emissive_path)) { + if (AI_SUCCESS == + ai_material->Get(AI_MATKEY_FBX_MAYA_EMISSION_TEXTURE, AI_PROPERTIES, texture_emissive_path)) { if (AssimpUtils::CreateAssimpTexture(state, texture_emissive_path, filename, path, image_data)) { mat->set_feature(SpatialMaterial::FEATURE_EMISSION, true); mat->set_texture(SpatialMaterial::TEXTURE_EMISSION, image_data.texture); @@ -772,16 +1189,17 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( } } - aiTextureType tex_roughness = aiTextureType_SHININESS; + aiTextureType tex_ao_map = aiTextureType_AMBIENT_OCCLUSION; { String filename, path; Ref<ImageTexture> texture; AssimpImageData image_data; // Process texture normal map - if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_roughness, filename, path, image_data)) { + if (AssimpUtils::GetAssimpTexture(state, ai_material, tex_ao_map, filename, path, image_data)) { AssimpUtils::set_texture_mapping_mode(image_data.map_mode, image_data.texture); - mat->set_texture(SpatialMaterial::TEXTURE_ROUGHNESS, image_data.texture); + mat->set_feature(SpatialMaterial::FEATURE_AMBIENT_OCCLUSION, true); + mat->set_texture(SpatialMaterial::TEXTURE_AMBIENT_OCCLUSION, image_data.texture); } } @@ -789,16 +1207,15 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( Array morphs; morphs.resize(ai_mesh->mNumAnimMeshes); Mesh::PrimitiveType primitive = Mesh::PRIMITIVE_TRIANGLES; - Map<uint32_t, String> morph_mesh_idx_names; + for (size_t j = 0; j < ai_mesh->mNumAnimMeshes; j++) { String ai_anim_mesh_name = AssimpUtils::get_assimp_string(ai_mesh->mAnimMeshes[j]->mName); - mesh->set_blend_shape_mode(Mesh::BLEND_SHAPE_MODE_NORMALIZED); + if (ai_anim_mesh_name.empty()) { ai_anim_mesh_name = String("morph_") + itos(j); } - mesh->add_blend_shape(ai_anim_mesh_name); - morph_mesh_idx_names.insert(j, ai_anim_mesh_name); + Array array_copy; array_copy.resize(VisualServer::ARRAY_MAX); @@ -888,62 +1305,27 @@ Ref<Mesh> EditorSceneImporterAssimp::_generate_mesh_from_surface_indices( return mesh; } -/* to be moved into assimp */ -aiBone *get_bone_by_name(const aiScene *scene, aiString bone_name) { - for (unsigned int mesh_id = 0; mesh_id < scene->mNumMeshes; ++mesh_id) { - aiMesh *mesh = scene->mMeshes[mesh_id]; - - // iterate over all the bones on the mesh for this node only! - for (unsigned int boneIndex = 0; boneIndex < mesh->mNumBones; boneIndex++) { - - aiBone *bone = mesh->mBones[boneIndex]; - if (bone->mName == bone_name) { - printf("matched bone by name: %s\n", bone->mName.C_Str()); - return bone; - } - } - } - - return NULL; -} - /** * Create a new mesh for the node supplied */ -void EditorSceneImporterAssimp::create_mesh(ImportState &state, const aiNode *assimp_node, const String &node_name, Node *current_node, Node *parent_node, Transform node_transform) { +MeshInstance * +EditorSceneImporterAssimp::create_mesh(ImportState &state, const aiNode *assimp_node, const String &node_name, Node *active_node, Transform node_transform) { /* MESH NODE */ Ref<Mesh> mesh; - Skeleton *skeleton = NULL; + Ref<Skin> skin; // see if we have mesh cache for this. Vector<int> surface_indices; - for (uint32_t i = 0; i < assimp_node->mNumMeshes; i++) { - int mesh_index = assimp_node->mMeshes[i]; - aiMesh *ai_mesh = state.assimp_scene->mMeshes[assimp_node->mMeshes[i]]; - - // Map<aiBone*, Skeleton*> // this is what we need - if (ai_mesh->mNumBones > 0) { - // we only need the first bone to retrieve the skeleton - const aiBone *first = ai_mesh->mBones[0]; - ERR_FAIL_COND(first == NULL); + RegenerateBoneStack(state); - Map<const aiBone *, Skeleton *>::Element *match = state.bone_to_skeleton_lookup.find(first); - if (match != NULL) { - skeleton = match->value(); - - if (skeleton == NULL) { - print_error("failed to find bone skeleton for bone: " + AssimpUtils::get_assimp_string(first->mName)); - } else { - print_verbose("successfully found skeleton for first bone on mesh, can properly handle animations now!"); - } - // I really need the skeleton and bone to be known as this is something flaky in model exporters. - ERR_FAIL_COND(skeleton == NULL); // should not happen if bone was successfully created in previous step. - } - } + // Configure indicies + for (uint32_t i = 0; i < assimp_node->mNumMeshes; i++) { + int mesh_index = assimp_node->mMeshes[i]; + // create list of mesh indexes surface_indices.push_back(mesh_index); } - surface_indices.sort(); + //surface_indices.sort(); String mesh_key; for (int i = 0; i < surface_indices.size(); i++) { if (i > 0) { @@ -952,263 +1334,154 @@ void EditorSceneImporterAssimp::create_mesh(ImportState &state, const aiNode *as mesh_key += itos(surface_indices[i]); } + Skeleton *skeleton = NULL; + aiNode *armature = NULL; + if (!state.mesh_cache.has(mesh_key)) { - mesh = _generate_mesh_from_surface_indices(state, surface_indices, assimp_node, skeleton); + mesh = _generate_mesh_from_surface_indices(state, surface_indices, assimp_node, skin, skeleton); state.mesh_cache[mesh_key] = mesh; } - //Transform transform = recursive_state.node_transform; - - // we must unfortunately overwrite mesh and skeleton transform with armature data - if (skeleton != NULL) { - print_verbose("Applying mesh and skeleton to armature"); - // required for blender, maya etc - Map<Skeleton *, const Spatial *>::Element *match = state.armature_skeletons.find(skeleton); - node_transform = match->value()->get_transform(); - } - MeshInstance *mesh_node = memnew(MeshInstance); mesh = state.mesh_cache[mesh_key]; mesh_node->set_mesh(mesh); - attach_new_node(state, - mesh_node, - assimp_node, - parent_node, - node_name, - node_transform); - - // set this once and for all - if (skeleton != NULL) { - // root must be informed of its new child - parent_node->add_child(skeleton); + // if we have a valid skeleton set it up + if (skin.is_valid()) { + for (uint32_t i = 0; i < assimp_node->mNumMeshes; i++) { + unsigned int mesh_index = assimp_node->mMeshes[i]; + const aiMesh *ai_mesh = state.assimp_scene->mMeshes[mesh_index]; + + // please remember bone id relative to the skin is NOT the mesh relative index. + // it is the index relative to the skeleton that is why + // we have state.bone_id_map, it allows for duplicate bone id's too :) + // hope this makes sense + + int bind_count = 0; + for (unsigned int boneId = 0; boneId < ai_mesh->mNumBones; ++boneId) { + aiBone *iterBone = ai_mesh->mBones[boneId]; + + // used to reparent mesh to the correct armature later on if assigned. + if (!armature) { + print_verbose("Configured mesh armature, will reparent later to armature"); + armature = iterBone->mArmature; + } - // owner must be set after adding to tree - skeleton->set_owner(state.root); + if (skeleton) { + int id = skeleton->find_bone(AssimpUtils::get_assimp_string(iterBone->mName)); + if (id != -1) { + print_verbose("Set bind bone: mesh: " + itos(mesh_index) + " bone index: " + itos(id)); + Transform t = AssimpUtils::assimp_matrix_transform(iterBone->mOffsetMatrix); - skeleton->set_transform(node_transform); + skin->add_bind(bind_count, t); + skin->set_bind_bone(bind_count, id); + bind_count++; + } + } + } + } - // must be done after added to tree - mesh_node->set_skeleton_path(mesh_node->get_path_to(skeleton)); + print_verbose("Finished configuring bind pose for skin mesh"); } -} - -/** generate_mesh_phase_from_skeletal_mesh - * This must be executed after generate_nodes because the skeleton doesn't exist until that has completed the first pass - */ -void EditorSceneImporterAssimp::generate_mesh_phase_from_skeletal_mesh(ImportState &state) { - // prevent more than one skeleton existing per mesh - // * multiple root bones have this - // * this simply filters the node out if it has already been added then references the skeleton so we know the actual skeleton for this node - for (Map<const aiNode *, const Node *>::Element *key_value_pair = state.assimp_node_map.front(); key_value_pair; key_value_pair = key_value_pair->next()) { - const aiNode *assimp_node = key_value_pair->key(); - Node *current_node = (Node *)key_value_pair->value(); - Node *parent_node = current_node->get_parent(); - - ERR_CONTINUE(assimp_node == NULL); - ERR_CONTINUE(parent_node == NULL); - String node_name = AssimpUtils::get_assimp_string(assimp_node->mName); - Transform node_transform = AssimpUtils::assimp_matrix_transform(assimp_node->mTransformation); + // this code parents all meshes with bones to the armature they are for + // GLTF2 specification relies on this and we are enforcing it for FBX. + if (armature && state.flat_node_map[armature]) { + Node *armature_parent = state.flat_node_map[armature]; + print_verbose("Parented mesh " + node_name + " to armature " + armature_parent->get_name()); + // static mesh handling + armature_parent->add_child(mesh_node); + // transform must be identity + mesh_node->set_global_transform(Transform()); + mesh_node->set_name(node_name); + mesh_node->set_owner(state.root); + } else { + // static mesh handling + active_node->add_child(mesh_node); + mesh_node->set_global_transform(node_transform); + mesh_node->set_name(node_name); + mesh_node->set_owner(state.root); + } - if (assimp_node->mNumMeshes > 0) { - create_mesh(state, assimp_node, node_name, current_node, parent_node, node_transform); - } + if (skeleton) { + print_verbose("Attempted to set skeleton path!"); + mesh_node->set_skeleton_path(mesh_node->get_path_to(skeleton)); + mesh_node->set_skin(skin); } -} -/** - * attach_new_node - * configures node, assigns parent node -**/ -void EditorSceneImporterAssimp::attach_new_node(ImportState &state, Spatial *new_node, const aiNode *node, Node *parent_node, String Name, Transform &transform) { - ERR_FAIL_COND(new_node == NULL); - ERR_FAIL_COND(node == NULL); - ERR_FAIL_COND(parent_node == NULL); - ERR_FAIL_COND(state.root == NULL); - - // assign properties to new godot note - new_node->set_name(Name); - new_node->set_transform(transform); - - // add element as child to parent - parent_node->add_child(new_node); - - // owner must be set after - new_node->set_owner(state.root); - - // cache node mapping results by name and then by aiNode* - state.node_map[Name] = new_node; - state.assimp_node_map[node] = new_node; + return mesh_node; } /** * Create a light for the scene * Automatically caches lights for lookup later */ -void EditorSceneImporterAssimp::create_light(ImportState &state, RecursiveState &recursive_state) { +Spatial *EditorSceneImporterAssimp::create_light( + ImportState &state, + const String &node_name, + Transform &look_at_transform) { Light *light = NULL; - aiLight *ai_light = state.assimp_scene->mLights[state.light_cache[recursive_state.node_name]]; - ERR_FAIL_COND(!ai_light); + aiLight *assimp_light = state.assimp_scene->mLights[state.light_cache[node_name]]; + ERR_FAIL_COND_V(!assimp_light, NULL); - if (ai_light->mType == aiLightSource_DIRECTIONAL) { + if (assimp_light->mType == aiLightSource_DIRECTIONAL) { light = memnew(DirectionalLight); - Vector3 dir = Vector3(ai_light->mDirection.y, ai_light->mDirection.x, ai_light->mDirection.z); - dir.normalize(); - Vector3 pos = Vector3(ai_light->mPosition.x, ai_light->mPosition.y, ai_light->mPosition.z); - Vector3 up = Vector3(ai_light->mUp.x, ai_light->mUp.y, ai_light->mUp.z); - up.normalize(); - - Transform light_transform; - light_transform.set_look_at(pos, pos + dir, up); - - recursive_state.node_transform *= light_transform; - - } else if (ai_light->mType == aiLightSource_POINT) { + } else if (assimp_light->mType == aiLightSource_POINT) { light = memnew(OmniLight); - Vector3 pos = Vector3(ai_light->mPosition.x, ai_light->mPosition.y, ai_light->mPosition.z); - Transform xform; - xform.origin = pos; - - recursive_state.node_transform *= xform; - - light->set_transform(xform); - - //light->set_param(Light::PARAM_ATTENUATION, 1); - } else if (ai_light->mType == aiLightSource_SPOT) { + } else if (assimp_light->mType == aiLightSource_SPOT) { light = memnew(SpotLight); - - Vector3 dir = Vector3(ai_light->mDirection.y, ai_light->mDirection.x, ai_light->mDirection.z); - dir.normalize(); - Vector3 pos = Vector3(ai_light->mPosition.x, ai_light->mPosition.y, ai_light->mPosition.z); - Vector3 up = Vector3(ai_light->mUp.x, ai_light->mUp.y, ai_light->mUp.z); - up.normalize(); - - Transform light_transform; - light_transform.set_look_at(pos, pos + dir, up); - recursive_state.node_transform *= light_transform; - - //light->set_param(Light::PARAM_ATTENUATION, 0.0f); } - ERR_FAIL_COND(light == NULL); + ERR_FAIL_COND_V(light == NULL, NULL); + + if (assimp_light->mType != aiLightSource_POINT) { + Vector3 pos = Vector3( + assimp_light->mPosition.x, + assimp_light->mPosition.y, + assimp_light->mPosition.z); + Vector3 look_at = Vector3( + assimp_light->mDirection.y, + assimp_light->mDirection.x, + assimp_light->mDirection.z) + .normalized(); + Vector3 up = Vector3( + assimp_light->mUp.x, + assimp_light->mUp.y, + assimp_light->mUp.z); + + look_at_transform.set_look_at(pos, look_at, up); + } + // properties for light variables should be put here. + // not really hugely important yet but we will need them in the future - light->set_color(Color(ai_light->mColorDiffuse.r, ai_light->mColorDiffuse.g, ai_light->mColorDiffuse.b)); - recursive_state.new_node = light; + light->set_color( + Color(assimp_light->mColorDiffuse.r, assimp_light->mColorDiffuse.g, assimp_light->mColorDiffuse.b)); - attach_new_node(state, - recursive_state.new_node, - recursive_state.assimp_node, - recursive_state.parent_node, - recursive_state.node_name, - recursive_state.node_transform); + return light; } /** * Create camera for the scene */ -void EditorSceneImporterAssimp::create_camera(ImportState &state, RecursiveState &recursive_state) { - aiCamera *ai_camera = state.assimp_scene->mCameras[state.camera_cache[recursive_state.node_name]]; - ERR_FAIL_COND(!ai_camera); - - Camera *camera = memnew(Camera); - - float near = ai_camera->mClipPlaneNear; +Spatial *EditorSceneImporterAssimp::create_camera( + ImportState &state, + const String &node_name, + Transform &look_at_transform) { + aiCamera *camera = state.assimp_scene->mCameras[state.camera_cache[node_name]]; + ERR_FAIL_COND_V(!camera, NULL); + + Camera *camera_node = memnew(Camera); + ERR_FAIL_COND_V(!camera_node, NULL); + float near = camera->mClipPlaneNear; if (Math::is_equal_approx(near, 0.0f)) { near = 0.1f; } - camera->set_perspective(Math::rad2deg(ai_camera->mHorizontalFOV) * 2.0f, near, ai_camera->mClipPlaneFar); - - Vector3 pos = Vector3(ai_camera->mPosition.x, ai_camera->mPosition.y, ai_camera->mPosition.z); - Vector3 look_at = Vector3(ai_camera->mLookAt.y, ai_camera->mLookAt.x, ai_camera->mLookAt.z).normalized(); - Vector3 up = Vector3(ai_camera->mUp.x, ai_camera->mUp.y, ai_camera->mUp.z); - - Transform xform; - xform.set_look_at(pos, look_at, up); - - recursive_state.new_node = camera; - - attach_new_node(state, - recursive_state.new_node, - recursive_state.assimp_node, - recursive_state.parent_node, - recursive_state.node_name, - recursive_state.node_transform); -} - -/** - * Create Bone - * Create a bone in the scene - */ -void EditorSceneImporterAssimp::create_bone(ImportState &state, RecursiveState &recursive_state) { - // for each armature node we must make a new skeleton but ensure it - // has a bone in the child to ensure we don't make too many - // the reason you must do this is because a skeleton exists per mesh? - // and duplicate bone names are very bad for determining what is going on. - aiBone *parent_bone_assimp = get_bone_by_name(state.assimp_scene, recursive_state.assimp_node->mParent->mName); - - // set to true when you want to use skeleton reference from cache. - bool do_not_create_armature = false; - - // prevent more than one skeleton existing per mesh - // * multiple root bones have this - // * this simply filters the node out if it has already been added then references the skeleton so we know the actual skeleton for this node - for (Map<Skeleton *, const Spatial *>::Element *key_value_pair = state.armature_skeletons.front(); key_value_pair; key_value_pair = key_value_pair->next()) { - if (key_value_pair->value() == recursive_state.parent_node) { - // apply the skeleton for this mesh - recursive_state.skeleton = key_value_pair->key(); - - // force this off - do_not_create_armature = true; - } - } - - // check if parent was a bone - // if parent was not a bone this is the first bone. - // therefore parent is the 'armature'? - // also for multi root bone support make sure we don't already have the skeleton cached. - // if we do we must merge them - as this is all godot supports right now. - if (!parent_bone_assimp && recursive_state.skeleton == NULL && !do_not_create_armature) { - // create new skeleton on the root. - recursive_state.skeleton = memnew(Skeleton); - - ERR_FAIL_COND(state.root == NULL); - ERR_FAIL_COND(recursive_state.skeleton == NULL); - - print_verbose("Parent armature node is called " + recursive_state.parent_node->get_name()); - // store root node for this skeleton / used in animation playback and bone detection. - - state.armature_skeletons.insert(recursive_state.skeleton, Object::cast_to<Spatial>(recursive_state.parent_node)); - - //skeleton->set_use_bones_in_world_transform(true); - print_verbose("Created new FBX skeleton for armature node"); - } - - ERR_FAIL_COND_MSG(recursive_state.skeleton == NULL, "Mesh has invalid armature detection - report this"); - - // this transform is a bone - recursive_state.skeleton->add_bone(recursive_state.node_name); + camera_node->set_perspective(Math::rad2deg(camera->mHorizontalFOV) * 2.0f, near, camera->mClipPlaneFar); + Vector3 pos = Vector3(camera->mPosition.x, camera->mPosition.y, camera->mPosition.z); + Vector3 look_at = Vector3(camera->mLookAt.y, camera->mLookAt.x, camera->mLookAt.z).normalized(); + Vector3 up = Vector3(camera->mUp.x, camera->mUp.y, camera->mUp.z); - ERR_FAIL_COND(recursive_state.skeleton == NULL); // serious bug we must now exit. - //ERR_FAIL_COND(recursive_state.skeleton->get_name() == ""); - print_verbose("Bone added to lookup: " + AssimpUtils::get_assimp_string(recursive_state.bone->mName)); - print_verbose("Skeleton attached to: " + recursive_state.skeleton->get_name()); - // make sure to write the bone lookup inverse so we can retrieve the mesh for this bone later - state.bone_to_skeleton_lookup.insert(recursive_state.bone, recursive_state.skeleton); - - Transform xform = AssimpUtils::assimp_matrix_transform(recursive_state.bone->mOffsetMatrix); - recursive_state.skeleton->set_bone_rest(recursive_state.skeleton->get_bone_count() - 1, xform.affine_inverse()); - - // get parent node of assimp node - const aiNode *parent_node_assimp = recursive_state.assimp_node->mParent; - - // ensure we have a parent - if (parent_node_assimp != NULL) { - int parent_bone_id = recursive_state.skeleton->find_bone(AssimpUtils::get_assimp_string(parent_node_assimp->mName)); - int current_bone_id = recursive_state.skeleton->find_bone(recursive_state.node_name); - print_verbose("Parent bone id " + itos(parent_bone_id) + " current bone id" + itos(current_bone_id)); - print_verbose("Bone debug: " + AssimpUtils::get_assimp_string(parent_node_assimp->mName)); - recursive_state.skeleton->set_bone_parent(current_bone_id, parent_bone_id); - } + look_at_transform.set_look_at(pos + look_at_transform.origin, look_at, up); + return camera_node; } /** @@ -1217,46 +1490,30 @@ void EditorSceneImporterAssimp::create_bone(ImportState &state, RecursiveState & */ void EditorSceneImporterAssimp::_generate_node( ImportState &state, - Skeleton *skeleton, - const aiNode *assimp_node, Node *parent_node) { + const aiNode *assimp_node) { - // sanity check - ERR_FAIL_COND(state.root == NULL); - ERR_FAIL_COND(state.assimp_scene == NULL); ERR_FAIL_COND(assimp_node == NULL); - ERR_FAIL_COND(parent_node == NULL); - - Spatial *new_node = NULL; + state.nodes.push_back(assimp_node); String node_name = AssimpUtils::get_assimp_string(assimp_node->mName); - Transform node_transform = AssimpUtils::assimp_matrix_transform(assimp_node->mTransformation); - - // can safely return null - is this node a bone? - aiBone *bone = get_bone_by_name(state.assimp_scene, assimp_node->mName); - - // out arguments helper - for pushing state down into creation functions - RecursiveState recursive_state(node_transform, skeleton, new_node, node_name, assimp_node, parent_node, bone); - - // Creation code - if (state.light_cache.has(node_name)) { - create_light(state, recursive_state); - } else if (state.camera_cache.has(node_name)) { - create_camera(state, recursive_state); - } else if (bone != NULL) { - create_bone(state, recursive_state); - } else { - //generic node - recursive_state.new_node = memnew(Spatial); - attach_new_node(state, - recursive_state.new_node, - recursive_state.assimp_node, - recursive_state.parent_node, - recursive_state.node_name, - recursive_state.node_transform); + String parent_name = AssimpUtils::get_assimp_string(assimp_node->mParent->mName); + + // please note + // duplicate bone names exist + // this is why we only check if the bone exists + // so everything else is useless but the name + // please do not copy any other values from get_bone_by_name. + aiBone *parent_bone = get_bone_by_name(state.assimp_scene, assimp_node->mParent->mName); + aiBone *current_bone = get_bone_by_name(state.assimp_scene, assimp_node->mName); + + // is this an armature + // parent null + // and this is the first bone :) + if (parent_bone == NULL && current_bone) { + state.armature_nodes.push_back(assimp_node->mParent); + print_verbose("found valid armature: " + parent_name); } - // recurse into all child elements - for (size_t i = 0; i < recursive_state.assimp_node->mNumChildren; i++) { - _generate_node(state, recursive_state.skeleton, recursive_state.assimp_node->mChildren[i], - recursive_state.new_node != NULL ? recursive_state.new_node : recursive_state.parent_node); + for (size_t i = 0; i < assimp_node->mNumChildren; i++) { + _generate_node(state, assimp_node->mChildren[i]); } -}
\ No newline at end of file +} diff --git a/modules/assimp/editor_scene_importer_assimp.h b/modules/assimp/editor_scene_importer_assimp.h index 787376c9af..a47d7ac46e 100644 --- a/modules/assimp/editor_scene_importer_assimp.h +++ b/modules/assimp/editor_scene_importer_assimp.h @@ -50,6 +50,7 @@ #include <assimp/DefaultLogger.hpp> #include <assimp/LogStream.hpp> #include <assimp/Logger.hpp> +#include <map> #include "import_state.h" #include "import_utils.h" @@ -72,7 +73,6 @@ public: class EditorSceneImporterAssimp : public EditorSceneImporter { private: GDCLASS(EditorSceneImporterAssimp, EditorSceneImporter); - const String ASSIMP_FBX_KEY = "_$AssimpFbx$"; struct AssetImportAnimation { enum Interpolation { @@ -88,40 +88,32 @@ private: float weight; }; - struct SkeletonHole { //nodes may be part of the skeleton by used by vertex - String name; - String parent; - Transform pose; - const aiNode *node; - }; - - void _calc_tangent_from_mesh(const aiMesh *ai_mesh, int i, int tri_index, int index, PoolColorArray::Write &w); - void _set_texture_mapping_mode(aiTextureMapMode *map_mode, Ref<Texture> texture); + Ref<Mesh> _generate_mesh_from_surface_indices(ImportState &state, const Vector<int> &p_surface_indices, + const aiNode *assimp_node, Ref<Skin> &skin, + Skeleton *&skeleton_assigned); - Ref<Mesh> _generate_mesh_from_surface_indices(ImportState &state, const Vector<int> &p_surface_indices, const aiNode *assimp_node, Skeleton *p_skeleton = NULL); - - // utility for node creation - void attach_new_node(ImportState &state, Spatial *new_node, const aiNode *node, Node *parent_node, String Name, Transform &transform); // simple object creation functions - void create_light(ImportState &state, RecursiveState &recursive_state); - void create_camera(ImportState &state, RecursiveState &recursive_state); - void create_bone(ImportState &state, RecursiveState &recursive_state); + Spatial *create_light(ImportState &state, + const String &node_name, + Transform &look_at_transform); + Spatial *create_camera( + ImportState &state, + const String &node_name, + Transform &look_at_transform); // non recursive - linear so must not use recursive arguments - void create_mesh(ImportState &state, const aiNode *assimp_node, const String &node_name, Node *current_node, Node *parent_node, Transform node_transform); - + MeshInstance *create_mesh(ImportState &state, const aiNode *assimp_node, const String &node_name, Node *active_node, Transform node_transform); // recursive node generator - void _generate_node(ImportState &state, Skeleton *skeleton, const aiNode *assimp_node, Node *parent_node); - // runs after _generate_node as it must then use pre-created godot skeleton. - void generate_mesh_phase_from_skeletal_mesh(ImportState &state); - void _insert_animation_track(ImportState &scene, const aiAnimation *assimp_anim, int p_track, int p_bake_fps, Ref<Animation> animation, float ticks_per_second, Skeleton *p_skeleton, const NodePath &p_path, const String &p_name); + void _generate_node(ImportState &state, const aiNode *assimp_node); + void _insert_animation_track(ImportState &scene, const aiAnimation *assimp_anim, int track_id, + int anim_fps, Ref<Animation> animation, float ticks_per_second, + Skeleton *skeleton, const NodePath &node_path, + const String &node_name, aiBone *track_bone); void _import_animation(ImportState &state, int p_animation_index, int p_bake_fps); - + Node *get_node_by_name(ImportState &state, String name); + aiBone *get_bone_from_stack(ImportState &state, aiString name); Spatial *_generate_scene(const String &p_path, aiScene *scene, const uint32_t p_flags, int p_bake_fps, const int32_t p_max_bone_weights); - String _assimp_anim_string_to_string(const aiString &p_string) const; - String _assimp_raw_string_to_string(const aiString &p_string) const; - float _get_fbx_fps(int32_t time_mode, const aiScene *p_scene); template <class T> T _interpolate_track(const Vector<float> &p_times, const Vector<T> &p_values, float p_time, AssetImportAnimation::Interpolation p_interp); void _register_project_setting_import(const String generic, const String import_setting_string, const Vector<String> &exts, List<String> *r_extensions, const bool p_enabled) const; @@ -148,6 +140,10 @@ public: virtual uint32_t get_import_flags() const; virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = NULL); Ref<Image> load_image(ImportState &state, const aiScene *p_scene, String p_path); + + static void RegenerateBoneStack(ImportState &state); + + void RegenerateBoneStack(ImportState &state, aiMesh *mesh); }; #endif #endif diff --git a/modules/assimp/import_state.h b/modules/assimp/import_state.h index 56d89ffea7..9859a88c1c 100644 --- a/modules/assimp/import_state.h +++ b/modules/assimp/import_state.h @@ -52,28 +52,42 @@ namespace AssimpImporter { /** Import state is for global scene import data - * This makes the code simpler and contains useful lookups. - */ + * This makes the code simpler and contains useful lookups. + */ struct ImportState { String path; + Spatial *root; const aiScene *assimp_scene; uint32_t max_bone_weights; - Spatial *root; Map<String, Ref<Mesh> > mesh_cache; Map<int, Ref<Material> > material_cache; Map<String, int> light_cache; Map<String, int> camera_cache; - //Vector<Skeleton *> skeletons; - Map<Skeleton *, const Spatial *> armature_skeletons; // maps skeletons based on their armature nodes. - Map<const aiBone *, Skeleton *> bone_to_skeleton_lookup; // maps bones back into their skeleton + // very useful for when you need to ask assimp for the bone mesh - Map<String, Node *> node_map; - Map<const aiNode *, const Node *> assimp_node_map; + + Map<const aiNode *, Node *> assimp_node_map; Map<String, Ref<Image> > path_to_image_cache; - bool fbx; //for some reason assimp does some things different for FBX + + // Generation 3 - determinisitic iteration + // to lower potential recursion errors + List<const aiNode *> nodes; + Map<const aiNode *, Spatial *> flat_node_map; AnimationPlayer *animation_player; + + // Generation 3 - deterministic armatures + // list of armature nodes - flat and simple to parse + // assimp node, node in godot + List<aiNode *> armature_nodes; + Map<const aiNode *, Skeleton *> armature_skeletons; + Map<aiBone *, Skeleton *> skeleton_bone_map; + // Generation 3 - deterministic bone handling + // bones from the stack are popped when found + // this means we can detect + // what bones are for other armatures + List<aiBone *> bone_stack; }; struct AssimpImageData { @@ -86,14 +100,15 @@ struct AssimpImageData { * This makes the code easier to handle too and add extra arguments without breaking things */ struct RecursiveState { + RecursiveState() {} // do not construct :) RecursiveState( Transform &_node_transform, Skeleton *_skeleton, Spatial *_new_node, - const String &_node_name, - const aiNode *_assimp_node, + String &_node_name, + aiNode *_assimp_node, Node *_parent_node, - const aiBone *_bone) : + aiBone *_bone) : node_transform(_node_transform), skeleton(_skeleton), new_node(_new_node), @@ -102,13 +117,13 @@ struct RecursiveState { parent_node(_parent_node), bone(_bone) {} - Transform &node_transform; - Skeleton *skeleton; - Spatial *new_node; - const String &node_name; - const aiNode *assimp_node; - Node *parent_node; - const aiBone *bone; + Transform node_transform; + Skeleton *skeleton = NULL; + Spatial *new_node = NULL; + String node_name; + aiNode *assimp_node = NULL; + Node *parent_node = NULL; + aiBone *bone = NULL; }; } // namespace AssimpImporter diff --git a/modules/bmp/image_loader_bmp.cpp b/modules/bmp/image_loader_bmp.cpp index 5a32fa1c2c..8708430257 100644 --- a/modules/bmp/image_loader_bmp.cpp +++ b/modules/bmp/image_loader_bmp.cpp @@ -63,139 +63,137 @@ Error ImageLoaderBMP::convert_to_image(Ref<Image> p_image, ERR_FAIL_V(ERR_UNAVAILABLE); } - if (err == OK) { - // Image data (might be indexed) - PoolVector<uint8_t> data; - int data_len = 0; + // Image data (might be indexed) + PoolVector<uint8_t> data; + int data_len = 0; - if (bits_per_pixel <= 8) { // indexed - data_len = width * height; - } else { // color - data_len = width * height * 4; - } - ERR_FAIL_COND_V(data_len == 0, ERR_BUG); - err = data.resize(data_len); - - PoolVector<uint8_t>::Write data_w = data.write(); - uint8_t *write_buffer = data_w.ptr(); - - const uint32_t width_bytes = width * bits_per_pixel / 8; - const uint32_t line_width = (width_bytes + 3) & ~3; - - // The actual data traversal is determined by - // the data width in case of 8/4/1 bit images - const uint32_t w = bits_per_pixel >= 24 ? width : width_bytes; - const uint8_t *line = p_buffer + (line_width * (height - 1)); - - for (unsigned int i = 0; i < height; i++) { - const uint8_t *line_ptr = line; - - for (unsigned int j = 0; j < w; j++) { - switch (bits_per_pixel) { - case 1: { - uint8_t color_index = *line_ptr; - - write_buffer[index + 0] = (color_index >> 7) & 1; - write_buffer[index + 1] = (color_index >> 6) & 1; - write_buffer[index + 2] = (color_index >> 5) & 1; - write_buffer[index + 3] = (color_index >> 4) & 1; - write_buffer[index + 4] = (color_index >> 3) & 1; - write_buffer[index + 5] = (color_index >> 2) & 1; - write_buffer[index + 6] = (color_index >> 1) & 1; - write_buffer[index + 7] = (color_index >> 0) & 1; - - index += 8; - line_ptr += 1; - } break; - case 4: { - uint8_t color_index = *line_ptr; - - write_buffer[index + 0] = (color_index >> 4) & 0x0f; - write_buffer[index + 1] = color_index & 0x0f; - - index += 2; - line_ptr += 1; - } break; - case 8: { - uint8_t color_index = *line_ptr; - - write_buffer[index] = color_index; - - index += 1; - line_ptr += 1; - } break; - case 24: { - uint32_t color = *((uint32_t *)line_ptr); - - write_buffer[index + 2] = color & 0xff; - write_buffer[index + 1] = (color >> 8) & 0xff; - write_buffer[index + 0] = (color >> 16) & 0xff; - write_buffer[index + 3] = 0xff; - - index += 4; - line_ptr += 3; - } break; - case 32: { - uint32_t color = *((uint32_t *)line_ptr); - - write_buffer[index + 2] = color & 0xff; - write_buffer[index + 1] = (color >> 8) & 0xff; - write_buffer[index + 0] = (color >> 16) & 0xff; - write_buffer[index + 3] = color >> 24; - - index += 4; - line_ptr += 4; - } break; - } + if (bits_per_pixel <= 8) { // indexed + data_len = width * height; + } else { // color + data_len = width * height * 4; + } + ERR_FAIL_COND_V(data_len == 0, ERR_BUG); + err = data.resize(data_len); + + PoolVector<uint8_t>::Write data_w = data.write(); + uint8_t *write_buffer = data_w.ptr(); + + const uint32_t width_bytes = width * bits_per_pixel / 8; + const uint32_t line_width = (width_bytes + 3) & ~3; + + // The actual data traversal is determined by + // the data width in case of 8/4/1 bit images + const uint32_t w = bits_per_pixel >= 24 ? width : width_bytes; + const uint8_t *line = p_buffer + (line_width * (height - 1)); + + for (uint64_t i = 0; i < height; i++) { + const uint8_t *line_ptr = line; + + for (unsigned int j = 0; j < w; j++) { + switch (bits_per_pixel) { + case 1: { + uint8_t color_index = *line_ptr; + + write_buffer[index + 0] = (color_index >> 7) & 1; + write_buffer[index + 1] = (color_index >> 6) & 1; + write_buffer[index + 2] = (color_index >> 5) & 1; + write_buffer[index + 3] = (color_index >> 4) & 1; + write_buffer[index + 4] = (color_index >> 3) & 1; + write_buffer[index + 5] = (color_index >> 2) & 1; + write_buffer[index + 6] = (color_index >> 1) & 1; + write_buffer[index + 7] = (color_index >> 0) & 1; + + index += 8; + line_ptr += 1; + } break; + case 4: { + uint8_t color_index = *line_ptr; + + write_buffer[index + 0] = (color_index >> 4) & 0x0f; + write_buffer[index + 1] = color_index & 0x0f; + + index += 2; + line_ptr += 1; + } break; + case 8: { + uint8_t color_index = *line_ptr; + + write_buffer[index] = color_index; + + index += 1; + line_ptr += 1; + } break; + case 24: { + uint32_t color = *((uint32_t *)line_ptr); + + write_buffer[index + 2] = color & 0xff; + write_buffer[index + 1] = (color >> 8) & 0xff; + write_buffer[index + 0] = (color >> 16) & 0xff; + write_buffer[index + 3] = 0xff; + + index += 4; + line_ptr += 3; + } break; + case 32: { + uint32_t color = *((uint32_t *)line_ptr); + + write_buffer[index + 2] = color & 0xff; + write_buffer[index + 1] = (color >> 8) & 0xff; + write_buffer[index + 0] = (color >> 16) & 0xff; + write_buffer[index + 3] = color >> 24; + + index += 4; + line_ptr += 4; + } break; } - line -= line_width; } + line -= line_width; + } - if (p_color_buffer == NULL || color_table_size == 0) { // regular pixels + if (p_color_buffer == NULL || color_table_size == 0) { // regular pixels - p_image->create(width, height, 0, Image::FORMAT_RGBA8, data); + p_image->create(width, height, 0, Image::FORMAT_RGBA8, data); - } else { // data is in indexed format, extend it + } else { // data is in indexed format, extend it - // Palette data - PoolVector<uint8_t> palette_data; - palette_data.resize(color_table_size * 4); + // Palette data + PoolVector<uint8_t> palette_data; + palette_data.resize(color_table_size * 4); - PoolVector<uint8_t>::Write palette_data_w = palette_data.write(); - uint8_t *pal = palette_data_w.ptr(); + PoolVector<uint8_t>::Write palette_data_w = palette_data.write(); + uint8_t *pal = palette_data_w.ptr(); - const uint8_t *cb = p_color_buffer; + const uint8_t *cb = p_color_buffer; - for (unsigned int i = 0; i < color_table_size; ++i) { - uint32_t color = *((uint32_t *)cb); + for (unsigned int i = 0; i < color_table_size; ++i) { + uint32_t color = *((uint32_t *)cb); - pal[i * 4 + 0] = (color >> 16) & 0xff; - pal[i * 4 + 1] = (color >> 8) & 0xff; - pal[i * 4 + 2] = (color)&0xff; - pal[i * 4 + 3] = 0xff; + pal[i * 4 + 0] = (color >> 16) & 0xff; + pal[i * 4 + 1] = (color >> 8) & 0xff; + pal[i * 4 + 2] = (color)&0xff; + pal[i * 4 + 3] = 0xff; - cb += 4; - } - // Extend palette to image - PoolVector<uint8_t> extended_data; - extended_data.resize(data.size() * 4); + cb += 4; + } + // Extend palette to image + PoolVector<uint8_t> extended_data; + extended_data.resize(data.size() * 4); - PoolVector<uint8_t>::Write ex_w = extended_data.write(); - uint8_t *dest = ex_w.ptr(); + PoolVector<uint8_t>::Write ex_w = extended_data.write(); + uint8_t *dest = ex_w.ptr(); - const int num_pixels = width * height; + const int num_pixels = width * height; - for (int i = 0; i < num_pixels; i++) { - dest[0] = pal[write_buffer[i] * 4 + 0]; - dest[1] = pal[write_buffer[i] * 4 + 1]; - dest[2] = pal[write_buffer[i] * 4 + 2]; - dest[3] = pal[write_buffer[i] * 4 + 3]; + for (int i = 0; i < num_pixels; i++) { + dest[0] = pal[write_buffer[i] * 4 + 0]; + dest[1] = pal[write_buffer[i] * 4 + 1]; + dest[2] = pal[write_buffer[i] * 4 + 2]; + dest[3] = pal[write_buffer[i] * 4 + 3]; - dest += 4; - } - p_image->create(width, height, 0, Image::FORMAT_RGBA8, extended_data); + dest += 4; } + p_image->create(width, height, 0, Image::FORMAT_RGBA8, extended_data); } } return err; diff --git a/modules/bullet/btRayShape.h b/modules/bullet/btRayShape.h index 7f3229b3e8..09c1f6c241 100644 --- a/modules/bullet/btRayShape.h +++ b/modules/bullet/btRayShape.h @@ -62,7 +62,7 @@ public: virtual void setMargin(btScalar margin); - void setSlipsOnSlope(bool p_slipOnSlope); + void setSlipsOnSlope(bool p_slipsOnSlope); bool getSlipsOnSlope() const { return slipsOnSlope; } const btTransform &getSupportPoint() const { return m_cacheSupportPoint; } diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h index c9430bec18..04231b0814 100644 --- a/modules/bullet/collision_object_bullet.h +++ b/modules/bullet/collision_object_bullet.h @@ -167,14 +167,18 @@ public: _FORCE_INLINE_ const VSet<RID> &get_exceptions() const { return exceptions; } _FORCE_INLINE_ void set_collision_layer(uint32_t p_layer) { - collisionLayer = p_layer; - on_collision_filters_change(); + if (collisionLayer != p_layer) { + collisionLayer = p_layer; + on_collision_filters_change(); + } } _FORCE_INLINE_ uint32_t get_collision_layer() const { return collisionLayer; } _FORCE_INLINE_ void set_collision_mask(uint32_t p_mask) { - collisionMask = p_mask; - on_collision_filters_change(); + if (collisionMask != p_mask) { + collisionMask = p_mask; + on_collision_filters_change(); + } } _FORCE_INLINE_ uint32_t get_collision_mask() const { return collisionMask; } diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp index 8d21b25b20..d611810bfa 100644 --- a/modules/bullet/rigid_body_bullet.cpp +++ b/modules/bullet/rigid_body_bullet.cpp @@ -126,16 +126,16 @@ void BulletPhysicsDirectBodyState::add_torque(const Vector3 &p_torque) { body->apply_torque(p_torque); } -void BulletPhysicsDirectBodyState::apply_central_impulse(const Vector3 &p_j) { - body->apply_central_impulse(p_j); +void BulletPhysicsDirectBodyState::apply_central_impulse(const Vector3 &p_impulse) { + body->apply_central_impulse(p_impulse); } -void BulletPhysicsDirectBodyState::apply_impulse(const Vector3 &p_pos, const Vector3 &p_j) { - body->apply_impulse(p_pos, p_j); +void BulletPhysicsDirectBodyState::apply_impulse(const Vector3 &p_pos, const Vector3 &p_impulse) { + body->apply_impulse(p_pos, p_impulse); } -void BulletPhysicsDirectBodyState::apply_torque_impulse(const Vector3 &p_j) { - body->apply_torque_impulse(p_j); +void BulletPhysicsDirectBodyState::apply_torque_impulse(const Vector3 &p_impulse) { + body->apply_torque_impulse(p_impulse); } void BulletPhysicsDirectBodyState::set_sleep_state(bool p_enable) { @@ -411,6 +411,8 @@ void RigidBodyBullet::on_collision_filters_change() { if (space) { space->reload_collision_filters(this); } + + set_activation_state(true); } void RigidBodyBullet::on_collision_checker_start() { @@ -471,7 +473,7 @@ void RigidBodyBullet::assert_no_constraints() { void RigidBodyBullet::set_activation_state(bool p_active) { if (p_active) { - btBody->setActivationState(ACTIVE_TAG); + btBody->activate(); } else { btBody->setActivationState(WANTS_DEACTIVATION); } @@ -918,7 +920,7 @@ void RigidBodyBullet::reload_space_override_modificator() { currentArea = areasWhereIam[i]; - if (PhysicsServer::AREA_SPACE_OVERRIDE_DISABLED == currentArea->get_spOv_mode()) { + if (!currentArea || PhysicsServer::AREA_SPACE_OVERRIDE_DISABLED == currentArea->get_spOv_mode()) { continue; } diff --git a/modules/bullet/rigid_body_bullet.h b/modules/bullet/rigid_body_bullet.h index f63148092f..0b6dc997db 100644 --- a/modules/bullet/rigid_body_bullet.h +++ b/modules/bullet/rigid_body_bullet.h @@ -114,8 +114,8 @@ public: virtual void add_force(const Vector3 &p_force, const Vector3 &p_pos); virtual void add_torque(const Vector3 &p_torque); virtual void apply_central_impulse(const Vector3 &p_impulse); - virtual void apply_impulse(const Vector3 &p_pos, const Vector3 &p_j); - virtual void apply_torque_impulse(const Vector3 &p_j); + virtual void apply_impulse(const Vector3 &p_pos, const Vector3 &p_impulse); + virtual void apply_torque_impulse(const Vector3 &p_impulse); virtual void set_sleep_state(bool p_enable); virtual bool is_sleeping() const; diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp index d2b16b0fd1..e74c29769f 100644 --- a/modules/bullet/space_bullet.cpp +++ b/modules/bullet/space_bullet.cpp @@ -42,6 +42,7 @@ #include "servers/physics_server.h" #include "soft_body_bullet.h" +#include <BulletCollision/BroadphaseCollision/btBroadphaseProxy.h> #include <BulletCollision/CollisionDispatch/btCollisionObject.h> #include <BulletCollision/CollisionDispatch/btGhostObject.h> #include <BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h> @@ -459,9 +460,13 @@ void SpaceBullet::remove_area(AreaBullet *p_area) { } void SpaceBullet::reload_collision_filters(AreaBullet *p_area) { - // This is necessary to change collision filter - dynamicsWorld->removeCollisionObject(p_area->get_bt_ghost()); - dynamicsWorld->addCollisionObject(p_area->get_bt_ghost(), p_area->get_collision_layer(), p_area->get_collision_mask()); + btGhostObject *ghost_object = p_area->get_bt_ghost(); + + btBroadphaseProxy *ghost_proxy = ghost_object->getBroadphaseHandle(); + ghost_proxy->m_collisionFilterGroup = p_area->get_collision_layer(); + ghost_proxy->m_collisionFilterMask = p_area->get_collision_mask(); + + dynamicsWorld->refreshBroadphaseProxy(ghost_object); } void SpaceBullet::add_rigid_body(RigidBodyBullet *p_body) { @@ -482,9 +487,13 @@ void SpaceBullet::remove_rigid_body(RigidBodyBullet *p_body) { } void SpaceBullet::reload_collision_filters(RigidBodyBullet *p_body) { - // This is necessary to change collision filter - remove_rigid_body(p_body); - add_rigid_body(p_body); + btRigidBody *rigid_body = p_body->get_bt_rigid_body(); + + btBroadphaseProxy *body_proxy = rigid_body->getBroadphaseProxy(); + body_proxy->m_collisionFilterGroup = p_body->get_collision_layer(); + body_proxy->m_collisionFilterMask = p_body->get_collision_mask(); + + dynamicsWorld->refreshBroadphaseProxy(rigid_body); } void SpaceBullet::add_soft_body(SoftBodyBullet *p_body) { diff --git a/modules/csg/csg.cpp b/modules/csg/csg.cpp index f1b3fa2ac6..925fff0cc8 100644 --- a/modules/csg/csg.cpp +++ b/modules/csg/csg.cpp @@ -114,7 +114,7 @@ void CSGBrush::_regen_face_aabbs() { faces.write[i].aabb.position = faces[i].vertices[0]; faces.write[i].aabb.expand_to(faces[i].vertices[1]); faces.write[i].aabb.expand_to(faces[i].vertices[2]); - faces.write[i].aabb.grow_by(faces[i].aabb.get_longest_axis_size() * 0.001); //make it a tad bigger to avoid num precision erros + faces.write[i].aabb.grow_by(faces[i].aabb.get_longest_axis_size() * 0.001); //make it a tad bigger to avoid num precision errors } } @@ -242,7 +242,7 @@ void CSGBrushOperation::BuildPoly::_clip_segment(const CSGBrush *p_brush, int p_ //check if edge and poly share a vertex, of so, assign it to segment_idx for (int i = 0; i < points.size(); i++) { for (int j = 0; j < 2; j++) { - if (segment[j] == points[i].point) { + if (segment[j].is_equal_approx(points[i].point)) { segment_idx[j] = i; inserted_points.push_back(i); break; @@ -310,7 +310,7 @@ void CSGBrushOperation::BuildPoly::_clip_segment(const CSGBrush *p_brush, int p_ Vector2 edgeseg[2] = { points[edges[i].points[0]].point, points[edges[i].points[1]].point }; Vector2 closest = Geometry::get_closest_point_to_segment_2d(segment[j], edgeseg); - if (closest == segment[j]) { + if (closest.is_equal_approx(segment[j])) { //point rest of this edge res = closest; found = true; @@ -439,7 +439,7 @@ void CSGBrushOperation::BuildPoly::clip(const CSGBrush *p_brush, int p_face, Mes //transform A points to 2D - if (segment[0] == segment[1]) + if (segment[0].is_equal_approx(segment[1])) return; //too small _clip_segment(p_brush, p_face, segment, mesh_merge, p_for_B); @@ -461,10 +461,10 @@ void CSGBrushOperation::_collision_callback(const CSGBrush *A, int p_face_a, Map { //check if either is a degenerate - if (va[0] == va[1] || va[0] == va[2] || va[1] == va[2]) + if (va[0].is_equal_approx(va[1]) || va[0].is_equal_approx(va[2]) || va[1].is_equal_approx(va[2])) return; - if (vb[0] == vb[1] || vb[0] == vb[2] || vb[1] == vb[2]) + if (vb[0].is_equal_approx(vb[1]) || vb[0].is_equal_approx(vb[2]) || vb[1].is_equal_approx(vb[2])) return; } diff --git a/modules/csg/csg_gizmos.cpp b/modules/csg/csg_gizmos.cpp index e6bfa5525d..0d26943af6 100644 --- a/modules/csg/csg_gizmos.cpp +++ b/modules/csg/csg_gizmos.cpp @@ -377,7 +377,7 @@ void CSGShapeSpatialGizmoPlugin::redraw(EditorSpatialGizmo *p_gizmo) { break; } - p_gizmo->add_mesh(mesh, false, RID(), solid_material); + p_gizmo->add_mesh(mesh, false, Ref<SkinReference>(), solid_material); } if (Object::cast_to<CSGSphere>(cs)) { diff --git a/modules/csg/csg_shape.cpp b/modules/csg/csg_shape.cpp index 23725c4960..9409b33f24 100644 --- a/modules/csg/csg_shape.cpp +++ b/modules/csg/csg_shape.cpp @@ -282,7 +282,7 @@ void CSGShape::_update_shape() { root_mesh.unref(); //byebye root mesh CSGBrush *n = _get_brush(); - ERR_FAIL_COND(!n); + ERR_FAIL_COND_MSG(!n, "Cannot get CSGBrush."); OAHashMap<Vector3, Vector3> vec_map; @@ -1067,6 +1067,7 @@ void CSGSphere::set_radius(const float p_radius) { radius = p_radius; _make_dirty(); update_gizmo(); + _change_notify("radius"); } float CSGSphere::get_radius() const { @@ -1251,6 +1252,7 @@ void CSGBox::set_width(const float p_width) { width = p_width; _make_dirty(); update_gizmo(); + _change_notify("width"); } float CSGBox::get_width() const { @@ -1261,6 +1263,7 @@ void CSGBox::set_height(const float p_height) { height = p_height; _make_dirty(); update_gizmo(); + _change_notify("height"); } float CSGBox::get_height() const { @@ -1271,6 +1274,7 @@ void CSGBox::set_depth(const float p_depth) { depth = p_depth; _make_dirty(); update_gizmo(); + _change_notify("depth"); } float CSGBox::get_depth() const { @@ -1465,6 +1469,7 @@ void CSGCylinder::set_radius(const float p_radius) { radius = p_radius; _make_dirty(); update_gizmo(); + _change_notify("radius"); } float CSGCylinder::get_radius() const { @@ -1475,6 +1480,7 @@ void CSGCylinder::set_height(const float p_height) { height = p_height; _make_dirty(); update_gizmo(); + _change_notify("height"); } float CSGCylinder::get_height() const { @@ -1690,6 +1696,7 @@ void CSGTorus::set_inner_radius(const float p_inner_radius) { inner_radius = p_inner_radius; _make_dirty(); update_gizmo(); + _change_notify("inner_radius"); } float CSGTorus::get_inner_radius() const { @@ -1700,6 +1707,7 @@ void CSGTorus::set_outer_radius(const float p_outer_radius) { outer_radius = p_outer_radius; _make_dirty(); update_gizmo(); + _change_notify("outer_radius"); } float CSGTorus::get_outer_radius() const { @@ -2407,7 +2415,7 @@ NodePath CSGPolygon::get_path_node() const { } void CSGPolygon::set_path_interval(float p_interval) { - ERR_FAIL_COND(p_interval < 0.001); + ERR_FAIL_COND_MSG(p_interval < 0.001, "Path interval cannot be smaller than 0.001."); path_interval = p_interval; _make_dirty(); update_gizmo(); diff --git a/modules/cvtt/SCsub b/modules/cvtt/SCsub index 142af0c800..746b23ca28 100644 --- a/modules/cvtt/SCsub +++ b/modules/cvtt/SCsub @@ -6,19 +6,18 @@ Import('env_modules') env_cvtt = env_modules.Clone() # Thirdparty source files -if env['builtin_squish']: - thirdparty_dir = "#thirdparty/cvtt/" - thirdparty_sources = [ - "ConvectionKernels.cpp" - ] +thirdparty_dir = "#thirdparty/cvtt/" +thirdparty_sources = [ + "ConvectionKernels.cpp" +] - thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] +thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources] - env_cvtt.Prepend(CPPPATH=[thirdparty_dir]) +env_cvtt.Prepend(CPPPATH=[thirdparty_dir]) - env_thirdparty = env_cvtt.Clone() - env_thirdparty.disable_warnings() - env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources) +env_thirdparty = env_cvtt.Clone() +env_thirdparty.disable_warnings() +env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources) # Godot source files env_cvtt.add_source_files(env.modules_sources, "*.cpp") diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp index 0220dcae4a..16a0f9d6ee 100644 --- a/modules/dds/texture_loader_dds.cpp +++ b/modules/dds/texture_loader_dds.cpp @@ -108,7 +108,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path, if (r_error) *r_error = ERR_FILE_CORRUPT; - ERR_FAIL_COND_V_MSG(err != OK, RES(), "Unable to open DDS texture file: " + p_path + "."); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Unable to open DDS texture file '" + p_path + "'."); uint32_t magic = f->get_32(); uint32_t hsize = f->get_32(); @@ -127,7 +127,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path, if (magic != DDS_MAGIC || hsize != 124 || !(flags & DDSD_PIXELFORMAT) || !(flags & DDSD_CAPS)) { - ERR_FAIL_V_MSG(RES(), "Invalid or unsupported DDS texture file: " + p_path + "."); + ERR_FAIL_V_MSG(RES(), "Invalid or unsupported DDS texture file '" + p_path + "'."); } /* uint32_t format_size = */ f->get_32(); @@ -216,7 +216,7 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path, } else { printf("unrecognized fourcc %x format_flags: %x - rgbbits %i - red_mask %x green mask %x blue mask %x alpha mask %x\n", format_fourcc, format_flags, format_rgb_bits, format_red_mask, format_green_mask, format_blue_mask, format_alpha_mask); - ERR_FAIL_V_MSG(RES(), "Unrecognized or unsupported color layout in DDS: " + p_path + "."); + ERR_FAIL_V_MSG(RES(), "Unrecognized or unsupported color layout in DDS '" + p_path + "'."); } if (!(flags & DDSD_MIPMAPCOUNT)) diff --git a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml index 84ed5fd9ee..4c10588aa6 100644 --- a/modules/enet/doc_classes/NetworkedMultiplayerENet.xml +++ b/modules/enet/doc_classes/NetworkedMultiplayerENet.xml @@ -115,9 +115,11 @@ <member name="compression_mode" type="int" setter="set_compression_mode" getter="get_compression_mode" enum="NetworkedMultiplayerENet.CompressionMode" default="0"> The compression method used for network packets. These have different tradeoffs of compression speed versus bandwidth, you may need to test which one works best for your use case if you use compression at all. </member> + <member name="refuse_new_connections" type="bool" setter="set_refuse_new_connections" getter="is_refusing_new_connections" override="true" default="false" /> <member name="transfer_channel" type="int" setter="set_transfer_channel" getter="get_transfer_channel" default="-1"> Set the default channel to be used to transfer data. By default, this value is [code]-1[/code] which means that ENet will only use 2 channels, one for reliable and one for unreliable packets. Channel [code]0[/code] is reserved, and cannot be used. Setting this member to any value between [code]0[/code] and [member channel_count] (excluded) will force ENet to use that channel for sending data. </member> + <member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="NetworkedMultiplayerPeer.TransferMode" default="2" /> </members> <constants> <constant name="COMPRESS_NONE" value="0" enum="CompressionMode"> diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp index 44f69ca261..a787cd3b80 100644 --- a/modules/enet/networked_multiplayer_enet.cpp +++ b/modules/enet/networked_multiplayer_enet.cpp @@ -543,7 +543,7 @@ Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer, int p_buffer if (target_peer != 0) { E = peer_map.find(ABS(target_peer)); - ERR_FAIL_COND_V_MSG(!E, ERR_INVALID_PARAMETER, "Invalid target peer: " + itos(target_peer) + "."); + ERR_FAIL_COND_V_MSG(!E, ERR_INVALID_PARAMETER, "Invalid target peer '" + itos(target_peer) + "'."); } ENetPacket *packet = enet_packet_create(NULL, p_buffer_size + 8, packet_flags); diff --git a/modules/etc/image_etc.cpp b/modules/etc/image_etc.cpp index 6f54436bf9..f0cbf6ae28 100644 --- a/modules/etc/image_etc.cpp +++ b/modules/etc/image_etc.cpp @@ -168,6 +168,7 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f } PoolVector<uint8_t>::Read r = img->get_data().read(); + ERR_FAIL_COND(!r.ptr()); unsigned int target_size = Image::get_image_data_size(imgw, imgh, etc_format, p_img->has_mipmaps()); int mmc = 1 + (p_img->has_mipmaps() ? Image::get_image_required_mipmaps(imgw, imgh, etc_format) : 0); diff --git a/modules/etc/texture_loader_pkm.cpp b/modules/etc/texture_loader_pkm.cpp index dd61d816d4..4d8af6883f 100644 --- a/modules/etc/texture_loader_pkm.cpp +++ b/modules/etc/texture_loader_pkm.cpp @@ -56,14 +56,14 @@ RES ResourceFormatPKM::load(const String &p_path, const String &p_original_path, if (r_error) *r_error = ERR_FILE_CORRUPT; - ERR_FAIL_COND_V_MSG(err != OK, RES(), "Unable to open PKM texture file: " + p_path + "."); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Unable to open PKM texture file '" + p_path + "'."); // big endian f->set_endian_swap(true); ETC1Header h; f->get_buffer((uint8_t *)&h.tag, sizeof(h.tag)); - ERR_FAIL_COND_V_MSG(strncmp(h.tag, "PKM 10", sizeof(h.tag)), RES(), "Invalid or unsupported PKM texture file: " + p_path + "."); + ERR_FAIL_COND_V_MSG(strncmp(h.tag, "PKM 10", sizeof(h.tag)), RES(), "Invalid or unsupported PKM texture file '" + p_path + "'."); h.format = f->get_16(); h.texWidth = f->get_16(); diff --git a/modules/freetype/SCsub b/modules/freetype/SCsub index b47377cbc4..8f4a8de895 100644 --- a/modules/freetype/SCsub +++ b/modules/freetype/SCsub @@ -66,7 +66,7 @@ if env['builtin_freetype']: env.Prepend(CPPPATH=[thirdparty_dir + "/include"]) env_freetype.Append(CPPDEFINES=['FT2_BUILD_LIBRARY', 'FT_CONFIG_OPTION_USE_PNG']) - if (env['target'] != 'release'): + if (env['target'] == 'debug'): env_freetype.Append(CPPDEFINES=['ZLIB_DEBUG']) # Also requires libpng headers diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml index 7e1cac243a..aa48ab44f2 100644 --- a/modules/gdnative/doc_classes/GDNativeLibrary.xml +++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml @@ -1,35 +1,50 @@ <?xml version="1.0" encoding="UTF-8" ?> <class name="GDNativeLibrary" inherits="Resource" category="Core" version="3.2"> <brief_description> + An external library containing functions or script classes to use in Godot. </brief_description> <description> + A GDNative library can implement [NativeScript]s, global functions to call with the [GDNative] class, or low-level engine extensions through interfaces such as [ARVRInterfaceGDNative]. The library must be compiled for each platform and architecture that the project will run on. </description> <tutorials> + <link>https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-example.html</link> + <link>https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-cpp-example.html</link> </tutorials> <methods> <method name="get_current_dependencies" qualifiers="const"> <return type="PoolStringArray"> </return> <description> + Returns paths to all dependency libraries for the current platform and architecture. </description> </method> <method name="get_current_library_path" qualifiers="const"> <return type="String"> </return> <description> + Returns the path to the dynamic library file for the current platform and architecture. </description> </method> </methods> <members> <member name="config_file" type="ConfigFile" setter="set_config_file" getter="get_config_file"> + This resource in INI-style [ConfigFile] format, as in [code].gdnlib[/code] files. </member> <member name="load_once" type="bool" setter="set_load_once" getter="should_load_once" default="true"> + If [code]true[/code], Godot loads only one copy of the library and each script that references the library will share static data like static or global variables. + If [code]false[/code], Godot loads a separate copy of the library into memory for each script that references it. </member> <member name="reloadable" type="bool" setter="set_reloadable" getter="is_reloadable" default="true"> + If [code]true[/code], the editor will temporarily unload the library whenever the user switches away from the editor window, allowing the user to recompile the library without restarting Godot. + [b]Note:[/b] If the library defines tool scripts that run inside the editor, [code]reloadable[/code] must be [code]false[/code]. Otherwise, the editor will attempt to unload the tool scripts while they're in use and crash. </member> <member name="singleton" type="bool" setter="set_singleton" getter="is_singleton" default="false"> + If [code]true[/code], Godot loads the library at startup rather than the first time a script uses the library, calling [code]{prefix}gdnative_singleton[/code] after initializing the library (where [code]{prefix}[/code] is the value of [member symbol_prefix]). The library remains loaded as long as Godot is running. + [b]Note:[/b] A singleton library cannot be [member reloadable]. </member> <member name="symbol_prefix" type="String" setter="set_symbol_prefix" getter="get_symbol_prefix" default=""godot_""> + The prefix this library's entry point functions begin with. For example, a GDNativeLibrary would declare its [code]gdnative_init[/code] function as [code]godot_gdnative_init[/code] by default. + On platforms that require statically linking libraries (currently only iOS), each library must have a different [code]symbol_prefix[/code]. </member> </members> <constants> diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index 783ad4e147..ee9e71d4a0 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -339,7 +339,7 @@ bool GDNative::initialize() { if (err || !library_init) { OS::get_singleton()->close_dynamic_library(native_handle); native_handle = NULL; - ERR_PRINT("Failed to obtain godot_gdnative_init symbol"); + ERR_PRINTS("Failed to obtain " + library->get_symbol_prefix() + "gdnative_init symbol"); return false; } diff --git a/modules/gdnative/gdnative/array.cpp b/modules/gdnative/gdnative/array.cpp index 1ef8e9f900..e97a75cca8 100644 --- a/modules/gdnative/gdnative/array.cpp +++ b/modules/gdnative/gdnative/array.cpp @@ -327,6 +327,15 @@ godot_array GDAPI godot_array_duplicate(const godot_array *p_self, const godot_b return res; } +godot_array GDAPI godot_array_slice(const godot_array *p_self, const godot_int p_begin, const godot_int p_end, const godot_int p_step, const godot_bool p_deep) { + const Array *self = (const Array *)p_self; + godot_array res; + Array *val = (Array *)&res; + memnew_placement(val, Array); + *val = self->slice(p_begin, p_end, p_step, p_deep); + return res; +} + godot_variant GDAPI godot_array_max(const godot_array *p_self) { const Array *self = (const Array *)p_self; godot_variant v; diff --git a/modules/gdnative/gdnative/pool_arrays.cpp b/modules/gdnative/gdnative/pool_arrays.cpp index 74c540ca14..23791af67e 100644 --- a/modules/gdnative/gdnative/pool_arrays.cpp +++ b/modules/gdnative/gdnative/pool_arrays.cpp @@ -129,6 +129,11 @@ godot_int GDAPI godot_pool_byte_array_size(const godot_pool_byte_array *p_self) return self->size(); } +godot_bool GDAPI godot_pool_byte_array_empty(const godot_pool_byte_array *p_self) { + const PoolVector<uint8_t> *self = (const PoolVector<uint8_t> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_byte_array_destroy(godot_pool_byte_array *p_self) { ((PoolVector<uint8_t> *)p_self)->~PoolVector(); } @@ -218,6 +223,11 @@ godot_int GDAPI godot_pool_int_array_size(const godot_pool_int_array *p_self) { return self->size(); } +godot_bool GDAPI godot_pool_int_array_empty(const godot_pool_int_array *p_self) { + const PoolVector<godot_int> *self = (const PoolVector<godot_int> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_int_array_destroy(godot_pool_int_array *p_self) { ((PoolVector<godot_int> *)p_self)->~PoolVector(); } @@ -307,6 +317,11 @@ godot_int GDAPI godot_pool_real_array_size(const godot_pool_real_array *p_self) return self->size(); } +godot_bool GDAPI godot_pool_real_array_empty(const godot_pool_real_array *p_self) { + const PoolVector<godot_real> *self = (const PoolVector<godot_real> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_real_array_destroy(godot_pool_real_array *p_self) { ((PoolVector<godot_real> *)p_self)->~PoolVector(); } @@ -404,6 +419,11 @@ godot_int GDAPI godot_pool_string_array_size(const godot_pool_string_array *p_se return self->size(); } +godot_bool GDAPI godot_pool_string_array_empty(const godot_pool_string_array *p_self) { + const PoolVector<String> *self = (const PoolVector<String> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_string_array_destroy(godot_pool_string_array *p_self) { ((PoolVector<String> *)p_self)->~PoolVector(); } @@ -500,6 +520,11 @@ godot_int GDAPI godot_pool_vector2_array_size(const godot_pool_vector2_array *p_ return self->size(); } +godot_bool GDAPI godot_pool_vector2_array_empty(const godot_pool_vector2_array *p_self) { + const PoolVector<Vector2> *self = (const PoolVector<Vector2> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_vector2_array_destroy(godot_pool_vector2_array *p_self) { ((PoolVector<Vector2> *)p_self)->~PoolVector(); } @@ -596,6 +621,11 @@ godot_int GDAPI godot_pool_vector3_array_size(const godot_pool_vector3_array *p_ return self->size(); } +godot_bool GDAPI godot_pool_vector3_array_empty(const godot_pool_vector3_array *p_self) { + const PoolVector<Vector3> *self = (const PoolVector<Vector3> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_vector3_array_destroy(godot_pool_vector3_array *p_self) { ((PoolVector<Vector3> *)p_self)->~PoolVector(); } @@ -692,6 +722,11 @@ godot_int GDAPI godot_pool_color_array_size(const godot_pool_color_array *p_self return self->size(); } +godot_bool GDAPI godot_pool_color_array_empty(const godot_pool_color_array *p_self) { + const PoolVector<Color> *self = (const PoolVector<Color> *)p_self; + return self->empty(); +} + void GDAPI godot_pool_color_array_destroy(godot_pool_color_array *p_self) { ((PoolVector<Color> *)p_self)->~PoolVector(); } diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json index 03258584ce..9e5295a936 100644 --- a/modules/gdnative/gdnative_api.json +++ b/modules/gdnative/gdnative_api.json @@ -80,6 +80,66 @@ ["const godot_vector2 *", "p_self"], ["const godot_vector2 *", "p_to"] ] + }, + { + "name": "godot_array_slice", + "return_type": "godot_array", + "arguments": [ + ["const godot_array *", "p_self"], + ["const godot_int", "p_begin"], + ["const godot_int", "p_end"], + ["const godot_int", "p_step"], + ["const godot_bool", "p_deep"] + ] + }, + { + "name": "godot_pool_byte_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_byte_array *", "p_self"] + ] + }, + { + "name": "godot_pool_int_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_int_array *", "p_self"] + ] + }, + { + "name": "godot_pool_real_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_real_array *", "p_self"] + ] + }, + { + "name": "godot_pool_string_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_string_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector2_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_vector2_array *", "p_self"] + ] + }, + { + "name": "godot_pool_vector3_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_vector3_array *", "p_self"] + ] + }, + { + "name": "godot_pool_color_array_empty", + "return_type": "godot_bool", + "arguments": [ + ["const godot_pool_color_array *", "p_self"] + ] } ] }, diff --git a/modules/gdnative/include/gdnative/array.h b/modules/gdnative/include/gdnative/array.h index 10ef8a73d2..a27626325e 100644 --- a/modules/gdnative/include/gdnative/array.h +++ b/modules/gdnative/include/gdnative/array.h @@ -132,6 +132,8 @@ void GDAPI godot_array_destroy(godot_array *p_self); godot_array GDAPI godot_array_duplicate(const godot_array *p_self, const godot_bool p_deep); +godot_array GDAPI godot_array_slice(const godot_array *p_self, const godot_int p_begin, const godot_int p_end, const godot_int p_step, const godot_bool p_deep); + godot_variant GDAPI godot_array_max(const godot_array *p_self); godot_variant GDAPI godot_array_min(const godot_array *p_self); diff --git a/modules/gdnative/include/gdnative/pool_arrays.h b/modules/gdnative/include/gdnative/pool_arrays.h index 96730ab085..63e8267f0e 100644 --- a/modules/gdnative/include/gdnative/pool_arrays.h +++ b/modules/gdnative/include/gdnative/pool_arrays.h @@ -191,6 +191,8 @@ uint8_t GDAPI godot_pool_byte_array_get(const godot_pool_byte_array *p_self, con godot_int GDAPI godot_pool_byte_array_size(const godot_pool_byte_array *p_self); +godot_bool GDAPI godot_pool_byte_array_empty(const godot_pool_byte_array *p_self); + void GDAPI godot_pool_byte_array_destroy(godot_pool_byte_array *p_self); // int @@ -222,6 +224,8 @@ godot_int GDAPI godot_pool_int_array_get(const godot_pool_int_array *p_self, con godot_int GDAPI godot_pool_int_array_size(const godot_pool_int_array *p_self); +godot_bool GDAPI godot_pool_int_array_empty(const godot_pool_int_array *p_self); + void GDAPI godot_pool_int_array_destroy(godot_pool_int_array *p_self); // real @@ -253,6 +257,8 @@ godot_real GDAPI godot_pool_real_array_get(const godot_pool_real_array *p_self, godot_int GDAPI godot_pool_real_array_size(const godot_pool_real_array *p_self); +godot_bool GDAPI godot_pool_real_array_empty(const godot_pool_real_array *p_self); + void GDAPI godot_pool_real_array_destroy(godot_pool_real_array *p_self); // string @@ -284,6 +290,8 @@ godot_string GDAPI godot_pool_string_array_get(const godot_pool_string_array *p_ godot_int GDAPI godot_pool_string_array_size(const godot_pool_string_array *p_self); +godot_bool GDAPI godot_pool_string_array_empty(const godot_pool_string_array *p_self); + void GDAPI godot_pool_string_array_destroy(godot_pool_string_array *p_self); // vector2 @@ -315,6 +323,8 @@ godot_vector2 GDAPI godot_pool_vector2_array_get(const godot_pool_vector2_array godot_int GDAPI godot_pool_vector2_array_size(const godot_pool_vector2_array *p_self); +godot_bool GDAPI godot_pool_vector2_array_empty(const godot_pool_vector2_array *p_self); + void GDAPI godot_pool_vector2_array_destroy(godot_pool_vector2_array *p_self); // vector3 @@ -346,6 +356,8 @@ godot_vector3 GDAPI godot_pool_vector3_array_get(const godot_pool_vector3_array godot_int GDAPI godot_pool_vector3_array_size(const godot_pool_vector3_array *p_self); +godot_bool GDAPI godot_pool_vector3_array_empty(const godot_pool_vector3_array *p_self); + void GDAPI godot_pool_vector3_array_destroy(godot_pool_vector3_array *p_self); // color @@ -377,6 +389,8 @@ godot_color GDAPI godot_pool_color_array_get(const godot_pool_color_array *p_sel godot_int GDAPI godot_pool_color_array_size(const godot_pool_color_array *p_self); +godot_bool GDAPI godot_pool_color_array_empty(const godot_pool_color_array *p_self); + void GDAPI godot_pool_color_array_destroy(godot_pool_color_array *p_self); // diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h index 7f52f5736c..8a05b6cfa3 100644 --- a/modules/gdnative/include/nativescript/godot_nativescript.h +++ b/modules/gdnative/include/nativescript/godot_nativescript.h @@ -64,9 +64,9 @@ typedef enum { GODOT_PROPERTY_HINT_LAYERS_3D_RENDER, GODOT_PROPERTY_HINT_LAYERS_3D_PHYSICS, GODOT_PROPERTY_HINT_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc," - GODOT_PROPERTY_HINT_DIR, ///< a directort path must be passed + GODOT_PROPERTY_HINT_DIR, ///< a directory path must be passed GODOT_PROPERTY_HINT_GLOBAL_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc," - GODOT_PROPERTY_HINT_GLOBAL_DIR, ///< a directort path must be passed + GODOT_PROPERTY_HINT_GLOBAL_DIR, ///< a directory path must be passed GODOT_PROPERTY_HINT_RESOURCE_TYPE, ///< a resource object type GODOT_PROPERTY_HINT_MULTILINE_TEXT, ///< used for string properties that can contain multiple lines GODOT_PROPERTY_HINT_PLACEHOLDER_TEXT, ///< used to set a placeholder text for string properties diff --git a/modules/gdnative/pluginscript/pluginscript_language.cpp b/modules/gdnative/pluginscript/pluginscript_language.cpp index 9de073fc8e..22898a73ce 100644 --- a/modules/gdnative/pluginscript/pluginscript_language.cpp +++ b/modules/gdnative/pluginscript/pluginscript_language.cpp @@ -200,7 +200,7 @@ void PluginScriptLanguage::get_recognized_extensions(List<String> *p_extensions) } void PluginScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) const { - // TODO: provid this statically in `godot_pluginscript_language_desc` ? + // TODO: provide this statically in `godot_pluginscript_language_desc` ? if (_desc.get_public_functions) { Array functions; _desc.get_public_functions(_data, (godot_array *)&functions); @@ -212,7 +212,7 @@ void PluginScriptLanguage::get_public_functions(List<MethodInfo> *p_functions) c } void PluginScriptLanguage::get_public_constants(List<Pair<String, Variant> > *p_constants) const { - // TODO: provid this statically in `godot_pluginscript_language_desc` ? + // TODO: provide this statically in `godot_pluginscript_language_desc` ? if (_desc.get_public_constants) { Dictionary constants; _desc.get_public_constants(_data, (godot_dictionary *)&constants); diff --git a/modules/gdnative/pluginscript/pluginscript_script.cpp b/modules/gdnative/pluginscript/pluginscript_script.cpp index 94d38e1be1..f7c961d38b 100644 --- a/modules/gdnative/pluginscript/pluginscript_script.cpp +++ b/modules/gdnative/pluginscript/pluginscript_script.cpp @@ -401,9 +401,7 @@ Error PluginScript::load_source_code(const String &p_path) { PoolVector<uint8_t> sourcef; Error err; FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - if (err) { - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot open file '" + p_path + "'."); int len = f->get_len(); sourcef.resize(len + 1); diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp index 6ff6262b56..fa59c704d5 100644 --- a/modules/gdnative/register_types.cpp +++ b/modules/gdnative/register_types.cpp @@ -158,7 +158,7 @@ void GDNativeExportPlugin::_export_file(const String &p_path, const String &p_ty String additional_code = "extern void register_dynamic_symbol(char *name, void *address);\n" "extern void add_ios_init_callback(void (*cb)());\n"; String linker_flags = ""; - for (unsigned int i = 0; i < sizeof(expected_symbols) / sizeof(expected_symbols[0]); ++i) { + for (unsigned long i = 0; i < sizeof(expected_symbols) / sizeof(expected_symbols[0]); ++i) { String full_name = lib->get_symbol_prefix() + expected_symbols[i].name; String code = declare_pattern.replace("$name", full_name); code = code.replace("$weak", expected_symbols[i].is_required ? "" : " __attribute__((weak))"); @@ -174,7 +174,7 @@ void GDNativeExportPlugin::_export_file(const String &p_path, const String &p_ty additional_code += String("void $prefixinit() {\n").replace("$prefix", lib->get_symbol_prefix()); String register_pattern = " if (&$name) register_dynamic_symbol((char *)\"$name\", (void *)$name);\n"; - for (unsigned int i = 0; i < sizeof(expected_symbols) / sizeof(expected_symbols[0]); ++i) { + for (unsigned long i = 0; i < sizeof(expected_symbols) / sizeof(expected_symbols[0]); ++i) { String full_name = lib->get_symbol_prefix() + expected_symbols[i].name; additional_code += register_pattern.replace("$name", full_name); } @@ -277,7 +277,7 @@ void register_gdnative_types() { proc_ptr); if (err != OK) { - ERR_PRINT((String("No godot_gdnative_singleton in \"" + singleton->get_library()->get_current_library_path()) + "\" found").utf8().get_data()); + ERR_PRINTS("No " + lib->get_symbol_prefix() + "gdnative_singleton in \"" + singleton->get_library()->get_current_library_path() + "\" found"); } else { singleton_gdnatives.push_back(singleton); ((void (*)())proc_ptr)(); diff --git a/modules/gdnative/videodecoder/video_stream_gdnative.cpp b/modules/gdnative/videodecoder/video_stream_gdnative.cpp index be131c5402..14b7f9a2ef 100644 --- a/modules/gdnative/videodecoder/video_stream_gdnative.cpp +++ b/modules/gdnative/videodecoder/video_stream_gdnative.cpp @@ -149,7 +149,7 @@ void VideoStreamPlaybackGDNative::update(float p_delta) { if (mix_callback) { if (pcm_write_idx >= 0) { // Previous remains - int mixed = mix_callback(mix_udata, pcm, samples_decoded); + int mixed = mix_callback(mix_udata, pcm + pcm_write_idx * num_channels, samples_decoded); if (mixed == samples_decoded) { pcm_write_idx = -1; } else { @@ -168,8 +168,12 @@ void VideoStreamPlaybackGDNative::update(float p_delta) { } } - while (interface->get_playback_position(data_struct) < time && playing) { + if (seek_backward) { + update_texture(); + seek_backward = false; + } + while (interface->get_playback_position(data_struct) < time && playing) { update_texture(); } } @@ -197,6 +201,7 @@ VideoStreamPlaybackGDNative::VideoStreamPlaybackGDNative() : mix_callback(NULL), num_channels(-1), time(0), + seek_backward(false), mix_rate(0), delay_compensation(0), pcm(NULL), @@ -261,13 +266,20 @@ void VideoStreamPlaybackGDNative::stop() { void VideoStreamPlaybackGDNative::seek(float p_time) { ERR_FAIL_COND(interface == NULL); interface->seek(data_struct, p_time); + if (p_time < time) + seek_backward = true; + time = p_time; + // reset audio buffers + memset(pcm, 0, num_channels * AUX_BUFFER_SIZE * sizeof(float)); + pcm_write_idx = -1; + samples_decoded = 0; } void VideoStreamPlaybackGDNative::set_paused(bool p_paused) { paused = p_paused; } -Ref<Texture> VideoStreamPlaybackGDNative::get_texture() { +Ref<Texture> VideoStreamPlaybackGDNative::get_texture() const { return texture; } diff --git a/modules/gdnative/videodecoder/video_stream_gdnative.h b/modules/gdnative/videodecoder/video_stream_gdnative.h index b9f1c8e4da..5ff7acb616 100644 --- a/modules/gdnative/videodecoder/video_stream_gdnative.h +++ b/modules/gdnative/videodecoder/video_stream_gdnative.h @@ -121,6 +121,7 @@ class VideoStreamPlaybackGDNative : public VideoStreamPlayback { int num_channels; float time; + bool seek_backward; int mix_rate; double delay_compensation; @@ -167,7 +168,7 @@ public: //virtual int mix(int16_t* p_buffer,int p_frames)=0; - virtual Ref<Texture> get_texture(); + virtual Ref<Texture> get_texture() const; virtual void update(float p_delta); virtual void set_mix_callback(AudioMixCallback p_callback, void *p_userdata); diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml index 4efa90fd86..840971dcf8 100644 --- a/modules/gdscript/doc_classes/@GDScript.xml +++ b/modules/gdscript/doc_classes/@GDScript.xml @@ -21,7 +21,7 @@ <argument index="3" name="a8" type="int" default="255"> </argument> <description> - Returns a 32 bit color with red, green, blue and alpha channels. Each channel has 8 bits of information ranging from 0 to 255. + Returns a color constructed from integer red, green, blue, and alpha channels. Each channel should have 8 bits of information ranging from 0 to 255. [code]r8[/code] red channel [code]g8[/code] green channel [code]b8[/code] blue channel @@ -590,10 +590,10 @@ extends Sprite var elapsed = 0.0 func _process(delta): - var min_angle = deg2rad(0.0) - var max_angle = deg2rad(90.0) - rotation = lerp_angle(min_angle, max_angle, elapsed) - elapsed += delta + var min_angle = deg2rad(0.0) + var max_angle = deg2rad(90.0) + rotation = lerp_angle(min_angle, max_angle, elapsed) + elapsed += delta [/codeblock] </description> </method> @@ -694,6 +694,14 @@ [/codeblock] </description> </method> + <method name="ord"> + <return type="int"> + </return> + <argument index="0" name="char" type="String"> + </argument> + <description> + </description> + </method> <method name="parse_json"> <return type="Variant"> </return> @@ -831,6 +839,7 @@ printraw("B") # Prints AB [/codeblock] + [b]Note:[/b] Due to limitations with Godot's built-in console, this only prints to the terminal. If you need to print in the editor, use another method, such as [method print]. </description> </method> <method name="prints" qualifiers="vararg"> diff --git a/modules/gdscript/editor/gdscript_highlighter.cpp b/modules/gdscript/editor/gdscript_highlighter.cpp index 963b40529d..4d6279074c 100644 --- a/modules/gdscript/editor/gdscript_highlighter.cpp +++ b/modules/gdscript/editor/gdscript_highlighter.cpp @@ -247,7 +247,7 @@ Map<int, TextEdit::HighlighterInfo> GDScriptSyntaxHighlighter::_get_line_syntax_ in_function_args = false; } - if (expect_type && prev_is_char) { + if (expect_type && (prev_is_char || str[j] == '=')) { expect_type = false; } @@ -364,20 +364,28 @@ void GDScriptSyntaxHighlighter::_update_cache() { number_color = text_editor->get_color("number_color"); member_color = text_editor->get_color("member_variable_color"); - EditorSettings *settings = EditorSettings::get_singleton(); - String text_editor_color_theme = settings->get("text_editor/theme/color_theme"); + const String text_editor_color_theme = EditorSettings::get_singleton()->get("text_editor/theme/color_theme"); + const bool default_theme = text_editor_color_theme == "Default"; - bool default_theme = text_editor_color_theme == "Default"; - bool dark_theme = settings->is_dark_theme(); - - function_definition_color = default_theme ? Color(0.0, 0.88, 1.0) : dark_theme ? Color(0.0, 0.88, 1.0) : Color(0.0, 0.65, 0.73); - node_path_color = default_theme ? Color(0.39, 0.76, 0.35) : dark_theme ? Color(0.39, 0.76, 0.35) : Color(0.32, 0.55, 0.29); + if (default_theme || EditorSettings::get_singleton()->is_dark_theme()) { + function_definition_color = Color(0.4, 0.9, 1.0); + node_path_color = Color(0.39, 0.76, 0.35); + } else { + function_definition_color = Color(0.0, 0.65, 0.73); + node_path_color = Color(0.32, 0.55, 0.29); + } EDITOR_DEF("text_editor/highlighting/gdscript/function_definition_color", function_definition_color); EDITOR_DEF("text_editor/highlighting/gdscript/node_path_color", node_path_color); if (text_editor_color_theme == "Adaptive" || default_theme) { - settings->set_initial_value("text_editor/highlighting/gdscript/function_definition_color", function_definition_color, true); - settings->set_initial_value("text_editor/highlighting/gdscript/node_path_color", node_path_color, true); + EditorSettings::get_singleton()->set_initial_value( + "text_editor/highlighting/gdscript/function_definition_color", + function_definition_color, + true); + EditorSettings::get_singleton()->set_initial_value( + "text_editor/highlighting/gdscript/node_path_color", + node_path_color, + true); } function_definition_color = EDITOR_GET("text_editor/highlighting/gdscript/function_definition_color"); diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp index 5dab063061..edb296437b 100644 --- a/modules/gdscript/gdscript.cpp +++ b/modules/gdscript/gdscript.cpp @@ -99,7 +99,7 @@ GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argco #endif instance->owner->set_script_instance(instance); - /* STEP 2, INITIALIZE AND CONSRTUCT */ + /* STEP 2, INITIALIZE AND CONSTRUCT */ #ifndef NO_THREADS GDScriptLanguage::singleton->lock->lock(); @@ -199,7 +199,7 @@ StringName GDScript::get_instance_base_type() const { if (native.is_valid()) return native->get_name(); - if (base.is_valid()) + if (base.is_valid() && base->is_valid()) return base->get_instance_base_type(); return StringName(); } @@ -486,7 +486,7 @@ bool GDScript::_update_exports() { placeholder_fallback_enabled = false; - if (base_cache.is_valid()) { + if (base_cache.is_valid() && base_cache->is_valid()) { if (base_cache->_update_exports()) { changed = true; } @@ -2177,11 +2177,11 @@ RES ResourceFormatLoaderGDScript::load(const String &p_path, const String &p_ori script->set_script_path(p_original_path); // script needs this. script->set_path(p_original_path); Error err = script->load_byte_code(p_path); - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Cannot load byte code from file '" + p_path + "'."); } else { Error err = script->load_source_code(p_path); - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Cannot load source code from file '" + p_path + "'."); script->set_script_path(p_original_path); // script needs this. script->set_path(p_original_path); @@ -2217,7 +2217,7 @@ String ResourceFormatLoaderGDScript::get_resource_type(const String &p_path) con void ResourceFormatLoaderGDScript::get_dependencies(const String &p_path, List<String> *p_dependencies, bool p_add_types) { FileAccessRef file = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND(!file); + ERR_FAIL_COND_MSG(!file, "Cannot open file '" + p_path + "'."); String source = file->get_as_utf8_string(); if (source.empty()) { @@ -2244,10 +2244,7 @@ Error ResourceFormatSaverGDScript::save(const String &p_path, const RES &p_resou Error err; FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); - if (err) { - - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot save GDScript file '" + p_path + "'."); file->store_string(source); if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp index 7166189416..dea2225e91 100644 --- a/modules/gdscript/gdscript_compiler.cpp +++ b/modules/gdscript/gdscript_compiler.cpp @@ -1520,8 +1520,16 @@ Error GDScriptCompiler::_parse_block(CodeGen &codegen, const GDScriptParser::Blo if (ret2 < 0) return ERR_PARSE_ERROR; + int message_ret = 0; + if (as->message) { + message_ret = _parse_expression(codegen, as->message, p_stack_level + 1, false); + if (message_ret < 0) + return ERR_PARSE_ERROR; + } + codegen.opcodes.push_back(GDScriptFunction::OPCODE_ASSERT); codegen.opcodes.push_back(ret2); + codegen.opcodes.push_back(message_ret); #endif } break; case GDScriptParser::Node::TYPE_BREAKPOINT: { @@ -2064,7 +2072,7 @@ Error GDScriptCompiler::_parse_class_blocks(GDScript *p_script, const GDScriptPa } instance->owner->set_script_instance(instance); - /* STEP 2, INITIALIZE AND CONSRTUCT */ + /* STEP 2, INITIALIZE AND CONSTRUCT */ Variant::CallError ce; p_script->initializer->call(instance, NULL, 0, ce); diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 9b3bf8ad5b..1d82735328 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -1944,11 +1944,10 @@ static void _find_identifiers_in_base(const GDScriptCompletionContext &p_context ScriptCodeCompletionOption option(E->get().name, ScriptCodeCompletionOption::KIND_MEMBER); r_result.insert(option.display, option); } - } else { - for (const Set<StringName>::Element *E = script->get_members().front(); E; E = E->next()) { - ScriptCodeCompletionOption option(E->get().operator String(), ScriptCodeCompletionOption::KIND_MEMBER); - r_result.insert(option.display, option); - } + } + for (const Set<StringName>::Element *E = script->get_members().front(); E; E = E->next()) { + ScriptCodeCompletionOption option(E->get().operator String(), ScriptCodeCompletionOption::KIND_MEMBER); + r_result.insert(option.display, option); } } if (!p_only_functions) { diff --git a/modules/gdscript/gdscript_function.cpp b/modules/gdscript/gdscript_function.cpp index 68f2a9473e..d8816726ce 100644 --- a/modules/gdscript/gdscript_function.cpp +++ b/modules/gdscript/gdscript_function.cpp @@ -1419,7 +1419,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a if (!container->iter_init(*counter, valid)) { #ifdef DEBUG_ENABLED if (!valid) { - err_text = "Unable to iterate on object of type " + Variant::get_type_name(container->get_type()) + "'."; + err_text = "Unable to iterate on object of type '" + Variant::get_type_name(container->get_type()) + "'."; OPCODE_BREAK; } #endif @@ -1432,7 +1432,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a *iterator = container->iter_get(*counter, valid); #ifdef DEBUG_ENABLED if (!valid) { - err_text = "Unable to obtain iterator object of type " + Variant::get_type_name(container->get_type()) + "'."; + err_text = "Unable to obtain iterator object of type '" + Variant::get_type_name(container->get_type()) + "'."; OPCODE_BREAK; } #endif @@ -1452,7 +1452,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a if (!container->iter_next(*counter, valid)) { #ifdef DEBUG_ENABLED if (!valid) { - err_text = "Unable to iterate on object of type " + Variant::get_type_name(container->get_type()) + "' (type changed since first iteration?)."; + err_text = "Unable to iterate on object of type '" + Variant::get_type_name(container->get_type()) + "' (type changed since first iteration?)."; OPCODE_BREAK; } #endif @@ -1465,7 +1465,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a *iterator = container->iter_get(*counter, valid); #ifdef DEBUG_ENABLED if (!valid) { - err_text = "Unable to obtain iterator object of type " + Variant::get_type_name(container->get_type()) + "' (but was obtained on first iteration?)."; + err_text = "Unable to obtain iterator object of type '" + Variant::get_type_name(container->get_type()) + "' (but was obtained on first iteration?)."; OPCODE_BREAK; } #endif @@ -1475,20 +1475,25 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a DISPATCH_OPCODE; OPCODE(OPCODE_ASSERT) { - CHECK_SPACE(2); + CHECK_SPACE(3); #ifdef DEBUG_ENABLED GET_VARIANT_PTR(test, 1); + GET_VARIANT_PTR(message, 2); bool result = test->booleanize(); if (!result) { - - err_text = "Assertion failed."; + const String &message_str = *message; + if (message_str.empty()) { + err_text = "Assertion failed."; + } else { + err_text = "Assertion failed: " + message_str; + } OPCODE_BREAK; } #endif - ip += 2; + ip += 3; } DISPATCH_OPCODE; @@ -1556,14 +1561,14 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a //error // function, file, line, error, explanation String err_file; - if (p_instance && p_instance->script->is_valid() && p_instance->script->path != "") + if (p_instance && ObjectDB::instance_validate(p_instance->owner) && p_instance->script->is_valid() && p_instance->script->path != "") err_file = p_instance->script->path; else if (script) err_file = script->path; if (err_file == "") err_file = "<built-in>"; String err_func = name; - if (p_instance && p_instance->script->is_valid() && p_instance->script->name != "") + if (p_instance && ObjectDB::instance_validate(p_instance->owner) && p_instance->script->is_valid() && p_instance->script->name != "") err_func = p_instance->script->name + "." + err_func; int err_line = line; if (err_text == "") { diff --git a/modules/gdscript/gdscript_functions.cpp b/modules/gdscript/gdscript_functions.cpp index 97790e00bb..bbafef68ed 100644 --- a/modules/gdscript/gdscript_functions.cpp +++ b/modules/gdscript/gdscript_functions.cpp @@ -572,37 +572,32 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ } break; case OBJ_WEAKREF: { VALIDATE_ARG_COUNT(1); - if (p_args[0]->get_type() != Variant::OBJECT) { - + if (p_args[0]->get_type() == Variant::OBJECT) { + if (p_args[0]->is_ref()) { + Ref<WeakRef> wref = memnew(WeakRef); + REF r = *p_args[0]; + if (r.is_valid()) { + wref->set_ref(r); + } + r_ret = wref; + } else { + Ref<WeakRef> wref = memnew(WeakRef); + Object *obj = *p_args[0]; + if (obj) { + wref->set_obj(obj); + } + r_ret = wref; + } + } else if (p_args[0]->get_type() == Variant::NIL) { + Ref<WeakRef> wref = memnew(WeakRef); + r_ret = wref; + } else { r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; r_error.argument = 0; r_error.expected = Variant::OBJECT; r_ret = Variant(); return; } - - if (p_args[0]->is_ref()) { - - REF r = *p_args[0]; - if (!r.is_valid()) { - r_ret = Variant(); - return; - } - - Ref<WeakRef> wref = memnew(WeakRef); - wref->set_ref(r); - r_ret = wref; - } else { - Object *obj = *p_args[0]; - if (!obj) { - r_ret = Variant(); - return; - } - Ref<WeakRef> wref = memnew(WeakRef); - wref->set_obj(obj); - r_ret = wref; - } - } break; case FUNC_FUNCREF: { VALIDATE_ARG_COUNT(2); @@ -1131,7 +1126,7 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ Dictionary d; d["@subpath"] = cp; - d["@path"] = p->path; + d["@path"] = p->get_path(); p = base.ptr(); @@ -1279,6 +1274,7 @@ void GDScriptFunctions::call(Function p_func, const Variant **p_args, int p_arg_ if (err != OK) { r_ret = Variant(); + ERR_PRINTS(vformat("Error parsing JSON at line %s: %s", errl, errs)); } } break; diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index e96bf0238a..9d229adb2a 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -89,8 +89,8 @@ bool GDScriptParser::_enter_indent_block(BlockNode *p_block) { if (tokenizer->get_token() != GDScriptTokenizer::TK_NEWLINE) { // be more python-like - int current = tab_level.back()->get(); - tab_level.push_back(current); + IndentLevel current_level = indent_level.back()->get(); + indent_level.push_back(current_level); return true; //_set_error("newline expected after ':'."); //return false; @@ -105,12 +105,19 @@ bool GDScriptParser::_enter_indent_block(BlockNode *p_block) { } else if (tokenizer->get_token(1) != GDScriptTokenizer::TK_NEWLINE) { int indent = tokenizer->get_token_line_indent(); - int current = tab_level.back()->get(); - if (indent <= current) { + int tabs = tokenizer->get_token_line_tab_indent(); + IndentLevel current_level = indent_level.back()->get(); + IndentLevel new_indent(indent, tabs); + if (new_indent.is_mixed(current_level)) { + _set_error("Mixed tabs and spaces in indentation."); return false; } - tab_level.push_back(indent); + if (indent <= current_level.indent) { + return false; + } + + indent_level.push_back(new_indent); tokenizer->advance(); return true; @@ -858,11 +865,23 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s if (current_function) { int arg_idx = current_function->arguments.find(identifier); if (arg_idx != -1) { - if (tokenizer->get_token() == GDScriptTokenizer::TK_OP_ASSIGN) { - // Assignment is not really usage - current_function->arguments_usage.write[arg_idx] = current_function->arguments_usage[arg_idx] - 1; - } else { - current_function->arguments_usage.write[arg_idx] = current_function->arguments_usage[arg_idx] + 1; + switch (tokenizer->get_token()) { + case GDScriptTokenizer::TK_OP_ASSIGN_ADD: + case GDScriptTokenizer::TK_OP_ASSIGN_BIT_AND: + case GDScriptTokenizer::TK_OP_ASSIGN_BIT_OR: + case GDScriptTokenizer::TK_OP_ASSIGN_BIT_XOR: + case GDScriptTokenizer::TK_OP_ASSIGN_DIV: + case GDScriptTokenizer::TK_OP_ASSIGN_MOD: + case GDScriptTokenizer::TK_OP_ASSIGN_MUL: + case GDScriptTokenizer::TK_OP_ASSIGN_SHIFT_LEFT: + case GDScriptTokenizer::TK_OP_ASSIGN_SHIFT_RIGHT: + case GDScriptTokenizer::TK_OP_ASSIGN_SUB: + case GDScriptTokenizer::TK_OP_ASSIGN: { + // Assignment is not really usage + } break; + default: { + current_function->arguments_usage.write[arg_idx] = current_function->arguments_usage[arg_idx] + 1; + } } } } @@ -1207,7 +1226,7 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s if (_get_completable_identifier(COMPLETION_INDEX, identifier)) { if (identifier == StringName()) { - identifier = "@temp"; //so it parses allright + identifier = "@temp"; //so it parses alright } completion_node = op; @@ -1399,9 +1418,6 @@ GDScriptParser::Node *GDScriptParser::_parse_expression(Node *p_parent, bool p_s unary = true; break; case OperatorNode::OP_NEG: - priority = 1; - unary = true; - break; case OperatorNode::OP_POS: priority = 1; unary = true; @@ -2216,7 +2232,7 @@ GDScriptParser::PatternNode *GDScriptParser::_parse_pattern(bool p_static) { } void GDScriptParser::_parse_pattern_block(BlockNode *p_block, Vector<PatternBranchNode *> &p_branches, bool p_static) { - int indent_level = tab_level.back()->get(); + IndentLevel current_level = indent_level.back()->get(); p_block->has_return = true; @@ -2231,13 +2247,11 @@ void GDScriptParser::_parse_pattern_block(BlockNode *p_block, Vector<PatternBran if (error_set) return; - if (indent_level > tab_level.back()->get()) { + if (current_level.indent > indent_level.back()->get().indent) { break; // go back a level } - if (pending_newline != -1) { - pending_newline = -1; - } + pending_newline = -1; PatternBranchNode *branch = alloc_node<PatternBranchNode>(); branch->body = alloc_node<BlockNode>(); @@ -2688,7 +2702,7 @@ void GDScriptParser::_transform_match_statment(MatchNode *p_match_statement) { void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { - int indent_level = tab_level.back()->get(); + IndentLevel current_level = indent_level.back()->get(); #ifdef DEBUG_ENABLED @@ -2701,9 +2715,13 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { bool is_first_line = true; while (true) { - if (!is_first_line && tab_level.back()->prev() && tab_level.back()->prev()->get() == indent_level) { + if (!is_first_line && indent_level.back()->prev() && indent_level.back()->prev()->get().indent == current_level.indent) { + if (indent_level.back()->prev()->get().is_mixed(current_level)) { + _set_error("Mixed tabs and spaces in indentation."); + return; + } // pythonic single-line expression, don't parse future lines - tab_level.pop_back(); + indent_level.pop_back(); p_block->end_line = tokenizer->get_token_line(); return; } @@ -2713,7 +2731,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { if (error_set) return; - if (indent_level > tab_level.back()->get()) { + if (current_level.indent > indent_level.back()->get().indent) { p_block->end_line = tokenizer->get_token_line(); return; //go back a level } @@ -2846,15 +2864,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { assigned = subexpr; } else { - ConstantNode *c = alloc_node<ConstantNode>(); - if (lv->datatype.has_type && lv->datatype.kind == DataType::BUILTIN) { - Variant::CallError err; - c->value = Variant::construct(lv->datatype.builtin_type, NULL, 0, err); - } else { - c->value = Variant(); - } - c->line = var_line; - assigned = c; + assigned = _get_default_value_for_type(lv->datatype, var_line); } lv->assign = assigned; //must be added later, to avoid self-referencing. @@ -2925,14 +2935,14 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { while (tokenizer->get_token() == GDScriptTokenizer::TK_NEWLINE && _parse_newline()) ; - if (tab_level.back()->get() < indent_level) { //not at current indent level + if (indent_level.back()->get().indent < current_level.indent) { //not at current indent level p_block->end_line = tokenizer->get_token_line(); return; } if (tokenizer->get_token() == GDScriptTokenizer::TK_CF_ELIF) { - if (tab_level.back()->get() > indent_level) { + if (indent_level.back()->get().indent > current_level.indent) { _set_error("Invalid indentation."); return; @@ -2980,7 +2990,7 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { } else if (tokenizer->get_token() == GDScriptTokenizer::TK_CF_ELSE) { - if (tab_level.back()->get() > indent_level) { + if (indent_level.back()->get().indent > current_level.indent) { _set_error("Invalid indentation."); return; } @@ -3280,15 +3290,36 @@ void GDScriptParser::_parse_block(BlockNode *p_block, bool p_static) { case GDScriptTokenizer::TK_PR_ASSERT: { tokenizer->advance(); - Node *condition = _parse_and_reduce_expression(p_block, p_static); - if (!condition) { - if (_recover_from_completion()) { - break; - } + + if (tokenizer->get_token() != GDScriptTokenizer::TK_PARENTHESIS_OPEN) { + _set_error("Expected '(' after assert"); + return; + } + + tokenizer->advance(); + + Vector<Node *> args; + const bool result = _parse_arguments(p_block, args, p_static); + if (!result) { return; } + + if (args.empty() || args.size() > 2) { + _set_error("Wrong number of arguments, expected 1 or 2"); + return; + } + AssertNode *an = alloc_node<AssertNode>(); - an->condition = condition; + an->condition = _reduce_expression(args[0], p_static); + + if (args.size() == 2) { + an->message = _reduce_expression(args[1], p_static); + } else { + ConstantNode *message_node = alloc_node<ConstantNode>(); + message_node->value = String(); + an->message = message_node; + } + p_block->statements.push_back(an); if (!_end_statement()) { @@ -3331,32 +3362,45 @@ bool GDScriptParser::_parse_newline() { if (tokenizer->get_token(1) != GDScriptTokenizer::TK_EOF && tokenizer->get_token(1) != GDScriptTokenizer::TK_NEWLINE) { + IndentLevel current_level = indent_level.back()->get(); int indent = tokenizer->get_token_line_indent(); - int current_indent = tab_level.back()->get(); + int tabs = tokenizer->get_token_line_tab_indent(); + IndentLevel new_level(indent, tabs); + + if (new_level.is_mixed(current_level)) { + _set_error("Mixed tabs and spaces in indentation."); + return false; + } - if (indent > current_indent) { + if (indent > current_level.indent) { _set_error("Unexpected indentation."); return false; } - if (indent < current_indent) { + if (indent < current_level.indent) { - while (indent < current_indent) { + while (indent < current_level.indent) { //exit block - if (tab_level.size() == 1) { + if (indent_level.size() == 1) { _set_error("Invalid indentation. Bug?"); return false; } - tab_level.pop_back(); + indent_level.pop_back(); - if (tab_level.back()->get() < indent) { + if (indent_level.back()->get().indent < indent) { _set_error("Unindent does not match any outer indentation level."); return false; } - current_indent = tab_level.back()->get(); + + if (indent_level.back()->get().is_mixed(current_level)) { + _set_error("Mixed tabs and spaces in indentation."); + return false; + } + + current_level = indent_level.back()->get(); } tokenizer->advance(); @@ -3454,7 +3498,7 @@ void GDScriptParser::_parse_extends(ClassNode *p_class) { void GDScriptParser::_parse_class(ClassNode *p_class) { - int indent_level = tab_level.back()->get(); + IndentLevel current_level = indent_level.back()->get(); while (true) { @@ -3462,7 +3506,7 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { if (error_set) return; - if (indent_level > tab_level.back()->get()) { + if (current_level.indent > indent_level.back()->get().indent) { p_class->end_line = tokenizer->get_token_line(); return; //go back a level } @@ -3533,6 +3577,15 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } + if (p_class->classname_used && ProjectSettings::get_singleton()->has_setting("autoload/" + p_class->name)) { + const String autoload_path = ProjectSettings::get_singleton()->get_setting("autoload/" + p_class->name); + if (autoload_path.begins_with("*")) { + // It's a singleton, and not just a regular AutoLoad script. + _set_error("The class \"" + p_class->name + "\" conflicts with the AutoLoad singleton of the same name, and is therefore redundant. Remove the class_name declaration to fix this error."); + } + return; + } + tokenizer->advance(2); if (tokenizer->get_token() == GDScriptTokenizer::TK_COMMA) { @@ -4839,35 +4892,29 @@ void GDScriptParser::_parse_class(ClassNode *p_class) { return; } - Variant::Type initial_type = member.data_type.has_type ? member.data_type.builtin_type : member._export.type; - - if (initial_type != Variant::NIL && initial_type != Variant::OBJECT) { - IdentifierNode *id = alloc_node<IdentifierNode>(); - id->name = member.identifier; + Node *expr; - Node *expr; + if (member.data_type.has_type) { + expr = _get_default_value_for_type(member.data_type); + } else { + DataType exported_type; + exported_type.has_type = true; + exported_type.kind = DataType::BUILTIN; + exported_type.builtin_type = member._export.type; + expr = _get_default_value_for_type(exported_type); + } - // Make sure arrays and dictionaries are not shared - if (initial_type == Variant::ARRAY) { - expr = alloc_node<ArrayNode>(); - } else if (initial_type == Variant::DICTIONARY) { - expr = alloc_node<DictionaryNode>(); - } else { - ConstantNode *cn = alloc_node<ConstantNode>(); - Variant::CallError ce2; - cn->value = Variant::construct(initial_type, NULL, 0, ce2); - expr = cn; - } + IdentifierNode *id = alloc_node<IdentifierNode>(); + id->name = member.identifier; - OperatorNode *op = alloc_node<OperatorNode>(); - op->op = OperatorNode::OP_INIT_ASSIGN; - op->arguments.push_back(id); - op->arguments.push_back(expr); + OperatorNode *op = alloc_node<OperatorNode>(); + op->op = OperatorNode::OP_INIT_ASSIGN; + op->arguments.push_back(id); + op->arguments.push_back(expr); - p_class->initializer->statements.push_back(op); + p_class->initializer->statements.push_back(op); - member.initial_assignment = op; - } + member.initial_assignment = op; } if (autoexport && member.data_type.has_type) { @@ -5727,28 +5774,35 @@ GDScriptParser::DataType GDScriptParser::_resolve_type(const DataType &p_source, } } - // Still look for class constants in parent script + // Still look for class constants in parent scripts if (!found && (base_type.kind == DataType::GDSCRIPT || base_type.kind == DataType::SCRIPT)) { Ref<Script> scr = base_type.script_type; ERR_FAIL_COND_V(scr.is_null(), result); - Map<StringName, Variant> constants; - scr->get_constants(&constants); + while (scr.is_valid()) { + Map<StringName, Variant> constants; + scr->get_constants(&constants); - if (constants.has(id)) { - Ref<GDScript> gds = constants[id]; + if (constants.has(id)) { + Ref<GDScript> gds = constants[id]; - if (gds.is_valid()) { - result.kind = DataType::GDSCRIPT; - result.script_type = gds; - found = true; - } else { - Ref<Script> scr2 = constants[id]; - if (scr2.is_valid()) { - result.kind = DataType::SCRIPT; - result.script_type = scr2; + if (gds.is_valid()) { + result.kind = DataType::GDSCRIPT; + result.script_type = gds; found = true; + } else { + Ref<Script> scr2 = constants[id]; + if (scr2.is_valid()) { + result.kind = DataType::SCRIPT; + result.script_type = scr2; + found = true; + } } } + if (found) { + break; + } else { + scr = scr->get_base_script(); + } } } @@ -6091,12 +6145,18 @@ bool GDScriptParser::_is_type_compatible(const DataType &p_container, const Data break; } + // Some classes are prefixed with `_` internally + if (!ClassDB::class_exists(expr_native)) { + expr_native = "_" + expr_native; + } + switch (p_container.kind) { case DataType::NATIVE: { if (p_container.is_meta_type) { return ClassDB::is_parent_class(expr_native, GDScriptNativeClass::get_class_static()); } else { - return ClassDB::is_parent_class(expr_native, p_container.native_type); + StringName container_native = ClassDB::class_exists(p_container.native_type) ? p_container.native_type : StringName("_" + p_container.native_type); + return ClassDB::is_parent_class(expr_native, container_native); } } break; case DataType::SCRIPT: @@ -6140,6 +6200,31 @@ bool GDScriptParser::_is_type_compatible(const DataType &p_container, const Data return false; } +GDScriptParser::Node *GDScriptParser::_get_default_value_for_type(const DataType &p_type, int p_line) { + Node *result; + + if (p_type.has_type && p_type.kind == DataType::BUILTIN && p_type.builtin_type != Variant::NIL && p_type.builtin_type != Variant::OBJECT) { + if (p_type.builtin_type == Variant::ARRAY) { + result = alloc_node<ArrayNode>(); + } else if (p_type.builtin_type == Variant::DICTIONARY) { + result = alloc_node<DictionaryNode>(); + } else { + ConstantNode *c = alloc_node<ConstantNode>(); + Variant::CallError err; + c->value = Variant::construct(p_type.builtin_type, NULL, 0, err); + result = c; + } + } else { + ConstantNode *c = alloc_node<ConstantNode>(); + c->value = Variant(); + result = c; + } + + result->line = p_line; + + return result; +} + GDScriptParser::DataType GDScriptParser::_reduce_node_type(Node *p_node) { #ifdef DEBUG_ENABLED if (p_node->get_datatype().has_type && p_node->type != Node::TYPE_ARRAY && p_node->type != Node::TYPE_DICTIONARY) { @@ -6655,7 +6740,8 @@ GDScriptParser::DataType GDScriptParser::_reduce_node_type(Node *p_node) { } } - p_node->set_datatype(_resolve_type(node_type, p_node->line)); + node_type = _resolve_type(node_type, p_node->line); + p_node->set_datatype(node_type); return node_type; } @@ -8500,8 +8586,8 @@ void GDScriptParser::clear() { validating = false; for_completion = false; error_set = false; - tab_level.clear(); - tab_level.push_back(0); + indent_level.clear(); + indent_level.push_back(IndentLevel(0, 0)); error_line = 0; error_column = 0; pending_newline = -1; diff --git a/modules/gdscript/gdscript_parser.h b/modules/gdscript/gdscript_parser.h index 72aa819a8c..93557d745d 100644 --- a/modules/gdscript/gdscript_parser.h +++ b/modules/gdscript/gdscript_parser.h @@ -481,7 +481,12 @@ public: struct AssertNode : public Node { Node *condition; - AssertNode() { type = TYPE_ASSERT; } + Node *message; + AssertNode() : + condition(0), + message(0) { + type = TYPE_ASSERT; + } }; struct BreakpointNode : public Node { @@ -547,7 +552,27 @@ private: int pending_newline; - List<int> tab_level; + struct IndentLevel { + int indent; + int tabs; + + bool is_mixed(IndentLevel other) { + return ( + (indent == other.indent && tabs != other.tabs) || + (indent > other.indent && tabs < other.tabs) || + (indent < other.indent && tabs > other.tabs)); + } + + IndentLevel() : + indent(0), + tabs(0) {} + + IndentLevel(int p_indent, int p_tabs) : + indent(p_indent), + tabs(p_tabs) {} + }; + + List<IndentLevel> indent_level; String base_path; String self_path; @@ -610,6 +635,7 @@ private: bool _get_function_signature(DataType &p_base_type, const StringName &p_function, DataType &r_return_type, List<DataType> &r_arg_types, int &r_default_arg_count, bool &r_static, bool &r_vararg) const; bool _get_member_type(const DataType &p_base_type, const StringName &p_member, DataType &r_member_type) const; bool _is_type_compatible(const DataType &p_container, const DataType &p_expression, bool p_allow_implicit_conversion = false) const; + Node *_get_default_value_for_type(const DataType &p_type, int p_line = -1); DataType _reduce_node_type(Node *p_node); DataType _reduce_function_call_type(const OperatorNode *p_call); diff --git a/modules/gdscript/gdscript_tokenizer.cpp b/modules/gdscript/gdscript_tokenizer.cpp index 64b354bdb8..23a86f8d2b 100644 --- a/modules/gdscript/gdscript_tokenizer.cpp +++ b/modules/gdscript/gdscript_tokenizer.cpp @@ -450,11 +450,11 @@ void GDScriptTokenizerText::_make_error(const String &p_error) { tk_rb_pos = (tk_rb_pos + 1) % TK_RB_SIZE; } -void GDScriptTokenizerText::_make_newline(int p_spaces) { +void GDScriptTokenizerText::_make_newline(int p_indentation, int p_tabs) { TokenData &tk = tk_rb[tk_rb_pos]; tk.type = TK_NEWLINE; - tk.constant = p_spaces; + tk.constant = Vector2(p_indentation, p_tabs); tk.line = line; tk.col = column; tk_rb_pos = (tk_rb_pos + 1) % TK_RB_SIZE; @@ -511,33 +511,6 @@ void GDScriptTokenizerText::_advance() { case ' ': INCPOS(1); continue; - case '\n': { - line++; - INCPOS(1); - column = 1; - int i = 0; - while (true) { - if (GETCHAR(i) == ' ') { - if (file_indent_type == INDENT_NONE) file_indent_type = INDENT_SPACES; - if (file_indent_type != INDENT_SPACES) { - _make_error("Spaces used for indentation in tab-indented file!"); - return; - } - } else if (GETCHAR(i) == '\t') { - if (file_indent_type == INDENT_NONE) file_indent_type = INDENT_TABS; - if (file_indent_type != INDENT_TABS) { - _make_error("Tabs used for indentation in space-indented file!"); - return; - } - } else { - break; // not indentation anymore - } - i++; - } - - _make_newline(i); - return; - } case '#': { // line comment skip #ifdef DEBUG_ENABLED String comment; @@ -565,33 +538,34 @@ void GDScriptTokenizerText::_advance() { ignore_warnings = true; } #endif // DEBUG_ENABLED + FALLTHROUGH; + } + case '\n': { + line++; INCPOS(1); + bool used_spaces = false; + int tabs = 0; column = 1; - line++; int i = 0; while (true) { if (GETCHAR(i) == ' ') { - if (file_indent_type == INDENT_NONE) file_indent_type = INDENT_SPACES; - if (file_indent_type != INDENT_SPACES) { - _make_error("Spaces used for indentation in tab-indented file!"); - return; - } + i++; + used_spaces = true; } else if (GETCHAR(i) == '\t') { - if (file_indent_type == INDENT_NONE) file_indent_type = INDENT_TABS; - if (file_indent_type != INDENT_TABS) { - _make_error("Tabs used for indentation in space-indented file!"); + if (used_spaces) { + _make_error("Spaces used before tabs on a line"); return; } + i++; + tabs++; } else { break; // not indentation anymore } - i++; } - _make_newline(i); + _make_newline(i, tabs); return; - - } break; + } case '/': { switch (GETCHAR(1)) { @@ -849,12 +823,8 @@ void GDScriptTokenizerText::_advance() { _make_error("Unterminated String"); return; } - if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { - _make_error("Malformed hex constant in string"); - return; - } - CharType v; + CharType v = 0; if (c >= '0' && c <= '9') { v = c - '0'; } else if (c >= 'a' && c <= 'f') { @@ -864,8 +834,8 @@ void GDScriptTokenizerText::_advance() { v = c - 'A'; v += 10; } else { - ERR_PRINT("BUG"); - v = 0; + _make_error("Malformed hex constant in string"); + return; } res <<= 4; @@ -1112,7 +1082,6 @@ void GDScriptTokenizerText::set_code(const String &p_code) { ignore_warnings = false; #endif // DEBUG_ENABLED last_error = ""; - file_indent_type = INDENT_NONE; for (int i = 0; i < MAX_LOOKAHEAD + 1; i++) _advance(); } @@ -1187,7 +1156,17 @@ int GDScriptTokenizerText::get_token_line_indent(int p_offset) const { int ofs = (TK_RB_SIZE + tk_rb_pos + p_offset - MAX_LOOKAHEAD - 1) % TK_RB_SIZE; ERR_FAIL_COND_V(tk_rb[ofs].type != TK_NEWLINE, 0); - return tk_rb[ofs].constant; + return tk_rb[ofs].constant.operator Vector2().x; +} + +int GDScriptTokenizerText::get_token_line_tab_indent(int p_offset) const { + + ERR_FAIL_COND_V(p_offset <= -MAX_LOOKAHEAD, 0); + ERR_FAIL_COND_V(p_offset >= MAX_LOOKAHEAD, 0); + + int ofs = (TK_RB_SIZE + tk_rb_pos + p_offset - MAX_LOOKAHEAD - 1) % TK_RB_SIZE; + ERR_FAIL_COND_V(tk_rb[ofs].type != TK_NEWLINE, 0); + return tk_rb[ofs].constant.operator Vector2().y; } String GDScriptTokenizerText::get_token_error(int p_offset) const { @@ -1425,7 +1404,7 @@ Vector<uint8_t> GDScriptTokenizerBuffer::parse_code_string(const String &p_code) int len; // Objects cannot be constant, never encode objects Error err = encode_variant(E->get(), NULL, len, false); - ERR_FAIL_COND_V(err != OK, Vector<uint8_t>()); + ERR_FAIL_COND_V_MSG(err != OK, Vector<uint8_t>(), "Error when trying to encode Variant."); int pos = buf.size(); buf.resize(pos + len); encode_variant(E->get(), &buf.write[pos], len, false); diff --git a/modules/gdscript/gdscript_tokenizer.h b/modules/gdscript/gdscript_tokenizer.h index 89d586b912..58749012b7 100644 --- a/modules/gdscript/gdscript_tokenizer.h +++ b/modules/gdscript/gdscript_tokenizer.h @@ -168,6 +168,7 @@ public: virtual int get_token_line(int p_offset = 0) const = 0; virtual int get_token_column(int p_offset = 0) const = 0; virtual int get_token_line_indent(int p_offset = 0) const = 0; + virtual int get_token_line_tab_indent(int p_offset = 0) const = 0; virtual String get_token_error(int p_offset = 0) const = 0; virtual void advance(int p_amount = 1) = 0; #ifdef DEBUG_ENABLED @@ -205,7 +206,7 @@ class GDScriptTokenizerText : public GDScriptTokenizer { }; void _make_token(Token p_type); - void _make_newline(int p_spaces = 0); + void _make_newline(int p_indentation = 0, int p_tabs = 0); void _make_identifier(const StringName &p_identifier); void _make_built_in_func(GDScriptFunctions::Function p_func); void _make_constant(const Variant &p_constant); @@ -222,11 +223,6 @@ class GDScriptTokenizerText : public GDScriptTokenizer { int tk_rb_pos; String last_error; bool error_flag; - enum { - INDENT_NONE, - INDENT_SPACES, - INDENT_TABS, - } file_indent_type; #ifdef DEBUG_ENABLED Vector<Pair<int, String> > warning_skips; @@ -245,6 +241,7 @@ public: virtual int get_token_line(int p_offset = 0) const; virtual int get_token_column(int p_offset = 0) const; virtual int get_token_line_indent(int p_offset = 0) const; + virtual int get_token_line_tab_indent(int p_offset = 0) const; virtual const Variant &get_token_constant(int p_offset = 0) const; virtual String get_token_error(int p_offset = 0) const; virtual void advance(int p_amount = 1); @@ -283,6 +280,7 @@ public: virtual int get_token_line(int p_offset = 0) const; virtual int get_token_column(int p_offset = 0) const; virtual int get_token_line_indent(int p_offset = 0) const; + virtual int get_token_line_tab_indent(int p_offset = 0) const { return 0; } virtual const Variant &get_token_constant(int p_offset = 0) const; virtual String get_token_error(int p_offset = 0) const; virtual void advance(int p_amount = 1); diff --git a/modules/gdscript/language_server/gdscript_extend_parser.cpp b/modules/gdscript/language_server/gdscript_extend_parser.cpp index 45f9ec9c6a..6b5c26ec81 100644 --- a/modules/gdscript/language_server/gdscript_extend_parser.cpp +++ b/modules/gdscript/language_server/gdscript_extend_parser.cpp @@ -105,6 +105,40 @@ void ExtendGDScriptParser::update_symbols() { } } +void ExtendGDScriptParser::update_document_links(const String &p_code) { + document_links.clear(); + + GDScriptTokenizerText tokenizer; + FileAccessRef fs = FileAccess::create(FileAccess::ACCESS_RESOURCES); + tokenizer.set_code(p_code); + while (true) { + if (tokenizer.get_token() == GDScriptTokenizer::TK_EOF) { + break; + } else if (tokenizer.get_token() == GDScriptTokenizer::TK_CONSTANT) { + Variant const_val = tokenizer.get_token_constant(); + if (const_val.get_type() == Variant::STRING) { + String path = const_val; + bool exists = fs->file_exists(path); + if (!exists) { + path = get_path().get_base_dir() + "/" + path; + exists = fs->file_exists(path); + } + if (exists) { + String value = const_val; + lsp::DocumentLink link; + link.target = GDScriptLanguageProtocol::get_singleton()->get_workspace()->get_file_uri(path); + link.range.start.line = LINE_NUMBER_TO_INDEX(tokenizer.get_token_line()); + link.range.end.line = link.range.start.line; + link.range.end.character = LINE_NUMBER_TO_INDEX(tokenizer.get_token_column()); + link.range.start.character = link.range.end.character - value.length(); + document_links.push_back(link); + } + } + } + tokenizer.advance(); + } +} + void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p_class, lsp::DocumentSymbol &r_symbol) { const String uri = get_uri(); @@ -123,7 +157,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p r_symbol.selectionRange.start.line = r_symbol.range.start.line; r_symbol.detail = "class " + r_symbol.name; bool is_root_class = &r_symbol == &class_symbol; - r_symbol.documentation = parse_documentation_as_markdown(is_root_class ? 0 : LINE_NUMBER_TO_INDEX(p_class->line), is_root_class); + r_symbol.documentation = parse_documentation(is_root_class ? 0 : LINE_NUMBER_TO_INDEX(p_class->line), is_root_class); for (int i = 0; i < p_class->variables.size(); ++i) { @@ -150,7 +184,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p symbol.detail += " = " + JSON::print(m.default_value); } - symbol.documentation = parse_documentation_as_markdown(line); + symbol.documentation = parse_documentation(line); symbol.uri = uri; symbol.script_path = path; @@ -170,7 +204,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p symbol.range.end.line = symbol.range.start.line; symbol.range.end.character = lines[line].length(); symbol.selectionRange.start.line = symbol.range.start.line; - symbol.documentation = parse_documentation_as_markdown(line); + symbol.documentation = parse_documentation(line); symbol.uri = uri; symbol.script_path = path; symbol.detail = "signal " + signal.name + "("; @@ -189,6 +223,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p lsp::DocumentSymbol symbol; const GDScriptParser::ClassNode::Constant &c = E->value(); const GDScriptParser::ConstantNode *node = dynamic_cast<const GDScriptParser::ConstantNode *>(c.expression); + ERR_FAIL_COND(!node); symbol.name = E->key(); symbol.kind = lsp::SymbolKind::Constant; symbol.deprecated = false; @@ -198,7 +233,7 @@ void ExtendGDScriptParser::parse_class_symbol(const GDScriptParser::ClassNode *p symbol.range.end.line = symbol.range.start.line; symbol.range.end.character = lines[line].length(); symbol.selectionRange.start.line = symbol.range.start.line; - symbol.documentation = parse_documentation_as_markdown(line); + symbol.documentation = parse_documentation(line); symbol.uri = uri; symbol.script_path = path; @@ -263,10 +298,10 @@ void ExtendGDScriptParser::parse_function_symbol(const GDScriptParser::FunctionN const int line = LINE_NUMBER_TO_INDEX(p_func->line); r_symbol.range.start.line = line; r_symbol.range.start.character = p_func->column; - r_symbol.range.end.line = MAX(p_func->body->end_line - 2, p_func->body->line); + r_symbol.range.end.line = MAX(p_func->body->end_line - 2, r_symbol.range.start.line); r_symbol.range.end.character = lines[r_symbol.range.end.line].length(); r_symbol.selectionRange.start.line = r_symbol.range.start.line; - r_symbol.documentation = parse_documentation_as_markdown(line); + r_symbol.documentation = parse_documentation(line); r_symbol.uri = uri; r_symbol.script_path = path; @@ -324,67 +359,11 @@ void ExtendGDScriptParser::parse_function_symbol(const GDScriptParser::FunctionN if (var->datatype.kind != GDScriptParser::DataType::UNRESOLVED) { symbol.detail += ": " + var->datatype.to_string(); } - symbol.documentation = parse_documentation_as_markdown(line); + symbol.documentation = parse_documentation(line); r_symbol.children.push_back(symbol); } } -String ExtendGDScriptParser::marked_documentation(const String &p_bbcode) { - - String markdown = p_bbcode.strip_edges(); - - Vector<String> lines = markdown.split("\n"); - bool in_code_block = false; - int code_block_indent = -1; - - markdown = ""; - for (int i = 0; i < lines.size(); i++) { - String line = lines[i]; - int block_start = line.find("[codeblock]"); - if (block_start != -1) { - code_block_indent = block_start; - in_code_block = true; - line = "'''gdscript"; - line = "\n"; - } else if (in_code_block) { - line = "\t" + line.substr(code_block_indent, line.length()); - } - - if (in_code_block && line.find("[/codeblock]") != -1) { - line = "'''\n"; - line = "\n"; - in_code_block = false; - } - - if (!in_code_block) { - line = line.strip_edges(); - line = line.replace("[code]", "`"); - line = line.replace("[/code]", "`"); - line = line.replace("[i]", "*"); - line = line.replace("[/i]", "*"); - line = line.replace("[b]", "**"); - line = line.replace("[/b]", "**"); - line = line.replace("[u]", "__"); - line = line.replace("[/u]", "__"); - line = line.replace("[method ", "`"); - line = line.replace("[member ", "`"); - line = line.replace("[signal ", "`"); - line = line.replace("[enum ", "`"); - line = line.replace("[constant ", "`"); - line = line.replace("[", "`"); - line = line.replace("]", "`"); - } - - if (!in_code_block && i < lines.size() - 1) { - line += "\n\n"; - } else if (i < lines.size() - 1) { - line += "\n"; - } - markdown += line; - } - return markdown; -} - String ExtendGDScriptParser::parse_documentation(int p_line, bool p_docs_down) { ERR_FAIL_INDEX_V(p_line, lines.size(), String()); @@ -543,10 +522,6 @@ const lsp::DocumentSymbol *ExtendGDScriptParser::search_symbol_defined_at_line(i return ret; } -String ExtendGDScriptParser::parse_documentation_as_markdown(int p_line, bool p_docs_down) { - return marked_documentation(parse_documentation(p_line, p_docs_down)); -} - const lsp::DocumentSymbol *ExtendGDScriptParser::get_symbol_defined_at_line(int p_line) const { if (p_line <= 0) { return &class_symbol; @@ -573,6 +548,10 @@ const lsp::DocumentSymbol *ExtendGDScriptParser::get_member_symbol(const String return NULL; } +const List<lsp::DocumentLink> &ExtendGDScriptParser::get_document_links() const { + return document_links; +} + const Array &ExtendGDScriptParser::get_member_completions() { if (member_completions.empty()) { @@ -674,6 +653,7 @@ Dictionary ExtendGDScriptParser::dump_class_api(const GDScriptParser::ClassNode const GDScriptParser::ClassNode::Constant &c = E->value(); const GDScriptParser::ConstantNode *node = dynamic_cast<const GDScriptParser::ConstantNode *>(c.expression); + ERR_FAIL_COND_V(!node, class_api); Dictionary api; api["name"] = E->key(); @@ -755,5 +735,6 @@ Error ExtendGDScriptParser::parse(const String &p_code, const String &p_path) { Error err = GDScriptParser::parse(p_code, p_path.get_base_dir(), false, p_path, false, NULL, false); update_diagnostics(); update_symbols(); + update_document_links(p_code); return err; } diff --git a/modules/gdscript/language_server/gdscript_extend_parser.h b/modules/gdscript/language_server/gdscript_extend_parser.h index dd0453d3ff..a6e0ca5534 100644 --- a/modules/gdscript/language_server/gdscript_extend_parser.h +++ b/modules/gdscript/language_server/gdscript_extend_parser.h @@ -56,12 +56,14 @@ class ExtendGDScriptParser : public GDScriptParser { lsp::DocumentSymbol class_symbol; Vector<lsp::Diagnostic> diagnostics; + List<lsp::DocumentLink> document_links; ClassMembers members; HashMap<String, ClassMembers> inner_classes; void update_diagnostics(); void update_symbols(); + void update_document_links(const String &p_code); void parse_class_symbol(const GDScriptParser::ClassNode *p_class, lsp::DocumentSymbol &r_symbol); void parse_function_symbol(const GDScriptParser::FunctionNode *p_func, lsp::DocumentSymbol &r_symbol); @@ -73,11 +75,6 @@ class ExtendGDScriptParser : public GDScriptParser { Array member_completions; - String parse_documentation_as_markdown(int p_line, bool p_docs_down = false); - -public: - static String marked_documentation(const String &p_bbcode); - public: _FORCE_INLINE_ const String &get_path() const { return path; } _FORCE_INLINE_ const Vector<String> &get_lines() const { return lines; } @@ -93,6 +90,7 @@ public: const lsp::DocumentSymbol *get_symbol_defined_at_line(int p_line) const; const lsp::DocumentSymbol *get_member_symbol(const String &p_name, const String &p_subclass = "") const; + const List<lsp::DocumentLink> &get_document_links() const; const Array &get_member_completions(); Dictionary generate_api() const; diff --git a/modules/gdscript/language_server/gdscript_language_protocol.cpp b/modules/gdscript/language_server/gdscript_language_protocol.cpp index afe461b68e..90646f73ba 100644 --- a/modules/gdscript/language_server/gdscript_language_protocol.cpp +++ b/modules/gdscript/language_server/gdscript_language_protocol.cpp @@ -100,9 +100,10 @@ Dictionary GDScriptLanguageProtocol::initialize(const Dictionary &p_params) { String root_uri = p_params["rootUri"]; String root = p_params["rootPath"]; - bool is_same_workspace = root == workspace->root; + bool is_same_workspace; +#ifndef WINDOWS_ENABLED is_same_workspace = root.to_lower() == workspace->root.to_lower(); -#ifdef WINDOWS_ENABLED +#else is_same_workspace = root.replace("\\", "/").to_lower() == workspace->root.to_lower(); #endif @@ -133,6 +134,22 @@ Dictionary GDScriptLanguageProtocol::initialize(const Dictionary &p_params) { } void GDScriptLanguageProtocol::initialized(const Variant &p_params) { + + lsp::GodotCapabilities capabilities; + + DocData *doc = EditorHelp::get_doc_data(); + for (Map<String, DocData::ClassDoc>::Element *E = doc->class_list.front(); E; E = E->next()) { + + lsp::GodotNativeClassInfo gdclass; + gdclass.name = E->get().name; + gdclass.class_doc = &(E->get()); + if (ClassDB::ClassInfo *ptr = ClassDB::classes.getptr(StringName(E->get().name))) { + gdclass.class_info = ptr; + } + capabilities.native_classes.push_back(gdclass); + } + + notify_client("gdscript/capabilities", capabilities.to_json()); } void GDScriptLanguageProtocol::poll() { @@ -142,6 +159,7 @@ void GDScriptLanguageProtocol::poll() { Error GDScriptLanguageProtocol::start(int p_port) { if (server == NULL) { server = dynamic_cast<WebSocketServer *>(ClassDB::instance("WebSocketServer")); + ERR_FAIL_COND_V(!server, FAILED); server->set_buffers(8192, 1024, 8192, 1024); // 8mb should be way more than enough server->connect("data_received", this, "on_data_received"); server->connect("client_connected", this, "on_client_connected"); @@ -151,7 +169,13 @@ Error GDScriptLanguageProtocol::start(int p_port) { } void GDScriptLanguageProtocol::stop() { + const int *ptr = clients.next(NULL); + while (ptr) { + clients.get(*ptr)->close(); + ptr = clients.next(ptr); + } server->stop(); + clients.clear(); } void GDScriptLanguageProtocol::notify_all_clients(const String &p_method, const Variant &p_params) { diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp index 9bea4557ac..8d58b99e02 100644 --- a/modules/gdscript/language_server/gdscript_language_server.cpp +++ b/modules/gdscript/language_server/gdscript_language_server.cpp @@ -56,15 +56,16 @@ void GDScriptLanguageServer::_notification(int p_what) { void GDScriptLanguageServer::thread_main(void *p_userdata) { GDScriptLanguageServer *self = static_cast<GDScriptLanguageServer *>(p_userdata); while (!self->thread_exit) { + // Poll 20 times per second self->protocol.poll(); - OS::get_singleton()->delay_usec(10); + OS::get_singleton()->delay_usec(50000); } } void GDScriptLanguageServer::start() { int port = (int)_EDITOR_GET("network/language_server/remote_port"); if (protocol.start(port) == OK) { - EditorNode::get_log()->add_message("** GDScript Language Server Started **"); + EditorNode::get_log()->add_message("--- GDScript language server started ---", EditorLog::MSG_TYPE_EDITOR); ERR_FAIL_COND(thread != NULL || thread_exit); thread_exit = false; thread = Thread::create(GDScriptLanguageServer::thread_main, this); @@ -78,7 +79,7 @@ void GDScriptLanguageServer::stop() { memdelete(thread); thread = NULL; protocol.stop(); - EditorNode::get_log()->add_message("** GDScript Language Server Stopped **"); + EditorNode::get_log()->add_message("--- GDScript language server stopped ---", EditorLog::MSG_TYPE_EDITOR); } void register_lsp_types() { diff --git a/modules/gdscript/language_server/gdscript_text_document.cpp b/modules/gdscript/language_server/gdscript_text_document.cpp index f211fae526..b83db718b8 100644 --- a/modules/gdscript/language_server/gdscript_text_document.cpp +++ b/modules/gdscript/language_server/gdscript_text_document.cpp @@ -39,6 +39,7 @@ void GDScriptTextDocument::_bind_methods() { ClassDB::bind_method(D_METHOD("didOpen"), &GDScriptTextDocument::didOpen); ClassDB::bind_method(D_METHOD("didChange"), &GDScriptTextDocument::didChange); + ClassDB::bind_method(D_METHOD("nativeSymbol"), &GDScriptTextDocument::nativeSymbol); ClassDB::bind_method(D_METHOD("documentSymbol"), &GDScriptTextDocument::documentSymbol); ClassDB::bind_method(D_METHOD("completion"), &GDScriptTextDocument::completion); ClassDB::bind_method(D_METHOD("resolve"), &GDScriptTextDocument::resolve); @@ -75,6 +76,11 @@ lsp::TextDocumentItem GDScriptTextDocument::load_document_item(const Variant &p_ return doc; } +void GDScriptTextDocument::notify_client_show_symbol(const lsp::DocumentSymbol *symbol) { + ERR_FAIL_NULL(symbol); + GDScriptLanguageProtocol::get_singleton()->notify_client("gdscript/show_native_symbol", symbol->to_json(true)); +} + void GDScriptTextDocument::initialize() { if (GDScriptLanguageProtocol::get_singleton()->is_smart_resolve_enabled()) { @@ -102,6 +108,21 @@ void GDScriptTextDocument::initialize() { } } +Variant GDScriptTextDocument::nativeSymbol(const Dictionary &p_params) { + + Variant ret; + + lsp::NativeSymbolInspectParams params; + params.load(p_params); + + if (const lsp::DocumentSymbol *symbol = GDScriptLanguageProtocol::get_singleton()->get_workspace()->resolve_native_symbol(params)) { + ret = symbol->to_json(true); + notify_client_show_symbol(symbol); + } + + return ret; +} + Array GDScriptTextDocument::documentSymbol(const Dictionary &p_params) { Dictionary params = p_params["textDocument"]; String uri = params["uri"]; @@ -271,8 +292,17 @@ Array GDScriptTextDocument::codeLens(const Dictionary &p_params) { return arr; } -Variant GDScriptTextDocument::documentLink(const Dictionary &p_params) { - Variant ret; +Array GDScriptTextDocument::documentLink(const Dictionary &p_params) { + Array ret; + + lsp::DocumentLinkParams params; + params.load(p_params); + + List<lsp::DocumentLink> links; + GDScriptLanguageProtocol::get_singleton()->get_workspace()->resolve_document_links(params.textDocument.uri, links); + for (const List<lsp::DocumentLink>::Element *E = links.front(); E; E = E->next()) { + ret.push_back(E->get().to_json()); + } return ret; } @@ -326,31 +356,35 @@ Array GDScriptTextDocument::definition(const Dictionary &p_params) { const String &path = GDScriptLanguageProtocol::get_singleton()->get_workspace()->get_file_path(symbol->uri); if (file_checker->file_exists(path)) { arr.push_back(location.to_json()); - } else if (!symbol->native_class.empty() && GDScriptLanguageProtocol::get_singleton()->is_goto_native_symbols_enabled()) { - String id; - switch (symbol->kind) { - case lsp::SymbolKind::Class: - id = "class_name:" + symbol->name; - break; - case lsp::SymbolKind::Constant: - id = "class_constant:" + symbol->native_class + ":" + symbol->name; - break; - case lsp::SymbolKind::Property: - case lsp::SymbolKind::Variable: - id = "class_property:" + symbol->native_class + ":" + symbol->name; - break; - case lsp::SymbolKind::Enum: - id = "class_enum:" + symbol->native_class + ":" + symbol->name; - break; - case lsp::SymbolKind::Method: - case lsp::SymbolKind::Function: - id = "class_method:" + symbol->native_class + ":" + symbol->name; - break; - default: - id = "class_global:" + symbol->native_class + ":" + symbol->name; - break; + } else if (!symbol->native_class.empty()) { + if (GDScriptLanguageProtocol::get_singleton()->is_goto_native_symbols_enabled()) { + String id; + switch (symbol->kind) { + case lsp::SymbolKind::Class: + id = "class_name:" + symbol->name; + break; + case lsp::SymbolKind::Constant: + id = "class_constant:" + symbol->native_class + ":" + symbol->name; + break; + case lsp::SymbolKind::Property: + case lsp::SymbolKind::Variable: + id = "class_property:" + symbol->native_class + ":" + symbol->name; + break; + case lsp::SymbolKind::Enum: + id = "class_enum:" + symbol->native_class + ":" + symbol->name; + break; + case lsp::SymbolKind::Method: + case lsp::SymbolKind::Function: + id = "class_method:" + symbol->native_class + ":" + symbol->name; + break; + default: + id = "class_global:" + symbol->native_class + ":" + symbol->name; + break; + } + call_deferred("show_native_symbol_in_editor", id); + } else { + notify_client_show_symbol(symbol); } - call_deferred("show_native_symbol_in_editor", id); } } else if (GDScriptLanguageProtocol::get_singleton()->is_smart_resolve_enabled()) { @@ -380,8 +414,8 @@ GDScriptTextDocument::~GDScriptTextDocument() { memdelete(file_checker); } -void GDScriptTextDocument::sync_script_content(const String &p_uri, const String &p_content) { - String path = GDScriptLanguageProtocol::get_singleton()->get_workspace()->get_file_path(p_uri); +void GDScriptTextDocument::sync_script_content(const String &p_path, const String &p_content) { + String path = GDScriptLanguageProtocol::get_singleton()->get_workspace()->get_file_path(p_path); GDScriptLanguageProtocol::get_singleton()->get_workspace()->parse_script(path, p_content); } diff --git a/modules/gdscript/language_server/gdscript_text_document.h b/modules/gdscript/language_server/gdscript_text_document.h index d15022d2c4..235e2c3f6e 100644 --- a/modules/gdscript/language_server/gdscript_text_document.h +++ b/modules/gdscript/language_server/gdscript_text_document.h @@ -52,14 +52,16 @@ protected: private: lsp::TextDocumentItem load_document_item(const Variant &p_param); + void notify_client_show_symbol(const lsp::DocumentSymbol *symbol); public: + Variant nativeSymbol(const Dictionary &p_params); Array documentSymbol(const Dictionary &p_params); Array completion(const Dictionary &p_params); Dictionary resolve(const Dictionary &p_params); Array foldingRange(const Dictionary &p_params); Array codeLens(const Dictionary &p_params); - Variant documentLink(const Dictionary &p_params); + Array documentLink(const Dictionary &p_params); Array colorPresentation(const Dictionary &p_params); Variant hover(const Dictionary &p_params); Array definition(const Dictionary &p_params); diff --git a/modules/gdscript/language_server/gdscript_workspace.cpp b/modules/gdscript/language_server/gdscript_workspace.cpp index 1901daacff..c289ff6c07 100644 --- a/modules/gdscript/language_server/gdscript_workspace.cpp +++ b/modules/gdscript/language_server/gdscript_workspace.cpp @@ -198,7 +198,7 @@ Error GDScriptWorkspace::initialize() { if (!class_data.inherits.empty()) { class_symbol.detail += " extends " + class_data.inherits; } - class_symbol.documentation = ExtendGDScriptParser::marked_documentation(class_data.brief_description) + "\n" + ExtendGDScriptParser::marked_documentation(class_data.description); + class_symbol.documentation = class_data.brief_description + "\n" + class_data.description; for (int i = 0; i < class_data.constants.size(); i++) { const DocData::ConstantDoc &const_data = class_data.constants[i]; @@ -211,7 +211,7 @@ Error GDScriptWorkspace::initialize() { symbol.detail += ": " + const_data.enumeration; } symbol.detail += " = " + const_data.value; - symbol.documentation = ExtendGDScriptParser::marked_documentation(const_data.description); + symbol.documentation = const_data.description; class_symbol.children.push_back(symbol); } @@ -232,7 +232,7 @@ Error GDScriptWorkspace::initialize() { } else { symbol.detail += ": " + data.type; } - symbol.documentation = ExtendGDScriptParser::marked_documentation(data.description); + symbol.documentation = data.description; class_symbol.children.push_back(symbol); } @@ -269,8 +269,12 @@ Error GDScriptWorkspace::initialize() { params += params.empty() ? "..." : ", ..."; } - symbol.detail = "func " + class_name + "." + data.name + "(" + params + ") -> " + data.return_type; - symbol.documentation = ExtendGDScriptParser::marked_documentation(data.description); + String return_type = data.return_type; + if (return_type.empty()) { + return_type = "void"; + } + symbol.detail = "func " + class_name + "." + data.name + "(" + params + ") -> " + return_type; + symbol.documentation = data.description; class_symbol.children.push_back(symbol); } @@ -475,6 +479,33 @@ void GDScriptWorkspace::resolve_related_symbols(const lsp::TextDocumentPositionP } } +const lsp::DocumentSymbol *GDScriptWorkspace::resolve_native_symbol(const lsp::NativeSymbolInspectParams &p_params) { + + if (Map<StringName, lsp::DocumentSymbol>::Element *E = native_symbols.find(p_params.native_class)) { + const lsp::DocumentSymbol &symbol = E->get(); + if (p_params.symbol_name.empty() || p_params.symbol_name == symbol.name) { + return &symbol; + } + + for (int i = 0; i < symbol.children.size(); ++i) { + if (symbol.children[i].name == p_params.symbol_name) { + return &(symbol.children[i]); + } + } + } + + return NULL; +} + +void GDScriptWorkspace::resolve_document_links(const String &p_uri, List<lsp::DocumentLink> &r_list) { + if (const ExtendGDScriptParser *parser = get_parse_successed_script(get_file_path(p_uri))) { + const List<lsp::DocumentLink> &links = parser->get_document_links(); + for (const List<lsp::DocumentLink>::Element *E = links.front(); E; E = E->next()) { + r_list.push_back(E->get()); + } + } +} + Dictionary GDScriptWorkspace::generate_script_api(const String &p_path) { Dictionary api; if (const ExtendGDScriptParser *parser = get_parse_successed_script(p_path)) { diff --git a/modules/gdscript/language_server/gdscript_workspace.h b/modules/gdscript/language_server/gdscript_workspace.h index adce169d4b..a416ae1075 100644 --- a/modules/gdscript/language_server/gdscript_workspace.h +++ b/modules/gdscript/language_server/gdscript_workspace.h @@ -53,7 +53,6 @@ protected: ExtendGDScriptParser *get_parse_successed_script(const String &p_path); ExtendGDScriptParser *get_parse_result(const String &p_path); - void strip_flat_symbols(const String &p_branch); void list_script_files(const String &p_root_dir, List<String> &r_files); public: @@ -81,7 +80,8 @@ public: const lsp::DocumentSymbol *resolve_symbol(const lsp::TextDocumentPositionParams &p_doc_pos, const String &p_symbol_name = "", bool p_func_requred = false); void resolve_related_symbols(const lsp::TextDocumentPositionParams &p_doc_pos, List<const lsp::DocumentSymbol *> &r_list); - + const lsp::DocumentSymbol *resolve_native_symbol(const lsp::NativeSymbolInspectParams &p_params); + void resolve_document_links(const String &p_uri, List<lsp::DocumentLink> &r_list); Dictionary generate_script_api(const String &p_path); GDScriptWorkspace(); diff --git a/modules/gdscript/language_server/lsp.hpp b/modules/gdscript/language_server/lsp.hpp index 3e57b6ee7e..a048af88bb 100644 --- a/modules/gdscript/language_server/lsp.hpp +++ b/modules/gdscript/language_server/lsp.hpp @@ -31,12 +31,17 @@ #ifndef GODOT_LSP_H #define GODOT_LSP_H -#include "core/variant.h" +#include "core/class_db.h" +#include "core/list.h" +#include "editor/doc/doc_data.h" namespace lsp { typedef String DocumentUri; +/** Format BBCode documentation from DocData to markdown */ +static String marked_documentation(const String &p_bbcode); + /** * Text documents are identified using a URI. On the protocol level, URIs are passed as strings. */ @@ -199,6 +204,41 @@ struct TextDocumentPositionParams { } }; +struct DocumentLinkParams { + /** + * The document to provide document links for. + */ + TextDocumentIdentifier textDocument; + + _FORCE_INLINE_ void load(const Dictionary &p_params) { + textDocument.load(p_params["textDocument"]); + } +}; + +/** + * A document link is a range in a text document that links to an internal or external resource, like another + * text document or a web site. + */ +struct DocumentLink { + + /** + * The range this link applies to. + */ + Range range; + + /** + * The uri this link points to. If missing a resolve request is sent later. + */ + DocumentUri target; + + Dictionary to_json() const { + Dictionary dict; + dict["range"] = range.to_json(); + dict["target"] = target; + return dict; + } +}; + /** * A textual edit applicable to a text document. */ @@ -247,6 +287,9 @@ struct Command { } }; +// Use namespace instead of enumeration to follow the LSP specifications +// lsp::EnumName::EnumValue is OK but lsp::EnumValue is not + namespace TextDocumentSyncKind { /** * Documents should not be synced at all. @@ -453,7 +496,7 @@ struct TextDocumentSyncOptions { dict["willSave"] = willSave; dict["openClose"] = openClose; dict["change"] = change; - dict["change"] = save.to_json(); + dict["save"] = save.to_json(); return dict; } }; @@ -557,6 +600,7 @@ struct TextDocumentContentChangeEvent { } }; +// Use namespace instead of enumeration to follow the LSP specifications namespace DiagnosticSeverity { /** * Reports an error. @@ -657,6 +701,7 @@ struct Diagnostic { } }; +// Use namespace instead of enumeration to follow the LSP specifications /** * Describes the content type that a client supports in various * result literals like `Hover`, `ParameterInfo` or `CompletionItem`. @@ -721,6 +766,9 @@ struct MarkupContent { } }; +// Use namespace instead of enumeration to follow the LSP specifications +// lsp::EnumName::EnumValue is OK but lsp::EnumValue is not +// And here C++ compilers are unhappy with our enumeration name like Color, File, Reference etc. /** * The kind of a completion entry. */ @@ -752,6 +800,7 @@ static const int Operator = 24; static const int TypeParameter = 25; }; // namespace CompletionItemKind +// Use namespace instead of enumeration to follow the LSP specifications /** * Defines whether the insert text in a completion item should be interpreted as * plain text or a snippet. @@ -944,36 +993,39 @@ struct CompletionList { Vector<CompletionItem> items; }; +// Use namespace instead of enumeration to follow the LSP specifications +// lsp::EnumName::EnumValue is OK but lsp::EnumValue is not +// And here C++ compilers are unhappy with our enumeration name like String, Array, Object etc /** * A symbol kind. */ namespace SymbolKind { -static const int File = 1; -static const int Module = 2; -static const int Namespace = 3; -static const int Package = 4; -static const int Class = 5; -static const int Method = 6; -static const int Property = 7; -static const int Field = 8; -static const int Constructor = 9; -static const int Enum = 10; -static const int Interface = 11; -static const int Function = 12; -static const int Variable = 13; -static const int Constant = 14; -static const int String = 15; -static const int Number = 16; -static const int Boolean = 17; -static const int Array = 18; -static const int Object = 19; -static const int Key = 20; -static const int Null = 21; -static const int EnumMember = 22; -static const int Struct = 23; -static const int Event = 24; -static const int Operator = 25; -static const int TypeParameter = 26; +static const int File = 0; +static const int Module = 1; +static const int Namespace = 2; +static const int Package = 3; +static const int Class = 4; +static const int Method = 5; +static const int Property = 6; +static const int Field = 7; +static const int Constructor = 8; +static const int Enum = 9; +static const int Interface = 10; +static const int Function = 11; +static const int Variable = 12; +static const int Constant = 13; +static const int String = 14; +static const int Number = 15; +static const int Boolean = 16; +static const int Array = 17; +static const int Object = 18; +static const int Key = 19; +static const int Null = 20; +static const int EnumMember = 21; +static const int Struct = 22; +static const int Event = 23; +static const int Operator = 24; +static const int TypeParameter = 25; }; // namespace SymbolKind /** @@ -1099,7 +1151,7 @@ struct DocumentSymbol { */ Vector<DocumentSymbol> children; - _FORCE_INLINE_ Dictionary to_json() const { + Dictionary to_json(bool with_doc = false) const { Dictionary dict; dict["name"] = name; dict["detail"] = detail; @@ -1107,10 +1159,14 @@ struct DocumentSymbol { dict["deprecated"] = deprecated; dict["range"] = range.to_json(); dict["selectionRange"] = selectionRange.to_json(); + if (with_doc) { + dict["documentation"] = documentation; + dict["native_class"] = native_class; + } Array arr; arr.resize(children.size()); for (int i = 0; i < children.size(); i++) { - arr[i] = children[i].to_json(); + arr[i] = children[i].to_json(with_doc); } dict["children"] = arr; return dict; @@ -1142,7 +1198,7 @@ struct DocumentSymbol { markdown.value = "\t" + detail + "\n\n"; } if (documentation.length()) { - markdown.value += documentation + "\n\n"; + markdown.value += marked_documentation(documentation) + "\n\n"; } if (script_path.length()) { markdown.value += "Defined in [" + script_path + "](" + uri + ")"; @@ -1194,6 +1250,17 @@ struct DocumentSymbol { } }; +struct NativeSymbolInspectParams { + + String native_class; + String symbol_name; + + void load(const Dictionary &p_params) { + native_class = p_params["native_class"]; + symbol_name = p_params["symbol_name"]; + } +}; + /** * Enum of known range kinds */ @@ -1254,6 +1321,7 @@ struct FoldingRange { } }; +// Use namespace instead of enumeration to follow the LSP specifications /** * How a completion was triggered */ @@ -1501,6 +1569,94 @@ struct InitializeResult { } }; +struct GodotNativeClassInfo { + + String name; + const DocData::ClassDoc *class_doc = NULL; + const ClassDB::ClassInfo *class_info = NULL; + + Dictionary to_json() { + Dictionary dict; + dict["name"] = name; + dict["inherits"] = class_doc->inherits; + return dict; + } +}; + +/** Features not included in the standart lsp specifications */ +struct GodotCapabilities { + + /** + * Native class list + */ + List<GodotNativeClassInfo> native_classes; + + Dictionary to_json() { + Dictionary dict; + Array classes; + for (List<GodotNativeClassInfo>::Element *E = native_classes.front(); E; E = E->next()) { + classes.push_back(E->get().to_json()); + } + dict["native_classes"] = classes; + return dict; + } +}; + +/** Format BBCode documentation from DocData to markdown */ +static String marked_documentation(const String &p_bbcode) { + + String markdown = p_bbcode.strip_edges(); + + Vector<String> lines = markdown.split("\n"); + bool in_code_block = false; + int code_block_indent = -1; + + markdown = ""; + for (int i = 0; i < lines.size(); i++) { + String line = lines[i]; + int block_start = line.find("[codeblock]"); + if (block_start != -1) { + code_block_indent = block_start; + in_code_block = true; + line = "\n"; + } else if (in_code_block) { + line = "\t" + line.substr(code_block_indent, line.length()); + } + + if (in_code_block && line.find("[/codeblock]") != -1) { + line = "\n"; + in_code_block = false; + } + + if (!in_code_block) { + line = line.strip_edges(); + line = line.replace("[code]", "`"); + line = line.replace("[/code]", "`"); + line = line.replace("[i]", "*"); + line = line.replace("[/i]", "*"); + line = line.replace("[b]", "**"); + line = line.replace("[/b]", "**"); + line = line.replace("[u]", "__"); + line = line.replace("[/u]", "__"); + line = line.replace("[method ", "`"); + line = line.replace("[member ", "`"); + line = line.replace("[signal ", "`"); + line = line.replace("[enum ", "`"); + line = line.replace("[constant ", "`"); + line = line.replace("[", "`"); + line = line.replace("]", "`"); + } + + if (!in_code_block && i < lines.size() - 1) { + line += "\n\n"; + } else if (i < lines.size() - 1) { + line += "\n"; + } + markdown += line; + } + return markdown; +} + } // namespace lsp #endif diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml index 1bd3d72066..b762868f2c 100644 --- a/modules/gridmap/doc_classes/GridMap.xml +++ b/modules/gridmap/doc_classes/GridMap.xml @@ -217,6 +217,14 @@ Deprecated, use [member mesh_library] instead. </member> </members> + <signals> + <signal name="cell_size_changed"> + <argument index="0" name="cell_size" type="Vector3"> + </argument> + <description> + </description> + </signal> + </signals> <constants> <constant name="INVALID_CELL_ITEM" value="-1"> Invalid cell item that can be used in [method set_cell_item] to clear cells (or represent an empty cell in [method get_cell_item]). diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index b36afd4386..47ac0de7f9 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -227,10 +227,10 @@ Ref<MeshLibrary> GridMap::get_mesh_library() const { } void GridMap::set_cell_size(const Vector3 &p_size) { - ERR_FAIL_COND(p_size.x < 0.001 || p_size.y < 0.001 || p_size.z < 0.001); cell_size = p_size; _recreate_octant_data(); + emit_signal("cell_size_changed", cell_size); } Vector3 GridMap::get_cell_size() const { @@ -902,6 +902,8 @@ void GridMap::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask"); BIND_CONSTANT(INVALID_CELL_ITEM); + + ADD_SIGNAL(MethodInfo("cell_size_changed", PropertyInfo(Variant::VECTOR3, "cell_size"))); } void GridMap::set_clip(bool p_enabled, bool p_clip_above, int p_floor, Vector3::Axis p_axis) { diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index 07b4f7f596..1bd570c55f 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -40,11 +40,8 @@ void GridMapEditor::_node_removed(Node *p_node) { - if (p_node == node) { + if (p_node == node) node = NULL; - hide(); - mesh_library_palette->hide(); - } } void GridMapEditor::_configure() { @@ -279,6 +276,7 @@ void GridMapEditor::_update_cursor_transform() { cursor_transform = Transform(); cursor_transform.origin = cursor_origin; cursor_transform.basis.set_orthogonal_index(cursor_rot); + cursor_transform.basis *= node->get_cell_scale(); cursor_transform = node->get_global_transform() * cursor_transform; if (cursor_instance.is_valid()) { @@ -301,7 +299,7 @@ void GridMapEditor::_update_selection_transform() { } Transform xf; - xf.scale(Vector3(1, 1, 1) * (Vector3(1, 1, 1) + (selection.end - selection.begin)) * node->get_cell_size()); + xf.scale((Vector3(1, 1, 1) + (selection.end - selection.begin)) * node->get_cell_size()); xf.origin = selection.begin * node->get_cell_size(); VisualServer::get_singleton()->instance_set_transform(selection_instance, node->get_global_transform() * xf); @@ -353,7 +351,14 @@ void GridMapEditor::_set_selection(bool p_active, const Vector3 &p_begin, const selection.click = p_begin; selection.current = p_end; - _update_selection_transform(); + if (is_visible_in_tree()) { + _update_selection_transform(); + } + + options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_SELECTION_CLEAR), !selection.active); + options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_SELECTION_CUT), !selection.active); + options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_SELECTION_DUPLICATE), !selection.active); + options->get_popup()->set_item_disabled(options->get_popup()->get_item_index(MENU_OPTION_SELECTION_FILL), !selection.active); } bool GridMapEditor::do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click) { @@ -385,8 +390,8 @@ bool GridMapEditor::do_input_action(Camera *p_camera, const Point2 &p_point, boo if (!p.intersects_segment(from, from + normal * settings_pick_distance->get_value(), &inters)) return false; - //make sure the intersection is inside the frustum planes, to avoid - //painting on invisible regions + // Make sure the intersection is inside the frustum planes, to avoid + // Painting on invisible regions. for (int i = 0; i < planes.size(); i++) { Plane fp = local_xform.xform(planes[i]); @@ -397,8 +402,6 @@ bool GridMapEditor::do_input_action(Camera *p_camera, const Point2 &p_point, boo int cell[3]; float cell_size[3] = { node->get_cell_size().x, node->get_cell_size().y, node->get_cell_size().z }; - last_mouseover = Vector3(-1, -1, -1); - for (int i = 0; i < 3; i++) { if (i == edit_axis) @@ -407,19 +410,11 @@ bool GridMapEditor::do_input_action(Camera *p_camera, const Point2 &p_point, boo cell[i] = inters[i] / node->get_cell_size()[i]; if (inters[i] < 0) - cell[i] -= 1; //compensate negative + cell[i] -= 1; // Compensate negative. grid_ofs[i] = cell[i] * cell_size[i]; } - - /*if (cell[i]<0 || cell[i]>=grid_size[i]) { - - cursor_visible=false; - _update_cursor_transform(); - return false; - }*/ } - last_mouseover = Vector3(cell[0], cell[1], cell[2]); VS::get_singleton()->instance_set_transform(grid_instance[edit_axis], node->get_global_transform() * edit_grid_xform); if (cursor_instance.is_valid()) { @@ -601,7 +596,7 @@ void GridMapEditor::_update_paste_indicator() { Basis item_rot; item_rot.set_orthogonal_index(item.orientation); - xf.basis = item_rot * xf.basis; + xf.basis = item_rot * xf.basis * node->get_cell_scale(); VisualServer::get_singleton()->instance_set_transform(item.instance, node->get_global_transform() * xf); } @@ -656,7 +651,7 @@ bool GridMapEditor::forward_spatial_input_event(Camera *p_camera, const Ref<Inpu if (mb->is_pressed()) floor->set_value(floor->get_value() + mb->get_factor()); - return true; //eaten + return true; // Eaten. } else if (mb->get_button_index() == BUTTON_WHEEL_DOWN && (mb->get_command() || mb->get_shift())) { if (mb->is_pressed()) floor->set_value(floor->get_value() - mb->get_factor()); @@ -702,9 +697,7 @@ bool GridMapEditor::forward_spatial_input_event(Camera *p_camera, const Ref<Inpu return do_input_action(p_camera, Point2(mb->get_position().x, mb->get_position().y), true); } else { - if ( - (mb->get_button_index() == BUTTON_RIGHT && input_action == INPUT_ERASE) || - (mb->get_button_index() == BUTTON_LEFT && input_action == INPUT_PAINT)) { + if ((mb->get_button_index() == BUTTON_RIGHT && input_action == INPUT_ERASE) || (mb->get_button_index() == BUTTON_LEFT && input_action == INPUT_PAINT)) { if (set_items.size()) { undo_redo->create_action(TTR("GridMap Paint")); @@ -884,9 +877,15 @@ void GridMapEditor::update_palette() { if (mesh_library.is_null()) { last_mesh_library = NULL; + search_box->set_text(""); + search_box->set_editable(false); + info_message->show(); return; } + search_box->set_editable(true); + info_message->hide(); + Vector<int> ids; ids = mesh_library->get_item_list(); @@ -927,7 +926,7 @@ void GridMapEditor::update_palette() { item++; } - if (selected != -1) { + if (selected != -1 && mesh_library_palette->get_item_count() > 0) { mesh_library_palette->select(selected); } @@ -935,11 +934,11 @@ void GridMapEditor::update_palette() { } void GridMapEditor::edit(GridMap *p_gridmap) { + if (!p_gridmap && node) + node->disconnect("cell_size_changed", this, "_draw_grids"); node = p_gridmap; - VS *vs = VS::get_singleton(); - last_mouseover = Vector3(-1, -1, -1); input_action = INPUT_NONE; selection.active = false; _update_selection_transform(); @@ -964,75 +963,13 @@ void GridMapEditor::edit(GridMap *p_gridmap) { set_process(true); - Vector3 edited_floor = p_gridmap->has_meta("_editor_floor_") ? p_gridmap->get_meta("_editor_floor_") : Variant(); clip_mode = p_gridmap->has_meta("_editor_clip_") ? ClipMode(p_gridmap->get_meta("_editor_clip_").operator int()) : CLIP_DISABLED; - for (int i = 0; i < 3; i++) { - if (vs->mesh_get_surface_count(grid[i]) > 0) - vs->mesh_remove_surface(grid[i], 0); - edit_floor[i] = edited_floor[i]; - } - - { - - //update grids - indicator_mat.instance(); - indicator_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); - indicator_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); - indicator_mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); - indicator_mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); - indicator_mat->set_albedo(Color(0.8, 0.5, 0.1)); - - Vector<Vector3> grid_points[3]; - Vector<Color> grid_colors[3]; - - float cell_size[3] = { p_gridmap->get_cell_size().x, p_gridmap->get_cell_size().y, p_gridmap->get_cell_size().z }; - - for (int i = 0; i < 3; i++) { - - Vector3 axis; - axis[i] = 1; - Vector3 axis_n1; - axis_n1[(i + 1) % 3] = cell_size[(i + 1) % 3]; - Vector3 axis_n2; - axis_n2[(i + 2) % 3] = cell_size[(i + 2) % 3]; - - for (int j = -GRID_CURSOR_SIZE; j <= GRID_CURSOR_SIZE; j++) { - - for (int k = -GRID_CURSOR_SIZE; k <= GRID_CURSOR_SIZE; k++) { - - Vector3 p = axis_n1 * j + axis_n2 * k; - float trans = Math::pow(MAX(0, 1.0 - (Vector2(j, k).length() / GRID_CURSOR_SIZE)), 2); - - Vector3 pj = axis_n1 * (j + 1) + axis_n2 * k; - float transj = Math::pow(MAX(0, 1.0 - (Vector2(j + 1, k).length() / GRID_CURSOR_SIZE)), 2); - - Vector3 pk = axis_n1 * j + axis_n2 * (k + 1); - float transk = Math::pow(MAX(0, 1.0 - (Vector2(j, k + 1).length() / GRID_CURSOR_SIZE)), 2); - - grid_points[i].push_back(p); - grid_points[i].push_back(pk); - grid_colors[i].push_back(Color(1, 1, 1, trans)); - grid_colors[i].push_back(Color(1, 1, 1, transk)); - - grid_points[i].push_back(p); - grid_points[i].push_back(pj); - grid_colors[i].push_back(Color(1, 1, 1, trans)); - grid_colors[i].push_back(Color(1, 1, 1, transj)); - } - } - - Array d; - d.resize(VS::ARRAY_MAX); - d[VS::ARRAY_VERTEX] = grid_points[i]; - d[VS::ARRAY_COLOR] = grid_colors[i]; - VisualServer::get_singleton()->mesh_add_surface_from_arrays(grid[i], VisualServer::PRIMITIVE_LINES, d); - VisualServer::get_singleton()->mesh_surface_set_material(grid[i], 0, indicator_mat->get_rid()); - } - } - + _draw_grids(node->get_cell_size()); update_grid(); _update_clip(); + + node->connect("cell_size_changed", this, "_draw_grids"); } void GridMapEditor::_update_clip() { @@ -1046,9 +983,7 @@ void GridMapEditor::_update_clip() { void GridMapEditor::update_grid() { - grid_xform.origin.x -= 1; //force update in hackish way.. what do i care - - //VS *vs = VS::get_singleton(); + grid_xform.origin.x -= 1; // Force update in hackish way. grid_ofs[edit_axis] = edit_floor[edit_axis] * node->get_cell_size()[edit_axis]; @@ -1064,11 +999,67 @@ void GridMapEditor::update_grid() { updating = false; } +void GridMapEditor::_draw_grids(const Vector3 &cell_size) { + Vector3 edited_floor = node->has_meta("_editor_floor_") ? node->get_meta("_editor_floor_") : Variant(); + + for (int i = 0; i < 3; i++) { + if (VS::get_singleton()->mesh_get_surface_count(grid[i]) > 0) + VS::get_singleton()->mesh_remove_surface(grid[i], 0); + edit_floor[i] = edited_floor[i]; + } + + Vector<Vector3> grid_points[3]; + Vector<Color> grid_colors[3]; + + for (int i = 0; i < 3; i++) { + + Vector3 axis; + axis[i] = 1; + Vector3 axis_n1; + axis_n1[(i + 1) % 3] = cell_size[(i + 1) % 3]; + Vector3 axis_n2; + axis_n2[(i + 2) % 3] = cell_size[(i + 2) % 3]; + + for (int j = -GRID_CURSOR_SIZE; j <= GRID_CURSOR_SIZE; j++) { + + for (int k = -GRID_CURSOR_SIZE; k <= GRID_CURSOR_SIZE; k++) { + + Vector3 p = axis_n1 * j + axis_n2 * k; + float trans = Math::pow(MAX(0, 1.0 - (Vector2(j, k).length() / GRID_CURSOR_SIZE)), 2); + + Vector3 pj = axis_n1 * (j + 1) + axis_n2 * k; + float transj = Math::pow(MAX(0, 1.0 - (Vector2(j + 1, k).length() / GRID_CURSOR_SIZE)), 2); + + Vector3 pk = axis_n1 * j + axis_n2 * (k + 1); + float transk = Math::pow(MAX(0, 1.0 - (Vector2(j, k + 1).length() / GRID_CURSOR_SIZE)), 2); + + grid_points[i].push_back(p); + grid_points[i].push_back(pk); + grid_colors[i].push_back(Color(1, 1, 1, trans)); + grid_colors[i].push_back(Color(1, 1, 1, transk)); + + grid_points[i].push_back(p); + grid_points[i].push_back(pj); + grid_colors[i].push_back(Color(1, 1, 1, trans)); + grid_colors[i].push_back(Color(1, 1, 1, transj)); + } + } + + Array d; + d.resize(VS::ARRAY_MAX); + d[VS::ARRAY_VERTEX] = grid_points[i]; + d[VS::ARRAY_COLOR] = grid_colors[i]; + VisualServer::get_singleton()->mesh_add_surface_from_arrays(grid[i], VisualServer::PRIMITIVE_LINES, d); + VisualServer::get_singleton()->mesh_surface_set_material(grid[i], 0, indicator_mat->get_rid()); + } +} + void GridMapEditor::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { + get_tree()->connect("node_removed", this, "_node_removed"); mesh_library_palette->connect("item_selected", this, "_item_selected_cbk"); for (int i = 0; i < 3; i++) { @@ -1085,6 +1076,7 @@ void GridMapEditor::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { + get_tree()->disconnect("node_removed", this, "_node_removed"); _clear_clipboard_data(); for (int i = 0; i < 3; i++) { @@ -1132,7 +1124,6 @@ void GridMapEditor::_notification(int p_what) { SpatialEditorPlugin *sep = Object::cast_to<SpatialEditorPlugin>(editor->get_editor_plugin_screen()); if (sep) sep->snap_cursor_to_plane(p); - //editor->get_editor_plugin_screen()->call("snap_cursor_to_plane",p); } } break; @@ -1198,8 +1189,10 @@ void GridMapEditor::_bind_methods() { ClassDB::bind_method("_floor_changed", &GridMapEditor::_floor_changed); ClassDB::bind_method("_floor_mouse_exited", &GridMapEditor::_floor_mouse_exited); ClassDB::bind_method("_set_selection", &GridMapEditor::_set_selection); + ClassDB::bind_method("_node_removed", &GridMapEditor::_node_removed); ClassDB::bind_method(D_METHOD("_set_display_mode", "mode"), &GridMapEditor::_set_display_mode); + ClassDB::bind_method("_draw_grids", &GridMapEditor::_draw_grids); } GridMapEditor::GridMapEditor(EditorNode *p_editor) { @@ -1296,6 +1289,7 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { search_box = memnew(LineEdit); search_box->set_h_size_flags(SIZE_EXPAND_FILL); + search_box->set_placeholder(TTR("Filter meshes")); hb->add_child(search_box); search_box->connect("text_changed", this, "_text_changed"); search_box->connect("gui_input", this, "_sbox_input"); @@ -1331,6 +1325,15 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { add_child(mesh_library_palette); mesh_library_palette->set_v_size_flags(SIZE_EXPAND_FILL); + info_message = memnew(Label); + info_message->set_text(TTR("Give a MeshLibrary resource to this GridMap to use its meshes.")); + info_message->set_valign(Label::VALIGN_CENTER); + info_message->set_align(Label::ALIGN_CENTER); + info_message->set_autowrap(true); + info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + info_message->set_anchors_and_margins_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE); + mesh_library_palette->add_child(info_message); + edit_axis = Vector3::AXIS_Y; edit_floor[0] = -1; edit_floor[1] = -1; @@ -1340,13 +1343,12 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { selected_palette = -1; lock_view = false; cursor_rot = 0; - last_mouseover = Vector3(-1, -1, -1); selection_mesh = VisualServer::get_singleton()->mesh_create(); paste_mesh = VisualServer::get_singleton()->mesh_create(); { - //selection mesh create + // Selection mesh create. PoolVector<Vector3> lines; PoolVector<Vector3> triangles; @@ -1424,7 +1426,6 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { inner_mat.instance(); inner_mat->set_albedo(Color(0.7, 0.7, 1.0, 0.2)); - //inner_mat->set_flag(SpatialMaterial::FLAG_ONTOP, true); inner_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); inner_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); @@ -1444,7 +1445,6 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { selection_floor_mat->set_on_top_of_alpha(); selection_floor_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); selection_floor_mat->set_line_width(3.0); - //selection_floor_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); d[VS::ARRAY_VERTEX] = lines; VisualServer::get_singleton()->mesh_add_surface_from_arrays(selection_mesh, VS::PRIMITIVE_LINES, d); @@ -1466,9 +1466,16 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) { } } - selection.active = false; + _set_selection(false); updating = false; accumulated_floor_delta = 0.0; + + indicator_mat.instance(); + indicator_mat->set_flag(SpatialMaterial::FLAG_UNSHADED, true); + indicator_mat->set_feature(SpatialMaterial::FEATURE_TRANSPARENT, true); + indicator_mat->set_flag(SpatialMaterial::FLAG_SRGB_VERTEX_COLOR, true); + indicator_mat->set_flag(SpatialMaterial::FLAG_ALBEDO_FROM_VERTEX_COLOR, true); + indicator_mat->set_albedo(Color(0.8, 0.5, 0.1)); } GridMapEditor::~GridMapEditor() { diff --git a/modules/gridmap/grid_map_editor_plugin.h b/modules/gridmap/grid_map_editor_plugin.h index d174ac1035..42e62f2842 100644 --- a/modules/gridmap/grid_map_editor_plugin.h +++ b/modules/gridmap/grid_map_editor_plugin.h @@ -156,7 +156,6 @@ class GridMapEditor : public VBoxContainer { Transform cursor_transform; Vector3 cursor_origin; - Vector3 last_mouseover; int display_mode; int selected_palette; @@ -197,12 +196,17 @@ class GridMapEditor : public VBoxContainer { RID instance; }; - void update_grid(); + ItemList *mesh_library_palette; + Label *info_message; + + EditorNode *editor; + + void update_grid(); // Change which and where the grid is displayed + void _draw_grids(const Vector3 &cell_size); void _configure(); void _menu_option(int); void update_palette(); void _set_display_mode(int p_mode); - ItemList *mesh_library_palette; void _item_selected_cbk(int idx); void _update_cursor_transform(); void _update_cursor_instance(); @@ -227,7 +231,6 @@ class GridMapEditor : public VBoxContainer { void _delete_selection(); void _fill_selection(); - EditorNode *editor; bool do_input_action(Camera *p_camera, const Point2 &p_point, bool p_click); friend class GridMapEditorPlugin; diff --git a/modules/jsonrpc/jsonrpc.cpp b/modules/jsonrpc/jsonrpc.cpp index e1bba60f2f..ea90cce83d 100644 --- a/modules/jsonrpc/jsonrpc.cpp +++ b/modules/jsonrpc/jsonrpc.cpp @@ -47,11 +47,11 @@ void JSONRPC::_bind_methods() { ClassDB::bind_method(D_METHOD("make_notification", "method", "params"), &JSONRPC::make_notification); ClassDB::bind_method(D_METHOD("make_response_error", "code", "message", "id"), &JSONRPC::make_response_error, DEFVAL(Variant())); - BIND_ENUM_CONSTANT(PARSE_ERROR) - BIND_ENUM_CONSTANT(INVALID_REQUEST) - BIND_ENUM_CONSTANT(METHOD_NOT_FOUND) - BIND_ENUM_CONSTANT(INVALID_PARAMS) - BIND_ENUM_CONSTANT(INTERNAL_ERROR) + BIND_ENUM_CONSTANT(PARSE_ERROR); + BIND_ENUM_CONSTANT(INVALID_REQUEST); + BIND_ENUM_CONSTANT(METHOD_NOT_FOUND); + BIND_ENUM_CONSTANT(INVALID_PARAMS); + BIND_ENUM_CONSTANT(INTERNAL_ERROR); } Dictionary JSONRPC::make_response_error(int p_code, const String &p_message, const Variant &p_id) const { diff --git a/modules/mbedtls/crypto_mbedtls.cpp b/modules/mbedtls/crypto_mbedtls.cpp index 1e02084ae2..204f4e8905 100644 --- a/modules/mbedtls/crypto_mbedtls.cpp +++ b/modules/mbedtls/crypto_mbedtls.cpp @@ -55,7 +55,7 @@ Error CryptoKeyMbedTLS::load(String p_path) { PoolByteArray out; FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot open CryptoKeyMbedTLS file '" + p_path + "'."); int flen = f->get_len(); out.resize(flen + 1); @@ -69,14 +69,14 @@ Error CryptoKeyMbedTLS::load(String p_path) { int ret = mbedtls_pk_parse_key(&pkey, out.read().ptr(), out.size(), NULL, 0); // We MUST zeroize the memory for safety! mbedtls_platform_zeroize(out.write().ptr(), out.size()); - ERR_FAIL_COND_V_MSG(ret, FAILED, "Error parsing private key: " + itos(ret)); + ERR_FAIL_COND_V_MSG(ret, FAILED, "Error parsing private key '" + itos(ret) + "'."); return OK; } Error CryptoKeyMbedTLS::save(String p_path) { FileAccess *f = FileAccess::open(p_path, FileAccess::WRITE); - ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot save CryptoKeyMbedTLS file '" + p_path + "'."); unsigned char w[16000]; memset(w, 0, sizeof(w)); @@ -85,7 +85,7 @@ Error CryptoKeyMbedTLS::save(String p_path) { if (ret != 0) { memdelete(f); memset(w, 0, sizeof(w)); // Zeroize anything we might have written. - ERR_FAIL_V_MSG(FAILED, "Error writing key: " + itos(ret)); + ERR_FAIL_V_MSG(FAILED, "Error writing key '" + itos(ret) + "'."); } size_t len = strlen((char *)w); @@ -104,7 +104,7 @@ Error X509CertificateMbedTLS::load(String p_path) { PoolByteArray out; FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot open X509CertificateMbedTLS file '" + p_path + "'."); int flen = f->get_len(); out.resize(flen + 1); @@ -131,7 +131,7 @@ Error X509CertificateMbedTLS::load_from_memory(const uint8_t *p_buffer, int p_le Error X509CertificateMbedTLS::save(String p_path) { FileAccess *f = FileAccess::open(p_path, FileAccess::WRITE); - ERR_FAIL_COND_V(!f, ERR_INVALID_PARAMETER); + ERR_FAIL_COND_V_MSG(!f, ERR_INVALID_PARAMETER, "Cannot save X509CertificateMbedTLS file '" + p_path + "'."); mbedtls_x509_crt *crt = &cert; while (crt) { @@ -140,7 +140,7 @@ Error X509CertificateMbedTLS::save(String p_path) { int ret = mbedtls_pem_write_buffer(PEM_BEGIN_CRT, PEM_END_CRT, cert.raw.p, cert.raw.len, w, sizeof(w), &wrote); if (ret != 0 || wrote == 0) { memdelete(f); - ERR_FAIL_V_MSG(FAILED, "Error writing certificate: " + itos(ret)); + ERR_FAIL_V_MSG(FAILED, "Error writing certificate '" + itos(ret) + "'."); } f->store_buffer(w, wrote - 1); // don't write the string terminator @@ -237,6 +237,7 @@ Ref<CryptoKey> CryptoMbedTLS::generate_rsa(int p_bytes) { Ref<X509Certificate> CryptoMbedTLS::generate_self_signed_certificate(Ref<CryptoKey> p_key, String p_issuer_name, String p_not_before, String p_not_after) { Ref<CryptoKeyMbedTLS> key = static_cast<Ref<CryptoKeyMbedTLS> >(p_key); + ERR_FAIL_COND_V_MSG(key.is_null(), NULL, "Invalid private key argument."); mbedtls_x509write_cert crt; mbedtls_x509write_crt_init(&crt); diff --git a/modules/mono/build_scripts/mono_configure.py b/modules/mono/build_scripts/mono_configure.py index f751719531..4c1ebd8d74 100644 --- a/modules/mono/build_scripts/mono_configure.py +++ b/modules/mono/build_scripts/mono_configure.py @@ -18,7 +18,7 @@ android_arch_dirs = { def get_android_out_dir(env): - return os.path.join(Dir('#platform/android/java/libs').abspath, + return os.path.join(Dir('#platform/android/java/lib/libs').abspath, 'release' if env['target'] == 'release' else 'debug', android_arch_dirs[env['android_arch']]) diff --git a/modules/mono/class_db_api_json.cpp b/modules/mono/class_db_api_json.cpp index 7580911a0a..bbc779601e 100644 --- a/modules/mono/class_db_api_json.cpp +++ b/modules/mono/class_db_api_json.cpp @@ -236,7 +236,7 @@ void class_db_api_to_json(const String &p_output_file, ClassDB::APIType p_api) { } FileAccessRef f = FileAccess::open(p_output_file, FileAccess::WRITE); - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "Cannot open file '" + p_output_file + "'."); f->store_string(JSON::print(classes_dict, /*indent: */ "\t")); f->close(); diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index e14e919f92..83be10dee3 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -1195,7 +1195,7 @@ void CSharpLanguage::release_script_gchandle(MonoObject *p_expected_obj, Ref<Mon CSharpLanguage::CSharpLanguage() { - ERR_FAIL_COND(singleton); + ERR_FAIL_COND_MSG(singleton, "C# singleton already exist."); singleton = this; finalizing = false; @@ -3242,7 +3242,7 @@ RES ResourceFormatLoaderCSharpScript::load(const String &p_path, const String &p #if defined(DEBUG_ENABLED) || defined(TOOLS_ENABLED) Error err = script->load_source_code(p_path); - ERR_FAIL_COND_V(err != OK, RES()); + ERR_FAIL_COND_V_MSG(err != OK, RES(), "Cannot load C# script file '" + p_path + "'."); #endif script->set_path(p_original_path); @@ -3325,7 +3325,7 @@ Error ResourceFormatSaverCSharpScript::save(const String &p_path, const RES &p_r Error err; FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); - ERR_FAIL_COND_V(err, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot save C# script file '" + p_path + "'."); file->store_string(source); diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs b/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs index 4c1e47ecad..eb2c2dd77c 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Build/MsBuildFinder.cs @@ -34,7 +34,7 @@ namespace GodotTools.Build if (_msbuildToolsPath.Empty()) { - throw new FileNotFoundException($"Cannot find executable for '{BuildManager.PropNameMsbuildVs}'. Tried with path: {_msbuildToolsPath}"); + throw new FileNotFoundException($"Cannot find executable for '{BuildManager.PropNameMsbuildVs}'."); } } @@ -142,7 +142,7 @@ namespace GodotTools.Build int exitCode = Godot.OS.Execute(vsWherePath, vsWhereArgs, blocking: true, output: (Godot.Collections.Array) outputArray); - if (exitCode == 0) + if (exitCode != 0) return string.Empty; if (outputArray.Count == 0) diff --git a/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs b/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs index 417032da54..ab37d89955 100644 --- a/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/BuildManager.cs @@ -160,9 +160,16 @@ namespace GodotTools if (!File.Exists(GodotSharpDirs.ProjectSlnPath)) return true; // No solution to build - // Make sure to update the API assemblies if they happen to be missing. Just in - // case the user decided to delete them at some point after they were loaded. - Internal.UpdateApiAssembliesFromPrebuilt(); + // Make sure the API assemblies are up to date before building the project. + // We may not have had the chance to update the release API assemblies, and the debug ones + // may have been deleted by the user at some point after they were loaded by the Godot editor. + string apiAssembliesUpdateError = Internal.UpdateApiAssembliesFromPrebuilt(config == "Release" ? "Release" : "Debug"); + + if (!string.IsNullOrEmpty(apiAssembliesUpdateError)) + { + ShowBuildErrorDialog("Failed to update the Godot API assemblies"); + return false; + } var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings(); var buildTool = (BuildTool) editorSettings.GetSetting("mono/builds/build_tool"); diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs index 7da7cff933..12edd651df 100644 --- a/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs +++ b/modules/mono/editor/GodotTools/GodotTools/GodotSharpEditor.cs @@ -34,7 +34,7 @@ namespace GodotTools private bool CreateProjectSolution() { - using (var pr = new EditorProgress("create_csharp_solution", "Generating solution...".TTR(), 2)) + using (var pr = new EditorProgress("create_csharp_solution", "Generating solution...".TTR(), 3)) { pr.Step("Generating C# project...".TTR()); @@ -73,9 +73,23 @@ namespace GodotTools return false; } - // Make sure to update the API assemblies if they happen to be missing. Just in - // case the user decided to delete them at some point after they were loaded. - Internal.UpdateApiAssembliesFromPrebuilt(); + pr.Step("Updating Godot API assemblies...".TTR()); + + string debugApiAssembliesError = Internal.UpdateApiAssembliesFromPrebuilt("Debug"); + + if (!string.IsNullOrEmpty(debugApiAssembliesError)) + { + ShowErrorDialog("Failed to update the Godot API assemblies: " + debugApiAssembliesError); + return false; + } + + string releaseApiAssembliesError = Internal.UpdateApiAssembliesFromPrebuilt("Release"); + + if (!string.IsNullOrEmpty(releaseApiAssembliesError)) + { + ShowErrorDialog("Failed to update the Godot API assemblies: " + releaseApiAssembliesError); + return false; + } pr.Step("Done".TTR()); diff --git a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs index 9e24138143..01aa0d0ab1 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Ides/GodotIdeManager.cs @@ -40,8 +40,7 @@ namespace GodotTools.Ides protected ILogger Logger { - get => logger ?? (logger = new ConsoleLogger()); - set => logger = value; + get => logger ?? (logger = new GodotLogger()); } private void StartServer() diff --git a/modules/mono/editor/GodotTools/GodotTools/Internals/Internal.cs b/modules/mono/editor/GodotTools/GodotTools/Internals/Internal.cs index 7783576910..836c9c11e4 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Internals/Internal.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Internals/Internal.cs @@ -10,8 +10,8 @@ namespace GodotTools.Internals public const string CSharpLanguageType = "CSharpScript"; public const string CSharpLanguageExtension = "cs"; - public static string UpdateApiAssembliesFromPrebuilt() => - internal_UpdateApiAssembliesFromPrebuilt(); + public static string UpdateApiAssembliesFromPrebuilt(string config) => + internal_UpdateApiAssembliesFromPrebuilt(config); public static string FullTemplatesDir => internal_FullTemplatesDir(); @@ -55,7 +55,7 @@ namespace GodotTools.Internals // Internal Calls [MethodImpl(MethodImplOptions.InternalCall)] - private static extern string internal_UpdateApiAssembliesFromPrebuilt(); + private static extern string internal_UpdateApiAssembliesFromPrebuilt(string config); [MethodImpl(MethodImplOptions.InternalCall)] private static extern string internal_FullTemplatesDir(); diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp index 1888bb3cb9..28cab2ab61 100644 --- a/modules/mono/editor/bindings_generator.cpp +++ b/modules/mono/editor/bindings_generator.cpp @@ -30,7 +30,7 @@ #include "bindings_generator.h" -#ifdef DEBUG_METHODS_ENABLED +#if defined(DEBUG_METHODS_ENABLED) && defined(TOOLS_ENABLED) #include "core/engine.h" #include "core/global_constants.h" @@ -863,12 +863,14 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) { Error BindingsGenerator::generate_cs_core_project(const String &p_proj_dir, Vector<String> &r_compile_items) { + ERR_FAIL_COND_V(!initialized, ERR_UNCONFIGURED); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); if (!DirAccess::exists(p_proj_dir)) { Error err = da->make_dir_recursive(p_proj_dir); - ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(err != OK, ERR_CANT_CREATE, "Cannot create directory '" + p_proj_dir + "'."); } da->change_dir(p_proj_dir); @@ -984,6 +986,8 @@ Error BindingsGenerator::generate_cs_core_project(const String &p_proj_dir, Vect Error BindingsGenerator::generate_cs_editor_project(const String &p_proj_dir, Vector<String> &r_compile_items) { + ERR_FAIL_COND_V(!initialized, ERR_UNCONFIGURED); + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); ERR_FAIL_COND_V(!da, ERR_CANT_CREATE); @@ -1064,6 +1068,8 @@ Error BindingsGenerator::generate_cs_editor_project(const String &p_proj_dir, Ve Error BindingsGenerator::generate_cs_api(const String &p_output_dir) { + ERR_FAIL_COND_V(!initialized, ERR_UNCONFIGURED); + String output_dir = path::abspath(path::realpath(p_output_dir)); DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); @@ -1703,6 +1709,8 @@ Error BindingsGenerator::_generate_cs_method(const BindingsGenerator::TypeInterf Error BindingsGenerator::generate_glue(const String &p_output_dir) { + ERR_FAIL_COND_V(!initialized, ERR_UNCONFIGURED); + bool dir_exists = DirAccess::exists(p_output_dir); ERR_FAIL_COND_V_MSG(!dir_exists, ERR_FILE_BAD_PATH, "The output directory does not exist."); @@ -1785,6 +1793,9 @@ Error BindingsGenerator::generate_glue(const String &p_output_dir) { output.append("uint32_t get_bindings_version() { return "); output.append(String::num_uint64(BINDINGS_GENERATOR_VERSION) + "; }\n"); + output.append("uint32_t get_cs_glue_version() { return "); + output.append(String::num_uint64(CS_GLUE_VERSION) + "; }\n"); + output.append("\nvoid register_generated_icalls() " OPEN_BLOCK); output.append("\tgodot_register_glue_header_icalls();\n"); @@ -2148,7 +2159,7 @@ StringName BindingsGenerator::_get_float_type_name_from_meta(GodotTypeInfo::Meta } } -void BindingsGenerator::_populate_object_type_interfaces() { +bool BindingsGenerator::_populate_object_type_interfaces() { obj_types.clear(); @@ -2226,7 +2237,7 @@ void BindingsGenerator::_populate_object_type_interfaces() { bool valid = false; iprop.index = ClassDB::get_property_index(type_cname, iprop.cname, &valid); - ERR_FAIL_COND(!valid); + ERR_FAIL_COND_V(!valid, false); iprop.proxy_name = escape_csharp_keyword(snake_to_pascal_case(iprop.cname)); @@ -2290,7 +2301,7 @@ void BindingsGenerator::_populate_object_type_interfaces() { imethod.is_vararg = m && m->is_vararg(); if (!m && !imethod.is_virtual) { - ERR_FAIL_COND_MSG(!virtual_method_list.find(method_info), + ERR_FAIL_COND_V_MSG(!virtual_method_list.find(method_info), false, "Missing MethodBind for non-virtual method: '" + itype.name + "." + imethod.name + "'."); // A virtual method without the virtual flag. This is a special case. @@ -2307,9 +2318,9 @@ void BindingsGenerator::_populate_object_type_interfaces() { // which could actually will return something different. // Let's put this to notify us if that ever happens. if (itype.cname != name_cache.type_Object || imethod.name != "free") { - ERR_PRINTS("Notification: New unexpected virtual non-overridable method found." - " We only expected Object.free, but found '" + - itype.name + "." + imethod.name + "'."); + WARN_PRINTS("Notification: New unexpected virtual non-overridable method found." + " We only expected Object.free, but found '" + + itype.name + "." + imethod.name + "'."); } } else if (return_info.type == Variant::INT && return_info.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { imethod.return_type.cname = return_info.class_name; @@ -2321,7 +2332,7 @@ void BindingsGenerator::_populate_object_type_interfaces() { ERR_PRINTS("Return type is reference but hint is not '" _STR(PROPERTY_HINT_RESOURCE_TYPE) "'." " Are you returning a reference type by pointer? Method: '" + itype.name + "." + imethod.name + "'."); /* clang-format on */ - ERR_FAIL(); + ERR_FAIL_V(false); } } else if (return_info.hint == PROPERTY_HINT_RESOURCE_TYPE) { imethod.return_type.cname = return_info.hint_string; @@ -2342,8 +2353,10 @@ void BindingsGenerator::_populate_object_type_interfaces() { for (int i = 0; i < argc; i++) { PropertyInfo arginfo = method_info.arguments[i]; + String orig_arg_name = arginfo.name; + ArgumentInterface iarg; - iarg.name = arginfo.name; + iarg.name = orig_arg_name; if (arginfo.type == Variant::INT && arginfo.usage & PROPERTY_USAGE_CLASS_IS_ENUM) { iarg.type.cname = arginfo.class_name; @@ -2367,7 +2380,9 @@ void BindingsGenerator::_populate_object_type_interfaces() { iarg.name = escape_csharp_keyword(snake_to_camel_case(iarg.name)); if (m && m->has_default_argument(i)) { - _default_argument_from_variant(m->get_default_argument(i), iarg); + bool defval_ok = _arg_default_value_from_variant(m->get_default_argument(i), iarg); + ERR_FAIL_COND_V_MSG(!defval_ok, false, + "Cannot determine default value for argument '" + orig_arg_name + "' of method '" + itype.name + "." + imethod.name + "'."); } imethod.add_argument(iarg); @@ -2447,7 +2462,7 @@ void BindingsGenerator::_populate_object_type_interfaces() { const StringName &constant_cname = E->get(); String constant_name = constant_cname.operator String(); int *value = class_info->constant_map.getptr(constant_cname); - ERR_FAIL_NULL(value); + ERR_FAIL_NULL_V(value, false); constants.erase(constant_name); ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value); @@ -2483,7 +2498,7 @@ void BindingsGenerator::_populate_object_type_interfaces() { for (const List<String>::Element *E = constants.front(); E; E = E->next()) { const String &constant_name = E->get(); int *value = class_info->constant_map.getptr(StringName(E->get())); - ERR_FAIL_NULL(value); + ERR_FAIL_NULL_V(value, false); ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value); @@ -2504,9 +2519,11 @@ void BindingsGenerator::_populate_object_type_interfaces() { class_list.pop_front(); } + + return true; } -void BindingsGenerator::_default_argument_from_variant(const Variant &p_val, ArgumentInterface &r_iarg) { +bool BindingsGenerator::_arg_default_value_from_variant(const Variant &p_val, ArgumentInterface &r_iarg) { r_iarg.default_argument = p_val; @@ -2552,16 +2569,24 @@ void BindingsGenerator::_default_argument_from_variant(const Variant &p_val, Arg r_iarg.def_param_mode = ArgumentInterface::NULLABLE_VAL; break; case Variant::OBJECT: - if (p_val.is_zero()) { - r_iarg.default_argument = "null"; - break; - } - FALLTHROUGH; + ERR_FAIL_COND_V_MSG(!p_val.is_zero(), false, + "Parameter of type '" + String(r_iarg.type.cname) + "' can only have null/zero as the default value."); + + r_iarg.default_argument = "null"; + break; case Variant::DICTIONARY: - case Variant::_RID: r_iarg.default_argument = "new %s()"; r_iarg.def_param_mode = ArgumentInterface::NULLABLE_REF; break; + case Variant::_RID: + ERR_FAIL_COND_V_MSG(r_iarg.type.cname != name_cache.type_RID, false, + "Parameter of type '" + String(r_iarg.type.cname) + "' cannot have a default value of type '" + String(name_cache.type_RID) + "'."); + + ERR_FAIL_COND_V_MSG(!p_val.is_zero(), false, + "Parameter of type '" + String(r_iarg.type.cname) + "' can only have null/zero as the default value."); + + r_iarg.default_argument = "null"; + break; case Variant::ARRAY: case Variant::POOL_BYTE_ARRAY: case Variant::POOL_INT_ARRAY: @@ -2585,6 +2610,8 @@ void BindingsGenerator::_default_argument_from_variant(const Variant &p_val, Arg if (r_iarg.def_param_mode == ArgumentInterface::CONSTANT && r_iarg.type.cname == name_cache.type_Variant && r_iarg.default_argument != "null") r_iarg.def_param_mode = ArgumentInterface::NULLABLE_REF; + + return true; } void BindingsGenerator::_populate_builtin_type_interfaces() { @@ -2970,13 +2997,17 @@ void BindingsGenerator::_log(const char *p_format, ...) { void BindingsGenerator::_initialize() { + initialized = false; + EditorHelp::generate_doc(); enum_types.clear(); _initialize_blacklisted_methods(); - _populate_object_type_interfaces(); + bool obj_type_ok = _populate_object_type_interfaces(); + ERR_FAIL_COND_MSG(!obj_type_ok, "Failed to generate object type interfaces"); + _populate_builtin_type_interfaces(); _populate_global_constants(); @@ -2988,6 +3019,8 @@ void BindingsGenerator::_initialize() { for (OrderedHashMap<StringName, TypeInterface>::Element E = obj_types.front(); E; E = E.next()) _generate_method_icalls(E.get()); + + initialized = true; } void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) { @@ -3048,6 +3081,11 @@ void BindingsGenerator::handle_cmdline_args(const List<String> &p_cmdline_args) BindingsGenerator bindings_generator; bindings_generator.set_log_print_enabled(true); + if (!bindings_generator.initialized) { + ERR_PRINTS("Failed to initialize the bindings generator"); + ::exit(0); + } + if (glue_dir_path.length()) { if (bindings_generator.generate_glue(glue_dir_path) != OK) ERR_PRINTS(generate_all_glue_option + ": Failed to generate the C++ glue."); diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h index 6f0c297575..8f3676940b 100644 --- a/modules/mono/editor/bindings_generator.h +++ b/modules/mono/editor/bindings_generator.h @@ -36,7 +36,7 @@ #include "editor/doc/doc_data.h" #include "editor/editor_help.h" -#ifdef DEBUG_METHODS_ENABLED +#if defined(DEBUG_METHODS_ENABLED) && defined(TOOLS_ENABLED) #include "core/ustring.h" @@ -472,6 +472,7 @@ class BindingsGenerator { }; bool log_print_enabled; + bool initialized; OrderedHashMap<StringName, TypeInterface> obj_types; @@ -502,6 +503,7 @@ class BindingsGenerator { StringName type_VarArg; StringName type_Object; StringName type_Reference; + StringName type_RID; StringName type_String; StringName type_at_GlobalScope; StringName enum_Error; @@ -525,6 +527,7 @@ class BindingsGenerator { type_VarArg = StaticCString::create("VarArg"); type_Object = StaticCString::create("Object"); type_Reference = StaticCString::create("Reference"); + type_RID = StaticCString::create("RID"); type_String = StaticCString::create("String"); type_at_GlobalScope = StaticCString::create("@GlobalScope"); enum_Error = StaticCString::create("Error"); @@ -590,9 +593,9 @@ class BindingsGenerator { StringName _get_int_type_name_from_meta(GodotTypeInfo::Metadata p_meta); StringName _get_float_type_name_from_meta(GodotTypeInfo::Metadata p_meta); - void _default_argument_from_variant(const Variant &p_val, ArgumentInterface &r_iarg); + bool _arg_default_value_from_variant(const Variant &p_val, ArgumentInterface &r_iarg); - void _populate_object_type_interfaces(); + bool _populate_object_type_interfaces(); void _populate_builtin_type_interfaces(); void _populate_global_constants(); @@ -621,12 +624,15 @@ public: _FORCE_INLINE_ bool is_log_print_enabled() { return log_print_enabled; } _FORCE_INLINE_ void set_log_print_enabled(bool p_enabled) { log_print_enabled = p_enabled; } + _FORCE_INLINE_ bool is_initialized() { return initialized; } + static uint32_t get_version(); static void handle_cmdline_args(const List<String> &p_cmdline_args); BindingsGenerator() : - log_print_enabled(true) { + log_print_enabled(true), + initialized(false) { _initialize(); } }; diff --git a/modules/mono/editor/csharp_project.cpp b/modules/mono/editor/csharp_project.cpp index 0e6c58c9d7..748447005f 100644 --- a/modules/mono/editor/csharp_project.cpp +++ b/modules/mono/editor/csharp_project.cpp @@ -75,7 +75,7 @@ bool generate_api_solution(const String &p_solution_dir, const String &p_core_pr p_editor_proj_dir, p_editor_compile_items, GDMono::get_singleton()->get_tools_project_editor_assembly()); } else { - MonoDomain *temp_domain = GDMonoUtils::create_domain("GodotEngine.ApiSolutionGenerationDomain"); + MonoDomain *temp_domain = GDMonoUtils::create_domain("GodotEngine.Domain.ApiSolutionGeneration"); CRASH_COND(temp_domain == NULL); _GDMONO_SCOPE_EXIT_DOMAIN_UNLOAD_(temp_domain); diff --git a/modules/mono/editor/editor_internal_calls.cpp b/modules/mono/editor/editor_internal_calls.cpp index 5a84d9e3b8..1564d73c2a 100644 --- a/modules/mono/editor/editor_internal_calls.cpp +++ b/modules/mono/editor/editor_internal_calls.cpp @@ -230,31 +230,9 @@ uint32_t godot_icall_GodotSharpExport_GetExportedAssemblyDependencies(MonoString return GodotSharpExport::get_exported_assembly_dependencies(project_dll_name, project_dll_src_path, build_config, custom_lib_dir, dependencies); } -float godot_icall_Globals_EditorScale() { - return EDSCALE; -} - -MonoObject *godot_icall_Globals_GlobalDef(MonoString *p_setting, MonoObject *p_default_value, MonoBoolean p_restart_if_changed) { - String setting = GDMonoMarshal::mono_string_to_godot(p_setting); - Variant default_value = GDMonoMarshal::mono_object_to_variant(p_default_value); - Variant result = _GLOBAL_DEF(setting, default_value, (bool)p_restart_if_changed); - return GDMonoMarshal::variant_to_mono_object(result); -} - -MonoObject *godot_icall_Globals_EditorDef(MonoString *p_setting, MonoObject *p_default_value, MonoBoolean p_restart_if_changed) { - String setting = GDMonoMarshal::mono_string_to_godot(p_setting); - Variant default_value = GDMonoMarshal::mono_object_to_variant(p_default_value); - Variant result = _EDITOR_DEF(setting, default_value, (bool)p_restart_if_changed); - return GDMonoMarshal::variant_to_mono_object(result); -} - -MonoString *godot_icall_Globals_TTR(MonoString *p_text) { - String text = GDMonoMarshal::mono_string_to_godot(p_text); - return GDMonoMarshal::mono_string_from_godot(TTR(text)); -} - -MonoString *godot_icall_Internal_UpdateApiAssembliesFromPrebuilt() { - String error_str = GDMono::get_singleton()->update_api_assemblies_from_prebuilt(); +MonoString *godot_icall_Internal_UpdateApiAssembliesFromPrebuilt(MonoString *p_config) { + String config = GDMonoMarshal::mono_string_to_godot(p_config); + String error_str = GDMono::get_singleton()->update_api_assemblies_from_prebuilt(config); return GDMonoMarshal::mono_string_from_godot(error_str); } @@ -365,6 +343,29 @@ void godot_icall_Internal_ScriptEditorDebugger_ReloadScripts() { } } +float godot_icall_Globals_EditorScale() { + return EDSCALE; +} + +MonoObject *godot_icall_Globals_GlobalDef(MonoString *p_setting, MonoObject *p_default_value, MonoBoolean p_restart_if_changed) { + String setting = GDMonoMarshal::mono_string_to_godot(p_setting); + Variant default_value = GDMonoMarshal::mono_object_to_variant(p_default_value); + Variant result = _GLOBAL_DEF(setting, default_value, (bool)p_restart_if_changed); + return GDMonoMarshal::variant_to_mono_object(result); +} + +MonoObject *godot_icall_Globals_EditorDef(MonoString *p_setting, MonoObject *p_default_value, MonoBoolean p_restart_if_changed) { + String setting = GDMonoMarshal::mono_string_to_godot(p_setting); + Variant default_value = GDMonoMarshal::mono_object_to_variant(p_default_value); + Variant result = _EDITOR_DEF(setting, default_value, (bool)p_restart_if_changed); + return GDMonoMarshal::variant_to_mono_object(result); +} + +MonoString *godot_icall_Globals_TTR(MonoString *p_text) { + String text = GDMonoMarshal::mono_string_to_godot(p_text); + return GDMonoMarshal::mono_string_from_godot(TTR(text)); +} + MonoString *godot_icall_Utils_OS_GetPlatformName() { String os_name = OS::get_singleton()->get_name(); return GDMonoMarshal::mono_string_from_godot(os_name); diff --git a/modules/mono/editor/godotsharp_export.cpp b/modules/mono/editor/godotsharp_export.cpp index 80a7335b1d..e83152d668 100644 --- a/modules/mono/editor/godotsharp_export.cpp +++ b/modules/mono/editor/godotsharp_export.cpp @@ -32,9 +32,13 @@ #include <mono/metadata/image.h> +#include "core/os/os.h" + #include "../mono_gd/gd_mono.h" #include "../mono_gd/gd_mono_assembly.h" +namespace GodotSharpExport { + String get_assemblyref_name(MonoImage *p_image, int index) { const MonoTableInfo *table_info = mono_image_get_table_info(p_image, MONO_TABLE_ASSEMBLYREF); @@ -45,7 +49,7 @@ String get_assemblyref_name(MonoImage *p_image, int index) { return String::utf8(mono_metadata_string_heap(p_image, cols[MONO_ASSEMBLYREF_NAME])); } -Error GodotSharpExport::get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Dictionary &r_dependencies) { +Error get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Dictionary &r_dependencies) { MonoImage *image = p_assembly->get_image(); for (int i = 0; i < mono_image_get_table_rows(image, MONO_TABLE_ASSEMBLYREF); i++) { @@ -96,8 +100,8 @@ Error GodotSharpExport::get_assembly_dependencies(GDMonoAssembly *p_assembly, co return OK; } -Error GodotSharpExport::get_exported_assembly_dependencies(const String &p_project_dll_name, const String &p_project_dll_src_path, const String &p_build_config, const String &p_custom_lib_dir, Dictionary &r_dependencies) { - MonoDomain *export_domain = GDMonoUtils::create_domain("GodotEngine.ProjectExportDomain"); +Error get_exported_assembly_dependencies(const String &p_project_dll_name, const String &p_project_dll_src_path, const String &p_build_config, const String &p_custom_bcl_dir, Dictionary &r_dependencies) { + MonoDomain *export_domain = GDMonoUtils::create_domain("GodotEngine.Domain.ProjectExport"); ERR_FAIL_NULL_V(export_domain, FAILED); _GDMONO_SCOPE_EXIT_DOMAIN_UNLOAD_(export_domain); @@ -110,7 +114,9 @@ Error GodotSharpExport::get_exported_assembly_dependencies(const String &p_proje ERR_FAIL_COND_V_MSG(!load_success, ERR_CANT_RESOLVE, "Cannot load assembly (refonly): '" + p_project_dll_name + "'."); Vector<String> search_dirs; - GDMonoAssembly::fill_search_dirs(search_dirs, p_build_config, p_custom_lib_dir); + GDMonoAssembly::fill_search_dirs(search_dirs, p_build_config, p_custom_bcl_dir); return get_assembly_dependencies(scripts_assembly, search_dirs, r_dependencies); } + +} // namespace GodotSharpExport diff --git a/modules/mono/editor/godotsharp_export.h b/modules/mono/editor/godotsharp_export.h index 8d121a6bc3..58e46e2f2d 100644 --- a/modules/mono/editor/godotsharp_export.h +++ b/modules/mono/editor/godotsharp_export.h @@ -39,10 +39,11 @@ namespace GodotSharpExport { +Error get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Dictionary &r_dependencies); + Error get_exported_assembly_dependencies(const String &p_project_dll_name, const String &p_project_dll_src_path, const String &p_build_config, const String &p_custom_lib_dir, Dictionary &r_dependencies); -Error get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String> &p_search_dirs, Dictionary &r_dependencies); } // namespace GodotSharpExport diff --git a/modules/mono/glue/Managed/Files/AABB.cs b/modules/mono/glue/Managed/Files/AABB.cs index 98a73382f4..6a4f785551 100644 --- a/modules/mono/glue/Managed/Files/AABB.cs +++ b/modules/mono/glue/Managed/Files/AABB.cs @@ -458,6 +458,11 @@ namespace Godot return _position == other._position && _size == other._size; } + public bool IsEqualApprox(AABB other) + { + return _position.IsEqualApprox(other._position) && _size.IsEqualApprox(other._size); + } + public override int GetHashCode() { return _position.GetHashCode() ^ _size.GetHashCode(); diff --git a/modules/mono/glue/Managed/Files/Basis.cs b/modules/mono/glue/Managed/Files/Basis.cs index 0eb76e9c63..c5e62b77c8 100644 --- a/modules/mono/glue/Managed/Files/Basis.cs +++ b/modules/mono/glue/Managed/Files/Basis.cs @@ -654,6 +654,11 @@ namespace Godot return Row0.Equals(other.Row0) && Row1.Equals(other.Row1) && Row2.Equals(other.Row2); } + public bool IsEqualApprox(Basis other) + { + return Row0.IsEqualApprox(other.Row0) && Row1.IsEqualApprox(other.Row1) && Row2.IsEqualApprox(other.Row2); + } + public override int GetHashCode() { return Row0.GetHashCode() ^ Row1.GetHashCode() ^ Row2.GetHashCode(); diff --git a/modules/mono/glue/Managed/Files/Color.cs b/modules/mono/glue/Managed/Files/Color.cs index 3a52a1a13b..df817e47e9 100644 --- a/modules/mono/glue/Managed/Files/Color.cs +++ b/modules/mono/glue/Managed/Files/Color.cs @@ -661,6 +661,11 @@ namespace Godot public bool Equals(Color other) { + return r == other.r && g == other.g && b == other.b && a == other.a; + } + + public bool IsEqualApprox(Color other) + { return Mathf.IsEqualApprox(r, other.r) && Mathf.IsEqualApprox(g, other.g) && Mathf.IsEqualApprox(b, other.b) && Mathf.IsEqualApprox(a, other.a); } diff --git a/modules/mono/glue/Managed/Files/Mathf.cs b/modules/mono/glue/Managed/Files/Mathf.cs index ce34cd6a99..54821fe790 100644 --- a/modules/mono/glue/Managed/Files/Mathf.cs +++ b/modules/mono/glue/Managed/Files/Mathf.cs @@ -19,12 +19,12 @@ namespace Godot private const real_t Deg2RadConst = (real_t) 0.0174532925199432957692369077M; // 0.0174532924f and 0.0174532925199433 private const real_t Rad2DegConst = (real_t) 57.295779513082320876798154814M; // 57.29578f and 57.2957795130823 - public static real_t Abs(real_t s) + public static int Abs(int s) { return Math.Abs(s); } - public static int Abs(int s) + public static real_t Abs(real_t s) { return Math.Abs(s); } @@ -79,29 +79,6 @@ namespace Godot return (real_t)Math.Cosh(s); } - public static int StepDecimals(real_t step) - { - double[] sd = new double[] { - 0.9999, - 0.09999, - 0.009999, - 0.0009999, - 0.00009999, - 0.000009999, - 0.0000009999, - 0.00000009999, - 0.000000009999, - }; - double abs = Mathf.Abs(step); - double decs = abs - (int)abs; // Strip away integer part - for (int i = 0; i < sd.Length; i++) { - if (decs >= sd[i]) { - return i; - } - } - return 0; - } - public static real_t Deg2Rad(real_t deg) { return deg * Deg2RadConst; @@ -159,12 +136,14 @@ namespace Godot public static bool IsEqualApprox(real_t a, real_t b) { // Check for exact equality first, required to handle "infinity" values. - if (a == b) { + if (a == b) + { return true; } // Then check for approximate equality. real_t tolerance = Epsilon * Abs(a); - if (tolerance < Epsilon) { + if (tolerance < Epsilon) + { tolerance = Epsilon; } return Abs(a - b) < tolerance; @@ -190,7 +169,8 @@ namespace Godot return from + (to - from) * weight; } - public static real_t LerpAngle(real_t from, real_t to, real_t weight) { + public static real_t LerpAngle(real_t from, real_t to, real_t weight) + { real_t difference = (to - from) % Mathf.Tau; real_t distance = ((2 * difference) % Mathf.Tau) - difference; return from + distance * weight; @@ -246,9 +226,9 @@ namespace Godot /// <summary> /// Performs a canonical Modulus operation, where the output is on the range [0, b). /// </summary> - public static real_t PosMod(real_t a, real_t b) + public static int PosMod(int a, int b) { - real_t c = a % b; + int c = a % b; if ((c < 0 && b > 0) || (c > 0 && b < 0)) { c += b; @@ -259,9 +239,9 @@ namespace Godot /// <summary> /// Performs a canonical Modulus operation, where the output is on the range [0, b). /// </summary> - public static int PosMod(int a, int b) + public static real_t PosMod(real_t a, real_t b) { - int c = a % b; + real_t c = a % b; if ((c < 0 && b > 0) || (c > 0 && b < 0)) { c += b; @@ -319,6 +299,31 @@ namespace Godot return (real_t)Math.Sqrt(s); } + public static int StepDecimals(real_t step) + { + double[] sd = new double[] { + 0.9999, + 0.09999, + 0.009999, + 0.0009999, + 0.00009999, + 0.000009999, + 0.0000009999, + 0.00000009999, + 0.000000009999, + }; + double abs = Mathf.Abs(step); + double decs = abs - (int)abs; // Strip away integer part + for (int i = 0; i < sd.Length; i++) + { + if (decs >= sd[i]) + { + return i; + } + } + return 0; + } + public static real_t Stepify(real_t s, real_t step) { if (step != 0f) diff --git a/modules/mono/glue/Managed/Files/MathfEx.cs b/modules/mono/glue/Managed/Files/MathfEx.cs index 6cffc7f01d..1b7fd4906f 100644 --- a/modules/mono/glue/Managed/Files/MathfEx.cs +++ b/modules/mono/glue/Managed/Files/MathfEx.cs @@ -49,7 +49,8 @@ namespace Godot public static bool IsEqualApprox(real_t a, real_t b, real_t tolerance) { // Check for exact equality first, required to handle "infinity" values. - if (a == b) { + if (a == b) + { return true; } // Then check for approximate equality. diff --git a/modules/mono/glue/Managed/Files/Plane.cs b/modules/mono/glue/Managed/Files/Plane.cs index a13161d2e6..885845e3a4 100644 --- a/modules/mono/glue/Managed/Files/Plane.cs +++ b/modules/mono/glue/Managed/Files/Plane.cs @@ -82,12 +82,12 @@ namespace Godot return Mathf.Abs(dist) <= epsilon; } - public Vector3 Intersect3(Plane b, Plane c) + public Vector3? Intersect3(Plane b, Plane c) { real_t denom = _normal.Cross(b._normal).Dot(c._normal); - if (Mathf.Abs(denom) <= Mathf.Epsilon) - return new Vector3(); + if (Mathf.IsZeroApprox(denom)) + return null; Vector3 result = b._normal.Cross(c._normal) * D + c._normal.Cross(_normal) * b.D + @@ -96,34 +96,35 @@ namespace Godot return result / denom; } - public Vector3 IntersectRay(Vector3 from, Vector3 dir) + public Vector3? IntersectRay(Vector3 from, Vector3 dir) { real_t den = _normal.Dot(dir); - if (Mathf.Abs(den) <= Mathf.Epsilon) - return new Vector3(); + if (Mathf.IsZeroApprox(den)) + return null; real_t dist = (_normal.Dot(from) - D) / den; // This is a ray, before the emitting pos (from) does not exist if (dist > Mathf.Epsilon) - return new Vector3(); + return null; return from + dir * -dist; } - public Vector3 IntersectSegment(Vector3 begin, Vector3 end) + public Vector3? IntersectSegment(Vector3 begin, Vector3 end) { Vector3 segment = begin - end; real_t den = _normal.Dot(segment); - if (Mathf.Abs(den) <= Mathf.Epsilon) - return new Vector3(); + if (Mathf.IsZeroApprox(den)) + return null; real_t dist = (_normal.Dot(begin) - D) / den; + // Only allow dist to be in the range of 0 to 1, with tolerance. if (dist < -Mathf.Epsilon || dist > 1.0f + Mathf.Epsilon) - return new Vector3(); + return null; return begin + segment * -dist; } @@ -203,7 +204,12 @@ namespace Godot public bool Equals(Plane other) { - return _normal == other._normal && Mathf.IsEqualApprox(D, other.D); + return _normal == other._normal && D == other.D; + } + + public bool IsEqualApprox(Plane other) + { + return _normal.IsEqualApprox(other._normal) && Mathf.IsEqualApprox(D, other.D); } public override int GetHashCode() diff --git a/modules/mono/glue/Managed/Files/Quat.cs b/modules/mono/glue/Managed/Files/Quat.cs index 845c7c730e..8f60867ac3 100644 --- a/modules/mono/glue/Managed/Files/Quat.cs +++ b/modules/mono/glue/Managed/Files/Quat.cs @@ -363,6 +363,11 @@ namespace Godot public bool Equals(Quat other) { + return x == other.x && y == other.y && z == other.z && w == other.w; + } + + public bool IsEqualApprox(Quat other) + { return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z) && Mathf.IsEqualApprox(w, other.w); } diff --git a/modules/mono/glue/Managed/Files/Rect2.cs b/modules/mono/glue/Managed/Files/Rect2.cs index f3dc9d8490..91e614dc7b 100644 --- a/modules/mono/glue/Managed/Files/Rect2.cs +++ b/modules/mono/glue/Managed/Files/Rect2.cs @@ -157,13 +157,13 @@ namespace Godot public bool Intersects(Rect2 b) { - if (_position.x > b._position.x + b._size.x) + if (_position.x >= b._position.x + b._size.x) return false; - if (_position.x + _size.x < b._position.x) + if (_position.x + _size.x <= b._position.x) return false; - if (_position.y > b._position.y + b._size.y) + if (_position.y >= b._position.y + b._size.y) return false; - if (_position.y + _size.y < b._position.y) + if (_position.y + _size.y <= b._position.y) return false; return true; @@ -231,6 +231,11 @@ namespace Godot return _position.Equals(other._position) && _size.Equals(other._size); } + public bool IsEqualApprox(Rect2 other) + { + return _position.IsEqualApprox(other._position) && _size.IsEqualApprox(other.Size); + } + public override int GetHashCode() { return _position.GetHashCode() ^ _size.GetHashCode(); diff --git a/modules/mono/glue/Managed/Files/Transform.cs b/modules/mono/glue/Managed/Files/Transform.cs index cc4d26158d..0b84050f07 100644 --- a/modules/mono/glue/Managed/Files/Transform.cs +++ b/modules/mono/glue/Managed/Files/Transform.cs @@ -185,6 +185,11 @@ namespace Godot return basis.Equals(other.basis) && origin.Equals(other.origin); } + public bool IsEqualApprox(Transform other) + { + return basis.IsEqualApprox(other.basis) && origin.IsEqualApprox(other.origin); + } + public override int GetHashCode() { return basis.GetHashCode() ^ origin.GetHashCode(); diff --git a/modules/mono/glue/Managed/Files/Transform2D.cs b/modules/mono/glue/Managed/Files/Transform2D.cs index 814332dc07..77ea3e5830 100644 --- a/modules/mono/glue/Managed/Files/Transform2D.cs +++ b/modules/mono/glue/Managed/Files/Transform2D.cs @@ -357,6 +357,11 @@ namespace Godot return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin); } + public bool IsEqualApprox(Transform2D other) + { + return x.IsEqualApprox(other.x) && y.IsEqualApprox(other.y) && origin.IsEqualApprox(other.origin); + } + public override int GetHashCode() { return x.GetHashCode() ^ y.GetHashCode() ^ origin.GetHashCode(); diff --git a/modules/mono/glue/Managed/Files/Vector2.cs b/modules/mono/glue/Managed/Files/Vector2.cs index 0daa94057e..f92453f546 100644 --- a/modules/mono/glue/Managed/Files/Vector2.cs +++ b/modules/mono/glue/Managed/Files/Vector2.cs @@ -455,6 +455,11 @@ namespace Godot public bool Equals(Vector2 other) { + return x == other.x && y == other.y; + } + + public bool IsEqualApprox(Vector2 other) + { return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y); } diff --git a/modules/mono/glue/Managed/Files/Vector3.cs b/modules/mono/glue/Managed/Files/Vector3.cs index 9076dbd3b0..025b09199f 100644 --- a/modules/mono/glue/Managed/Files/Vector3.cs +++ b/modules/mono/glue/Managed/Files/Vector3.cs @@ -513,6 +513,11 @@ namespace Godot public bool Equals(Vector3 other) { + return x == other.x && y == other.y && z == other.z; + } + + public bool IsEqualApprox(Vector3 other) + { return Mathf.IsEqualApprox(x, other.x) && Mathf.IsEqualApprox(y, other.y) && Mathf.IsEqualApprox(z, other.z); } diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp index 4b2525c692..5fa8aed5a9 100644 --- a/modules/mono/godotsharp_dirs.cpp +++ b/modules/mono/godotsharp_dirs.cpp @@ -43,6 +43,8 @@ #include "utils/android_utils.h" #endif +#include "mono_gd/gd_mono.h" + namespace GodotSharpDirs { String _get_expected_build_config() { @@ -59,20 +61,6 @@ String _get_expected_build_config() { #endif } -String _get_expected_api_build_config() { -#ifdef TOOLS_ENABLED - return "Debug"; -#else - -#ifdef DEBUG_ENABLED - return "Debug"; -#else - return "Release"; -#endif - -#endif -} - String _get_mono_user_dir() { #ifdef TOOLS_ENABLED if (EditorSettings::get_singleton()) { @@ -134,7 +122,7 @@ private: res_data_dir = "res://.mono"; res_metadata_dir = res_data_dir.plus_file("metadata"); res_assemblies_base_dir = res_data_dir.plus_file("assemblies"); - res_assemblies_dir = res_assemblies_base_dir.plus_file(_get_expected_api_build_config()); + res_assemblies_dir = res_assemblies_base_dir.plus_file(GDMono::get_expected_api_build_config()); res_config_dir = res_data_dir.plus_file("etc").plus_file("mono"); // TODO use paths from csproj diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp index cd111abd4d..504b8d41d0 100644 --- a/modules/mono/mono_gd/gd_mono.cpp +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -44,7 +44,6 @@ #include "core/project_settings.h" #include "../csharp_script.h" -#include "../glue/cs_glue_version.gen.h" #include "../godotsharp_dirs.h" #include "../utils/path_utils.h" #include "gd_mono_class.h" @@ -120,26 +119,29 @@ void gdmono_debug_init() { mono_debug_init(MONO_DEBUG_FORMAT_MONO); + CharString da_args = OS::get_singleton()->get_environment("GODOT_MONO_DEBUGGER_AGENT").utf8(); + +#ifdef TOOLS_ENABLED int da_port = GLOBAL_DEF("mono/debugger_agent/port", 23685); bool da_suspend = GLOBAL_DEF("mono/debugger_agent/wait_for_debugger", false); int da_timeout = GLOBAL_DEF("mono/debugger_agent/wait_timeout", 3000); - CharString da_args = OS::get_singleton()->get_environment("GODOT_MONO_DEBUGGER_AGENT").utf8(); - -#ifdef TOOLS_ENABLED if (Engine::get_singleton()->is_editor_hint() || ProjectSettings::get_singleton()->get_resource_path().empty() || Main::is_project_manager()) { if (da_args.size() == 0) return; } -#endif if (da_args.length() == 0) { da_args = String("--debugger-agent=transport=dt_socket,address=127.0.0.1:" + itos(da_port) + ",embedding=1,server=y,suspend=" + (da_suspend ? "y,timeout=" + itos(da_timeout) : "n")) .utf8(); } +#else + if (da_args.length() == 0) + return; // Exported games don't use the project settings to setup the debugger agent +#endif // --debugger-agent=help const char *options[] = { @@ -379,10 +381,10 @@ void GDMono::initialize_load_assemblies() { } bool GDMono::_are_api_assemblies_out_of_sync() { - bool out_of_sync = core_api_assembly && (core_api_assembly_out_of_sync || !GDMonoUtils::mono_cache.godot_api_cache_updated); + bool out_of_sync = core_api_assembly.assembly && (core_api_assembly.out_of_sync || !GDMonoUtils::mono_cache.godot_api_cache_updated); #ifdef TOOLS_ENABLED if (!out_of_sync) - out_of_sync = editor_api_assembly && editor_api_assembly_out_of_sync; + out_of_sync = editor_api_assembly.assembly && editor_api_assembly.out_of_sync; #endif return out_of_sync; } @@ -395,23 +397,24 @@ uint64_t get_core_api_hash(); uint64_t get_editor_api_hash(); #endif uint32_t get_bindings_version(); +uint32_t get_cs_glue_version(); void register_generated_icalls(); #else uint64_t get_core_api_hash() { - CRASH_NOW(); GD_UNREACHABLE(); } #ifdef TOOLS_ENABLED uint64_t get_editor_api_hash() { - CRASH_NOW(); GD_UNREACHABLE(); } #endif uint32_t get_bindings_version() { - CRASH_NOW(); + GD_UNREACHABLE(); +} +uint32_t get_cs_glue_version() { GD_UNREACHABLE(); } @@ -427,8 +430,8 @@ void GDMono::_register_internal_calls() { } void GDMono::_initialize_and_check_api_hashes() { - #ifdef MONO_GLUE_ENABLED +#ifdef DEBUG_METHODS_ENABLED if (get_api_core_hash() != GodotSharpBindings::get_core_api_hash()) { ERR_PRINT("Mono: Core API hash mismatch."); } @@ -438,6 +441,7 @@ void GDMono::_initialize_and_check_api_hashes() { ERR_PRINT("Mono: Editor API hash mismatch."); } #endif // TOOLS_ENABLED +#endif // DEBUG_METHODS_ENABLED #endif // MONO_GLUE_ENABLED } @@ -519,10 +523,10 @@ bool GDMono::load_assembly_from(const String &p_name, const String &p_path, GDMo return true; } -APIAssembly::Version APIAssembly::Version::get_from_loaded_assembly(GDMonoAssembly *p_api_assembly, APIAssembly::Type p_api_type) { - APIAssembly::Version api_assembly_version; +ApiAssemblyInfo::Version ApiAssemblyInfo::Version::get_from_loaded_assembly(GDMonoAssembly *p_api_assembly, ApiAssemblyInfo::Type p_api_type) { + ApiAssemblyInfo::Version api_assembly_version; - const char *nativecalls_name = p_api_type == APIAssembly::API_CORE ? + const char *nativecalls_name = p_api_type == ApiAssemblyInfo::API_CORE ? BINDINGS_CLASS_NATIVECALLS : BINDINGS_CLASS_NATIVECALLS_EDITOR; @@ -545,8 +549,8 @@ APIAssembly::Version APIAssembly::Version::get_from_loaded_assembly(GDMonoAssemb return api_assembly_version; } -String APIAssembly::to_string(APIAssembly::Type p_type) { - return p_type == APIAssembly::API_CORE ? "API_CORE" : "API_EDITOR"; +String ApiAssemblyInfo::to_string(ApiAssemblyInfo::Type p_type) { + return p_type == ApiAssemblyInfo::API_CORE ? "API_CORE" : "API_EDITOR"; } bool GDMono::_load_corlib_assembly() { @@ -563,16 +567,12 @@ bool GDMono::_load_corlib_assembly() { } #ifdef TOOLS_ENABLED -bool GDMono::copy_prebuilt_api_assembly(APIAssembly::Type p_api_type, const String &p_config) { - - bool &api_assembly_out_of_sync = (p_api_type == APIAssembly::API_CORE) ? - GDMono::get_singleton()->core_api_assembly_out_of_sync : - GDMono::get_singleton()->editor_api_assembly_out_of_sync; +bool GDMono::copy_prebuilt_api_assembly(ApiAssemblyInfo::Type p_api_type, const String &p_config) { String src_dir = GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(p_config); String dst_dir = GodotSharpDirs::get_res_assemblies_base_dir().plus_file(p_config); - String assembly_name = p_api_type == APIAssembly::API_CORE ? CORE_API_ASSEMBLY_NAME : EDITOR_API_ASSEMBLY_NAME; + String assembly_name = p_api_type == ApiAssemblyInfo::API_CORE ? CORE_API_ASSEMBLY_NAME : EDITOR_API_ASSEMBLY_NAME; // Create destination directory if needed if (!DirAccess::exists(dst_dir)) { @@ -586,35 +586,102 @@ bool GDMono::copy_prebuilt_api_assembly(APIAssembly::Type p_api_type, const Stri } } + DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); + + String xml_file = assembly_name + ".xml"; + if (da->copy(src_dir.plus_file(xml_file), dst_dir.plus_file(xml_file)) != OK) + WARN_PRINTS("Failed to copy '" + xml_file + "'."); + + String pdb_file = assembly_name + ".pdb"; + if (da->copy(src_dir.plus_file(pdb_file), dst_dir.plus_file(pdb_file)) != OK) + WARN_PRINTS("Failed to copy '" + pdb_file + "'."); + String assembly_file = assembly_name + ".dll"; - String assembly_src = src_dir.plus_file(assembly_file); - String assembly_dst = dst_dir.plus_file(assembly_file); + if (da->copy(src_dir.plus_file(assembly_file), dst_dir.plus_file(assembly_file)) != OK) { + ERR_PRINTS("Failed to copy '" + assembly_file + "'."); + return false; + } + + return true; +} - if (!FileAccess::exists(assembly_dst) || api_assembly_out_of_sync) { - DirAccessRef da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); +static bool try_get_cached_api_hash_for(const String &p_api_assemblies_dir, bool &r_out_of_sync) { + String core_api_assembly_path = p_api_assemblies_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + String editor_api_assembly_path = p_api_assemblies_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); - String xml_file = assembly_name + ".xml"; - if (da->copy(src_dir.plus_file(xml_file), dst_dir.plus_file(xml_file)) != OK) - WARN_PRINTS("Failed to copy '" + xml_file + "'."); + if (!FileAccess::exists(core_api_assembly_path) || !FileAccess::exists(editor_api_assembly_path)) + return false; - String pdb_file = assembly_name + ".pdb"; - if (da->copy(src_dir.plus_file(pdb_file), dst_dir.plus_file(pdb_file)) != OK) - WARN_PRINTS("Failed to copy '" + pdb_file + "'."); + String cached_api_hash_path = p_api_assemblies_dir.plus_file("api_hash_cache.cfg"); - Error err = da->copy(assembly_src, assembly_dst); + if (!FileAccess::exists(cached_api_hash_path)) + return false; - if (err != OK) { - ERR_PRINTS("Failed to copy '" + assembly_file + "'."); - return false; - } + Ref<ConfigFile> cfg; + cfg.instance(); + Error cfg_err = cfg->load(cached_api_hash_path); + ERR_FAIL_COND_V(cfg_err != OK, false); - api_assembly_out_of_sync = false; + // Checking the modified time is good enough + if (FileAccess::get_modified_time(core_api_assembly_path) != (uint64_t)cfg->get_value("core", "modified_time") || + FileAccess::get_modified_time(editor_api_assembly_path) != (uint64_t)cfg->get_value("editor", "modified_time")) { + return false; } + r_out_of_sync = GodotSharpBindings::get_bindings_version() != (uint32_t)cfg->get_value("core", "bindings_version") || + GodotSharpBindings::get_cs_glue_version() != (uint32_t)cfg->get_value("core", "cs_glue_version") || + GodotSharpBindings::get_bindings_version() != (uint32_t)cfg->get_value("editor", "bindings_version") || + GodotSharpBindings::get_cs_glue_version() != (uint32_t)cfg->get_value("editor", "cs_glue_version") || + GodotSharpBindings::get_core_api_hash() != (uint64_t)cfg->get_value("core", "api_hash") || + GodotSharpBindings::get_editor_api_hash() != (uint64_t)cfg->get_value("editor", "api_hash"); + return true; } -String GDMono::update_api_assemblies_from_prebuilt() { +static void create_cached_api_hash_for(const String &p_api_assemblies_dir) { + + String core_api_assembly_path = p_api_assemblies_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + String editor_api_assembly_path = p_api_assemblies_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); + String cached_api_hash_path = p_api_assemblies_dir.plus_file("api_hash_cache.cfg"); + + Ref<ConfigFile> cfg; + cfg.instance(); + + cfg->set_value("core", "modified_time", FileAccess::get_modified_time(core_api_assembly_path)); + cfg->set_value("editor", "modified_time", FileAccess::get_modified_time(editor_api_assembly_path)); + + cfg->set_value("core", "bindings_version", GodotSharpBindings::get_bindings_version()); + cfg->set_value("core", "cs_glue_version", GodotSharpBindings::get_cs_glue_version()); + cfg->set_value("editor", "bindings_version", GodotSharpBindings::get_bindings_version()); + cfg->set_value("editor", "cs_glue_version", GodotSharpBindings::get_cs_glue_version()); + + // This assumes the prebuilt api assemblies we copied to the project are not out of sync + cfg->set_value("core", "api_hash", GodotSharpBindings::get_core_api_hash()); + cfg->set_value("editor", "api_hash", GodotSharpBindings::get_editor_api_hash()); + + Error err = cfg->save(cached_api_hash_path); + ERR_FAIL_COND(err != OK); +} + +bool GDMono::_temp_domain_load_are_assemblies_out_of_sync(const String &p_config) { + MonoDomain *temp_domain = GDMonoUtils::create_domain("GodotEngine.Domain.CheckApiAssemblies"); + ERR_FAIL_NULL_V(temp_domain, "Failed to create temporary domain to check API assemblies"); + _GDMONO_SCOPE_EXIT_DOMAIN_UNLOAD_(temp_domain); + + _GDMONO_SCOPE_DOMAIN_(temp_domain); + + GDMono::LoadedApiAssembly temp_core_api_assembly; + GDMono::LoadedApiAssembly temp_editor_api_assembly; + + if (!_try_load_api_assemblies(temp_core_api_assembly, temp_editor_api_assembly, + p_config, /* refonly: */ true, /* loaded_callback: */ NULL)) { + return temp_core_api_assembly.out_of_sync || temp_editor_api_assembly.out_of_sync; + } + + return true; // Failed to load, assume they're outdated assemblies +} + +String GDMono::update_api_assemblies_from_prebuilt(const String &p_config, const bool *p_core_api_out_of_sync, const bool *p_editor_api_out_of_sync) { #define FAIL_REASON(m_out_of_sync, m_prebuilt_exists) \ ( \ @@ -625,46 +692,55 @@ String GDMono::update_api_assemblies_from_prebuilt() { String("and the prebuilt assemblies are missing.") : \ String("and we failed to copy the prebuilt assemblies."))) - bool api_assembly_out_of_sync = core_api_assembly_out_of_sync || editor_api_assembly_out_of_sync; + String dst_assemblies_dir = GodotSharpDirs::get_res_assemblies_base_dir().plus_file(p_config); - String core_assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(CORE_API_ASSEMBLY_NAME ".dll"); - String editor_assembly_path = GodotSharpDirs::get_res_assemblies_dir().plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); + String core_assembly_path = dst_assemblies_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + String editor_assembly_path = dst_assemblies_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); - if (!api_assembly_out_of_sync && FileAccess::exists(core_assembly_path) && FileAccess::exists(editor_assembly_path)) - return String(); // No update needed + bool api_assemblies_out_of_sync = false; - const int CONFIGS_LEN = 2; - String configs[CONFIGS_LEN] = { String("Debug"), String("Release") }; + if (p_core_api_out_of_sync && p_editor_api_out_of_sync) { + api_assemblies_out_of_sync = p_core_api_out_of_sync || p_editor_api_out_of_sync; + } else if (FileAccess::exists(core_assembly_path) && FileAccess::exists(editor_assembly_path)) { + // Determine if they're out of sync + if (!try_get_cached_api_hash_for(dst_assemblies_dir, api_assemblies_out_of_sync)) { + api_assemblies_out_of_sync = _temp_domain_load_are_assemblies_out_of_sync(p_config); + } + } - for (int i = 0; i < CONFIGS_LEN; i++) { - String config = configs[i]; + // Note: Even if only one of the assemblies if missing or out of sync, we update both - print_verbose("Updating '" + config + "' API assemblies"); + if (!api_assemblies_out_of_sync && FileAccess::exists(core_assembly_path) && FileAccess::exists(editor_assembly_path)) + return String(); // No update needed - String prebuilt_api_dir = GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(config); - String prebuilt_core_dll_path = prebuilt_api_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); - String prebuilt_editor_dll_path = prebuilt_api_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); + print_verbose("Updating '" + p_config + "' API assemblies"); - if (!FileAccess::exists(prebuilt_core_dll_path) || !FileAccess::exists(prebuilt_editor_dll_path)) { - return FAIL_REASON(api_assembly_out_of_sync, /* prebuilt_exists: */ false); - } + String prebuilt_api_dir = GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(p_config); + String prebuilt_core_dll_path = prebuilt_api_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); + String prebuilt_editor_dll_path = prebuilt_api_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); - // Copy the prebuilt Api - if (!copy_prebuilt_api_assembly(APIAssembly::API_CORE, config) || - !copy_prebuilt_api_assembly(APIAssembly::API_EDITOR, config)) { - return FAIL_REASON(api_assembly_out_of_sync, /* prebuilt_exists: */ true); - } + if (!FileAccess::exists(prebuilt_core_dll_path) || !FileAccess::exists(prebuilt_editor_dll_path)) { + return FAIL_REASON(api_assemblies_out_of_sync, /* prebuilt_exists: */ false); } + // Copy the prebuilt Api + if (!copy_prebuilt_api_assembly(ApiAssemblyInfo::API_CORE, p_config) || + !copy_prebuilt_api_assembly(ApiAssemblyInfo::API_EDITOR, p_config)) { + return FAIL_REASON(api_assemblies_out_of_sync, /* prebuilt_exists: */ true); + } + + // Cache the api hash of the assemblies we just copied + create_cached_api_hash_for(dst_assemblies_dir); + return String(); // Updated successfully #undef FAIL_REASON } #endif -bool GDMono::_load_core_api_assembly() { +bool GDMono::_load_core_api_assembly(LoadedApiAssembly &r_loaded_api_assembly, const String &p_config, bool p_refonly) { - if (core_api_assembly) + if (r_loaded_api_assembly.assembly) return true; #ifdef TOOLS_ENABLED @@ -672,99 +748,115 @@ bool GDMono::_load_core_api_assembly() { // If running the project manager, load it from the prebuilt API directory String assembly_dir = !Main::is_project_manager() ? - GodotSharpDirs::get_res_assemblies_dir() : - GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file("Debug"); + GodotSharpDirs::get_res_assemblies_base_dir().plus_file(p_config) : + GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(p_config); String assembly_path = assembly_dir.plus_file(CORE_API_ASSEMBLY_NAME ".dll"); bool success = FileAccess::exists(assembly_path) && - load_assembly_from(CORE_API_ASSEMBLY_NAME, assembly_path, &core_api_assembly); + load_assembly_from(CORE_API_ASSEMBLY_NAME, assembly_path, &r_loaded_api_assembly.assembly, p_refonly); #else - bool success = load_assembly(CORE_API_ASSEMBLY_NAME, &core_api_assembly); + bool success = load_assembly(CORE_API_ASSEMBLY_NAME, &r_loaded_api_assembly.assembly, p_refonly); #endif if (success) { - APIAssembly::Version api_assembly_ver = APIAssembly::Version::get_from_loaded_assembly(core_api_assembly, APIAssembly::API_CORE); - core_api_assembly_out_of_sync = GodotSharpBindings::get_core_api_hash() != api_assembly_ver.godot_api_hash || - GodotSharpBindings::get_bindings_version() != api_assembly_ver.bindings_version || - CS_GLUE_VERSION != api_assembly_ver.cs_glue_version; - if (!core_api_assembly_out_of_sync) { - GDMonoUtils::update_godot_api_cache(); - - _install_trace_listener(); - } + ApiAssemblyInfo::Version api_assembly_ver = ApiAssemblyInfo::Version::get_from_loaded_assembly(r_loaded_api_assembly.assembly, ApiAssemblyInfo::API_CORE); + r_loaded_api_assembly.out_of_sync = GodotSharpBindings::get_core_api_hash() != api_assembly_ver.godot_api_hash || + GodotSharpBindings::get_bindings_version() != api_assembly_ver.bindings_version || + GodotSharpBindings::get_cs_glue_version() != api_assembly_ver.cs_glue_version; } else { - core_api_assembly_out_of_sync = false; + r_loaded_api_assembly.out_of_sync = false; } return success; } #ifdef TOOLS_ENABLED -bool GDMono::_load_editor_api_assembly() { +bool GDMono::_load_editor_api_assembly(LoadedApiAssembly &r_loaded_api_assembly, const String &p_config, bool p_refonly) { - if (editor_api_assembly) + if (r_loaded_api_assembly.assembly) return true; // For the editor and the editor player we want to load it from a specific path to make sure we can keep it up to date // If running the project manager, load it from the prebuilt API directory String assembly_dir = !Main::is_project_manager() ? - GodotSharpDirs::get_res_assemblies_dir() : - GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file("Debug"); + GodotSharpDirs::get_res_assemblies_base_dir().plus_file(p_config) : + GodotSharpDirs::get_data_editor_prebuilt_api_dir().plus_file(p_config); String assembly_path = assembly_dir.plus_file(EDITOR_API_ASSEMBLY_NAME ".dll"); bool success = FileAccess::exists(assembly_path) && - load_assembly_from(EDITOR_API_ASSEMBLY_NAME, assembly_path, &editor_api_assembly); + load_assembly_from(EDITOR_API_ASSEMBLY_NAME, assembly_path, &r_loaded_api_assembly.assembly, p_refonly); if (success) { - APIAssembly::Version api_assembly_ver = APIAssembly::Version::get_from_loaded_assembly(editor_api_assembly, APIAssembly::API_EDITOR); - editor_api_assembly_out_of_sync = GodotSharpBindings::get_editor_api_hash() != api_assembly_ver.godot_api_hash || - GodotSharpBindings::get_bindings_version() != api_assembly_ver.bindings_version || - CS_GLUE_VERSION != api_assembly_ver.cs_glue_version; + ApiAssemblyInfo::Version api_assembly_ver = ApiAssemblyInfo::Version::get_from_loaded_assembly(r_loaded_api_assembly.assembly, ApiAssemblyInfo::API_EDITOR); + r_loaded_api_assembly.out_of_sync = GodotSharpBindings::get_editor_api_hash() != api_assembly_ver.godot_api_hash || + GodotSharpBindings::get_bindings_version() != api_assembly_ver.bindings_version || + GodotSharpBindings::get_cs_glue_version() != api_assembly_ver.cs_glue_version; } else { - editor_api_assembly_out_of_sync = false; + r_loaded_api_assembly.out_of_sync = false; } return success; } #endif -bool GDMono::_try_load_api_assemblies() { - - if (!_load_core_api_assembly()) { +bool GDMono::_try_load_api_assemblies(LoadedApiAssembly &r_core_api_assembly, LoadedApiAssembly &r_editor_api_assembly, + const String &p_config, bool p_refonly, CoreApiAssemblyLoadedCallback p_callback) { + if (!_load_core_api_assembly(r_core_api_assembly, p_config, p_refonly)) { if (OS::get_singleton()->is_stdout_verbose()) print_error("Mono: Failed to load Core API assembly"); return false; } #ifdef TOOLS_ENABLED - if (!_load_editor_api_assembly()) { + if (!_load_editor_api_assembly(r_editor_api_assembly, p_config, p_refonly)) { if (OS::get_singleton()->is_stdout_verbose()) print_error("Mono: Failed to load Editor API assembly"); return false; } - if (editor_api_assembly_out_of_sync) + if (r_editor_api_assembly.out_of_sync) return false; #endif // Check if the core API assembly is out of sync only after trying to load the // editor API assembly. Otherwise, if both assemblies are out of sync, we would // only update the former as we won't know the latter also needs to be updated. - if (core_api_assembly_out_of_sync || !GDMonoUtils::mono_cache.godot_api_cache_updated) + if (r_core_api_assembly.out_of_sync) return false; + if (p_callback) + return p_callback(); + return true; } +bool GDMono::_on_core_api_assembly_loaded() { + GDMonoUtils::update_godot_api_cache(); + + if (!GDMonoUtils::mono_cache.godot_api_cache_updated) + return false; + + get_singleton()->_install_trace_listener(); + + return true; +} + +bool GDMono::_try_load_api_assemblies_preset() { + return _try_load_api_assemblies(core_api_assembly, editor_api_assembly, + get_expected_api_build_config(), /* refonly: */ false, _on_core_api_assembly_loaded); +} + void GDMono::_load_api_assemblies() { - if (!_try_load_api_assemblies()) { + bool api_assemblies_loaded = _try_load_api_assemblies_preset(); + + if (!api_assemblies_loaded) { #ifdef TOOLS_ENABLED - // The API assemblies are out of sync. Fine, try one more time, but this time - // update them from the prebuilt assemblies directory before trying to load them. + // The API assemblies are out of sync or some other error happened. Fine, try one more time, but + // this time update them from the prebuilt assemblies directory before trying to load them again. // Shouldn't happen. The project manager loads the prebuilt API assemblies CRASH_COND_MSG(Main::is_project_manager(), "Failed to load one of the prebuilt API assemblies."); @@ -774,7 +866,7 @@ void GDMono::_load_api_assemblies() { CRASH_COND_MSG(domain_unload_err != OK, "Mono: Failed to unload scripts domain."); // 2. Update the API assemblies - String update_error = update_api_assemblies_from_prebuilt(); + String update_error = update_api_assemblies_from_prebuilt("Debug", &core_api_assembly.out_of_sync, &editor_api_assembly.out_of_sync); CRASH_COND_MSG(!update_error.empty(), update_error); // 3. Load the scripts domain again @@ -782,28 +874,30 @@ void GDMono::_load_api_assemblies() { CRASH_COND_MSG(domain_load_err != OK, "Mono: Failed to load scripts domain."); // 4. Try loading the updated assemblies - if (!_try_load_api_assemblies()) { - // welp... too bad - - if (_are_api_assemblies_out_of_sync()) { - if (core_api_assembly_out_of_sync) { - ERR_PRINT("The assembly '" CORE_API_ASSEMBLY_NAME "' is out of sync."); - } else if (!GDMonoUtils::mono_cache.godot_api_cache_updated) { - ERR_PRINT("The loaded assembly '" CORE_API_ASSEMBLY_NAME "' is in sync, but the cache update failed."); - } - - if (editor_api_assembly_out_of_sync) { - ERR_PRINT("The assembly '" EDITOR_API_ASSEMBLY_NAME "' is out of sync."); - } - - CRASH_NOW(); - } else { - CRASH_NOW_MSG("Failed to load one of the API assemblies."); + api_assemblies_loaded = _try_load_api_assemblies_preset(); +#endif + } + + if (!api_assemblies_loaded) { + // welp... too bad + + if (_are_api_assemblies_out_of_sync()) { + if (core_api_assembly.out_of_sync) { + ERR_PRINT("The assembly '" CORE_API_ASSEMBLY_NAME "' is out of sync."); + } else if (!GDMonoUtils::mono_cache.godot_api_cache_updated) { + ERR_PRINT("The loaded assembly '" CORE_API_ASSEMBLY_NAME "' is in sync, but the cache update failed."); + } + +#ifdef TOOLS_ENABLED + if (editor_api_assembly.out_of_sync) { + ERR_PRINT("The assembly '" EDITOR_API_ASSEMBLY_NAME "' is out of sync."); } - } -#else - CRASH_NOW_MSG("Failed to load one of the API assemblies."); #endif + + CRASH_NOW(); + } else { + CRASH_NOW_MSG("Failed to load one of the API assemblies."); + } } } @@ -844,15 +938,14 @@ void GDMono::_install_trace_listener() { #ifdef DEBUG_ENABLED // Install the trace listener now before the project assembly is loaded - typedef void (*DebuggingUtils_InstallTraceListener)(MonoObject **); + GDMonoClass *debug_utils = get_core_api_assembly()->get_class(BINDINGS_NAMESPACE, "DebuggingUtils"); + GDMonoMethod *install_func = debug_utils->get_method("InstallTraceListener"); + MonoException *exc = NULL; - GDMonoClass *debug_utils = core_api_assembly->get_class(BINDINGS_NAMESPACE, "DebuggingUtils"); - DebuggingUtils_InstallTraceListener install_func = - (DebuggingUtils_InstallTraceListener)debug_utils->get_method_thunk("InstallTraceListener"); - install_func((MonoObject **)&exc); + install_func->invoke_raw(NULL, NULL, &exc); if (exc) { - ERR_PRINT("Failed to install 'System.Diagnostics.Trace' listener."); GDMonoUtils::debug_print_unhandled_exception(exc); + ERR_PRINT("Failed to install 'System.Diagnostics.Trace' listener."); } #endif } @@ -863,7 +956,7 @@ Error GDMono::_load_scripts_domain() { print_verbose("Mono: Loading scripts domain..."); - scripts_domain = GDMonoUtils::create_domain("GodotEngine.ScriptsDomain"); + scripts_domain = GDMonoUtils::create_domain("GodotEngine.Domain.Scripts"); ERR_FAIL_NULL_V_MSG(scripts_domain, ERR_CANT_CREATE, "Mono: Could not create scripts app domain."); @@ -895,10 +988,13 @@ Error GDMono::_unload_scripts_domain() { _domain_assemblies_cleanup(mono_domain_get_id(scripts_domain)); - core_api_assembly = NULL; + core_api_assembly.assembly = NULL; +#ifdef TOOLS_ENABLED + editor_api_assembly.assembly = NULL; +#endif + project_assembly = NULL; #ifdef TOOLS_ENABLED - editor_api_assembly = NULL; tools_assembly = NULL; tools_project_editor_assembly = NULL; #endif @@ -1068,16 +1164,9 @@ GDMono::GDMono() { root_domain = NULL; scripts_domain = NULL; - core_api_assembly_out_of_sync = false; -#ifdef TOOLS_ENABLED - editor_api_assembly_out_of_sync = false; -#endif - corlib_assembly = NULL; - core_api_assembly = NULL; project_assembly = NULL; #ifdef TOOLS_ENABLED - editor_api_assembly = NULL; tools_assembly = NULL; tools_project_editor_assembly = NULL; #endif diff --git a/modules/mono/mono_gd/gd_mono.h b/modules/mono/mono_gd/gd_mono.h index 4f7d3791f7..e14a0d8409 100644 --- a/modules/mono/mono_gd/gd_mono.h +++ b/modules/mono/mono_gd/gd_mono.h @@ -41,7 +41,7 @@ #include "../utils/mono_reg_utils.h" #endif -namespace APIAssembly { +namespace ApiAssemblyInfo { enum Type { API_CORE, API_EDITOR @@ -76,7 +76,7 @@ struct Version { }; String to_string(Type p_type); -} // namespace APIAssembly +} // namespace ApiAssemblyInfo class GDMono { @@ -86,44 +86,58 @@ public: POLICY_LOG_ERROR }; + struct LoadedApiAssembly { + GDMonoAssembly *assembly; + bool out_of_sync; + + LoadedApiAssembly() : + assembly(NULL), + out_of_sync(false) { + } + }; + private: bool runtime_initialized; bool finalizing_scripts_domain; + UnhandledExceptionPolicy unhandled_exception_policy; + MonoDomain *root_domain; MonoDomain *scripts_domain; - bool core_api_assembly_out_of_sync; -#ifdef TOOLS_ENABLED - bool editor_api_assembly_out_of_sync; -#endif + HashMap<uint32_t, HashMap<String, GDMonoAssembly *> > assemblies; GDMonoAssembly *corlib_assembly; - GDMonoAssembly *core_api_assembly; GDMonoAssembly *project_assembly; #ifdef TOOLS_ENABLED - GDMonoAssembly *editor_api_assembly; GDMonoAssembly *tools_assembly; GDMonoAssembly *tools_project_editor_assembly; #endif - HashMap<uint32_t, HashMap<String, GDMonoAssembly *> > assemblies; + LoadedApiAssembly core_api_assembly; + LoadedApiAssembly editor_api_assembly; - UnhandledExceptionPolicy unhandled_exception_policy; - - void _domain_assemblies_cleanup(uint32_t p_domain_id); + typedef bool (*CoreApiAssemblyLoadedCallback)(); bool _are_api_assemblies_out_of_sync(); + bool _temp_domain_load_are_assemblies_out_of_sync(const String &p_config); + + bool _load_core_api_assembly(LoadedApiAssembly &r_loaded_api_assembly, const String &p_config, bool p_refonly); +#ifdef TOOLS_ENABLED + bool _load_editor_api_assembly(LoadedApiAssembly &r_loaded_api_assembly, const String &p_config, bool p_refonly); +#endif + + static bool _on_core_api_assembly_loaded(); bool _load_corlib_assembly(); - bool _load_core_api_assembly(); #ifdef TOOLS_ENABLED - bool _load_editor_api_assembly(); bool _load_tools_assemblies(); #endif bool _load_project_assembly(); - bool _try_load_api_assemblies(); + bool _try_load_api_assemblies(LoadedApiAssembly &r_core_api_assembly, LoadedApiAssembly &r_editor_api_assembly, + const String &p_config, bool p_refonly, CoreApiAssemblyLoadedCallback p_callback); + bool _try_load_api_assemblies_preset(); void _load_api_assemblies(); void _install_trace_listener(); @@ -133,6 +147,8 @@ private: Error _load_scripts_domain(); Error _unload_scripts_domain(); + void _domain_assemblies_cleanup(uint32_t p_domain_id); + uint64_t api_core_hash; #ifdef TOOLS_ENABLED uint64_t api_editor_hash; @@ -151,6 +167,7 @@ protected: static GDMono *singleton; public: +#ifdef DEBUG_METHODS_ENABLED uint64_t get_api_core_hash() { if (api_core_hash == 0) api_core_hash = ClassDB::get_api_hash(ClassDB::API_CORE); @@ -162,11 +179,24 @@ public: api_editor_hash = ClassDB::get_api_hash(ClassDB::API_EDITOR); return api_editor_hash; } +#endif // TOOLS_ENABLED +#endif // DEBUG_METHODS_ENABLED + + _FORCE_INLINE_ static String get_expected_api_build_config() { +#ifdef TOOLS_ENABLED + return "Debug"; +#else +#ifdef DEBUG_ENABLED + return "Debug"; +#else + return "Release"; #endif +#endif + } #ifdef TOOLS_ENABLED - bool copy_prebuilt_api_assembly(APIAssembly::Type p_api_type, const String &p_config); - String update_api_assemblies_from_prebuilt(); + bool copy_prebuilt_api_assembly(ApiAssemblyInfo::Type p_api_type, const String &p_config); + String update_api_assemblies_from_prebuilt(const String &p_config, const bool *p_core_api_out_of_sync = NULL, const bool *p_editor_api_out_of_sync = NULL); #endif static GDMono *get_singleton() { return singleton; } @@ -186,10 +216,10 @@ public: _FORCE_INLINE_ MonoDomain *get_scripts_domain() { return scripts_domain; } _FORCE_INLINE_ GDMonoAssembly *get_corlib_assembly() const { return corlib_assembly; } - _FORCE_INLINE_ GDMonoAssembly *get_core_api_assembly() const { return core_api_assembly; } + _FORCE_INLINE_ GDMonoAssembly *get_core_api_assembly() const { return core_api_assembly.assembly; } _FORCE_INLINE_ GDMonoAssembly *get_project_assembly() const { return project_assembly; } #ifdef TOOLS_ENABLED - _FORCE_INLINE_ GDMonoAssembly *get_editor_api_assembly() const { return editor_api_assembly; } + _FORCE_INLINE_ GDMonoAssembly *get_editor_api_assembly() const { return editor_api_assembly.assembly; } _FORCE_INLINE_ GDMonoAssembly *get_tools_assembly() const { return tools_assembly; } _FORCE_INLINE_ GDMonoAssembly *get_tools_project_editor_assembly() const { return tools_project_editor_assembly; } #endif diff --git a/modules/mono/mono_gd/gd_mono_log.cpp b/modules/mono/mono_gd/gd_mono_log.cpp index 6d91075ce3..7b3421fdb3 100644 --- a/modules/mono/mono_gd/gd_mono_log.cpp +++ b/modules/mono/mono_gd/gd_mono_log.cpp @@ -104,7 +104,7 @@ void GDMonoLog::_delete_old_log_files(const String &p_logs_dir) { ERR_FAIL_COND(!da); Error err = da->change_dir(p_logs_dir); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot change directory to '" + p_logs_dir + "'."); ERR_FAIL_COND(da->list_dir_begin() != OK); diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp index e385f4c601..6504fbe423 100644 --- a/modules/mono/mono_gd/gd_mono_utils.cpp +++ b/modules/mono/mono_gd/gd_mono_utils.cpp @@ -550,6 +550,8 @@ MonoObject *create_managed_from(const Dictionary &p_from, GDMonoClass *p_class) } MonoDomain *create_domain(const String &p_friendly_name) { + print_verbose("Mono: Creating domain '" + p_friendly_name + "'..."); + MonoDomain *domain = mono_domain_create_appdomain((char *)p_friendly_name.utf8().get_data(), NULL); if (domain) { diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp index 716c712ccc..e9efc7626d 100644 --- a/modules/mono/utils/string_utils.cpp +++ b/modules/mono/utils/string_utils.cpp @@ -165,7 +165,7 @@ Error read_all_file_utf8(const String &p_path, String &r_content) { PoolVector<uint8_t> sourcef; Error err; FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, err); + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot open file '" + p_path + "'."); int len = f->get_len(); sourcef.resize(len + 1); diff --git a/modules/opensimplex/doc_classes/NoiseTexture.xml b/modules/opensimplex/doc_classes/NoiseTexture.xml index 4b59a380f5..07d5eb27d6 100644 --- a/modules/opensimplex/doc_classes/NoiseTexture.xml +++ b/modules/opensimplex/doc_classes/NoiseTexture.xml @@ -17,6 +17,7 @@ </member> <member name="bump_strength" type="float" setter="set_bump_strength" getter="get_bump_strength" default="8.0"> </member> + <member name="flags" type="int" setter="set_flags" getter="get_flags" override="true" default="7" /> <member name="height" type="int" setter="set_height" getter="get_height" default="512"> Height of the generated texture. </member> diff --git a/modules/opus/audio_stream_opus.cpp b/modules/opus/audio_stream_opus.cpp index d3e8d3c9bb..43b0aecbf1 100644 --- a/modules/opus/audio_stream_opus.cpp +++ b/modules/opus/audio_stream_opus.cpp @@ -119,9 +119,7 @@ Error AudioStreamPlaybackOpus::_load_stream() { Error err; f = FileAccess::open(file, FileAccess::READ, &err); - if (err) { - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot open file '" + file + "'."); int _err = 0; @@ -185,9 +183,7 @@ Error AudioStreamPlaybackOpus::set_file(const String &p_file) { Error err; f = FileAccess::open(file, FileAccess::READ, &err); - if (err) { - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot open file '" + file + "'."); int _err; diff --git a/modules/recast/navigation_mesh_generator.cpp b/modules/recast/navigation_mesh_generator.cpp index c5b60f2dca..320591cf7c 100644 --- a/modules/recast/navigation_mesh_generator.cpp +++ b/modules/recast/navigation_mesh_generator.cpp @@ -131,7 +131,7 @@ void EditorNavigationMeshGenerator::_add_faces(const PoolVector3Array &p_faces, } } -void EditorNavigationMeshGenerator::_parse_geometry(Transform p_accumulated_transform, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices, int p_generate_from, uint32_t p_collision_mask) { +void EditorNavigationMeshGenerator::_parse_geometry(Transform p_accumulated_transform, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices, int p_generate_from, uint32_t p_collision_mask, bool p_recurse_children) { if (Object::cast_to<MeshInstance>(p_node) && p_generate_from != NavigationMesh::PARSED_GEOMETRY_STATIC_COLLIDERS) { @@ -263,8 +263,10 @@ void EditorNavigationMeshGenerator::_parse_geometry(Transform p_accumulated_tran p_accumulated_transform = p_accumulated_transform * spatial->get_transform(); } - for (int i = 0; i < p_node->get_child_count(); i++) { - _parse_geometry(p_accumulated_transform, p_node->get_child(i), p_verticies, p_indices, p_generate_from, p_collision_mask); + if (p_recurse_children) { + for (int i = 0; i < p_node->get_child_count(); i++) { + _parse_geometry(p_accumulated_transform, p_node->get_child(i), p_verticies, p_indices, p_generate_from, p_collision_mask, p_recurse_children); + } } } @@ -439,7 +441,21 @@ void EditorNavigationMeshGenerator::bake(Ref<NavigationMesh> p_nav_mesh, Node *p Vector<float> vertices; Vector<int> indices; - _parse_geometry(Object::cast_to<Spatial>(p_node)->get_transform().affine_inverse(), p_node, vertices, indices, p_nav_mesh->get_parsed_geometry_type(), p_nav_mesh->get_collision_mask()); + List<Node *> parse_nodes; + + if (p_nav_mesh->get_source_geometry_mode() == NavigationMesh::SOURCE_GEOMETRY_NAVMESH_CHILDREN) { + parse_nodes.push_back(p_node); + } else { + p_node->get_tree()->get_nodes_in_group(p_nav_mesh->get_source_group_name(), &parse_nodes); + } + + Transform navmesh_xform = Object::cast_to<Spatial>(p_node)->get_transform().affine_inverse(); + for (const List<Node *>::Element *E = parse_nodes.front(); E; E = E->next()) { + int geometry_type = p_nav_mesh->get_parsed_geometry_type(); + uint32_t collision_mask = p_nav_mesh->get_collision_mask(); + bool recurse_children = p_nav_mesh->get_source_geometry_mode() != NavigationMesh::SOURCE_GEOMETRY_GROUPS_EXPLICIT; + _parse_geometry(navmesh_xform, E->get(), vertices, indices, geometry_type, collision_mask, recurse_children); + } if (vertices.size() > 0 && indices.size() > 0) { diff --git a/modules/recast/navigation_mesh_generator.h b/modules/recast/navigation_mesh_generator.h index 30a6e3c835..f19622a4a9 100644 --- a/modules/recast/navigation_mesh_generator.h +++ b/modules/recast/navigation_mesh_generator.h @@ -47,7 +47,7 @@ protected: static void _add_vertex(const Vector3 &p_vec3, Vector<float> &p_verticies); static void _add_mesh(const Ref<Mesh> &p_mesh, const Transform &p_xform, Vector<float> &p_verticies, Vector<int> &p_indices); static void _add_faces(const PoolVector3Array &p_faces, const Transform &p_xform, Vector<float> &p_verticies, Vector<int> &p_indices); - static void _parse_geometry(Transform p_accumulated_transform, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices, int p_generate_from, uint32_t p_collision_mask); + static void _parse_geometry(Transform p_accumulated_transform, Node *p_node, Vector<float> &p_verticies, Vector<int> &p_indices, int p_generate_from, uint32_t p_collision_mask, bool p_recurse_children); static void _convert_detail_mesh_to_native_navigation_mesh(const rcPolyMeshDetail *p_detail_mesh, Ref<NavigationMesh> p_nav_mesh); static void _build_recast_navigation_mesh(Ref<NavigationMesh> p_nav_mesh, EditorProgress *ep, diff --git a/modules/stb_vorbis/resource_importer_ogg_vorbis.cpp b/modules/stb_vorbis/resource_importer_ogg_vorbis.cpp index e10f29e310..977ff064bc 100644 --- a/modules/stb_vorbis/resource_importer_ogg_vorbis.cpp +++ b/modules/stb_vorbis/resource_importer_ogg_vorbis.cpp @@ -83,7 +83,7 @@ Error ResourceImporterOGGVorbis::import(const String &p_source_file, const Strin FileAccess *f = FileAccess::open(p_source_file, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot open file '" + p_source_file + "'."); size_t len = f->get_len(); diff --git a/modules/theora/video_stream_theora.cpp b/modules/theora/video_stream_theora.cpp index 6a1b463305..ed1a7f682b 100644 --- a/modules/theora/video_stream_theora.cpp +++ b/modules/theora/video_stream_theora.cpp @@ -175,7 +175,7 @@ void VideoStreamPlaybackTheora::set_file(const String &p_file) { memdelete(file); } file = FileAccess::open(p_file, FileAccess::READ); - ERR_FAIL_COND(!file); + ERR_FAIL_COND_MSG(!file, "Cannot open file '" + p_file + "'."); #ifdef THEORA_USE_THREAD_STREAMING thread_exit = false; @@ -368,7 +368,7 @@ float VideoStreamPlaybackTheora::get_time() const { return time - AudioServer::get_singleton()->get_output_latency() - delay_compensation; //-((get_total())/(float)vi.rate); }; -Ref<Texture> VideoStreamPlaybackTheora::get_texture() { +Ref<Texture> VideoStreamPlaybackTheora::get_texture() const { return texture; } diff --git a/modules/theora/video_stream_theora.h b/modules/theora/video_stream_theora.h index 0c37d33358..b241722cd1 100644 --- a/modules/theora/video_stream_theora.h +++ b/modules/theora/video_stream_theora.h @@ -147,7 +147,7 @@ public: void set_file(const String &p_file); - virtual Ref<Texture> get_texture(); + virtual Ref<Texture> get_texture() const; virtual void update(float p_delta); virtual void set_mix_callback(AudioMixCallback p_callback, void *p_userdata); diff --git a/modules/visual_script/config.py b/modules/visual_script/config.py index 04e1a40b81..087a13a200 100644 --- a/modules/visual_script/config.py +++ b/modules/visual_script/config.py @@ -11,6 +11,7 @@ def get_doc_classes(): "VisualScriptBuiltinFunc", "VisualScriptClassConstant", "VisualScriptComment", + "VisualScriptComposeArray", "VisualScriptCondition", "VisualScriptConstant", "VisualScriptConstructor", @@ -28,6 +29,7 @@ def get_doc_classes(): "VisualScriptIndexSet", "VisualScriptInputAction", "VisualScriptIterator", + "VisualScriptLists", "VisualScriptLocalVarSet", "VisualScriptLocalVar", "VisualScriptMathConstant", diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml index 9e3670ec35..b5b452ee47 100644 --- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml +++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml @@ -217,7 +217,9 @@ </constant> <constant name="MATH_LERP_ANGLE" value="66" enum="BuiltinFunc"> </constant> - <constant name="FUNC_MAX" value="67" enum="BuiltinFunc"> + <constant name="TEXT_ORD" value="67" enum="BuiltinFunc"> + </constant> + <constant name="FUNC_MAX" value="68" enum="BuiltinFunc"> Represents the size of the [enum BuiltinFunc] enum. </constant> </constants> diff --git a/modules/visual_script/doc_classes/VisualScriptComposeArray.xml b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml new file mode 100644 index 0000000000..92efbc51d1 --- /dev/null +++ b/modules/visual_script/doc_classes/VisualScriptComposeArray.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="VisualScriptComposeArray" inherits="VisualScriptLists" category="Core" version="3.2"> + <brief_description> + A Visual Script Node used to create array from a list of items. + </brief_description> + <description> + A Visual Script Node used to compose array from the list of elements provided with custom in-graph UI hard coded in the VisualScript Editor. + </description> + <tutorials> + </tutorials> + <methods> + </methods> + <constants> + </constants> +</class> diff --git a/modules/visual_script/doc_classes/VisualScriptLists.xml b/modules/visual_script/doc_classes/VisualScriptLists.xml new file mode 100644 index 0000000000..8cf3eb1d38 --- /dev/null +++ b/modules/visual_script/doc_classes/VisualScriptLists.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<class name="VisualScriptLists" inherits="VisualScriptNode" category="Core" version="3.2"> + <brief_description> + A Visual Script virtual class for in-graph editable nodes. + </brief_description> + <description> + A Visual Script virtual class that defines the shape and the default behaviour of the nodes that have to be in-graph editable nodes. + </description> + <tutorials> + </tutorials> + <methods> + <method name="add_input_data_port"> + <return type="void"> + </return> + <argument index="0" name="type" type="int" enum="Variant.Type"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <argument index="2" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="add_output_data_port"> + <return type="void"> + </return> + <argument index="0" name="type" type="int" enum="Variant.Type"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <argument index="2" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="remove_input_data_port"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="remove_output_data_port"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <description> + </description> + </method> + <method name="set_input_data_port_name"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_input_data_port_type"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <argument index="1" name="type" type="int" enum="Variant.Type"> + </argument> + <description> + </description> + </method> + <method name="set_output_data_port_name"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <argument index="1" name="name" type="String"> + </argument> + <description> + </description> + </method> + <method name="set_output_data_port_type"> + <return type="void"> + </return> + <argument index="0" name="index" type="int"> + </argument> + <argument index="1" name="type" type="int" enum="Variant.Type"> + </argument> + <description> + </description> + </method> + </methods> + <constants> + </constants> +</class> diff --git a/modules/visual_script/register_types.cpp b/modules/visual_script/register_types.cpp index 24b96223d7..49272345fe 100644 --- a/modules/visual_script/register_types.cpp +++ b/modules/visual_script/register_types.cpp @@ -56,6 +56,8 @@ void register_visual_script_types() { ClassDB::register_virtual_class<VisualScriptNode>(); ClassDB::register_class<VisualScriptFunctionState>(); ClassDB::register_class<VisualScriptFunction>(); + ClassDB::register_virtual_class<VisualScriptLists>(); + ClassDB::register_class<VisualScriptComposeArray>(); ClassDB::register_class<VisualScriptOperator>(); ClassDB::register_class<VisualScriptVariableSet>(); ClassDB::register_class<VisualScriptVariableGet>(); diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp index 70389b6729..bb8612af6f 100644 --- a/modules/visual_script/visual_script.cpp +++ b/modules/visual_script/visual_script.cpp @@ -578,6 +578,10 @@ void VisualScript::get_data_connection_list(const StringName &p_func, List<DataC } } +void VisualScript::set_tool_enabled(bool p_enabled) { + is_tool_script = p_enabled; +} + void VisualScript::add_variable(const StringName &p_name, const Variant &p_default_value, bool p_export) { ERR_FAIL_COND(instances.size()); @@ -894,7 +898,7 @@ ScriptInstance *VisualScript::instance_create(Object *p_this) { #ifdef TOOLS_ENABLED - if (!ScriptServer::is_scripting_enabled()) { + if (!ScriptServer::is_scripting_enabled() && !is_tool_script) { PlaceHolderScriptInstance *sins = memnew(PlaceHolderScriptInstance(VisualScriptLanguage::singleton, Ref<Script>((Script *)this), p_this)); placeholders.insert(sins); @@ -958,7 +962,7 @@ Error VisualScript::reload(bool p_keep_state) { bool VisualScript::is_tool() const { - return false; + return is_tool_script; } bool VisualScript::is_valid() const { @@ -1010,17 +1014,16 @@ void VisualScript::get_script_method_list(List<MethodInfo> *p_list) const { Ref<VisualScriptFunction> func = E->get().nodes[E->get().function_id].node; if (func.is_valid()) { - for (int i = 0; i < func->get_argument_count(); i++) { PropertyInfo arg; arg.name = func->get_argument_name(i); arg.type = func->get_argument_type(i); mi.arguments.push_back(arg); } + + p_list->push_back(mi); } } - - p_list->push_back(mi); } } @@ -1133,6 +1136,9 @@ void VisualScript::_set_data(const Dictionary &p_data) { Array funcs = d["functions"]; functions.clear(); + Vector2 last_pos = Vector2(-100 * funcs.size(), -100 * funcs.size()); // this is the center of the last fn box + Vector2 last_size = Vector2(0.0, 0.0); + for (int i = 0; i < funcs.size(); i++) { Dictionary func = funcs[i]; @@ -1145,11 +1151,42 @@ void VisualScript::_set_data(const Dictionary &p_data) { Array nodes = func["nodes"]; - for (int j = 0; j < nodes.size(); j += 3) { + if (!d.has("vs_unify") && nodes.size() > 0) { + Vector2 top_left = nodes[1]; + Vector2 bottom_right = nodes[1]; - add_node(name, nodes[j], nodes[j + 2], nodes[j + 1]); - } + for (int j = 0; j < nodes.size(); j += 3) { + Point2 pos = nodes[j + 1]; + if (pos.y > top_left.y) { + top_left.y = pos.y; + } + if (pos.y < bottom_right.y) { + bottom_right.y = pos.y; + } + if (pos.x > bottom_right.x) { + bottom_right.x = pos.x; + } + if (pos.x < top_left.x) { + top_left.x = pos.x; + } + } + + Vector2 size = Vector2(bottom_right.x - top_left.x, top_left.y - bottom_right.y); + + Vector2 offset = last_pos + (last_size / 2.0) + (size / 2.0); // dunno I might just keep it in one axis but diagonal feels better.... + + last_pos = offset; + last_size = size; + + for (int j = 0; j < nodes.size(); j += 3) { + add_node(name, nodes[j], nodes[j + 2], offset + nodes[j + 1]); // also add an additional buffer if you want to + } + } else { + for (int j = 0; j < nodes.size(); j += 3) { + add_node(name, nodes[j], nodes[j + 2], nodes[j + 1]); + } + } Array sequence_connections = func["sequence_connections"]; for (int j = 0; j < sequence_connections.size(); j += 3) { @@ -1164,6 +1201,11 @@ void VisualScript::_set_data(const Dictionary &p_data) { data_connect(name, data_connections[j + 0], data_connections[j + 1], data_connections[j + 2], data_connections[j + 3]); } } + + if (d.has("is_tool_script")) + is_tool_script = d["is_tool_script"]; + else + is_tool_script = false; } Dictionary VisualScript::_get_data() const { @@ -1245,6 +1287,8 @@ Dictionary VisualScript::_get_data() const { } d["functions"] = funcs; + d["is_tool_script"] = is_tool_script; + d["vs_unify"] = true; return d; } @@ -1317,6 +1361,11 @@ void VisualScript::_bind_methods() { VisualScript::VisualScript() { base_type = "Object"; + is_tool_script = false; +} + +StringName VisualScript::get_default_func() const { + return StringName("f_312843592"); } Set<int> VisualScript::get_output_sequence_ports_connected(const String &edited_func, int from_node) { @@ -1392,6 +1441,10 @@ void VisualScriptInstance::get_method_list(List<MethodInfo> *p_list) const { for (const Map<StringName, VisualScript::Function>::Element *E = script->functions.front(); E; E = E->next()) { + if (E->key() == script->get_default_func()) { + continue; + } + MethodInfo mi; mi.name = E->key(); if (E->get().function_id >= 0 && E->get().nodes.has(E->get().function_id)) { @@ -1410,8 +1463,6 @@ void VisualScriptInstance::get_method_list(List<MethodInfo> *p_list) const { if (!vsf->is_sequenced()) { //assumed constant if not sequenced mi.flags |= METHOD_FLAG_CONST; } - - //vsf->Get_ for now at least it does not return.. } } @@ -1420,6 +1471,9 @@ void VisualScriptInstance::get_method_list(List<MethodInfo> *p_list) const { } bool VisualScriptInstance::has_method(const StringName &p_method) const { + if (p_method == script->get_default_func()) + return false; + return script->functions.has(p_method); } @@ -1991,6 +2045,9 @@ Ref<Script> VisualScriptInstance::get_script() const { MultiplayerAPI::RPCMode VisualScriptInstance::get_rpc_mode(const StringName &p_method) const { + if (p_method == script->get_default_func()) + return MultiplayerAPI::RPC_MODE_DISABLED; + const Map<StringName, VisualScript::Function>::Element *E = script->functions.find(p_method); if (!E) { return MultiplayerAPI::RPC_MODE_DISABLED; @@ -2039,11 +2096,14 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o for (const Map<StringName, VisualScript::Variable>::Element *E = script->variables.front(); E; E = E->next()) { variables[E->key()] = E->get().default_value; - //no hacer que todo exporte, solo las que queres! } for (const Map<StringName, VisualScript::Function>::Element *E = script->functions.front(); E; E = E->next()) { + if (E->key() == script->get_default_func()) { + continue; + } + Function function; function.node = E->get().function_id; function.max_stack = 0; @@ -2080,6 +2140,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o for (const Map<int, VisualScript::Function::NodeData>::Element *F = E->get().nodes.front(); F; F = F->next()) { Ref<VisualScriptNode> node = F->get().node; + VisualScriptNodeInstance *instance = node->instance(this); //create instance ERR_FAIL_COND(!instance); diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h index 098c28370d..a035f6d42d 100644 --- a/modules/visual_script/visual_script.h +++ b/modules/visual_script/visual_script.h @@ -239,6 +239,7 @@ private: PropertyInfo info; Variant default_value; bool _export; + // add getter & setter options here }; Map<StringName, Function> functions; @@ -247,6 +248,8 @@ private: Map<Object *, VisualScriptInstance *> instances; + bool is_tool_script; + #ifdef TOOLS_ENABLED Set<PlaceHolderScriptInstance *> placeholders; //void _update_placeholder(PlaceHolderScriptInstance *p_placeholder); @@ -265,6 +268,8 @@ protected: static void _bind_methods(); public: + // TODO: Remove it in future when breaking changes are acceptable + StringName get_default_func() const; void add_function(const StringName &p_name); bool has_function(const StringName &p_name) const; void remove_function(const StringName &p_name); @@ -273,6 +278,7 @@ public: Vector2 get_function_scroll(const StringName &p_name) const; void get_function_list(List<StringName> *r_functions) const; int get_function_node_id(const StringName &p_name) const; + void set_tool_enabled(bool p_enabled); void add_node(const StringName &p_func, int p_id, const Ref<VisualScriptNode> &p_node, const Point2 &p_pos = Point2()); void remove_node(const StringName &p_func, int p_id); diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index 8faa342bbe..6aae2fd15b 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -421,31 +421,42 @@ void VisualScriptEditor::_update_graph_connections() { graph->clear_connections(); - List<VisualScript::SequenceConnection> sequence_conns; - script->get_sequence_connection_list(edited_func, &sequence_conns); - - for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { + List<StringName> funcs; + script->get_function_list(&funcs); - graph->connect_node(itos(E->get().from_node), E->get().from_output, itos(E->get().to_node), 0); + if (funcs.size() <= 0) { + updating_graph = false; + return; } - List<VisualScript::DataConnection> data_conns; - script->get_data_connection_list(edited_func, &data_conns); - - for (List<VisualScript::DataConnection>::Element *E = data_conns.front(); E; E = E->next()) { + for (List<StringName>::Element *F = funcs.front(); F; F = F->next()) { - VisualScript::DataConnection dc = E->get(); + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(F->get(), &sequence_conns); - Ref<VisualScriptNode> from_node = script->get_node(edited_func, E->get().from_node); - Ref<VisualScriptNode> to_node = script->get_node(edited_func, E->get().to_node); + for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { - if (to_node->has_input_sequence_port()) { - dc.to_port++; + graph->connect_node(itos(E->get().from_node), E->get().from_output, itos(E->get().to_node), 0); } - dc.from_port += from_node->get_output_sequence_port_count(); + List<VisualScript::DataConnection> data_conns; + script->get_data_connection_list(F->get(), &data_conns); - graph->connect_node(itos(E->get().from_node), dc.from_port, itos(E->get().to_node), dc.to_port); + for (List<VisualScript::DataConnection>::Element *E = data_conns.front(); E; E = E->next()) { + + VisualScript::DataConnection dc = E->get(); + + Ref<VisualScriptNode> from_node = script->get_node(F->get(), E->get().from_node); + Ref<VisualScriptNode> to_node = script->get_node(F->get(), E->get().to_node); + + if (to_node->has_input_sequence_port()) { + dc.to_port++; + } + + dc.from_port += from_node->get_output_sequence_port_count(); + + graph->connect_node(itos(E->get().from_node), dc.from_port, itos(E->get().to_node), dc.to_port); + } } } @@ -474,7 +485,10 @@ void VisualScriptEditor::_update_graph(int p_only_id) { } } - if (!script->has_function(edited_func)) { + List<StringName> funcs; + script->get_function_list(&funcs); + + if (funcs.size() <= 0) { graph->hide(); select_func_text->show(); updating_graph = false; @@ -516,254 +530,390 @@ void VisualScriptEditor::_update_graph(int p_only_id) { Ref<Texture> seq_port = Control::get_icon("VisualShaderPort", "EditorIcons"); - List<int> ids; - script->get_node_list(edited_func, &ids); - StringName editor_icons = "EditorIcons"; + for (List<StringName>::Element *F = funcs.front(); F; F = F->next()) { // loop through all the functions - for (List<int>::Element *E = ids.front(); E; E = E->next()) { + List<int> ids; + script->get_node_list(F->get(), &ids); + StringName editor_icons = "EditorIcons"; - if (p_only_id >= 0 && p_only_id != E->get()) - continue; + for (List<int>::Element *E = ids.front(); E; E = E->next()) { - Ref<VisualScriptNode> node = script->get_node(edited_func, E->get()); - Vector2 pos = script->get_node_position(edited_func, E->get()); + if (p_only_id >= 0 && p_only_id != E->get()) + continue; - GraphNode *gnode = memnew(GraphNode); - gnode->set_title(node->get_caption()); - gnode->set_offset(pos * EDSCALE); - if (error_line == E->get()) { - gnode->set_overlay(GraphNode::OVERLAY_POSITION); - } else if (node->is_breakpoint()) { - gnode->set_overlay(GraphNode::OVERLAY_BREAKPOINT); - } + Ref<VisualScriptNode> node = script->get_node(F->get(), E->get()); + Vector2 pos = script->get_node_position(F->get(), E->get()); - gnode->set_meta("__vnode", node); - gnode->set_name(itos(E->get())); - gnode->connect("dragged", this, "_node_moved", varray(E->get())); - gnode->connect("close_request", this, "_remove_node", varray(E->get()), CONNECT_DEFERRED); + GraphNode *gnode = memnew(GraphNode); + gnode->set_title(node->get_caption()); + gnode->set_offset(pos * EDSCALE); + if (error_line == E->get()) { + gnode->set_overlay(GraphNode::OVERLAY_POSITION); + } else if (node->is_breakpoint()) { + gnode->set_overlay(GraphNode::OVERLAY_BREAKPOINT); + } - if (E->get() != script->get_function_node_id(edited_func)) { - //function can't be erased - gnode->set_show_close_button(true); - } + gnode->set_meta("__vnode", node); + gnode->set_name(itos(E->get())); + gnode->connect("dragged", this, "_node_moved", varray(E->get())); + gnode->connect("close_request", this, "_remove_node", varray(E->get()), CONNECT_DEFERRED); - bool has_gnode_text = false; + if (E->get() != script->get_function_node_id(F->get())) { + //function can't be erased + gnode->set_show_close_button(true); + } - if (Object::cast_to<VisualScriptExpression>(node.ptr())) { - has_gnode_text = true; - LineEdit *line_edit = memnew(LineEdit); - line_edit->set_text(node->get_text()); - line_edit->set_expand_to_text_length(true); - line_edit->add_font_override("font", get_font("source", "EditorFonts")); - gnode->add_child(line_edit); - line_edit->connect("text_changed", this, "_expression_text_changed", varray(E->get())); - } else { - String text = node->get_text(); - if (!text.empty()) { + bool has_gnode_text = false; + + Ref<VisualScriptLists> nd_list = node; + bool is_vslist = nd_list.is_valid(); + if (is_vslist) { + HBoxContainer *hbnc = memnew(HBoxContainer); + if (nd_list->is_input_port_editable()) { + has_gnode_text = true; + Button *btn = memnew(Button); + btn->set_text("Add Input Port"); + hbnc->add_child(btn); + btn->connect("pressed", this, "_add_input_port", varray(E->get())); + } + if (nd_list->is_output_port_editable()) { + if (nd_list->is_input_port_editable()) + hbnc->add_spacer(); + has_gnode_text = true; + Button *btn = memnew(Button); + btn->set_text("Add Output Port"); + hbnc->add_child(btn); + btn->connect("pressed", this, "_add_output_port", varray(E->get())); + } + gnode->add_child(hbnc); + } else if (Object::cast_to<VisualScriptExpression>(node.ptr())) { has_gnode_text = true; - Label *label = memnew(Label); - label->set_text(text); - gnode->add_child(label); + LineEdit *line_edit = memnew(LineEdit); + line_edit->set_text(node->get_text()); + line_edit->set_expand_to_text_length(true); + line_edit->add_font_override("font", get_font("source", "EditorFonts")); + gnode->add_child(line_edit); + line_edit->connect("text_changed", this, "_expression_text_changed", varray(E->get())); + } else { + String text = node->get_text(); + if (!text.empty()) { + has_gnode_text = true; + Label *label = memnew(Label); + label->set_text(text); + gnode->add_child(label); + } } - } - - if (Object::cast_to<VisualScriptComment>(node.ptr())) { - Ref<VisualScriptComment> vsc = node; - gnode->set_comment(true); - gnode->set_resizable(true); - gnode->set_custom_minimum_size(vsc->get_size() * EDSCALE); - gnode->connect("resize_request", this, "_comment_node_resized", varray(E->get())); - } - if (node_styles.has(node->get_category())) { - Ref<StyleBoxFlat> sbf = node_styles[node->get_category()]; - if (gnode->is_comment()) - sbf = EditorNode::get_singleton()->get_theme_base()->get_theme()->get_stylebox("comment", "GraphNode"); - - Color c = sbf->get_border_color(); - c.a = 1; - if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) { - Color mono_color = ((c.r + c.g + c.b) / 3) < 0.7 ? Color(1.0, 1.0, 1.0) : Color(0.0, 0.0, 0.0); - mono_color.a = 0.85; - c = mono_color; + if (Object::cast_to<VisualScriptComment>(node.ptr())) { + Ref<VisualScriptComment> vsc = node; + gnode->set_comment(true); + gnode->set_resizable(true); + gnode->set_custom_minimum_size(vsc->get_size() * EDSCALE); + gnode->connect("resize_request", this, "_comment_node_resized", varray(E->get())); } - gnode->add_color_override("title_color", c); - c.a = 0.7; - gnode->add_color_override("close_color", c); - gnode->add_color_override("resizer_color", c); - gnode->add_style_override("frame", sbf); - } - - const Color mono_color = get_color("mono_color", "Editor"); - - int slot_idx = 0; - - bool single_seq_output = node->get_output_sequence_port_count() == 1 && node->get_output_sequence_port_text(0) == String(); - if ((node->has_input_sequence_port() || single_seq_output) || has_gnode_text) { - // IF has_gnode_text is true BUT we have no sequence ports to draw (in here), - // we still draw the disabled default ones to shift up the slots by one, - // so the slots DON'T start with the content text. - - // IF has_gnode_text is false, but we DO want to draw default sequence ports, - // we draw a dummy text to take up the position of the sequence nodes, so all the other ports are still aligned correctly. - if (!has_gnode_text) { - Label *dummy = memnew(Label); - dummy->set_text(" "); - gnode->add_child(dummy); + if (node_styles.has(node->get_category())) { + Ref<StyleBoxFlat> sbf = node_styles[node->get_category()]; + if (gnode->is_comment()) + sbf = EditorNode::get_singleton()->get_theme_base()->get_theme()->get_stylebox("comment", "GraphNode"); + + Color c = sbf->get_border_color(); + c.a = 1; + if (EditorSettings::get_singleton()->get("interface/theme/use_graph_node_headers")) { + Color mono_color = ((c.r + c.g + c.b) / 3) < 0.7 ? Color(1.0, 1.0, 1.0) : Color(0.0, 0.0, 0.0); + mono_color.a = 0.85; + c = mono_color; + } + gnode->add_color_override("title_color", c); + c.a = 0.7; + gnode->add_color_override("close_color", c); + gnode->add_color_override("resizer_color", c); + gnode->add_style_override("frame", sbf); } - gnode->set_slot(0, node->has_input_sequence_port(), TYPE_SEQUENCE, mono_color, single_seq_output, TYPE_SEQUENCE, mono_color, seq_port, seq_port); - slot_idx++; - } - int mixed_seq_ports = 0; + const Color mono_color = get_color("mono_color", "Editor"); - if (!single_seq_output) { + int slot_idx = 0; - if (node->has_mixed_input_and_sequence_ports()) { - mixed_seq_ports = node->get_output_sequence_port_count(); - } else { - for (int i = 0; i < node->get_output_sequence_port_count(); i++) { + bool single_seq_output = node->get_output_sequence_port_count() == 1 && node->get_output_sequence_port_text(0) == String(); + if ((node->has_input_sequence_port() || single_seq_output) || has_gnode_text) { + // IF has_gnode_text is true BUT we have no sequence ports to draw (in here), + // we still draw the disabled default ones to shift up the slots by one, + // so the slots DON'T start with the content text. - Label *text2 = memnew(Label); - text2->set_text(node->get_output_sequence_port_text(i)); - text2->set_align(Label::ALIGN_RIGHT); - gnode->add_child(text2); - gnode->set_slot(slot_idx, false, 0, Color(), true, TYPE_SEQUENCE, mono_color, seq_port, seq_port); - slot_idx++; + // IF has_gnode_text is false, but we DO want to draw default sequence ports, + // we draw a dummy text to take up the position of the sequence nodes, so all the other ports are still aligned correctly. + if (!has_gnode_text) { + Label *dummy = memnew(Label); + dummy->set_text(" "); + gnode->add_child(dummy); } + gnode->set_slot(0, node->has_input_sequence_port(), TYPE_SEQUENCE, mono_color, single_seq_output, TYPE_SEQUENCE, mono_color, seq_port, seq_port); + slot_idx++; } - } - for (int i = 0; i < MAX(node->get_output_value_port_count(), MAX(mixed_seq_ports, node->get_input_value_port_count())); i++) { + int mixed_seq_ports = 0; - bool left_ok = false; - Variant::Type left_type = Variant::NIL; - String left_name; + if (!single_seq_output) { - if (i < node->get_input_value_port_count()) { - PropertyInfo pi = node->get_input_value_port_info(i); - left_ok = true; - left_type = pi.type; - left_name = pi.name; + if (node->has_mixed_input_and_sequence_ports()) { + mixed_seq_ports = node->get_output_sequence_port_count(); + } else { + for (int i = 0; i < node->get_output_sequence_port_count(); i++) { + + Label *text2 = memnew(Label); + text2->set_text(node->get_output_sequence_port_text(i)); + text2->set_align(Label::ALIGN_RIGHT); + gnode->add_child(text2); + gnode->set_slot(slot_idx, false, 0, Color(), true, TYPE_SEQUENCE, mono_color, seq_port, seq_port); + slot_idx++; + } + } } - bool right_ok = false; - Variant::Type right_type = Variant::NIL; - String right_name; + for (int i = 0; i < MAX(node->get_output_value_port_count(), MAX(mixed_seq_ports, node->get_input_value_port_count())); i++) { - if (i >= mixed_seq_ports && i < node->get_output_value_port_count() + mixed_seq_ports) { - PropertyInfo pi = node->get_output_value_port_info(i - mixed_seq_ports); - right_ok = true; - right_type = pi.type; - right_name = pi.name; - } + bool left_ok = false; + Variant::Type left_type = Variant::NIL; + String left_name; - HBoxContainer *hbc = memnew(HBoxContainer); + if (i < node->get_input_value_port_count()) { + PropertyInfo pi = node->get_input_value_port_info(i); + left_ok = true; + left_type = pi.type; + left_name = pi.name; + } - if (left_ok) { + bool right_ok = false; + Variant::Type right_type = Variant::NIL; + String right_name; - Ref<Texture> t; - if (left_type >= 0 && left_type < Variant::VARIANT_MAX) { - t = type_icons[left_type]; - } - if (t.is_valid()) { - TextureRect *tf = memnew(TextureRect); - tf->set_texture(t); - tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); - hbc->add_child(tf); + if (i >= mixed_seq_ports && i < node->get_output_value_port_count() + mixed_seq_ports) { + PropertyInfo pi = node->get_output_value_port_info(i - mixed_seq_ports); + right_ok = true; + right_type = pi.type; + right_name = pi.name; } + VBoxContainer *vbc = memnew(VBoxContainer); + HBoxContainer *hbc = memnew(HBoxContainer); + HBoxContainer *hbc2 = memnew(HBoxContainer); + vbc->add_child(hbc); + vbc->add_child(hbc2); + if (left_ok) { + + Ref<Texture> t; + if (left_type >= 0 && left_type < Variant::VARIANT_MAX) { + t = type_icons[left_type]; + } + if (t.is_valid()) { + TextureRect *tf = memnew(TextureRect); + tf->set_texture(t); + tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); + hbc->add_child(tf); + } - hbc->add_child(memnew(Label(left_name))); + if (is_vslist) { + if (nd_list->is_input_port_name_editable()) { + LineEdit *name_box = memnew(LineEdit); + hbc->add_child(name_box); + name_box->set_custom_minimum_size(Size2(60 * EDSCALE, 0)); + name_box->set_text(left_name); + name_box->set_expand_to_text_length(true); + name_box->connect("resized", this, "_update_node_size", varray(E->get())); + name_box->connect("focus_exited", this, "_port_name_focus_out", varray(name_box, E->get(), i, true)); + } else { + hbc->add_child(memnew(Label(left_name))); + } - if (left_type != Variant::NIL && !script->is_input_value_port_connected(edited_func, E->get(), i)) { + if (nd_list->is_input_port_type_editable()) { + OptionButton *opbtn = memnew(OptionButton); + for (int j = Variant::NIL; j < Variant::VARIANT_MAX; j++) { + opbtn->add_item(Variant::get_type_name(Variant::Type(j))); + } + opbtn->select(left_type); + opbtn->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + hbc->add_child(opbtn); + opbtn->connect("item_selected", this, "_change_port_type", varray(E->get(), i, true), CONNECT_DEFERRED); + } - PropertyInfo pi = node->get_input_value_port_info(i); - Button *button = memnew(Button); - Variant value = node->get_default_input_value(i); - if (value.get_type() != left_type) { - //different type? for now convert - //not the same, reconvert - Variant::CallError ce; - const Variant *existingp = &value; - value = Variant::construct(left_type, &existingp, 1, ce, false); + Button *rmbtn = memnew(Button); + rmbtn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Remove", "EditorIcons")); + hbc->add_child(rmbtn); + rmbtn->connect("pressed", this, "_remove_input_port", varray(E->get(), i), CONNECT_DEFERRED); + } else { + hbc->add_child(memnew(Label(left_name))); } - if (left_type == Variant::COLOR) { - button->set_custom_minimum_size(Size2(30, 0) * EDSCALE); - button->connect("draw", this, "_draw_color_over_button", varray(button, value)); - } else if (left_type == Variant::OBJECT && Ref<Resource>(value).is_valid()) { + if (left_type != Variant::NIL && !script->is_input_value_port_connected(F->get(), E->get(), i)) { + + PropertyInfo pi = node->get_input_value_port_info(i); + Button *button = memnew(Button); + Variant value = node->get_default_input_value(i); + if (value.get_type() != left_type) { + //different type? for now convert + //not the same, reconvert + Variant::CallError ce; + const Variant *existingp = &value; + value = Variant::construct(left_type, &existingp, 1, ce, false); + } - Ref<Resource> res = value; - Array arr; - arr.push_back(button->get_instance_id()); - arr.push_back(String(value)); - EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res, this, "_button_resource_previewed", arr); + if (left_type == Variant::COLOR) { + button->set_custom_minimum_size(Size2(30, 0) * EDSCALE); + button->connect("draw", this, "_draw_color_over_button", varray(button, value)); + } else if (left_type == Variant::OBJECT && Ref<Resource>(value).is_valid()) { - } else if (pi.type == Variant::INT && pi.hint == PROPERTY_HINT_ENUM) { + Ref<Resource> res = value; + Array arr; + arr.push_back(button->get_instance_id()); + arr.push_back(String(value)); + EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res, this, "_button_resource_previewed", arr); - button->set_text(pi.hint_string.get_slice(",", value)); - } else { + } else if (pi.type == Variant::INT && pi.hint == PROPERTY_HINT_ENUM) { + + button->set_text(pi.hint_string.get_slice(",", value)); + } else { - button->set_text(value); + button->set_text(value); + } + button->connect("pressed", this, "_default_value_edited", varray(button, E->get(), i)); + hbc2->add_child(button); } - button->connect("pressed", this, "_default_value_edited", varray(button, E->get(), i)); - hbc->add_child(button); + } else { + Control *c = memnew(Control); + c->set_custom_minimum_size(Size2(10, 0) * EDSCALE); + hbc->add_child(c); } - } else { - Control *c = memnew(Control); - c->set_custom_minimum_size(Size2(10, 0) * EDSCALE); - hbc->add_child(c); - } - hbc->add_spacer(); + hbc->add_spacer(); + hbc2->add_spacer(); - if (i < mixed_seq_ports) { + if (i < mixed_seq_ports) { - Label *text2 = memnew(Label); - text2->set_text(node->get_output_sequence_port_text(i)); - text2->set_align(Label::ALIGN_RIGHT); - hbc->add_child(text2); - } + Label *text2 = memnew(Label); + text2->set_text(node->get_output_sequence_port_text(i)); + text2->set_align(Label::ALIGN_RIGHT); + hbc->add_child(text2); + } - if (right_ok) { + if (right_ok) { + + if (is_vslist) { + Button *rmbtn = memnew(Button); + rmbtn->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Remove", "EditorIcons")); + hbc->add_child(rmbtn); + rmbtn->connect("pressed", this, "_remove_output_port", varray(E->get(), i), CONNECT_DEFERRED); + + if (nd_list->is_output_port_type_editable()) { + OptionButton *opbtn = memnew(OptionButton); + for (int j = Variant::NIL; j < Variant::VARIANT_MAX; j++) { + opbtn->add_item(Variant::get_type_name(Variant::Type(j))); + } + opbtn->select(right_type); + opbtn->set_custom_minimum_size(Size2(100 * EDSCALE, 0)); + hbc->add_child(opbtn); + opbtn->connect("item_selected", this, "_change_port_type", varray(E->get(), i, false), CONNECT_DEFERRED); + } - hbc->add_child(memnew(Label(right_name))); + if (nd_list->is_output_port_name_editable()) { + LineEdit *name_box = memnew(LineEdit); + hbc->add_child(name_box); + name_box->set_custom_minimum_size(Size2(60 * EDSCALE, 0)); + name_box->set_text(right_name); + name_box->set_expand_to_text_length(true); + name_box->connect("resized", this, "_update_node_size", varray(E->get())); + name_box->connect("focus_exited", this, "_port_name_focus_out", varray(name_box, E->get(), i, false)); + } else { + hbc->add_child(memnew(Label(right_name))); + } + } else { + hbc->add_child(memnew(Label(right_name))); + } - Ref<Texture> t; - if (right_type >= 0 && right_type < Variant::VARIANT_MAX) { - t = type_icons[right_type]; + Ref<Texture> t; + if (right_type >= 0 && right_type < Variant::VARIANT_MAX) { + t = type_icons[right_type]; + } + if (t.is_valid()) { + TextureRect *tf = memnew(TextureRect); + tf->set_texture(t); + tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); + hbc->add_child(tf); + } } - if (t.is_valid()) { - TextureRect *tf = memnew(TextureRect); - tf->set_texture(t); - tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); - hbc->add_child(tf); + + gnode->add_child(vbc); + + bool dark_theme = get_constant("dark_theme", "Editor"); + if (i < mixed_seq_ports) { + gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), true, TYPE_SEQUENCE, mono_color, Ref<Texture>(), seq_port); + } else { + gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), right_ok, right_type, _color_from_type(right_type, dark_theme)); } + + slot_idx++; } - gnode->add_child(hbc); + graph->add_child(gnode); - bool dark_theme = get_constant("dark_theme", "Editor"); - if (i < mixed_seq_ports) { - gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), true, TYPE_SEQUENCE, mono_color, Ref<Texture>(), seq_port); - } else { - gnode->set_slot(slot_idx, left_ok, left_type, _color_from_type(left_type, dark_theme), right_ok, right_type, _color_from_type(right_type, dark_theme)); + if (gnode->is_comment()) { + graph->move_child(gnode, 0); } - - slot_idx++; } + } + _update_graph_connections(); + // use default_func instead of default_func for now I think that should be good stop gap solution to ensure not breaking anything + graph->call_deferred("set_scroll_ofs", script->get_function_scroll(default_func) * EDSCALE); + updating_graph = false; +} - graph->add_child(gnode); +void VisualScriptEditor::_change_port_type(int p_select, int p_id, int p_port, bool is_input) { - if (gnode->is_comment()) { - graph->move_child(gnode, 0); - } + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) + return; + + undo_redo->create_action("Change Port Type"); + if (is_input) { + undo_redo->add_do_method(vsn.ptr(), "set_input_data_port_type", p_port, Variant::Type(p_select)); + undo_redo->add_undo_method(vsn.ptr(), "set_input_data_port_type", p_port, vsn->get_input_value_port_info(p_port).type); + } else { + undo_redo->add_do_method(vsn.ptr(), "set_output_data_port_type", p_port, Variant::Type(p_select)); + undo_redo->add_undo_method(vsn.ptr(), "set_output_data_port_type", p_port, vsn->get_output_value_port_info(p_port).type); } + undo_redo->commit_action(); +} - _update_graph_connections(); - graph->call_deferred("set_scroll_ofs", script->get_function_scroll(edited_func) * EDSCALE); //may need to adapt a bit, let it do so - updating_graph = false; +void VisualScriptEditor::_update_node_size(int p_id) { + + Node *node = graph->get_node(itos(p_id)); + if (Object::cast_to<Control>(node)) + Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); //shrink if text is smaller +} +void VisualScriptEditor::_port_name_focus_out(const Node *p_name_box, int p_id, int p_port, bool is_input) { + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) + return; + + String text; + + if (Object::cast_to<LineEdit>(p_name_box)) + text = Object::cast_to<LineEdit>(p_name_box)->get_text(); + else + return; + + undo_redo->create_action("Change Port Name"); + if (is_input) { + undo_redo->add_do_method(vsn.ptr(), "set_input_data_port_name", p_port, text); + undo_redo->add_undo_method(vsn.ptr(), "set_input_data_port_name", p_port, vsn->get_input_value_port_info(p_port).name); + } else { + undo_redo->add_do_method(vsn.ptr(), "set_output_data_port_name", p_port, text); + undo_redo->add_undo_method(vsn.ptr(), "set_output_data_port_name", p_port, vsn->get_output_value_port_info(p_port).name); + } + undo_redo->commit_action(); } void VisualScriptEditor::_update_members() { @@ -784,11 +934,16 @@ void VisualScriptEditor::_update_members() { List<StringName> func_names; script->get_function_list(&func_names); for (List<StringName>::Element *E = func_names.front(); E; E = E->next()) { + + if (E->get() == default_func) { + continue; + } + TreeItem *ti = members->create_item(functions); ti->set_text(0, E->get()); ti->set_selectable(0, true); - ti->set_editable(0, true); ti->set_metadata(0, E->get()); + ti->add_button(0, Control::get_icon("Edit", "EditorIcons"), 0); if (selected == E->get()) ti->select(0); } @@ -888,15 +1043,15 @@ void VisualScriptEditor::_member_selected() { if (ti->get_parent() == members->get_root()->get_children()) { - if (edited_func != selected) { - - revert_on_drag = edited_func; - edited_func = selected; - _update_members(); - _update_graph(); +#ifdef OSX_ENABLED + bool held_ctrl = Input::get_singleton()->is_key_pressed(KEY_META); +#else + bool held_ctrl = Input::get_singleton()->is_key_pressed(KEY_CONTROL); +#endif + if (held_ctrl) { + ERR_FAIL_COND(!script->has_function(selected)); + _center_on_node(selected, script->get_function_node_id(selected)); } - - return; //or crash because it will become invalid } } @@ -936,9 +1091,6 @@ void VisualScriptEditor::_member_edited() { if (ti->get_parent() == root->get_children()) { - if (edited_func == selected) { - edited_func = new_name; - } selected = new_name; int node_id = script->get_function_node_id(name); @@ -950,10 +1102,27 @@ void VisualScriptEditor::_member_edited() { undo_redo->add_do_method(script.ptr(), "rename_function", name, new_name); undo_redo->add_undo_method(script.ptr(), "rename_function", new_name, name); if (func.is_valid()) { - undo_redo->add_do_method(func.ptr(), "set_name", new_name); undo_redo->add_undo_method(func.ptr(), "set_name", name); } + + // also fix all function calls + List<StringName> flst; + script->get_function_list(&flst); + for (List<StringName>::Element *E = flst.front(); E; E = E->next()) { + List<int> lst; + script->get_node_list(E->get(), &lst); + for (List<int>::Element *F = lst.front(); F; F = F->next()) { + Ref<VisualScriptFunctionCall> fncall = script->get_node(E->get(), F->get()); + if (!fncall.is_valid()) + continue; + if (fncall->get_function() == name) { + undo_redo->add_do_method(fncall.ptr(), "set_function", new_name); + undo_redo->add_undo_method(fncall.ptr(), "set_function", name); + } + } + } + undo_redo->add_do_method(this, "_update_members"); undo_redo->add_undo_method(this, "_update_members"); undo_redo->add_do_method(this, "_update_graph"); @@ -962,8 +1131,6 @@ void VisualScriptEditor::_member_edited() { undo_redo->add_undo_method(this, "emit_signal", "edited_script_changed"); undo_redo->commit_action(); - // _update_graph(); - return; //or crash because it will become invalid } @@ -998,6 +1165,112 @@ void VisualScriptEditor::_member_edited() { } } +void VisualScriptEditor::_create_function_dialog() { + function_create_dialog->popup_centered(); + func_name_box->set_text(""); + func_name_box->grab_focus(); + for (int i = 0; i < func_input_vbox->get_child_count(); i++) { + Node *nd = func_input_vbox->get_child(i); + nd->queue_delete(); + } +} + +void VisualScriptEditor::_create_function() { + String name = _validate_name((func_name_box->get_text() == "") ? "new_func" : func_name_box->get_text()); + selected = name; + Vector2 ofs = _get_available_pos(); + + Ref<VisualScriptFunction> func_node; + func_node.instance(); + func_node->set_name(name); + + for (int i = 0; i < func_input_vbox->get_child_count(); i++) { + OptionButton *opbtn = Object::cast_to<OptionButton>(func_input_vbox->get_child(i)->get_child(3)); + LineEdit *lne = Object::cast_to<LineEdit>(func_input_vbox->get_child(i)->get_child(1)); + if (!opbtn || !lne) + continue; + Variant::Type arg_type = Variant::Type(opbtn->get_selected()); + String arg_name = lne->get_text(); + func_node->add_argument(arg_type, arg_name); + } + + undo_redo->create_action(TTR("Add Function")); + undo_redo->add_do_method(script.ptr(), "add_function", name); + undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id(), func_node, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_function", name); + undo_redo->add_do_method(this, "_update_members"); + undo_redo->add_undo_method(this, "_update_members"); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->add_do_method(this, "emit_signal", "edited_script_changed"); + undo_redo->add_undo_method(this, "emit_signal", "edited_script_changed"); + undo_redo->commit_action(); + + _update_graph(); +} + +void VisualScriptEditor::_add_node_dialog() { + _generic_search(script->get_instance_base_type(), graph->get_global_position() + Vector2(55, 80), true); +} + +void VisualScriptEditor::_add_func_input() { + HBoxContainer *hbox = memnew(HBoxContainer); + hbox->set_h_size_flags(SIZE_EXPAND_FILL); + + Label *name_label = memnew(Label); + name_label->set_text(TTR("Name:")); + hbox->add_child(name_label); + + LineEdit *name_box = memnew(LineEdit); + name_box->set_h_size_flags(SIZE_EXPAND_FILL); + name_box->set_text("input"); + name_box->connect("focus_entered", this, "_deselect_input_names"); + hbox->add_child(name_box); + + Label *type_label = memnew(Label); + type_label->set_text(TTR("Type:")); + hbox->add_child(type_label); + + OptionButton *type_box = memnew(OptionButton); + type_box->set_custom_minimum_size(Size2(120 * EDSCALE, 0)); + for (int i = Variant::NIL; i < Variant::VARIANT_MAX; i++) + type_box->add_item(Variant::get_type_name(Variant::Type(i))); + type_box->select(1); + hbox->add_child(type_box); + + Button *delete_button = memnew(Button); + delete_button->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("Remove", "EditorIcons")); + delete_button->set_tooltip(vformat(TTR("Delete input port"))); + hbox->add_child(delete_button); + + for (int i = 0; i < func_input_vbox->get_child_count(); i++) { + LineEdit *line_edit = (LineEdit *)func_input_vbox->get_child(i)->get_child(1); + line_edit->deselect(); + } + + func_input_vbox->add_child(hbox); + hbox->set_meta("id", hbox->get_position_in_parent()); + + delete_button->connect("pressed", this, "_remove_func_input", varray(hbox)); + + name_box->select_all(); + name_box->grab_focus(); +} + +void VisualScriptEditor::_remove_func_input(Node *p_node) { + func_input_vbox->remove_child(p_node); + p_node->queue_delete(); +} + +void VisualScriptEditor::_deselect_input_names() { + int cn = func_input_vbox->get_child_count(); + for (int i = 0; i < cn; i++) { + LineEdit *lne = Object::cast_to<LineEdit>(func_input_vbox->get_child(i)->get_child(1)); + if (lne) + lne->deselect(); + } +} + void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_button) { TreeItem *ti = Object::cast_to<TreeItem>(p_item); @@ -1010,7 +1283,6 @@ void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_butt //add function, this one uses menu if (p_button == 1) { - new_virtual_method_select->select_method_from_base_type(script->get_instance_base_type(), String(), true); return; @@ -1018,7 +1290,7 @@ void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_butt String name = _validate_name("new_function"); selected = name; - edited_func = selected; + Vector2 ofs = _get_available_pos(); Ref<VisualScriptFunction> func_node; func_node.instance(); @@ -1026,7 +1298,7 @@ void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_butt undo_redo->create_action(TTR("Add Function")); undo_redo->add_do_method(script.ptr(), "add_function", name); - undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id(), func_node); + undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id(), func_node, ofs); undo_redo->add_undo_method(script.ptr(), "remove_function", name); undo_redo->add_do_method(this, "_update_members"); undo_redo->add_undo_method(this, "_update_members"); @@ -1073,135 +1345,193 @@ void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_butt undo_redo->commit_action(); return; //or crash because it will become invalid } + } else if (ti->get_parent() == root->get_children()) { + selected = ti->get_text(0); + function_name_edit->set_position(Input::get_singleton()->get_mouse_position() - Vector2(60, -10)); + function_name_edit->popup(); + function_name_box->set_text(selected); + function_name_box->select_all(); } } -void VisualScriptEditor::_expression_text_changed(const String &p_text, int p_id) { +void VisualScriptEditor::_add_input_port(int p_id) { - Ref<VisualScriptExpression> vse = script->get_node(edited_func, p_id); - if (!vse.is_valid()) + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) return; updating_graph = true; - undo_redo->create_action(TTR("Change Expression"), UndoRedo::MERGE_ENDS); - undo_redo->add_do_property(vse.ptr(), "expression", p_text); - undo_redo->add_undo_property(vse.ptr(), "expression", vse->get("expression")); + undo_redo->create_action(TTR("Add Input Port"), UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(vsn.ptr(), "add_input_data_port", Variant::NIL, "arg", -1); undo_redo->add_do_method(this, "_update_graph", p_id); + + undo_redo->add_undo_method(vsn.ptr(), "remove_input_data_port", vsn->get_input_value_port_count()); undo_redo->add_undo_method(this, "_update_graph", p_id); + + updating_graph = false; + undo_redo->commit_action(); +} - Node *node = graph->get_node(itos(p_id)); - if (Object::cast_to<Control>(node)) - Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); //shrink if text is smaller +void VisualScriptEditor::_add_output_port(int p_id) { + + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) + return; + + updating_graph = true; + + undo_redo->create_action(TTR("Add Output Port"), UndoRedo::MERGE_ENDS); + undo_redo->add_do_method(vsn.ptr(), "add_output_data_port", Variant::NIL, "arg", -1); + undo_redo->add_do_method(this, "_update_graph", p_id); + + undo_redo->add_undo_method(vsn.ptr(), "remove_output_data_port", vsn->get_output_value_port_count()); + undo_redo->add_undo_method(this, "_update_graph", p_id); updating_graph = false; + + undo_redo->commit_action(); } -void VisualScriptEditor::_available_node_doubleclicked() { +void VisualScriptEditor::_remove_input_port(int p_id, int p_port) { - if (edited_func == String()) + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) return; - TreeItem *item = nodes->get_selected(); + updating_graph = true; - if (!item) - return; + undo_redo->create_action(TTR("Remove Input Port"), UndoRedo::MERGE_ENDS); + + int conn_from = -1, conn_port = -1; + script->get_input_value_port_connection_source(func, p_id, p_port, &conn_from, &conn_port); + + if (conn_from != -1) + undo_redo->add_do_method(script.ptr(), "data_disconnect", func, conn_from, conn_port, p_id, p_port); + + undo_redo->add_do_method(vsn.ptr(), "remove_input_data_port", p_port); + undo_redo->add_do_method(this, "_update_graph", p_id); + + if (conn_from != -1) + undo_redo->add_undo_method(script.ptr(), "data_connect", func, conn_from, conn_port, p_id, p_port); + + undo_redo->add_undo_method(vsn.ptr(), "add_input_data_port", vsn->get_input_value_port_info(p_port).type, vsn->get_input_value_port_info(p_port).name, p_port); + undo_redo->add_undo_method(this, "_update_graph", p_id); + + updating_graph = false; - String which = item->get_metadata(0); - if (which == String()) + undo_redo->commit_action(); +} + +void VisualScriptEditor::_remove_output_port(int p_id, int p_port) { + + StringName func = _get_function_of_node(p_id); + + Ref<VisualScriptLists> vsn = script->get_node(func, p_id); + if (!vsn.is_valid()) return; - Vector2 ofs = graph->get_scroll_ofs() + graph->get_size() * 0.5; - if (graph->is_using_snap()) { - int snap = graph->get_snap(); - ofs = ofs.snapped(Vector2(snap, snap)); - } + updating_graph = true; - ofs /= EDSCALE; + undo_redo->create_action(TTR("Remove Output Port"), UndoRedo::MERGE_ENDS); - while (true) { - bool exists = false; - List<int> existing; - script->get_node_list(edited_func, &existing); - for (List<int>::Element *E = existing.front(); E; E = E->next()) { - Point2 pos = script->get_node_position(edited_func, E->get()); - if (pos.distance_to(ofs) < 15) { - ofs += Vector2(graph->get_snap(), graph->get_snap()); - exists = true; - break; - } + List<VisualScript::DataConnection> data_connections; + script->get_data_connection_list(func, &data_connections); + + HashMap<int, Set<int> > conn_map; + for (const List<VisualScript::DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { + if (E->get().from_node == p_id && E->get().from_port == p_port) { + // push into the connections map + if (!conn_map.has(E->get().to_node)) + conn_map.set(E->get().to_node, Set<int>()); + conn_map[E->get().to_node].insert(E->get().to_port); } + } - if (exists) - continue; - break; + undo_redo->add_do_method(vsn.ptr(), "remove_output_data_port", p_port); + undo_redo->add_do_method(this, "_update_graph", p_id); + + List<int> keys; + conn_map.get_key_list(&keys); + for (const List<int>::Element *E = keys.front(); E; E = E->next()) { + for (const Set<int>::Element *F = conn_map[E->get()].front(); F; F = F->next()) { + undo_redo->add_undo_method(script.ptr(), "data_connect", func, p_id, p_port, E->get(), F->get()); + } } - Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(which); - int new_id = script->get_available_id(); + undo_redo->add_undo_method(vsn.ptr(), "add_output_data_port", vsn->get_output_value_port_info(p_port).type, vsn->get_output_value_port_info(p_port).name, p_port); + undo_redo->add_undo_method(this, "_update_graph", p_id); - undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); - undo_redo->add_do_method(this, "_update_graph"); - undo_redo->add_undo_method(this, "_update_graph"); - undo_redo->commit_action(); + updating_graph = false; - Node *node = graph->get_node(itos(new_id)); - if (node) { - graph->set_selected(node); - _node_selected(node); - } + undo_redo->commit_action(); } -void VisualScriptEditor::_update_available_nodes() { +void VisualScriptEditor::_expression_text_changed(const String &p_text, int p_id) { - nodes->clear(); + StringName func = _get_function_of_node(p_id); - TreeItem *root = nodes->create_item(); + Ref<VisualScriptExpression> vse = script->get_node(func, p_id); + if (!vse.is_valid()) + return; - Map<String, TreeItem *> path_cache; + updating_graph = true; - String filter = node_filter->get_text(); + undo_redo->create_action(TTR("Change Expression"), UndoRedo::MERGE_ENDS); + undo_redo->add_do_property(vse.ptr(), "expression", p_text); + undo_redo->add_undo_property(vse.ptr(), "expression", vse->get("expression")); + undo_redo->add_do_method(this, "_update_graph", p_id); + undo_redo->add_undo_method(this, "_update_graph", p_id); + undo_redo->commit_action(); + + Node *node = graph->get_node(itos(p_id)); + if (Object::cast_to<Control>(node)) + Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); //shrink if text is smaller - List<String> fnodes; - VisualScriptLanguage::singleton->get_registered_node_names(&fnodes); + updating_graph = false; +} - for (List<String>::Element *E = fnodes.front(); E; E = E->next()) { +Vector2 VisualScriptEditor::_get_available_pos(bool centered, Vector2 ofs) const { + if (centered) + ofs = graph->get_scroll_ofs() + graph->get_size() * 0.5; - Vector<String> path = E->get().split("/"); + if (graph->is_using_snap()) { + int snap = graph->get_snap(); + ofs = ofs.snapped(Vector2(snap, snap)); + } - if (filter != String() && path.size() && path[path.size() - 1].findn(filter) == -1) - continue; + ofs /= EDSCALE; - String sp; - TreeItem *parent = root; - - for (int i = 0; i < path.size() - 1; i++) { - - if (i > 0) - sp += ","; - sp += path[i]; - if (!path_cache.has(sp)) { - TreeItem *pathn = nodes->create_item(parent); - pathn->set_selectable(0, false); - pathn->set_text(0, path[i].capitalize()); - path_cache[sp] = pathn; - parent = pathn; - if (filter == String()) { - pathn->set_collapsed(true); //should remember state + while (true) { + bool exists = false; + List<StringName> all_fn; + script->get_function_list(&all_fn); + for (List<StringName>::Element *F = all_fn.front(); F; F = F->next()) { + StringName curr_fn = F->get(); + List<int> existing; + script->get_node_list(curr_fn, &existing); + for (List<int>::Element *E = existing.front(); E; E = E->next()) { + Point2 pos = script->get_node_position(curr_fn, E->get()); + if (pos.distance_to(ofs) < 50) { + ofs += Vector2(graph->get_snap(), graph->get_snap()); + exists = true; + break; } - } else { - parent = path_cache[sp]; } } - - TreeItem *item = nodes->create_item(parent); - item->set_text(0, path[path.size() - 1].capitalize()); - item->set_selectable(0, true); - item->set_metadata(0, E->get()); + if (exists) + continue; + break; } + + return ofs; } String VisualScriptEditor::_validate_name(const String &p_name) const { @@ -1227,6 +1557,8 @@ String VisualScriptEditor::_validate_name(const String &p_name) const { void VisualScriptEditor::_on_nodes_delete() { + // delete all the selected nodes + List<int> to_erase; for (int i = 0; i < graph->get_child_count(); i++) { @@ -1245,26 +1577,30 @@ void VisualScriptEditor::_on_nodes_delete() { for (List<int>::Element *F = to_erase.front(); F; F = F->next()) { - undo_redo->add_do_method(script.ptr(), "remove_node", edited_func, F->get()); - undo_redo->add_undo_method(script.ptr(), "add_node", edited_func, F->get(), script->get_node(edited_func, F->get()), script->get_node_position(edited_func, F->get())); + int cr_node = F->get(); + + StringName func = _get_function_of_node(cr_node); + + undo_redo->add_do_method(script.ptr(), "remove_node", func, cr_node); + undo_redo->add_undo_method(script.ptr(), "add_node", func, cr_node, script->get_node(func, cr_node), script->get_node_position(func, cr_node)); List<VisualScript::SequenceConnection> sequence_conns; - script->get_sequence_connection_list(edited_func, &sequence_conns); + script->get_sequence_connection_list(func, &sequence_conns); for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { - if (E->get().from_node == F->get() || E->get().to_node == F->get()) { - undo_redo->add_undo_method(script.ptr(), "sequence_connect", edited_func, E->get().from_node, E->get().from_output, E->get().to_node); + if (E->get().from_node == cr_node || E->get().to_node == cr_node) { + undo_redo->add_undo_method(script.ptr(), "sequence_connect", func, E->get().from_node, E->get().from_output, E->get().to_node); } } List<VisualScript::DataConnection> data_conns; - script->get_data_connection_list(edited_func, &data_conns); + script->get_data_connection_list(func, &data_conns); for (List<VisualScript::DataConnection>::Element *E = data_conns.front(); E; E = E->next()) { if (E->get().from_node == F->get() || E->get().to_node == F->get()) { - undo_redo->add_undo_method(script.ptr(), "data_connect", edited_func, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", func, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); } } } @@ -1276,13 +1612,16 @@ void VisualScriptEditor::_on_nodes_delete() { void VisualScriptEditor::_on_nodes_duplicate() { - List<int> to_duplicate; + Set<int> to_duplicate; + List<StringName> funcs; for (int i = 0; i < graph->get_child_count(); i++) { GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i)); if (gn) { if (gn->is_selected() && gn->is_close_button_visible()) { - to_duplicate.push_back(gn->get_name().operator String().to_int()); + int id = gn->get_name().operator String().to_int(); + to_duplicate.insert(id); + funcs.push_back(_get_function_of_node(id)); } } } @@ -1294,18 +1633,42 @@ void VisualScriptEditor::_on_nodes_duplicate() { int idc = script->get_available_id() + 1; Set<int> to_select; + HashMap<int, int> remap; - for (List<int>::Element *F = to_duplicate.front(); F; F = F->next()) { + for (Set<int>::Element *F = to_duplicate.front(); F; F = F->next()) { - Ref<VisualScriptNode> node = script->get_node(edited_func, F->get()); + // duplicate from the specifc function but place it into the default func as it would lack the connections + StringName func = _get_function_of_node(F->get()); + Ref<VisualScriptNode> node = script->get_node(func, F->get()); Ref<VisualScriptNode> dupe = node->duplicate(true); int new_id = idc++; + remap.set(F->get(), new_id); + to_select.insert(new_id); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, dupe, script->get_node_position(edited_func, F->get()) + Vector2(20, 20)); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, dupe, script->get_node_position(func, F->get()) + Vector2(20, 20)); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); } + + for (List<StringName>::Element *F = funcs.front(); F; F = F->next()) { + List<VisualScript::SequenceConnection> seqs; + script->get_sequence_connection_list(F->get(), &seqs); + for (List<VisualScript::SequenceConnection>::Element *E = seqs.front(); E; E = E->next()) { + if (to_duplicate.has(E->get().from_node) && to_duplicate.has(E->get().to_node)) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", default_func, remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); + } + } + + List<VisualScript::DataConnection> data; + script->get_data_connection_list(F->get(), &data); + for (List<VisualScript::DataConnection>::Element *E = data.front(); E; E = E->next()) { + if (to_duplicate.has(E->get().from_node) && to_duplicate.has(E->get().to_node)) { + undo_redo->add_do_method(script.ptr(), "data_connect", default_func, remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); + } + } + } + undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); @@ -1320,22 +1683,45 @@ void VisualScriptEditor::_on_nodes_duplicate() { } if (to_select.size()) { - EditorNode::get_singleton()->push_item(script->get_node(edited_func, to_select.front()->get()).ptr()); + EditorNode::get_singleton()->push_item(script->get_node(default_func, to_select.front()->get()).ptr()); } } -void VisualScriptEditor::_input(const Ref<InputEvent> &p_event) { +void VisualScriptEditor::_generic_search(String p_base_type, Vector2 pos, bool node_centered) { + if (node_centered) + port_action_pos = graph->get_size() / 2.0f; + else + port_action_pos = graph->get_viewport()->get_mouse_position() - graph->get_global_position(); - Ref<InputEventMouseButton> mb = p_event; + new_connect_node_select->select_from_visual_script(p_base_type, false, false); // neither connecting nor reset text - if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { - revert_on_drag = String(); //so we can still drag functions + // ensure that the dialog fits inside the graph + Size2 bounds = graph->get_global_position() + graph->get_size() - new_connect_node_select->get_size(); + pos.x = pos.x > bounds.x ? bounds.x : pos.x; + pos.y = pos.y > bounds.y ? bounds.y : pos.y; + + if (pos != Vector2()) + new_connect_node_select->set_position(pos); +} + +void VisualScriptEditor::_input(const Ref<InputEvent> &p_event) { + // GUI input for VS Editor Plugin + Ref<InputEventMouseButton> key = p_event; + + if (key.is_valid() && !key->is_pressed()) { + mouse_up_position = Input::get_singleton()->get_mouse_position(); } } -void VisualScriptEditor::_generic_search(String p_base_type) { - port_action_pos = graph->get_viewport()->get_mouse_position() - graph->get_global_position(); - new_connect_node_select->select_from_visual_script(p_base_type, false); +void VisualScriptEditor::_graph_gui_input(const Ref<InputEvent> &p_event) { + Ref<InputEventMouseButton> key = p_event; + + if (key.is_valid() && key->is_pressed() && key->get_button_mask() == BUTTON_RIGHT) { + saved_position = graph->get_local_mouse_position(); + + Point2 gpos = Input::get_singleton()->get_mouse_position(); + _generic_search(script->get_instance_base_type(), gpos); + } } void VisualScriptEditor::_members_gui_input(const Ref<InputEvent> &p_event) { @@ -1365,28 +1751,82 @@ void VisualScriptEditor::_members_gui_input(const Ref<InputEvent> &p_event) { } } } + + Ref<InputEventMouseButton> btn = p_event; + if (btn.is_valid() && btn->is_doubleclick()) { + TreeItem *ti = members->get_selected(); + if (ti && ti->get_parent() == members->get_root()->get_children()) // to check if it's a function + _center_on_node(ti->get_metadata(0), script->get_function_node_id(ti->get_metadata(0))); + } } -Variant VisualScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { +void VisualScriptEditor::_rename_function(const String &name, const String &new_name) { - if (p_from == nodes) { + if (!new_name.is_valid_identifier()) { - TreeItem *it = nodes->get_item_at_position(p_point); - if (!it) - return Variant(); - String type = it->get_metadata(0); - if (type == String()) - return Variant(); + EditorNode::get_singleton()->show_warning(TTR("Name is not a valid identifier:") + " " + new_name); + return; + } - Dictionary dd; - dd["type"] = "visual_script_node_drag"; - dd["node_type"] = type; + if (script->has_function(new_name) || script->has_variable(new_name) || script->has_custom_signal(new_name)) { - Label *label = memnew(Label); - label->set_text(it->get_text(0)); - set_drag_preview(label); - return dd; + EditorNode::get_singleton()->show_warning(TTR("Name already in use by another func/var/signal:") + " " + new_name); + return; + } + + int node_id = script->get_function_node_id(name); + Ref<VisualScriptFunction> func; + if (script->has_node(name, node_id)) { + func = script->get_node(name, node_id); + } + undo_redo->create_action(TTR("Rename Function")); + undo_redo->add_do_method(script.ptr(), "rename_function", name, new_name); + undo_redo->add_undo_method(script.ptr(), "rename_function", new_name, name); + if (func.is_valid()) { + undo_redo->add_do_method(func.ptr(), "set_name", new_name); + undo_redo->add_undo_method(func.ptr(), "set_name", name); + } + + // also fix all function calls + List<StringName> flst; + script->get_function_list(&flst); + for (List<StringName>::Element *E = flst.front(); E; E = E->next()) { + List<int> lst; + script->get_node_list(E->get(), &lst); + for (List<int>::Element *F = lst.front(); F; F = F->next()) { + Ref<VisualScriptFunctionCall> fncall = script->get_node(E->get(), F->get()); + if (!fncall.is_valid()) + continue; + if (fncall->get_function() == name) { + undo_redo->add_do_method(fncall.ptr(), "set_function", new_name); + undo_redo->add_undo_method(fncall.ptr(), "set_function", name); + } + } + } + + undo_redo->add_do_method(this, "_update_members"); + undo_redo->add_undo_method(this, "_update_members"); + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + undo_redo->add_do_method(this, "emit_signal", "edited_script_changed"); + undo_redo->add_undo_method(this, "emit_signal", "edited_script_changed"); + undo_redo->commit_action(); +} + +void VisualScriptEditor::_fn_name_box_input(const Ref<InputEvent> &p_event) { + + if (!function_name_edit->is_visible()) + return; + + Ref<InputEventKey> key = p_event; + if (key.is_valid() && key->is_pressed() && key->get_scancode() == KEY_ENTER) { + function_name_edit->hide(); + _rename_function(selected, function_name_box->get_text()); + function_name_box->clear(); } +} + +Variant VisualScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from) { if (p_from == members) { @@ -1406,11 +1846,6 @@ Variant VisualScriptEditor::get_drag_data_fw(const Point2 &p_point, Control *p_f dd["type"] = "visual_script_function_drag"; dd["function"] = type; - if (revert_on_drag != String()) { - edited_func = revert_on_drag; //revert so function does not change - revert_on_drag = String(); - _update_graph(); - } } else if (it->get_parent() == root->get_children()->get_next()) { dd["type"] = "visual_script_variable_drag"; @@ -1481,8 +1916,6 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2 &p_point, const Variant & return false; } -#ifdef TOOLS_ENABLED - static Node *_find_script_node(Node *p_edited_scene, Node *p_current_node, const Ref<Script> &script) { if (p_edited_scene != p_current_node && p_current_node->get_owner() != p_edited_scene) @@ -1502,8 +1935,6 @@ static Node *_find_script_node(Node *p_edited_scene, Node *p_current_node, const return NULL; } -#endif - void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) { if (p_from != graph) { @@ -1530,15 +1961,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da ofs /= EDSCALE; - Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(d["node_type"]); - int new_id = script->get_available_id(); - - undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); - undo_redo->add_do_method(this, "_update_graph"); - undo_redo->add_undo_method(this, "_update_graph"); - undo_redo->commit_action(); + int new_id = _create_new_node_from_name(d["node_type"], ofs, default_func); Node *node = graph->get_node(itos(new_id)); if (node) { @@ -1579,8 +2002,8 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da int new_id = script->get_available_id(); undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, vnode, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); @@ -1609,11 +2032,11 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da int new_id = script->get_available_id(); undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, vnode, ofs); undo_redo->add_do_method(vnode.ptr(), "set_base_type", script->get_instance_base_type()); undo_redo->add_do_method(vnode.ptr(), "set_function", d["function"]); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); @@ -1642,8 +2065,8 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da int new_id = script->get_available_id(); undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, vnode, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); @@ -1672,8 +2095,8 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da int new_id = script->get_available_id(); undo_redo->create_action(TTR("Add Preload Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, prnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, prnode, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); @@ -1713,8 +2136,8 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da prnode.instance(); prnode->set_preload(res); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, prnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, prnode, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); new_ids.push_back(new_id); new_id++; ofs += Vector2(20, 20) * EDSCALE; @@ -1740,7 +2163,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da Node *sn = _find_script_node(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root(), script); if (!sn) { - EditorNode::get_singleton()->show_warning("Can't drop nodes because script '" + get_name() + "' is not used in this scene."); + EditorNode::get_singleton()->show_warning(vformat(TTR("Can't drop nodes because script '%s' is not used in this scene."), get_name())); return; } @@ -1782,20 +2205,20 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da scene_node.instance(); scene_node->set_node_path(sn->get_path_to(node)); n = scene_node; - } else { + // ! Doesn't work properly Ref<VisualScriptFunctionCall> call; call.instance(); call->set_call_mode(VisualScriptFunctionCall::CALL_MODE_NODE_PATH); call->set_base_path(sn->get_path_to(node)); call->set_base_type(node->get_class()); n = call; - method_select->select_from_instance(node); + method_select->select_from_instance(node, "", true, node->get_class()); selecting_method_id = base_id; } - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, base_id, n, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, base_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, base_id, n, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, base_id); base_id++; ofs += Vector2(25, 25); @@ -1810,7 +2233,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da Node *sn = _find_script_node(get_tree()->get_edited_scene_root(), get_tree()->get_edited_scene_root(), script); if (!sn && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) { - EditorNode::get_singleton()->show_warning("Can't drop properties because script '" + get_name() + "' is not used in this scene.\nDrop holding 'Shift' to just copy the signature."); + EditorNode::get_singleton()->show_warning(vformat(TTR("Can't drop properties because script '%s' is not used in this scene.\nDrop holding 'Shift' to just copy the signature."), get_name())); return; } @@ -1866,13 +2289,13 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da vnode = pget; } - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, base_id, vnode, ofs); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, base_id, vnode, ofs); undo_redo->add_do_method(vnode.ptr(), "set_property", d["property"]); if (!use_get) { undo_redo->add_do_method(vnode.ptr(), "set_default_input_value", 0, d["value"]); } - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, base_id); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, base_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); @@ -1913,12 +2336,12 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da } vnode = pget; } - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, base_id, vnode, ofs); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, base_id, vnode, ofs); undo_redo->add_do_method(vnode.ptr(), "set_property", d["property"]); if (!use_get) { undo_redo->add_do_method(vnode.ptr(), "set_default_input_value", 0, d["value"]); } - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, base_id); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, base_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); @@ -1929,7 +2352,7 @@ void VisualScriptEditor::drop_data_fw(const Point2 &p_point, const Variant &p_da void VisualScriptEditor::_selected_method(const String &p_method, const String &p_type, const bool p_connecting) { - Ref<VisualScriptFunctionCall> vsfc = script->get_node(edited_func, selecting_method_id); + Ref<VisualScriptFunctionCall> vsfc = script->get_node(default_func, selecting_method_id); if (!vsfc.is_valid()) return; vsfc->set_function(p_method); @@ -1986,8 +2409,16 @@ void VisualScriptEditor::set_edited_resource(const RES &p_res) { script->connect("node_ports_changed", this, "_node_ports_changed"); + default_func = script->get_default_func(); + + if (!script->has_function(default_func)) // this is the supposed default function + { + script->add_function(default_func); + script->set_edited(true); //so that if a function was added it's saved + } + + _update_graph(); _update_members(); - _update_available_nodes(); } Vector<String> VisualScriptEditor::get_functions() { @@ -2021,18 +2452,14 @@ Ref<Texture> VisualScriptEditor::get_icon() { } bool VisualScriptEditor::is_unsaved() { -#ifdef TOOLS_ENABLED return script->is_edited() || script->are_subnodes_edited(); -#else - return false; -#endif } Variant VisualScriptEditor::get_edit_state() { Dictionary d; - d["function"] = edited_func; + d["function"] = default_func; d["scroll"] = graph->get_scroll_ofs(); d["zoom"] = graph->get_zoom(); d["using_snap"] = graph->is_using_snap(); @@ -2044,8 +2471,7 @@ void VisualScriptEditor::set_edit_state(const Variant &p_state) { Dictionary d = p_state; if (d.has("function")) { - edited_func = d["function"]; - selected = edited_func; + selected = default_func; } _update_graph(); @@ -2065,16 +2491,24 @@ void VisualScriptEditor::set_edit_state(const Variant &p_state) { } } -void VisualScriptEditor::_center_on_node(int p_id) { +void VisualScriptEditor::_center_on_node(const StringName &p_func, int p_id) { Node *n = graph->get_node(itos(p_id)); GraphNode *gn = Object::cast_to<GraphNode>(n); + + // clear selection + for (int i = 0; i < graph->get_child_count(); i++) { + GraphNode *gnd = Object::cast_to<GraphNode>(graph->get_child(i)); + if (gnd) + gnd->set_selected(false); + } + if (gn) { gn->set_selected(true); Vector2 new_scroll = gn->get_offset() - graph->get_size() * 0.5 + gn->get_size() * 0.5; graph->set_scroll_ofs(new_scroll); - script->set_function_scroll(edited_func, new_scroll / EDSCALE); - script->set_edited(true); //so it's saved + script->set_function_scroll(p_func, new_scroll / EDSCALE); + script->set_edited(true); } } @@ -2091,13 +2525,10 @@ void VisualScriptEditor::goto_line(int p_line, bool p_with_error) { if (script->has_node(E->get(), p_line)) { - edited_func = E->get(); - selected = edited_func; _update_graph(); _update_members(); - call_deferred("call_deferred", "_center_on_node", p_line); //editor might be just created and size might not exist yet - + call_deferred("call_deferred", "_center_on_node", E->get(), p_line); //editor might be just created and size might not exist yet return; } } @@ -2132,6 +2563,7 @@ void VisualScriptEditor::tag_saved_version() { } void VisualScriptEditor::reload(bool p_soft) { + _update_graph(); } void VisualScriptEditor::get_breakpoints(List<int> *p_breakpoints) { @@ -2155,10 +2587,9 @@ void VisualScriptEditor::get_breakpoints(List<int> *p_breakpoints) { void VisualScriptEditor::add_callback(const String &p_function, PoolStringArray p_args) { if (script->has_function(p_function)) { - edited_func = p_function; - selected = edited_func; _update_members(); _update_graph(); + _center_on_node(p_function, script->get_function_node_id(p_function)); return; } @@ -2189,13 +2620,10 @@ void VisualScriptEditor::add_callback(const String &p_function, PoolStringArray script->add_function(p_function); script->add_node(p_function, script->get_available_id(), func); - edited_func = p_function; - selected = edited_func; _update_members(); _update_graph(); - graph->call_deferred("set_scroll_ofs", script->get_function_scroll(edited_func)); //for first time it might need to be later - //undo_redo->clear_history(); + _center_on_node(p_function, script->get_function_node_id(p_function)); } bool VisualScriptEditor::show_members_overview() { @@ -2227,9 +2655,13 @@ void VisualScriptEditor::_change_base_type() { select_base_type->popup_create(true, true); } +void VisualScriptEditor::_toggle_tool_script() { + script->set_tool_enabled(!script->is_tool()); +} + void VisualScriptEditor::clear_edit_menu() { memdelete(edit_menu); - memdelete(left_vsplit); + memdelete(members_section); } void VisualScriptEditor::_change_base_type_callback() { @@ -2293,46 +2725,66 @@ void VisualScriptEditor::_end_node_move() { undo_redo->commit_action(); } -void VisualScriptEditor::_move_node(String func, int p_id, const Vector2 &p_to) { +void VisualScriptEditor::_move_node(const StringName &p_func, int p_id, const Vector2 &p_to) { + + if (!script->has_function(p_func)) + return; + + Node *node = graph->get_node(itos(p_id)); + + if (Object::cast_to<GraphNode>(node)) + Object::cast_to<GraphNode>(node)->set_offset(p_to); - if (func == String(edited_func)) { - Node *node = graph->get_node(itos(p_id)); - if (Object::cast_to<GraphNode>(node)) - Object::cast_to<GraphNode>(node)->set_offset(p_to); + script->set_node_position(p_func, p_id, p_to / EDSCALE); +} + +StringName VisualScriptEditor::_get_function_of_node(int p_id) const { + + List<StringName> funcs; + script->get_function_list(&funcs); + for (List<StringName>::Element *E = funcs.front(); E; E = E->next()) { + if (script->has_node(E->get(), p_id)) { + return E->get(); + } } - script->set_node_position(edited_func, p_id, p_to / EDSCALE); + + return ""; // this is passed to avoid crash and is tested against later } void VisualScriptEditor::_node_moved(Vector2 p_from, Vector2 p_to, int p_id) { - undo_redo->add_do_method(this, "_move_node", String(edited_func), p_id, p_to); - undo_redo->add_undo_method(this, "_move_node", String(edited_func), p_id, p_from); + StringName func = _get_function_of_node(p_id); + + undo_redo->add_do_method(this, "_move_node", func, p_id, p_to); + undo_redo->add_undo_method(this, "_move_node", func, p_id, p_from); } void VisualScriptEditor::_remove_node(int p_id) { undo_redo->create_action(TTR("Remove VisualScript Node")); - undo_redo->add_do_method(script.ptr(), "remove_node", edited_func, p_id); - undo_redo->add_undo_method(script.ptr(), "add_node", edited_func, p_id, script->get_node(edited_func, p_id), script->get_node_position(edited_func, p_id)); + StringName func = _get_function_of_node(p_id); + + undo_redo->add_do_method(script.ptr(), "remove_node", func, p_id); + undo_redo->add_undo_method(script.ptr(), "add_node", func, p_id, script->get_node(func, p_id), script->get_node_position(func, p_id)); List<VisualScript::SequenceConnection> sequence_conns; - script->get_sequence_connection_list(edited_func, &sequence_conns); + script->get_sequence_connection_list(func, &sequence_conns); for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { if (E->get().from_node == p_id || E->get().to_node == p_id) { - undo_redo->add_undo_method(script.ptr(), "sequence_connect", edited_func, E->get().from_node, E->get().from_output, E->get().to_node); + undo_redo->add_undo_method(script.ptr(), "sequence_connect", func, E->get().from_node, E->get().from_output, E->get().to_node); } } List<VisualScript::DataConnection> data_conns; - script->get_data_connection_list(edited_func, &data_conns); + script->get_data_connection_list(func, &data_conns); for (List<VisualScript::DataConnection>::Element *E = data_conns.front(); E; E = E->next()) { if (E->get().from_node == p_id || E->get().to_node == p_id) { - undo_redo->add_undo_method(script.ptr(), "data_connect", edited_func, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", func, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); } } @@ -2344,15 +2796,29 @@ void VisualScriptEditor::_remove_node(int p_id) { void VisualScriptEditor::_node_ports_changed(const String &p_func, int p_id) { - if (p_func != String(edited_func)) - return; - _update_graph(p_id); } +bool VisualScriptEditor::node_has_sequence_connections(const StringName &p_func, int p_id) { + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(p_func, &sequence_conns); + + for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { + int from = E->get().from_node; + int to = E->get().to_node; + + if (to == p_id || from == p_id) + return true; + } + + return false; +} + void VisualScriptEditor::_graph_connected(const String &p_from, int p_from_slot, const String &p_to, int p_to_slot) { - Ref<VisualScriptNode> from_node = script->get_node(edited_func, p_from.to_int()); + StringName from_func = _get_function_of_node(p_from.to_int()); + + Ref<VisualScriptNode> from_node = script->get_node(from_func, p_from.to_int()); ERR_FAIL_COND(!from_node.is_valid()); bool from_seq; @@ -2361,7 +2827,9 @@ void VisualScriptEditor::_graph_connected(const String &p_from, int p_from_slot, if (!_get_out_slot(from_node, p_from_slot, from_port, from_seq)) return; //can't connect this, it's invalid - Ref<VisualScriptNode> to_node = script->get_node(edited_func, p_to.to_int()); + StringName to_func = _get_function_of_node(p_to.to_int()); + + Ref<VisualScriptNode> to_node = script->get_node(to_func, p_to.to_int()); ERR_FAIL_COND(!to_node.is_valid()); bool to_seq; @@ -2372,29 +2840,170 @@ void VisualScriptEditor::_graph_connected(const String &p_from, int p_from_slot, ERR_FAIL_COND(from_seq != to_seq); + // Do all the checks here + StringName func; // this the func where we store the one the nodes at the end of the resolution on having multiple nodes + undo_redo->create_action(TTR("Connect Nodes")); + if (from_func == to_func) { + func = to_func; + } else if (from_seq) { + // this is a sequence connection + _move_nodes_with_rescan(to_func, from_func, p_to.to_int()); // this function moves the nodes from func1 to func2 + func = from_func; + } else { + if (node_has_sequence_connections(to_func, p_to.to_int())) { + if (node_has_sequence_connections(from_func, p_from.to_int())) { + ERR_PRINT("Trying to connect between different sequence node trees"); + return; + } else { + _move_nodes_with_rescan(from_func, to_func, p_from.to_int()); + func = to_func; + } + } else if (node_has_sequence_connections(from_func, p_from.to_int())) { + if (from_func == default_func) { + _move_nodes_with_rescan(from_func, to_func, p_from.to_int()); + func = to_func; + } else { + _move_nodes_with_rescan(to_func, from_func, p_to.to_int()); + func = from_func; + } + } else { + if (to_func == default_func) { + _move_nodes_with_rescan(to_func, from_func, p_to.to_int()); + func = from_func; + } else { + _move_nodes_with_rescan(from_func, to_func, p_from.to_int()); + func = to_func; + } + } + } + if (from_seq) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, p_from.to_int(), from_port, p_to.to_int()); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, p_from.to_int(), from_port, p_to.to_int()); + undo_redo->add_do_method(script.ptr(), "sequence_connect", func, p_from.to_int(), from_port, p_to.to_int()); + // this undo error on undo after move can't be removed without painful gymnastics + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", func, p_from.to_int(), from_port, p_to.to_int()); } else { + bool converted = false; + int conv_node = -1; + + Ref<VisualScriptOperator> oper = to_node; + if (oper.is_valid() && oper->get_typed() == Variant::NIL) { + // it's an operator Node and if the type is already nil + if (from_node->get_output_value_port_info(from_port).type != Variant::NIL) { + oper->set_typed(from_node->get_output_value_port_info(from_port).type); + } + } - // disconnect current, and connect the new one - if (script->is_input_value_port_connected(edited_func, p_to.to_int(), to_port)) { - int conn_from; - int conn_port; - script->get_input_value_port_connection_source(edited_func, p_to.to_int(), to_port, &conn_from, &conn_port); - undo_redo->add_do_method(script.ptr(), "data_disconnect", edited_func, conn_from, conn_port, p_to.to_int(), to_port); - undo_redo->add_undo_method(script.ptr(), "data_connect", edited_func, conn_from, conn_port, p_to.to_int(), to_port); + Ref<VisualScriptOperator> operf = from_node; + if (operf.is_valid() && operf->get_typed() == Variant::NIL) { + // it's an operator Node and if the type is already nil + if (to_node->get_input_value_port_info(to_port).type != Variant::NIL) { + operf->set_typed(to_node->get_input_value_port_info(to_port).type); + } } - undo_redo->add_do_method(script.ptr(), "data_connect", edited_func, p_from.to_int(), from_port, p_to.to_int(), to_port); - undo_redo->add_undo_method(script.ptr(), "data_disconnect", edited_func, p_from.to_int(), from_port, p_to.to_int(), to_port); - //update nodes in sgraph - undo_redo->add_do_method(this, "_update_graph", p_from.to_int()); - undo_redo->add_do_method(this, "_update_graph", p_to.to_int()); - undo_redo->add_undo_method(this, "_update_graph", p_from.to_int()); - undo_redo->add_undo_method(this, "_update_graph", p_to.to_int()); + Variant::Type to_type = to_node->get_input_value_port_info(to_port).type; + Variant::Type from_type = from_node->get_output_value_port_info(from_port).type; + + if (to_type != Variant::NIL && from_type != Variant::NIL && to_type != from_type) { + // add a constructor node between the ports + bool exceptions = false; // true if there are any exceptions + exceptions = exceptions || (to_type == Variant::INT && from_type == Variant::REAL); + exceptions = exceptions || (to_type == Variant::REAL && from_type == Variant::INT); + if (Variant::can_convert(from_type, to_type) && !exceptions) { + MethodInfo mi; + mi.name = Variant::get_type_name(to_type); + PropertyInfo pi; + pi.name = "from"; + pi.type = from_type; + mi.arguments.push_back(pi); + mi.return_val.type = to_type; + // we know that this is allowed so create a new constructor node + Ref<VisualScriptConstructor> constructor; + constructor.instance(); + constructor->set_constructor_type(to_type); + constructor->set_constructor(mi); + // add the new constructor node + + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_node(p_from)); + GraphNode *gn2 = Object::cast_to<GraphNode>(graph->get_node(p_to)); + if (gn && gn2) { + Vector2 from_node_size = gn->get_rect().get_size(); + Vector2 to_node_size = gn2->get_rect().get_size(); + Vector2 to_node_pos = script->get_node_position(func, p_to.to_int()); + Vector2 from_node_pos = script->get_node_position(func, p_from.to_int()); + Vector2 new_to_node_pos = from_node_pos; + Vector2 constructor_pos; + if ((to_node_pos.x - from_node_pos.x) < 0) { + // to is behind from node + if (to_node_pos.x > (from_node_pos.x - to_node_size.x - 240)) + new_to_node_pos.x = from_node_pos.x - to_node_size.x - 240; // approx size of construtor node + padding + else + new_to_node_pos.x = to_node_pos.x; + new_to_node_pos.y = to_node_pos.y; + constructor_pos.x = from_node_pos.x - 210; + constructor_pos.y = to_node_pos.y; + } else { + // to is ahead of from node + if (to_node_pos.x < (from_node_size.x + from_node_pos.x + 240)) + new_to_node_pos.x = from_node_size.x + from_node_pos.x + 240; // approx size of construtor node + padding + else + new_to_node_pos.x = to_node_pos.x; + new_to_node_pos.y = to_node_pos.y; + constructor_pos.x = from_node_size.x + from_node_pos.x + 10; + constructor_pos.y = to_node_pos.y; + } + undo_redo->add_do_method(this, "_move_node", func, p_to.to_int(), new_to_node_pos); + undo_redo->add_undo_method(this, "_move_node", func, p_to.to_int(), to_node_pos); + conv_node = script->get_available_id(); + undo_redo->add_do_method(script.ptr(), "add_node", func, conv_node, constructor, _get_available_pos(false, constructor_pos)); + undo_redo->add_undo_method(script.ptr(), "remove_node", func, conv_node); + converted = true; + } + } + } + + // disconnect current, and connect the new one + if (script->is_input_value_port_connected(func, p_to.to_int(), to_port)) { + if (can_swap && data_disconnect_node == p_to.to_int()) { + int conn_from; + int conn_port; + script->get_input_value_port_connection_source(func, p_to.to_int(), to_port, &conn_from, &conn_port); + undo_redo->add_do_method(script.ptr(), "data_disconnect", func, conn_from, conn_port, p_to.to_int(), to_port); + undo_redo->add_do_method(script.ptr(), "data_connect", func, conn_from, conn_port, data_disconnect_node, data_disconnect_port); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", func, conn_from, conn_port, data_disconnect_node, data_disconnect_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", func, conn_from, conn_port, p_to.to_int(), to_port); + can_swap = false; // swapped + } else { + int conn_from; + int conn_port; + script->get_input_value_port_connection_source(func, p_to.to_int(), to_port, &conn_from, &conn_port); + undo_redo->add_do_method(script.ptr(), "data_disconnect", func, conn_from, conn_port, p_to.to_int(), to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", func, conn_from, conn_port, p_to.to_int(), to_port); + } + } + if (!converted) { + undo_redo->add_do_method(script.ptr(), "data_connect", func, p_from.to_int(), from_port, p_to.to_int(), to_port); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", func, p_from.to_int(), from_port, p_to.to_int(), to_port); + } else { + // this is noice + undo_redo->add_do_method(script.ptr(), "data_connect", func, p_from.to_int(), from_port, conv_node, 0); + undo_redo->add_do_method(script.ptr(), "data_connect", func, conv_node, 0, p_to.to_int(), to_port); + // I don't think this is needed but gonna leave it here for now... until I need to finalise it all + undo_redo->add_undo_method(script.ptr(), "data_disconnect", func, p_from.to_int(), from_port, conv_node, 0); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", func, conv_node, 0, p_to.to_int(), to_port); + } + //update nodes in graph + if (!converted) { + undo_redo->add_do_method(this, "_update_graph", p_from.to_int()); + undo_redo->add_do_method(this, "_update_graph", p_to.to_int()); + undo_redo->add_undo_method(this, "_update_graph", p_from.to_int()); + undo_redo->add_undo_method(this, "_update_graph", p_to.to_int()); + } else { + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + } } undo_redo->add_do_method(this, "_update_graph_connections"); @@ -2405,7 +3014,10 @@ void VisualScriptEditor::_graph_connected(const String &p_from, int p_from_slot, void VisualScriptEditor::_graph_disconnected(const String &p_from, int p_from_slot, const String &p_to, int p_to_slot) { - Ref<VisualScriptNode> from_node = script->get_node(edited_func, p_from.to_int()); + StringName func = _get_function_of_node(p_from.to_int()); + ERR_FAIL_COND(func != _get_function_of_node(p_to.to_int())); + + Ref<VisualScriptNode> from_node = script->get_node(func, p_from.to_int()); ERR_FAIL_COND(!from_node.is_valid()); bool from_seq; @@ -2414,7 +3026,7 @@ void VisualScriptEditor::_graph_disconnected(const String &p_from, int p_from_sl if (!_get_out_slot(from_node, p_from_slot, from_port, from_seq)) return; //can't connect this, it's invalid - Ref<VisualScriptNode> to_node = script->get_node(edited_func, p_to.to_int()); + Ref<VisualScriptNode> to_node = script->get_node(func, p_to.to_int()); ERR_FAIL_COND(!to_node.is_valid()); bool to_seq; @@ -2425,15 +3037,20 @@ void VisualScriptEditor::_graph_disconnected(const String &p_from, int p_from_sl ERR_FAIL_COND(from_seq != to_seq); - undo_redo->create_action(TTR("Connect Nodes")); + undo_redo->create_action(TTR("Disconnect Nodes")); if (from_seq) { - undo_redo->add_do_method(script.ptr(), "sequence_disconnect", edited_func, p_from.to_int(), from_port, p_to.to_int()); - undo_redo->add_undo_method(script.ptr(), "sequence_connect", edited_func, p_from.to_int(), from_port, p_to.to_int()); + undo_redo->add_do_method(script.ptr(), "sequence_disconnect", func, p_from.to_int(), from_port, p_to.to_int()); + undo_redo->add_undo_method(script.ptr(), "sequence_connect", func, p_from.to_int(), from_port, p_to.to_int()); } else { - undo_redo->add_do_method(script.ptr(), "data_disconnect", edited_func, p_from.to_int(), from_port, p_to.to_int(), to_port); - undo_redo->add_undo_method(script.ptr(), "data_connect", edited_func, p_from.to_int(), from_port, p_to.to_int(), to_port); - //update nodes in sgraph + + can_swap = true; + data_disconnect_node = p_to.to_int(); + data_disconnect_port = to_port; + + undo_redo->add_do_method(script.ptr(), "data_disconnect", func, p_from.to_int(), from_port, p_to.to_int(), to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", func, p_from.to_int(), from_port, p_to.to_int(), to_port); + //update relevant nodes in the graph undo_redo->add_do_method(this, "_update_graph", p_from.to_int()); undo_redo->add_do_method(this, "_update_graph", p_to.to_int()); undo_redo->add_undo_method(this, "_update_graph", p_from.to_int()); @@ -2445,6 +3062,216 @@ void VisualScriptEditor::_graph_disconnected(const String &p_from, int p_from_sl undo_redo->commit_action(); } +void VisualScriptEditor::_move_nodes_with_rescan(const StringName &p_func_from, const StringName &p_func_to, int p_id) { + + Set<int> nodes_to_move; + HashMap<int, Map<int, int> > seqconns_to_move; // from => List(outp, to) + HashMap<int, Map<int, Pair<int, int> > > dataconns_to_move; // to => List(inp_p => from, outp) + + nodes_to_move.insert(p_id); + Set<int> sequence_connections; + { + List<VisualScript::SequenceConnection> sequence_conns; + script->get_sequence_connection_list(p_func_from, &sequence_conns); + + HashMap<int, Map<int, int> > seqcons; // from => List(out_p => to) + + for (List<VisualScript::SequenceConnection>::Element *E = sequence_conns.front(); E; E = E->next()) { + int from = E->get().from_node; + int to = E->get().to_node; + int out_p = E->get().from_output; + if (!seqcons.has(from)) + seqcons.set(from, Map<int, int>()); + seqcons[from].insert(out_p, to); + sequence_connections.insert(to); + sequence_connections.insert(from); + } + + int conn = p_id; + List<int> stack; + HashMap<int, Set<int> > seen; // from, outp + while (seqcons.has(conn)) { + for (auto E = seqcons[conn].front(); E; E = E->next()) { + if (seen.has(conn) && seen[conn].has(E->key())) { + if (!E->next()) { + if (stack.size() > 0) { + conn = stack.back()->get(); + stack.pop_back(); + break; + } + conn = -101; + break; + } + continue; + } + if (!seen.has(conn)) + seen.set(conn, Set<int>()); + seen[conn].insert(E->key()); + stack.push_back(conn); + if (!seqconns_to_move.has(conn)) + seqconns_to_move.set(conn, Map<int, int>()); + seqconns_to_move[conn].insert(E->key(), E->get()); + conn = E->get(); + nodes_to_move.insert(conn); + break; + } + if (!seqcons.has(conn) && stack.size() > 0) { + conn = stack.back()->get(); + stack.pop_back(); + } + } + } + + { + List<VisualScript::DataConnection> data_connections; + script->get_data_connection_list(p_func_from, &data_connections); + + HashMap<int, Map<int, Pair<int, int> > > connections; + + for (List<VisualScript::DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { + int from = E->get().from_node; + int to = E->get().to_node; + int out_p = E->get().from_port; + int in_p = E->get().to_port; + + if (!connections.has(to)) + connections.set(to, Map<int, Pair<int, int> >()); + connections[to].insert(in_p, Pair<int, int>(from, out_p)); + } + + // go through the HashMap and do all sorts of crazy ass stuff now... + Set<int> nodes_to_be_added; + for (Set<int>::Element *F = nodes_to_move.front(); F; F = F->next()) { + HashMap<int, Set<int> > seen; + List<int> stack; + int id = F->get(); + while (connections.has(id)) { + for (auto E = connections[id].front(); E; E = E->next()) { + if (seen.has(id) && seen[id].has(E->key())) { + if (!E->next()) { + if (stack.size() > 0) { + id = stack.back()->get(); + stack.pop_back(); + break; + } + id = -11; // I assume ids can't be negative should confirm it... + break; + } + continue; + } + + if (sequence_connections.has(E->get().first)) { + if (!nodes_to_move.has(E->get().first)) { + if (stack.size() > 0) { + id = stack.back()->get(); + stack.pop_back(); + break; + } + id = -11; // I assume ids can't be negative should confirm it... + break; + } + } + + if (!seen.has(id)) + seen.set(id, Set<int>()); + seen[id].insert(E->key()); + stack.push_back(id); + if (!dataconns_to_move.has(id)) + dataconns_to_move.set(id, Map<int, Pair<int, int> >()); + dataconns_to_move[id].insert(E->key(), Pair<int, int>(E->get().first, E->get().second)); + id = E->get().first; + nodes_to_be_added.insert(id); + break; + } + if (!connections.has(id) && stack.size() > 0) { + id = stack.back()->get(); + stack.pop_back(); + } + } + } + for (Set<int>::Element *E = nodes_to_be_added.front(); E; E = E->next()) { + nodes_to_move.insert(E->get()); + } + } + + // * this is primarily for the sake of the having proper undo + List<VisualScript::SequenceConnection> seqext; + List<VisualScript::DataConnection> dataext; + + List<VisualScript::SequenceConnection> seq_connections; + script->get_sequence_connection_list(p_func_from, &seq_connections); + + for (List<VisualScript::SequenceConnection>::Element *E = seq_connections.front(); E; E = E->next()) { + if (!nodes_to_move.has(E->get().from_node) && nodes_to_move.has(E->get().to_node)) { + seqext.push_back(E->get()); + } else if (nodes_to_move.has(E->get().from_node) && !nodes_to_move.has(E->get().to_node)) { + seqext.push_back(E->get()); + } + } + + List<VisualScript::DataConnection> data_connections; + script->get_data_connection_list(p_func_from, &data_connections); + + for (List<VisualScript::DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { + if (!nodes_to_move.has(E->get().from_node) && nodes_to_move.has(E->get().to_node)) { + dataext.push_back(E->get()); + } else if (nodes_to_move.has(E->get().from_node) && !nodes_to_move.has(E->get().to_node)) { + dataext.push_back(E->get()); + } + } + + // undo_redo->create_action("Rescan Functions"); + + for (Set<int>::Element *E = nodes_to_move.front(); E; E = E->next()) { + int id = E->get(); + + undo_redo->add_do_method(script.ptr(), "remove_node", p_func_from, id); + undo_redo->add_do_method(script.ptr(), "add_node", p_func_to, id, script->get_node(p_func_from, id), script->get_node_position(p_func_from, id)); + + undo_redo->add_undo_method(script.ptr(), "remove_node", p_func_to, id); + undo_redo->add_undo_method(script.ptr(), "add_node", p_func_from, id, script->get_node(p_func_from, id), script->get_node_position(p_func_from, id)); + } + + List<int> skeys; + seqconns_to_move.get_key_list(&skeys); + for (List<int>::Element *E = skeys.front(); E; E = E->next()) { + int from_node = E->get(); + for (Map<int, int>::Element *F = seqconns_to_move[from_node].front(); F; F = F->next()) { + int from_port = F->key(); + int to_node = F->get(); + undo_redo->add_do_method(script.ptr(), "sequence_connect", p_func_to, from_node, from_port, to_node); + undo_redo->add_undo_method(script.ptr(), "sequence_connect", p_func_from, from_node, from_port, to_node); + } + } + + List<int> keys; + dataconns_to_move.get_key_list(&keys); + for (List<int>::Element *E = keys.front(); E; E = E->next()) { + int to_node = E->get(); // to_node + for (Map<int, Pair<int, int> >::Element *F = dataconns_to_move[E->get()].front(); F; F = F->next()) { + int inp_p = F->key(); + Pair<int, int> fro = F->get(); + + undo_redo->add_do_method(script.ptr(), "data_connect", p_func_to, fro.first, fro.second, to_node, inp_p); + undo_redo->add_undo_method(script.ptr(), "data_connect", p_func_from, fro.first, fro.second, to_node, inp_p); + } + } + + // this to have proper undo operations + for (List<VisualScript::SequenceConnection>::Element *E = seqext.front(); E; E = E->next()) { + undo_redo->add_undo_method(script.ptr(), "sequence_connect", p_func_from, E->get().from_node, E->get().from_output, E->get().to_node); + } + for (List<VisualScript::DataConnection>::Element *E = dataext.front(); E; E = E->next()) { + undo_redo->add_undo_method(script.ptr(), "data_connect", p_func_from, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + } + // this doesn't need do methods as they are handled by the subsequent do calls implicitly + + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + + // undo_redo->commit_action(); +} + void VisualScriptEditor::_graph_connect_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_pos) { Node *node = graph->get_node(p_from); @@ -2452,7 +3279,9 @@ void VisualScriptEditor::_graph_connect_to_empty(const String &p_from, int p_fro if (!gn) return; - Ref<VisualScriptNode> vsn = script->get_node(edited_func, p_from.to_int()); + StringName func = _get_function_of_node(p_from.to_int()); + + Ref<VisualScriptNode> vsn = script->get_node(func, p_from.to_int()); if (!vsn.is_valid()) return; @@ -2462,12 +3291,11 @@ void VisualScriptEditor::_graph_connect_to_empty(const String &p_from, int p_fro port_action_node = p_from.to_int(); port_action_output = p_from_slot; - _port_action_menu(CREATE_ACTION); + _port_action_menu(CREATE_ACTION, func); } else { - port_action_output = p_from_slot - vsn->get_output_sequence_port_count(); port_action_node = p_from.to_int(); - _port_action_menu(CREATE_CALL_SET_GET); + _port_action_menu(CREATE_CALL_SET_GET, func); } } @@ -2481,7 +3309,9 @@ VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_ac visited_nodes.insert(p_port_action_node); - Ref<VisualScriptNode> node = script->get_node(edited_func, p_port_action_node); + StringName func = _get_function_of_node(p_port_action_node); + + Ref<VisualScriptNode> node = script->get_node(func, p_port_action_node); if (!node.is_valid()) { @@ -2500,7 +3330,7 @@ VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_ac int from_node; int from_port; - if (script->get_input_value_port_connection_source(edited_func, p_port_action_node, i, &from_node, &from_port)) { + if (script->get_input_value_port_connection_source(func, p_port_action_node, i, &from_node, &from_port)) { g = _guess_output_type(from_node, from_port, visited_nodes); } else { @@ -2525,7 +3355,7 @@ VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_ac return node->guess_output_type(in_guesses.ptrw(), p_port_action_output); } -void VisualScriptEditor::_port_action_menu(int p_option) { +void VisualScriptEditor::_port_action_menu(int p_option, const StringName &func) { Vector2 ofs = graph->get_scroll_ofs() + port_action_pos; if (graph->is_using_snap()) { @@ -2549,8 +3379,10 @@ void VisualScriptEditor::_port_action_menu(int p_option) { } else { n->set_base_type("Object"); } - - String type_string = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + String type_string; + if (script->get_node(func, port_action_node)->get_output_value_port_count() > 0) { + type_string = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + } if (tg.type == Variant::OBJECT) { if (tg.script.is_valid()) { new_connect_node_select->select_from_script(tg.script, ""); @@ -2564,10 +3396,19 @@ void VisualScriptEditor::_port_action_menu(int p_option) { } else { new_connect_node_select->select_from_basic_type(tg.type); } + // ensure that the dialog fits inside the graph + Vector2 pos = mouse_up_position; + Size2 bounds = graph->get_global_position() + graph->get_size() - new_connect_node_select->get_size(); + pos.x = pos.x > bounds.x ? bounds.x : pos.x; + pos.y = pos.y > bounds.y ? bounds.y : pos.y; + new_connect_node_select->set_position(pos); } break; case CREATE_ACTION: { VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node, port_action_output, vn); - PropertyInfo property_info = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output); + PropertyInfo property_info; + if (script->get_node(func, port_action_node)->get_output_value_port_count() > 0) { + property_info = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output); + } if (tg.type == Variant::OBJECT) { if (property_info.type == Variant::OBJECT && property_info.hint_string != String()) { new_connect_node_select->select_from_action(property_info.hint_string); @@ -2579,25 +3420,18 @@ void VisualScriptEditor::_port_action_menu(int p_option) { } else { new_connect_node_select->select_from_action(Variant::get_type_name(tg.type)); } + // ensure that the dialog fits inside the graph + Vector2 pos = mouse_up_position; + Size2 bounds = graph->get_global_position() + graph->get_size() - new_connect_node_select->get_size(); + pos.x = pos.x > bounds.x ? bounds.x : pos.x; + pos.y = pos.y > bounds.y ? bounds.y : pos.y; + new_connect_node_select->set_position(pos); } break; } } -void VisualScriptEditor::new_node(Ref<VisualScriptNode> vnode, Vector2 ofs) { - Set<int> vn; - Ref<VisualScriptNode> vnode_old = script->get_node(edited_func, port_action_node); - int new_id = script->get_available_id(); - undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); - undo_redo->add_do_method(this, "_update_graph", new_id); - undo_redo->add_undo_method(this, "_update_graph", new_id); - undo_redo->commit_action(); - - port_action_new_node = new_id; -} - void VisualScriptEditor::connect_data(Ref<VisualScriptNode> vnode_old, Ref<VisualScriptNode> vnode, int new_id) { + undo_redo->create_action(TTR("Connect Node Data")); VisualScriptReturn *vnode_return = Object::cast_to<VisualScriptReturn>(vnode.ptr()); if (vnode_return != NULL && vnode_old->get_output_value_port_count() > 0) { @@ -2616,12 +3450,14 @@ void VisualScriptEditor::connect_data(Ref<VisualScriptNode> vnode_old, Ref<Visua if (port >= value_count) { port = 0; } - undo_redo->add_do_method(script.ptr(), "data_connect", edited_func, port_action_node, port, new_id, 0); - undo_redo->add_undo_method(script.ptr(), "data_disconnect", edited_func, port_action_node, port, new_id, 0); + StringName func = _get_function_of_node(port_action_node); + undo_redo->add_do_method(script.ptr(), "data_connect", func, port_action_node, port, new_id, 0); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", func, port_action_node, port, new_id, 0); undo_redo->commit_action(); } void VisualScriptEditor::_selected_connect_node(const String &p_text, const String &p_category, const bool p_connecting) { + Vector2 ofs = graph->get_scroll_ofs() + port_action_pos; if (graph->is_using_snap()) { int snap = graph->get_snap(); @@ -2631,19 +3467,29 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri Set<int> vn; + bool port_node_exists = true; + + StringName func = _get_function_of_node(port_action_node); + if (func == StringName()) { + func = default_func; + port_node_exists = false; + } + if (p_category == "visualscript") { Ref<VisualScriptNode> vnode_new = VisualScriptLanguage::singleton->create_node_from_name(p_text); - Ref<VisualScriptNode> vnode_old = script->get_node(edited_func, port_action_node); + Ref<VisualScriptNode> vnode_old; + if (port_node_exists) + vnode_old = script->get_node(func, port_action_node); int new_id = script->get_available_id(); - if (Object::cast_to<VisualScriptOperator>(vnode_new.ptr()) && script->get_node(edited_func, port_action_node).is_valid()) { - Variant::Type type = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).type; + if (Object::cast_to<VisualScriptOperator>(vnode_new.ptr()) && vnode_old.is_valid()) { + Variant::Type type = vnode_old->get_output_value_port_info(port_action_output).type; Object::cast_to<VisualScriptOperator>(vnode_new.ptr())->set_typed(type); } - if (Object::cast_to<VisualScriptTypeCast>(vnode_new.ptr()) && script->get_node(edited_func, port_action_node).is_valid()) { - Variant::Type type = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).type; - String hint_name = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + if (Object::cast_to<VisualScriptTypeCast>(vnode_new.ptr()) && vnode_old.is_valid()) { + Variant::Type type = vnode_old->get_output_value_port_info(port_action_output).type; + String hint_name = vnode_old->get_output_value_port_info(port_action_output).hint_string; if (type == Variant::OBJECT) { Object::cast_to<VisualScriptTypeCast>(vnode_new.ptr())->set_base_type(hint_name); @@ -2653,14 +3499,15 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri Object::cast_to<VisualScriptTypeCast>(vnode_new.ptr())->set_base_type(Variant::get_type_name(type)); } } + undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode_new, ofs); + undo_redo->add_do_method(script.ptr(), "add_node", func, new_id, vnode_new, ofs); if (vnode_old.is_valid() && p_connecting) { connect_seq(vnode_old, vnode_new, new_id); connect_data(vnode_old, vnode_new, new_id); } - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_undo_method(script.ptr(), "remove_node", func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); @@ -2668,6 +3515,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } Ref<VisualScriptNode> vnode; + Ref<VisualScriptPropertySet> script_prop_set; if (p_category == String("method")) { @@ -2678,8 +3526,8 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri Ref<VisualScriptPropertySet> n; n.instance(); - n->set_property(p_text); vnode = n; + script_prop_set = n; } else if (p_category == String("get")) { Ref<VisualScriptPropertyGet> n; @@ -2723,16 +3571,27 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } } - new_node(vnode, ofs); + int new_id = script->get_available_id(); + undo_redo->create_action(TTR("Add Node")); + undo_redo->add_do_method(script.ptr(), "add_node", func, new_id, vnode, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_node", func, new_id); + undo_redo->add_do_method(this, "_update_graph", new_id); + undo_redo->add_undo_method(this, "_update_graph", new_id); + undo_redo->commit_action(); + + if (script_prop_set.is_valid()) + script_prop_set->set_property(p_text); + + port_action_new_node = new_id; - Ref<VisualScriptNode> vsn = script->get_node(edited_func, port_action_new_node); + Ref<VisualScriptNode> vsn = script->get_node(func, port_action_new_node); if (Object::cast_to<VisualScriptFunctionCall>(vsn.ptr())) { Ref<VisualScriptFunctionCall> vsfc = vsn; vsfc->set_function(p_text); - if (p_connecting) { + if (port_node_exists && p_connecting) { VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node, port_action_output, vn); if (tg.type == Variant::OBJECT) { @@ -2741,9 +3600,9 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri if (tg.gdclass != StringName()) { vsfc->set_base_type(tg.gdclass); - } else if (script->get_node(edited_func, port_action_node).is_valid()) { - PropertyHint hint = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint; - String base_type = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + } else if (script->get_node(func, port_action_node).is_valid()) { + PropertyHint hint = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint; + String base_type = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; if (base_type != String() && hint == PROPERTY_HINT_TYPE_STRING) { vsfc->set_base_type(base_type); @@ -2765,8 +3624,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } } - // if connecting from another node the call mode shouldn't be self - if (p_connecting) { + if (port_node_exists && p_connecting) { if (Object::cast_to<VisualScriptPropertySet>(vsn.ptr())) { Ref<VisualScriptPropertySet> vsp = vsn; @@ -2777,9 +3635,9 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri if (tg.gdclass != StringName()) { vsp->set_base_type(tg.gdclass); - } else if (script->get_node(edited_func, port_action_node).is_valid()) { - PropertyHint hint = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint; - String base_type = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + } else if (script->get_node(func, port_action_node).is_valid()) { + PropertyHint hint = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint; + String base_type = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; if (base_type != String() && hint == PROPERTY_HINT_TYPE_STRING) { vsp->set_base_type(base_type); @@ -2807,9 +3665,9 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri if (tg.gdclass != StringName()) { vsp->set_base_type(tg.gdclass); - } else if (script->get_node(edited_func, port_action_node).is_valid()) { - PropertyHint hint = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint; - String base_type = script->get_node(edited_func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; + } else if (script->get_node(func, port_action_node).is_valid()) { + PropertyHint hint = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint; + String base_type = script->get_node(func, port_action_node)->get_output_value_port_info(port_action_output).hint_string; if (base_type != String() && hint == PROPERTY_HINT_TYPE_STRING) { vsp->set_base_type(base_type); } @@ -2826,16 +3684,20 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri } } } - Ref<VisualScriptNode> vnode_old = script->get_node(edited_func, port_action_node); - if (vnode_old.is_valid() && p_connecting) { - connect_seq(vnode_old, vnode, port_action_new_node); - connect_data(vnode_old, vnode, port_action_new_node); + if (port_node_exists) { + Ref<VisualScriptNode> vnode_old = script->get_node(func, port_action_node); + if (vnode_old.is_valid() && p_connecting) { + connect_seq(vnode_old, vnode, port_action_new_node); + connect_data(vnode_old, vnode, port_action_new_node); + } } _update_graph(port_action_new_node); - _update_graph_connections(); + if (port_node_exists) + _update_graph_connections(); } void VisualScriptEditor::connect_seq(Ref<VisualScriptNode> vnode_old, Ref<VisualScriptNode> vnode_new, int new_id) { + VisualScriptOperator *vnode_operator = Object::cast_to<VisualScriptOperator>(vnode_new.ptr()); if (vnode_operator != NULL && !vnode_operator->has_input_sequence_port()) { return; @@ -2851,27 +3713,29 @@ void VisualScriptEditor::connect_seq(Ref<VisualScriptNode> vnode_old, Ref<Visual return; } + StringName func = _get_function_of_node(port_action_node); + undo_redo->create_action(TTR("Connect Node Sequence")); int pass_port = -vnode_old->get_output_sequence_port_count() + 1; int return_port = port_action_output - 1; if (vnode_old->get_output_value_port_info(port_action_output).name == String("pass") && - !script->get_output_sequence_ports_connected(edited_func, port_action_node).has(pass_port)) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, port_action_node, pass_port, new_id); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, port_action_node, pass_port, new_id); + !script->get_output_sequence_ports_connected(func, port_action_node).has(pass_port)) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", func, port_action_node, pass_port, new_id); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", func, port_action_node, pass_port, new_id); } else if (vnode_old->get_output_value_port_info(port_action_output).name == String("return") && - !script->get_output_sequence_ports_connected(edited_func, port_action_node).has(return_port)) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, port_action_node, return_port, new_id); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, port_action_node, return_port, new_id); + !script->get_output_sequence_ports_connected(func, port_action_node).has(return_port)) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", func, port_action_node, return_port, new_id); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", func, port_action_node, return_port, new_id); } else { for (int port = 0; port < vnode_old->get_output_sequence_port_count(); port++) { int count = vnode_old->get_output_sequence_port_count(); - if (port_action_output < count && !script->get_output_sequence_ports_connected(edited_func, port_action_node).has(port_action_output)) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, port_action_node, port_action_output, new_id); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, port_action_node, port_action_output, new_id); + if (port_action_output < count && !script->get_output_sequence_ports_connected(func, port_action_node).has(port_action_output)) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", func, port_action_node, port_action_output, new_id); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", func, port_action_node, port_action_output, new_id); break; - } else if (!script->get_output_sequence_ports_connected(edited_func, port_action_node).has(port)) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, port_action_node, port, new_id); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, port_action_node, port, new_id); + } else if (!script->get_output_sequence_ports_connected(func, port_action_node).has(port)) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", func, port_action_node, port, new_id); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", func, port_action_node, port, new_id); break; } } @@ -2904,7 +3768,6 @@ void VisualScriptEditor::_selected_new_virtual_method(const String &p_text, cons } selected = name; - edited_func = selected; Ref<VisualScriptFunction> func_node; func_node.instance(); func_node->set_name(name); @@ -2916,14 +3779,16 @@ void VisualScriptEditor::_selected_new_virtual_method(const String &p_text, cons func_node->add_argument(minfo.arguments[i].type, minfo.arguments[i].name, -1, minfo.arguments[i].hint, minfo.arguments[i].hint_string); } - undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id(), func_node); + Vector2 ofs = _get_available_pos(); + + undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id(), func_node, ofs); if (minfo.return_val.type != Variant::NIL || minfo.return_val.usage & PROPERTY_USAGE_NIL_IS_VARIANT) { Ref<VisualScriptReturn> ret_node; ret_node.instance(); ret_node->set_return_type(minfo.return_val.type); ret_node->set_enable_return_value(true); ret_node->set_name(name); - undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id() + 1, ret_node, Vector2(500, 0)); + undo_redo->add_do_method(script.ptr(), "add_node", name, script->get_available_id() + 1, ret_node, _get_available_pos(false, ofs + Vector2(500, 0))); } undo_redo->add_undo_method(script.ptr(), "remove_function", name); @@ -2938,31 +3803,30 @@ void VisualScriptEditor::_selected_new_virtual_method(const String &p_text, cons } void VisualScriptEditor::_cancel_connect_node() { - // Causes crashes - //script->remove_node(edited_func, port_action_new_node); - _update_graph(); + // ensure the cancel is done + port_action_new_node = -1; } -void VisualScriptEditor::_create_new_node(const String &p_text, const String &p_category, const Vector2 &p_point) { - Vector2 ofs = graph->get_scroll_ofs() + p_point; - if (graph->is_using_snap()) { - int snap = graph->get_snap(); - ofs = ofs.snapped(Vector2(snap, snap)); - } - ofs /= EDSCALE; +int VisualScriptEditor::_create_new_node_from_name(const String &p_text, const Vector2 &p_point, const StringName &p_func) { + + StringName func = default_func; + if (p_func != StringName()) + func = p_func; + Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(p_text); int new_id = script->get_available_id(); undo_redo->create_action(TTR("Add Node")); - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, vnode, ofs); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", func, new_id, vnode, p_point); + undo_redo->add_undo_method(script.ptr(), "remove_node", func, new_id); undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); + return new_id; } void VisualScriptEditor::_default_value_changed() { - Ref<VisualScriptNode> vsn = script->get_node(edited_func, editing_id); + Ref<VisualScriptNode> vsn = script->get_node(_get_function_of_node(editing_id), editing_id); if (vsn.is_null()) return; @@ -2977,7 +3841,7 @@ void VisualScriptEditor::_default_value_changed() { void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_input_port) { - Ref<VisualScriptNode> vsn = script->get_node(edited_func, p_id); + Ref<VisualScriptNode> vsn = script->get_node(_get_function_of_node(p_id), p_id); if (vsn.is_null()) return; @@ -2996,16 +3860,18 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i if (pinfo.type == Variant::NODE_PATH) { Node *edited_scene = get_tree()->get_edited_scene_root(); - Node *script_node = _find_script_node(edited_scene, edited_scene, script); + if (edited_scene) { // Fixing an old crash bug ( Visual Script Crashes on editing NodePath with an empty scene open) + Node *script_node = _find_script_node(edited_scene, edited_scene, script); - if (script_node) { - //pick a node relative to the script, IF the script exists - pinfo.hint = PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE; - pinfo.hint_string = script_node->get_path(); - } else { - //pick a path relative to edited scene - pinfo.hint = PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE; - pinfo.hint_string = get_tree()->get_edited_scene_root()->get_path(); + if (script_node) { + //pick a node relative to the script, IF the script exists + pinfo.hint = PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE; + pinfo.hint_string = script_node->get_path(); + } else { + //pick a path relative to edited scene + pinfo.hint = PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE; + pinfo.hint_string = get_tree()->get_edited_scene_root()->get_path(); + } } } @@ -3032,62 +3898,64 @@ void VisualScriptEditor::_hide_timer() { hint_text->hide(); } -void VisualScriptEditor::_node_filter_changed(const String &p_text) { - - _update_available_nodes(); -} - void VisualScriptEditor::_notification(int p_what) { - if (p_what == NOTIFICATION_READY || (p_what == NOTIFICATION_THEME_CHANGED && is_visible_in_tree())) { - - node_filter->set_right_icon(Control::get_icon("Search", "EditorIcons")); - node_filter->set_clear_button_enabled(true); - - if (p_what == NOTIFICATION_READY) { + switch (p_what) { + case NOTIFICATION_READY: { variable_editor->connect("changed", this, "_update_members"); signal_editor->connect("changed", this, "_update_members"); + FALLTHROUGH; } + case NOTIFICATION_THEME_CHANGED: { + if (p_what != NOTIFICATION_READY && !is_visible_in_tree()) { + return; + } - Ref<Theme> tm = EditorNode::get_singleton()->get_theme_base()->get_theme(); + edit_variable_edit->add_style_override("bg", get_stylebox("bg", "Tree")); + edit_signal_edit->add_style_override("bg", get_stylebox("bg", "Tree")); + func_input_scroll->add_style_override("bg", get_stylebox("bg", "Tree")); - bool dark_theme = tm->get_constant("dark_theme", "Editor"); + Ref<Theme> tm = EditorNode::get_singleton()->get_theme_base()->get_theme(); - List<Pair<String, Color> > colors; - if (dark_theme) { - colors.push_back(Pair<String, Color>("flow_control", Color(0.96, 0.96, 0.96))); - colors.push_back(Pair<String, Color>("functions", Color(0.96, 0.52, 0.51))); - colors.push_back(Pair<String, Color>("data", Color(0.5, 0.96, 0.81))); - colors.push_back(Pair<String, Color>("operators", Color(0.67, 0.59, 0.87))); - colors.push_back(Pair<String, Color>("custom", Color(0.5, 0.73, 0.96))); - colors.push_back(Pair<String, Color>("constants", Color(0.96, 0.5, 0.69))); - } else { - colors.push_back(Pair<String, Color>("flow_control", Color(0.26, 0.26, 0.26))); - colors.push_back(Pair<String, Color>("functions", Color(0.95, 0.4, 0.38))); - colors.push_back(Pair<String, Color>("data", Color(0.07, 0.73, 0.51))); - colors.push_back(Pair<String, Color>("operators", Color(0.51, 0.4, 0.82))); - colors.push_back(Pair<String, Color>("custom", Color(0.31, 0.63, 0.95))); - colors.push_back(Pair<String, Color>("constants", Color(0.94, 0.18, 0.49))); - } + bool dark_theme = tm->get_constant("dark_theme", "Editor"); - for (List<Pair<String, Color> >::Element *E = colors.front(); E; E = E->next()) { - Ref<StyleBoxFlat> sb = tm->get_stylebox("frame", "GraphNode"); - if (!sb.is_null()) { - Ref<StyleBoxFlat> frame_style = sb->duplicate(); - Color c = sb->get_border_color(); - Color cn = E->get().second; - cn.a = c.a; - frame_style->set_border_color(cn); - node_styles[E->get().first] = frame_style; + List<Pair<String, Color> > colors; + if (dark_theme) { + colors.push_back(Pair<String, Color>("flow_control", Color(0.96, 0.96, 0.96))); + colors.push_back(Pair<String, Color>("functions", Color(0.96, 0.52, 0.51))); + colors.push_back(Pair<String, Color>("data", Color(0.5, 0.96, 0.81))); + colors.push_back(Pair<String, Color>("operators", Color(0.67, 0.59, 0.87))); + colors.push_back(Pair<String, Color>("custom", Color(0.5, 0.73, 0.96))); + colors.push_back(Pair<String, Color>("constants", Color(0.96, 0.5, 0.69))); + } else { + colors.push_back(Pair<String, Color>("flow_control", Color(0.26, 0.26, 0.26))); + colors.push_back(Pair<String, Color>("functions", Color(0.95, 0.4, 0.38))); + colors.push_back(Pair<String, Color>("data", Color(0.07, 0.73, 0.51))); + colors.push_back(Pair<String, Color>("operators", Color(0.51, 0.4, 0.82))); + colors.push_back(Pair<String, Color>("custom", Color(0.31, 0.63, 0.95))); + colors.push_back(Pair<String, Color>("constants", Color(0.94, 0.18, 0.49))); } - } - if (is_visible_in_tree() && script.is_valid()) { - _update_members(); - _update_graph(); - } - } else if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { - left_vsplit->set_visible(is_visible_in_tree()); + for (List<Pair<String, Color> >::Element *E = colors.front(); E; E = E->next()) { + Ref<StyleBoxFlat> sb = tm->get_stylebox("frame", "GraphNode"); + if (!sb.is_null()) { + Ref<StyleBoxFlat> frame_style = sb->duplicate(); + Color c = sb->get_border_color(); + Color cn = E->get().second; + cn.a = c.a; + frame_style->set_border_color(cn); + node_styles[E->get().first] = frame_style; + } + } + + if (is_visible_in_tree() && script.is_valid()) { + _update_members(); + _update_graph(); + } + } break; + case NOTIFICATION_VISIBILITY_CHANGED: { + members_section->set_visible(is_visible_in_tree()); + } break; } } @@ -3098,8 +3966,9 @@ void VisualScriptEditor::_graph_ofs_changed(const Vector2 &p_ofs) { updating_graph = true; - if (script->has_function(edited_func)) { - script->set_function_scroll(edited_func, graph->get_scroll_ofs() / EDSCALE); + // Just use the default func for all the properties that need to be handled for drawing rather than adding to the Visual Script Class + if (script->has_function(default_func)) { + script->set_function_scroll(default_func, graph->get_scroll_ofs() / EDSCALE); script->set_edited(true); } updating_graph = false; @@ -3110,7 +3979,9 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_ if (updating_graph) return; - Ref<VisualScriptComment> vsc = script->get_node(edited_func, p_node); + StringName func = _get_function_of_node(p_node); + + Ref<VisualScriptComment> vsc = script->get_node(func, p_node); if (vsc.is_null()) return; @@ -3128,7 +3999,7 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_ undo_redo->add_undo_method(vsc.ptr(), "set_size", vsc->get_size()); undo_redo->commit_action(); - gn->set_custom_minimum_size(p_new_size); //for this time since graph update is blocked + gn->set_custom_minimum_size(p_new_size); gn->set_size(Size2(1, 1)); graph->set_block_minimum_size_adjust(false); updating_graph = false; @@ -3148,7 +4019,8 @@ void VisualScriptEditor::_menu_option(int p_what) { if (gn) { if (gn->is_selected()) { int id = String(gn->get_name()).to_int(); - Ref<VisualScriptNode> vsn = script->get_node(edited_func, id); + StringName func = _get_function_of_node(id); + Ref<VisualScriptNode> vsn = script->get_node(func, id); if (vsn.is_valid()) { vsn->set_breakpoint(!vsn->is_breakpoint()); reselect.push_back(gn->get_name()); @@ -3170,28 +4042,30 @@ void VisualScriptEditor::_menu_option(int p_what) { } break; case EDIT_COPY_NODES: case EDIT_CUT_NODES: { - - if (!script->has_function(edited_func)) + if (!script->has_function(default_func)) break; clipboard->nodes.clear(); clipboard->data_connections.clear(); clipboard->sequence_connections.clear(); + Set<String> funcs; for (int i = 0; i < graph->get_child_count(); i++) { GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i)); if (gn) { if (gn->is_selected()) { int id = String(gn->get_name()).to_int(); - Ref<VisualScriptNode> node = script->get_node(edited_func, id); + StringName func = _get_function_of_node(id); + Ref<VisualScriptNode> node = script->get_node(func, id); if (Object::cast_to<VisualScriptFunction>(*node)) { EditorNode::get_singleton()->show_warning(TTR("Can't copy the function node.")); return; } if (node.is_valid()) { clipboard->nodes[id] = node->duplicate(true); - clipboard->nodes_positions[id] = script->get_node_position(edited_func, id); + clipboard->nodes_positions[id] = script->get_node_position(func, id); + funcs.insert(String(func)); } } } @@ -3200,37 +4074,38 @@ void VisualScriptEditor::_menu_option(int p_what) { if (clipboard->nodes.empty()) break; - List<VisualScript::SequenceConnection> sequence_connections; + for (Set<String>::Element *F = funcs.front(); F; F = F->next()) { + List<VisualScript::SequenceConnection> sequence_connections; - script->get_sequence_connection_list(edited_func, &sequence_connections); + script->get_sequence_connection_list(F->get(), &sequence_connections); - for (List<VisualScript::SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) { + for (List<VisualScript::SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) { - if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { + if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { - clipboard->sequence_connections.insert(E->get()); + clipboard->sequence_connections.insert(E->get()); + } } - } - List<VisualScript::DataConnection> data_connections; + List<VisualScript::DataConnection> data_connections; - script->get_data_connection_list(edited_func, &data_connections); + script->get_data_connection_list(F->get(), &data_connections); - for (List<VisualScript::DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { + for (List<VisualScript::DataConnection>::Element *E = data_connections.front(); E; E = E->next()) { - if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { + if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) { - clipboard->data_connections.insert(E->get()); + clipboard->data_connections.insert(E->get()); + } } } - if (p_what == EDIT_CUT_NODES) { _on_nodes_delete(); // oh yeah, also delete on cut } } break; case EDIT_PASTE_NODES: { - if (!script->has_function(edited_func)) + if (!script->has_function(default_func)) break; if (clipboard->nodes.empty()) { @@ -3248,11 +4123,15 @@ void VisualScriptEditor::_menu_option(int p_what) { Set<Vector2> existing_positions; { - List<int> nodes; - script->get_node_list(edited_func, &nodes); - for (List<int>::Element *E = nodes.front(); E; E = E->next()) { - Vector2 pos = script->get_node_position(edited_func, E->get()).snapped(Vector2(2, 2)); - existing_positions.insert(pos); + List<StringName> functions; + script->get_function_list(&functions); + for (List<StringName>::Element *F = functions.front(); F; F = F->next()) { + List<int> nodes; + script->get_node_list(F->get(), &nodes); + for (List<int>::Element *E = nodes.front(); E; E = E->next()) { + Vector2 pos = script->get_node_position(F->get(), E->get()).snapped(Vector2(2, 2)); + existing_positions.insert(pos); + } } } @@ -3271,20 +4150,20 @@ void VisualScriptEditor::_menu_option(int p_what) { paste_pos += Vector2(20, 20) * EDSCALE; } - undo_redo->add_do_method(script.ptr(), "add_node", edited_func, new_id, node, paste_pos); - undo_redo->add_undo_method(script.ptr(), "remove_node", edited_func, new_id); + undo_redo->add_do_method(script.ptr(), "add_node", default_func, new_id, node, paste_pos); + undo_redo->add_undo_method(script.ptr(), "remove_node", default_func, new_id); } for (Set<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "sequence_connect", edited_func, remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); - undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", edited_func, remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); + undo_redo->add_do_method(script.ptr(), "sequence_connect", default_func, remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); + undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", default_func, remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]); } for (Set<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) { - undo_redo->add_do_method(script.ptr(), "data_connect", edited_func, remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); - undo_redo->add_undo_method(script.ptr(), "data_disconnect", edited_func, remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); + undo_redo->add_do_method(script.ptr(), "data_connect", default_func, remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); + undo_redo->add_undo_method(script.ptr(), "data_disconnect", default_func, remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port); } undo_redo->add_do_method(this, "_update_graph"); @@ -3300,6 +4179,275 @@ void VisualScriptEditor::_menu_option(int p_what) { } } } break; + case EDIT_CREATE_FUNCTION: { + + StringName function = ""; + Map<int, Ref<VisualScriptNode> > nodes; + Set<int> selections; + for (int i = 0; i < graph->get_child_count(); i++) { + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i)); + if (gn) { + if (gn->is_selected()) { + int id = String(gn->get_name()).to_int(); + StringName func = _get_function_of_node(id); + Ref<VisualScriptNode> node = script->get_node(func, id); + if (Object::cast_to<VisualScriptFunction>(*node)) { + EditorNode::get_singleton()->show_warning(TTR("Can't create function with a function node.")); + return; + } + if (node.is_valid()) { + if (func != function && function != StringName("")) { + EditorNode::get_singleton()->show_warning(TTR("Can't create function of nodes from nodes of multiple functions.")); + return; + } + nodes.insert(id, node); + selections.insert(id); + function = func; + } + } + } + } + + if (nodes.size() == 0) { + return; // nothing to be done if there are no valid nodes selected + } + + Set<VisualScript::SequenceConnection> seqmove; + Set<VisualScript::DataConnection> datamove; + + Set<VisualScript::SequenceConnection> seqext; + Set<VisualScript::DataConnection> dataext; + + int start_node = -1; + Set<int> end_nodes; + if (nodes.size() == 1) { + Ref<VisualScriptNode> nd = script->get_node(function, nodes.front()->key()); + if (nd.is_valid() && nd->has_input_sequence_port()) + start_node = nodes.front()->key(); + else { + EditorNode::get_singleton()->show_warning(TTR("Select at least one node with sequence port.")); + return; + } + } else { + List<VisualScript::SequenceConnection> seqs; + script->get_sequence_connection_list(function, &seqs); + + if (seqs.size() == 0) { + // in case there are no sequence connections + // select the top most node cause that's probably how + // the user wants to connect the nodes + int top_nd = -1; + Vector2 top; + for (Map<int, Ref<VisualScriptNode> >::Element *E = nodes.front(); E; E = E->next()) { + Ref<VisualScriptNode> nd = script->get_node(function, E->key()); + if (nd.is_valid() && nd->has_input_sequence_port()) { + if (top_nd < 0) { + top_nd = E->key(); + top = script->get_node_position(function, top_nd); + } + Vector2 pos = script->get_node_position(function, E->key()); + if (top.y > pos.y) { + top_nd = E->key(); + top = pos; + } + } + } + Ref<VisualScriptNode> nd = script->get_node(function, top_nd); + if (nd.is_valid() && nd->has_input_sequence_port()) + start_node = top_nd; + else { + EditorNode::get_singleton()->show_warning(TTR("Select at least one node with sequence port.")); + return; + } + } else { + // pick the node with input sequence + Set<int> nodes_from; + Set<int> nodes_to; + for (List<VisualScript::SequenceConnection>::Element *E = seqs.front(); E; E = E->next()) { + if (nodes.has(E->get().from_node) && nodes.has(E->get().to_node)) { + seqmove.insert(E->get()); + nodes_from.insert(E->get().from_node); + } else if (nodes.has(E->get().from_node) && !nodes.has(E->get().to_node)) { + seqext.insert(E->get()); + } else if (!nodes.has(E->get().from_node) && nodes.has(E->get().to_node)) { + if (start_node == -1) { + seqext.insert(E->get()); + start_node = E->get().to_node; + } else { + EditorNode::get_singleton()->show_warning(TTR("Try to only have one sequence input in selection.")); + return; + } + } + nodes_to.insert(E->get().to_node); + } + + // to use to add return nodes + _get_ends(start_node, seqs, selections, end_nodes); + + if (start_node == -1) { + // if we still don't have a start node then + // run through the nodes and select the first tree node + // ie node without any input sequence but output sequence + for (Set<int>::Element *E = nodes_from.front(); E; E = E->next()) { + if (!nodes_to.has(E->get())) { + start_node = E->get(); + } + } + } + } + } + + if (start_node == -1) { + return; // this should not happen, but just in case something goes wrong + } + + List<Variant::Type> inputs; // input types + List<Pair<int, int> > input_connections; + { + List<VisualScript::DataConnection> dats; + script->get_data_connection_list(function, &dats); + for (List<VisualScript::DataConnection>::Element *E = dats.front(); E; E = E->next()) { + if (nodes.has(E->get().from_node) && nodes.has(E->get().to_node)) { + datamove.insert(E->get()); + } else if (!nodes.has(E->get().from_node) && nodes.has(E->get().to_node)) { + // add all these as inputs for the Function + Ref<VisualScriptNode> node = script->get_node(function, E->get().to_node); + if (node.is_valid()) { + dataext.insert(E->get()); + PropertyInfo pi = node->get_input_value_port_info(E->get().to_port); + inputs.push_back(pi.type); + input_connections.push_back(Pair<int, int>(E->get().to_node, E->get().to_port)); + } + } else if (nodes.has(E->get().from_node) && !nodes.has(E->get().to_node)) { + dataext.insert(E->get()); + } + } + } + + String new_fn = _validate_name("new_function"); + + Vector2 ofs = _get_available_pos(false, script->get_node_position(function, start_node) - Vector2(80, 150)); + + Ref<VisualScriptFunction> func_node; + func_node.instance(); + func_node->set_name(new_fn); + + undo_redo->create_action(TTR("Create Function")); + + undo_redo->add_do_method(script.ptr(), "add_function", new_fn); + int fn_id = script->get_available_id(); + undo_redo->add_do_method(script.ptr(), "add_node", new_fn, fn_id, func_node, ofs); + undo_redo->add_undo_method(script.ptr(), "remove_function", new_fn); + undo_redo->add_do_method(this, "_update_members"); + undo_redo->add_undo_method(this, "_update_members"); + undo_redo->add_do_method(this, "emit_signal", "edited_script_changed"); + undo_redo->add_undo_method(this, "emit_signal", "edited_script_changed"); + + // Move the nodes + + for (Map<int, Ref<VisualScriptNode> >::Element *E = nodes.front(); E; E = E->next()) { + undo_redo->add_do_method(script.ptr(), "remove_node", function, E->key()); + undo_redo->add_do_method(script.ptr(), "add_node", new_fn, E->key(), E->get(), script->get_node_position(function, E->key())); + + // undo_redo->add_undo_method(script.ptr(), "remove_node", new_fn, E->key()); not needed cause we already remove the function :P + undo_redo->add_undo_method(script.ptr(), "add_node", function, E->key(), E->get(), script->get_node_position(function, E->key())); + } + + for (Set<VisualScript::SequenceConnection>::Element *E = seqmove.front(); E; E = E->next()) { + undo_redo->add_do_method(script.ptr(), "sequence_connect", new_fn, E->get().from_node, E->get().from_output, E->get().to_node); + undo_redo->add_undo_method(script.ptr(), "sequence_connect", function, E->get().from_node, E->get().from_output, E->get().to_node); + } + + for (Set<VisualScript::DataConnection>::Element *E = datamove.front(); E; E = E->next()) { + undo_redo->add_do_method(script.ptr(), "data_connect", new_fn, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + undo_redo->add_undo_method(script.ptr(), "data_connect", function, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + } + + // Add undo for external connections as well so that it's easier to revert back and forth + // these didn't require do methods as it's already handled internally by other do calls + for (Set<VisualScript::SequenceConnection>::Element *E = seqext.front(); E; E = E->next()) { + undo_redo->add_undo_method(script.ptr(), "sequence_connect", function, E->get().from_node, E->get().from_output, E->get().to_node); + } + for (Set<VisualScript::DataConnection>::Element *E = dataext.front(); E; E = E->next()) { + undo_redo->add_undo_method(script.ptr(), "data_connect", function, E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port); + } + + // I don't really think we need support for non sequenced functions at this moment + undo_redo->add_do_method(script.ptr(), "sequence_connect", new_fn, fn_id, 0, start_node); + + // end nodes are mapped to the return nodes with data connections if possible + int m = 1; + for (Set<int>::Element *G = end_nodes.front(); G; G = G->next()) { + Ref<VisualScriptReturn> ret_node; + ret_node.instance(); + + int ret_id = fn_id + (m++); + selections.insert(ret_id); + Vector2 ofsi = _get_available_pos(false, script->get_node_position(function, G->get()) + Vector2(80, -100)); + undo_redo->add_do_method(script.ptr(), "add_node", new_fn, ret_id, ret_node, ofsi); + undo_redo->add_undo_method(script.ptr(), "remove_node", new_fn, ret_id); + + undo_redo->add_do_method(script.ptr(), "sequence_connect", new_fn, G->get(), 0, ret_id); + // add data outputs from each of the end_nodes + Ref<VisualScriptNode> vsn = script->get_node(function, G->get()); + if (vsn.is_valid() && vsn->get_output_value_port_count() > 0) { + ret_node->set_enable_return_value(true); + // use the zeroth data port cause that's the likely one that is planned to be used + ret_node->set_return_type(vsn->get_output_value_port_info(0).type); + undo_redo->add_do_method(script.ptr(), "data_connect", new_fn, G->get(), 0, ret_id, 0); + } + } + + // * might make the system more intelligent by checking port from info. + int i = 0; + List<Pair<int, int> >::Element *F = input_connections.front(); + for (List<Variant::Type>::Element *E = inputs.front(); E && F; E = E->next(), F = F->next()) { + func_node->add_argument(E->get(), "arg_" + String::num_int64(i), i); + undo_redo->add_do_method(script.ptr(), "data_connect", new_fn, fn_id, i, F->get().first, F->get().second); + i++; // increment i + } + + undo_redo->add_do_method(this, "_update_graph"); + undo_redo->add_undo_method(this, "_update_graph"); + + undo_redo->commit_action(); + + // make sure all Nodes get marked for selection so that they can be moved together + selections.insert(fn_id); + for (int k = 0; k < graph->get_child_count(); k++) { + GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(k)); + if (gn) { + int id = gn->get_name().operator String().to_int(); + gn->set_selected(selections.has(id)); + } + } + + // Ensure Preview Selection is of newly created function node + if (selections.size()) { + EditorNode::get_singleton()->push_item(func_node.ptr()); + } + + } break; + case REFRESH_GRAPH: { + _update_graph(); + } break; + } +} + +// this is likely going to be very slow and I am not sure if I should keep it +// but I hope that it will not be a problem considering that we won't be creating functions so frequently +// and cyclic connections would be a problem but hopefully we won't let them get to this point +void VisualScriptEditor::_get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const Set<int> &p_selected, Set<int> &r_end_nodes) { + for (const List<VisualScript::SequenceConnection>::Element *E = p_seqs.front(); E; E = E->next()) { + int from = E->get().from_node; + int to = E->get().to_node; + + if (from == p_node && p_selected.has(to)) { + // this is an interior connection move forward to the to node + _get_ends(to, p_seqs, p_selected, r_end_nodes); + } else if (from == p_node && !p_selected.has(to)) { + r_end_nodes.insert(from); + } } } @@ -3312,6 +4460,9 @@ void VisualScriptEditor::_member_rmb_selected(const Vector2 &p_pos) { member_popup->set_position(members->get_global_position() + p_pos); member_popup->set_size(Vector2()); + function_name_edit->set_position(members->get_global_position() + p_pos); + function_name_edit->set_size(Vector2()); + TreeItem *root = members->get_root(); Ref<Texture> del_icon = Control::get_icon("Remove", "EditorIcons"); @@ -3322,6 +4473,8 @@ void VisualScriptEditor::_member_rmb_selected(const Vector2 &p_pos) { member_type = MEMBER_FUNCTION; member_name = ti->get_text(0); + member_popup->add_icon_shortcut(edit_icon, ED_GET_SHORTCUT("visual_script_editor/edit_member"), MEMBER_EDIT); + member_popup->add_separator(); member_popup->add_icon_shortcut(del_icon, ED_GET_SHORTCUT("visual_script_editor/delete_selected"), MEMBER_REMOVE); member_popup->popup(); return; @@ -3389,6 +4542,11 @@ void VisualScriptEditor::_member_option(int p_option) { undo_redo->add_do_method(this, "_update_graph"); undo_redo->add_undo_method(this, "_update_graph"); undo_redo->commit_action(); + } else if (p_option == MEMBER_EDIT) { + selected = members->get_selected()->get_text(0); + function_name_edit->popup(); + function_name_box->set_text(selected); + function_name_box->select_all(); } } break; case MEMBER_VARIABLE: { @@ -3425,7 +4583,6 @@ void VisualScriptEditor::_member_option(int p_option) { undo_redo->add_undo_method(this, "_update_members"); undo_redo->commit_action(); } else if (p_option == MEMBER_EDIT) { - signal_editor->edit(name); edit_signal_dialog->set_title(TTR("Editing Signal:") + " " + name); edit_signal_dialog->popup_centered_minsize(Size2(400, 300) * EDSCALE); @@ -3446,8 +4603,14 @@ void VisualScriptEditor::_bind_methods() { ClassDB::bind_method("_member_edited", &VisualScriptEditor::_member_edited); ClassDB::bind_method("_member_selected", &VisualScriptEditor::_member_selected); ClassDB::bind_method("_update_members", &VisualScriptEditor::_update_members); + ClassDB::bind_method("_members_gui_input", &VisualScriptEditor::_members_gui_input); + ClassDB::bind_method("_member_rmb_selected", &VisualScriptEditor::_member_rmb_selected); + ClassDB::bind_method("_member_option", &VisualScriptEditor::_member_option); + ClassDB::bind_method("_fn_name_box_input", &VisualScriptEditor::_fn_name_box_input); + ClassDB::bind_method("_change_base_type", &VisualScriptEditor::_change_base_type); ClassDB::bind_method("_change_base_type_callback", &VisualScriptEditor::_change_base_type_callback); + ClassDB::bind_method("_toggle_tool_script", &VisualScriptEditor::_toggle_tool_script); ClassDB::bind_method("_node_selected", &VisualScriptEditor::_node_selected); ClassDB::bind_method("_node_moved", &VisualScriptEditor::_node_moved); ClassDB::bind_method("_move_node", &VisualScriptEditor::_move_node); @@ -3456,7 +4619,14 @@ void VisualScriptEditor::_bind_methods() { ClassDB::bind_method("_remove_node", &VisualScriptEditor::_remove_node); ClassDB::bind_method("_update_graph", &VisualScriptEditor::_update_graph, DEFVAL(-1)); ClassDB::bind_method("_node_ports_changed", &VisualScriptEditor::_node_ports_changed); - ClassDB::bind_method("_available_node_doubleclicked", &VisualScriptEditor::_available_node_doubleclicked); + + ClassDB::bind_method("_create_function_dialog", &VisualScriptEditor::_create_function_dialog); + ClassDB::bind_method("_create_function", &VisualScriptEditor::_create_function); + ClassDB::bind_method("_add_node_dialog", &VisualScriptEditor::_add_node_dialog); + ClassDB::bind_method("_add_func_input", &VisualScriptEditor::_add_func_input); + ClassDB::bind_method("_remove_func_input", &VisualScriptEditor::_remove_func_input); + ClassDB::bind_method("_deselect_input_names", &VisualScriptEditor::_deselect_input_names); + ClassDB::bind_method("_default_value_edited", &VisualScriptEditor::_default_value_edited); ClassDB::bind_method("_default_value_changed", &VisualScriptEditor::_default_value_changed); ClassDB::bind_method("_menu_option", &VisualScriptEditor::_menu_option); @@ -3469,15 +4639,23 @@ void VisualScriptEditor::_bind_methods() { ClassDB::bind_method("_selected_new_virtual_method", &VisualScriptEditor::_selected_new_virtual_method); ClassDB::bind_method("_cancel_connect_node", &VisualScriptEditor::_cancel_connect_node); - ClassDB::bind_method("_create_new_node", &VisualScriptEditor::_create_new_node); + ClassDB::bind_method("_create_new_node_from_name", &VisualScriptEditor::_create_new_node_from_name); ClassDB::bind_method("_expression_text_changed", &VisualScriptEditor::_expression_text_changed); + ClassDB::bind_method("_add_input_port", &VisualScriptEditor::_add_input_port); + ClassDB::bind_method("_add_output_port", &VisualScriptEditor::_add_output_port); + ClassDB::bind_method("_remove_input_port", &VisualScriptEditor::_remove_input_port); + ClassDB::bind_method("_remove_output_port", &VisualScriptEditor::_remove_output_port); + ClassDB::bind_method("_change_port_type", &VisualScriptEditor::_change_port_type); + ClassDB::bind_method("_update_node_size", &VisualScriptEditor::_update_node_size); + ClassDB::bind_method("_port_name_focus_out", &VisualScriptEditor::_port_name_focus_out); ClassDB::bind_method("get_drag_data_fw", &VisualScriptEditor::get_drag_data_fw); ClassDB::bind_method("can_drop_data_fw", &VisualScriptEditor::can_drop_data_fw); ClassDB::bind_method("drop_data_fw", &VisualScriptEditor::drop_data_fw); ClassDB::bind_method("_input", &VisualScriptEditor::_input); - ClassDB::bind_method("_members_gui_input", &VisualScriptEditor::_members_gui_input); + ClassDB::bind_method("_graph_gui_input", &VisualScriptEditor::_graph_gui_input); + ClassDB::bind_method("_on_nodes_delete", &VisualScriptEditor::_on_nodes_delete); ClassDB::bind_method("_on_nodes_duplicate", &VisualScriptEditor::_on_nodes_duplicate); @@ -3488,17 +4666,10 @@ void VisualScriptEditor::_bind_methods() { ClassDB::bind_method("_graph_connect_to_empty", &VisualScriptEditor::_graph_connect_to_empty); ClassDB::bind_method("_update_graph_connections", &VisualScriptEditor::_update_graph_connections); - ClassDB::bind_method("_node_filter_changed", &VisualScriptEditor::_node_filter_changed); ClassDB::bind_method("_selected_method", &VisualScriptEditor::_selected_method); ClassDB::bind_method("_draw_color_over_button", &VisualScriptEditor::_draw_color_over_button); - ClassDB::bind_method("_member_rmb_selected", &VisualScriptEditor::_member_rmb_selected); - - ClassDB::bind_method("_member_option", &VisualScriptEditor::_member_option); - - ClassDB::bind_method("_update_available_nodes", &VisualScriptEditor::_update_available_nodes); - ClassDB::bind_method("_generic_search", &VisualScriptEditor::_generic_search); } @@ -3508,6 +4679,8 @@ VisualScriptEditor::VisualScriptEditor() { clipboard = memnew(Clipboard); } updating_graph = false; + saved_pos_dirty = false; + saved_position = Vector2(0, 0); edit_menu = memnew(MenuButton); edit_menu->set_text(TTR("Edit")); @@ -3519,56 +4692,50 @@ VisualScriptEditor::VisualScriptEditor() { edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/copy_nodes"), EDIT_COPY_NODES); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/cut_nodes"), EDIT_CUT_NODES); edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/paste_nodes"), EDIT_PASTE_NODES); - + edit_menu->get_popup()->add_separator(); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/create_function"), EDIT_CREATE_FUNCTION); + edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/refresh_nodes"), REFRESH_GRAPH); edit_menu->get_popup()->connect("id_pressed", this, "_menu_option"); - left_vsplit = memnew(VSplitContainer); - ScriptEditor::get_singleton()->get_left_list_split()->call_deferred("add_child", left_vsplit); //add but wait until done settig up this - left_vsplit->set_v_size_flags(SIZE_EXPAND_FILL); - left_vsplit->set_stretch_ratio(2); - left_vsplit->hide(); + members_section = memnew(VBoxContainer); + // Add but wait until done setting up this. + ScriptEditor::get_singleton()->get_left_list_split()->call_deferred("add_child", members_section); + members_section->set_v_size_flags(SIZE_EXPAND_FILL); - VBoxContainer *left_vb = memnew(VBoxContainer); - left_vsplit->add_child(left_vb); - left_vb->set_v_size_flags(SIZE_EXPAND_FILL); - //left_vb->set_custom_minimum_size(Size2(230, 1) * EDSCALE); + CheckButton *tool_script_check = memnew(CheckButton); + tool_script_check->set_text(TTR("Make Tool:")); + members_section->add_child(tool_script_check); + tool_script_check->connect("pressed", this, "_toggle_tool_script"); - base_type_select = memnew(Button); - left_vb->add_margin_child(TTR("Base Type:"), base_type_select); - base_type_select->connect("pressed", this, "_change_base_type"); + /// Members /// members = memnew(Tree); - left_vb->add_margin_child(TTR("Members:"), members, true); + members_section->add_margin_child(TTR("Members:"), members, true); + members->set_custom_minimum_size(Size2(0, 50 * EDSCALE)); members->set_hide_root(true); members->connect("button_pressed", this, "_member_button"); members->connect("item_edited", this, "_member_edited"); members->connect("cell_selected", this, "_member_selected", varray(), CONNECT_DEFERRED); members->connect("gui_input", this, "_members_gui_input"); + members->connect("item_rmb_selected", this, "_member_rmb_selected"); + members->set_allow_rmb_select(true); members->set_allow_reselect(true); members->set_hide_folding(true); members->set_drag_forwarding(this); - VBoxContainer *left_vb2 = memnew(VBoxContainer); - left_vsplit->add_child(left_vb2); - left_vb2->set_v_size_flags(SIZE_EXPAND_FILL); - - VBoxContainer *vbc_nodes = memnew(VBoxContainer); - HBoxContainer *hbc_nodes = memnew(HBoxContainer); - node_filter = memnew(LineEdit); - node_filter->connect("text_changed", this, "_node_filter_changed"); - hbc_nodes->add_child(node_filter); - node_filter->set_h_size_flags(SIZE_EXPAND_FILL); - vbc_nodes->add_child(hbc_nodes); - - nodes = memnew(Tree); - vbc_nodes->add_child(nodes); - nodes->set_v_size_flags(SIZE_EXPAND_FILL); + member_popup = memnew(PopupMenu); + add_child(member_popup); + member_popup->connect("id_pressed", this, "_member_option"); - left_vb2->add_margin_child(TTR("Available Nodes:"), vbc_nodes, true); + function_name_edit = memnew(PopupDialog); + function_name_box = memnew(LineEdit); + function_name_edit->add_child(function_name_box); + function_name_edit->set_h_size_flags(SIZE_EXPAND); + function_name_box->connect("gui_input", this, "_fn_name_box_input"); + function_name_box->set_expand_to_text_length(true); + add_child(function_name_edit); - nodes->set_hide_root(true); - nodes->connect("item_activated", this, "_available_node_doubleclicked"); - nodes->set_drag_forwarding(this); + /// Actual Graph /// graph = memnew(GraphEdit); add_child(graph); @@ -3579,10 +4746,77 @@ VisualScriptEditor::VisualScriptEditor() { graph->connect("_end_node_move", this, "_end_node_move"); graph->connect("delete_nodes_request", this, "_on_nodes_delete"); graph->connect("duplicate_nodes_request", this, "_on_nodes_duplicate"); + graph->connect("gui_input", this, "_graph_gui_input"); graph->set_drag_forwarding(this); graph->hide(); graph->connect("scroll_offset_changed", this, "_graph_ofs_changed"); + /// Add Buttons to Top Bar/Zoom bar. + HBoxContainer *graph_hbc = graph->get_zoom_hbox(); + + Label *base_lbl = memnew(Label); + base_lbl->set_text("Change Base Type: "); + graph_hbc->add_child(base_lbl); + + base_type_select = memnew(Button); + base_type_select->connect("pressed", this, "_change_base_type"); + graph_hbc->add_child(base_type_select); + + Button *add_nds = memnew(Button); + add_nds->set_text("Add Nodes..."); + graph_hbc->add_child(add_nds); + add_nds->connect("pressed", this, "_add_node_dialog"); + + Button *fn_btn = memnew(Button); + fn_btn->set_text("Add Function..."); + graph_hbc->add_child(fn_btn); + fn_btn->connect("pressed", this, "_create_function_dialog"); + + // Add Function Dialog. + VBoxContainer *function_vb = memnew(VBoxContainer); + function_vb->set_v_size_flags(SIZE_EXPAND_FILL); + + HBoxContainer *func_name_hbox = memnew(HBoxContainer); + function_vb->add_child(func_name_hbox); + + Label *func_name_label = memnew(Label); + func_name_label->set_text(TTR("Name:")); + func_name_hbox->add_child(func_name_label); + + func_name_box = memnew(LineEdit); + func_name_box->set_h_size_flags(SIZE_EXPAND_FILL); + func_name_box->set_placeholder(TTR("function_name")); + func_name_box->set_text(""); + func_name_box->connect("focus_entered", this, "_deselect_input_names"); + func_name_hbox->add_child(func_name_box); + + // Add minor setting for function if needed, here! + + function_vb->add_child(memnew(HSeparator)); + + Button *add_input_button = memnew(Button); + add_input_button->set_h_size_flags(SIZE_EXPAND_FILL); + add_input_button->set_text(TTR("Add Input")); + add_input_button->connect("pressed", this, "_add_func_input"); + function_vb->add_child(add_input_button); + + func_input_scroll = memnew(ScrollContainer); + func_input_scroll->set_v_size_flags(SIZE_EXPAND_FILL); + function_vb->add_child(func_input_scroll); + + func_input_vbox = memnew(VBoxContainer); + func_input_vbox->set_h_size_flags(SIZE_EXPAND_FILL); + func_input_scroll->add_child(func_input_vbox); + + function_create_dialog = memnew(ConfirmationDialog); + function_create_dialog->set_custom_minimum_size(Size2(450, 300) * EDSCALE); + function_create_dialog->set_v_size_flags(SIZE_EXPAND_FILL); + function_create_dialog->set_title(TTR("Create Function")); + function_create_dialog->add_child(function_vb); + function_create_dialog->get_ok()->set_text(TTR("Create")); + function_create_dialog->get_ok()->connect("pressed", this, "_create_function"); + add_child(function_create_dialog); + select_func_text = memnew(Label); select_func_text->set_text(TTR("Select or create a function to edit its graph.")); select_func_text->set_align(Label::ALIGN_CENTER); @@ -3603,7 +4837,7 @@ VisualScriptEditor::VisualScriptEditor() { hint_text_timer->connect("timeout", this, "_hide_timer"); add_child(hint_text_timer); - //allowed casts (connections) + // Allowed casts (connections). for (int i = 0; i < Variant::VARIANT_MAX; i++) { graph->add_valid_connection_type(Variant::NIL, i); graph->add_valid_connection_type(i, Variant::NIL); @@ -3643,7 +4877,7 @@ VisualScriptEditor::VisualScriptEditor() { edit_variable_edit->edit(variable_editor); select_base_type = memnew(CreateDialog); - select_base_type->set_base_type("Object"); //anything goes + select_base_type->set_base_type("Object"); // Anything goes. select_base_type->connect("create", this, "_change_base_type_callback"); add_child(select_base_type); @@ -3651,8 +4885,8 @@ VisualScriptEditor::VisualScriptEditor() { updating_members = false; - set_process_input(true); //for revert on drag - set_process_unhandled_input(true); //for revert on drag + set_process_input(true); + set_process_unhandled_input(true); default_value_edit = memnew(CustomPropertyEditor); add_child(default_value_edit); @@ -3665,25 +4899,18 @@ VisualScriptEditor::VisualScriptEditor() { new_connect_node_select = memnew(VisualScriptPropertySelector); add_child(new_connect_node_select); + new_connect_node_select->set_resizable(true); new_connect_node_select->connect("selected", this, "_selected_connect_node"); new_connect_node_select->get_cancel()->connect("pressed", this, "_cancel_connect_node"); new_virtual_method_select = memnew(VisualScriptPropertySelector); add_child(new_virtual_method_select); new_virtual_method_select->connect("selected", this, "_selected_new_virtual_method"); - - member_popup = memnew(PopupMenu); - add_child(member_popup); - members->connect("item_rmb_selected", this, "_member_rmb_selected"); - members->set_allow_rmb_select(true); - member_popup->connect("id_pressed", this, "_member_option"); - - _VisualScriptEditor::get_singleton()->connect("custom_nodes_updated", this, "_update_available_nodes"); } VisualScriptEditor::~VisualScriptEditor() { - undo_redo->clear_history(); //avoid crashes + undo_redo->clear_history(); // Avoid crashes. memdelete(signal_editor); memdelete(variable_editor); } @@ -3714,12 +4941,14 @@ static void register_editor_callback() { ED_SHORTCUT("visual_script_editor/copy_nodes", TTR("Copy Nodes"), KEY_MASK_CMD + KEY_C); ED_SHORTCUT("visual_script_editor/cut_nodes", TTR("Cut Nodes"), KEY_MASK_CMD + KEY_X); ED_SHORTCUT("visual_script_editor/paste_nodes", TTR("Paste Nodes"), KEY_MASK_CMD + KEY_V); + ED_SHORTCUT("visual_script_editor/create_function", TTR("Make Function"), KEY_MASK_CMD + KEY_G); + ED_SHORTCUT("visual_script_editor/refresh_nodes", TTR("Refresh Graph"), KEY_MASK_CMD + KEY_R); ED_SHORTCUT("visual_script_editor/edit_member", TTR("Edit Member"), KEY_MASK_CMD + KEY_E); } void VisualScriptEditor::register_editor() { - //too early to register stuff here, request a callback + // Too early to register stuff here, request a callback. EditorNode::add_plugin_init_callback(register_editor_callback); } diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h index 4f302d1d72..fbf021e7b6 100644 --- a/modules/visual_script/visual_script_editor.h +++ b/modules/visual_script/visual_script_editor.h @@ -59,6 +59,8 @@ class VisualScriptEditor : public ScriptEditorBase { EDIT_COPY_NODES, EDIT_CUT_NODES, EDIT_PASTE_NODES, + EDIT_CREATE_FUNCTION, + REFRESH_GRAPH }; enum PortAction { @@ -79,17 +81,19 @@ class VisualScriptEditor : public ScriptEditorBase { MEMBER_SIGNAL }; - VSplitContainer *left_vsplit; + VBoxContainer *members_section; MenuButton *edit_menu; Ref<VisualScript> script; Button *base_type_select; - GraphEdit *graph; + LineEdit *func_name_box; + ScrollContainer *func_input_scroll; + VBoxContainer *func_input_vbox; + ConfirmationDialog *function_create_dialog; - LineEdit *node_filter; - TextureRect *node_filter_icon; + GraphEdit *graph; VisualScriptEditorSignalEdit *signal_editor; @@ -110,7 +114,8 @@ class VisualScriptEditor : public ScriptEditorBase { UndoRedo *undo_redo; Tree *members; - Tree *nodes; + PopupDialog *function_name_edit; + LineEdit *function_name_box; Label *hint_text; Timer *hint_text_timer; @@ -133,6 +138,7 @@ class VisualScriptEditor : public ScriptEditorBase { HashMap<StringName, Ref<StyleBox> > node_styles; StringName edited_func; + StringName default_func; void _update_graph_connections(); void _update_graph(int p_only_id = -1); @@ -165,9 +171,13 @@ class VisualScriptEditor : public ScriptEditorBase { int port_action_output; Vector2 port_action_pos; int port_action_new_node; - void _port_action_menu(int p_option); - void new_node(Ref<VisualScriptNode> vnode, Vector2 ofs); + bool saved_pos_dirty; + Vector2 saved_position; + + Vector2 mouse_up_position; + + void _port_action_menu(int p_option, const StringName &p_func); void connect_data(Ref<VisualScriptNode> vnode_old, Ref<VisualScriptNode> vnode, int new_id); @@ -175,23 +185,26 @@ class VisualScriptEditor : public ScriptEditorBase { void connect_seq(Ref<VisualScriptNode> vnode_old, Ref<VisualScriptNode> vnode_new, int new_id); void _cancel_connect_node(); - void _create_new_node(const String &p_text, const String &p_category, const Vector2 &p_point); + int _create_new_node_from_name(const String &p_text, const Vector2 &p_point, const StringName &p_func = StringName()); void _selected_new_virtual_method(const String &p_text, const String &p_category, const bool p_connecting); int error_line; void _node_selected(Node *p_node); - void _center_on_node(int p_id); + void _center_on_node(const StringName &p_func, int p_id); void _node_filter_changed(const String &p_text); void _change_base_type_callback(); void _change_base_type(); + void _toggle_tool_script(); void _member_selected(); void _member_edited(); void _begin_node_move(); void _end_node_move(); - void _move_node(String func, int p_id, const Vector2 &p_to); + void _move_node(const StringName &p_func, int p_id, const Vector2 &p_to); + + void _get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const Set<int> &p_selected, Set<int> &r_end_nodes); void _node_moved(Vector2 p_from, Vector2 p_to, int p_id); void _remove_node(int p_id); @@ -200,21 +213,44 @@ class VisualScriptEditor : public ScriptEditorBase { void _graph_connect_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_pos); void _node_ports_changed(const String &p_func, int p_id); - void _available_node_doubleclicked(); + void _node_create(); void _update_available_nodes(); void _member_button(Object *p_item, int p_column, int p_button); void _expression_text_changed(const String &p_text, int p_id); + void _add_input_port(int p_id); + void _add_output_port(int p_id); + void _remove_input_port(int p_id, int p_port); + void _remove_output_port(int p_id, int p_port); + void _change_port_type(int p_select, int p_id, int p_port, bool is_input); + void _update_node_size(int p_id); + void _port_name_focus_out(const Node *p_name_box, int p_id, int p_port, bool is_input); - String revert_on_drag; + Vector2 _get_available_pos(bool centered = true, Vector2 ofs = Vector2()) const; + StringName _get_function_of_node(int p_id) const; - void _input(const Ref<InputEvent> &p_event); + void _move_nodes_with_rescan(const StringName &p_func_from, const StringName &p_func_to, int p_id); + bool node_has_sequence_connections(const StringName &p_func, int p_id); - void _generic_search(String p_base_type = ""); + void _generic_search(String p_base_type = "", Vector2 pos = Vector2(), bool node_centered = false); + void _input(const Ref<InputEvent> &p_event); + void _graph_gui_input(const Ref<InputEvent> &p_event); void _members_gui_input(const Ref<InputEvent> &p_event); + void _fn_name_box_input(const Ref<InputEvent> &p_event); + void _rename_function(const String &p_name, const String &p_new_name); + + void _create_function_dialog(); + void _create_function(); + void _add_func_input(); + void _remove_func_input(Node *p_node); + void _deselect_input_names(); + void _add_node_dialog(); + void _node_item_selected(); + void _node_item_unselected(); + void _on_nodes_delete(); void _on_nodes_duplicate(); @@ -225,6 +261,10 @@ class VisualScriptEditor : public ScriptEditorBase { int editing_id; int editing_input; + bool can_swap; + int data_disconnect_node; + int data_disconnect_port; + void _default_value_changed(); void _default_value_edited(Node *p_button, int p_id, int p_input_port); @@ -239,7 +279,7 @@ class VisualScriptEditor : public ScriptEditorBase { void _draw_color_over_button(Object *obj, Color p_color); void _button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, const Ref<Texture> &p_small_preview, Variant p_ud); - VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &visited_nodes); + VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &p_visited_nodes); void _member_rmb_selected(const Vector2 &p_pos); void _member_option(int p_option); diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp index c330fa1bc0..4e90a08009 100644 --- a/modules/visual_script/visual_script_func_nodes.cpp +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -133,10 +133,12 @@ int VisualScriptFunctionCall::get_input_value_port_count() const { MethodBind *mb = ClassDB::get_method(_get_base_type(), function); if (mb) { - return mb->get_argument_count() + (call_mode == CALL_MODE_INSTANCE ? 1 : 0) + (rpc_call_mode >= RPC_RELIABLE_TO_ID ? 1 : 0) - use_default_args; + int defaulted_args = mb->get_argument_count() < use_default_args ? mb->get_argument_count() : use_default_args; + return mb->get_argument_count() + (call_mode == CALL_MODE_INSTANCE ? 1 : 0) + (rpc_call_mode >= RPC_RELIABLE_TO_ID ? 1 : 0) - defaulted_args; } - return method_cache.arguments.size() + (call_mode == CALL_MODE_INSTANCE ? 1 : 0) + (rpc_call_mode >= RPC_RELIABLE_TO_ID ? 1 : 0) - use_default_args; + int defaulted_args = method_cache.arguments.size() < use_default_args ? method_cache.arguments.size() : use_default_args; + return method_cache.arguments.size() + (call_mode == CALL_MODE_INSTANCE ? 1 : 0) + (rpc_call_mode >= RPC_RELIABLE_TO_ID ? 1 : 0) - defaulted_args; } } int VisualScriptFunctionCall::get_output_value_port_count() const { @@ -1037,7 +1039,7 @@ PropertyInfo VisualScriptPropertySet::get_input_value_port_info(int p_idx) const } List<PropertyInfo> props; - ClassDB::get_property_list(_get_base_type(), &props, true); + ClassDB::get_property_list(_get_base_type(), &props, false); for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { if (E->get().name == property) { PropertyInfo pinfo = PropertyInfo(E->get().type, "value", PROPERTY_HINT_TYPE_STRING, E->get().hint_string); @@ -1056,13 +1058,6 @@ PropertyInfo VisualScriptPropertySet::get_output_value_port_info(int p_idx) cons if (call_mode == CALL_MODE_BASIC_TYPE) { return PropertyInfo(basic_type, "out"); } else if (call_mode == CALL_MODE_INSTANCE) { - List<PropertyInfo> props; - ClassDB::get_property_list(_get_base_type(), &props, true); - for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { - if (E->get().name == property) { - return PropertyInfo(E->get().type, "pass", PROPERTY_HINT_TYPE_STRING, E->get().hint_string); - } - } return PropertyInfo(Variant::OBJECT, "pass", PROPERTY_HINT_TYPE_STRING, get_base_type()); } else { return PropertyInfo(); @@ -1813,7 +1808,7 @@ PropertyInfo VisualScriptPropertyGet::get_input_value_port_info(int p_idx) const PropertyInfo VisualScriptPropertyGet::get_output_value_port_info(int p_idx) const { List<PropertyInfo> props; - ClassDB::get_property_list(_get_base_type(), &props, true); + ClassDB::get_property_list(_get_base_type(), &props, false); for (List<PropertyInfo>::Element *E = props.front(); E; E = E->next()) { if (E->get().name == property) { return PropertyInfo(E->get().type, "value." + String(index)); diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index 65820b4c15..957127fe61 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -356,6 +356,441 @@ int VisualScriptFunction::get_stack_size() const { } ////////////////////////////////////////// +/////////////////LISTS//////////////////// +////////////////////////////////////////// + +int VisualScriptLists::get_output_sequence_port_count() const { + if (sequenced) + return 1; + return 0; +} +bool VisualScriptLists::has_input_sequence_port() const { + return sequenced; +} + +String VisualScriptLists::get_output_sequence_port_text(int p_port) const { + return ""; +} + +int VisualScriptLists::get_input_value_port_count() const { + return inputports.size(); +} +int VisualScriptLists::get_output_value_port_count() const { + return outputports.size(); +} + +PropertyInfo VisualScriptLists::get_input_value_port_info(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, inputports.size(), PropertyInfo()); + + PropertyInfo pi; + pi.name = inputports[p_idx].name; + pi.type = inputports[p_idx].type; + return pi; +} +PropertyInfo VisualScriptLists::get_output_value_port_info(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, outputports.size(), PropertyInfo()); + + PropertyInfo pi; + pi.name = outputports[p_idx].name; + pi.type = outputports[p_idx].type; + return pi; +} + +bool VisualScriptLists::is_input_port_editable() const { + return ((flags & INPUT_EDITABLE) == INPUT_EDITABLE); +} +bool VisualScriptLists::is_input_port_name_editable() const { + return ((flags & INPUT_NAME_EDITABLE) == INPUT_NAME_EDITABLE); +} +bool VisualScriptLists::is_input_port_type_editable() const { + return ((flags & INPUT_TYPE_EDITABLE) == INPUT_TYPE_EDITABLE); +} + +bool VisualScriptLists::is_output_port_editable() const { + return ((flags & OUTPUT_EDITABLE) == OUTPUT_EDITABLE); +} +bool VisualScriptLists::is_output_port_name_editable() const { + return ((flags & INPUT_NAME_EDITABLE) == INPUT_NAME_EDITABLE); +} +bool VisualScriptLists::is_output_port_type_editable() const { + return ((flags & INPUT_TYPE_EDITABLE) == INPUT_TYPE_EDITABLE); +} + +// for the inspector +bool VisualScriptLists::_set(const StringName &p_name, const Variant &p_value) { + + if (p_name == "input_count" && is_input_port_editable()) { + + int new_argc = p_value; + int argc = inputports.size(); + if (argc == new_argc) + return true; + + inputports.resize(new_argc); + + for (int i = argc; i < new_argc; i++) { + inputports.write[i].name = "arg" + itos(i + 1); + inputports.write[i].type = Variant::NIL; + } + ports_changed_notify(); + _change_notify(); + return true; + } + if (String(p_name).begins_with("input_") && is_input_port_editable()) { + int idx = String(p_name).get_slicec('_', 1).get_slicec('/', 0).to_int() - 1; + ERR_FAIL_INDEX_V(idx, inputports.size(), false); + String what = String(p_name).get_slice("/", 1); + if (what == "type") { + + Variant::Type new_type = Variant::Type(int(p_value)); + inputports.write[idx].type = new_type; + ports_changed_notify(); + + return true; + } + + if (what == "name") { + + inputports.write[idx].name = p_value; + ports_changed_notify(); + return true; + } + } + + if (p_name == "output_count" && is_output_port_editable()) { + + int new_argc = p_value; + int argc = outputports.size(); + if (argc == new_argc) + return true; + + outputports.resize(new_argc); + + for (int i = argc; i < new_argc; i++) { + outputports.write[i].name = "arg" + itos(i + 1); + outputports.write[i].type = Variant::NIL; + } + ports_changed_notify(); + _change_notify(); + return true; + } + if (String(p_name).begins_with("output_") && is_output_port_editable()) { + int idx = String(p_name).get_slicec('_', 1).get_slicec('/', 0).to_int() - 1; + ERR_FAIL_INDEX_V(idx, outputports.size(), false); + String what = String(p_name).get_slice("/", 1); + if (what == "type") { + + Variant::Type new_type = Variant::Type(int(p_value)); + outputports.write[idx].type = new_type; + ports_changed_notify(); + + return true; + } + + if (what == "name") { + + outputports.write[idx].name = p_value; + ports_changed_notify(); + return true; + } + } + + if (p_name == "sequenced/sequenced") { + sequenced = p_value; + ports_changed_notify(); + return true; + } + + return false; +} +bool VisualScriptLists::_get(const StringName &p_name, Variant &r_ret) const { + + if (p_name == "input_count" && is_input_port_editable()) { + r_ret = inputports.size(); + return true; + } + if (String(p_name).begins_with("input_") && is_input_port_editable()) { + int idx = String(p_name).get_slicec('_', 1).get_slicec('/', 0).to_int() - 1; + ERR_FAIL_INDEX_V(idx, inputports.size(), false); + String what = String(p_name).get_slice("/", 1); + if (what == "type") { + r_ret = inputports[idx].type; + return true; + } + if (what == "name") { + r_ret = inputports[idx].name; + return true; + } + } + + if (p_name == "output_count" && is_output_port_editable()) { + r_ret = outputports.size(); + return true; + } + if (String(p_name).begins_with("output_") && is_output_port_editable()) { + int idx = String(p_name).get_slicec('_', 1).get_slicec('/', 0).to_int() - 1; + ERR_FAIL_INDEX_V(idx, outputports.size(), false); + String what = String(p_name).get_slice("/", 1); + if (what == "type") { + r_ret = outputports[idx].type; + return true; + } + if (what == "name") { + r_ret = outputports[idx].name; + return true; + } + } + + if (p_name == "sequenced/sequenced") { + r_ret = sequenced; + return true; + } + + return false; +} +void VisualScriptLists::_get_property_list(List<PropertyInfo> *p_list) const { + + if (is_input_port_editable()) { + p_list->push_back(PropertyInfo(Variant::INT, "input_count", PROPERTY_HINT_RANGE, "0,256")); + String argt = "Any"; + for (int i = 1; i < Variant::VARIANT_MAX; i++) { + argt += "," + Variant::get_type_name(Variant::Type(i)); + } + + for (int i = 0; i < inputports.size(); i++) { + p_list->push_back(PropertyInfo(Variant::INT, "input_" + itos(i + 1) + "/type", PROPERTY_HINT_ENUM, argt)); + p_list->push_back(PropertyInfo(Variant::STRING, "input_" + itos(i + 1) + "/name")); + } + } + + if (is_output_port_editable()) { + p_list->push_back(PropertyInfo(Variant::INT, "output_count", PROPERTY_HINT_RANGE, "0,256")); + String argt = "Any"; + for (int i = 1; i < Variant::VARIANT_MAX; i++) { + argt += "," + Variant::get_type_name(Variant::Type(i)); + } + + for (int i = 0; i < outputports.size(); i++) { + p_list->push_back(PropertyInfo(Variant::INT, "output_" + itos(i + 1) + "/type", PROPERTY_HINT_ENUM, argt)); + p_list->push_back(PropertyInfo(Variant::STRING, "output_" + itos(i + 1) + "/name")); + } + } + p_list->push_back(PropertyInfo(Variant::BOOL, "sequenced/sequenced")); +} + +// input data port interaction +void VisualScriptLists::add_input_data_port(Variant::Type p_type, const String &p_name, int p_index) { + + if (!is_input_port_editable()) + return; + + Port inp; + inp.name = p_name; + inp.type = p_type; + if (p_index >= 0) + inputports.insert(p_index, inp); + else + inputports.push_back(inp); + + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::set_input_data_port_type(int p_idx, Variant::Type p_type) { + + if (!is_input_port_type_editable()) + return; + + ERR_FAIL_INDEX(p_idx, inputports.size()); + + inputports.write[p_idx].type = p_type; + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::set_input_data_port_name(int p_idx, const String &p_name) { + + if (!is_input_port_name_editable()) + return; + + ERR_FAIL_INDEX(p_idx, inputports.size()); + + inputports.write[p_idx].name = p_name; + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::remove_input_data_port(int p_argidx) { + + if (!is_input_port_editable()) + return; + + ERR_FAIL_INDEX(p_argidx, inputports.size()); + + inputports.remove(p_argidx); + + ports_changed_notify(); + _change_notify(); +} + +// output data port interaction +void VisualScriptLists::add_output_data_port(Variant::Type p_type, const String &p_name, int p_index) { + + if (!is_output_port_editable()) + return; + + Port out; + out.name = p_name; + out.type = p_type; + if (p_index >= 0) + outputports.insert(p_index, out); + else + outputports.push_back(out); + + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::set_output_data_port_type(int p_idx, Variant::Type p_type) { + + if (!is_output_port_type_editable()) + return; + + ERR_FAIL_INDEX(p_idx, outputports.size()); + + outputports.write[p_idx].type = p_type; + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::set_output_data_port_name(int p_idx, const String &p_name) { + + if (!is_output_port_name_editable()) + return; + + ERR_FAIL_INDEX(p_idx, outputports.size()); + + outputports.write[p_idx].name = p_name; + ports_changed_notify(); + _change_notify(); +} +void VisualScriptLists::remove_output_data_port(int p_argidx) { + + if (!is_output_port_editable()) + return; + + ERR_FAIL_INDEX(p_argidx, outputports.size()); + + outputports.remove(p_argidx); + + ports_changed_notify(); + _change_notify(); +} + +// sequences +void VisualScriptLists::set_sequenced(bool p_enable) { + if (sequenced == p_enable) + return; + sequenced = p_enable; + ports_changed_notify(); +} +bool VisualScriptLists::is_sequenced() const { + return sequenced; +} + +VisualScriptLists::VisualScriptLists() { + // initialize + sequenced = false; + flags = 0; +} + +void VisualScriptLists::_bind_methods() { + ClassDB::bind_method(D_METHOD("add_input_data_port", "type", "name", "index"), &VisualScriptLists::add_input_data_port); + ClassDB::bind_method(D_METHOD("set_input_data_port_name", "index", "name"), &VisualScriptLists::set_input_data_port_name); + ClassDB::bind_method(D_METHOD("set_input_data_port_type", "index", "type"), &VisualScriptLists::set_input_data_port_type); + ClassDB::bind_method(D_METHOD("remove_input_data_port", "index"), &VisualScriptLists::remove_input_data_port); + + ClassDB::bind_method(D_METHOD("add_output_data_port", "type", "name", "index"), &VisualScriptLists::add_output_data_port); + ClassDB::bind_method(D_METHOD("set_output_data_port_name", "index", "name"), &VisualScriptLists::set_output_data_port_name); + ClassDB::bind_method(D_METHOD("set_output_data_port_type", "index", "type"), &VisualScriptLists::set_output_data_port_type); + ClassDB::bind_method(D_METHOD("remove_output_data_port", "index"), &VisualScriptLists::remove_output_data_port); +} + +////////////////////////////////////////// +//////////////COMPOSEARRAY//////////////// +////////////////////////////////////////// + +int VisualScriptComposeArray::get_output_sequence_port_count() const { + if (sequenced) + return 1; + return 0; +} +bool VisualScriptComposeArray::has_input_sequence_port() const { + return sequenced; +} + +String VisualScriptComposeArray::get_output_sequence_port_text(int p_port) const { + return ""; +} + +int VisualScriptComposeArray::get_input_value_port_count() const { + return inputports.size(); +} +int VisualScriptComposeArray::get_output_value_port_count() const { + return 1; +} + +PropertyInfo VisualScriptComposeArray::get_input_value_port_info(int p_idx) const { + ERR_FAIL_INDEX_V(p_idx, inputports.size(), PropertyInfo()); + + PropertyInfo pi; + pi.name = inputports[p_idx].name; + pi.type = inputports[p_idx].type; + return pi; +} +PropertyInfo VisualScriptComposeArray::get_output_value_port_info(int p_idx) const { + PropertyInfo pi; + pi.name = "out"; + pi.type = Variant::ARRAY; + return pi; +} + +String VisualScriptComposeArray::get_caption() const { + return "Compose Array"; +} +String VisualScriptComposeArray::get_text() const { + return ""; +} + +class VisualScriptComposeArrayNode : public VisualScriptNodeInstance { +public: + int input_count = 0; + virtual int get_working_memory_size() const { return 0; } + + virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) { + + if (input_count > 0) { + Array arr; + for (int i = 0; i < input_count; i++) + arr.push_back((*p_inputs[i])); + Variant va = Variant(arr); + + *p_outputs[0] = va; + } + + return 0; + } +}; + +VisualScriptNodeInstance *VisualScriptComposeArray::instance(VisualScriptInstance *p_instance) { + + VisualScriptComposeArrayNode *instance = memnew(VisualScriptComposeArrayNode); + instance->input_count = inputports.size(); + return instance; +} + +VisualScriptComposeArray::VisualScriptComposeArray() { + // initialize stuff here + sequenced = false; + flags = INPUT_EDITABLE; +} + +////////////////////////////////////////// ////////////////OPERATOR////////////////// ////////////////////////////////////////// @@ -3640,6 +4075,14 @@ VisualScriptDeconstruct::VisualScriptDeconstruct() { type = Variant::NIL; } +template <Variant::Type T> +static Ref<VisualScriptNode> create_node_deconst_typed(const String &p_name) { + Ref<VisualScriptDeconstruct> node; + node.instance(); + node->set_deconstruct_type(T); + return node; +} + void register_visual_script_nodes() { VisualScriptLanguage::singleton->add_register_func("data/set_variable", create_node_generic<VisualScriptVariableSet>); @@ -3697,7 +4140,17 @@ void register_visual_script_nodes() { VisualScriptLanguage::singleton->add_register_func("operators/logic/in", create_op_node<Variant::OP_IN>); VisualScriptLanguage::singleton->add_register_func("operators/logic/select", create_node_generic<VisualScriptSelect>); - VisualScriptLanguage::singleton->add_register_func("functions/deconstruct", create_node_generic<VisualScriptDeconstruct>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::VECTOR2), create_node_deconst_typed<Variant::Type::VECTOR2>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::VECTOR3), create_node_deconst_typed<Variant::Type::VECTOR3>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::COLOR), create_node_deconst_typed<Variant::Type::COLOR>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::RECT2), create_node_deconst_typed<Variant::Type::RECT2>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM2D), create_node_deconst_typed<Variant::Type::TRANSFORM2D>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::PLANE), create_node_deconst_typed<Variant::Type::PLANE>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::QUAT), create_node_deconst_typed<Variant::Type::QUAT>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::AABB), create_node_deconst_typed<Variant::Type::AABB>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::BASIS), create_node_deconst_typed<Variant::Type::BASIS>); + VisualScriptLanguage::singleton->add_register_func("functions/deconstruct/" + Variant::get_type_name(Variant::Type::TRANSFORM), create_node_deconst_typed<Variant::Type::TRANSFORM>); + VisualScriptLanguage::singleton->add_register_func("functions/compose_array", create_node_generic<VisualScriptComposeArray>); for (int i = 1; i < Variant::VARIANT_MAX; i++) { diff --git a/modules/visual_script/visual_script_nodes.h b/modules/visual_script/visual_script_nodes.h index 762a1bdfb6..c7354cb0d8 100644 --- a/modules/visual_script/visual_script_nodes.h +++ b/modules/visual_script/visual_script_nodes.h @@ -103,6 +103,103 @@ public: VisualScriptFunction(); }; +class VisualScriptLists : public VisualScriptNode { + + GDCLASS(VisualScriptLists, VisualScriptNode) + + struct Port { + String name; + Variant::Type type; + }; + +protected: + Vector<Port> inputports; + Vector<Port> outputports; + + enum { + OUTPUT_EDITABLE = 0x0001, + OUTPUT_NAME_EDITABLE = 0x0002, + OUTPUT_TYPE_EDITABLE = 0x0004, + INPUT_EDITABLE = 0x0008, + INPUT_NAME_EDITABLE = 0x000F, + INPUT_TYPE_EDITABLE = 0x0010, + }; + + int flags; + + bool sequenced; + + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; + + static void _bind_methods(); + +public: + virtual bool is_output_port_editable() const; + virtual bool is_output_port_name_editable() const; + virtual bool is_output_port_type_editable() const; + + virtual bool is_input_port_editable() const; + virtual bool is_input_port_name_editable() const; + virtual bool is_input_port_type_editable() const; + + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + virtual String get_output_sequence_port_text(int p_port) const; + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const = 0; + virtual String get_text() const = 0; + virtual String get_category() const = 0; + + void add_input_data_port(Variant::Type p_type, const String &p_name, int p_index = -1); + void set_input_data_port_type(int p_idx, Variant::Type p_type); + void set_input_data_port_name(int p_idx, const String &p_name); + void remove_input_data_port(int p_argidx); + + void add_output_data_port(Variant::Type p_type, const String &p_name, int p_index = -1); + void set_output_data_port_type(int p_idx, Variant::Type p_type); + void set_output_data_port_name(int p_idx, const String &p_name); + void remove_output_data_port(int p_argidx); + + void set_sequenced(bool p_enable); + bool is_sequenced() const; + + VisualScriptLists(); +}; + +class VisualScriptComposeArray : public VisualScriptLists { + + GDCLASS(VisualScriptComposeArray, VisualScriptLists) + +public: + virtual int get_output_sequence_port_count() const; + virtual bool has_input_sequence_port() const; + + virtual String get_output_sequence_port_text(int p_port) const; + + virtual int get_input_value_port_count() const; + virtual int get_output_value_port_count() const; + + virtual PropertyInfo get_input_value_port_info(int p_idx) const; + virtual PropertyInfo get_output_value_port_info(int p_idx) const; + + virtual String get_caption() const; + virtual String get_text() const; + virtual String get_category() const { return "functions"; } + + virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance); + + VisualScriptComposeArray(); +}; + class VisualScriptOperator : public VisualScriptNode { GDCLASS(VisualScriptOperator, VisualScriptNode); diff --git a/modules/visual_script/visual_script_property_selector.cpp b/modules/visual_script/visual_script_property_selector.cpp index 764807cffd..62b818150c 100644 --- a/modules/visual_script/visual_script_property_selector.cpp +++ b/modules/visual_script/visual_script_property_selector.cpp @@ -32,7 +32,7 @@ #include "core/os/keyboard.h" #include "editor/editor_node.h" -#include "editor_scale.h" +#include "editor/editor_scale.h" #include "modules/visual_script/visual_script.h" #include "modules/visual_script/visual_script_builtin_funcs.h" #include "modules/visual_script/visual_script_flow_control.h" @@ -200,13 +200,10 @@ void VisualScriptPropertySelector::_update_search() { Object *obj = ObjectDB::get_instance(script); if (Object::cast_to<Script>(obj)) { - methods.push_back(MethodInfo("*Script Methods")); Object::cast_to<Script>(obj)->get_script_method_list(&methods); - - } else { - methods.push_back(MethodInfo("*" + String(E->get()))); - ClassDB::get_method_list(E->get(), &methods, true, true); } + + ClassDB::get_method_list(E->get(), &methods, true, true); } } for (List<MethodInfo>::Element *M = methods.front(); M; M = M->next()) { @@ -274,6 +271,7 @@ void VisualScriptPropertySelector::_update_search() { get_visual_node_names("flow_control/type_cast", Set<String>(), found, root, search_box); get_visual_node_names("functions/built_in/print", Set<String>(), found, root, search_box); get_visual_node_names("functions/by_type/" + Variant::get_type_name(type), Set<String>(), found, root, search_box); + get_visual_node_names("functions/deconstruct/" + Variant::get_type_name(type), Set<String>(), found, root, search_box); get_visual_node_names("operators/compare/", Set<String>(), found, root, search_box); if (type == Variant::INT) { get_visual_node_names("operators/bitwise/", Set<String>(), found, root, search_box); @@ -327,7 +325,7 @@ void VisualScriptPropertySelector::create_visualscript_item(const String &name, } } -void VisualScriptPropertySelector::get_visual_node_names(const String &root_filter, const Set<String> &filter, bool &found, TreeItem *const root, LineEdit *const search_box) { +void VisualScriptPropertySelector::get_visual_node_names(const String &root_filter, const Set<String> &p_modifiers, bool &found, TreeItem *const root, LineEdit *const search_box) { Map<String, TreeItem *> path_cache; List<String> fnodes; @@ -338,37 +336,59 @@ void VisualScriptPropertySelector::get_visual_node_names(const String &root_filt continue; } Vector<String> path = E->get().split("/"); - bool is_filter = false; - for (Set<String>::Element *F = filter.front(); F; F = F->next()) { - if (path.size() >= 2 && path[1].findn(F->get()) != -1) { - is_filter = true; + + // check if the name has the filter + bool in_filter = false; + Vector<String> tx_filters = search_box->get_text().split(" "); + for (int i = 0; i < tx_filters.size(); i++) { + if (tx_filters[i] == "") { + in_filter = true; + } else { + in_filter = false; + } + if (E->get().findn(tx_filters[i]) != -1) { + in_filter = true; break; } } - if (is_filter) { + if (!in_filter) { continue; } - if (search_box->get_text() != String() && E->get().findn(search_box->get_text()) == -1) { + bool in_modifier = false | p_modifiers.empty(); + for (Set<String>::Element *F = p_modifiers.front(); F && in_modifier; F = F->next()) { + if (E->get().findn(F->get()) != -1) + in_modifier = true; + } + if (!in_modifier) { continue; } + TreeItem *item = search_options->create_item(root); - VisualScriptOperator *vnode_operator = Object::cast_to<VisualScriptOperator>(*VisualScriptLanguage::singleton->create_node_from_name(E->get())); + Ref<VisualScriptNode> vnode = VisualScriptLanguage::singleton->create_node_from_name(E->get()); + Ref<VisualScriptOperator> vnode_operator = vnode; String type_name; - if (vnode_operator != NULL) { + if (vnode_operator.is_valid()) { String type; if (path.size() >= 2) { type = path[1]; } type_name = type.capitalize() + " "; } - VisualScriptFunctionCall *vnode_function_call = Object::cast_to<VisualScriptFunctionCall>(*VisualScriptLanguage::singleton->create_node_from_name(E->get())); - if (vnode_function_call != NULL) { + Ref<VisualScriptFunctionCall> vnode_function_call = vnode; + if (vnode_function_call.is_valid()) { String basic_type = Variant::get_type_name(vnode_function_call->get_basic_type()); type_name = basic_type.capitalize() + " "; } - - Vector<String> desc = path[path.size() - 1].replace("(", "( ").replace(")", " )").replace(",", ", ").split(" "); + Ref<VisualScriptConstructor> vnode_constructor = vnode; + if (vnode_constructor.is_valid()) { + type_name = "Construct "; + } + Ref<VisualScriptDeconstruct> vnode_deconstruct = vnode; + if (vnode_deconstruct.is_valid()) { + type_name = "Deconstruct "; + } + Vector<String> desc = path[path.size() - 1].replace("(", " ").replace(")", " ").replace(",", " ").split(" "); for (int i = 0; i < desc.size(); i++) { desc.write[i] = desc[i].capitalize(); if (desc[i].ends_with(",")) { @@ -504,7 +524,7 @@ void VisualScriptPropertySelector::_notification(int p_what) { } } -void VisualScriptPropertySelector::select_method_from_base_type(const String &p_base, const String &p_current, const bool p_virtuals_only, const bool p_connecting) { +void VisualScriptPropertySelector::select_method_from_base_type(const String &p_base, const String &p_current, const bool p_virtuals_only, const bool p_connecting, bool clear_text) { base_type = p_base; selected = p_current; @@ -515,7 +535,10 @@ void VisualScriptPropertySelector::select_method_from_base_type(const String &p_ virtuals_only = p_virtuals_only; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); connecting = p_connecting; @@ -526,7 +549,7 @@ void VisualScriptPropertySelector::set_type_filter(const Vector<Variant::Type> & type_filter = p_type_filter; } -void VisualScriptPropertySelector::select_from_base_type(const String &p_base, const String &p_current, bool p_virtuals_only, bool p_seq_connect, const bool p_connecting) { +void VisualScriptPropertySelector::select_from_base_type(const String &p_base, const String &p_current, bool p_virtuals_only, bool p_seq_connect, const bool p_connecting, bool clear_text) { base_type = p_base; selected = p_current; @@ -538,7 +561,10 @@ void VisualScriptPropertySelector::select_from_base_type(const String &p_base, c virtuals_only = p_virtuals_only; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); seq_connect = p_seq_connect; connecting = p_connecting; @@ -546,7 +572,7 @@ void VisualScriptPropertySelector::select_from_base_type(const String &p_base, c _update_search(); } -void VisualScriptPropertySelector::select_from_script(const Ref<Script> &p_script, const String &p_current, const bool p_connecting) { +void VisualScriptPropertySelector::select_from_script(const Ref<Script> &p_script, const String &p_current, const bool p_connecting, bool clear_text) { ERR_FAIL_COND(p_script.is_null()); base_type = p_script->get_instance_base_type(); @@ -559,7 +585,10 @@ void VisualScriptPropertySelector::select_from_script(const Ref<Script> &p_scrip virtuals_only = false; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); seq_connect = false; connecting = p_connecting; @@ -567,7 +596,7 @@ void VisualScriptPropertySelector::select_from_script(const Ref<Script> &p_scrip _update_search(); } -void VisualScriptPropertySelector::select_from_basic_type(Variant::Type p_type, const String &p_current, const bool p_connecting) { +void VisualScriptPropertySelector::select_from_basic_type(Variant::Type p_type, const String &p_current, const bool p_connecting, bool clear_text) { ERR_FAIL_COND(p_type == Variant::NIL); base_type = ""; selected = p_current; @@ -579,7 +608,10 @@ void VisualScriptPropertySelector::select_from_basic_type(Variant::Type p_type, virtuals_only = false; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); seq_connect = false; connecting = p_connecting; @@ -587,7 +619,7 @@ void VisualScriptPropertySelector::select_from_basic_type(Variant::Type p_type, _update_search(); } -void VisualScriptPropertySelector::select_from_action(const String &p_type, const String &p_current, const bool p_connecting) { +void VisualScriptPropertySelector::select_from_action(const String &p_type, const String &p_current, const bool p_connecting, bool clear_text) { base_type = p_type; selected = p_current; type = Variant::NIL; @@ -598,7 +630,10 @@ void VisualScriptPropertySelector::select_from_action(const String &p_type, cons virtuals_only = false; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); seq_connect = true; connecting = p_connecting; @@ -606,8 +641,8 @@ void VisualScriptPropertySelector::select_from_action(const String &p_type, cons _update_search(); } -void VisualScriptPropertySelector::select_from_instance(Object *p_instance, const String &p_current, const bool p_connecting) { - base_type = ""; +void VisualScriptPropertySelector::select_from_instance(Object *p_instance, const String &p_current, const bool p_connecting, const String &p_basetype, bool clear_text) { + base_type = p_basetype; selected = p_current; type = Variant::NIL; script = 0; @@ -617,7 +652,10 @@ void VisualScriptPropertySelector::select_from_instance(Object *p_instance, cons virtuals_only = false; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); seq_connect = false; connecting = p_connecting; @@ -625,7 +663,7 @@ void VisualScriptPropertySelector::select_from_instance(Object *p_instance, cons _update_search(); } -void VisualScriptPropertySelector::select_from_visual_script(const String &p_base, const bool p_connecting) { +void VisualScriptPropertySelector::select_from_visual_script(const String &p_base, const bool p_connecting, bool clear_text) { base_type = p_base; selected = ""; type = Variant::NIL; @@ -635,7 +673,10 @@ void VisualScriptPropertySelector::select_from_visual_script(const String &p_bas instance = NULL; virtuals_only = false; show_window(.5f); - search_box->set_text(""); + if (clear_text) + search_box->set_text(""); + else + search_box->select_all(); search_box->grab_focus(); connecting = p_connecting; @@ -646,7 +687,7 @@ void VisualScriptPropertySelector::show_window(float p_screen_ratio) { Rect2 rect; Point2 window_size = get_viewport_rect().size; rect.size = (window_size * p_screen_ratio).floor(); - rect.size.x = rect.size.x / 1.25f; + rect.size.x = rect.size.x / 2.2f; rect.position = ((window_size - rect.size) / 2.0f).floor(); popup(rect); } diff --git a/modules/visual_script/visual_script_property_selector.h b/modules/visual_script/visual_script_property_selector.h index 6235e4ba1d..3a7c8de6a2 100644 --- a/modules/visual_script/visual_script_property_selector.h +++ b/modules/visual_script/visual_script_property_selector.h @@ -31,8 +31,8 @@ #ifndef VISUALSCRIPT_PROPERTYSELECTOR_H #define VISUALSCRIPT_PROPERTYSELECTOR_H +#include "editor/editor_help.h" #include "editor/property_editor.h" -#include "editor_help.h" #include "scene/gui/rich_text_label.h" class VisualScriptPropertySelector : public ConfirmationDialog { @@ -45,7 +45,7 @@ class VisualScriptPropertySelector : public ConfirmationDialog { void create_visualscript_item(const String &name, TreeItem *const root, const String &search_input, const String &text); - void get_visual_node_names(const String &root_filter, const Set<String> &filter, bool &found, TreeItem *const root, LineEdit *const search_box); + void get_visual_node_names(const String &root_filter, const Set<String> &p_modifiers, bool &found, TreeItem *const root, LineEdit *const search_box); void _sbox_input(const Ref<InputEvent> &p_ie); @@ -74,13 +74,13 @@ protected: static void _bind_methods(); public: - void select_method_from_base_type(const String &p_base, const String &p_current = "", const bool p_virtuals_only = false, const bool p_connecting = true); - void select_from_base_type(const String &p_base, const String &p_current = "", bool p_virtuals_only = false, bool p_seq_connect = false, const bool p_connecting = true); - void select_from_script(const Ref<Script> &p_script, const String &p_current = "", const bool p_connecting = true); - void select_from_basic_type(Variant::Type p_type, const String &p_current = "", const bool p_connecting = true); - void select_from_action(const String &p_type, const String &p_current = "", const bool p_connecting = true); - void select_from_instance(Object *p_instance, const String &p_current = "", const bool p_connecting = true); - void select_from_visual_script(const String &p_base, const bool p_connecting = true); + void select_method_from_base_type(const String &p_base, const String &p_current = "", const bool p_virtuals_only = false, const bool p_connecting = true, bool clear_text = true); + void select_from_base_type(const String &p_base, const String &p_current = "", bool p_virtuals_only = false, bool p_seq_connect = false, const bool p_connecting = true, bool clear_text = true); + void select_from_script(const Ref<Script> &p_script, const String &p_current = "", const bool p_connecting = true, bool clear_text = true); + void select_from_basic_type(Variant::Type p_type, const String &p_current = "", const bool p_connecting = true, bool clear_text = true); + void select_from_action(const String &p_type, const String &p_current = "", const bool p_connecting = true, bool clear_text = true); + void select_from_instance(Object *p_instance, const String &p_current = "", const bool p_connecting = true, const String &p_basetype = "", bool clear_text = true); + void select_from_visual_script(const String &p_base, const bool p_connecting = true, bool clear_text = true); void show_window(float p_screen_ratio); diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp index 2f56e778b9..c330af60a4 100644 --- a/modules/vorbis/audio_stream_ogg_vorbis.cpp +++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp @@ -242,10 +242,7 @@ Error AudioStreamPlaybackOGGVorbis::set_file(const String &p_file) { stream_valid = false; Error err; f = FileAccess::open(file, FileAccess::READ, &err); - - if (err) { - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot open file '" + p_file + "'."); int errv = ov_open_callbacks(f, &vf, NULL, 0, _ov_callbacks); switch (errv) { @@ -294,9 +291,7 @@ Error AudioStreamPlaybackOGGVorbis::_load_stream() { Error err; f = FileAccess::open(file, FileAccess::READ, &err); - if (err) { - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err != OK, err, "Cannot open file '" + file + "'."); int errv = ov_open_callbacks(f, &vf, NULL, 0, _ov_callbacks); switch (errv) { diff --git a/modules/webm/video_stream_webm.cpp b/modules/webm/video_stream_webm.cpp index fa3602ad27..4ce0db3746 100644 --- a/modules/webm/video_stream_webm.cpp +++ b/modules/webm/video_stream_webm.cpp @@ -230,7 +230,7 @@ void VideoStreamPlaybackWebm::set_audio_track(int p_idx) { audio_track = p_idx; } -Ref<Texture> VideoStreamPlaybackWebm::get_texture() { +Ref<Texture> VideoStreamPlaybackWebm::get_texture() const { return texture; } diff --git a/modules/webm/video_stream_webm.h b/modules/webm/video_stream_webm.h index ddcbb1eb08..4f79d46cce 100644 --- a/modules/webm/video_stream_webm.h +++ b/modules/webm/video_stream_webm.h @@ -90,7 +90,7 @@ public: virtual void set_audio_track(int p_idx); - virtual Ref<Texture> get_texture(); + virtual Ref<Texture> get_texture() const; virtual void update(float p_delta); virtual void set_mix_callback(AudioMixCallback p_callback, void *p_userdata); diff --git a/modules/webrtc/doc_classes/WebRTCMultiplayer.xml b/modules/webrtc/doc_classes/WebRTCMultiplayer.xml index 2b0622fffa..605b1ef082 100644 --- a/modules/webrtc/doc_classes/WebRTCMultiplayer.xml +++ b/modules/webrtc/doc_classes/WebRTCMultiplayer.xml @@ -80,6 +80,10 @@ </description> </method> </methods> + <members> + <member name="refuse_new_connections" type="bool" setter="set_refuse_new_connections" getter="is_refusing_new_connections" override="true" default="false" /> + <member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="NetworkedMultiplayerPeer.TransferMode" default="2" /> + </members> <constants> </constants> </class> diff --git a/modules/websocket/doc_classes/WebSocketClient.xml b/modules/websocket/doc_classes/WebSocketClient.xml index c3baf9de83..705e3485f5 100644 --- a/modules/websocket/doc_classes/WebSocketClient.xml +++ b/modules/websocket/doc_classes/WebSocketClient.xml @@ -21,10 +21,13 @@ </argument> <argument index="2" name="gd_mp_api" type="bool" default="false"> </argument> + <argument index="3" name="custom_headers" type="PoolStringArray" default="PoolStringArray( )"> + </argument> <description> Connects to the given URL requesting one of the given [code]protocols[/code] as sub-protocol. If the list empty (default), no sub-protocol will be requested. If [code]true[/code] is passed as [code]gd_mp_api[/code], the client will behave like a network peer for the [MultiplayerAPI], connections to non-Godot servers will not work, and [signal data_received] will not be emitted. If [code]false[/code] is passed instead (default), you must call [PacketPeer] functions ([code]put_packet[/code], [code]get_packet[/code], etc.) on the [WebSocketPeer] returned via [code]get_peer(1)[/code] and not on this object directly (e.g. [code]get_peer(1).put_packet(data)[/code]). + You can optionally pass a list of [code]custom_headers[/code] to be added to the handshake HTTP request (not supported in HTML5 platform). </description> </method> <method name="disconnect_from_host"> @@ -38,8 +41,25 @@ Disconnects this client from the connected host. See [method WebSocketPeer.close] for more information. </description> </method> + <method name="get_connected_host" qualifiers="const"> + <return type="String"> + </return> + <description> + Return the IP address of the currently connected host. + </description> + </method> + <method name="get_connected_port" qualifiers="const"> + <return type="int"> + </return> + <description> + Return the IP port of the currently connected host. + </description> + </method> </methods> <members> + <member name="trusted_ssl_certificate" type="X509Certificate" setter="set_trusted_ssl_certificate" getter="get_trusted_ssl_certificate"> + If specified, this [X509Certificate] will be the only one accepted when connecting to an SSL host. Any other certificate provided by the server will be regarded as invalid. + </member> <member name="verify_ssl" type="bool" setter="set_verify_ssl_enabled" getter="is_verify_ssl_enabled"> If [code]true[/code], SSL certificate verification is enabled. [b]Note:[/b] You must specify the certificates to be used in the Project Settings for it to work when exported. diff --git a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml index b80a28e648..7070cfbdab 100644 --- a/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml +++ b/modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml @@ -37,6 +37,10 @@ </description> </method> </methods> + <members> + <member name="refuse_new_connections" type="bool" setter="set_refuse_new_connections" getter="is_refusing_new_connections" override="true" default="false" /> + <member name="transfer_mode" type="int" setter="set_transfer_mode" getter="get_transfer_mode" override="true" enum="NetworkedMultiplayerPeer.TransferMode" default="2" /> + </members> <signals> <signal name="peer_packet"> <argument index="0" name="peer_source" type="int"> diff --git a/modules/websocket/doc_classes/WebSocketServer.xml b/modules/websocket/doc_classes/WebSocketServer.xml index 63318e5874..86f2dae64f 100644 --- a/modules/websocket/doc_classes/WebSocketServer.xml +++ b/modules/websocket/doc_classes/WebSocketServer.xml @@ -82,6 +82,17 @@ </description> </method> </methods> + <members> + <member name="ca_chain" type="X509Certificate" setter="set_ca_chain" getter="get_ca_chain"> + When using SSL (see [member private_key] and [member ssl_certificate]), you can set this to a valid [X509Certificate] to be provided as additional CA chain information during the SSL handshake. + </member> + <member name="private_key" type="CryptoKey" setter="set_private_key" getter="get_private_key"> + When set to a valid [CryptoKey] (along with [member ssl_certificate]) will cause the server to require SSL instead of regular TCP (i.e. the [code]wss://[/code] protocol). + </member> + <member name="ssl_certificate" type="X509Certificate" setter="set_ssl_certificate" getter="get_ssl_certificate"> + When set to a valid [X509Certificate] (along with [member private_key]) will cause the server to require SSL instead of regular TCP (i.e. the [code]wss://[/code] protocol). + </member> + </members> <signals> <signal name="client_close_request"> <argument index="0" name="id" type="int"> diff --git a/modules/websocket/emws_client.cpp b/modules/websocket/emws_client.cpp index 409cc9f699..983db60d5e 100644 --- a/modules/websocket/emws_client.cpp +++ b/modules/websocket/emws_client.cpp @@ -64,13 +64,26 @@ EMSCRIPTEN_KEEPALIVE void _esws_on_close(void *obj, int code, char *reason, int } } -Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocols) { +Error EMWSClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocols, const Vector<String> p_custom_headers) { + + String proto_string; + for (int i = 0; i < p_protocols.size(); i++) { + if (i != 0) + proto_string += ","; + proto_string += p_protocols[i]; + } - String proto_string = p_protocols.join(","); String str = "ws://"; - if (p_ssl) + if (p_custom_headers.size()) { + WARN_PRINT_ONCE("Custom headers are not supported in in HTML5 platform."); + } + if (p_ssl) { str = "wss://"; + if (ssl_cert.is_valid()) { + WARN_PRINT_ONCE("Custom SSL certificate is not supported in HTML5 platform."); + } + } str += p_host + ":" + itos(p_port) + p_path; _is_connecting = true; @@ -193,12 +206,12 @@ void EMWSClient::disconnect_from_host(int p_code, String p_reason) { IP_Address EMWSClient::get_connected_host() const { - return IP_Address(); + ERR_FAIL_V_MSG(IP_Address(), "Not supported in HTML5 export."); }; uint16_t EMWSClient::get_connected_port() const { - return 1025; + ERR_FAIL_V_MSG(0, "Not supported in HTML5 export."); }; int EMWSClient::get_max_packet_size() const { diff --git a/modules/websocket/emws_client.h b/modules/websocket/emws_client.h index 1811d05eea..67705891b2 100644 --- a/modules/websocket/emws_client.h +++ b/modules/websocket/emws_client.h @@ -50,7 +50,7 @@ public: bool _is_connecting; Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets); - Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocol = PoolVector<String>()); + Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocol = Vector<String>(), const Vector<String> p_custom_headers = Vector<String>()); Ref<WebSocketPeer> get_peer(int p_peer_id) const; void disconnect_from_host(int p_code = 1000, String p_reason = ""); IP_Address get_connected_host() const; diff --git a/modules/websocket/emws_server.cpp b/modules/websocket/emws_server.cpp index c4bb459ad0..9a6a30d613 100644 --- a/modules/websocket/emws_server.cpp +++ b/modules/websocket/emws_server.cpp @@ -33,7 +33,7 @@ #include "emws_server.h" #include "core/os/os.h" -Error EMWSServer::listen(int p_port, PoolVector<String> p_protocols, bool gd_mp_api) { +Error EMWSServer::listen(int p_port, Vector<String> p_protocols, bool gd_mp_api) { return FAILED; } diff --git a/modules/websocket/emws_server.h b/modules/websocket/emws_server.h index a5e5b4090e..e8da8c26b4 100644 --- a/modules/websocket/emws_server.h +++ b/modules/websocket/emws_server.h @@ -43,7 +43,7 @@ class EMWSServer : public WebSocketServer { public: Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets); - Error listen(int p_port, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false); + Error listen(int p_port, Vector<String> p_protocols = Vector<String>(), bool gd_mp_api = false); void stop(); bool is_listening() const; bool has_peer(int p_id) const; diff --git a/modules/websocket/websocket_client.cpp b/modules/websocket/websocket_client.cpp index 4ff5404c61..8bbd5aa37f 100644 --- a/modules/websocket/websocket_client.cpp +++ b/modules/websocket/websocket_client.cpp @@ -40,7 +40,7 @@ WebSocketClient::WebSocketClient() { WebSocketClient::~WebSocketClient() { } -Error WebSocketClient::connect_to_url(String p_url, PoolVector<String> p_protocols, bool gd_mp_api) { +Error WebSocketClient::connect_to_url(String p_url, const Vector<String> p_protocols, bool gd_mp_api, const Vector<String> p_custom_headers) { _is_multiplayer = gd_mp_api; String host = p_url; @@ -72,7 +72,7 @@ Error WebSocketClient::connect_to_url(String p_url, PoolVector<String> p_protoco host = host.substr(0, p_len); } - return connect_to_host(host, path, port, ssl, p_protocols); + return connect_to_host(host, path, port, ssl, p_protocols, p_custom_headers); } void WebSocketClient::set_verify_ssl_enabled(bool p_verify_ssl) { @@ -85,6 +85,17 @@ bool WebSocketClient::is_verify_ssl_enabled() const { return verify_ssl; } +Ref<X509Certificate> WebSocketClient::get_trusted_ssl_certificate() const { + + return ssl_cert; +} + +void WebSocketClient::set_trusted_ssl_certificate(Ref<X509Certificate> p_cert) { + + ERR_FAIL_COND(get_connection_status() != CONNECTION_DISCONNECTED); + ssl_cert = p_cert; +} + bool WebSocketClient::is_server() const { return false; @@ -132,13 +143,20 @@ void WebSocketClient::_on_error() { } void WebSocketClient::_bind_methods() { - ClassDB::bind_method(D_METHOD("connect_to_url", "url", "protocols", "gd_mp_api"), &WebSocketClient::connect_to_url, DEFVAL(PoolVector<String>()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("connect_to_url", "url", "protocols", "gd_mp_api", "custom_headers"), &WebSocketClient::connect_to_url, DEFVAL(Vector<String>()), DEFVAL(false), DEFVAL(Vector<String>())); ClassDB::bind_method(D_METHOD("disconnect_from_host", "code", "reason"), &WebSocketClient::disconnect_from_host, DEFVAL(1000), DEFVAL("")); + ClassDB::bind_method(D_METHOD("get_connected_host"), &WebSocketClient::get_connected_host); + ClassDB::bind_method(D_METHOD("get_connected_port"), &WebSocketClient::get_connected_port); ClassDB::bind_method(D_METHOD("set_verify_ssl_enabled", "enabled"), &WebSocketClient::set_verify_ssl_enabled); ClassDB::bind_method(D_METHOD("is_verify_ssl_enabled"), &WebSocketClient::is_verify_ssl_enabled); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "verify_ssl", PROPERTY_HINT_NONE, "", 0), "set_verify_ssl_enabled", "is_verify_ssl_enabled"); + ClassDB::bind_method(D_METHOD("get_trusted_ssl_certificate"), &WebSocketClient::get_trusted_ssl_certificate); + ClassDB::bind_method(D_METHOD("set_trusted_ssl_certificate"), &WebSocketClient::set_trusted_ssl_certificate); + + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "trusted_ssl_certificate", PROPERTY_HINT_RESOURCE_TYPE, "X509Certificate", 0), "set_trusted_ssl_certificate", "get_trusted_ssl_certificate"); + ADD_SIGNAL(MethodInfo("data_received")); ADD_SIGNAL(MethodInfo("connection_established", PropertyInfo(Variant::STRING, "protocol"))); ADD_SIGNAL(MethodInfo("server_close_request", PropertyInfo(Variant::INT, "code"), PropertyInfo(Variant::STRING, "reason"))); diff --git a/modules/websocket/websocket_client.h b/modules/websocket/websocket_client.h index 7ddb9468a5..08fd6798fe 100644 --- a/modules/websocket/websocket_client.h +++ b/modules/websocket/websocket_client.h @@ -31,6 +31,7 @@ #ifndef WEBSOCKET_CLIENT_H #define WEBSOCKET_CLIENT_H +#include "core/crypto/crypto.h" #include "core/error_list.h" #include "websocket_multiplayer_peer.h" #include "websocket_peer.h" @@ -43,17 +44,20 @@ class WebSocketClient : public WebSocketMultiplayerPeer { protected: Ref<WebSocketPeer> _peer; bool verify_ssl; + Ref<X509Certificate> ssl_cert; static void _bind_methods(); public: - Error connect_to_url(String p_url, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false); + Error connect_to_url(String p_url, const Vector<String> p_protocols = Vector<String>(), bool gd_mp_api = false, const Vector<String> p_custom_headers = Vector<String>()); void set_verify_ssl_enabled(bool p_verify_ssl); bool is_verify_ssl_enabled() const; + Ref<X509Certificate> get_trusted_ssl_certificate() const; + void set_trusted_ssl_certificate(Ref<X509Certificate> p_cert); virtual void poll() = 0; - virtual Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocol = PoolVector<String>()) = 0; + virtual Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocol = Vector<String>(), const Vector<String> p_custom_headers = Vector<String>()) = 0; virtual void disconnect_from_host(int p_code = 1000, String p_reason = "") = 0; virtual IP_Address get_connected_host() const = 0; virtual uint16_t get_connected_port() const = 0; diff --git a/modules/websocket/websocket_server.cpp b/modules/websocket/websocket_server.cpp index ef5f6f5c20..c7414075ed 100644 --- a/modules/websocket/websocket_server.cpp +++ b/modules/websocket/websocket_server.cpp @@ -42,19 +42,58 @@ WebSocketServer::~WebSocketServer() { void WebSocketServer::_bind_methods() { ClassDB::bind_method(D_METHOD("is_listening"), &WebSocketServer::is_listening); - ClassDB::bind_method(D_METHOD("listen", "port", "protocols", "gd_mp_api"), &WebSocketServer::listen, DEFVAL(PoolVector<String>()), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("listen", "port", "protocols", "gd_mp_api"), &WebSocketServer::listen, DEFVAL(Vector<String>()), DEFVAL(false)); ClassDB::bind_method(D_METHOD("stop"), &WebSocketServer::stop); ClassDB::bind_method(D_METHOD("has_peer", "id"), &WebSocketServer::has_peer); ClassDB::bind_method(D_METHOD("get_peer_address", "id"), &WebSocketServer::get_peer_address); ClassDB::bind_method(D_METHOD("get_peer_port", "id"), &WebSocketServer::get_peer_port); ClassDB::bind_method(D_METHOD("disconnect_peer", "id", "code", "reason"), &WebSocketServer::disconnect_peer, DEFVAL(1000), DEFVAL("")); + ClassDB::bind_method(D_METHOD("get_private_key"), &WebSocketServer::get_private_key); + ClassDB::bind_method(D_METHOD("set_private_key"), &WebSocketServer::set_private_key); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "private_key", PROPERTY_HINT_RESOURCE_TYPE, "CryptoKey", 0), "set_private_key", "get_private_key"); + + ClassDB::bind_method(D_METHOD("get_ssl_certificate"), &WebSocketServer::get_ssl_certificate); + ClassDB::bind_method(D_METHOD("set_ssl_certificate"), &WebSocketServer::set_ssl_certificate); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "ssl_certificate", PROPERTY_HINT_RESOURCE_TYPE, "X509Certificate", 0), "set_ssl_certificate", "get_ssl_certificate"); + + ClassDB::bind_method(D_METHOD("get_ca_chain"), &WebSocketServer::get_ca_chain); + ClassDB::bind_method(D_METHOD("set_ca_chain"), &WebSocketServer::set_ca_chain); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "ca_chain", PROPERTY_HINT_RESOURCE_TYPE, "X509Certificate", 0), "set_ca_chain", "get_ca_chain"); + ADD_SIGNAL(MethodInfo("client_close_request", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::INT, "code"), PropertyInfo(Variant::STRING, "reason"))); ADD_SIGNAL(MethodInfo("client_disconnected", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::BOOL, "was_clean_close"))); ADD_SIGNAL(MethodInfo("client_connected", PropertyInfo(Variant::INT, "id"), PropertyInfo(Variant::STRING, "protocol"))); ADD_SIGNAL(MethodInfo("data_received", PropertyInfo(Variant::INT, "id"))); } +Ref<CryptoKey> WebSocketServer::get_private_key() const { + return private_key; +} + +void WebSocketServer::set_private_key(Ref<CryptoKey> p_key) { + ERR_FAIL_COND(is_listening()); + private_key = p_key; +} + +Ref<X509Certificate> WebSocketServer::get_ssl_certificate() const { + return ssl_cert; +} + +void WebSocketServer::set_ssl_certificate(Ref<X509Certificate> p_cert) { + ERR_FAIL_COND(is_listening()); + ssl_cert = p_cert; +} + +Ref<X509Certificate> WebSocketServer::get_ca_chain() const { + return ca_chain; +} + +void WebSocketServer::set_ca_chain(Ref<X509Certificate> p_ca_chain) { + ERR_FAIL_COND(is_listening()); + ca_chain = p_ca_chain; +} + NetworkedMultiplayerPeer::ConnectionStatus WebSocketServer::get_connection_status() const { if (is_listening()) return CONNECTION_CONNECTED; diff --git a/modules/websocket/websocket_server.h b/modules/websocket/websocket_server.h index 83c0c10419..0b39f94473 100644 --- a/modules/websocket/websocket_server.h +++ b/modules/websocket/websocket_server.h @@ -31,6 +31,7 @@ #ifndef WEBSOCKET_H #define WEBSOCKET_H +#include "core/crypto/crypto.h" #include "core/reference.h" #include "websocket_multiplayer_peer.h" #include "websocket_peer.h" @@ -43,9 +44,13 @@ class WebSocketServer : public WebSocketMultiplayerPeer { protected: static void _bind_methods(); + Ref<CryptoKey> private_key; + Ref<X509Certificate> ssl_cert; + Ref<X509Certificate> ca_chain; + public: virtual void poll() = 0; - virtual Error listen(int p_port, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false) = 0; + virtual Error listen(int p_port, const Vector<String> p_protocols = Vector<String>(), bool gd_mp_api = false) = 0; virtual void stop() = 0; virtual bool is_listening() const = 0; virtual bool has_peer(int p_id) const = 0; @@ -62,6 +67,15 @@ public: void _on_disconnect(int32_t p_peer_id, bool p_was_clean); void _on_close_request(int32_t p_peer_id, int p_code, String p_reason); + Ref<CryptoKey> get_private_key() const; + void set_private_key(Ref<CryptoKey> p_key); + + Ref<X509Certificate> get_ssl_certificate() const; + void set_ssl_certificate(Ref<X509Certificate> p_cert); + + Ref<X509Certificate> get_ca_chain() const; + void set_ca_chain(Ref<X509Certificate> p_ca_chain); + virtual Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets) = 0; WebSocketServer(); diff --git a/modules/websocket/wsl_client.cpp b/modules/websocket/wsl_client.cpp index 0006a057e0..ad70c9c0e1 100644 --- a/modules/websocket/wsl_client.cpp +++ b/modules/websocket/wsl_client.cpp @@ -86,6 +86,7 @@ void WSLClient::_do_handshake() { WSLPeer::PeerData *data = memnew(struct WSLPeer::PeerData); data->obj = this; data->conn = _connection; + data->tcp = _tcp; data->is_server = false; data->id = 1; _peer->make_context(data, _in_buf_size, _in_pkt_size, _out_buf_size, _out_pkt_size); @@ -151,7 +152,7 @@ bool WSLClient::_verify_headers(String &r_protocol) { return true; } -Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocols) { +Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocols, const Vector<String> p_custom_headers) { ERR_FAIL_COND_V(_connection.is_valid(), ERR_ALREADY_IN_USE); @@ -180,7 +181,12 @@ Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port, _connection = _tcp; _use_ssl = p_ssl; _host = p_host; - _protocols = p_protocols; + // Strip edges from protocols. + _protocols.resize(p_protocols.size()); + String *pw = _protocols.ptrw(); + for (int i = 0; i < p_protocols.size(); i++) { + pw[i] = p_protocols[i].strip_edges(); + } _key = WSLPeer::generate_key(); // TODO custom extra headers (allow overriding this too?) @@ -199,6 +205,9 @@ Error WSLClient::connect_to_host(String p_host, String p_path, uint16_t p_port, } request += "\r\n"; } + for (int i = 0; i < p_custom_headers.size(); i++) { + request += p_custom_headers[i] + "\r\n"; + } request += "\r\n"; _request = request.utf8(); @@ -236,7 +245,7 @@ void WSLClient::poll() { ssl = Ref<StreamPeerSSL>(StreamPeerSSL::create()); ERR_FAIL_COND_MSG(ssl.is_null(), "SSL is not available in this build."); ssl->set_blocking_handshake_enabled(false); - if (ssl->connect_to_stream(_tcp, verify_ssl, _host) != OK) { + if (ssl->connect_to_stream(_tcp, verify_ssl, _host, ssl_cert) != OK) { disconnect_from_host(); _on_error(); return; @@ -293,7 +302,7 @@ void WSLClient::disconnect_from_host(int p_code, String p_reason) { _key = ""; _host = ""; - _protocols.resize(0); + _protocols.clear(); _use_ssl = false; _request = ""; @@ -305,12 +314,14 @@ void WSLClient::disconnect_from_host(int p_code, String p_reason) { IP_Address WSLClient::get_connected_host() const { - return IP_Address(); + ERR_FAIL_COND_V(!_peer->is_connected_to_host(), IP_Address()); + return _peer->get_connected_host(); } uint16_t WSLClient::get_connected_port() const { - return 1025; + ERR_FAIL_COND_V(!_peer->is_connected_to_host(), 0); + return _peer->get_connected_port(); } Error WSLClient::set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets) { diff --git a/modules/websocket/wsl_client.h b/modules/websocket/wsl_client.h index 57dfd635b7..870be94a87 100644 --- a/modules/websocket/wsl_client.h +++ b/modules/websocket/wsl_client.h @@ -64,7 +64,7 @@ private: String _key; String _host; - PoolVector<String> _protocols; + Vector<String> _protocols; bool _use_ssl; void _do_handshake(); @@ -72,7 +72,7 @@ private: public: Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets); - Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, PoolVector<String> p_protocol = PoolVector<String>()); + Error connect_to_host(String p_host, String p_path, uint16_t p_port, bool p_ssl, const Vector<String> p_protocol = Vector<String>(), const Vector<String> p_custom_headers = Vector<String>()); int get_max_packet_size() const; Ref<WebSocketPeer> get_peer(int p_peer_id) const; void disconnect_from_host(int p_code = 1000, String p_reason = ""); diff --git a/modules/websocket/wsl_peer.cpp b/modules/websocket/wsl_peer.cpp index 74fb901232..32beccde5d 100644 --- a/modules/websocket/wsl_peer.cpp +++ b/modules/websocket/wsl_peer.cpp @@ -208,7 +208,6 @@ void WSLPeer::make_context(PeerData *p_data, unsigned int p_in_buf_size, unsigne _data = p_data; _data->peer = this; _data->valid = true; - _connection = Ref<StreamPeer>(_data->conn); if (_data->is_server) wslay_event_context_server_init(&(_data->ctx), &wsl_callbacks, _data); @@ -302,18 +301,16 @@ void WSLPeer::close(int p_code, String p_reason) { IP_Address WSLPeer::get_connected_host() const { - ERR_FAIL_COND_V(!is_connected_to_host(), IP_Address()); + ERR_FAIL_COND_V(!is_connected_to_host() || _data->tcp.is_null(), IP_Address()); - IP_Address ip; - return ip; + return _data->tcp->get_connected_host(); } uint16_t WSLPeer::get_connected_port() const { - ERR_FAIL_COND_V(!is_connected_to_host(), 0); + ERR_FAIL_COND_V(!is_connected_to_host() || _data->tcp.is_null(), 0); - uint16_t port = 0; - return port; + return _data->tcp->get_connected_port(); } void WSLPeer::invalidate() { diff --git a/modules/websocket/wsl_peer.h b/modules/websocket/wsl_peer.h index d51b304fe1..01ad250468 100644 --- a/modules/websocket/wsl_peer.h +++ b/modules/websocket/wsl_peer.h @@ -35,6 +35,7 @@ #include "core/error_list.h" #include "core/io/packet_peer.h" +#include "core/io/stream_peer_tcp.h" #include "core/ring_buffer.h" #include "packet_buffer.h" #include "websocket_peer.h" @@ -55,6 +56,7 @@ public: void *obj; void *peer; Ref<StreamPeer> conn; + Ref<StreamPeerTCP> tcp; int id; wslay_event_context_ptr ctx; @@ -77,7 +79,6 @@ private: static bool _wsl_poll(struct PeerData *p_data); static void _wsl_destroy(struct PeerData **p_data); - Ref<StreamPeer> _connection; struct PeerData *_data; uint8_t _is_string; // Our packet info is just a boolean (is_string), using uint8_t for it. diff --git a/modules/websocket/wsl_server.cpp b/modules/websocket/wsl_server.cpp index efb526eed1..2181775b99 100644 --- a/modules/websocket/wsl_server.cpp +++ b/modules/websocket/wsl_server.cpp @@ -35,6 +35,7 @@ #include "core/project_settings.h" WSLServer::PendingPeer::PendingPeer() { + use_ssl = false; time = 0; has_request = false; response_sent = 0; @@ -42,7 +43,7 @@ WSLServer::PendingPeer::PendingPeer() { memset(req_buf, 0, sizeof(req_buf)); } -bool WSLServer::PendingPeer::_parse_request(const PoolStringArray p_protocols) { +bool WSLServer::PendingPeer::_parse_request(const Vector<String> p_protocols) { Vector<String> psa = String((char *)req_buf).split("\r\n"); int len = psa.size(); ERR_FAIL_COND_V_MSG(len < 4, false, "Not enough response headers, got: " + itos(len) + ", expected >= 4."); @@ -79,11 +80,12 @@ bool WSLServer::PendingPeer::_parse_request(const PoolStringArray p_protocols) { if (headers.has("sec-websocket-protocol")) { Vector<String> protos = headers["sec-websocket-protocol"].split(","); for (int i = 0; i < protos.size(); i++) { + String proto = protos[i].strip_edges(); // Check if we have the given protocol for (int j = 0; j < p_protocols.size(); j++) { - if (protos[i] != p_protocols[j]) + if (proto != p_protocols[j]) continue; - protocol = protos[i]; + protocol = proto; break; } // Found a protocol @@ -97,9 +99,19 @@ bool WSLServer::PendingPeer::_parse_request(const PoolStringArray p_protocols) { return true; } -Error WSLServer::PendingPeer::do_handshake(PoolStringArray p_protocols) { +Error WSLServer::PendingPeer::do_handshake(const Vector<String> p_protocols) { if (OS::get_singleton()->get_ticks_msec() - time > WSL_SERVER_TIMEOUT) return ERR_TIMEOUT; + if (use_ssl) { + Ref<StreamPeerSSL> ssl = static_cast<Ref<StreamPeerSSL> >(connection); + if (ssl.is_null()) + return FAILED; + ssl->poll(); + if (ssl->get_status() == StreamPeerSSL::STATUS_HANDSHAKING) + return ERR_BUSY; + else if (ssl->get_status() != StreamPeerSSL::STATUS_CONNECTED) + return FAILED; + } if (!has_request) { int read = 0; while (true) { @@ -143,11 +155,16 @@ Error WSLServer::PendingPeer::do_handshake(PoolStringArray p_protocols) { return OK; } -Error WSLServer::listen(int p_port, PoolVector<String> p_protocols, bool gd_mp_api) { +Error WSLServer::listen(int p_port, const Vector<String> p_protocols, bool gd_mp_api) { ERR_FAIL_COND_V(is_listening(), ERR_ALREADY_IN_USE); _is_multiplayer = gd_mp_api; - _protocols = p_protocols; + // Strip edges from protocols. + _protocols.resize(p_protocols.size()); + String *pw = _protocols.ptrw(); + for (int i = 0; i < p_protocols.size(); i++) { + pw[i] = p_protocols[i].strip_edges(); + } _server->listen(p_port); return OK; @@ -185,6 +202,7 @@ void WSLServer::poll() { WSLPeer::PeerData *data = memnew(struct WSLPeer::PeerData); data->obj = this; data->conn = ppeer->connection; + data->tcp = ppeer->tcp; data->is_server = true; data->id = id; @@ -204,12 +222,21 @@ void WSLServer::poll() { return; while (_server->is_connection_available()) { - Ref<StreamPeer> conn = _server->take_connection(); + Ref<StreamPeerTCP> conn = _server->take_connection(); if (is_refusing_new_connections()) continue; // Conn will go out-of-scope and be closed. Ref<PendingPeer> peer = memnew(PendingPeer); - peer->connection = conn; + if (private_key.is_valid() && ssl_cert.is_valid()) { + Ref<StreamPeerSSL> ssl = Ref<StreamPeerSSL>(StreamPeerSSL::create()); + ssl->set_blocking_handshake_enabled(false); + ssl->accept_stream(conn, private_key, ssl_cert, ca_chain); + peer->connection = ssl; + peer->use_ssl = true; + } else { + peer->connection = conn; + } + peer->tcp = conn; peer->time = OS::get_singleton()->get_ticks_msec(); _pending.push_back(peer); } @@ -231,6 +258,7 @@ void WSLServer::stop() { } _pending.clear(); _peer_map.clear(); + _protocols.clear(); } bool WSLServer::has_peer(int p_id) const { diff --git a/modules/websocket/wsl_server.h b/modules/websocket/wsl_server.h index 2ceb941073..aae563355e 100644 --- a/modules/websocket/wsl_server.h +++ b/modules/websocket/wsl_server.h @@ -36,6 +36,7 @@ #include "websocket_server.h" #include "wsl_peer.h" +#include "core/io/stream_peer_ssl.h" #include "core/io/stream_peer_tcp.h" #include "core/io/tcp_server.h" @@ -49,10 +50,12 @@ private: class PendingPeer : public Reference { private: - bool _parse_request(const PoolStringArray p_protocols); + bool _parse_request(const Vector<String> p_protocols); public: + Ref<StreamPeerTCP> tcp; Ref<StreamPeer> connection; + bool use_ssl; int time; uint8_t req_buf[WSL_MAX_HEADER_SIZE]; @@ -65,7 +68,7 @@ private: PendingPeer(); - Error do_handshake(const PoolStringArray p_protocols); + Error do_handshake(const Vector<String> p_protocols); }; int _in_buf_size; @@ -75,11 +78,11 @@ private: List<Ref<PendingPeer> > _pending; Ref<TCP_Server> _server; - PoolStringArray _protocols; + Vector<String> _protocols; public: Error set_buffers(int p_in_buffer, int p_in_packets, int p_out_buffer, int p_out_packets); - Error listen(int p_port, PoolVector<String> p_protocols = PoolVector<String>(), bool gd_mp_api = false); + Error listen(int p_port, const Vector<String> p_protocols = Vector<String>(), bool gd_mp_api = false); void stop(); bool is_listening() const; int get_max_packet_size() const; diff --git a/platform/android/SCsub b/platform/android/SCsub index 1bd8161fa7..65172a12c0 100644 --- a/platform/android/SCsub +++ b/platform/android/SCsub @@ -50,30 +50,8 @@ if lib_arch_dir != '': else: # release_debug, debug lib_type_dir = 'debug' - out_dir = '#platform/android/java/libs/' + lib_type_dir + '/' + lib_arch_dir + out_dir = '#platform/android/java/lib/libs/' + lib_type_dir + '/' + lib_arch_dir env_android.Command(out_dir + '/libgodot_android.so', '#bin/libgodot' + env['SHLIBSUFFIX'], Move("$TARGET", "$SOURCE")) stl_lib_path = str(env['ANDROID_NDK_ROOT']) + '/sources/cxx-stl/llvm-libc++/libs/' + lib_arch_dir + '/libc++_shared.so' env_android.Command(out_dir + '/libc++_shared.so', stl_lib_path, Copy("$TARGET", "$SOURCE")) - -# Zip android/java folder for the source export template. -print("Archiving platform/android/java as bin/android_source.zip...") -import os -import zipfile -# Change dir to avoid have zipped paths start from the android/java folder. -olddir = os.getcwd() -os.chdir(Dir('#platform/android/java').abspath) -bindir = Dir('#bin').abspath -# Make 'bin' dir if missing, can happen on fresh clone. -if not os.path.exists(bindir): - os.makedirs(bindir) -zipf = zipfile.ZipFile(os.path.join(bindir, 'android_source.zip'), 'w', zipfile.ZIP_DEFLATED) -exclude_dirs = ['.gradle', 'build', 'libs', 'patches'] -for root, dirs, files in os.walk('.', topdown=True): - # Change 'dirs' in place to exclude folders we don't want. - # https://stackoverflow.com/a/19859907 - dirs[:] = [d for d in dirs if d not in exclude_dirs] - for f in files: - zipf.write(os.path.join(root, f)) -zipf.close() -os.chdir(olddir) diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp index 441fa38bff..6d021ad33a 100644 --- a/platform/android/export/export.cpp +++ b/platform/android/export/export.cpp @@ -598,7 +598,7 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { String dst_path = String("lib").plus_file(abi).plus_file(p_so.path.get_file()); Vector<uint8_t> array = FileAccess::get_file_as_array(p_so.path); Error store_err = store_in_apk(ed, dst_path, array); - ERR_FAIL_COND_V(store_err, store_err); + ERR_FAIL_COND_V_MSG(store_err, store_err, "Cannot store in apk file '" + dst_path + "'."); } } if (!exported) { @@ -766,17 +766,9 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { uint32_t attr_value = decode_uint32(&p_manifest[iofs + 8]); uint32_t attr_resid = decode_uint32(&p_manifest[iofs + 16]); - String value; - if (attr_value != 0xFFFFFFFF) - value = string_table[attr_value]; - else - value = "Res #" + itos(attr_resid); + const String value = (attr_value != 0xFFFFFFFF) ? string_table[attr_value] : "Res #" + itos(attr_resid); String attrname = string_table[attr_name]; - String nspace; - if (attr_nspace != 0xFFFFFFFF) - nspace = string_table[attr_nspace]; - else - nspace = ""; + const String nspace = (attr_nspace != 0xFFFFFFFF) ? string_table[attr_nspace] : ""; //replace project information if (tname == "manifest" && attrname == "package") { @@ -794,6 +786,10 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { string_table.write[attr_value] = version_name; } + if (tname == "instrumentation" && attrname == "targetPackage") { + string_table.write[attr_value] = get_package_name(package_name); + } + if (tname == "activity" && attrname == "screenOrientation") { encode_uint32(orientation == 0 ? 0 : 1, &p_manifest.write[iofs + 16]); @@ -824,14 +820,16 @@ class EditorExportPlatformAndroid : public EditorExportPlatform { encode_uint32(min_gles3 ? 0x00030000 : 0x00020000, &p_manifest.write[iofs + 16]); } - if (tname == "meta-data" && attrname == "name" && string_table[attr_value] == "xr_mode_metadata_name") { + // FIXME: `attr_value != 0xFFFFFFFF` below added as a stopgap measure for GH-32553, + // but the issue should be debugged further and properly addressed. + if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") { // Update the meta-data 'android:name' attribute based on the selected XR mode. if (xr_mode_index == 1 /* XRMode.OVR */) { string_table.write[attr_value] = "com.samsung.android.vr.application.mode"; } } - if (tname == "meta-data" && attrname == "value" && string_table[attr_value] == "xr_mode_metadata_value") { + if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") { // Update the meta-data 'android:value' attribute based on the selected XR mode. if (xr_mode_index == 1 /* XRMode.OVR */) { string_table.write[attr_value] = "vr_only"; @@ -1286,7 +1284,7 @@ public: r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "graphics/xr_mode", PROPERTY_HINT_ENUM, "Regular,Oculus Mobile VR"), 0)); r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "graphics/degrees_of_freedom", PROPERTY_HINT_ENUM, "None,3DOF and 6DOF,6DOF"), 0)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/32_bits_framebuffer"), true)); - r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "one_click_deploy/clear_previous_install"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "one_click_deploy/clear_previous_install"), false)); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/debug", PROPERTY_HINT_GLOBAL_FILE, "*.apk"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "custom_package/release", PROPERTY_HINT_GLOBAL_FILE, "*.apk"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "custom_package/use_custom_build"), false)); @@ -1304,7 +1302,7 @@ public: r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_xlarge"), true)); r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/opengl_debug"), false)); - for (unsigned int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { + for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_icons[i].option_id, PROPERTY_HINT_FILE, "*.png"), "")); } @@ -1347,7 +1345,7 @@ public: return logo; } - virtual bool poll_devices() { + virtual bool poll_export() { bool dc = devices_changed; if (dc) { @@ -1357,7 +1355,7 @@ public: return dc; } - virtual int get_device_count() const { + virtual int get_options_count() const { device_lock->lock(); int dc = devices.size(); @@ -1366,20 +1364,31 @@ public: return dc; } - virtual String get_device_name(int p_device) const { + virtual String get_options_tooltip() const { - ERR_FAIL_INDEX_V(p_device, devices.size(), ""); + return TTR("Select device from the list"); + } + + virtual String get_option_label(int p_index) const { + + ERR_FAIL_INDEX_V(p_index, devices.size(), ""); device_lock->lock(); - String s = devices[p_device].name; + String s = devices[p_index].name; device_lock->unlock(); return s; } - virtual String get_device_info(int p_device) const { + virtual String get_option_tooltip(int p_index) const { - ERR_FAIL_INDEX_V(p_device, devices.size(), ""); + ERR_FAIL_INDEX_V(p_index, devices.size(), ""); device_lock->lock(); - String s = devices[p_device].description; + String s = devices[p_index].description; + if (devices.size() == 1) { + // Tooltip will be: + // Name + // Description + s = devices[p_index].name + "\n\n" + s; + } device_lock->unlock(); return s; } @@ -1470,8 +1479,8 @@ public: if (use_remote) { if (use_reverse) { - static const char *const msg = "** Device API >= 21; debugging over USB **"; - EditorNode::get_singleton()->get_log()->add_message(msg); + static const char *const msg = "--- Device API >= 21; debugging over USB ---"; + EditorNode::get_singleton()->get_log()->add_message(msg, EditorLog::MSG_TYPE_EDITOR); print_line(String(msg).to_upper()); args.clear(); @@ -1511,8 +1520,8 @@ public: } } else { - static const char *const msg = "** Device API < 21; debugging over Wi-Fi **"; - EditorNode::get_singleton()->get_log()->add_message(msg); + static const char *const msg = "--- Device API < 21; debugging over Wi-Fi ---"; + EditorNode::get_singleton()->get_log()->add_message(msg, EditorLog::MSG_TYPE_EDITOR); print_line(String(msg).to_upper()); } } @@ -1533,7 +1542,7 @@ public: args.push_back("-a"); args.push_back("android.intent.action.MAIN"); args.push_back("-n"); - args.push_back(get_package_name(package_name) + "/org.godotengine.godot.Godot"); + args.push_back(get_package_name(package_name) + "/com.godot.game.GodotApp"); err = OS::get_singleton()->execute(adb, args, true, NULL, NULL, &rv); if (err || rv != 0) { @@ -1666,7 +1675,7 @@ public: DirAccessRef da = DirAccess::open("res://android"); - ERR_FAIL_COND(!da); + ERR_FAIL_COND_MSG(!da, "Cannot open directory 'res://android'."); Map<String, List<String> > directory_paths; Map<String, List<String> > manifest_sections; Map<String, List<String> > gradle_sections; @@ -1871,7 +1880,7 @@ public: new_file += "<!--CHUNK_" + text + "_BEGIN-->\n"; if (!found) { - ERR_PRINTS("No end marker found in AndroidManifest.conf for chunk: " + text); + ERR_PRINTS("No end marker found in AndroidManifest.xml for chunk: " + text); f->seek(pos); } else { //add chunk lines @@ -1890,7 +1899,7 @@ public: String last_tag = "android:icon=\"@drawable/icon\""; int last_tag_pos = l.find(last_tag); if (last_tag_pos == -1) { - WARN_PRINTS("No adding of application tags because could not find last tag for <application: " + last_tag); + ERR_PRINTS("Not adding application attributes as the expected tag was not found in '<application': " + last_tag); new_file += l + "\n"; } else { String base = l.substr(0, last_tag_pos + last_tag.length()); @@ -1942,7 +1951,7 @@ public: //build project if custom build is enabled String sdk_path = EDITOR_GET("export/android/custom_build_sdk_path"); - ERR_FAIL_COND_V(sdk_path == "", ERR_UNCONFIGURED); + ERR_FAIL_COND_V_MSG(sdk_path == "", ERR_UNCONFIGURED, "Android SDK path must be configured in Editor Settings at 'export/android/custom_build_sdk_path'."); _update_custom_build_project(); @@ -1976,9 +1985,9 @@ public: return ERR_CANT_CREATE; } if (p_debug) { - src_apk = build_path.plus_file("build/outputs/apk/debug/build-debug-unsigned.apk"); + src_apk = build_path.plus_file("build/outputs/apk/debug/android_debug.apk"); } else { - src_apk = build_path.plus_file("build/outputs/apk/release/build-release-unsigned.apk"); + src_apk = build_path.plus_file("build/outputs/apk/release/android_release.apk"); } if (!FileAccess::exists(src_apk)) { @@ -2096,7 +2105,7 @@ public: if (file == "res/drawable-nodpi-v4/icon.png") { bool found = false; - for (unsigned int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { + for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges(); if (icon_path != "" && icon_path.ends_with(".png")) { FileAccess *f = FileAccess::open(icon_path, FileAccess::READ); @@ -2222,7 +2231,7 @@ public: APKExportData ed; ed.ep = &ep; ed.apk = unaligned_apk; - for (unsigned int i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { + for (uint64_t i = 0; i < sizeof(launcher_icons) / sizeof(launcher_icons[0]); ++i) { String icon_path = String(p_preset->get(launcher_icons[i].option_id)).strip_edges(); if (icon_path != "" && icon_path.ends_with(".png") && FileAccess::exists(icon_path)) { Vector<uint8_t> data = FileAccess::get_file_as_array(icon_path); diff --git a/platform/android/file_access_jandroid.cpp b/platform/android/file_access_jandroid.cpp index 5b8cf01138..d4c2a23aa0 100644 --- a/platform/android/file_access_jandroid.cpp +++ b/platform/android/file_access_jandroid.cpp @@ -94,13 +94,13 @@ void FileAccessJAndroid::seek(size_t p_position) { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND(!is_open()); + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); env->CallVoidMethod(io, _file_seek, id, p_position); } void FileAccessJAndroid::seek_end(int64_t p_position) { - ERR_FAIL_COND(!is_open()); + ERR_FAIL_COND_MSG(!is_open(), "File must be opened before use."); seek(get_len()); } @@ -108,34 +108,34 @@ void FileAccessJAndroid::seek_end(int64_t p_position) { size_t FileAccessJAndroid::get_position() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(), 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); return env->CallIntMethod(io, _file_tell, id); } size_t FileAccessJAndroid::get_len() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(), 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); return env->CallIntMethod(io, _file_get_size, id); } bool FileAccessJAndroid::eof_reached() const { JNIEnv *env = ThreadAndroid::get_env(); - ERR_FAIL_COND_V(!is_open(), 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); return env->CallIntMethod(io, _file_eof, id); } uint8_t FileAccessJAndroid::get_8() const { - ERR_FAIL_COND_V(!is_open(), 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); uint8_t byte; get_buffer(&byte, 1); return byte; } int FileAccessJAndroid::get_buffer(uint8_t *p_dst, int p_length) const { - ERR_FAIL_COND_V(!is_open(), 0); + ERR_FAIL_COND_V_MSG(!is_open(), 0, "File must be opened before use."); if (p_length == 0) return 0; JNIEnv *env = ThreadAndroid::get_env(); diff --git a/platform/android/java/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml index 5114aeb8c5..ba01ec313b 100644 --- a/platform/android/java/AndroidManifest.xml +++ b/platform/android/java/app/AndroidManifest.xml @@ -26,11 +26,8 @@ <!-- Any tag in this line after android:icon will be erased when doing custom builds. --> <!-- If you want to add tags manually, do before it. --> - <application - android:label="@string/godot_project_name_string" - android:allowBackup="false" - tools:ignore="GoogleAppIndexingWarning" - android:icon="@drawable/icon" > + <!-- WARNING: This should stay on a single line until the parsing code is improved. See GH-32414. --> + <application android:label="@string/godot_project_name_string" android:allowBackup="false" tools:ignore="GoogleAppIndexingWarning" android:icon="@drawable/icon" > <!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. --> <!-- Do these changes in the export preset. Adding new ones is fine. --> @@ -41,7 +38,7 @@ android:value="xr_mode_metadata_value" /> <activity - android:name="org.godotengine.godot.Godot" + android:name=".GodotApp" android:label="@string/godot_project_name_string" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:launchMode="singleTask" @@ -56,18 +53,10 @@ </intent-filter> </activity> - <service android:name="org.godotengine.godot.GodotDownloaderService" /> - <!-- Custom application XML added by add-ons. --> <!--CHUNK_APPLICATION_BEGIN--> <!--CHUNK_APPLICATION_END--> </application> - <instrumentation - android:icon="@drawable/icon" - android:label="@string/godot_project_name_string" - android:name="org.godotengine.godot.GodotInstrumentation" - android:targetPackage="org.godotengine.game" /> - </manifest> diff --git a/platform/android/java/app/build.gradle b/platform/android/java/app/build.gradle new file mode 100644 index 0000000000..9f64c3dc8a --- /dev/null +++ b/platform/android/java/app/build.gradle @@ -0,0 +1,121 @@ +// Gradle build config for Godot Engine's Android port. +// +// Do not remove/modify comments ending with BEGIN/END, they are used to inject +// addon-specific configuration. +apply from: 'config.gradle' + +buildscript { + apply from: 'config.gradle' + + repositories { + google() + jcenter() +//CHUNK_BUILDSCRIPT_REPOSITORIES_BEGIN +//CHUNK_BUILDSCRIPT_REPOSITORIES_END + } + dependencies { + classpath libraries.androidGradlePlugin +//CHUNK_BUILDSCRIPT_DEPENDENCIES_BEGIN +//CHUNK_BUILDSCRIPT_DEPENDENCIES_END + } +} + +apply plugin: 'com.android.application' + +allprojects { + repositories { + mavenCentral() + google() + jcenter() +//CHUNK_ALLPROJECTS_REPOSITORIES_BEGIN +//CHUNK_ALLPROJECTS_REPOSITORIES_END + } +} + +dependencies { + if (rootProject.findProject(":lib")) { + implementation project(":lib") + } else { + // Custom build mode. In this scenario this project is the only one around and the Godot + // library is available through the pre-generated godot-lib.*.aar android archive files. + debugImplementation fileTree(dir: 'libs/debug', include: ['*.jar', '*.aar']) + releaseImplementation fileTree(dir: 'libs/release', include: ['*.jar', '*.aar']) + } +//CHUNK_DEPENDENCIES_BEGIN +//CHUNK_DEPENDENCIES_END +} + +android { + compileSdkVersion versions.compileSdk + buildToolsVersion versions.buildTools + + defaultConfig { + // Feel free to modify the application id to your own. + applicationId "com.godot.game" + minSdkVersion versions.minSdk + targetSdkVersion versions.targetSdk +//CHUNK_ANDROID_DEFAULTCONFIG_BEGIN +//CHUNK_ANDROID_DEFAULTCONFIG_END + } + + lintOptions { + abortOnError false + disable 'MissingTranslation', 'UnusedResources' + } + + packagingOptions { + exclude 'META-INF/LICENSE' + exclude 'META-INF/NOTICE' + } + + // Both signing and zip-aligning will be done at export time + buildTypes.all { buildType -> + buildType.zipAlignEnabled false + buildType.signingConfig null + } + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = [ + 'src' +//DIR_SRC_BEGIN +//DIR_SRC_END + ] + res.srcDirs = [ + 'res' +//DIR_RES_BEGIN +//DIR_RES_END + ] + aidl.srcDirs = [ + 'aidl' +//DIR_AIDL_BEGIN +//DIR_AIDL_END + ] + assets.srcDirs = [ + 'assets' +//DIR_ASSETS_BEGIN +//DIR_ASSETS_END + ] + } + debug.jniLibs.srcDirs = [ + 'libs/debug' +//DIR_JNI_DEBUG_BEGIN +//DIR_JNI_DEBUG_END + ] + release.jniLibs.srcDirs = [ + 'libs/release' +//DIR_JNI_RELEASE_BEGIN +//DIR_JNI_RELEASE_END + ] + } + + applicationVariants.all { variant -> + variant.outputs.all { output -> + output.outputFileName = "android_${variant.name}.apk" + } + } +} + +//CHUNK_GLOBAL_BEGIN +//CHUNK_GLOBAL_END diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle new file mode 100644 index 0000000000..20c3123221 --- /dev/null +++ b/platform/android/java/app/config.gradle @@ -0,0 +1,12 @@ +ext.versions = [ + androidGradlePlugin : '3.4.2', + compileSdk : 28, + minSdk : 18, + targetSdk : 28, + buildTools : '28.0.3', + +] + +ext.libraries = [ + androidGradlePlugin : "com.android.tools.build:gradle:$versions.androidGradlePlugin" +] diff --git a/platform/android/java/app/src/com/godot/game/GodotApp.java b/platform/android/java/app/src/com/godot/game/GodotApp.java new file mode 100644 index 0000000000..d7469a8765 --- /dev/null +++ b/platform/android/java/app/src/com/godot/game/GodotApp.java @@ -0,0 +1,40 @@ +/*************************************************************************/ +/* GodotApp.java */ +/*************************************************************************/ +/* 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. */ +/*************************************************************************/ + +package com.godot.game; + +import org.godotengine.godot.Godot; + +/** + * Template activity for Godot Android custom builds. + * Feel free to extend and modify this class for your custom logic. + */ +public class GodotApp extends Godot { +} diff --git a/platform/android/java/build.gradle b/platform/android/java/build.gradle index 0f8499ba91..2052017888 100644 --- a/platform/android/java/build.gradle +++ b/platform/android/java/build.gradle @@ -1,111 +1,152 @@ -// Gradle build config for Godot Engine's Android port. -// -// Do not remove/modify comments ending with BEGIN/END, they are used to inject -// addon-specific configuration. +apply from: 'app/config.gradle' buildscript { + apply from: 'app/config.gradle' + repositories { google() jcenter() -//CHUNK_BUILDSCRIPT_REPOSITORIES_BEGIN -//CHUNK_BUILDSCRIPT_REPOSITORIES_END } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' -//CHUNK_BUILDSCRIPT_DEPENDENCIES_BEGIN -//CHUNK_BUILDSCRIPT_DEPENDENCIES_END + classpath libraries.androidGradlePlugin } } -apply plugin: 'com.android.application' - allprojects { repositories { - mavenCentral() google() jcenter() -//CHUNK_ALLPROJECTS_REPOSITORIES_BEGIN -//CHUNK_ALLPROJECTS_REPOSITORIES_END + mavenCentral() } } -dependencies { - implementation "com.android.support:support-core-utils:28.0.0" -//CHUNK_DEPENDENCIES_BEGIN -//CHUNK_DEPENDENCIES_END +ext { + sconsExt = org.gradle.internal.os.OperatingSystem.current().isWindows() ? ".bat" : "" + + supportedAbis = ["armv7", "arm64v8", "x86", "x86_64"] + supportedTargets = ['release':"release", 'debug':"release_debug"] + + // Used by gradle to specify which architecture to build for by default when running `./gradlew build`. + // This command is usually used by Android Studio. + // If building manually on the command line, it's recommended to use the + // `./gradlew generateGodotTemplates` build command instead after running the `scons` command. + // The defaultAbi must be one of the {supportedAbis} values. + defaultAbi = "arm64v8" } -android { - compileSdkVersion 28 - buildToolsVersion "28.0.3" - useLibrary 'org.apache.http.legacy' +def rootDir = "../../.." +def binDir = "$rootDir/bin/" - defaultConfig { - minSdkVersion 18 - targetSdkVersion 28 -//CHUNK_ANDROID_DEFAULTCONFIG_BEGIN -//CHUNK_ANDROID_DEFAULTCONFIG_END - } +def getSconsTaskName(String buildType) { + return "compileGodotNativeLibs" + buildType.capitalize() +} - lintOptions { - abortOnError false - disable 'MissingTranslation', 'UnusedResources' - } +/** + * Copy the generated 'android_debug.apk' binary template into the Godot bin directory. + * Depends on the app build task to ensure the binary is generated prior to copying. + */ +task copyDebugBinaryToBin(type: Copy) { + dependsOn ':app:assembleDebug' + from('app/build/outputs/apk/debug') + into(binDir) + include('android_debug.apk') +} + +/** + * Copy the generated 'android_release.apk' binary template into the Godot bin directory. + * Depends on the app build task to ensure the binary is generated prior to copying. + */ +task copyReleaseBinaryToBin(type: Copy) { + dependsOn ':app:assembleRelease' + from('app/build/outputs/apk/release') + into(binDir) + include('android_release.apk') +} - packagingOptions { - exclude 'META-INF/LICENSE' - exclude 'META-INF/NOTICE' +/** + * Copy the Godot android library archive debug file into the app debug libs directory. + * Depends on the library build task to ensure the AAR file is generated prior to copying. + */ +task copyDebugAAR(type: Copy) { + dependsOn ':lib:assembleDebug' + from('lib/build/outputs/aar') + into('app/libs/debug') + include('godot-lib.debug.aar') +} + +/** + * Copy the Godot android library archive release file into the app release libs directory. + * Depends on the library build task to ensure the AAR file is generated prior to copying. + */ +task copyReleaseAAR(type: Copy) { + dependsOn ':lib:assembleRelease' + from('lib/build/outputs/aar') + into('app/libs/release') + include('godot-lib.release.aar') +} + +/** + * Generate Godot custom build template by zipping the source files from the app directory, as well + * as the AAR files generated by 'copyDebugAAR' and 'copyReleaseAAR'. + * The zip file also includes some gradle tools to allow building of the custom build. + */ +task zipCustomBuild(type: Zip) { + dependsOn ':generateGodotTemplates' + doFirst { + logger.lifecycle("Generating Godot custom build template") } + from(fileTree(dir: 'app', excludes: ['**/build/**', '**/.gradle/**', '**/*.iml']), fileTree(dir: '.', includes: ['gradle.properties','gradlew', 'gradlew.bat', 'gradle/**'])) + include '**/*' + archiveName 'android_source.zip' + destinationDir(file(binDir)) +} - // Both signing and zip-aligning will be done at export time - buildTypes.all { buildType -> - buildType.zipAlignEnabled false - buildType.signingConfig null +/** + * Master task used to coordinate the tasks defined above to generate the set of Godot templates. + */ +task generateGodotTemplates(type: GradleBuild) { + // We exclude these gradle tasks so we can run the scons command manually. + for (String buildType : supportedTargets.keySet()) { + startParameter.excludedTaskNames += ":lib:" + getSconsTaskName(buildType) } - sourceSets { - main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = [ - 'src' -//DIR_SRC_BEGIN -//DIR_SRC_END - ] - res.srcDirs = [ - 'res' -//DIR_RES_BEGIN -//DIR_RES_END - ] - aidl.srcDirs = [ - 'aidl' -//DIR_AIDL_BEGIN -//DIR_AIDL_END - ] - assets.srcDirs = [ - 'assets' -//DIR_ASSETS_BEGIN -//DIR_ASSETS_END - ] + tasks = [] + + // Only build the apks and aar files for which we have native shared libraries. + for (String target : supportedTargets.keySet()) { + File targetLibs = new File("lib/libs/" + target) + if (targetLibs != null && targetLibs.isDirectory()) { + File[] targetLibsContents = targetLibs.listFiles() + if (targetLibsContents != null && targetLibsContents.length > 0) { + // Copy the generated aar library files to the custom build directory. + tasks += "copy" + target.capitalize() + "AAR" + // Copy the prebuilt binary templates to the bin directory. + tasks += "copy" + target.capitalize() + "BinaryToBin" + } } - debug.jniLibs.srcDirs = [ - 'libs/debug' -//DIR_JNI_DEBUG_BEGIN -//DIR_JNI_DEBUG_END - ] - release.jniLibs.srcDirs = [ - 'libs/release' -//DIR_JNI_RELEASE_BEGIN -//DIR_JNI_RELEASE_END - ] } - // No longer used, as it's not useful for build source template - //applicationVariants.all { variant -> - // variant.outputs.all { output -> - // output.outputFileName = "../../../../../../../bin/android_${variant.name}.apk" - // } - //} + finalizedBy 'zipCustomBuild' } -//CHUNK_GLOBAL_BEGIN -//CHUNK_GLOBAL_END +/** + * Clean the generated artifacts. + */ +task cleanGodotTemplates(type: Delete) { + // Delete the generated native libs + delete("lib/libs") + + // Delete the library generated AAR files + delete("lib/build/outputs/aar") + + // Delete the app libs directory contents + delete("app/libs") + + // Delete the generated binary apks + delete("app/build/outputs/apk") + + // Delete the Godot templates in the Godot bin directory + delete("$binDir/android_debug.apk") + delete("$binDir/android_release.apk") + delete("$binDir/android_source.zip") +} diff --git a/platform/android/java/gradle/wrapper/gradle-wrapper.properties b/platform/android/java/gradle/wrapper/gradle-wrapper.properties index 558870dad5..bf50265715 100644 --- a/platform/android/java/gradle/wrapper/gradle-wrapper.properties +++ b/platform/android/java/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Mon Sep 02 02:44:30 PDT 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/AndroidManifest.xml new file mode 100644 index 0000000000..517fc403b2 --- /dev/null +++ b/platform/android/java/lib/AndroidManifest.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="org.godotengine.godot" + android:versionCode="1" + android:versionName="1.0"> + + <application> + + <service android:name=".GodotDownloaderService" /> + + </application> + + <instrumentation + android:icon="@drawable/icon" + android:label="@string/godot_project_name_string" + android:name=".GodotInstrumentation" + android:targetPackage="org.godotengine.godot" /> + +</manifest> diff --git a/misc/ide/jetbrains/CMakeLists.txt b/platform/android/java/lib/CMakeLists.txt index b6e56e0778..d3bdf6a5f2 100644 --- a/misc/ide/jetbrains/CMakeLists.txt +++ b/platform/android/java/lib/CMakeLists.txt @@ -5,7 +5,7 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) -set(GODOT_ROOT_DIR ../../..) +set(GODOT_ROOT_DIR ../../../..) # Get sources file(GLOB_RECURSE SOURCES ${GODOT_ROOT_DIR}/*.c**) diff --git a/platform/android/java/THIRDPARTY.md b/platform/android/java/lib/THIRDPARTY.md index 2496b59263..2496b59263 100644 --- a/platform/android/java/THIRDPARTY.md +++ b/platform/android/java/lib/THIRDPARTY.md diff --git a/platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl b/platform/android/java/lib/aidl/com/android/vending/billing/IInAppBillingService.aidl index 0f2bcae338..0f2bcae338 100644 --- a/platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl +++ b/platform/android/java/lib/aidl/com/android/vending/billing/IInAppBillingService.aidl diff --git a/platform/android/java/aidl/com/android/vending/licensing/ILicenseResultListener.aidl b/platform/android/java/lib/aidl/com/android/vending/licensing/ILicenseResultListener.aidl index 869cb16f68..869cb16f68 100644 --- a/platform/android/java/aidl/com/android/vending/licensing/ILicenseResultListener.aidl +++ b/platform/android/java/lib/aidl/com/android/vending/licensing/ILicenseResultListener.aidl diff --git a/platform/android/java/aidl/com/android/vending/licensing/ILicensingService.aidl b/platform/android/java/lib/aidl/com/android/vending/licensing/ILicensingService.aidl index 9541a2090c..9541a2090c 100644 --- a/platform/android/java/aidl/com/android/vending/licensing/ILicensingService.aidl +++ b/platform/android/java/lib/aidl/com/android/vending/licensing/ILicensingService.aidl diff --git a/platform/android/java/lib/build.gradle b/platform/android/java/lib/build.gradle new file mode 100644 index 0000000000..13a14422ed --- /dev/null +++ b/platform/android/java/lib/build.gradle @@ -0,0 +1,82 @@ +apply plugin: 'com.android.library' + +dependencies { + implementation "com.android.support:support-core-utils:28.0.0" +} + +def pathToRootDir = "../../../../" + +android { + compileSdkVersion versions.compileSdk + buildToolsVersion versions.buildTools + useLibrary 'org.apache.http.legacy' + + defaultConfig { + minSdkVersion versions.minSdk + targetSdkVersion versions.targetSdk + } + + lintOptions { + abortOnError false + disable 'MissingTranslation', 'UnusedResources' + } + + packagingOptions { + exclude 'META-INF/LICENSE' + exclude 'META-INF/NOTICE' + } + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = ['src'] + res.srcDirs = ['res'] + aidl.srcDirs = ['aidl'] + assets.srcDirs = ['assets'] + } + debug.jniLibs.srcDirs = ['libs/debug'] + release.jniLibs.srcDirs = ['libs/release'] + } + + libraryVariants.all { variant -> + variant.outputs.all { output -> + output.outputFileName = "godot-lib.${variant.name}.aar" + } + + def buildType = variant.buildType.name.capitalize() + + def taskPrefix = "" + if (project.path != ":") { + taskPrefix = project.path + ":" + } + + // Disable the externalNativeBuild* task as it would cause build failures since the cmake build + // files is only setup for editing support. + gradle.startParameter.excludedTaskNames += taskPrefix + "externalNativeBuild" + buildType + + def releaseTarget = supportedTargets[buildType.toLowerCase()] + if (releaseTarget == null || releaseTarget == "") { + throw new GradleException("Invalid build type: " + buildType) + } + + if (!supportedAbis.contains(defaultAbi)) { + throw new GradleException("Invalid default abi: " + defaultAbi) + } + + // Creating gradle task to generate the native libraries for the default abi. + def taskName = getSconsTaskName(buildType) + tasks.create(name: taskName, type: Exec) { + executable "scons" + sconsExt + args "--directory=${pathToRootDir}", "platform=android", "target=${releaseTarget}", "android_arch=${defaultAbi}", "-j" + Runtime.runtime.availableProcessors() + } + + // Schedule the tasks so the generated libs are present before the aar file is packaged. + tasks["merge${buildType}JniLibFolders"].dependsOn taskName + } + + externalNativeBuild { + cmake { + path "CMakeLists.txt" + } + } +} diff --git a/platform/android/java/patches/com.google.android.vending.expansion.downloader.patch b/platform/android/java/lib/patches/com.google.android.vending.expansion.downloader.patch index 1189cfbfbb..49cc41e817 100644 --- a/platform/android/java/patches/com.google.android.vending.expansion.downloader.patch +++ b/platform/android/java/lib/patches/com.google.android.vending.expansion.downloader.patch @@ -175,7 +175,7 @@ index e4b1b0f1c..36cd6aacf 100644 -import com.android.vending.expansion.downloader.R; +// -- GODOT start -- +//import com.android.vending.expansion.downloader.R; -+import com.godot.game.R; ++import org.godotengine.godot.R; +// -- GODOT end -- import java.io.File; @@ -250,7 +250,7 @@ index f1536e80e..4b214b22d 100644 -import com.android.vending.expansion.downloader.R; +// -- GODOT start -- +//import com.android.vending.expansion.downloader.R; -+import com.godot.game.R; ++import org.godotengine.godot.R; +// -- GODOT end -- + import com.google.android.vending.expansion.downloader.DownloadProgressInfo; diff --git a/platform/android/java/patches/com.google.android.vending.licensing.patch b/platform/android/java/lib/patches/com.google.android.vending.licensing.patch index 9f8e5b8eab..4adb81d951 100644 --- a/platform/android/java/patches/com.google.android.vending.licensing.patch +++ b/platform/android/java/lib/patches/com.google.android.vending.licensing.patch @@ -21,7 +21,7 @@ index a0d2779af..a8bf65f9c 100644 */ +// -- GODOT start -- -+import com.godot.game.BuildConfig; +import org.godotengine.godot.BuildConfig; +// -- GODOT end -- + /** diff --git a/platform/android/java/lib/res/drawable-hdpi/notify_panel_notification_icon_bg.png b/platform/android/java/lib/res/drawable-hdpi/notify_panel_notification_icon_bg.png Binary files differnew file mode 100644 index 0000000000..f849d8e90d --- /dev/null +++ b/platform/android/java/lib/res/drawable-hdpi/notify_panel_notification_icon_bg.png diff --git a/platform/android/java/lib/res/drawable-mdpi/notify_panel_notification_icon_bg.png b/platform/android/java/lib/res/drawable-mdpi/notify_panel_notification_icon_bg.png Binary files differnew file mode 100644 index 0000000000..1dfb28b33a --- /dev/null +++ b/platform/android/java/lib/res/drawable-mdpi/notify_panel_notification_icon_bg.png diff --git a/platform/android/java/res/drawable-nodpi/icon.png b/platform/android/java/lib/res/drawable-nodpi/icon.png Binary files differindex 6ad9b43117..6ad9b43117 100644 --- a/platform/android/java/res/drawable-nodpi/icon.png +++ b/platform/android/java/lib/res/drawable-nodpi/icon.png diff --git a/platform/android/java/res/drawable-xhdpi/notify_panel_notification_icon_bg.png b/platform/android/java/lib/res/drawable-xhdpi/notify_panel_notification_icon_bg.png Binary files differindex 372b763ec5..372b763ec5 100644 --- a/platform/android/java/res/drawable-xhdpi/notify_panel_notification_icon_bg.png +++ b/platform/android/java/lib/res/drawable-xhdpi/notify_panel_notification_icon_bg.png diff --git a/platform/android/java/lib/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png b/platform/android/java/lib/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png Binary files differnew file mode 100644 index 0000000000..302a972049 --- /dev/null +++ b/platform/android/java/lib/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png diff --git a/platform/android/java/res/layout/downloading_expansion.xml b/platform/android/java/lib/res/layout/downloading_expansion.xml index 4a9700965f..4a9700965f 100644 --- a/platform/android/java/res/layout/downloading_expansion.xml +++ b/platform/android/java/lib/res/layout/downloading_expansion.xml diff --git a/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml b/platform/android/java/lib/res/layout/status_bar_ongoing_event_progress_bar.xml index fae1faeb60..fae1faeb60 100644 --- a/platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml +++ b/platform/android/java/lib/res/layout/status_bar_ongoing_event_progress_bar.xml diff --git a/platform/android/java/res/values-ar/strings.xml b/platform/android/java/lib/res/values-ar/strings.xml index 9f3dc6d6ac..9f3dc6d6ac 100644 --- a/platform/android/java/res/values-ar/strings.xml +++ b/platform/android/java/lib/res/values-ar/strings.xml diff --git a/platform/android/java/res/values-bg/strings.xml b/platform/android/java/lib/res/values-bg/strings.xml index bd8109277e..bd8109277e 100644 --- a/platform/android/java/res/values-bg/strings.xml +++ b/platform/android/java/lib/res/values-bg/strings.xml diff --git a/platform/android/java/res/values-ca/strings.xml b/platform/android/java/lib/res/values-ca/strings.xml index 494cb88468..494cb88468 100644 --- a/platform/android/java/res/values-ca/strings.xml +++ b/platform/android/java/lib/res/values-ca/strings.xml diff --git a/platform/android/java/res/values-cs/strings.xml b/platform/android/java/lib/res/values-cs/strings.xml index 30ce00f895..30ce00f895 100644 --- a/platform/android/java/res/values-cs/strings.xml +++ b/platform/android/java/lib/res/values-cs/strings.xml diff --git a/platform/android/java/res/values-da/strings.xml b/platform/android/java/lib/res/values-da/strings.xml index 4c2a1cf0f4..4c2a1cf0f4 100644 --- a/platform/android/java/res/values-da/strings.xml +++ b/platform/android/java/lib/res/values-da/strings.xml diff --git a/platform/android/java/res/values-de/strings.xml b/platform/android/java/lib/res/values-de/strings.xml index 52946d4cce..52946d4cce 100644 --- a/platform/android/java/res/values-de/strings.xml +++ b/platform/android/java/lib/res/values-de/strings.xml diff --git a/platform/android/java/res/values-el/strings.xml b/platform/android/java/lib/res/values-el/strings.xml index 181dc51762..181dc51762 100644 --- a/platform/android/java/res/values-el/strings.xml +++ b/platform/android/java/lib/res/values-el/strings.xml diff --git a/platform/android/java/res/values-en/strings.xml b/platform/android/java/lib/res/values-en/strings.xml index 976a565013..976a565013 100644 --- a/platform/android/java/res/values-en/strings.xml +++ b/platform/android/java/lib/res/values-en/strings.xml diff --git a/platform/android/java/res/values-es-rES/strings.xml b/platform/android/java/lib/res/values-es-rES/strings.xml index 73f63a08f8..73f63a08f8 100644 --- a/platform/android/java/res/values-es-rES/strings.xml +++ b/platform/android/java/lib/res/values-es-rES/strings.xml diff --git a/platform/android/java/res/values-es/strings.xml b/platform/android/java/lib/res/values-es/strings.xml index 07b718a641..07b718a641 100644 --- a/platform/android/java/res/values-es/strings.xml +++ b/platform/android/java/lib/res/values-es/strings.xml diff --git a/platform/android/java/res/values-fa/strings.xml b/platform/android/java/lib/res/values-fa/strings.xml index f1e29013c4..f1e29013c4 100644 --- a/platform/android/java/res/values-fa/strings.xml +++ b/platform/android/java/lib/res/values-fa/strings.xml diff --git a/platform/android/java/res/values-fi/strings.xml b/platform/android/java/lib/res/values-fi/strings.xml index 323d82aff1..323d82aff1 100644 --- a/platform/android/java/res/values-fi/strings.xml +++ b/platform/android/java/lib/res/values-fi/strings.xml diff --git a/platform/android/java/res/values-fr/strings.xml b/platform/android/java/lib/res/values-fr/strings.xml index 32bead2661..32bead2661 100644 --- a/platform/android/java/res/values-fr/strings.xml +++ b/platform/android/java/lib/res/values-fr/strings.xml diff --git a/platform/android/java/res/values-hi/strings.xml b/platform/android/java/lib/res/values-hi/strings.xml index 8aab2a8c63..8aab2a8c63 100644 --- a/platform/android/java/res/values-hi/strings.xml +++ b/platform/android/java/lib/res/values-hi/strings.xml diff --git a/platform/android/java/res/values-hr/strings.xml b/platform/android/java/lib/res/values-hr/strings.xml index caf55e2241..caf55e2241 100644 --- a/platform/android/java/res/values-hr/strings.xml +++ b/platform/android/java/lib/res/values-hr/strings.xml diff --git a/platform/android/java/res/values-hu/strings.xml b/platform/android/java/lib/res/values-hu/strings.xml index e7f9e51226..e7f9e51226 100644 --- a/platform/android/java/res/values-hu/strings.xml +++ b/platform/android/java/lib/res/values-hu/strings.xml diff --git a/platform/android/java/res/values-in/strings.xml b/platform/android/java/lib/res/values-in/strings.xml index 9e9a8b0c03..9e9a8b0c03 100644 --- a/platform/android/java/res/values-in/strings.xml +++ b/platform/android/java/lib/res/values-in/strings.xml diff --git a/platform/android/java/res/values-it/strings.xml b/platform/android/java/lib/res/values-it/strings.xml index 1f5e5a049e..1f5e5a049e 100644 --- a/platform/android/java/res/values-it/strings.xml +++ b/platform/android/java/lib/res/values-it/strings.xml diff --git a/platform/android/java/res/values-iw/strings.xml b/platform/android/java/lib/res/values-iw/strings.xml index f52ede2085..f52ede2085 100644 --- a/platform/android/java/res/values-iw/strings.xml +++ b/platform/android/java/lib/res/values-iw/strings.xml diff --git a/platform/android/java/res/values-ja/strings.xml b/platform/android/java/lib/res/values-ja/strings.xml index 7f85f57df7..7f85f57df7 100644 --- a/platform/android/java/res/values-ja/strings.xml +++ b/platform/android/java/lib/res/values-ja/strings.xml diff --git a/platform/android/java/res/values-ko/strings.xml b/platform/android/java/lib/res/values-ko/strings.xml index fab0bdd753..fab0bdd753 100644 --- a/platform/android/java/res/values-ko/strings.xml +++ b/platform/android/java/lib/res/values-ko/strings.xml diff --git a/platform/android/java/res/values-lt/strings.xml b/platform/android/java/lib/res/values-lt/strings.xml index 6e3677fde7..6e3677fde7 100644 --- a/platform/android/java/res/values-lt/strings.xml +++ b/platform/android/java/lib/res/values-lt/strings.xml diff --git a/platform/android/java/res/values-lv/strings.xml b/platform/android/java/lib/res/values-lv/strings.xml index 701fc271ac..701fc271ac 100644 --- a/platform/android/java/res/values-lv/strings.xml +++ b/platform/android/java/lib/res/values-lv/strings.xml diff --git a/platform/android/java/res/values-nb/strings.xml b/platform/android/java/lib/res/values-nb/strings.xml index 73147ca1af..73147ca1af 100644 --- a/platform/android/java/res/values-nb/strings.xml +++ b/platform/android/java/lib/res/values-nb/strings.xml diff --git a/platform/android/java/res/values-nl/strings.xml b/platform/android/java/lib/res/values-nl/strings.xml index e501928a35..e501928a35 100644 --- a/platform/android/java/res/values-nl/strings.xml +++ b/platform/android/java/lib/res/values-nl/strings.xml diff --git a/platform/android/java/res/values-pl/strings.xml b/platform/android/java/lib/res/values-pl/strings.xml index ea5da73b6f..ea5da73b6f 100644 --- a/platform/android/java/res/values-pl/strings.xml +++ b/platform/android/java/lib/res/values-pl/strings.xml diff --git a/platform/android/java/res/values-pt/strings.xml b/platform/android/java/lib/res/values-pt/strings.xml index bdda7cd2c7..bdda7cd2c7 100644 --- a/platform/android/java/res/values-pt/strings.xml +++ b/platform/android/java/lib/res/values-pt/strings.xml diff --git a/platform/android/java/res/values-ro/strings.xml b/platform/android/java/lib/res/values-ro/strings.xml index 3686da4c19..3686da4c19 100644 --- a/platform/android/java/res/values-ro/strings.xml +++ b/platform/android/java/lib/res/values-ro/strings.xml diff --git a/platform/android/java/res/values-ru/strings.xml b/platform/android/java/lib/res/values-ru/strings.xml index 954067658b..954067658b 100644 --- a/platform/android/java/res/values-ru/strings.xml +++ b/platform/android/java/lib/res/values-ru/strings.xml diff --git a/platform/android/java/res/values-sk/strings.xml b/platform/android/java/lib/res/values-sk/strings.xml index 37d1283124..37d1283124 100644 --- a/platform/android/java/res/values-sk/strings.xml +++ b/platform/android/java/lib/res/values-sk/strings.xml diff --git a/platform/android/java/res/values-sl/strings.xml b/platform/android/java/lib/res/values-sl/strings.xml index 0bb249c375..0bb249c375 100644 --- a/platform/android/java/res/values-sl/strings.xml +++ b/platform/android/java/lib/res/values-sl/strings.xml diff --git a/platform/android/java/res/values-sr/strings.xml b/platform/android/java/lib/res/values-sr/strings.xml index 0e83cab1a1..0e83cab1a1 100644 --- a/platform/android/java/res/values-sr/strings.xml +++ b/platform/android/java/lib/res/values-sr/strings.xml diff --git a/platform/android/java/res/values-sv/strings.xml b/platform/android/java/lib/res/values-sv/strings.xml index e3a04ac2ec..e3a04ac2ec 100644 --- a/platform/android/java/res/values-sv/strings.xml +++ b/platform/android/java/lib/res/values-sv/strings.xml diff --git a/platform/android/java/res/values-th/strings.xml b/platform/android/java/lib/res/values-th/strings.xml index 0aa893b8bf..0aa893b8bf 100644 --- a/platform/android/java/res/values-th/strings.xml +++ b/platform/android/java/lib/res/values-th/strings.xml diff --git a/platform/android/java/res/values-tl/strings.xml b/platform/android/java/lib/res/values-tl/strings.xml index e7e2af4909..e7e2af4909 100644 --- a/platform/android/java/res/values-tl/strings.xml +++ b/platform/android/java/lib/res/values-tl/strings.xml diff --git a/platform/android/java/res/values-tr/strings.xml b/platform/android/java/lib/res/values-tr/strings.xml index 97af1243a6..97af1243a6 100644 --- a/platform/android/java/res/values-tr/strings.xml +++ b/platform/android/java/lib/res/values-tr/strings.xml diff --git a/platform/android/java/res/values-uk/strings.xml b/platform/android/java/lib/res/values-uk/strings.xml index 3dea6908a9..3dea6908a9 100644 --- a/platform/android/java/res/values-uk/strings.xml +++ b/platform/android/java/lib/res/values-uk/strings.xml diff --git a/platform/android/java/res/values-vi/strings.xml b/platform/android/java/lib/res/values-vi/strings.xml index a6552130b0..a6552130b0 100644 --- a/platform/android/java/res/values-vi/strings.xml +++ b/platform/android/java/lib/res/values-vi/strings.xml diff --git a/platform/android/java/res/values-zh-rCN/strings.xml b/platform/android/java/lib/res/values-zh-rCN/strings.xml index 6668c56bd9..6668c56bd9 100644 --- a/platform/android/java/res/values-zh-rCN/strings.xml +++ b/platform/android/java/lib/res/values-zh-rCN/strings.xml diff --git a/platform/android/java/res/values-zh-rHK/strings.xml b/platform/android/java/lib/res/values-zh-rHK/strings.xml index 8a6269da0f..8a6269da0f 100644 --- a/platform/android/java/res/values-zh-rHK/strings.xml +++ b/platform/android/java/lib/res/values-zh-rHK/strings.xml diff --git a/platform/android/java/res/values-zh-rTW/strings.xml b/platform/android/java/lib/res/values-zh-rTW/strings.xml index b1bb39d5d6..b1bb39d5d6 100644 --- a/platform/android/java/res/values-zh-rTW/strings.xml +++ b/platform/android/java/lib/res/values-zh-rTW/strings.xml diff --git a/platform/android/java/res/values/strings.xml b/platform/android/java/lib/res/values/strings.xml index a1b81a6186..a1b81a6186 100644 --- a/platform/android/java/res/values/strings.xml +++ b/platform/android/java/lib/res/values/strings.xml diff --git a/platform/android/java/res/values/styles.xml b/platform/android/java/lib/res/values/styles.xml index a442f61e7e..a442f61e7e 100644 --- a/platform/android/java/res/values/styles.xml +++ b/platform/android/java/lib/res/values/styles.xml diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Constants.java index 1dcc370d83..1dcc370d83 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Constants.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java index 9cb294d721..9cb294d721 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java index 452c7d1483..452c7d1483 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java index 3771d19c9b..3771d19c9b 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Helpers.java index 36cd6aacfe..2a72c9818d 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/Helpers.java @@ -26,7 +26,7 @@ import android.util.Log; // -- GODOT start -- //import com.android.vending.expansion.downloader.R; -import com.godot.game.R; +import org.godotengine.godot.R; // -- GODOT end -- import java.io.File; diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java index cef3794701..cef3794701 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderService.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderService.java index 4de9de0c62..4de9de0c62 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderService.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IDownloaderService.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/IStub.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IStub.java index d5bc3a843e..d5bc3a843e 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/IStub.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/IStub.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/SystemFacade.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/SystemFacade.java index a0e1165cc4..a0e1165cc4 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/SystemFacade.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/SystemFacade.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java index 3ccc191c60..3ccc191c60 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java index 45111b16a3..45111b16a3 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java index 4b214b22d7..0abaf2e052 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java @@ -18,7 +18,7 @@ package com.google.android.vending.expansion.downloader.impl; // -- GODOT start -- //import com.android.vending.expansion.downloader.R; -import com.godot.game.R; +import org.godotengine.godot.R; // -- GODOT end -- import com.google.android.vending.expansion.downloader.DownloadProgressInfo; diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java index c114b8a64a..c114b8a64a 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java index 8d41a76900..8d41a76900 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java index c658b4cc43..c658b4cc43 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java index 3f440e9893..3f440e9893 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java +++ b/platform/android/java/lib/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/AESObfuscator.java b/platform/android/java/lib/src/com/google/android/vending/licensing/AESObfuscator.java index d6ccb0c5e4..d6ccb0c5e4 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/AESObfuscator.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/AESObfuscator.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/APKExpansionPolicy.java b/platform/android/java/lib/src/com/google/android/vending/licensing/APKExpansionPolicy.java index 37fad8926a..37fad8926a 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/APKExpansionPolicy.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/APKExpansionPolicy.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/DeviceLimiter.java b/platform/android/java/lib/src/com/google/android/vending/licensing/DeviceLimiter.java index e5c5e2d7ca..e5c5e2d7ca 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/DeviceLimiter.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/DeviceLimiter.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/LicenseChecker.java b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseChecker.java index 15017b3425..15017b3425 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/LicenseChecker.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseChecker.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/LicenseCheckerCallback.java b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseCheckerCallback.java index 8b869ddaaf..8b869ddaaf 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/LicenseCheckerCallback.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseCheckerCallback.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/LicenseValidator.java b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseValidator.java index 11a00786d0..11a00786d0 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/LicenseValidator.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/LicenseValidator.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/NullDeviceLimiter.java b/platform/android/java/lib/src/com/google/android/vending/licensing/NullDeviceLimiter.java index d87af3153f..d87af3153f 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/NullDeviceLimiter.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/NullDeviceLimiter.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/Obfuscator.java b/platform/android/java/lib/src/com/google/android/vending/licensing/Obfuscator.java index 008c150a8e..008c150a8e 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/Obfuscator.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/Obfuscator.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/Policy.java b/platform/android/java/lib/src/com/google/android/vending/licensing/Policy.java index b672a078b7..b672a078b7 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/Policy.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/Policy.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/PreferenceObfuscator.java b/platform/android/java/lib/src/com/google/android/vending/licensing/PreferenceObfuscator.java index feb579af04..feb579af04 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/PreferenceObfuscator.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/PreferenceObfuscator.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/ResponseData.java b/platform/android/java/lib/src/com/google/android/vending/licensing/ResponseData.java index 3b5d557e76..3b5d557e76 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/ResponseData.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/ResponseData.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/ServerManagedPolicy.java b/platform/android/java/lib/src/com/google/android/vending/licensing/ServerManagedPolicy.java index e2f0bfdca8..e2f0bfdca8 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/ServerManagedPolicy.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/ServerManagedPolicy.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/StrictPolicy.java b/platform/android/java/lib/src/com/google/android/vending/licensing/StrictPolicy.java index c2d55c37f1..c2d55c37f1 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/StrictPolicy.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/StrictPolicy.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/ValidationException.java b/platform/android/java/lib/src/com/google/android/vending/licensing/ValidationException.java index ee4df47c68..ee4df47c68 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/ValidationException.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/ValidationException.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/util/Base64.java b/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64.java index a8bf65f9ca..79efca9621 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/util/Base64.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64.java @@ -32,7 +32,7 @@ package com.google.android.vending.licensing.util; */ // -- GODOT start -- -import com.godot.game.BuildConfig; +import org.godotengine.godot.BuildConfig; // -- GODOT end -- /** diff --git a/platform/android/java/src/com/google/android/vending/licensing/util/Base64DecoderException.java b/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64DecoderException.java index 1aef1b54b8..1aef1b54b8 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/util/Base64DecoderException.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/util/Base64DecoderException.java diff --git a/platform/android/java/src/com/google/android/vending/licensing/util/URIQueryDecoder.java b/platform/android/java/lib/src/com/google/android/vending/licensing/util/URIQueryDecoder.java index 5155bf5ac3..5155bf5ac3 100644 --- a/platform/android/java/src/com/google/android/vending/licensing/util/URIQueryDecoder.java +++ b/platform/android/java/lib/src/com/google/android/vending/licensing/util/URIQueryDecoder.java diff --git a/platform/android/java/src/org/godotengine/godot/Dictionary.java b/platform/android/java/lib/src/org/godotengine/godot/Dictionary.java index 588d9ae646..588d9ae646 100644 --- a/platform/android/java/src/org/godotengine/godot/Dictionary.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Dictionary.java diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java index 1b3239777c..4dae2dcc53 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java @@ -30,7 +30,6 @@ package org.godotengine.godot; -import android.Manifest; import android.annotation.SuppressLint; import android.app.Activity; import android.app.ActivityManager; @@ -56,12 +55,14 @@ import android.hardware.SensorManager; import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.os.Handler; +import android.os.Looper; import android.os.Messenger; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings.Secure; import android.support.annotation.Keep; -import android.support.v4.content.ContextCompat; +import android.support.annotation.Nullable; import android.view.Display; import android.view.KeyEvent; import android.view.MotionEvent; @@ -95,14 +96,12 @@ import java.util.Locale; import javax.microedition.khronos.opengles.GL10; import org.godotengine.godot.input.GodotEditText; import org.godotengine.godot.payments.PaymentsManager; +import org.godotengine.godot.utils.PermissionsUtil; import org.godotengine.godot.xr.XRMode; -public class Godot extends Activity implements SensorEventListener, IDownloaderClient { +public abstract class Godot extends Activity implements SensorEventListener, IDownloaderClient { static final int MAX_SINGLETONS = 64; - static final int REQUEST_RECORD_AUDIO_PERMISSION = 1; - static final int REQUEST_CAMERA_PERMISSION = 2; - static final int REQUEST_VIBRATE_PERMISSION = 3; private IStub mDownloaderClientStub; private TextView mStatusText; private TextView mProgressFraction; @@ -126,6 +125,9 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC private boolean activityResumed; private int mState; + // Used to dispatch events to the main thread. + private final Handler mainThreadHandler = new Handler(Looper.getMainLooper()); + static private Intent mCurrentIntent; @Override @@ -146,8 +148,8 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC private void setButtonPausedState(boolean paused) { mStatePaused = paused; - int stringResourceID = paused ? com.godot.game.R.string.text_button_resume : - com.godot.game.R.string.text_button_pause; + int stringResourceID = paused ? R.string.text_button_resume : + R.string.text_button_pause; mPauseButton.setText(stringResourceID); } @@ -187,6 +189,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC Godot.singletons[Godot.singleton_count++] = this; } + /** + * Invoked once during the Godot Android initialization process after creation of the + * {@link GodotView} view. + * <p> + * This method should be overridden by descendants of this class that would like to add + * their view/layout to the Godot view hierarchy. + * + * @return the view to be included; null if no views should be included. + */ + @Nullable + protected View onMainCreateView(Activity activity) { + return null; + } + protected void onMainActivityResult(int requestCode, int resultCode, Intent data) { } @@ -306,6 +322,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC public void run() { GodotLib.setup(current_command_line); setKeepScreenOn("True".equals(GodotLib.getGlobal("display/window/energy_saving/keep_screen_on"))); + + // The Godot Android plugins are setup on completion of GodotLib.setup + mainThreadHandler.post(new Runnable() { + @Override + public void run() { + // Include the non-null views returned in the Godot view hierarchy. + for (int i = 0; i < singleton_count; i++) { + View view = singletons[i].onMainCreateView(Godot.this); + if (view != null) { + layout.addView(view); + } + } + } + }); } }); } @@ -357,7 +387,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC // Bundle args = new Bundle(); args.putParcelable("intent", mCurrentIntent); - startInstrumentation(new ComponentName(Godot.this, GodotInstrumentation.class), null, args); + startInstrumentation(new ComponentName(this, GodotInstrumentation.class), null, args); } public void alert(final String message, final String title) { @@ -614,17 +644,17 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this, GodotDownloaderService.class); - setContentView(com.godot.game.R.layout.downloading_expansion); - mPB = (ProgressBar)findViewById(com.godot.game.R.id.progressBar); - mStatusText = (TextView)findViewById(com.godot.game.R.id.statusText); - mProgressFraction = (TextView)findViewById(com.godot.game.R.id.progressAsFraction); - mProgressPercent = (TextView)findViewById(com.godot.game.R.id.progressAsPercentage); - mAverageSpeed = (TextView)findViewById(com.godot.game.R.id.progressAverageSpeed); - mTimeRemaining = (TextView)findViewById(com.godot.game.R.id.progressTimeRemaining); - mDashboard = findViewById(com.godot.game.R.id.downloaderDashboard); - mCellMessage = findViewById(com.godot.game.R.id.approveCellular); - mPauseButton = (Button)findViewById(com.godot.game.R.id.pauseButton); - mWiFiSettingsButton = (Button)findViewById(com.godot.game.R.id.wifiSettingsButton); + setContentView(R.layout.downloading_expansion); + mPB = (ProgressBar)findViewById(R.id.progressBar); + mStatusText = (TextView)findViewById(R.id.statusText); + mProgressFraction = (TextView)findViewById(R.id.progressAsFraction); + mProgressPercent = (TextView)findViewById(R.id.progressAsPercentage); + mAverageSpeed = (TextView)findViewById(R.id.progressAverageSpeed); + mTimeRemaining = (TextView)findViewById(R.id.progressTimeRemaining); + mDashboard = findViewById(R.id.downloaderDashboard); + mCellMessage = findViewById(R.id.approveCellular); + mPauseButton = (Button)findViewById(R.id.pauseButton); + mWiFiSettingsButton = (Button)findViewById(R.id.wifiSettingsButton); return; } @@ -669,12 +699,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC return; } mView.onPause(); - mView.queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.focusout(); - } - }); + mSensorManager.unregisterListener(this); for (int i = 0; i < singleton_count; i++) { @@ -703,6 +728,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC @Override protected void onResume() { super.onResume(); + activityResumed = true; if (!godot_initialized) { if (null != mDownloaderClientStub) { mDownloaderClientStub.connect(this); @@ -711,12 +737,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC } mView.onResume(); - mView.queueEvent(new Runnable() { - @Override - public void run() { - GodotLib.focusin(); - } - }); + mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); mSensorManager.registerListener(this, mGravity, SensorManager.SENSOR_DELAY_GAME); mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_GAME); @@ -737,8 +758,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC singletons[i].onMainResume(); } - - activityResumed = true; } public void UiChangeListener() { @@ -984,32 +1003,15 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC } public boolean requestPermission(String p_name) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - // Not necessary, asked on install already - return true; - } - - if (p_name.equals("RECORD_AUDIO")) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, REQUEST_RECORD_AUDIO_PERMISSION); - return false; - } - } + return PermissionsUtil.requestPermission(p_name, this); + } - if (p_name.equals("CAMERA")) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[] { Manifest.permission.CAMERA }, REQUEST_CAMERA_PERMISSION); - return false; - } - } + public boolean requestPermissions() { + return PermissionsUtil.requestManifestPermissions(this); + } - if (p_name.equals("VIBRATE")) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) { - requestPermissions(new String[] { Manifest.permission.VIBRATE }, REQUEST_VIBRATE_PERMISSION); - return false; - } - } - return true; + public String[] getGrantedPermissions() { + return PermissionsUtil.getGrantedPermissions(this); } /** @@ -1094,9 +1096,9 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC @Override public void onDownloadProgress(DownloadProgressInfo progress) { - mAverageSpeed.setText(getString(com.godot.game.R.string.kilobytes_per_second, + mAverageSpeed.setText(getString(R.string.kilobytes_per_second, Helpers.getSpeedString(progress.mCurrentSpeed))); - mTimeRemaining.setText(getString(com.godot.game.R.string.time_remaining, + mTimeRemaining.setText(getString(R.string.time_remaining, Helpers.getTimeRemaining(progress.mTimeRemaining))); mPB.setMax((int)(progress.mOverallTotal >> 8)); diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java index e7e2a3f808..e7e2a3f808 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java index 8e10710c9f..8e10710c9f 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotDownloaderService.java diff --git a/platform/android/java/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java index 98174157ec..04566cf62c 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java @@ -29,26 +29,18 @@ /*************************************************************************/ package org.godotengine.godot; -import android.app.*; import android.content.*; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.AssetManager; -import android.graphics.*; -import android.hardware.*; import android.media.*; import android.net.Uri; import android.os.*; -import android.text.*; -import android.text.method.*; import android.util.DisplayMetrics; import android.util.Log; import android.util.SparseArray; -import android.view.*; -import android.view.inputmethod.InputMethodManager; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; import java.util.Locale; import org.godotengine.godot.input.*; //android.os.Build diff --git a/platform/android/java/src/org/godotengine/godot/GodotInstrumentation.java b/platform/android/java/lib/src/org/godotengine/godot/GodotInstrumentation.java index 0466f380e8..0466f380e8 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotInstrumentation.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotInstrumentation.java diff --git a/platform/android/java/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java index af51c840cb..67dce172dc 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java @@ -95,6 +95,11 @@ public class GodotLib { public static native void touch(int what, int pointer, int howmany, int[] arr); /** + * Forward hover events from the main thread to the GL thread. + */ + public static native void hover(int type, int x, int y); + + /** * Forward accelerometer sensor events from the main thread to the GL thread. * @see android.hardware.SensorEventListener#onSensorChanged(SensorEvent) */ @@ -211,4 +216,16 @@ public class GodotLib { * Invoked on the GL thread to configure the height of the virtual keyboard. */ public static native void setVirtualKeyboardHeight(int p_height); + + /** + * Invoked on the GL thread when the {@link GodotRenderer} has been resumed. + * @see GodotRenderer#onActivityResumed() + */ + public static native void onRendererResumed(); + + /** + * Invoked on the GL thread when the {@link GodotRenderer} has been paused. + * @see GodotRenderer#onActivityPaused() + */ + public static native void onRendererPaused(); } diff --git a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java b/platform/android/java/lib/src/org/godotengine/godot/GodotPaymentV3.java index 1432cd3a67..1432cd3a67 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotPaymentV3.java diff --git a/platform/android/java/src/org/godotengine/godot/GodotRenderer.java b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java index 8e3775c2a9..56ba88656e 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotRenderer.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotRenderer.java @@ -40,7 +40,14 @@ import org.godotengine.godot.utils.GLUtils; */ class GodotRenderer implements GLSurfaceView.Renderer { + private boolean activityJustResumed = false; + public void onDrawFrame(GL10 gl) { + if (activityJustResumed) { + GodotLib.onRendererResumed(); + activityJustResumed = false; + } + GodotLib.step(); for (int i = 0; i < Godot.singleton_count; i++) { Godot.singletons[i].onGLDrawFrame(gl); @@ -58,4 +65,14 @@ class GodotRenderer implements GLSurfaceView.Renderer { public void onSurfaceCreated(GL10 gl, EGLConfig config) { GodotLib.newcontext(GLUtils.use_32); } + + void onActivityResumed() { + // We defer invoking GodotLib.onRendererResumed() until the first draw frame call. + // This ensures we have a valid GL context and surface when we do so. + activityJustResumed = true; + } + + void onActivityPaused() { + GodotLib.onRendererPaused(); + } } diff --git a/platform/android/java/src/org/godotengine/godot/GodotView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotView.java index fc3e47e69d..5511e5d782 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotView.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotView.java @@ -68,6 +68,7 @@ public class GodotView extends GLSurfaceView { private final Godot activity; private final GodotInputHandler inputHandler; + private final GodotRenderer godotRenderer; public GodotView(Godot activity, XRMode xrMode, boolean p_use_gl3, boolean p_use_32_bits, boolean p_use_debug_opengl) { super(activity); @@ -77,6 +78,7 @@ public class GodotView extends GLSurfaceView { this.activity = activity; this.inputHandler = new GodotInputHandler(this); + this.godotRenderer = new GodotRenderer(); init(xrMode, false, 16, 0); } @@ -161,10 +163,38 @@ public class GodotView extends GLSurfaceView { } /* Set the renderer responsible for frame rendering */ - setRenderer(new GodotRenderer()); + setRenderer(godotRenderer); } public void onBackPressed() { activity.onBackPressed(); } + + @Override + public void onResume() { + super.onResume(); + + queueEvent(new Runnable() { + @Override + public void run() { + // Resume the renderer + godotRenderer.onActivityResumed(); + GodotLib.focusin(); + } + }); + } + + @Override + public void onPause() { + super.onPause(); + + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.focusout(); + // Pause the renderer + godotRenderer.onActivityPaused(); + } + }); + } } diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java index 45b739baa0..45b739baa0 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotEditText.java diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java index a443a0ad90..2756ca6c83 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotInputHandler.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java @@ -96,7 +96,6 @@ public class GodotInputHandler implements InputDeviceListener { GodotLib.joybutton(device_id, button, false); } }); - return true; } } else { final int chr = event.getUnicodeChar(0); @@ -108,7 +107,7 @@ public class GodotInputHandler implements InputDeviceListener { }); }; - return false; + return true; } public boolean onKeyDown(final int keyCode, KeyEvent event) { @@ -142,7 +141,6 @@ public class GodotInputHandler implements InputDeviceListener { GodotLib.joybutton(device_id, button, true); } }); - return true; } } else { final int chr = event.getUnicodeChar(0); @@ -154,7 +152,7 @@ public class GodotInputHandler implements InputDeviceListener { }); }; - return false; + return true; } public boolean onGenericMotionEvent(MotionEvent event) { @@ -190,7 +188,18 @@ public class GodotInputHandler implements InputDeviceListener { } return true; } - }; + } else if ((event.getSource() & InputDevice.SOURCE_STYLUS) == InputDevice.SOURCE_STYLUS) { + final int x = Math.round(event.getX()); + final int y = Math.round(event.getY()); + final int type = event.getAction(); + queueEvent(new Runnable() { + @Override + public void run() { + GodotLib.hover(type, x, y); + } + }); + return true; + } return false; } diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java index d6e7ad5b18..9b372c75e3 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -32,7 +32,6 @@ package org.godotengine.godot.input; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; -import android.util.Log; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodManager; diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerCompat.java index 4042c42e9d..4042c42e9d 100644 --- a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerCompat.java diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java index e4bafa7ff9..e4bafa7ff9 100644 --- a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/InputManagerV16.java diff --git a/platform/android/java/src/org/godotengine/godot/input/Joystick.java b/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java index ff95bfb0c5..ff95bfb0c5 100644 --- a/platform/android/java/src/org/godotengine/godot/input/Joystick.java +++ b/platform/android/java/lib/src/org/godotengine/godot/input/Joystick.java diff --git a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java b/platform/android/java/lib/src/org/godotengine/godot/payments/ConsumeTask.java index f872e7af56..4c1050c948 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/ConsumeTask.java @@ -33,7 +33,6 @@ package org.godotengine.godot.payments; import android.content.Context; import android.os.AsyncTask; import android.os.RemoteException; -import android.util.Log; import com.android.vending.billing.IInAppBillingService; import java.lang.ref.WeakReference; diff --git a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java b/platform/android/java/lib/src/org/godotengine/godot/payments/HandlePurchaseTask.java index 5424ebb49d..1a914967a2 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/HandlePurchaseTask.java @@ -31,18 +31,7 @@ package org.godotengine.godot.payments; import android.app.Activity; -import android.app.PendingIntent; -import android.app.ProgressDialog; -import android.content.Context; import android.content.Intent; -import android.content.IntentSender.SendIntentException; -import android.os.AsyncTask; -import android.os.Bundle; -import android.os.RemoteException; -import android.util.Log; -import com.android.vending.billing.IInAppBillingService; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.utils.Crypt; import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java b/platform/android/java/lib/src/org/godotengine/godot/payments/PaymentsCache.java index 8a2facbcfb..8a2facbcfb 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/PaymentsCache.java diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java b/platform/android/java/lib/src/org/godotengine/godot/payments/PaymentsManager.java index a0dbc432c1..c079c55854 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/PaymentsManager.java @@ -43,7 +43,6 @@ import android.util.Log; import com.android.vending.billing.IInAppBillingService; import java.util.ArrayList; import java.util.Arrays; -import org.godotengine.godot.Godot; import org.godotengine.godot.GodotPaymentV3; import org.json.JSONException; import org.json.JSONObject; diff --git a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java b/platform/android/java/lib/src/org/godotengine/godot/payments/PurchaseTask.java index 650c5178f0..9adc85e521 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/PurchaseTask.java @@ -32,19 +32,12 @@ package org.godotengine.godot.payments; import android.app.Activity; import android.app.PendingIntent; -import android.app.ProgressDialog; -import android.content.Context; import android.content.Intent; import android.content.IntentSender.SendIntentException; -import android.os.AsyncTask; import android.os.Bundle; import android.os.RemoteException; import android.util.Log; import com.android.vending.billing.IInAppBillingService; -import org.godotengine.godot.GodotLib; -import org.godotengine.godot.utils.Crypt; -import org.json.JSONException; -import org.json.JSONObject; abstract public class PurchaseTask { diff --git a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java b/platform/android/java/lib/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java index daca6ef5ae..daca6ef5ae 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java diff --git a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java b/platform/android/java/lib/src/org/godotengine/godot/payments/ValidateTask.java index d32c80e8e0..17a2a197ad 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java +++ b/platform/android/java/lib/src/org/godotengine/godot/payments/ValidateTask.java @@ -31,21 +31,10 @@ package org.godotengine.godot.payments; import android.app.Activity; -import android.app.PendingIntent; import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.content.IntentSender.SendIntentException; import android.os.AsyncTask; -import android.os.Bundle; -import android.os.RemoteException; -import android.util.Log; -import com.android.vending.billing.IInAppBillingService; import java.lang.ref.WeakReference; -import org.godotengine.godot.Godot; -import org.godotengine.godot.GodotLib; import org.godotengine.godot.GodotPaymentV3; -import org.godotengine.godot.utils.Crypt; import org.godotengine.godot.utils.HttpRequester; import org.godotengine.godot.utils.RequestParams; import org.json.JSONException; diff --git a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java b/platform/android/java/lib/src/org/godotengine/godot/utils/Crypt.java index 4c551d1d21..4c551d1d21 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/Crypt.java diff --git a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java b/platform/android/java/lib/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java index b61007faa3..b61007faa3 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java diff --git a/platform/android/java/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java index 6c95494f8b..6c95494f8b 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/GLUtils.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java diff --git a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java b/platform/android/java/lib/src/org/godotengine/godot/utils/HttpRequester.java index e98f533c23..02ae753b3e 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/HttpRequester.java @@ -39,12 +39,9 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.security.KeyStore; -import java.util.ArrayList; import java.util.Date; -import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; -import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; @@ -58,7 +55,6 @@ import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; -import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java new file mode 100644 index 0000000000..2c4a444e5a --- /dev/null +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/PermissionsUtil.java @@ -0,0 +1,157 @@ +package org.godotengine.godot.utils; + +import android.Manifest; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PermissionInfo; +import android.os.Build; +import android.support.v4.content.ContextCompat; +import java.util.ArrayList; +import java.util.List; +import org.godotengine.godot.Godot; + +/** + * This class includes utility functions for Android permissions related operations. + * @author Cagdas Caglak <cagdascaglak@gmail.com> + */ +public final class PermissionsUtil { + + static final int REQUEST_RECORD_AUDIO_PERMISSION = 1; + static final int REQUEST_CAMERA_PERMISSION = 2; + static final int REQUEST_VIBRATE_PERMISSION = 3; + static final int REQUEST_ALL_PERMISSION_REQ_CODE = 1001; + + private PermissionsUtil() { + } + + /** + * Request a dangerous permission. name must be specified in <a href="https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml">this</a> + * @param name the name of the requested permission. + * @param activity the caller activity for this method. + * @return true/false. "true" if permission was granted otherwise returns "false". + */ + public static boolean requestPermission(String name, Godot activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + // Not necessary, asked on install already + return true; + } + + if (name.equals("RECORD_AUDIO") && ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { + activity.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, REQUEST_RECORD_AUDIO_PERMISSION); + return false; + } + + if (name.equals("CAMERA") && ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { + activity.requestPermissions(new String[] { Manifest.permission.CAMERA }, REQUEST_CAMERA_PERMISSION); + return false; + } + + if (name.equals("VIBRATE") && ContextCompat.checkSelfPermission(activity, Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED) { + activity.requestPermissions(new String[] { Manifest.permission.VIBRATE }, REQUEST_VIBRATE_PERMISSION); + return false; + } + return true; + } + + /** + * Request dangerous permissions which are defined in the Android manifest file from the user. + * @param activity the caller activity for this method. + * @return true/false. "true" if all permissions were granted otherwise returns "false". + */ + public static boolean requestManifestPermissions(Godot activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { + return true; + } + + String[] manifestPermissions; + try { + manifestPermissions = getManifestPermissions(activity); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return false; + } + + if (manifestPermissions == null || manifestPermissions.length == 0) + return true; + + List<String> dangerousPermissions = new ArrayList<>(); + for (String manifestPermission : manifestPermissions) { + try { + PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); + int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; + if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) != PackageManager.PERMISSION_GRANTED) { + dangerousPermissions.add(manifestPermission); + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return false; + } + } + + if (dangerousPermissions.isEmpty()) { + // If list is empty, all of dangerous permissions were granted. + return true; + } + + String[] requestedPermissions = dangerousPermissions.toArray(new String[0]); + activity.requestPermissions(requestedPermissions, REQUEST_ALL_PERMISSION_REQ_CODE); + return false; + } + + /** + * With this function you can get the list of dangerous permissions that have been granted to the Android application. + * @param activity the caller activity for this method. + * @return granted permissions list + */ + public static String[] getGrantedPermissions(Godot activity) { + String[] manifestPermissions; + try { + manifestPermissions = getManifestPermissions(activity); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return new String[0]; + } + if (manifestPermissions == null || manifestPermissions.length == 0) + return new String[0]; + + List<String> dangerousPermissions = new ArrayList<>(); + for (String manifestPermission : manifestPermissions) { + try { + PermissionInfo permissionInfo = getPermissionInfo(activity, manifestPermission); + int protectionLevel = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? permissionInfo.getProtection() : permissionInfo.protectionLevel; + if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS && ContextCompat.checkSelfPermission(activity, manifestPermission) == PackageManager.PERMISSION_GRANTED) { + dangerousPermissions.add(manifestPermission); + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + return new String[0]; + } + } + + return dangerousPermissions.toArray(new String[0]); + } + + /** + * Returns the permissions defined in the AndroidManifest.xml file. + * @param activity the caller activity for this method. + * @return manifest permissions list + * @throws PackageManager.NameNotFoundException the exception is thrown when a given package, application, or component name cannot be found. + */ + private static String[] getManifestPermissions(Godot activity) throws PackageManager.NameNotFoundException { + PackageManager packageManager = activity.getPackageManager(); + PackageInfo packageInfo = packageManager.getPackageInfo(activity.getPackageName(), PackageManager.GET_PERMISSIONS); + return packageInfo.requestedPermissions; + } + + /** + * Returns the information of the desired permission. + * @param activity the caller activity for this method. + * @param permission the name of the permission. + * @return permission info object + * @throws PackageManager.NameNotFoundException the exception is thrown when a given package, application, or component name cannot be found. + */ + private static PermissionInfo getPermissionInfo(Godot activity, String permission) throws PackageManager.NameNotFoundException { + PackageManager packageManager = activity.getPackageManager(); + return packageManager.getPermissionInfo(permission, 0); + } +} diff --git a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java b/platform/android/java/lib/src/org/godotengine/godot/utils/RequestParams.java index b9fe0dd0c9..b9fe0dd0c9 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java +++ b/platform/android/java/lib/src/org/godotengine/godot/utils/RequestParams.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/XRMode.java b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java index 5896b23ac3..5896b23ac3 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/XRMode.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java index ff836a31ca..ff836a31ca 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrConfigChooser.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java index 5f6da8c672..5f6da8c672 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrContextFactory.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java index f1e38c35d8..f1e38c35d8 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/ovr/OvrWindowSurfaceFactory.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java index 3836967f86..3836967f86 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularConfigChooser.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularContextFactory.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java index 4f1e9a696b..4f1e9a696b 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularContextFactory.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularContextFactory.java diff --git a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java index f5718ef2b3..f5718ef2b3 100644 --- a/platform/android/java/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java +++ b/platform/android/java/lib/src/org/godotengine/godot/xr/regular/RegularFallbackConfigChooser.java diff --git a/platform/android/java/res/drawable-hdpi/notify_panel_notification_icon_bg.png b/platform/android/java/res/drawable-hdpi/notify_panel_notification_icon_bg.png Binary files differdeleted file mode 100644 index 2c246b04a4..0000000000 --- a/platform/android/java/res/drawable-hdpi/notify_panel_notification_icon_bg.png +++ /dev/null diff --git a/platform/android/java/res/drawable-mdpi/notify_panel_notification_icon_bg.png b/platform/android/java/res/drawable-mdpi/notify_panel_notification_icon_bg.png Binary files differdeleted file mode 100644 index 8bcd464bed..0000000000 --- a/platform/android/java/res/drawable-mdpi/notify_panel_notification_icon_bg.png +++ /dev/null diff --git a/platform/android/java/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png b/platform/android/java/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png Binary files differdeleted file mode 100644 index b458ff3057..0000000000 --- a/platform/android/java/res/drawable-xxhdpi/notify_panel_notification_icon_bg.png +++ /dev/null diff --git a/misc/ide/jetbrains/settings.gradle b/platform/android/java/settings.gradle index 1904ab94e7..f6921c70aa 100644 --- a/misc/ide/jetbrains/settings.gradle +++ b/platform/android/java/settings.gradle @@ -1,2 +1,5 @@ // Configure the root project. rootProject.name = "Godot" + +include ':app' +include ':lib' diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index f53df7afe9..a14e0a1960 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -826,6 +826,13 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jo */ } +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jobject obj, jint p_type, jint p_x, jint p_y) { + if (step == 0) + return; + + os_android->process_hover(p_type, Point2(p_x, p_y)); +} + /* * Android Key codes. */ @@ -1386,4 +1393,26 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_requestPermissionResu if (permission == "android.permission.RECORD_AUDIO" && p_result) { AudioDriver::get_singleton()->capture_start(); } + + if (os_android->get_main_loop()) { + os_android->get_main_loop()->emit_signal("on_request_permissions_result", permission, p_result == JNI_TRUE); + } +} + +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNIEnv *env, jclass clazz) { + if (step == 0) + return; + + if (os_android->get_main_loop()) { + os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APP_RESUMED); + } +} + +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIEnv *env, jclass clazz) { + if (step == 0) + return; + + if (os_android->get_main_loop()) { + os_android->get_main_loop()->notification(MainLoop::NOTIFICATION_APP_PAUSED); + } } diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h index 66591a2cb2..a564bbd4a1 100644 --- a/platform/android/java_godot_lib_jni.h +++ b/platform/android/java_godot_lib_jni.h @@ -45,6 +45,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_newcontext(JNIEnv *en JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_step(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_back(JNIEnv *env, jobject obj); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch(JNIEnv *env, jobject obj, jint ev, jint pointer, jint count, jintArray positions); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jobject obj, jint p_type, jint p_x, jint p_y); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jobject obj, jint p_scancode, jint p_unicode_char, jboolean p_pressed); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jobject obj, jint p_device, jint p_button, jboolean p_pressed); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jobject obj, jint p_device, jint p_axis, jfloat p_value); @@ -64,6 +65,8 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *en JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *env, jobject p_obj, jint ID, jstring method, jobjectArray params); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jobject obj, jint p_height); JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_requestPermissionResult(JNIEnv *env, jobject p_obj, jstring p_permission, jboolean p_result); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererResumed(JNIEnv *env, jclass clazz); +JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_onRendererPaused(JNIEnv *env, jclass clazz); } #endif /* !JAVA_GODOT_LIB_JNI_H */ diff --git a/platform/android/java_godot_wrapper.cpp b/platform/android/java_godot_wrapper.cpp index 8194ee6ecf..e3e613d30b 100644 --- a/platform/android/java_godot_wrapper.cpp +++ b/platform/android/java_godot_wrapper.cpp @@ -59,6 +59,8 @@ GodotJavaWrapper::GodotJavaWrapper(JNIEnv *p_env, jobject p_godot_instance) { _get_clipboard = p_env->GetMethodID(cls, "getClipboard", "()Ljava/lang/String;"); _set_clipboard = p_env->GetMethodID(cls, "setClipboard", "(Ljava/lang/String;)V"); _request_permission = p_env->GetMethodID(cls, "requestPermission", "(Ljava/lang/String;)Z"); + _request_permissions = p_env->GetMethodID(cls, "requestPermissions", "()Z"); + _get_granted_permissions = p_env->GetMethodID(cls, "getGrantedPermissions", "()[Ljava/lang/String;"); _init_input_devices = p_env->GetMethodID(cls, "initInputDevices", "()V"); _get_surface = p_env->GetMethodID(cls, "getSurface", "()Landroid/view/Surface;"); _is_activity_resumed = p_env->GetMethodID(cls, "isActivityResumed", "()Z"); @@ -199,6 +201,34 @@ bool GodotJavaWrapper::request_permission(const String &p_name) { } } +bool GodotJavaWrapper::request_permissions() { + if (_request_permissions) { + JNIEnv *env = ThreadAndroid::get_env(); + return env->CallBooleanMethod(godot_instance, _request_permissions); + } else { + return false; + } +} + +Vector<String> GodotJavaWrapper::get_granted_permissions() const { + Vector<String> permissions_list; + if (_get_granted_permissions) { + JNIEnv *env = ThreadAndroid::get_env(); + jobject permissions_object = env->CallObjectMethod(godot_instance, _get_granted_permissions); + jobjectArray *arr = reinterpret_cast<jobjectArray *>(&permissions_object); + + int i = 0; + jsize len = env->GetArrayLength(*arr); + for (i = 0; i < len; i++) { + jstring jstr = (jstring)env->GetObjectArrayElement(*arr, i); + String str = jstring_to_string(jstr, env); + permissions_list.push_back(str); + env->DeleteLocalRef(jstr); + } + } + return permissions_list; +} + void GodotJavaWrapper::init_input_devices() { if (_init_input_devices) { JNIEnv *env = ThreadAndroid::get_env(); diff --git a/platform/android/java_godot_wrapper.h b/platform/android/java_godot_wrapper.h index b1bd9b7f48..d23ff273cb 100644 --- a/platform/android/java_godot_wrapper.h +++ b/platform/android/java_godot_wrapper.h @@ -54,6 +54,8 @@ private: jmethodID _get_clipboard = 0; jmethodID _set_clipboard = 0; jmethodID _request_permission = 0; + jmethodID _request_permissions = 0; + jmethodID _get_granted_permissions = 0; jmethodID _init_input_devices = 0; jmethodID _get_surface = 0; jmethodID _is_activity_resumed = 0; @@ -81,6 +83,8 @@ public: bool has_set_clipboard(); void set_clipboard(const String &p_text); bool request_permission(const String &p_name); + bool request_permissions(); + Vector<String> get_granted_permissions() const; void init_input_devices(); jobject get_surface(); bool is_activity_resumed(); diff --git a/platform/android/logo.png b/platform/android/logo.png Binary files differindex ba2a0e366a..df445f6a9c 100644 --- a/platform/android/logo.png +++ b/platform/android/logo.png diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index 49ab0ea84a..9156181bbe 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -49,6 +49,9 @@ #include "java_godot_io_wrapper.h" #include "java_godot_wrapper.h" +#define PAN_GESTURE_MIN_DELTA 5 // only advertise PanGesture event with dx and dy greater than this +#define MAGNIFY_GESTURE_MIN_FACTOR 0.1 // only advertise MagnifyGesture event with a factor difference from 1.0 greater than this + class AndroidLogger : public Logger { public: virtual void logv(const char *p_format, va_list p_list, bool p_err) { @@ -220,6 +223,16 @@ bool OS_Android::request_permission(const String &p_name) { return godot_java->request_permission(p_name); } +bool OS_Android::request_permissions() { + + return godot_java->request_permissions(); +} + +Vector<String> OS_Android::get_granted_permissions() const { + + return godot_java->get_granted_permissions(); +} + Error OS_Android::open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path) { p_library_handle = dlopen(p_path.utf8().get_data(), RTLD_NOW); ERR_FAIL_COND_V_MSG(!p_library_handle, ERR_CANT_OPEN, "Can't open dynamic library: " + p_path + ", error: " + dlerror() + "."); @@ -396,6 +409,35 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos> ERR_FAIL_COND(touch.size() != p_points.size()); + if (touch.size() == 1) { + Point2 d = (p_points[0].pos - touch.write[0].pos); + if (fabs(d.x) > PAN_GESTURE_MIN_DELTA || fabs(d.y) > PAN_GESTURE_MIN_DELTA) { + Ref<InputEventPanGesture> ev; + ev.instance(); + ev->set_position(p_points[0].pos); + ev->set_delta(d); + input->parse_input_event(ev); + touch.write[0].pos = p_points[0].pos; + } + } else if (touch.size() == 2) { + Point2 v0 = touch[1].pos - touch[0].pos; + float l0 = (v0.x * v0.x) + (v0.y * v0.y); + if (l0 != 0.0) { + Point2 v1 = p_points[1].pos - p_points[0].pos; + float l1 = (v1.x * v1.x) + (v1.y * v1.y); + float f = (l1 / l0); + if (fabs(f - 1.0) > MAGNIFY_GESTURE_MIN_FACTOR) { + Ref<InputEventMagnifyGesture> ev; + ev.instance(); + ev->set_position(p_points[0].pos + v1 / 2); + ev->set_factor(sqrt(f)); + input->parse_input_event(ev); + touch.write[0].pos = p_points[0].pos; + touch.write[1].pos = p_points[1].pos; + } + } + } + for (int i = 0; i < touch.size(); i++) { int idx = -1; @@ -410,7 +452,7 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos> ERR_CONTINUE(idx == -1); if (touch[i].pos == p_points[idx].pos) - continue; //no move unncesearily + continue; //no unnecessary move Ref<InputEventScreenDrag> ev; ev.instance(); @@ -477,6 +519,23 @@ void OS_Android::process_touch(int p_what, int p_pointer, const Vector<TouchPos> } } +void OS_Android::process_hover(int p_type, Point2 p_pos) { + // https://developer.android.com/reference/android/view/MotionEvent.html#ACTION_HOVER_ENTER + switch (p_type) { + case 7: // hover move + case 9: // hover enter + case 10: { // hover exit + Ref<InputEventMouseMotion> ev; + ev.instance(); + ev->set_position(p_pos); + ev->set_global_position(p_pos); + ev->set_relative(p_pos - hover_prev_pos); + input->parse_input_event(ev); + hover_prev_pos = p_pos; + } break; + } +} + void OS_Android::process_accelerometer(const Vector3 &p_accelerometer) { input->set_accelerometer(p_accelerometer); diff --git a/platform/android/os_android.h b/platform/android/os_android.h index a17941f7c0..a290c0cedd 100644 --- a/platform/android/os_android.h +++ b/platform/android/os_android.h @@ -70,6 +70,7 @@ public: private: Vector<TouchPos> touch; + Point2 hover_prev_pos; // needed to calculate the relative position on hover events bool use_gl2; bool use_apk_expansion; @@ -124,6 +125,8 @@ public: virtual void alert(const String &p_alert, const String &p_title = "ALERT!"); virtual bool request_permission(const String &p_name); + virtual bool request_permissions(); + virtual Vector<String> get_granted_permissions() const; virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false); @@ -186,6 +189,7 @@ public: void process_magnetometer(const Vector3 &p_magnetometer); void process_gyroscope(const Vector3 &p_gyroscope); void process_touch(int p_what, int p_pointer, const Vector<TouchPos> &p_points); + void process_hover(int p_type, Point2 p_pos); void process_joy_event(JoypadEvent p_event); void process_event(Ref<InputEvent> p_event); void init_video_mode(int p_video_width, int p_video_height); diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp index 1cbf4d6a70..baae13c53d 100644 --- a/platform/iphone/export/export.cpp +++ b/platform/iphone/export/export.cpp @@ -287,7 +287,7 @@ void EditorExportPlatformIOS::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_40x40", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "optional_icons/spotlight_80x80", PROPERTY_HINT_FILE, "*.png"), "")); // Spotlight on devices with retina display - for (unsigned int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { + for (uint64_t i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, loading_screen_infos[i].preset_key, PROPERTY_HINT_FILE, "*.png"), "")); } @@ -487,9 +487,9 @@ Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_pr String sizes; DirAccess *da = DirAccess::open(p_iconset_dir); - ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!da, ERR_CANT_OPEN, "Cannot open directory '" + p_iconset_dir + "'."); - for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + for (uint64_t i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { IconInfo info = icon_infos[i]; String icon_path = p_preset->get(info.preset_key); if (icon_path.length() == 0) { @@ -537,16 +537,16 @@ Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_pr Error EditorExportPlatformIOS::_export_loading_screens(const Ref<EditorExportPreset> &p_preset, const String &p_dest_dir) { DirAccess *da = DirAccess::open(p_dest_dir); - ERR_FAIL_COND_V(!da, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!da, ERR_CANT_OPEN, "Cannot open directory '" + p_dest_dir + "'."); - for (unsigned int i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { + for (uint64_t i = 0; i < sizeof(loading_screen_infos) / sizeof(loading_screen_infos[0]); ++i) { LoadingScreenInfo info = loading_screen_infos[i]; String loading_screen_file = p_preset->get(info.preset_key); if (loading_screen_file.size() > 0) { Error err = da->copy(loading_screen_file, p_dest_dir + info.export_name); if (err) { memdelete(da); - String err_str = String("Failed to export loading screen (") + info.preset_key + ") from path: " + loading_screen_file; + String err_str = String("Failed to export loading screen (") + info.preset_key + ") from path '" + loading_screen_file + "'."; ERR_PRINT(err_str.utf8().get_data()); return err; } @@ -626,7 +626,7 @@ private: static String _hex_pad(uint32_t num) { Vector<char> ret; ret.resize(sizeof(num) * 2); - for (unsigned int i = 0; i < sizeof(num) * 2; ++i) { + for (uint64_t i = 0; i < sizeof(num) * 2; ++i) { uint8_t four_bits = (num >> (sizeof(num) * 8 - (i + 1) * 4)) & 0xF; ret.write[i] = _hex_char(four_bits); } @@ -757,7 +757,7 @@ void EditorExportPlatformIOS::_add_assets_to_project(const Ref<EditorExportPrese Error EditorExportPlatformIOS::_export_additional_assets(const String &p_out_dir, const Vector<String> &p_assets, bool p_is_framework, Vector<IOSExportAsset> &r_exported_assets) { DirAccess *filesystem_da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); - ERR_FAIL_COND_V(!filesystem_da, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(!filesystem_da, ERR_CANT_CREATE, "Cannot create DirAccess for path '" + p_out_dir + "'."); for (int f_idx = 0; f_idx < p_assets.size(); ++f_idx) { String asset = p_assets[f_idx]; if (!asset.begins_with("res://")) { @@ -1169,7 +1169,7 @@ bool EditorExportPlatformIOS::can_export(const Ref<EditorExportPreset> &p_preset valid = false; } - for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + for (uint64_t i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { IconInfo info = icon_infos[i]; String icon_path = p_preset->get(info.preset_key); if (icon_path.length() == 0) { diff --git a/platform/iphone/gl_view.h b/platform/iphone/gl_view.h index 4fb721f159..e3c9d212f0 100644 --- a/platform/iphone/gl_view.h +++ b/platform/iphone/gl_view.h @@ -79,8 +79,6 @@ @property(strong, nonatomic) AVPlayer *avPlayer; @property(strong, nonatomic) AVPlayerLayer *avPlayerLayer; -// Old videoplayer properties -@property(strong, nonatomic) MPMoviePlayerController *moviePlayerController; @property(strong, nonatomic) UIWindow *backgroundWindow; @property(nonatomic) UITextAutocorrectionType autocorrectionType; diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 4641b2c4ac..4e6b8e1ada 100644 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -337,12 +337,10 @@ static void clear_touches() { // the same size as our display area. - (void)layoutSubviews { - //printf("HERE\n"); [EAGLContext setCurrentContext:context]; [self destroyFramebuffer]; [self createFramebuffer]; [self drawView]; - [self drawView]; } - (BOOL)createFramebuffer { @@ -458,23 +456,23 @@ static void clear_touches() { // Updates the OpenGL view when the timer fires - (void)drawView { + + if (!active) { + printf("draw view not active!\n"); + return; + }; if (useCADisplayLink) { // Pause the CADisplayLink to avoid recursion [displayLink setPaused:YES]; // Process all input events - while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE) == kCFRunLoopRunHandledSource) + while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.0, TRUE) == kCFRunLoopRunHandledSource) ; // We are good to go, resume the CADisplayLink [displayLink setPaused:NO]; } - if (!active) { - printf("draw view not active!\n"); - return; - }; - // Make sure that you are drawing to the current context [EAGLContext setCurrentContext:context]; @@ -732,40 +730,4 @@ static void clear_touches() { _stop_video(); } -/* -- (void)moviePlayBackDidFinish:(NSNotification*)notification { - - - NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey]; - switch ([reason intValue]) { - case MPMovieFinishReasonPlaybackEnded: - //NSLog(@"Playback Ended"); - break; - case MPMovieFinishReasonPlaybackError: - //NSLog(@"Playback Error"); - video_found_error = true; - break; - case MPMovieFinishReasonUserExited: - //NSLog(@"User Exited"); - video_found_error = true; - break; - default: - //NSLog(@"Unsupported reason!"); - break; - } - - MPMoviePlayerController *player = [notification object]; - - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:MPMoviePlayerPlaybackDidFinishNotification - object:player]; - - [_instance.moviePlayerController stop]; - [_instance.moviePlayerController.view removeFromSuperview]; - - video_playing = false; -} -*/ - @end diff --git a/platform/iphone/godot_iphone.cpp b/platform/iphone/godot_iphone.cpp index db93db5021..992da2818b 100644 --- a/platform/iphone/godot_iphone.cpp +++ b/platform/iphone/godot_iphone.cpp @@ -47,7 +47,7 @@ int iphone_main(int, int, int, char **, String); int iphone_main(int width, int height, int argc, char **argv, String data_dir) { - int len = strlen(argv[0]); + size_t len = strlen(argv[0]); while (len--) { if (argv[0][len] == '/') break; diff --git a/platform/iphone/in_app_store.mm b/platform/iphone/in_app_store.mm index 490e84c571..8eef430621 100644 --- a/platform/iphone/in_app_store.mm +++ b/platform/iphone/in_app_store.mm @@ -92,7 +92,7 @@ void InAppStore::_bind_methods() { PoolStringArray localized_prices; PoolStringArray currency_codes; - for (int i = 0; i < [products count]; i++) { + for (NSUInteger i = 0; i < [products count]; i++) { SKProduct *product = [products objectAtIndex:i]; diff --git a/platform/iphone/ios.h b/platform/iphone/ios.h index 91c4725b35..ef45fc7ac3 100644 --- a/platform/iphone/ios.h +++ b/platform/iphone/ios.h @@ -42,6 +42,7 @@ class iOS : public Object { public: static void alert(const char *p_alert, const char *p_title); + String get_model() const; String get_rate_url(int p_app_id) const; iOS(); diff --git a/platform/iphone/ios.mm b/platform/iphone/ios.mm index 686422ceb2..6e986df493 100644 --- a/platform/iphone/ios.mm +++ b/platform/iphone/ios.mm @@ -29,6 +29,7 @@ /*************************************************************************/ #include "ios.h" +#include <sys/sysctl.h> #import <UIKit/UIKit.h> @@ -42,6 +43,21 @@ void iOS::alert(const char *p_alert, const char *p_title) { [alert show]; } +String iOS::get_model() const { + // [[UIDevice currentDevice] model] only returns "iPad" or "iPhone". + size_t size; + sysctlbyname("hw.machine", NULL, &size, NULL, 0); + char *model = (char *)malloc(size); + if (model == NULL) { + return ""; + } + sysctlbyname("hw.machine", model, &size, NULL, 0); + NSString *platform = [NSString stringWithCString:model encoding:NSUTF8StringEncoding]; + free(model); + const char *str = [platform UTF8String]; + return String(str != NULL ? str : ""); +} + String iOS::get_rate_url(int p_app_id) const { String templ = "itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID"; String templ_iOS7 = "itms-apps://itunes.apple.com/app/idAPP_ID"; diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index 353078c51c..83b0660ef7 100644 --- a/platform/iphone/os_iphone.cpp +++ b/platform/iphone/os_iphone.cpp @@ -47,8 +47,6 @@ #include "semaphore_iphone.h" -#include "ios.h" - #include <dlfcn.h> int OSIPhone::get_video_driver_count() const { @@ -184,7 +182,8 @@ Error OSIPhone::initialize(const VideoMode &p_desired, int p_video_driver, int p Engine::get_singleton()->add_singleton(Engine::Singleton("ICloud", icloud)); //icloud->connect(); #endif - Engine::get_singleton()->add_singleton(Engine::Singleton("iOS", memnew(iOS))); + ios = memnew(iOS); + Engine::get_singleton()->add_singleton(Engine::Singleton("iOS", ios)); return OK; }; @@ -507,6 +506,15 @@ String OSIPhone::get_name() const { return "iOS"; }; +String OSIPhone::get_model_name() const { + + String model = ios->get_model(); + if (model != "") + return model; + + return OS_Unix::get_model_name(); +} + Size2 OSIPhone::get_window_size() const { return Vector2(video_mode.width, video_mode.height); diff --git a/platform/iphone/os_iphone.h b/platform/iphone/os_iphone.h index 804ba0b1af..63799bbae8 100644 --- a/platform/iphone/os_iphone.h +++ b/platform/iphone/os_iphone.h @@ -41,6 +41,7 @@ #include "game_center.h" #include "icloud.h" #include "in_app_store.h" +#include "ios.h" #include "main/input_default.h" #include "servers/audio_server.h" #include "servers/visual/rasterizer.h" @@ -72,6 +73,7 @@ private: #ifdef ICLOUD_ENABLED ICloud *icloud; #endif + iOS *ios; MainLoop *main_loop; @@ -178,6 +180,7 @@ public: void set_data_dir(String p_dir); virtual String get_name() const; + virtual String get_model_name() const; Error shell_open(String p_uri); diff --git a/platform/javascript/api/api.cpp b/platform/javascript/api/api.cpp index d4dc43d57c..0832ae0360 100644 --- a/platform/javascript/api/api.cpp +++ b/platform/javascript/api/api.cpp @@ -55,7 +55,7 @@ JavaScript *JavaScript::get_singleton() { JavaScript::JavaScript() { - ERR_FAIL_COND(singleton != NULL); + ERR_FAIL_COND_MSG(singleton != NULL, "JavaScript singleton already exist."); singleton = this; } diff --git a/platform/javascript/engine.js b/platform/javascript/engine.js index 860d6707ff..1f78aa672d 100644 --- a/platform/javascript/engine.js +++ b/platform/javascript/engine.js @@ -94,6 +94,7 @@ return new Promise(function(resolve, reject) { rtenvProps.onRuntimeInitialized = resolve; rtenvProps.onAbort = reject; + rtenvProps.thisProgram = executableName; rtenvProps.engine.rtenv = Engine.RuntimeEnvironment(rtenvProps, LIBS); }); } @@ -130,13 +131,11 @@ ); }; - this.startGame = function(mainPack) { + this.startGame = function(execName, mainPack) { + + executableName = execName; + var mainArgs = [ '--main-pack', mainPack ]; - executableName = getBaseName(mainPack); - var mainArgs = []; - if (!getPathLeaf(mainPack).endsWith('.pck')) { - mainArgs = ['--main-pack', getPathLeaf(mainPack)]; - } return Promise.all([ // Load from directory, this.init(getBasePath(mainPack)), @@ -187,8 +186,6 @@ this.rtenv.locale = this.rtenv.locale.split('.')[0]; this.rtenv.resizeCanvasOnStart = resizeCanvasOnStart; - this.rtenv.thisProgram = executableName || getBaseName(basePath); - preloadedFiles.forEach(function(file) { var dir = LIBS.PATH.dirname(file.path); try { diff --git a/platform/javascript/export/export.cpp b/platform/javascript/export/export.cpp index 69dd038709..f3e8d6911a 100644 --- a/platform/javascript/export/export.cpp +++ b/platform/javascript/export/export.cpp @@ -28,9 +28,10 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ +#include "core/io/tcp_server.h" #include "core/io/zip_io.h" +#include "editor/editor_export.h" #include "editor/editor_node.h" -#include "editor_export.h" #include "main/splash.gen.h" #include "platform/javascript/logo.gen.h" #include "platform/javascript/run_icon.gen.h" @@ -38,16 +39,153 @@ #define EXPORT_TEMPLATE_WEBASSEMBLY_RELEASE "webassembly_release.zip" #define EXPORT_TEMPLATE_WEBASSEMBLY_DEBUG "webassembly_debug.zip" +class EditorHTTPServer : public Reference { + +private: + Ref<TCP_Server> server; + Ref<StreamPeerTCP> connection; + uint64_t time; + uint8_t req_buf[4096]; + int req_pos; + + void _clear_client() { + connection = Ref<StreamPeerTCP>(); + memset(req_buf, 0, sizeof(req_buf)); + time = 0; + req_pos = 0; + } + +public: + EditorHTTPServer() { + server.instance(); + stop(); + } + + void stop() { + server->stop(); + _clear_client(); + } + + Error listen(int p_port, IP_Address p_address) { + return server->listen(p_port, p_address); + } + + bool is_listening() const { + return server->is_listening(); + } + + void _send_response() { + Vector<String> psa = String((char *)req_buf).split("\r\n"); + int len = psa.size(); + ERR_FAIL_COND_MSG(len < 4, "Not enough response headers, got: " + itos(len) + ", expected >= 4."); + + Vector<String> req = psa[0].split(" ", false); + ERR_FAIL_COND_MSG(req.size() < 2, "Invalid protocol or status code."); + + // Wrong protocol + ERR_FAIL_COND_MSG(req[0] != "GET" || req[2] != "HTTP/1.1", "Invalid method or HTTP version."); + + String filepath = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp_js_export"); + String basereq = "/tmp_js_export"; + if (req[1] == basereq + ".html") { + filepath += ".html"; + } else if (req[1] == basereq + ".js") { + filepath += ".js"; + } else if (req[1] == basereq + ".pck") { + filepath += ".pck"; + } else if (req[1] == basereq + ".png") { + filepath += ".png"; + } else if (req[1] == basereq + ".wasm") { + filepath += ".wasm"; + } else { + String s = "HTTP/1.1 404 Not Found\r\n"; + s += "Connection: Close\r\n"; + s += "\r\n"; + CharString cs = s.utf8(); + connection->put_data((const uint8_t *)cs.get_data(), cs.size() - 1); + return; + } + FileAccess *f = FileAccess::open(filepath, FileAccess::READ); + ERR_FAIL_COND(!f); + String s = "HTTP/1.1 200 OK\r\n"; + s += "Connection: Close\r\n"; + s += "\r\n"; + CharString cs = s.utf8(); + Error err = connection->put_data((const uint8_t *)cs.get_data(), cs.size() - 1); + ERR_FAIL_COND(err != OK); + + while (true) { + uint8_t bytes[4096]; + int read = f->get_buffer(bytes, 4096); + if (read < 1) { + break; + } + err = connection->put_data(bytes, read); + ERR_FAIL_COND(err != OK); + } + } + + void poll() { + if (!server->is_listening()) + return; + if (connection.is_null()) { + if (!server->is_connection_available()) + return; + connection = server->take_connection(); + time = OS::get_singleton()->get_ticks_usec(); + } + if (OS::get_singleton()->get_ticks_usec() - time > 1000000) { + _clear_client(); + return; + } + if (connection->get_status() != StreamPeerTCP::STATUS_CONNECTED) + return; + + while (true) { + + char *r = (char *)req_buf; + int l = req_pos - 1; + if (l > 3 && r[l] == '\n' && r[l - 1] == '\r' && r[l - 2] == '\n' && r[l - 3] == '\r') { + _send_response(); + _clear_client(); + return; + } + + int read = 0; + ERR_FAIL_COND(req_pos >= 4096); + Error err = connection->get_partial_data(&req_buf[req_pos], 1, read); + if (err != OK) { + // Got an error + _clear_client(); + return; + } else if (read != 1) { + // Busy, wait next poll + return; + } + req_pos += read; + } + } +}; + class EditorExportPlatformJavaScript : public EditorExportPlatform { GDCLASS(EditorExportPlatformJavaScript, EditorExportPlatform); Ref<ImageTexture> logo; Ref<ImageTexture> run_icon; - bool runnable_when_last_polled; + Ref<ImageTexture> stop_icon; + int menu_options; void _fix_html(Vector<uint8_t> &p_html, const Ref<EditorExportPreset> &p_preset, const String &p_name, bool p_debug); +private: + Ref<EditorHTTPServer> server; + bool server_quit; + Mutex *server_lock; + Thread *server_thread; + + static void _server_thread_poll(void *data); + public: virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features); @@ -61,11 +199,12 @@ public: virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const; virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); - virtual bool poll_devices(); - virtual int get_device_count() const; - virtual String get_device_name(int p_device) const { return TTR("Run in Browser"); } - virtual String get_device_info(int p_device) const { return TTR("Run exported HTML in the system's default browser."); } - virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags); + virtual bool poll_export(); + virtual int get_options_count() const; + virtual String get_option_label(int p_index) const { return p_index ? TTR("Stop HTTP Server") : TTR("Run in Browser"); } + virtual String get_option_tooltip(int p_index) const { return p_index ? TTR("Stop HTTP Server") : TTR("Run exported HTML in the system's default browser."); } + virtual Ref<ImageTexture> get_option_icon(int p_index) const; + virtual Error run(const Ref<EditorExportPreset> &p_preset, int p_option, int p_debug_flags); virtual Ref<Texture> get_run_icon() const; virtual void get_platform_features(List<String> *r_features) { @@ -78,6 +217,7 @@ public: } EditorExportPlatformJavaScript(); + ~EditorExportPlatformJavaScript(); }; void EditorExportPlatformJavaScript::_fix_html(Vector<uint8_t> &p_html, const Ref<EditorExportPreset> &p_preset, const String &p_name, bool p_debug) { @@ -337,7 +477,7 @@ Error EditorExportPlatformJavaScript::export_project(const Ref<EditorExportPrese return OK; } -bool EditorExportPlatformJavaScript::poll_devices() { +bool EditorExportPlatformJavaScript::poll_export() { Ref<EditorExportPreset> preset; @@ -350,17 +490,37 @@ bool EditorExportPlatformJavaScript::poll_devices() { } } - bool prev = runnable_when_last_polled; - runnable_when_last_polled = preset.is_valid(); - return runnable_when_last_polled != prev; + int prev = menu_options; + menu_options = preset.is_valid(); + if (server->is_listening()) { + if (menu_options == 0) { + server_lock->lock(); + server->stop(); + server_lock->unlock(); + } else { + menu_options += 1; + } + } + return menu_options != prev; +} + +Ref<ImageTexture> EditorExportPlatformJavaScript::get_option_icon(int p_index) const { + return p_index == 1 ? stop_icon : EditorExportPlatform::get_option_icon(p_index); } -int EditorExportPlatformJavaScript::get_device_count() const { +int EditorExportPlatformJavaScript::get_options_count() const { - return runnable_when_last_polled; + return menu_options; } -Error EditorExportPlatformJavaScript::run(const Ref<EditorExportPreset> &p_preset, int p_device, int p_debug_flags) { +Error EditorExportPlatformJavaScript::run(const Ref<EditorExportPreset> &p_preset, int p_option, int p_debug_flags) { + + if (p_option == 1) { + server_lock->lock(); + server->stop(); + server_lock->unlock(); + return OK; + } String basepath = EditorSettings::get_singleton()->get_cache_dir().plus_file("tmp_js_export"); String path = basepath + ".html"; @@ -374,7 +534,26 @@ Error EditorExportPlatformJavaScript::run(const Ref<EditorExportPreset> &p_prese DirAccess::remove_file_or_error(basepath + ".wasm"); return err; } - OS::get_singleton()->shell_open(String("file://") + path); + + IP_Address bind_ip; + uint16_t bind_port = EDITOR_GET("export/web/http_port"); + // Resolve host if needed. + String bind_host = EDITOR_GET("export/web/http_host"); + if (bind_host.is_valid_ip_address()) { + bind_ip = bind_host; + } else { + bind_ip = IP::get_singleton()->resolve_hostname(bind_host); + } + ERR_FAIL_COND_V_MSG(!bind_ip.is_valid(), ERR_INVALID_PARAMETER, "Invalid editor setting 'export/web/http_host': '" + bind_host + "'. Try using '127.0.0.1'."); + + // Restart server. + server_lock->lock(); + server->stop(); + err = server->listen(bind_port, bind_ip); + server_lock->unlock(); + ERR_FAIL_COND_V_MSG(err != OK, err, "Unable to start HTTP server."); + + OS::get_singleton()->shell_open(String("http://" + bind_host + ":" + itos(bind_port) + "/tmp_js_export.html")); // FIXME: Find out how to clean up export files after running the successfully // exported game. Might not be trivial. return OK; @@ -385,8 +564,23 @@ Ref<Texture> EditorExportPlatformJavaScript::get_run_icon() const { return run_icon; } +void EditorExportPlatformJavaScript::_server_thread_poll(void *data) { + EditorExportPlatformJavaScript *ej = (EditorExportPlatformJavaScript *)data; + while (!ej->server_quit) { + OS::get_singleton()->delay_usec(1000); + ej->server_lock->lock(); + ej->server->poll(); + ej->server_lock->unlock(); + } +} + EditorExportPlatformJavaScript::EditorExportPlatformJavaScript() { + server.instance(); + server_quit = false; + server_lock = Mutex::create(); + server_thread = Thread::create(_server_thread_poll, this); + Ref<Image> img = memnew(Image(_javascript_logo)); logo.instance(); logo->create_from_image(img); @@ -395,11 +589,29 @@ EditorExportPlatformJavaScript::EditorExportPlatformJavaScript() { run_icon.instance(); run_icon->create_from_image(img); - runnable_when_last_polled = false; + Ref<Theme> theme = EditorNode::get_singleton()->get_editor_theme(); + if (theme.is_valid()) + stop_icon = theme->get_icon("Stop", "EditorIcons"); + else + stop_icon.instance(); + + menu_options = 0; +} + +EditorExportPlatformJavaScript::~EditorExportPlatformJavaScript() { + server->stop(); + server_quit = true; + Thread::wait_to_finish(server_thread); + memdelete(server_lock); + memdelete(server_thread); } void register_javascript_exporter() { + EDITOR_DEF("export/web/http_host", "localhost"); + EDITOR_DEF("export/web/http_port", 8060); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::INT, "export/web/http_port", PROPERTY_HINT_RANGE, "1,65535,1")); + Ref<EditorExportPlatformJavaScript> platform; platform.instance(); EditorExport::get_singleton()->add_export_platform(platform); diff --git a/platform/javascript/logo.png b/platform/javascript/logo.png Binary files differindex 36832d93ba..c046d87dc4 100644 --- a/platform/javascript/logo.png +++ b/platform/javascript/logo.png diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp index 0179bf813d..652f6a1ce1 100644 --- a/platform/javascript/os_javascript.cpp +++ b/platform/javascript/os_javascript.cpp @@ -574,6 +574,8 @@ void OS_JavaScript::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_s }, cursors[p_shape].utf8().get_data()); /* clang-format on */ cursors[p_shape] = ""; + + cursors_cache.erase(p_shape); } set_cursor_shape(cursor_shape); @@ -835,7 +837,7 @@ void OS_JavaScript::set_clipboard(const String &p_text) { var text = UTF8ToString($0); if (!navigator.clipboard || !navigator.clipboard.writeText) return 1; - navigator.clipboard.writeText(text).catch(e => { + navigator.clipboard.writeText(text).catch(function(e) { // Setting OS clipboard is only possible from an input callback. console.error("Setting OS clipboard is only possible from an input callback for the HTML5 plafrom. Exception:", e); }); diff --git a/platform/osx/camera_osx.mm b/platform/osx/camera_osx.mm index f13cf76beb..af09eec2eb 100644 --- a/platform/osx/camera_osx.mm +++ b/platform/osx/camera_osx.mm @@ -150,8 +150,8 @@ { // do Y - int new_width = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0); - int new_height = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0); + size_t new_width = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0); + size_t new_height = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0); if ((width[0] != new_width) || (height[0] != new_height)) { width[0] = new_width; @@ -168,8 +168,8 @@ { // do CbCr - int new_width = CVPixelBufferGetWidthOfPlane(pixelBuffer, 1); - int new_height = CVPixelBufferGetHeightOfPlane(pixelBuffer, 1); + size_t new_width = CVPixelBufferGetWidthOfPlane(pixelBuffer, 1); + size_t new_height = CVPixelBufferGetHeightOfPlane(pixelBuffer, 1); if ((width[1] != new_width) || (height[1] != new_height)) { width[1] = new_width; diff --git a/platform/osx/crash_handler_osx.mm b/platform/osx/crash_handler_osx.mm index e19fdf1b9f..015859b3c0 100644 --- a/platform/osx/crash_handler_osx.mm +++ b/platform/osx/crash_handler_osx.mm @@ -95,7 +95,7 @@ static void handle_crash(int sig) { if (strings) { void *load_addr = (void *)load_address(); - for (int i = 1; i < size; i++) { + for (size_t i = 1; i < size; i++) { char fname[1024]; Dl_info info; @@ -142,7 +142,7 @@ static void handle_crash(int sig) { } } - fprintf(stderr, "[%d] %ls\n", i, output.c_str()); + fprintf(stderr, "[%zu] %ls\n", i, output.c_str()); } free(strings); diff --git a/platform/osx/detect.py b/platform/osx/detect.py index 881ed05025..7882253e7a 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -91,6 +91,9 @@ def configure(env): env['RANLIB'] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ranlib" env['AS'] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-as" env.Append(CPPDEFINES=['__MACPORTS__']) #hack to fix libvpx MM256_BROADCASTSI128_SI256 define + else: + env['CC'] = 'clang' + env['CXX'] = 'clang++' detect_darwin_sdk_path('osx', env) env.Append(CCFLAGS=['-isysroot', '$MACOS_SDK_PATH']) diff --git a/platform/osx/dir_access_osx.mm b/platform/osx/dir_access_osx.mm index ada142005b..75f50aaa28 100644 --- a/platform/osx/dir_access_osx.mm +++ b/platform/osx/dir_access_osx.mm @@ -48,18 +48,25 @@ String DirAccessOSX::fix_unicode_name(const char *p_name) const { } int DirAccessOSX::get_drive_count() { - NSArray *vols = [[NSWorkspace sharedWorkspace] mountedLocalVolumePaths]; + NSArray *res_keys = [NSArray arrayWithObjects:NSURLVolumeURLKey, NSURLIsSystemImmutableKey, nil]; + NSArray *vols = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:res_keys options:NSVolumeEnumerationSkipHiddenVolumes]; + return [vols count]; } String DirAccessOSX::get_drive(int p_drive) { - NSArray *vols = [[NSWorkspace sharedWorkspace] mountedLocalVolumePaths]; + NSArray *res_keys = [NSArray arrayWithObjects:NSURLVolumeURLKey, NSURLIsSystemImmutableKey, nil]; + NSArray *vols = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:res_keys options:NSVolumeEnumerationSkipHiddenVolumes]; int count = [vols count]; ERR_FAIL_INDEX_V(p_drive, count, ""); - NSString *path = vols[p_drive]; - return String([path UTF8String]); + String volname; + NSString *path = [vols[p_drive] path]; + + volname.parse_utf8([path UTF8String]); + + return volname; } #endif //posix_enabled diff --git a/platform/osx/export/export.cpp b/platform/osx/export/export.cpp index 56b0a44dbc..9226aea369 100644 --- a/platform/osx/export/export.cpp +++ b/platform/osx/export/export.cpp @@ -132,8 +132,12 @@ void EditorExportPlatformOSX::get_export_options(List<ExportOption> *r_options) r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "display/high_res"), false)); #ifdef OSX_ENABLED - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/identity"), "")); - r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/entitlements"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/enable"), false)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/identity", PROPERTY_HINT_PLACEHOLDER_TEXT, "Type: Name (ID)"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/timestamp"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/hardened_runtime"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/entitlements", PROPERTY_HINT_GLOBAL_FILE, "*.plist"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::POOL_STRING_ARRAY, "codesign/custom_options"), PoolStringArray())); #endif r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "texture_format/s3tc"), true)); @@ -240,7 +244,7 @@ void EditorExportPlatformOSX::_make_icon(const Ref<Image> &p_icon, Vector<uint8_ { "is32", "s8mk", false, 16 } //16x16 24-bit RLE + 8-bit uncompressed mask }; - for (unsigned int i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { + for (uint64_t i = 0; i < (sizeof(icon_infos) / sizeof(icon_infos[0])); ++i) { Ref<Image> copy = p_icon; // does this make sense? doesn't this just increase the reference count instead of making a copy? Do we even need a copy? copy->convert(Image::FORMAT_RGBA8); copy->resize(icon_infos[i].size, icon_infos[i].size); @@ -360,25 +364,48 @@ void EditorExportPlatformOSX::_fix_plist(const Ref<EditorExportPreset> &p_preset Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_preset, const String &p_path) { List<String> args; + if (p_preset->get("codesign/timestamp")) { + args.push_back("--timestamp"); + } + if (p_preset->get("codesign/hardened_runtime")) { + args.push_back("--options"); + args.push_back("runtime"); + } + if (p_preset->get("codesign/entitlements") != "") { /* this should point to our entitlements.plist file that sandboxes our application, I don't know if this should also be placed in our app bundle */ - args.push_back("-entitlements"); + args.push_back("--entitlements"); args.push_back(p_preset->get("codesign/entitlements")); } + + PoolStringArray user_args = p_preset->get("codesign/custom_options"); + for (int i = 0; i < user_args.size(); i++) { + String user_arg = user_args[i].strip_edges(); + if (!user_arg.empty()) { + args.push_back(user_arg); + } + } + args.push_back("-s"); args.push_back(p_preset->get("codesign/identity")); + args.push_back("-v"); /* provide some more feedback */ + args.push_back(p_path); String str; Error err = OS::get_singleton()->execute("codesign", args, true, NULL, &str, NULL, true); ERR_FAIL_COND_V(err != OK, err); - print_line("codesign: " + str); + print_line("codesign (" + p_path + "): " + str); if (str.find("no identity found") != -1) { EditorNode::add_io_error("codesign: no identity found"); return FAILED; } + if ((str.find("unrecognized blob type") != -1) || (str.find("cannot read entitlement data") != -1)) { + EditorNode::add_io_error("codesign: invalid entitlements file"); + return FAILED; + } return OK; } @@ -386,7 +413,9 @@ Error EditorExportPlatformOSX::_code_sign(const Ref<EditorExportPreset> &p_prese Error EditorExportPlatformOSX::_create_dmg(const String &p_dmg_path, const String &p_pkg_name, const String &p_app_path_name) { List<String> args; - OS::get_singleton()->move_to_trash(p_dmg_path); + if (FileAccess::exists(p_dmg_path)) { + OS::get_singleton()->move_to_trash(p_dmg_path); + } args.push_back("create"); args.push_back(p_dmg_path); @@ -647,20 +676,20 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p err = save_pack(p_preset, pack_path, &shared_objects); // see if we can code sign our new package - String identity = p_preset->get("codesign/identity"); + bool sign_enabled = p_preset->get("codesign/enable"); if (err == OK) { DirAccess *da = DirAccess::create(DirAccess::ACCESS_FILESYSTEM); for (int i = 0; i < shared_objects.size(); i++) { err = da->copy(shared_objects[i].path, tmp_app_path_name + "/Contents/Frameworks/" + shared_objects[i].path.get_file()); - if (err == OK && identity != "") { + if (err == OK && sign_enabled) { err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Frameworks/" + shared_objects[i].path.get_file()); } } memdelete(da); } - if (err == OK && identity != "") { + if (err == OK && sign_enabled) { if (ep.step("Code signing bundle", 2)) { return ERR_SKIP; } @@ -673,19 +702,6 @@ Error EditorExportPlatformOSX::export_project(const Ref<EditorExportPreset> &p_p ///@TODO we should check the contents of /Contents/Frameworks for frameworks to sign } - if (err == OK && identity != "") { - // we should probably loop through all resources and sign them? - err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Resources/icon.icns"); - } - - if (err == OK && identity != "") { - err = _code_sign(p_preset, pack_path); - } - - if (err == OK && identity != "") { - err = _code_sign(p_preset, tmp_app_path_name + "/Contents/Info.plist"); - } - // and finally create a DMG if (err == OK) { if (ep.step("Making DMG", 3)) { diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp index fa124dac11..4edf347f61 100644 --- a/platform/osx/joypad_osx.cpp +++ b/platform/osx/joypad_osx.cpp @@ -578,7 +578,7 @@ JoypadOSX::JoypadOSX() { const size_t n_elements = sizeof(vals) / sizeof(vals[0]); CFArrayRef array = okay ? CFArrayCreate(kCFAllocatorDefault, vals, n_elements, &kCFTypeArrayCallBacks) : NULL; - for (int i = 0; i < n_elements; i++) { + for (size_t i = 0; i < n_elements; i++) { if (vals[i]) { CFRelease((CFTypeRef)vals[i]); } diff --git a/platform/osx/logo.png b/platform/osx/logo.png Binary files differindex 62086fc415..834bbf3ba6 100644 --- a/platform/osx/logo.png +++ b/platform/osx/logo.png diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h index f1f37e24d2..09a871f26c 100644 --- a/platform/osx/os_osx.h +++ b/platform/osx/os_osx.h @@ -31,6 +31,8 @@ #ifndef OS_OSX_H #define OS_OSX_H +#define BitMap _QDBitMap // Suppress deprecated QuickDraw definition. + #include "camera_osx.h" #include "core/os/input.h" #include "crash_handler_osx.h" @@ -50,6 +52,7 @@ #include <ApplicationServices/ApplicationServices.h> #include <CoreVideo/CoreVideo.h> +#undef BitMap #undef CursorShape class OS_OSX : public OS_Unix { diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm index f48d4a307d..ba3ac9862e 100644 --- a/platform/osx/os_osx.mm +++ b/platform/osx/os_osx.mm @@ -339,6 +339,8 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt CGFloat oldBackingScaleFactor = [[[notification userInfo] objectForKey:@"NSBackingPropertyOldScaleFactorKey"] doubleValue]; if (OS_OSX::singleton->is_hidpi_allowed()) { [OS_OSX::singleton->window_view setWantsBestResolutionOpenGLSurface:YES]; + } else { + [OS_OSX::singleton->window_view setWantsBestResolutionOpenGLSurface:NO]; } if (newBackingScaleFactor != oldBackingScaleFactor) { @@ -618,7 +620,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType]; Vector<String> files; - for (int i = 0; i < filenames.count; i++) { + for (NSUInteger i = 0; i < filenames.count; i++) { NSString *ns = [filenames objectAtIndex:i]; char *utfs = strdup([ns UTF8String]); String ret; @@ -707,6 +709,11 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) { const CGFloat backingScaleFactor = [[event window] backingScaleFactor]; const Vector2 pos = get_mouse_pos([event locationInWindow], backingScaleFactor); mm->set_position(pos); + mm->set_pressure([event pressure]); + if ([event subtype] == NSTabletPointEventSubtype) { + const NSPoint p = [event tilt]; + mm->set_tilt(Vector2(p.x, p.y)); + } mm->set_global_position(pos); mm->set_speed(OS_OSX::singleton->input->get_last_mouse_speed()); Vector2 relativeMotion = Vector2(); @@ -1492,13 +1499,15 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a [window_view setWantsBestResolutionOpenGLSurface:YES]; //if (current_videomode.resizable) [window_object setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; + } else { + [window_view setWantsBestResolutionOpenGLSurface:NO]; } //[window_object setTitle:[NSString stringWithUTF8String:"GodotEnginies"]]; [window_object setContentView:window_view]; [window_object setDelegate:window_delegate]; [window_object setAcceptsMouseMovedEvents:YES]; - [window_object center]; + [(NSWindow *)window_object center]; [window_object setRestorable:NO]; @@ -1973,11 +1982,16 @@ void OS_OSX::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c [nsimage release]; } else { // Reset to default system cursor - cursors[p_shape] = NULL; + if (cursors[p_shape] != NULL) { + [cursors[p_shape] release]; + cursors[p_shape] = NULL; + } CursorShape c = cursor_shape; cursor_shape = CURSOR_MAX; set_cursor_shape(c); + + cursors_cache.erase(p_shape); } } @@ -2329,12 +2343,12 @@ void OS_OSX::set_current_screen(int p_screen) { }; Point2 OS_OSX::get_native_screen_position(int p_screen) const { - if (p_screen == -1) { + if (p_screen < 0) { p_screen = get_current_screen(); } NSArray *screenArray = [NSScreen screens]; - if (p_screen < [screenArray count]) { + if ((NSUInteger)p_screen < [screenArray count]) { float display_scale = _display_scale([screenArray objectAtIndex:p_screen]); NSRect nsrect = [[screenArray objectAtIndex:p_screen] frame]; // Return the top-left corner of the screen, for OS X the y starts at the bottom @@ -2353,12 +2367,12 @@ Point2 OS_OSX::get_screen_position(int p_screen) const { } int OS_OSX::get_screen_dpi(int p_screen) const { - if (p_screen == -1) { + if (p_screen < 0) { p_screen = get_current_screen(); } NSArray *screenArray = [NSScreen screens]; - if (p_screen < [screenArray count]) { + if ((NSUInteger)p_screen < [screenArray count]) { float displayScale = _display_scale([screenArray objectAtIndex:p_screen]); NSDictionary *description = [[screenArray objectAtIndex:p_screen] deviceDescription]; NSSize displayPixelSize = [[description objectForKey:NSDeviceSize] sizeValue]; @@ -2372,12 +2386,12 @@ int OS_OSX::get_screen_dpi(int p_screen) const { } Size2 OS_OSX::get_screen_size(int p_screen) const { - if (p_screen == -1) { + if (p_screen < 0) { p_screen = get_current_screen(); } NSArray *screenArray = [NSScreen screens]; - if (p_screen < [screenArray count]) { + if ((NSUInteger)p_screen < [screenArray count]) { float displayScale = _display_scale([screenArray objectAtIndex:p_screen]); // Note: Use frame to get the whole screen size NSRect nsrect = [[screenArray objectAtIndex:p_screen] frame]; diff --git a/platform/uwp/export/export.cpp b/platform/uwp/export/export.cpp index ea110b11ca..fefad3584b 100644 --- a/platform/uwp/export/export.cpp +++ b/platform/uwp/export/export.cpp @@ -500,7 +500,7 @@ Error AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t size_t block_size = (p_len - step) > BLOCK_SIZE ? (size_t)BLOCK_SIZE : (p_len - step); - for (uint32_t i = 0; i < block_size; i++) { + for (uint64_t i = 0; i < block_size; i++) { strm_in.write[i] = p_buffer[step + i]; } @@ -524,14 +524,14 @@ Error AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t //package->store_buffer(strm_out.ptr(), strm.total_out - total_out_before); int start = file_buffer.size(); file_buffer.resize(file_buffer.size() + bh.compressed_size); - for (uint32_t i = 0; i < bh.compressed_size; i++) + for (uint64_t i = 0; i < bh.compressed_size; i++) file_buffer.write[start + i] = strm_out[i]; } else { bh.compressed_size = block_size; //package->store_buffer(strm_in.ptr(), block_size); int start = file_buffer.size(); file_buffer.resize(file_buffer.size() + block_size); - for (uint32_t i = 0; i < bh.compressed_size; i++) + for (uint64_t i = 0; i < bh.compressed_size; i++) file_buffer.write[start + i] = strm_in[i]; } @@ -554,7 +554,7 @@ Error AppxPackager::add_file(String p_file_name, const uint8_t *p_buffer, size_t //package->store_buffer(strm_out.ptr(), strm.total_out - total_out_before); int start = file_buffer.size(); file_buffer.resize(file_buffer.size() + (strm.total_out - total_out_before)); - for (uint32_t i = 0; i < (strm.total_out - total_out_before); i++) + for (uint64_t i = 0; i < (strm.total_out - total_out_before); i++) file_buffer.write[start + i] = strm_out[i]; deflateEnd(&strm); @@ -1249,7 +1249,7 @@ public: Error err = OK; FileAccess *fa_pack = FileAccess::open(p_path, FileAccess::WRITE, &err); - ERR_FAIL_COND_V(err != OK, ERR_CANT_CREATE); + ERR_FAIL_COND_V_MSG(err != OK, ERR_CANT_CREATE, "Cannot create file '" + p_path + "'."); AppxPackager packager; packager.init(fa_pack); diff --git a/platform/windows/camera_win.cpp b/platform/windows/camera_win.cpp index b97796fe89..10787d0d0a 100644 --- a/platform/windows/camera_win.cpp +++ b/platform/windows/camera_win.cpp @@ -30,9 +30,12 @@ #include "camera_win.h" -///@TODO sorry guys, I got about 80% through implementing this using DirectShow only to find out Microsoft deprecated half the API and its replacement is as confusing as they could make it -// Joey suggested looking into libuvc which offers a more direct route to webcams over USB and this is very promissing but it wouldn't compile on windows for me... -// I've gutted the classes I implemented DirectShow in just to have a skeleton for someone to work on, mail me for more details or if you want a copy.... +///@TODO sorry guys, I got about 80% through implementing this using DirectShow only +// to find out Microsoft deprecated half the API and its replacement is as confusing +// as they could make it. Joey suggested looking into libuvc which offers a more direct +// route to webcams over USB and this is very promising but it wouldn't compile on +// windows for me...I've gutted the classes I implemented DirectShow in just to have +// a skeleton for someone to work on, mail me for more details or if you want a copy.... ////////////////////////////////////////////////////////////////////////// // CameraFeedWindows - Subclass for our camera feed on windows @@ -69,7 +72,8 @@ bool CameraFeedWindows::activate_feed() { return true; }; -///@TODO we should probably have a callback method here that is being called by the camera API which provides frames and call back into the CameraServer to update our texture +///@TODO we should probably have a callback method here that is being called by the +// camera API which provides frames and call back into the CameraServer to update our texture void CameraFeedWindows::deactivate_feed(){ ///@TODO this should deactivate our camera and stop the process of capturing frames diff --git a/platform/windows/detect.py b/platform/windows/detect.py index cc9ba720a8..9a2b2bcb98 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -65,6 +65,8 @@ def get_opts(): BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), ('msvc_version', 'MSVC version to use. Ignored if VCINSTALLDIR is set in shell env.', None), BoolVariable('use_mingw', 'Use the Mingw compiler, even if MSVC is installed. Only used on Windows.', False), + BoolVariable('use_llvm', 'Use the LLVM compiler', False), + BoolVariable('use_thinlto', 'Use ThinLTO', False), ] @@ -312,17 +314,33 @@ def configure_mingw(env): env.Append(LINKFLAGS=['-static']) mingw_prefix = env["mingw_prefix_64"] - env["CC"] = mingw_prefix + "gcc" - env['AS'] = mingw_prefix + "as" - env['CXX'] = mingw_prefix + "g++" - env['AR'] = mingw_prefix + "gcc-ar" - env['RANLIB'] = mingw_prefix + "gcc-ranlib" - env['LINK'] = mingw_prefix + "g++" + if env['use_llvm']: + env["CC"] = mingw_prefix + "clang" + env['AS'] = mingw_prefix + "as" + env["CXX"] = mingw_prefix + "clang++" + env['AR'] = mingw_prefix + "ar" + env['RANLIB'] = mingw_prefix + "ranlib" + env["LINK"] = mingw_prefix + "clang++" + else: + env["CC"] = mingw_prefix + "gcc" + env['AS'] = mingw_prefix + "as" + env['CXX'] = mingw_prefix + "g++" + env['AR'] = mingw_prefix + "gcc-ar" + env['RANLIB'] = mingw_prefix + "gcc-ranlib" + env['LINK'] = mingw_prefix + "g++" env["x86_libtheora_opt_gcc"] = True if env['use_lto']: - env.Append(CCFLAGS=['-flto']) - env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) + if not env['use_llvm'] and env.GetOption("num_jobs") > 1: + env.Append(CCFLAGS=['-flto']) + env.Append(LINKFLAGS=['-flto=' + str(env.GetOption("num_jobs"))]) + else: + if env['use_thinlto']: + env.Append(CCFLAGS=['-flto=thin']) + env.Append(LINKFLAGS=['-flto=thin']) + else: + env.Append(CCFLAGS=['-flto']) + env.Append(LINKFLAGS=['-flto']) ## Compile flags @@ -332,7 +350,7 @@ def configure_mingw(env): env.Append(CPPDEFINES=[('WINVER', env['target_win_version']), ('_WIN32_WINNT', env['target_win_version'])]) env.Append(LIBS=['mingw32', 'opengl32', 'dsound', 'ole32', 'd3d9', 'winmm', 'gdi32', 'iphlpapi', 'shlwapi', 'wsock32', 'ws2_32', 'kernel32', 'oleaut32', 'dinput8', 'dxguid', 'ksuser', 'imm32', 'bcrypt', 'avrt', 'uuid']) - env.Append(CPPDEFINES=['MINGW_ENABLED']) + env.Append(CPPDEFINES=['MINGW_ENABLED', ('MINGW_HAS_SECURE_API', 1)]) # resrc env.Append(BUILDERS={'RES': env.Builder(action=build_res_file, suffix='.o', src_suffix='.rc')}) diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp index 827daa2d58..3abb05b494 100644 --- a/platform/windows/export/export.cpp +++ b/platform/windows/export/export.cpp @@ -31,6 +31,7 @@ #include "core/os/file_access.h" #include "core/os/os.h" #include "editor/editor_export.h" +#include "editor/editor_node.h" #include "editor/editor_settings.h" #include "platform/windows/logo.gen.h" @@ -38,11 +39,22 @@ static Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, class EditorExportPlatformWindows : public EditorExportPlatformPC { + Error _code_sign(const Ref<EditorExportPreset> &p_preset, const String &p_path); + public: virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0); + virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path); virtual void get_export_options(List<ExportOption> *r_options); }; +Error EditorExportPlatformWindows::sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path) { + if (p_preset->get("codesign/enable")) { + return _code_sign(p_preset, p_path); + } else { + return OK; + } +} + Error EditorExportPlatformWindows::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) { Error err = EditorExportPlatformPC::export_project(p_preset, p_debug, p_path, p_flags); @@ -133,12 +145,28 @@ Error EditorExportPlatformWindows::export_project(const Ref<EditorExportPreset> OS::get_singleton()->execute(wine_path, args, true); #endif - return OK; + if (p_preset->get("codesign/enable") && err == OK) { + err = _code_sign(p_preset, p_path); + } + + return err; } void EditorExportPlatformWindows::get_export_options(List<ExportOption> *r_options) { EditorExportPlatformPC::get_export_options(r_options); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/enable"), false)); +#ifdef WINDOWS_ENABLED + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "codesign/identity_type", PROPERTY_HINT_ENUM, "Select automatically,Use PKCS12 file (specify *.PFX/*.P12 file),Use certificate store (specify SHA1 hash)"), 0)); +#endif + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/identity", PROPERTY_HINT_GLOBAL_FILE, "*.pfx,*.p12"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/password"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "codesign/timestamp"), true)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/timestamp_server_url"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "codesign/digest_algorithm", PROPERTY_HINT_ENUM, "SHA1,SHA256"), 1)); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "codesign/description"), "")); + r_options->push_back(ExportOption(PropertyInfo(Variant::POOL_STRING_ARRAY, "codesign/custom_options"), PoolStringArray())); + r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/icon", PROPERTY_HINT_FILE, "*.ico"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/file_version", PROPERTY_HINT_PLACEHOLDER_TEXT, "1.0.0"), "")); r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/product_version", PROPERTY_HINT_PLACEHOLDER_TEXT, "1.0.0"), "")); @@ -149,11 +177,164 @@ void EditorExportPlatformWindows::get_export_options(List<ExportOption> *r_optio r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, "application/trademarks"), "")); } +Error EditorExportPlatformWindows::_code_sign(const Ref<EditorExportPreset> &p_preset, const String &p_path) { + List<String> args; + +#ifdef WINDOWS_ENABLED + String signtool_path = EditorSettings::get_singleton()->get("export/windows/signtool"); + if (signtool_path != String() && !FileAccess::exists(signtool_path)) { + ERR_PRINTS("Could not find signtool executable at " + signtool_path + ", aborting."); + return ERR_FILE_NOT_FOUND; + } + if (signtool_path == String()) { + signtool_path = "signtool"; // try to run signtool from PATH + } +#else + String signtool_path = EditorSettings::get_singleton()->get("export/windows/osslsigncode"); + if (signtool_path != String() && !FileAccess::exists(signtool_path)) { + ERR_PRINTS("Could not find osslsigncode executable at " + signtool_path + ", aborting."); + return ERR_FILE_NOT_FOUND; + } + if (signtool_path == String()) { + signtool_path = "osslsigncode"; // try to run signtool from PATH + } +#endif + + args.push_back("sign"); + + //identity +#ifdef WINDOWS_ENABLED + int id_type = p_preset->get("codesign/identity_type"); + if (id_type == 0) { //auto select + args.push_back("/a"); + } else if (id_type == 1) { //pkcs12 + if (p_preset->get("codesign/identity") != "") { + args.push_back("/f"); + args.push_back(p_preset->get("codesign/identity")); + } else { + EditorNode::add_io_error("codesign: no identity found"); + return FAILED; + } + } else if (id_type == 2) { //Windows certificate store + if (p_preset->get("codesign/identity") != "") { + args.push_back("/sha1"); + args.push_back(p_preset->get("codesign/identity")); + } else { + EditorNode::add_io_error("codesign: no identity found"); + return FAILED; + } + } else { + EditorNode::add_io_error("codesign: invalid identity type"); + return FAILED; + } +#else + if (p_preset->get("codesign/identity") != "") { + args.push_back("-pkcs12"); + args.push_back(p_preset->get("codesign/identity")); + } else { + EditorNode::add_io_error("codesign: no identity found"); + return FAILED; + } +#endif + + //password + if (p_preset->get("codesign/password") != "") { +#ifdef WINDOWS_ENABLED + args.push_back("/p"); +#else + args.push_back("-pass"); +#endif + args.push_back(p_preset->get("codesign/password")); + } + + //timestamp + if (p_preset->get("codesign/timestamp")) { + if (p_preset->get("codesign/timestamp_server") != "") { +#ifdef WINDOWS_ENABLED + args.push_back("/tr"); + args.push_back(p_preset->get("codesign/timestamp_server_url")); + args.push_back("/td"); + if ((int)p_preset->get("codesign/digest_algorithm") == 0) { + args.push_back("sha1"); + } else { + args.push_back("sha256"); + } +#else + args.push_back("-ts"); + args.push_back(p_preset->get("codesign/timestamp_server_url")); +#endif + } else { + EditorNode::add_io_error("codesign: invalid timestamp server"); + return FAILED; + } + } + + //digest +#ifdef WINDOWS_ENABLED + args.push_back("/fd"); +#else + args.push_back("-h"); +#endif + if ((int)p_preset->get("codesign/digest_algorithm") == 0) { + args.push_back("sha1"); + } else { + args.push_back("sha256"); + } + + //description + if (p_preset->get("codesign/description") != "") { +#ifdef WINDOWS_ENABLED + args.push_back("/d"); +#else + args.push_back("-n"); +#endif + args.push_back(p_preset->get("codesign/description")); + } + + //user options + PoolStringArray user_args = p_preset->get("codesign/custom_options"); + for (int i = 0; i < user_args.size(); i++) { + String user_arg = user_args[i].strip_edges(); + if (!user_arg.empty()) { + args.push_back(user_arg); + } + } + +#ifndef WINDOWS_ENABLED + args.push_back("-in"); +#endif + args.push_back(p_path); +#ifndef WINDOWS_ENABLED + args.push_back("-out"); + args.push_back(p_path); +#endif + + String str; + Error err = OS::get_singleton()->execute(signtool_path, args, true, NULL, &str, NULL, true); + ERR_FAIL_COND_V(err != OK, err); + + print_line("codesign (" + p_path + "): " + str); +#ifndef WINDOWS_ENABLED + if (str.find("SignTool Error") != -1) { +#else + if (str.find("Failed") != -1) { +#endif + return FAILED; + } + + return OK; +} + void register_windows_exporter() { EDITOR_DEF("export/windows/rcedit", ""); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/rcedit", PROPERTY_HINT_GLOBAL_FILE, "*.exe")); -#ifndef WINDOWS_ENABLED +#ifdef WINDOWS_ENABLED + EDITOR_DEF("export/windows/signtool", ""); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/signtool", PROPERTY_HINT_GLOBAL_FILE, "*.exe")); +#else + EDITOR_DEF("export/windows/osslsigncode", ""); + EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/osslsigncode", PROPERTY_HINT_GLOBAL_FILE)); // On non-Windows we need WINE to run rcedit EDITOR_DEF("export/windows/wine", ""); EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/wine", PROPERTY_HINT_GLOBAL_FILE)); diff --git a/platform/windows/godot.natvis b/platform/windows/godot.natvis index 55c83c3f3c..593557cc69 100644 --- a/platform/windows/godot.natvis +++ b/platform/windows/godot.natvis @@ -143,4 +143,12 @@ <Item Name="alpha">a</Item> </Expand> </Type> + + <Type Name="Node" Inheritable="false"> + <Expand> + <Item Name="Object">(Object*)this</Item> + <Item Name="class_name">(StringName*)(((char*)this) + sizeof(Object))</Item> + <Item Name="data">(Node::Data*)(((char*)this) + sizeof(Object) + sizeof(StringName))</Item> + </Expand> + </Type> </AutoVisualizer> diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp index be325381bb..e73cfcf241 100644..100755 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -70,6 +70,10 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; #define WM_TOUCH 576 #endif +#ifndef WM_POINTERUPDATE +#define WM_POINTERUPDATE 0x0245 +#endif + typedef struct { int count; int screen; @@ -192,6 +196,9 @@ BOOL WINAPI HandlerRoutine(_In_ DWORD dwCtrlType) { } } +GetPointerTypePtr OS_Windows::win8p_GetPointerType = NULL; +GetPointerPenInfoPtr OS_Windows::win8p_GetPointerPenInfo = NULL; + void OS_Windows::initialize_debugging() { SetConsoleCtrlHandler(HandlerRoutine, TRUE); @@ -288,15 +295,16 @@ void OS_Windows::_drag_event(float p_x, float p_y, int idx) { if (curr->get() == Vector2(p_x, p_y)) return; - curr->get() = Vector2(p_x, p_y); - Ref<InputEventScreenDrag> event; event.instance(); event->set_index(idx); event->set_position(Vector2(p_x, p_y)); + event->set_relative(Vector2(p_x, p_y) - curr->get()); if (main_loop) input->accumulate_input_event(event); + + curr->get() = Vector2(p_x, p_y); }; LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -480,6 +488,119 @@ LRESULT OS_Windows::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) } delete[] lpb; } break; + case WM_POINTERUPDATE: { + if (mouse_mode == MOUSE_MODE_CAPTURED && use_raw_input) { + break; + } + + if (!win8p_GetPointerType || !win8p_GetPointerPenInfo) { + break; + } + + uint32_t pointer_id = LOWORD(wParam); + POINTER_INPUT_TYPE pointer_type = PT_POINTER; + if (!win8p_GetPointerType(pointer_id, &pointer_type)) { + break; + } + + if (pointer_type != PT_PEN) { + break; + } + + POINTER_PEN_INFO pen_info; + if (!win8p_GetPointerPenInfo(pointer_id, &pen_info)) { + break; + } + + if (input->is_emulating_mouse_from_touch()) { + // Universal translation enabled; ignore OS translation + LPARAM extra = GetMessageExtraInfo(); + if (IsTouchEvent(extra)) { + break; + } + } + + if (outside) { + //mouse enter + + if (main_loop && mouse_mode != MOUSE_MODE_CAPTURED) + main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER); + + CursorShape c = cursor_shape; + cursor_shape = CURSOR_MAX; + set_cursor_shape(c); + outside = false; + + //Once-Off notification, must call again.... + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hWnd; + tme.dwHoverTime = HOVER_DEFAULT; + TrackMouseEvent(&tme); + } + + // Don't calculate relative mouse movement if we don't have focus in CAPTURED mode. + if (!window_has_focus && mouse_mode == MOUSE_MODE_CAPTURED) + break; + + Ref<InputEventMouseMotion> mm; + mm.instance(); + + mm->set_pressure(pen_info.pressure ? (float)pen_info.pressure / 1024 : 0); + mm->set_tilt(Vector2(pen_info.tiltX ? (float)pen_info.tiltX / 90 : 0, pen_info.tiltY ? (float)pen_info.tiltY / 90 : 0)); + + mm->set_control((wParam & MK_CONTROL) != 0); + mm->set_shift((wParam & MK_SHIFT) != 0); + mm->set_alt(alt_mem); + + mm->set_button_mask(last_button_state); + + POINT coords; //client coords + coords.x = GET_X_LPARAM(lParam); + coords.y = GET_Y_LPARAM(lParam); + + ScreenToClient(hWnd, &coords); + + mm->set_position(Vector2(coords.x, coords.y)); + mm->set_global_position(Vector2(coords.x, coords.y)); + + if (mouse_mode == MOUSE_MODE_CAPTURED) { + + Point2i c(video_mode.width / 2, video_mode.height / 2); + old_x = c.x; + old_y = c.y; + + if (mm->get_position() == c) { + center = c; + return 0; + } + + Point2i ncenter = mm->get_position(); + center = ncenter; + POINT pos = { (int)c.x, (int)c.y }; + ClientToScreen(hWnd, &pos); + SetCursorPos(pos.x, pos.y); + } + + input->set_mouse_position(mm->get_position()); + mm->set_speed(input->get_last_mouse_speed()); + + if (old_invalid) { + + old_x = mm->get_position().x; + old_y = mm->get_position().y; + old_invalid = false; + } + + mm->set_relative(Vector2(mm->get_position() - Vector2(old_x, old_y))); + old_x = mm->get_position().x; + old_y = mm->get_position().y; + if (window_has_focus && main_loop) + input->parse_input_event(mm); + + return 0; //Pointer event handled return 0 to avoid duplicate WM_MOUSEMOVE event + } break; case WM_MOUSEMOVE: { if (mouse_mode == MOUSE_MODE_CAPTURED && use_raw_input) { break; @@ -1875,6 +1996,8 @@ void OS_Windows::set_window_fullscreen(bool p_enabled) { if (p_enabled) { + was_maximized = maximized; + if (pre_fs_valid) { GetWindowRect(hWnd, &pre_fs_rect); } @@ -1904,7 +2027,7 @@ void OS_Windows::set_window_fullscreen(bool p_enabled) { rect.bottom = video_mode.height; } - _update_window_style(false); + _update_window_style(false, was_maximized); MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); @@ -2086,12 +2209,16 @@ bool OS_Windows::get_borderless_window() { return video_mode.borderless_window; } -void OS_Windows::_update_window_style(bool repaint) { +void OS_Windows::_update_window_style(bool p_repaint, bool p_maximized) { if (video_mode.fullscreen || video_mode.borderless_window) { SetWindowLongPtr(hWnd, GWL_STYLE, WS_SYSMENU | WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE); } else { if (video_mode.resizable) { - SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); + if (p_maximized) { + SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_MAXIMIZE); + } else { + SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE); + } } else { SetWindowLongPtr(hWnd, GWL_STYLE, WS_CAPTION | WS_MINIMIZEBOX | WS_POPUPWINDOW | WS_VISIBLE); } @@ -2099,7 +2226,7 @@ void OS_Windows::_update_window_style(bool repaint) { SetWindowPos(hWnd, video_mode.always_on_top ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - if (repaint) { + if (p_repaint) { RECT rect; GetWindowRect(hWnd, &rect); MoveWindow(hWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE); @@ -2485,11 +2612,16 @@ void OS_Windows::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shap DeleteObject(bitmap); } else { // Reset to default system cursor - cursors[p_shape] = NULL; + if (cursors[p_shape]) { + DestroyIcon(cursors[p_shape]); + cursors[p_shape] = NULL; + } CursorShape c = cursor_shape; cursor_shape = CURSOR_MAX; set_cursor_shape(c); + + cursors_cache.erase(p_shape); } } @@ -2663,7 +2795,7 @@ String OS_Windows::get_executable_path() const { void OS_Windows::set_native_icon(const String &p_filename) { FileAccess *f = FileAccess::open(p_filename, FileAccess::READ); - ERR_FAIL_COND(!f); + ERR_FAIL_COND_MSG(!f, "Cannot open file with icon '" + p_filename + "'."); ICONDIR *icon_dir = (ICONDIR *)memalloc(sizeof(ICONDIR)); int pos = 0; @@ -3241,8 +3373,16 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) { control_mem = false; meta_mem = false; minimized = false; + was_maximized = false; console_visible = IsWindowVisible(GetConsoleWindow()); + //Note: Functions for pen input, available on Windows 8+ + HMODULE user32_lib = LoadLibraryW(L"user32.dll"); + if (user32_lib) { + win8p_GetPointerType = (GetPointerTypePtr)GetProcAddress(user32_lib, "GetPointerType"); + win8p_GetPointerPenInfo = (GetPointerPenInfoPtr)GetProcAddress(user32_lib, "GetPointerPenInfo"); + } + hInstance = _hInstance; pressrc = 0; old_invalid = true; diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h index 915d025e3b..ce279fb033 100644 --- a/platform/windows/os_windows.h +++ b/platform/windows/os_windows.h @@ -56,6 +56,71 @@ #include <windows.h> #include <windowsx.h> +#ifndef POINTER_STRUCTURES + +#define POINTER_STRUCTURES + +typedef DWORD POINTER_INPUT_TYPE; +typedef UINT32 POINTER_FLAGS; +typedef UINT32 PEN_FLAGS; +typedef UINT32 PEN_MASK; + +enum tagPOINTER_INPUT_TYPE { + PT_POINTER = 0x00000001, + PT_TOUCH = 0x00000002, + PT_PEN = 0x00000003, + PT_MOUSE = 0x00000004, + PT_TOUCHPAD = 0x00000005 +}; + +typedef enum tagPOINTER_BUTTON_CHANGE_TYPE { + POINTER_CHANGE_NONE, + POINTER_CHANGE_FIRSTBUTTON_DOWN, + POINTER_CHANGE_FIRSTBUTTON_UP, + POINTER_CHANGE_SECONDBUTTON_DOWN, + POINTER_CHANGE_SECONDBUTTON_UP, + POINTER_CHANGE_THIRDBUTTON_DOWN, + POINTER_CHANGE_THIRDBUTTON_UP, + POINTER_CHANGE_FOURTHBUTTON_DOWN, + POINTER_CHANGE_FOURTHBUTTON_UP, + POINTER_CHANGE_FIFTHBUTTON_DOWN, + POINTER_CHANGE_FIFTHBUTTON_UP, +} POINTER_BUTTON_CHANGE_TYPE; + +typedef struct tagPOINTER_INFO { + POINTER_INPUT_TYPE pointerType; + UINT32 pointerId; + UINT32 frameId; + POINTER_FLAGS pointerFlags; + HANDLE sourceDevice; + HWND hwndTarget; + POINT ptPixelLocation; + POINT ptHimetricLocation; + POINT ptPixelLocationRaw; + POINT ptHimetricLocationRaw; + DWORD dwTime; + UINT32 historyCount; + INT32 InputData; + DWORD dwKeyStates; + UINT64 PerformanceCount; + POINTER_BUTTON_CHANGE_TYPE ButtonChangeType; +} POINTER_INFO; + +typedef struct tagPOINTER_PEN_INFO { + POINTER_INFO pointerInfo; + PEN_FLAGS penFlags; + PEN_MASK penMask; + UINT32 pressure; + UINT32 rotation; + INT32 tiltX; + INT32 tiltY; +} POINTER_PEN_INFO; + +#endif + +typedef BOOL(WINAPI *GetPointerTypePtr)(uint32_t p_id, POINTER_INPUT_TYPE *p_type); +typedef BOOL(WINAPI *GetPointerPenInfoPtr)(uint32_t p_id, POINTER_PEN_INFO *p_pen_info); + typedef struct { BYTE bWidth; // Width, in pixels, of the image BYTE bHeight; // Height, in pixels, of the image @@ -77,11 +142,16 @@ typedef struct { class JoypadWindows; class OS_Windows : public OS { + static GetPointerTypePtr win8p_GetPointerType; + static GetPointerPenInfoPtr win8p_GetPointerPenInfo; + enum { KEY_EVENT_BUFFER_SIZE = 512 }; +#ifdef STDOUT_FILE FILE *stdo; +#endif struct KeyEvent { @@ -107,7 +177,6 @@ class OS_Windows : public OS { VisualServer *visual_server; CameraWindows *camera_server; int pressrc; - HDC hDC; // Private GDI Device Context HINSTANCE hInstance; // Holds The Instance Of The Application HWND hWnd; Point2 last_pos; @@ -175,7 +244,7 @@ class OS_Windows : public OS { void _drag_event(float p_x, float p_y, int idx); void _touch_event(bool p_pressed, float p_x, float p_y, int idx); - void _update_window_style(bool repaint = true); + void _update_window_style(bool p_repaint = true, bool p_maximized = false); void _set_mouse_mode_impl(MouseMode p_mode); @@ -208,6 +277,7 @@ protected: bool minimized; bool borderless; bool console_visible; + bool was_maximized; public: LRESULT WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index dfa0a45538..c695d657e7 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -83,6 +83,12 @@ #define XINPUT_CLIENT_VERSION_MAJOR 2 #define XINPUT_CLIENT_VERSION_MINOR 2 +#define VALUATOR_ABSX 0 +#define VALUATOR_ABSY 1 +#define VALUATOR_PRESSURE 2 +#define VALUATOR_TILTX 3 +#define VALUATOR_TILTY 4 + static const double abs_resolution_mult = 10000.0; static const double abs_resolution_range_mult = 10.0; @@ -378,6 +384,13 @@ Error OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_a XChangeProperty(x11_display, x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5); } + // make PID known to X11 + { + const long pid = this->get_process_id(); + Atom net_wm_pid = XInternAtom(x11_display, "_NET_WM_PID", False); + XChangeProperty(x11_display, x11_window, net_wm_pid, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&pid, 1); + } + // disable resizable window if (!current_videomode.resizable && !current_videomode.fullscreen) { XSizeHints *xsh; @@ -658,6 +671,15 @@ bool OS_X11::refresh_device_info() { int range_min_y = 0; int range_max_x = 0; int range_max_y = 0; + int pressure_resolution = 0; + int pressure_min = 0; + int pressure_max = 0; + int tilt_resolution_x = 0; + int tilt_resolution_y = 0; + int tilt_range_min_x = 0; + int tilt_range_min_y = 0; + int tilt_range_max_x = 0; + int tilt_range_max_y = 0; for (int j = 0; j < dev->num_classes; j++) { #ifdef TOUCH_ENABLED if (dev->classes[j]->type == XITouchClass && ((XITouchClassInfo *)dev->classes[j])->mode == XIDirectTouch) { @@ -667,16 +689,28 @@ bool OS_X11::refresh_device_info() { if (dev->classes[j]->type == XIValuatorClass) { XIValuatorClassInfo *class_info = (XIValuatorClassInfo *)dev->classes[j]; - if (class_info->number == 0 && class_info->mode == XIModeAbsolute) { + if (class_info->number == VALUATOR_ABSX && class_info->mode == XIModeAbsolute) { resolution_x = class_info->resolution; range_min_x = class_info->min; range_max_x = class_info->max; absolute_mode = true; - } else if (class_info->number == 1 && class_info->mode == XIModeAbsolute) { + } else if (class_info->number == VALUATOR_ABSY && class_info->mode == XIModeAbsolute) { resolution_y = class_info->resolution; range_min_y = class_info->min; range_max_y = class_info->max; absolute_mode = true; + } else if (class_info->number == VALUATOR_PRESSURE && class_info->mode == XIModeAbsolute) { + pressure_resolution = class_info->resolution; + pressure_min = class_info->min; + pressure_max = class_info->max; + } else if (class_info->number == VALUATOR_TILTX && class_info->mode == XIModeAbsolute) { + tilt_resolution_x = class_info->resolution; + tilt_range_min_x = class_info->min; + tilt_range_max_x = class_info->max; + } else if (class_info->number == VALUATOR_TILTY && class_info->mode == XIModeAbsolute) { + tilt_resolution_y = class_info->resolution; + tilt_range_min_y = class_info->min; + tilt_range_max_y = class_info->max; } } } @@ -696,6 +730,18 @@ bool OS_X11::refresh_device_info() { xi.absolute_devices[dev->deviceid] = Vector2(abs_resolution_mult / resolution_x, abs_resolution_mult / resolution_y); print_verbose("XInput: Absolute pointing device: " + String(dev->name)); } + + if (pressure_resolution <= 0) { + pressure_resolution = (pressure_max - pressure_min); + } + if (tilt_resolution_x <= 0) { + tilt_resolution_x = (tilt_range_max_x - tilt_range_min_x); + } + if (tilt_resolution_y <= 0) { + tilt_resolution_y = (tilt_range_max_y - tilt_range_min_y); + } + xi.pressure = 0; + xi.pen_devices[dev->deviceid] = Vector3(pressure_resolution, tilt_resolution_x, tilt_resolution_y); } XIFreeDeviceInfo(info); @@ -1559,7 +1605,7 @@ bool OS_X11::is_window_maximize_allowed() { bool found_wm_act_max_horz = false; bool found_wm_act_max_vert = false; - for (unsigned int i = 0; i < len; i++) { + for (uint64_t i = 0; i < len; i++) { if (atoms[i] == wm_act_max_horz) found_wm_act_max_horz = true; if (atoms[i] == wm_act_max_vert) @@ -1605,7 +1651,7 @@ bool OS_X11::is_window_maximized() const { bool found_wm_max_horz = false; bool found_wm_max_vert = false; - for (unsigned int i = 0; i < len; i++) { + for (uint64_t i = 0; i < len; i++) { if (atoms[i] == wm_max_horz) found_wm_max_horz = true; if (atoms[i] == wm_max_vert) @@ -1760,7 +1806,8 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { XKeyEvent xkeyevent_no_mod = *xkeyevent; xkeyevent_no_mod.state &= ~ShiftMask; xkeyevent_no_mod.state &= ~ControlMask; - XLookupString(&xkeyevent_no_mod, str, 256, &keysym_keycode, NULL); + XLookupString(xkeyevent, str, 256, &keysym_unicode, NULL); + XLookupString(&xkeyevent_no_mod, NULL, 0, &keysym_keycode, NULL); // Meanwhile, XLookupString returns keysyms useful for unicode. @@ -1770,8 +1817,6 @@ void OS_X11::handle_key_event(XKeyEvent *p_event, bool p_echo) { xmblen = 8; } - keysym_unicode = keysym_keycode; - if (xkeyevent->type == KeyPress && xic) { Status status; @@ -2089,14 +2134,39 @@ void OS_X11::process_xevents() { double rel_x = 0.0; double rel_y = 0.0; + double pressure = 0.0; + double tilt_x = 0.0; + double tilt_y = 0.0; - if (XIMaskIsSet(raw_event->valuators.mask, 0)) { + if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_ABSX)) { rel_x = *values; values++; } - if (XIMaskIsSet(raw_event->valuators.mask, 1)) { + if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_ABSY)) { rel_y = *values; + values++; + } + + if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_PRESSURE)) { + pressure = *values; + values++; + } + + if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_TILTX)) { + tilt_x = *values; + values++; + } + + if (XIMaskIsSet(raw_event->valuators.mask, VALUATOR_TILTY)) { + tilt_y = *values; + } + + Map<int, Vector3>::Element *pen_info = xi.pen_devices.find(device_id); + if (pen_info) { + Vector3 mult = pen_info->value(); + if (mult.x != 0.0) xi.pressure = pressure / mult.x; + if ((mult.y != 0.0) && (mult.z != 0.0)) xi.tilt = Vector2(tilt_x / mult.y, tilt_y / mult.z); } // https://bugs.freedesktop.org/show_bug.cgi?id=71609 @@ -2411,6 +2481,9 @@ void OS_X11::process_xevents() { Ref<InputEventMouseMotion> mm; mm.instance(); + mm->set_pressure(xi.pressure); + mm->set_tilt(xi.tilt); + // Make the absolute position integral so it doesn't look _too_ weird :) Point2i posi(pos); @@ -2989,6 +3062,8 @@ void OS_X11::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, c CursorShape c = current_cursor; current_cursor = CURSOR_MAX; set_cursor_shape(c); + + cursors_cache.erase(p_shape); } } @@ -3021,7 +3096,7 @@ void OS_X11::alert(const String &p_alert, const String &p_title) { String program; for (int i = 0; i < path_elems.size(); i++) { - for (unsigned int k = 0; k < sizeof(message_programs) / sizeof(char *); k++) { + for (uint64_t k = 0; k < sizeof(message_programs) / sizeof(char *); k++) { String tested_path = path_elems[i].plus_file(message_programs[k]); if (FileAccess::exists(tested_path)) { diff --git a/platform/x11/os_x11.h b/platform/x11/os_x11.h index e6c2effacf..a5576f4402 100644 --- a/platform/x11/os_x11.h +++ b/platform/x11/os_x11.h @@ -131,9 +131,12 @@ class OS_X11 : public OS_Unix { int opcode; Vector<int> touch_devices; Map<int, Vector2> absolute_devices; + Map<int, Vector3> pen_devices; XIEventMask all_event_mask; XIEventMask all_master_event_mask; Map<int, Vector2> state; + double pressure; + Vector2 tilt; Vector2 mouse_pos_to_filter; Vector2 relative_motion; Vector2 raw_pos; diff --git a/scene/2d/animated_sprite.cpp b/scene/2d/animated_sprite.cpp index 0b20b781f0..9d02408641 100644 --- a/scene/2d/animated_sprite.cpp +++ b/scene/2d/animated_sprite.cpp @@ -102,7 +102,7 @@ Rect2 AnimatedSprite::_get_rect() const { void SpriteFrames::add_frame(const StringName &p_anim, const Ref<Texture> &p_frame, int p_at_pos) { Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); if (p_at_pos >= 0 && p_at_pos < E->get().frames.size()) E->get().frames.insert(p_at_pos, p_frame); @@ -114,7 +114,7 @@ void SpriteFrames::add_frame(const StringName &p_anim, const Ref<Texture> &p_fra int SpriteFrames::get_frame_count(const StringName &p_anim) const { const Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND_V(!E, 0); + ERR_FAIL_COND_V_MSG(!E, 0, "Animation '" + String(p_anim) + "' doesn't exist."); return E->get().frames.size(); } @@ -122,7 +122,7 @@ int SpriteFrames::get_frame_count(const StringName &p_anim) const { void SpriteFrames::remove_frame(const StringName &p_anim, int p_idx) { Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); E->get().frames.remove(p_idx); emit_changed(); @@ -130,7 +130,7 @@ void SpriteFrames::remove_frame(const StringName &p_anim, int p_idx) { void SpriteFrames::clear(const StringName &p_anim) { Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); E->get().frames.clear(); emit_changed(); @@ -144,7 +144,7 @@ void SpriteFrames::clear_all() { void SpriteFrames::add_animation(const StringName &p_anim) { - ERR_FAIL_COND(animations.has(p_anim)); + ERR_FAIL_COND_MSG(animations.has(p_anim), "SpriteFrames already has animation '" + p_anim + "'."); animations[p_anim] = Anim(); animations[p_anim].normal_name = String(p_anim) + NORMAL_SUFFIX; @@ -161,8 +161,8 @@ void SpriteFrames::remove_animation(const StringName &p_anim) { void SpriteFrames::rename_animation(const StringName &p_prev, const StringName &p_next) { - ERR_FAIL_COND(!animations.has(p_prev)); - ERR_FAIL_COND(animations.has(p_next)); + ERR_FAIL_COND_MSG(!animations.has(p_prev), "SpriteFrames doesn't have animation '" + String(p_prev) + "'."); + ERR_FAIL_COND_MSG(animations.has(p_next), "Animation '" + String(p_next) + "' already exists."); Anim anim = animations[p_prev]; animations.erase(p_prev); @@ -202,26 +202,26 @@ Vector<String> SpriteFrames::get_animation_names() const { void SpriteFrames::set_animation_speed(const StringName &p_anim, float p_fps) { - ERR_FAIL_COND(p_fps < 0); + ERR_FAIL_COND_MSG(p_fps < 0, "Animation speed cannot be negative (" + itos(p_fps) + ")."); Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); E->get().speed = p_fps; } float SpriteFrames::get_animation_speed(const StringName &p_anim) const { const Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND_V(!E, 0); + ERR_FAIL_COND_V_MSG(!E, 0, "Animation '" + String(p_anim) + "' doesn't exist."); return E->get().speed; } void SpriteFrames::set_animation_loop(const StringName &p_anim, bool p_loop) { Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); E->get().loop = p_loop; } bool SpriteFrames::get_animation_loop(const StringName &p_anim) const { const Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND_V(!E, false); + ERR_FAIL_COND_V_MSG(!E, false, "Animation '" + String(p_anim) + "' doesn't exist."); return E->get().loop; } @@ -604,10 +604,14 @@ bool AnimatedSprite::_is_playing() const { void AnimatedSprite::play(const StringName &p_animation, const bool p_backwards) { - if (p_animation) + backwards = p_backwards; + + if (p_animation) { set_animation(p_animation); + if (backwards && get_frame() == 0) + set_frame(frames->get_frame_count(p_animation) - 1); + } - backwards = p_backwards; _set_playing(true); } diff --git a/scene/2d/animated_sprite.h b/scene/2d/animated_sprite.h index 2cc372bd93..3192d44678 100644 --- a/scene/2d/animated_sprite.h +++ b/scene/2d/animated_sprite.h @@ -85,7 +85,7 @@ public: _FORCE_INLINE_ Ref<Texture> get_frame(const StringName &p_anim, int p_idx) const { const Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND_V(!E, Ref<Texture>()); + ERR_FAIL_COND_V_MSG(!E, Ref<Texture>(), "Animation '" + String(p_anim) + "' doesn't exist."); ERR_FAIL_COND_V(p_idx < 0, Ref<Texture>()); if (p_idx >= E->get().frames.size()) return Ref<Texture>(); @@ -96,7 +96,7 @@ public: _FORCE_INLINE_ Ref<Texture> get_normal_frame(const StringName &p_anim, int p_idx) const { const Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND_V(!E, Ref<Texture>()); + ERR_FAIL_COND_V_MSG(!E, Ref<Texture>(), "Animation '" + String(p_anim) + "' doesn't exist."); ERR_FAIL_COND_V(p_idx < 0, Ref<Texture>()); const Map<StringName, Anim>::Element *EN = animations.find(E->get().normal_name); @@ -109,7 +109,7 @@ public: void set_frame(const StringName &p_anim, int p_idx, const Ref<Texture> &p_frame) { Map<StringName, Anim>::Element *E = animations.find(p_anim); - ERR_FAIL_COND(!E); + ERR_FAIL_COND_MSG(!E, "Animation '" + String(p_anim) + "' doesn't exist."); ERR_FAIL_COND(p_idx < 0); if (p_idx >= E->get().frames.size()) return; diff --git a/scene/2d/area_2d.cpp b/scene/2d/area_2d.cpp index a636eea285..66a1318cb7 100644 --- a/scene/2d/area_2d.cpp +++ b/scene/2d/area_2d.cpp @@ -438,7 +438,7 @@ bool Area2D::is_monitorable() const { Array Area2D::get_overlapping_bodies() const { - ERR_FAIL_COND_V(!monitoring, Array()); + ERR_FAIL_COND_V_MSG(!monitoring, Array(), "Can't find overlapping bodies when monitoring is off."); Array ret; ret.resize(body_map.size()); int idx = 0; @@ -456,7 +456,7 @@ Array Area2D::get_overlapping_bodies() const { Array Area2D::get_overlapping_areas() const { - ERR_FAIL_COND_V(!monitoring, Array()); + ERR_FAIL_COND_V_MSG(!monitoring, Array(), "Can't find overlapping bodies when monitoring is off."); Array ret; ret.resize(area_map.size()); int idx = 0; diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index fc5e5cbba2..fa23e3fd39 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -360,6 +360,10 @@ bool CanvasItem::_edit_is_selected_on_click(const Point2 &p_point, double p_tole } } +Transform2D CanvasItem::_edit_get_transform() const { + return Transform2D(_edit_get_rotation(), _edit_get_position() + _edit_get_pivot()); +} + bool CanvasItem::is_visible_in_tree() const { if (!is_inside_tree()) @@ -602,9 +606,7 @@ void CanvasItem::_notification(int p_what) { } global_invalid = true; } break; - case NOTIFICATION_DRAW: { - - } break; + case NOTIFICATION_DRAW: case NOTIFICATION_TRANSFORM_CHANGED: { } break; @@ -737,6 +739,19 @@ void CanvasItem::draw_polyline_colors(const Vector<Point2> &p_points, const Vect VisualServer::get_singleton()->canvas_item_add_polyline(canvas_item, p_points, p_colors, p_width, p_antialiased); } +void CanvasItem::draw_arc(const Vector2 &p_center, float p_radius, float p_start_angle, float p_end_angle, int p_point_count, const Color &p_color, float p_width, bool p_antialiased) { + + Vector<Point2> points; + points.resize(p_point_count); + const float delta_angle = p_end_angle - p_start_angle; + for (int i = 0; i < p_point_count; i++) { + float theta = (i / (p_point_count - 1.0f)) * delta_angle + p_start_angle; + points.set(i, p_center + Vector2(Math::cos(theta), Math::sin(theta)) * p_radius); + } + + draw_polyline(points, p_color, p_width, p_antialiased); +} + void CanvasItem::draw_multiline(const Vector<Point2> &p_points, const Color &p_color, float p_width, bool p_antialiased) { ERR_FAIL_COND_MSG(!drawing, "Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal."); @@ -779,29 +794,29 @@ void CanvasItem::draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_fil VisualServer::get_singleton()->canvas_item_add_line( canvas_item, - p_rect.position + Point2(-offset, 0), + p_rect.position + Size2(-offset, 0), p_rect.position + Size2(p_rect.size.width + offset, 0), p_color, p_width, p_antialiased); VisualServer::get_singleton()->canvas_item_add_line( canvas_item, - p_rect.position + Point2(0, offset), - p_rect.position + Size2(0, p_rect.size.height - offset), + p_rect.position + Size2(p_rect.size.width, offset), + p_rect.position + Size2(p_rect.size.width, p_rect.size.height - offset), p_color, p_width, p_antialiased); VisualServer::get_singleton()->canvas_item_add_line( canvas_item, - p_rect.position + Point2(-offset, p_rect.size.height), p_rect.position + Size2(p_rect.size.width + offset, p_rect.size.height), + p_rect.position + Size2(-offset, p_rect.size.height), p_color, p_width, p_antialiased); VisualServer::get_singleton()->canvas_item_add_line( canvas_item, - p_rect.position + Point2(p_rect.size.width, offset), - p_rect.position + Size2(p_rect.size.width, p_rect.size.height - offset), + p_rect.position + Size2(0, p_rect.size.height - offset), + p_rect.position + Size2(0, offset), p_color, p_width, p_antialiased); @@ -1122,6 +1137,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("_edit_set_pivot", "pivot"), &CanvasItem::_edit_set_pivot); ClassDB::bind_method(D_METHOD("_edit_get_pivot"), &CanvasItem::_edit_get_pivot); ClassDB::bind_method(D_METHOD("_edit_use_pivot"), &CanvasItem::_edit_use_pivot); + ClassDB::bind_method(D_METHOD("_edit_get_transform"), &CanvasItem::_edit_get_transform); ClassDB::bind_method(D_METHOD("get_canvas_item"), &CanvasItem::get_canvas_item); @@ -1154,6 +1170,7 @@ void CanvasItem::_bind_methods() { ClassDB::bind_method(D_METHOD("draw_line", "from", "to", "color", "width", "antialiased"), &CanvasItem::draw_line, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_polyline", "points", "color", "width", "antialiased"), &CanvasItem::draw_polyline, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_polyline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_polyline_colors, DEFVAL(1.0), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("draw_arc", "center", "radius", "start_angle", "end_angle", "point_count", "color", "width", "antialiased"), &CanvasItem::draw_arc, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_multiline", "points", "color", "width", "antialiased"), &CanvasItem::draw_multiline, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_multiline_colors", "points", "colors", "width", "antialiased"), &CanvasItem::draw_multiline_colors, DEFVAL(1.0), DEFVAL(false)); ClassDB::bind_method(D_METHOD("draw_rect", "rect", "color", "filled", "width", "antialiased"), &CanvasItem::draw_rect, DEFVAL(true), DEFVAL(1.0), DEFVAL(false)); diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index 9c6799a441..e51ee601e2 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -281,6 +281,8 @@ public: virtual void _edit_set_pivot(const Point2 &p_pivot){}; virtual Point2 _edit_get_pivot() const { return Point2(); }; + virtual Transform2D _edit_get_transform() const; + /* VISIBILITY */ void set_visible(bool p_visible); @@ -305,6 +307,7 @@ public: void draw_line(const Point2 &p_from, const Point2 &p_to, const Color &p_color, float p_width = 1.0, bool p_antialiased = false); void draw_polyline(const Vector<Point2> &p_points, const Color &p_color, float p_width = 1.0, bool p_antialiased = false); void draw_polyline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false); + void draw_arc(const Vector2 &p_center, float p_radius, float p_start_angle, float p_end_angle, int p_point_count, const Color &p_color, float p_width = 1.0, bool p_antialiased = false); void draw_multiline(const Vector<Point2> &p_points, const Color &p_color, float p_width = 1.0, bool p_antialiased = false); void draw_multiline_colors(const Vector<Point2> &p_points, const Vector<Color> &p_colors, float p_width = 1.0, bool p_antialiased = false); void draw_rect(const Rect2 &p_rect, const Color &p_color, bool p_filled = true, float p_width = 1.0, bool p_antialiased = false); diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index f9f273d494..372d8f614b 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -37,6 +37,9 @@ void CPUParticles2D::set_emitting(bool p_emitting) { + if (emitting == p_emitting) + return; + emitting = p_emitting; if (emitting) set_process_internal(true); @@ -44,7 +47,7 @@ void CPUParticles2D::set_emitting(bool p_emitting) { void CPUParticles2D::set_amount(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of particles must be greater than 0."); particles.resize(p_amount); { @@ -62,7 +65,7 @@ void CPUParticles2D::set_amount(int p_amount) { } void CPUParticles2D::set_lifetime(float p_lifetime) { - ERR_FAIL_COND(p_lifetime <= 0); + ERR_FAIL_COND_MSG(p_lifetime <= 0, "Particles lifetime must be greater than 0."); lifetime = p_lifetime; } @@ -257,8 +260,7 @@ void CPUParticles2D::restart() { inactive_time = 0; frame_remainder = 0; cycle = 0; - - set_emitting(true); + emitting = false; { int pc = particles.size(); @@ -268,6 +270,8 @@ void CPUParticles2D::restart() { w[i].active = false; } } + + set_emitting(true); } void CPUParticles2D::set_direction(Vector2 p_direction) { @@ -535,6 +539,74 @@ static float rand_from_seed(uint32_t &seed) { return float(seed % uint32_t(65536)) / 65535.0; } +void CPUParticles2D::_update_internal() { + + if (particles.size() == 0 || !is_visible_in_tree()) { + _set_redraw(false); + return; + } + + float delta = get_process_delta_time(); + if (emitting) { + inactive_time = 0; + } else { + inactive_time += delta; + if (inactive_time > lifetime * 1.2) { + set_process_internal(false); + _set_redraw(false); + + //reset variables + time = 0; + inactive_time = 0; + frame_remainder = 0; + cycle = 0; + return; + } + } + _set_redraw(true); + + if (time == 0 && pre_process_time > 0.0) { + + float frame_time; + if (fixed_fps > 0) + frame_time = 1.0 / fixed_fps; + else + frame_time = 1.0 / 30.0; + + float todo = pre_process_time; + + while (todo >= 0) { + _particles_process(frame_time); + todo -= frame_time; + } + } + + if (fixed_fps > 0) { + float frame_time = 1.0 / fixed_fps; + float decr = frame_time; + + float ldelta = delta; + if (ldelta > 0.1) { //avoid recursive stalls if fps goes below 10 + ldelta = 0.1; + } else if (ldelta <= 0.0) { //unlikely but.. + ldelta = 0.001; + } + float todo = frame_remainder + ldelta; + + while (todo >= frame_time) { + _particles_process(frame_time); + todo -= decr; + } + + frame_remainder = todo; + + } else { + _particles_process(delta); + } + + _update_particle_data_buffer(); +} + void CPUParticles2D::_particles_process(float p_delta) { p_delta *= speed_scale; @@ -866,8 +938,8 @@ void CPUParticles2D::_particles_process(float p_delta) { } //scale by scale - float base_scale = Math::lerp(parameters[PARAM_SCALE] * tex_scale, 1.0f, p.scale_rand * randomness[PARAM_SCALE]); - if (base_scale == 0.0) base_scale = 0.000001; + float base_scale = tex_scale * Math::lerp(parameters[PARAM_SCALE], 1.0f, p.scale_rand * randomness[PARAM_SCALE]); + if (base_scale < 0.000001) base_scale = 0.000001; p.transform.elements[0] *= base_scale; p.transform.elements[1] *= base_scale; @@ -965,7 +1037,9 @@ void CPUParticles2D::_set_redraw(bool p_redraw) { VS::get_singleton()->multimesh_set_visible_instances(multimesh, -1); } else { - VS::get_singleton()->disconnect("frame_pre_draw", this, "_update_render_thread"); + if (VS::get_singleton()->is_connected("frame_pre_draw", this, "_update_render_thread")) { + VS::get_singleton()->disconnect("frame_pre_draw", this, "_update_render_thread"); + } VS::get_singleton()->canvas_item_set_update_when_visible(get_canvas_item(), false); VS::get_singleton()->multimesh_set_visible_instances(multimesh, 0); @@ -1000,6 +1074,10 @@ void CPUParticles2D::_notification(int p_what) { } if (p_what == NOTIFICATION_DRAW) { + // first update before rendering to avoid one frame delay after emitting starts + if (emitting && (time == 0)) + _update_internal(); + if (!redraw) return; // don't add to render list @@ -1017,71 +1095,7 @@ void CPUParticles2D::_notification(int p_what) { } if (p_what == NOTIFICATION_INTERNAL_PROCESS) { - - if (particles.size() == 0 || !is_visible_in_tree()) { - _set_redraw(false); - return; - } - - float delta = get_process_delta_time(); - if (emitting) { - inactive_time = 0; - } else { - inactive_time += delta; - if (inactive_time > lifetime * 1.2) { - set_process_internal(false); - _set_redraw(false); - - //reset variables - time = 0; - inactive_time = 0; - frame_remainder = 0; - cycle = 0; - return; - } - } - _set_redraw(true); - - if (time == 0 && pre_process_time > 0.0) { - - float frame_time; - if (fixed_fps > 0) - frame_time = 1.0 / fixed_fps; - else - frame_time = 1.0 / 30.0; - - float todo = pre_process_time; - - while (todo >= 0) { - _particles_process(frame_time); - todo -= frame_time; - } - } - - if (fixed_fps > 0) { - float frame_time = 1.0 / fixed_fps; - float decr = frame_time; - - float ldelta = delta; - if (ldelta > 0.1) { //avoid recursive stalls if fps goes below 10 - ldelta = 0.1; - } else if (ldelta <= 0.0) { //unlikely but.. - ldelta = 0.001; - } - float todo = frame_remainder + ldelta; - - while (todo >= frame_time) { - _particles_process(frame_time); - todo -= decr; - } - - frame_remainder = todo; - - } else { - _particles_process(delta); - } - - _update_particle_data_buffer(); + _update_internal(); } if (p_what == NOTIFICATION_TRANSFORM_CHANGED) { @@ -1122,8 +1136,9 @@ void CPUParticles2D::_notification(int p_what) { } void CPUParticles2D::convert_from_particles(Node *p_particles) { + Particles2D *particles = Object::cast_to<Particles2D>(p_particles); - ERR_FAIL_COND(!particles); + ERR_FAIL_COND_MSG(!particles, "Only Particles2D nodes can be converted to CPUParticles2D."); set_emitting(particles->is_emitting()); set_amount(particles->get_amount()); @@ -1410,6 +1425,7 @@ CPUParticles2D::CPUParticles2D() { frame_remainder = 0; cycle = 0; redraw = false; + emitting = false; mesh = VisualServer::get_singleton()->mesh_create(); multimesh = VisualServer::get_singleton()->multimesh_create(); diff --git a/scene/2d/cpu_particles_2d.h b/scene/2d/cpu_particles_2d.h index da668664b9..47b4568dd4 100644 --- a/scene/2d/cpu_particles_2d.h +++ b/scene/2d/cpu_particles_2d.h @@ -174,6 +174,7 @@ private: Vector2 gravity; + void _update_internal(); void _particles_process(float p_delta); void _update_particle_data_buffer(); diff --git a/scene/2d/joints_2d.cpp b/scene/2d/joints_2d.cpp index d8156a0afe..847d08b025 100644 --- a/scene/2d/joints_2d.cpp +++ b/scene/2d/joints_2d.cpp @@ -37,8 +37,8 @@ void Joint2D::_update_joint(bool p_only_free) { if (joint.is_valid()) { - if (ba.is_valid() && bb.is_valid()) - Physics2DServer::get_singleton()->body_remove_collision_exception(ba, bb); + if (ba.is_valid() && bb.is_valid() && exclude_from_collision) + Physics2DServer::get_singleton()->joint_disable_collisions_between_bodies(joint, false); Physics2DServer::get_singleton()->free(joint); joint = RID(); @@ -61,8 +61,6 @@ void Joint2D::_update_joint(bool p_only_free) { if (!body_a || !body_b) return; - SWAP(body_a, body_b); - joint = _configure_joint(body_a, body_b); if (!joint.is_valid()) @@ -133,6 +131,8 @@ void Joint2D::set_exclude_nodes_from_collision(bool p_enable) { if (exclude_from_collision == p_enable) return; + + _update_joint(true); exclude_from_collision = p_enable; _update_joint(); } diff --git a/scene/2d/line_builder.cpp b/scene/2d/line_builder.cpp index 9fe5fb98b6..6436b3878f 100644 --- a/scene/2d/line_builder.cpp +++ b/scene/2d/line_builder.cpp @@ -155,7 +155,7 @@ void LineBuilder::build() { texture_mode == Line2D::LINE_TEXTURE_STRETCH; if (distance_required) { total_distance = calculate_total_distance(points); - //Ajust totalDistance. + //Adjust totalDistance. // The line's outer length will be a little higher due to begin and end caps if (begin_cap_mode == Line2D::LINE_CAP_BOX || begin_cap_mode == Line2D::LINE_CAP_ROUND) { if (retrieve_curve) diff --git a/scene/2d/navigation_2d.cpp b/scene/2d/navigation_2d.cpp index 5cf28d6c89..c7d2dabbae 100644 --- a/scene/2d/navigation_2d.cpp +++ b/scene/2d/navigation_2d.cpp @@ -541,7 +541,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect if (CLOCK_TANGENT(apex_point, portal_left, left) >= 0) { //process - if (Math::is_zero_approx(portal_left.distance_squared_to(apex_point)) || CLOCK_TANGENT(apex_point, left, portal_right) > 0) { + if (portal_left.is_equal_approx(apex_point) || CLOCK_TANGENT(apex_point, left, portal_right) > 0) { left_poly = p; portal_left = left; } else { @@ -551,7 +551,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect left_poly = p; portal_left = apex_point; portal_right = apex_point; - if (!path.size() || path[path.size() - 1] != apex_point) + if (!path.size() || !path[path.size() - 1].is_equal_approx(apex_point)) path.push_back(apex_point); skip = true; } @@ -559,7 +559,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect if (!skip && CLOCK_TANGENT(apex_point, portal_right, right) <= 0) { //process - if (Math::is_zero_approx(portal_right.distance_squared_to(apex_point)) || CLOCK_TANGENT(apex_point, right, portal_left) < 0) { + if (portal_right.is_equal_approx(apex_point) || CLOCK_TANGENT(apex_point, right, portal_left) < 0) { right_poly = p; portal_right = right; } else { @@ -569,7 +569,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect right_poly = p; portal_right = apex_point; portal_left = apex_point; - if (!path.size() || path[path.size() - 1] != apex_point) + if (!path.size() || !path[path.size() - 1].is_equal_approx(apex_point)) path.push_back(apex_point); } } @@ -595,7 +595,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect } } - if (!path.size() || !Math::is_zero_approx(path[path.size() - 1].distance_squared_to(begin_point))) { + if (!path.size() || !path[path.size() - 1].is_equal_approx(begin_point)) { path.push_back(begin_point); // Add the begin point } else { path.write[path.size() - 1] = begin_point; // Replace first midpoint by the exact begin point @@ -603,7 +603,7 @@ Vector<Vector2> Navigation2D::get_simple_path(const Vector2 &p_start, const Vect path.invert(); - if (path.size() <= 1 || !Math::is_zero_approx(path[path.size() - 1].distance_squared_to(end_point))) { + if (path.size() <= 1 || !path[path.size() - 1].is_equal_approx(end_point)) { path.push_back(end_point); // Add the end point } else { path.write[path.size() - 1] = end_point; // Replace last midpoint by the exact end point diff --git a/scene/2d/navigation_polygon.cpp b/scene/2d/navigation_polygon.cpp index e389d5f98f..678db85ff0 100644 --- a/scene/2d/navigation_polygon.cpp +++ b/scene/2d/navigation_polygon.cpp @@ -271,7 +271,7 @@ void NavigationPolygon::make_polygons_from_outlines() { struct Polygon p; - for (int i = 0; i < tp.GetNumPoints(); i++) { + for (int64_t i = 0; i < tp.GetNumPoints(); i++) { Map<Vector2, int>::Element *E = points.find(tp[i]); if (!E) { diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index f4430d93f6..336c8aa78e 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -437,7 +437,7 @@ void Node2D::_bind_methods() { ADD_GROUP("Transform", ""); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position"), "set_position", "get_position"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_rotation", "get_rotation"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "rotation_degrees", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "rotation_degrees", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater", PROPERTY_USAGE_EDITOR), "set_rotation_degrees", "get_rotation_degrees"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "", 0), "set_transform", "get_transform"); diff --git a/scene/2d/particles_2d.cpp b/scene/2d/particles_2d.cpp index 93c12f0103..0bf8237d37 100644 --- a/scene/2d/particles_2d.cpp +++ b/scene/2d/particles_2d.cpp @@ -51,13 +51,13 @@ void Particles2D::set_emitting(bool p_emitting) { void Particles2D::set_amount(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of particles cannot be smaller than 1."); amount = p_amount; VS::get_singleton()->particles_set_amount(particles, amount); } void Particles2D::set_lifetime(float p_lifetime) { - ERR_FAIL_COND(p_lifetime <= 0); + ERR_FAIL_COND_MSG(p_lifetime <= 0, "Particles lifetime must be greater than 0."); lifetime = p_lifetime; VS::get_singleton()->particles_set_lifetime(particles, lifetime); } diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 9b6020e0fd..3a4f397fe0 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -199,7 +199,7 @@ void StaticBody2D::set_friction(real_t p_friction) { WARN_DEPRECATED_MSG("The method set_friction has been deprecated and will be removed in the future, use physics material instead."); - ERR_FAIL_COND(p_friction < 0 || p_friction > 1); + ERR_FAIL_COND_MSG(p_friction < 0 || p_friction > 1, "Friction must be between 0 and 1."); if (physics_material_override.is_null()) { physics_material_override.instance(); @@ -227,7 +227,7 @@ void StaticBody2D::set_bounce(real_t p_bounce) { WARN_DEPRECATED_MSG("The method set_bounce has been deprecated and will be removed in the future, use physics material instead."); - ERR_FAIL_COND(p_bounce < 0 || p_bounce > 1); + ERR_FAIL_COND_MSG(p_bounce < 0 || p_bounce > 1, "Bounce must be between 0 and 1."); if (physics_material_override.is_null()) { physics_material_override.instance(); @@ -622,7 +622,7 @@ void RigidBody2D::set_friction(real_t p_friction) { WARN_DEPRECATED_MSG("The method set_friction has been deprecated and will be removed in the future, use physics material instead."); - ERR_FAIL_COND(p_friction < 0 || p_friction > 1); + ERR_FAIL_COND_MSG(p_friction < 0 || p_friction > 1, "Friction must be between 0 and 1."); if (physics_material_override.is_null()) { physics_material_override.instance(); @@ -1209,7 +1209,7 @@ bool KinematicBody2D::move_and_collide(const Vector2 &p_motion, bool p_infinite_ return colliding; } -//so, if you pass 45 as limit, avoid numerical precision erros when angle is 45. +//so, if you pass 45 as limit, avoid numerical precision errors when angle is 45. #define FLOOR_ANGLE_THRESHOLD 0.01 Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const Vector2 &p_floor_direction, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle, bool p_infinite_inertia) { diff --git a/scene/2d/polygon_2d.cpp b/scene/2d/polygon_2d.cpp index 32a0b732c0..5e14959e9d 100644 --- a/scene/2d/polygon_2d.cpp +++ b/scene/2d/polygon_2d.cpp @@ -842,7 +842,7 @@ void Polygon2D::_bind_methods() { ADD_GROUP("Texture", "texture_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_offset"), "set_texture_offset", "get_texture_offset"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "texture_scale"), "set_texture_scale", "get_texture_scale"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "texture_rotation_degrees", PROPERTY_HINT_RANGE, "-1080,1080,0.1,or_lesser,or_greater"), "set_texture_rotation_degrees", "get_texture_rotation_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "texture_rotation_degrees", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater"), "set_texture_rotation_degrees", "get_texture_rotation_degrees"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "texture_rotation", PROPERTY_HINT_NONE, "", 0), "set_texture_rotation", "get_texture_rotation"); ADD_GROUP("Skeleton", ""); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton2D"), "set_skeleton", "get_skeleton"); diff --git a/scene/2d/position_2d.cpp b/scene/2d/position_2d.cpp index f0c46a5fb7..e37407ceb3 100644 --- a/scene/2d/position_2d.cpp +++ b/scene/2d/position_2d.cpp @@ -38,8 +38,9 @@ const float DEFAULT_GIZMO_EXTENTS = 10.0; void Position2D::_draw_cross() { float extents = get_gizmo_extents(); - draw_line(Point2(-extents, 0), Point2(+extents, 0), Color(1, 0.5, 0.5)); - draw_line(Point2(0, -extents), Point2(0, +extents), Color(0.5, 1, 0.5)); + // Colors taken from `axis_x_color` and `axis_y_color` (defined in `editor/editor_themes.cpp`) + draw_line(Point2(-extents, 0), Point2(+extents, 0), Color(0.96, 0.20, 0.32)); + draw_line(Point2(0, -extents), Point2(0, +extents), Color(0.53, 0.84, 0.01)); } Rect2 Position2D::_edit_get_rect() const { diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index d7a8005187..8cdfceea52 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -135,12 +135,12 @@ void Sprite::set_texture(const Ref<Texture> &p_texture) { return; if (texture.is_valid()) - texture->remove_change_receptor(this); + texture->disconnect(CoreStringNames::get_singleton()->changed, this, "_texture_changed"); texture = p_texture; if (texture.is_valid()) - texture->add_change_receptor(this); + texture->connect(CoreStringNames::get_singleton()->changed, this, "_texture_changed"); update(); emit_signal("texture_changed"); @@ -269,8 +269,8 @@ int Sprite::get_frame() const { } void Sprite::set_frame_coords(const Vector2 &p_coord) { - ERR_FAIL_INDEX(int(p_coord.x), vframes); - ERR_FAIL_INDEX(int(p_coord.y), hframes); + ERR_FAIL_INDEX(int(p_coord.x), hframes); + ERR_FAIL_INDEX(int(p_coord.y), vframes); set_frame(int(p_coord.y) * hframes + int(p_coord.x)); } @@ -281,7 +281,7 @@ Vector2 Sprite::get_frame_coords() const { void Sprite::set_vframes(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of vframes cannot be smaller than 1."); vframes = p_amount; update(); item_rect_changed(); @@ -294,7 +294,7 @@ int Sprite::get_vframes() const { void Sprite::set_hframes(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of hframes cannot be smaller than 1."); hframes = p_amount; update(); item_rect_changed(); @@ -387,13 +387,17 @@ void Sprite::_validate_property(PropertyInfo &property) const { property.hint_string = "0," + itos(vframes * hframes - 1) + ",1"; property.usage |= PROPERTY_USAGE_KEYING_INCREMENTS; } + + if (property.name == "frame_coords") { + property.usage |= PROPERTY_USAGE_KEYING_INCREMENTS; + } } -void Sprite::_changed_callback(Object *p_changed, const char *p_prop) { +void Sprite::_texture_changed() { // Changes to the texture need to trigger an update to make // the editor redraw the sprite with the updated texture. - if (texture.is_valid() && texture.ptr() == p_changed) { + if (texture.is_valid()) { update(); } } @@ -443,6 +447,8 @@ void Sprite::_bind_methods() { ClassDB::bind_method(D_METHOD("get_rect"), &Sprite::get_rect); + ClassDB::bind_method(D_METHOD("_texture_changed"), &Sprite::_texture_changed); + ADD_SIGNAL(MethodInfo("frame_changed")); ADD_SIGNAL(MethodInfo("texture_changed")); @@ -480,6 +486,4 @@ Sprite::Sprite() { } Sprite::~Sprite() { - if (texture.is_valid()) - texture->remove_change_receptor(this); } diff --git a/scene/2d/sprite.h b/scene/2d/sprite.h index 5e6717a3f5..d3c0112e62 100644 --- a/scene/2d/sprite.h +++ b/scene/2d/sprite.h @@ -57,6 +57,8 @@ class Sprite : public Node2D { void _get_rects(Rect2 &r_src_rect, Rect2 &r_dst_rect, bool &r_filter_clip) const; + void _texture_changed(); + protected: void _notification(int p_what); @@ -64,8 +66,6 @@ protected: virtual void _validate_property(PropertyInfo &property) const; - virtual void _changed_callback(Object *p_changed, const char *p_prop); - public: virtual Dictionary _edit_get_state() const; virtual void _edit_set_state(const Dictionary &p_state); diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 15423f8c5e..173214dfe4 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -216,7 +216,7 @@ Size2 TileMap::get_cell_size() const { void TileMap::set_quadrant_size(int p_size) { - ERR_FAIL_COND(p_size < 1); + ERR_FAIL_COND_MSG(p_size < 1, "Quadrant size cannot be smaller than 1."); _clear_quadrants(); quadrant_size = p_size; @@ -955,6 +955,7 @@ void TileMap::update_bitmask_region(const Vector2 &p_start, const Vector2 &p_end void TileMap::update_cell_bitmask(int p_x, int p_y) { + ERR_FAIL_COND_MSG(tile_set.is_null(), "Cannot update cell bitmask if Tileset is not open."); PosKey p(p_x, p_y); Map<PosKey, Cell>::Element *E = tile_map.find(p); if (E != NULL) { @@ -1050,6 +1051,7 @@ void TileMap::update_dirty_bitmask() { void TileMap::fix_invalid_tiles() { + ERR_FAIL_COND_MSG(tile_set.is_null(), "Cannot fix invalid tiles if Tileset is not open."); for (Map<PosKey, Cell>::Element *E = tile_map.front(); E; E = E->next()) { if (!tile_set->has_tile(get_cell(E->key().x, E->key().y))) { @@ -1549,7 +1551,8 @@ Vector2 TileMap::_map_to_world(int p_x, int p_y, bool p_ignore_ofs) const { ret += get_cell_transform()[1] * (half_offset == HALF_OFFSET_Y ? 0.5 : -0.5); } } break; - default: { + case HALF_OFFSET_DISABLED: { + // Nothing to do. } } } @@ -1612,26 +1615,27 @@ Vector2 TileMap::world_to_map(const Vector2 &p_pos) const { switch (half_offset) { case HALF_OFFSET_X: { - if (ret.y > 0 ? int(ret.y) & 1 : (int(ret.y) - 1) & 1) { + if (int(floor(ret.y)) & 1) { ret.x -= 0.5; } } break; case HALF_OFFSET_NEGATIVE_X: { - if (ret.y > 0 ? int(ret.y) & 1 : (int(ret.y) - 1) & 1) { + if (int(floor(ret.y)) & 1) { ret.x += 0.5; } } break; case HALF_OFFSET_Y: { - if (ret.x > 0 ? int(ret.x) & 1 : (int(ret.x) - 1) & 1) { + if (int(floor(ret.x)) & 1) { ret.y -= 0.5; } } break; case HALF_OFFSET_NEGATIVE_Y: { - if (ret.x > 0 ? int(ret.x) & 1 : (int(ret.x) - 1) & 1) { + if (int(floor(ret.x)) & 1) { ret.y += 0.5; } } break; - default: { + case HALF_OFFSET_DISABLED: { + // Nothing to do. } } diff --git a/scene/2d/touch_screen_button.cpp b/scene/2d/touch_screen_button.cpp index 9a1a759e72..cf68528388 100644 --- a/scene/2d/touch_screen_button.cpp +++ b/scene/2d/touch_screen_button.cpp @@ -325,8 +325,12 @@ void TouchScreenButton::_release(bool p_exiting_tree) { } Rect2 TouchScreenButton::_edit_get_rect() const { - if (texture.is_null()) - return CanvasItem::_edit_get_rect(); + if (texture.is_null()) { + if (shape.is_valid()) + return shape->get_rect(); + else + return CanvasItem::_edit_get_rect(); + } return Rect2(Size2(), texture->get_size()); } diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp index 27f16f7601..05ae281cc1 100644 --- a/scene/3d/audio_stream_player_3d.cpp +++ b/scene/3d/audio_stream_player_3d.cpp @@ -836,6 +836,7 @@ void AudioStreamPlayer3D::set_emission_angle(float p_angle) { ERR_FAIL_COND(p_angle < 0 || p_angle > 90); emission_angle = p_angle; update_gizmo(); + _change_notify("emission_angle"); } float AudioStreamPlayer3D::get_emission_angle() const { diff --git a/scene/3d/baked_lightmap.cpp b/scene/3d/baked_lightmap.cpp index c5ff4dadbc..4b1eccb40d 100644 --- a/scene/3d/baked_lightmap.cpp +++ b/scene/3d/baked_lightmap.cpp @@ -88,7 +88,7 @@ float BakedLightmapData::get_energy() const { void BakedLightmapData::add_user(const NodePath &p_path, const Ref<Texture> &p_lightmap, int p_instance) { - ERR_FAIL_COND(p_lightmap.is_null()); + ERR_FAIL_COND_MSG(p_lightmap.is_null(), "It's not a reference to a valid Texture object."); User user; user.path = p_path; user.lightmap = p_lightmap; @@ -215,6 +215,7 @@ float BakedLightmap::get_capture_cell_size() const { void BakedLightmap::set_extents(const Vector3 &p_extents) { extents = p_extents; update_gizmo(); + _change_notify("bake_extents"); } Vector3 BakedLightmap::get_extents() const { @@ -359,7 +360,7 @@ BakedLightmap::BakeError BakedLightmap::bake(Node *p_from_node, bool p_create_vi //check for valid save path DirAccessRef d = DirAccess::open(save_path); if (!d) { - ERR_PRINTS("Invalid Save Path: " + save_path); + ERR_PRINTS("Invalid Save Path '" + save_path + "'."); return BAKE_ERROR_NO_SAVE_PATH; } } diff --git a/scene/3d/camera.cpp b/scene/3d/camera.cpp index 9f8510248c..9797b5f3ab 100644 --- a/scene/3d/camera.cpp +++ b/scene/3d/camera.cpp @@ -548,9 +548,9 @@ void Camera::_bind_methods() { BIND_ENUM_CONSTANT(KEEP_WIDTH); BIND_ENUM_CONSTANT(KEEP_HEIGHT); - BIND_ENUM_CONSTANT(DOPPLER_TRACKING_DISABLED) - BIND_ENUM_CONSTANT(DOPPLER_TRACKING_IDLE_STEP) - BIND_ENUM_CONSTANT(DOPPLER_TRACKING_PHYSICS_STEP) + BIND_ENUM_CONSTANT(DOPPLER_TRACKING_DISABLED); + BIND_ENUM_CONSTANT(DOPPLER_TRACKING_IDLE_STEP); + BIND_ENUM_CONSTANT(DOPPLER_TRACKING_PHYSICS_STEP); } float Camera::get_fov() const { diff --git a/scene/3d/cpu_particles.cpp b/scene/3d/cpu_particles.cpp index fc16bc36cb..86daabefd2 100644 --- a/scene/3d/cpu_particles.cpp +++ b/scene/3d/cpu_particles.cpp @@ -46,14 +46,22 @@ PoolVector<Face3> CPUParticles::get_faces(uint32_t p_usage_flags) const { void CPUParticles::set_emitting(bool p_emitting) { + if (emitting == p_emitting) + return; + emitting = p_emitting; - if (emitting) + if (emitting) { set_process_internal(true); + + // first update before rendering to avoid one frame delay after emitting starts + if (time == 0) + _update_internal(); + } } void CPUParticles::set_amount(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of particles must be greater than 0."); particles.resize(p_amount); { @@ -71,7 +79,7 @@ void CPUParticles::set_amount(int p_amount) { } void CPUParticles::set_lifetime(float p_lifetime) { - ERR_FAIL_COND(p_lifetime <= 0); + ERR_FAIL_COND_MSG(p_lifetime <= 0, "Particles lifetime must be greater than 0."); lifetime = p_lifetime; } @@ -232,8 +240,7 @@ void CPUParticles::restart() { inactive_time = 0; frame_remainder = 0; cycle = 0; - - set_emitting(true); + emitting = false; { int pc = particles.size(); @@ -243,6 +250,8 @@ void CPUParticles::restart() { w[i].active = false; } } + + set_emitting(true); } void CPUParticles::set_direction(Vector3 p_direction) { @@ -508,6 +517,81 @@ static float rand_from_seed(uint32_t &seed) { return float(seed % uint32_t(65536)) / 65535.0; } +void CPUParticles::_update_internal() { + + if (particles.size() == 0 || !is_visible_in_tree()) { + _set_redraw(false); + return; + } + + float delta = get_process_delta_time(); + if (emitting) { + inactive_time = 0; + } else { + inactive_time += delta; + if (inactive_time > lifetime * 1.2) { + set_process_internal(false); + _set_redraw(false); + + //reset variables + time = 0; + inactive_time = 0; + frame_remainder = 0; + cycle = 0; + return; + } + } + _set_redraw(true); + + bool processed = false; + + if (time == 0 && pre_process_time > 0.0) { + + float frame_time; + if (fixed_fps > 0) + frame_time = 1.0 / fixed_fps; + else + frame_time = 1.0 / 30.0; + + float todo = pre_process_time; + + while (todo >= 0) { + _particles_process(frame_time); + processed = true; + todo -= frame_time; + } + } + + if (fixed_fps > 0) { + float frame_time = 1.0 / fixed_fps; + float decr = frame_time; + + float ldelta = delta; + if (ldelta > 0.1) { //avoid recursive stalls if fps goes below 10 + ldelta = 0.1; + } else if (ldelta <= 0.0) { //unlikely but.. + ldelta = 0.001; + } + float todo = frame_remainder + ldelta; + + while (todo >= frame_time) { + _particles_process(frame_time); + processed = true; + todo -= decr; + } + + frame_remainder = todo; + + } else { + _particles_process(delta); + processed = true; + } + + if (processed) { + _update_particle_data_buffer(); + } +} + void CPUParticles::_particles_process(float p_delta) { p_delta *= speed_scale; @@ -915,8 +999,8 @@ void CPUParticles::_particles_process(float p_delta) { } //scale by scale - float base_scale = Math::lerp(parameters[PARAM_SCALE] * tex_scale, 1.0f, p.scale_rand * randomness[PARAM_SCALE]); - if (base_scale == 0.0) base_scale = 0.000001; + float base_scale = tex_scale * Math::lerp(parameters[PARAM_SCALE], 1.0f, p.scale_rand * randomness[PARAM_SCALE]); + if (base_scale < 0.000001) base_scale = 0.000001; p.transform.basis.scale(Vector3(1, 1, 1) * base_scale); @@ -1040,7 +1124,9 @@ void CPUParticles::_set_redraw(bool p_redraw) { VS::get_singleton()->instance_geometry_set_flag(get_instance(), VS::INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE, true); VS::get_singleton()->multimesh_set_visible_instances(multimesh, -1); } else { - VS::get_singleton()->disconnect("frame_pre_draw", this, "_update_render_thread"); + if (VS::get_singleton()->is_connected("frame_pre_draw", this, "_update_render_thread")) { + VS::get_singleton()->disconnect("frame_pre_draw", this, "_update_render_thread"); + } VS::get_singleton()->instance_geometry_set_flag(get_instance(), VS::INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE, false); VS::get_singleton()->multimesh_set_visible_instances(multimesh, 0); } @@ -1068,85 +1154,24 @@ void CPUParticles::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { set_process_internal(emitting); + + // first update before rendering to avoid one frame delay after emitting starts + if (emitting && (time == 0)) + _update_internal(); } if (p_what == NOTIFICATION_EXIT_TREE) { _set_redraw(false); } - if (p_what == NOTIFICATION_INTERNAL_PROCESS) { - - if (particles.size() == 0 || !is_visible_in_tree()) { - _set_redraw(false); - return; - } - - float delta = get_process_delta_time(); - if (emitting) { - inactive_time = 0; - } else { - inactive_time += delta; - if (inactive_time > lifetime * 1.2) { - set_process_internal(false); - _set_redraw(false); - - //reset variables - time = 0; - inactive_time = 0; - frame_remainder = 0; - cycle = 0; - return; - } - } - _set_redraw(true); - - bool processed = false; - - if (time == 0 && pre_process_time > 0.0) { - - float frame_time; - if (fixed_fps > 0) - frame_time = 1.0 / fixed_fps; - else - frame_time = 1.0 / 30.0; - - float todo = pre_process_time; - - while (todo >= 0) { - _particles_process(frame_time); - processed = true; - todo -= frame_time; - } - } - - if (fixed_fps > 0) { - float frame_time = 1.0 / fixed_fps; - float decr = frame_time; - - float ldelta = delta; - if (ldelta > 0.1) { //avoid recursive stalls if fps goes below 10 - ldelta = 0.1; - } else if (ldelta <= 0.0) { //unlikely but.. - ldelta = 0.001; - } - float todo = frame_remainder + ldelta; - - while (todo >= frame_time) { - _particles_process(frame_time); - processed = true; - todo -= decr; - } - - frame_remainder = todo; - - } else { - _particles_process(delta); - processed = true; - } + if (p_what == NOTIFICATION_VISIBILITY_CHANGED) { + // first update before rendering to avoid one frame delay after emitting starts + if (emitting && (time == 0)) + _update_internal(); + } - if (processed) { - _update_particle_data_buffer(); - } + if (p_what == NOTIFICATION_INTERNAL_PROCESS) { + _update_internal(); } if (p_what == NOTIFICATION_TRANSFORM_CHANGED) { @@ -1193,7 +1218,7 @@ void CPUParticles::_notification(int p_what) { void CPUParticles::convert_from_particles(Node *p_particles) { Particles *particles = Object::cast_to<Particles>(p_particles); - ERR_FAIL_COND(!particles); + ERR_FAIL_COND_MSG(!particles, "Only Particles nodes can be converted to CPUParticles."); set_emitting(particles->is_emitting()); set_amount(particles->get_amount()); @@ -1472,6 +1497,7 @@ CPUParticles::CPUParticles() { frame_remainder = 0; cycle = 0; redraw = false; + emitting = false; set_notify_transform(true); diff --git a/scene/3d/cpu_particles.h b/scene/3d/cpu_particles.h index 66b37f359a..635265be7f 100644 --- a/scene/3d/cpu_particles.h +++ b/scene/3d/cpu_particles.h @@ -173,6 +173,7 @@ private: Vector3 gravity; + void _update_internal(); void _particles_process(float p_delta); void _update_particle_data_buffer(); diff --git a/scene/3d/gi_probe.cpp b/scene/3d/gi_probe.cpp index a04f156d80..ccc87b924c 100644 --- a/scene/3d/gi_probe.cpp +++ b/scene/3d/gi_probe.cpp @@ -243,6 +243,7 @@ void GIProbe::set_extents(const Vector3 &p_extents) { extents = p_extents; update_gizmo(); + _change_notify("extents"); } Vector3 GIProbe::get_extents() const { diff --git a/scene/3d/mesh_instance.cpp b/scene/3d/mesh_instance.cpp index 89072519d5..50ca466df3 100644 --- a/scene/3d/mesh_instance.cpp +++ b/scene/3d/mesh_instance.cpp @@ -149,12 +149,38 @@ Ref<Mesh> MeshInstance::get_mesh() const { void MeshInstance::_resolve_skeleton_path() { - if (skeleton_path.is_empty()) + Ref<SkinReference> new_skin_reference; + + if (!skeleton_path.is_empty()) { + Skeleton *skeleton = Object::cast_to<Skeleton>(get_node(skeleton_path)); + if (skeleton) { + new_skin_reference = skeleton->register_skin(skin); + if (skin.is_null()) { + //a skin was created for us + skin = new_skin_reference->get_skin(); + _change_notify(); + } + } + } + + skin_ref = new_skin_reference; + + if (skin_ref.is_valid()) { + VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), skin_ref->get_skeleton()); + } else { + VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), RID()); + } +} + +void MeshInstance::set_skin(const Ref<Skin> &p_skin) { + skin = p_skin; + if (!is_inside_tree()) return; + _resolve_skeleton_path(); +} - Skeleton *skeleton = Object::cast_to<Skeleton>(get_node(skeleton_path)); - if (skeleton) - VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), skeleton->get_skeleton()); +Ref<Skin> MeshInstance::get_skin() const { + return skin; } void MeshInstance::set_skeleton_path(const NodePath &p_skeleton) { @@ -365,6 +391,8 @@ void MeshInstance::_bind_methods() { ClassDB::bind_method(D_METHOD("get_mesh"), &MeshInstance::get_mesh); ClassDB::bind_method(D_METHOD("set_skeleton_path", "skeleton_path"), &MeshInstance::set_skeleton_path); ClassDB::bind_method(D_METHOD("get_skeleton_path"), &MeshInstance::get_skeleton_path); + ClassDB::bind_method(D_METHOD("set_skin", "skin"), &MeshInstance::set_skin); + ClassDB::bind_method(D_METHOD("get_skin"), &MeshInstance::get_skin); ClassDB::bind_method(D_METHOD("get_surface_material_count"), &MeshInstance::get_surface_material_count); ClassDB::bind_method(D_METHOD("set_surface_material", "surface", "material"), &MeshInstance::set_surface_material); @@ -380,6 +408,7 @@ void MeshInstance::_bind_methods() { ClassDB::set_method_flags("MeshInstance", "create_debug_tangents", METHOD_FLAGS_DEFAULT | METHOD_FLAG_EDITOR); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "mesh", PROPERTY_HINT_RESOURCE_TYPE, "Mesh"), "set_mesh", "get_mesh"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "skin", PROPERTY_HINT_RESOURCE_TYPE, "Skin"), "set_skin", "get_skin"); ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "skeleton", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Skeleton"), "set_skeleton_path", "get_skeleton_path"); } diff --git a/scene/3d/mesh_instance.h b/scene/3d/mesh_instance.h index 8b690b0c21..77ead75dd3 100644 --- a/scene/3d/mesh_instance.h +++ b/scene/3d/mesh_instance.h @@ -31,8 +31,10 @@ #ifndef MESH_INSTANCE_H #define MESH_INSTANCE_H +#include "scene/3d/skeleton.h" #include "scene/3d/visual_instance.h" #include "scene/resources/mesh.h" +#include "scene/resources/skin.h" class MeshInstance : public GeometryInstance { @@ -40,6 +42,8 @@ class MeshInstance : public GeometryInstance { protected: Ref<Mesh> mesh; + Ref<Skin> skin; + Ref<SkinReference> skin_ref; NodePath skeleton_path; struct BlendShapeTrack { @@ -70,6 +74,9 @@ public: void set_mesh(const Ref<Mesh> &p_mesh); Ref<Mesh> get_mesh() const; + void set_skin(const Ref<Skin> &p_skin); + Ref<Skin> get_skin() const; + void set_skeleton_path(const NodePath &p_skeleton); NodePath get_skeleton_path(); diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp index 12d562c0c6..ba0460d47c 100644 --- a/scene/3d/navigation.cpp +++ b/scene/3d/navigation.cpp @@ -230,7 +230,7 @@ void Navigation::navmesh_set_transform(int p_id, const Transform &p_xform) { } void Navigation::navmesh_remove(int p_id) { - ERR_FAIL_COND(!navmesh_map.has(p_id)); + ERR_FAIL_COND_MSG(!navmesh_map.has(p_id), "Trying to remove nonexisting navmesh with id: " + itos(p_id)); _navmesh_unlink(p_id); navmesh_map.erase(p_id); } diff --git a/scene/3d/navigation_mesh.cpp b/scene/3d/navigation_mesh.cpp index f82543b789..496dc4b411 100644 --- a/scene/3d/navigation_mesh.cpp +++ b/scene/3d/navigation_mesh.cpp @@ -108,6 +108,24 @@ bool NavigationMesh::get_collision_mask_bit(int p_bit) const { return get_collision_mask() & (1 << p_bit); } +void NavigationMesh::set_source_geometry_mode(int p_geometry_mode) { + ERR_FAIL_INDEX(p_geometry_mode, SOURCE_GEOMETRY_MAX); + source_geometry_mode = static_cast<SourceGeometryMode>(p_geometry_mode); + _change_notify(); +} + +int NavigationMesh::get_source_geometry_mode() const { + return source_geometry_mode; +} + +void NavigationMesh::set_source_group_name(StringName p_group_name) { + source_group_name = p_group_name; +} + +StringName NavigationMesh::get_source_group_name() const { + return source_group_name; +} + void NavigationMesh::set_cell_size(float p_value) { cell_size = p_value; } @@ -387,6 +405,12 @@ void NavigationMesh::_bind_methods() { ClassDB::bind_method(D_METHOD("set_collision_mask_bit", "bit", "value"), &NavigationMesh::set_collision_mask_bit); ClassDB::bind_method(D_METHOD("get_collision_mask_bit", "bit"), &NavigationMesh::get_collision_mask_bit); + ClassDB::bind_method(D_METHOD("set_source_geometry_mode", "mask"), &NavigationMesh::set_source_geometry_mode); + ClassDB::bind_method(D_METHOD("get_source_geometry_mode"), &NavigationMesh::get_source_geometry_mode); + + ClassDB::bind_method(D_METHOD("set_source_group_name", "mask"), &NavigationMesh::set_source_group_name); + ClassDB::bind_method(D_METHOD("get_source_group_name"), &NavigationMesh::get_source_group_name); + ClassDB::bind_method(D_METHOD("set_cell_size", "cell_size"), &NavigationMesh::set_cell_size); ClassDB::bind_method(D_METHOD("get_cell_size"), &NavigationMesh::get_cell_size); @@ -462,6 +486,8 @@ void NavigationMesh::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::INT, "sample_partition_type/sample_partition_type", PROPERTY_HINT_ENUM, "Watershed,Monotone,Layers"), "set_sample_partition_type", "get_sample_partition_type"); ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry/parsed_geometry_type", PROPERTY_HINT_ENUM, "Mesh Instances,Static Colliders,Both"), "set_parsed_geometry_type", "get_parsed_geometry_type"); ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry/collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "geometry/source_geometry_mode", PROPERTY_HINT_ENUM, "Navmesh Children, Group With Children, Group Explicit"), "set_source_geometry_mode", "get_source_geometry_mode"); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "geometry/source_group_name"), "set_source_group_name", "get_source_group_name"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "cell/size", PROPERTY_HINT_RANGE, "0.1,1.0,0.01,or_greater"), "set_cell_size", "get_cell_size"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "cell/height", PROPERTY_HINT_RANGE, "0.1,1.0,0.01,or_greater"), "set_cell_height", "get_cell_height"); @@ -489,6 +515,13 @@ void NavigationMesh::_validate_property(PropertyInfo &property) const { return; } } + + if (property.name == "geometry/source_group_name") { + if (source_geometry_mode == SOURCE_GEOMETRY_NAVMESH_CHILDREN) { + property.usage = 0; + return; + } + } } NavigationMesh::NavigationMesh() { @@ -509,6 +542,8 @@ NavigationMesh::NavigationMesh() { partition_type = SAMPLE_PARTITION_WATERSHED; parsed_geometry_type = PARSED_GEOMETRY_MESH_INSTANCES; collision_mask = 0xFFFFFFFF; + source_geometry_mode = SOURCE_GEOMETRY_NAVMESH_CHILDREN; + source_group_name = "navmesh"; filter_low_hanging_obstacles = false; filter_ledge_spans = false; filter_walkable_low_height_spans = false; diff --git a/scene/3d/navigation_mesh.h b/scene/3d/navigation_mesh.h index 5fbf3998ff..d5de653e40 100644 --- a/scene/3d/navigation_mesh.h +++ b/scene/3d/navigation_mesh.h @@ -77,6 +77,13 @@ public: PARSED_GEOMETRY_MAX }; + enum SourceGeometryMode { + SOURCE_GEOMETRY_NAVMESH_CHILDREN = 0, + SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN, + SOURCE_GEOMETRY_GROUPS_EXPLICIT, + SOURCE_GEOMETRY_MAX + }; + protected: float cell_size; float cell_height; @@ -96,6 +103,9 @@ protected: ParsedGeometryType parsed_geometry_type; uint32_t collision_mask; + SourceGeometryMode source_geometry_mode; + StringName source_group_name; + bool filter_low_hanging_obstacles; bool filter_ledge_spans; bool filter_walkable_low_height_spans; @@ -114,6 +124,12 @@ public: void set_collision_mask_bit(int p_bit, bool p_value); bool get_collision_mask_bit(int p_bit) const; + void set_source_geometry_mode(int p_geometry_mode); + int get_source_geometry_mode() const; + + void set_source_group_name(StringName p_group_name); + StringName get_source_group_name() const; + void set_cell_size(float p_value); float get_cell_size() const; diff --git a/scene/3d/particles.cpp b/scene/3d/particles.cpp index a6ccdb5791..241eb7d1ca 100644 --- a/scene/3d/particles.cpp +++ b/scene/3d/particles.cpp @@ -57,13 +57,13 @@ void Particles::set_emitting(bool p_emitting) { void Particles::set_amount(int p_amount) { - ERR_FAIL_COND(p_amount < 1); + ERR_FAIL_COND_MSG(p_amount < 1, "Amount of particles cannot be smaller than 1."); amount = p_amount; VS::get_singleton()->particles_set_amount(particles, amount); } void Particles::set_lifetime(float p_lifetime) { - ERR_FAIL_COND(p_lifetime <= 0); + ERR_FAIL_COND_MSG(p_lifetime <= 0, "Particles lifetime must be greater than 0."); lifetime = p_lifetime; VS::get_singleton()->particles_set_lifetime(particles, lifetime); } diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 0756be5fc8..a107c3bf7a 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -188,7 +188,7 @@ void StaticBody::set_friction(real_t p_friction) { WARN_DEPRECATED_MSG("The method set_friction has been deprecated and will be removed in the future, use physics material instead."); - ERR_FAIL_COND(p_friction < 0 || p_friction > 1); + ERR_FAIL_COND_MSG(p_friction < 0 || p_friction > 1, "Friction must be between 0 and 1."); if (physics_material_override.is_null()) { physics_material_override.instance(); @@ -216,7 +216,7 @@ void StaticBody::set_bounce(real_t p_bounce) { WARN_DEPRECATED_MSG("The method set_bounce has been deprecated and will be removed in the future, use physics material instead."); - ERR_FAIL_COND(p_bounce < 0 || p_bounce > 1); + ERR_FAIL_COND_MSG(p_bounce < 0 || p_bounce > 1, "Bounce must be between 0 and 1."); if (physics_material_override.is_null()) { physics_material_override.instance(); @@ -1137,7 +1137,7 @@ bool KinematicBody::move_and_collide(const Vector3 &p_motion, bool p_infinite_in return colliding; } -//so, if you pass 45 as limit, avoid numerical precision erros when angle is 45. +//so, if you pass 45 as limit, avoid numerical precision errors when angle is 45. #define FLOOR_ANGLE_THRESHOLD 0.01 Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Vector3 &p_floor_direction, bool p_stop_on_slope, int p_max_slides, float p_floor_max_angle, bool p_infinite_inertia) { @@ -1201,7 +1201,7 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve if (p_stop_on_slope) { if ((lv_n + p_floor_direction).length() < 0.01 && collision.travel.length() < 1) { Transform gt = get_global_transform(); - gt.origin -= collision.travel; + gt.origin -= collision.travel.slide(p_floor_direction); set_global_transform(gt); return Vector3(); } @@ -1265,7 +1265,7 @@ Vector3 KinematicBody::move_and_slide_with_snap(const Vector3 &p_linear_velocity if (p_stop_on_slope) { // move and collide may stray the object a bit because of pre un-stucking, // so only ensure that motion happens on floor direction in this case. - col.travel = p_floor_direction * p_floor_direction.dot(col.travel); + col.travel = col.travel.project(p_floor_direction); } } else { apply = false; //snapped with floor direction, but did not snap to a floor, do not snap. @@ -2182,7 +2182,7 @@ void PhysicalBone::_notification(int p_what) { void PhysicalBone::_direct_state_changed(Object *p_state) { - if (!simulate_physics) { + if (!simulate_physics || !_internal_simulate_physics) { return; } @@ -2205,7 +2205,7 @@ void PhysicalBone::_direct_state_changed(Object *p_state) { // Update skeleton if (parent_skeleton) { if (-1 != bone_id) { - parent_skeleton->set_bone_global_pose(bone_id, parent_skeleton->get_global_transform().affine_inverse() * (global_transform * body_offset_inverse)); + parent_skeleton->set_bone_global_pose_override(bone_id, parent_skeleton->get_global_transform().affine_inverse() * (global_transform * body_offset_inverse), 1.0, true); } } } @@ -2716,7 +2716,6 @@ void PhysicalBone::_start_physics_simulation() { PhysicsServer::get_singleton()->body_set_collision_layer(get_rid(), get_collision_layer()); PhysicsServer::get_singleton()->body_set_collision_mask(get_rid(), get_collision_mask()); PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(), this, "_direct_state_changed"); - parent_skeleton->set_bone_ignore_animation(bone_id, true); _internal_simulate_physics = true; } @@ -2728,6 +2727,6 @@ void PhysicalBone::_stop_physics_simulation() { PhysicsServer::get_singleton()->body_set_collision_layer(get_rid(), 0); PhysicsServer::get_singleton()->body_set_collision_mask(get_rid(), 0); PhysicsServer::get_singleton()->body_set_force_integration_callback(get_rid(), NULL, ""); - parent_skeleton->set_bone_ignore_animation(bone_id, false); + parent_skeleton->set_bone_global_pose_override(bone_id, Transform(), 0.0, false); _internal_simulate_physics = false; } diff --git a/scene/3d/skeleton.cpp b/scene/3d/skeleton.cpp index e192e040f2..ae79b4eebf 100644 --- a/scene/3d/skeleton.cpp +++ b/scene/3d/skeleton.cpp @@ -36,6 +36,34 @@ #include "scene/3d/physics_body.h" #include "scene/resources/surface_tool.h" +void SkinReference::_skin_changed() { + if (skeleton_node) { + skeleton_node->_make_dirty(); + } +} + +void SkinReference::_bind_methods() { + ClassDB::bind_method(D_METHOD("_skin_changed"), &SkinReference::_skin_changed); + ClassDB::bind_method(D_METHOD("get_skeleton"), &SkinReference::get_skeleton); + ClassDB::bind_method(D_METHOD("get_skin"), &SkinReference::get_skin); +} + +RID SkinReference::get_skeleton() const { + return skeleton; +} + +Ref<Skin> SkinReference::get_skin() const { + return skin; +} + +SkinReference::~SkinReference() { + if (skeleton_node) { + skeleton_node->skin_bindings.erase(this); + } + + VS::get_singleton()->free(skeleton); +} + bool Skeleton::_set(const StringName &p_path, const Variant &p_value) { String path = p_path; @@ -196,110 +224,82 @@ void Skeleton::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_ENTER_WORLD: { - - VS::get_singleton()->skeleton_set_world_transform(skeleton, use_bones_in_world_transform, get_global_transform()); - - } break; - case NOTIFICATION_EXIT_WORLD: { - - } break; - case NOTIFICATION_TRANSFORM_CHANGED: { - - VS::get_singleton()->skeleton_set_world_transform(skeleton, use_bones_in_world_transform, get_global_transform()); - } break; case NOTIFICATION_UPDATE_SKELETON: { VisualServer *vs = VisualServer::get_singleton(); Bone *bonesptr = bones.ptrw(); int len = bones.size(); - vs->skeleton_allocate(skeleton, len); // if same size, nothing really happens - _update_process_order(); const int *order = process_order.ptr(); - // pose changed, rebuild cache of inverses - if (rest_global_inverse_dirty) { - - // calculate global rests and invert them - for (int i = 0; i < len; i++) { - Bone &b = bonesptr[order[i]]; - if (b.parent >= 0) - b.rest_global_inverse = bonesptr[b.parent].rest_global_inverse * b.rest; - else - b.rest_global_inverse = b.rest; - } - for (int i = 0; i < len; i++) { - Bone &b = bonesptr[order[i]]; - b.rest_global_inverse.affine_invert(); - } - - rest_global_inverse_dirty = false; - } - for (int i = 0; i < len; i++) { Bone &b = bonesptr[order[i]]; - if (b.disable_rest) { - if (b.enabled) { - - Transform pose = b.pose; - if (b.custom_pose_enable) { + if (b.global_pose_override_amount >= 0.999) { + b.pose_global = b.global_pose_override; + } else { + if (b.disable_rest) { + if (b.enabled) { - pose = b.custom_pose * pose; - } + Transform pose = b.pose; + if (b.custom_pose_enable) { + pose = b.custom_pose * pose; + } + if (b.parent >= 0) { - if (b.parent >= 0) { + b.pose_global = bonesptr[b.parent].pose_global * pose; + } else { - b.pose_global = bonesptr[b.parent].pose_global * pose; + b.pose_global = pose; + } } else { - b.pose_global = pose; - } - } else { - - if (b.parent >= 0) { + if (b.parent >= 0) { - b.pose_global = bonesptr[b.parent].pose_global; - } else { + b.pose_global = bonesptr[b.parent].pose_global; + } else { - b.pose_global = Transform(); + b.pose_global = Transform(); + } } - } - - } else { - if (b.enabled) { - Transform pose = b.pose; - if (b.custom_pose_enable) { + } else { + if (b.enabled) { - pose = b.custom_pose * pose; - } + Transform pose = b.pose; + if (b.custom_pose_enable) { + pose = b.custom_pose * pose; + } + if (b.parent >= 0) { - if (b.parent >= 0) { + b.pose_global = bonesptr[b.parent].pose_global * (b.rest * pose); + } else { - b.pose_global = bonesptr[b.parent].pose_global * (b.rest * pose); + b.pose_global = b.rest * pose; + } } else { - b.pose_global = b.rest * pose; - } - } else { - - if (b.parent >= 0) { + if (b.parent >= 0) { - b.pose_global = bonesptr[b.parent].pose_global * b.rest; - } else { + b.pose_global = bonesptr[b.parent].pose_global * b.rest; + } else { - b.pose_global = b.rest; + b.pose_global = b.rest; + } } } + + if (b.global_pose_override_amount >= CMP_EPSILON) { + b.pose_global = b.pose_global.interpolate_with(b.global_pose_override, b.global_pose_override_amount); + } } - b.transform_final = b.pose_global * b.rest_global_inverse; - vs->skeleton_bone_set_transform(skeleton, order[i], b.transform_final); + if (b.global_pose_override_reset) { + b.global_pose_override_amount = 0.0; + } for (List<uint32_t>::Element *E = b.nodes_bound.front(); E; E = E->next()) { @@ -311,28 +311,37 @@ void Skeleton::_notification(int p_what) { } } + //update skins + for (Set<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { + + const Skin *skin = E->get()->skin.operator->(); + RID skeleton = E->get()->skeleton; + uint32_t bind_count = skin->get_bind_count(); + + if (E->get()->bind_count != bind_count) { + VS::get_singleton()->skeleton_allocate(skeleton, bind_count); + E->get()->bind_count = bind_count; + } + + for (uint32_t i = 0; i < bind_count; i++) { + uint32_t bone_index = skin->get_bind_bone(i); + ERR_CONTINUE(bone_index >= (uint32_t)len); + vs->skeleton_bone_set_transform(skeleton, i, bonesptr[bone_index].pose_global * skin->get_bind_pose(i)); + } + } + dirty = false; } break; } } -Transform Skeleton::get_bone_transform(int p_bone) const { - ERR_FAIL_INDEX_V(p_bone, bones.size(), Transform()); - if (dirty) - const_cast<Skeleton *>(this)->notification(NOTIFICATION_UPDATE_SKELETON); - return bones[p_bone].pose_global * bones[p_bone].rest_global_inverse; -} - -void Skeleton::set_bone_global_pose(int p_bone, const Transform &p_pose) { +void Skeleton::set_bone_global_pose_override(int p_bone, const Transform &p_pose, float p_amount, bool p_persistent) { ERR_FAIL_INDEX(p_bone, bones.size()); - if (bones[p_bone].parent == -1) { - - set_bone_pose(p_bone, bones[p_bone].rest_global_inverse * p_pose); //fast - } else { - - set_bone_pose(p_bone, bones[p_bone].rest.affine_inverse() * (get_bone_global_pose(bones[p_bone].parent).affine_inverse() * p_pose)); //slow - } + bones.write[p_bone].global_pose_override_amount = p_amount; + bones.write[p_bone].global_pose_override = p_pose; + bones.write[p_bone].global_pose_override_reset = !p_persistent; + _make_dirty(); } Transform Skeleton::get_bone_global_pose(int p_bone) const { @@ -343,11 +352,6 @@ Transform Skeleton::get_bone_global_pose(int p_bone) const { return bones[p_bone].pose_global; } -RID Skeleton::get_skeleton() const { - - return skeleton; -} - // skeleton creation api void Skeleton::add_bone(const String &p_name) { @@ -362,8 +366,6 @@ void Skeleton::add_bone(const String &p_name) { b.name = p_name; bones.push_back(b); process_order_dirty = true; - - rest_global_inverse_dirty = true; _make_dirty(); update_gizmo(); } @@ -408,7 +410,6 @@ void Skeleton::set_bone_parent(int p_bone, int p_parent) { ERR_FAIL_COND(p_parent != -1 && (p_parent < 0)); bones.write[p_bone].parent = p_parent; - rest_global_inverse_dirty = true; process_order_dirty = true; _make_dirty(); } @@ -426,23 +427,11 @@ void Skeleton::unparent_bone_and_rest(int p_bone) { } bones.write[p_bone].parent = -1; - bones.write[p_bone].rest_global_inverse = bones[p_bone].rest.affine_inverse(); //same thing process_order_dirty = true; _make_dirty(); } -void Skeleton::set_bone_ignore_animation(int p_bone, bool p_ignore) { - ERR_FAIL_INDEX(p_bone, bones.size()); - bones.write[p_bone].ignore_animation = p_ignore; -} - -bool Skeleton::is_bone_ignore_animation(int p_bone) const { - - ERR_FAIL_INDEX_V(p_bone, bones.size(), false); - return bones[p_bone].ignore_animation; -} - void Skeleton::set_bone_disable_rest(int p_bone, bool p_disable) { ERR_FAIL_INDEX(p_bone, bones.size()); @@ -467,7 +456,6 @@ void Skeleton::set_bone_rest(int p_bone, const Transform &p_rest) { ERR_FAIL_INDEX(p_bone, bones.size()); bones.write[p_bone].rest = p_rest; - rest_global_inverse_dirty = true; _make_dirty(); } Transform Skeleton::get_bone_rest(int p_bone) const { @@ -482,7 +470,6 @@ void Skeleton::set_bone_enabled(int p_bone, bool p_enabled) { ERR_FAIL_INDEX(p_bone, bones.size()); bones.write[p_bone].enabled = p_enabled; - rest_global_inverse_dirty = true; _make_dirty(); } bool Skeleton::is_bone_enabled(int p_bone) const { @@ -529,7 +516,6 @@ void Skeleton::get_bound_child_nodes_to_bone(int p_bone, List<Node *> *p_bound) void Skeleton::clear_bones() { bones.clear(); - rest_global_inverse_dirty = true; process_order_dirty = true; _make_dirty(); @@ -747,14 +733,67 @@ void Skeleton::physical_bones_remove_collision_exception(RID p_exception) { #endif // _3D_DISABLED -void Skeleton::set_use_bones_in_world_transform(bool p_enable) { - use_bones_in_world_transform = p_enable; - if (is_inside_tree()) { - VS::get_singleton()->skeleton_set_world_transform(skeleton, use_bones_in_world_transform, get_global_transform()); - } +void Skeleton::_skin_changed() { + _make_dirty(); } -bool Skeleton::is_using_bones_in_world_transform() const { - return use_bones_in_world_transform; + +Ref<SkinReference> Skeleton::register_skin(const Ref<Skin> &p_skin) { + + for (Set<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { + if (E->get()->skin == p_skin) { + return Ref<SkinReference>(E->get()); + } + } + + Ref<Skin> skin = p_skin; + + if (skin.is_null()) { + //need to create one from existing code, this is for compatibility only + //when skeletons did not support skins. It is also used by gizmo + //to display the skeleton. + + skin.instance(); + skin->set_bind_count(bones.size()); + _update_process_order(); //just in case + + // pose changed, rebuild cache of inverses + const Bone *bonesptr = bones.ptr(); + int len = bones.size(); + const int *order = process_order.ptr(); + + // calculate global rests and invert them + for (int i = 0; i < len; i++) { + const Bone &b = bonesptr[order[i]]; + if (b.parent >= 0) { + skin->set_bind_pose(order[i], skin->get_bind_pose(b.parent) * b.rest); + } else { + skin->set_bind_pose(order[i], b.rest); + } + } + + for (int i = 0; i < len; i++) { + //the inverse is what is actually required + skin->set_bind_bone(i, i); + skin->set_bind_pose(i, skin->get_bind_pose(i).affine_inverse()); + } + } + + ERR_FAIL_COND_V(skin.is_null(), Ref<SkinReference>()); + + Ref<SkinReference> skin_ref; + skin_ref.instance(); + + skin_ref->skeleton_node = this; + skin_ref->bind_count = 0; + skin_ref->skeleton = VisualServer::get_singleton()->skeleton_create(); + skin_ref->skeleton_node = this; + skin_ref->skin = skin; + + skin_bindings.insert(skin_ref.operator->()); + + skin->connect("changed", skin_ref.operator->(), "_skin_changed"); + _make_dirty(); + return skin_ref; } void Skeleton::_bind_methods() { @@ -773,6 +812,8 @@ void Skeleton::_bind_methods() { ClassDB::bind_method(D_METHOD("get_bone_rest", "bone_idx"), &Skeleton::get_bone_rest); ClassDB::bind_method(D_METHOD("set_bone_rest", "bone_idx", "rest"), &Skeleton::set_bone_rest); + ClassDB::bind_method(D_METHOD("register_skin", "skin"), &Skeleton::register_skin); + ClassDB::bind_method(D_METHOD("localize_rests"), &Skeleton::localize_rests); ClassDB::bind_method(D_METHOD("set_bone_disable_rest", "bone_idx", "disable"), &Skeleton::set_bone_disable_rest); @@ -787,17 +828,12 @@ void Skeleton::_bind_methods() { ClassDB::bind_method(D_METHOD("get_bone_pose", "bone_idx"), &Skeleton::get_bone_pose); ClassDB::bind_method(D_METHOD("set_bone_pose", "bone_idx", "pose"), &Skeleton::set_bone_pose); - ClassDB::bind_method(D_METHOD("set_bone_global_pose", "bone_idx", "pose"), &Skeleton::set_bone_global_pose); + ClassDB::bind_method(D_METHOD("set_bone_global_pose_override", "bone_idx", "pose", "amount", "persistent"), &Skeleton::set_bone_global_pose_override, DEFVAL(false)); ClassDB::bind_method(D_METHOD("get_bone_global_pose", "bone_idx"), &Skeleton::get_bone_global_pose); ClassDB::bind_method(D_METHOD("get_bone_custom_pose", "bone_idx"), &Skeleton::get_bone_custom_pose); ClassDB::bind_method(D_METHOD("set_bone_custom_pose", "bone_idx", "custom_pose"), &Skeleton::set_bone_custom_pose); - ClassDB::bind_method(D_METHOD("get_bone_transform", "bone_idx"), &Skeleton::get_bone_transform); - - ClassDB::bind_method(D_METHOD("set_use_bones_in_world_transform", "enable"), &Skeleton::set_use_bones_in_world_transform); - ClassDB::bind_method(D_METHOD("is_using_bones_in_world_transform"), &Skeleton::is_using_bones_in_world_transform); - #ifndef _3D_DISABLED ClassDB::bind_method(D_METHOD("physical_bones_stop_simulation"), &Skeleton::physical_bones_stop_simulation); @@ -807,22 +843,19 @@ void Skeleton::_bind_methods() { #endif // _3D_DISABLED - ClassDB::bind_method(D_METHOD("set_bone_ignore_animation", "bone", "ignore"), &Skeleton::set_bone_ignore_animation); - - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "bones_in_world_transform"), "set_use_bones_in_world_transform", "is_using_bones_in_world_transform"); BIND_CONSTANT(NOTIFICATION_UPDATE_SKELETON); } Skeleton::Skeleton() { - rest_global_inverse_dirty = true; dirty = false; process_order_dirty = true; - skeleton = VisualServer::get_singleton()->skeleton_create(); - set_notify_transform(true); - use_bones_in_world_transform = false; } Skeleton::~Skeleton() { - VisualServer::get_singleton()->free(skeleton); + + //some skins may remain bound + for (Set<SkinReference *>::Element *E = skin_bindings.front(); E; E = E->next()) { + E->get()->skeleton_node = nullptr; + } } diff --git a/scene/3d/skeleton.h b/scene/3d/skeleton.h index 5b55dffbc8..824d9567fa 100644 --- a/scene/3d/skeleton.h +++ b/scene/3d/skeleton.h @@ -33,6 +33,7 @@ #include "core/rid.h" #include "scene/3d/spatial.h" +#include "scene/resources/skin.h" #ifndef _3D_DISABLED typedef int BoneId; @@ -40,10 +41,38 @@ typedef int BoneId; class PhysicalBone; #endif // _3D_DISABLED +class Skeleton; + +class SkinReference : public Reference { + GDCLASS(SkinReference, Reference) + friend class Skeleton; + + Skeleton *skeleton_node; + RID skeleton; + Ref<Skin> skin; + uint32_t bind_count = 0; + void _skin_changed(); + +protected: + static void _bind_methods(); + +public: + RID get_skeleton() const; + Ref<Skin> get_skin() const; + ~SkinReference(); +}; + class Skeleton : public Spatial { GDCLASS(Skeleton, Spatial); +private: + friend class SkinReference; + + Set<SkinReference *> skin_bindings; + + void _skin_changed(); + struct Bone { String name; @@ -52,11 +81,8 @@ class Skeleton : public Spatial { int parent; int sort_index; //used for re-sorting process order - bool ignore_animation; - bool disable_rest; Transform rest; - Transform rest_global_inverse; Transform pose; Transform pose_global; @@ -64,7 +90,9 @@ class Skeleton : public Spatial { bool custom_pose_enable; Transform custom_pose; - Transform transform_final; + float global_pose_override_amount; + bool global_pose_override_reset; + Transform global_pose_override; #ifndef _3D_DISABLED PhysicalBone *physical_bone; @@ -76,9 +104,10 @@ class Skeleton : public Spatial { Bone() { parent = -1; enabled = true; - ignore_animation = false; - custom_pose_enable = false; disable_rest = false; + custom_pose_enable = false; + global_pose_override_amount = 0; + global_pose_override_reset = false; #ifndef _3D_DISABLED physical_bone = NULL; cache_parent_physical_bone = NULL; @@ -86,17 +115,12 @@ class Skeleton : public Spatial { } }; - bool rest_global_inverse_dirty; - Vector<Bone> bones; Vector<int> process_order; bool process_order_dirty; - RID skeleton; - void _make_dirty(); bool dirty; - bool use_bones_in_world_transform; // bind helpers Array _get_bound_child_nodes_to_bone(int p_bone) const { @@ -127,8 +151,6 @@ public: NOTIFICATION_UPDATE_SKELETON = 50 }; - RID get_skeleton() const; - // skeleton creation api void add_bone(const String &p_name); int find_bone(const String &p_name) const; @@ -141,9 +163,6 @@ public: void unparent_bone_and_rest(int p_bone); - void set_bone_ignore_animation(int p_bone, bool p_ignore); - bool is_bone_ignore_animation(int p_bone) const; - void set_bone_disable_rest(int p_bone, bool p_disable); bool is_bone_rest_disabled(int p_bone) const; @@ -151,10 +170,9 @@ public: void set_bone_rest(int p_bone, const Transform &p_rest); Transform get_bone_rest(int p_bone) const; - Transform get_bone_transform(int p_bone) const; Transform get_bone_global_pose(int p_bone) const; - void set_bone_global_pose(int p_bone, const Transform &p_pose); + void set_bone_global_pose_override(int p_bone, const Transform &p_pose, float p_amount, bool p_persistent = false); void set_bone_enabled(int p_bone, bool p_enabled); bool is_bone_enabled(int p_bone) const; @@ -176,8 +194,7 @@ public: void localize_rests(); // used for loaders and tools int get_process_order(int p_idx); - void set_use_bones_in_world_transform(bool p_enable); - bool is_using_bones_in_world_transform() const; + Ref<SkinReference> register_skin(const Ref<Skin> &p_skin); #ifndef _3D_DISABLED // Physical bone API diff --git a/scene/3d/soft_body.cpp b/scene/3d/soft_body.cpp index 6c3949a0a8..6883da7f6d 100644 --- a/scene/3d/soft_body.cpp +++ b/scene/3d/soft_body.cpp @@ -115,7 +115,7 @@ SoftBody::PinnedPoint SoftBody::PinnedPoint::operator=(const PinnedPoint &obj) { void SoftBody::_update_pickable() { if (!is_inside_tree()) return; - bool pickable = ray_pickable && is_inside_tree() && is_visible_in_tree(); + bool pickable = ray_pickable && is_visible_in_tree(); PhysicsServer::get_singleton()->soft_body_set_ray_pickable(physics_rid, pickable); } @@ -395,6 +395,8 @@ void SoftBody::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::REAL, "damping_coefficient", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_damping_coefficient", "get_damping_coefficient"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "drag_coefficient", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_drag_coefficient", "get_drag_coefficient"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "pose_matching_coefficient", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_pose_matching_coefficient", "get_pose_matching_coefficient"); + + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ray_pickable"), "set_ray_pickable", "is_ray_pickable"); } String SoftBody::get_configuration_warning() const { @@ -460,7 +462,9 @@ void SoftBody::update_physics_server() { } else { PhysicsServer::get_singleton()->soft_body_set_mesh(physics_rid, NULL); - VS::get_singleton()->disconnect("frame_pre_draw", this, "_draw_soft_mesh"); + if (VS::get_singleton()->is_connected("frame_pre_draw", this, "_draw_soft_mesh")) { + VS::get_singleton()->disconnect("frame_pre_draw", this, "_draw_soft_mesh"); + } } } @@ -698,7 +702,8 @@ SoftBody::SoftBody() : collision_mask(1), collision_layer(1), simulation_started(false), - pinned_points_cache_dirty(true) { + pinned_points_cache_dirty(true), + ray_pickable(true) { PhysicsServer::get_singleton()->body_attach_object_instance_id(physics_rid, get_instance_id()); //set_notify_transform(true); diff --git a/scene/3d/spatial.cpp b/scene/3d/spatial.cpp index df831f92ef..9a659ef4af 100644 --- a/scene/3d/spatial.cpp +++ b/scene/3d/spatial.cpp @@ -690,11 +690,10 @@ void Spatial::look_at_from_position(const Vector3 &p_pos, const Vector3 &p_targe Transform lookat; lookat.origin = p_pos; - Vector3 original_scale(get_global_transform().basis.get_scale()); + Vector3 original_scale(get_scale()); lookat = lookat.looking_at(p_target, p_up); - // as basis was normalized, we just need to apply original scale back - lookat.basis.scale(original_scale); set_global_transform(lookat); + set_scale(original_scale); } Vector3 Spatial::to_local(Vector3 p_global) const { diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp index a9dacc442c..adcd80b0ab 100644 --- a/scene/3d/sprite_3d.cpp +++ b/scene/3d/sprite_3d.cpp @@ -577,9 +577,8 @@ void Sprite3D::set_frame(int p_frame) { ERR_FAIL_INDEX(p_frame, int64_t(vframes) * hframes); - if (frame != p_frame) + frame = p_frame; - frame = p_frame; _queue_update(); _change_notify("frame"); @@ -593,8 +592,8 @@ int Sprite3D::get_frame() const { } void Sprite3D::set_frame_coords(const Vector2 &p_coord) { - ERR_FAIL_INDEX(int(p_coord.x), vframes); - ERR_FAIL_INDEX(int(p_coord.y), hframes); + ERR_FAIL_INDEX(int(p_coord.x), hframes); + ERR_FAIL_INDEX(int(p_coord.y), vframes); set_frame(int(p_coord.y) * hframes + int(p_coord.x)); } @@ -663,6 +662,10 @@ void Sprite3D::_validate_property(PropertyInfo &property) const { property.hint_string = "0," + itos(vframes * hframes - 1) + ",1"; property.usage |= PROPERTY_USAGE_KEYING_INCREMENTS; } + + if (property.name == "frame_coords") { + property.usage |= PROPERTY_USAGE_KEYING_INCREMENTS; + } } void Sprite3D::_bind_methods() { diff --git a/scene/animation/animation_blend_space_1d.cpp b/scene/animation/animation_blend_space_1d.cpp index 416a291da1..7fe544eaab 100644 --- a/scene/animation/animation_blend_space_1d.cpp +++ b/scene/animation/animation_blend_space_1d.cpp @@ -157,6 +157,7 @@ Ref<AnimationRootNode> AnimationNodeBlendSpace1D::get_blend_point_node(int p_poi void AnimationNodeBlendSpace1D::remove_blend_point(int p_point) { ERR_FAIL_INDEX(p_point, blend_points_used); + ERR_FAIL_COND(blend_points[p_point].node.is_null()); blend_points[p_point].node->disconnect("tree_changed", this, "_tree_changed"); for (int i = p_point; i < blend_points_used - 1; i++) { diff --git a/scene/animation/animation_blend_space_2d.cpp b/scene/animation/animation_blend_space_2d.cpp index 75031f0149..b04eefbe31 100644 --- a/scene/animation/animation_blend_space_2d.cpp +++ b/scene/animation/animation_blend_space_2d.cpp @@ -113,6 +113,7 @@ Ref<AnimationRootNode> AnimationNodeBlendSpace2D::get_blend_point_node(int p_poi void AnimationNodeBlendSpace2D::remove_blend_point(int p_point) { ERR_FAIL_INDEX(p_point, blend_points_used); + ERR_FAIL_COND(blend_points[p_point].node.is_null()); blend_points[p_point].node->disconnect("tree_changed", this, "_tree_changed"); for (int i = 0; i < triangles.size(); i++) { diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp index 20a09696e1..6f67d01a1c 100644 --- a/scene/animation/animation_blend_tree.cpp +++ b/scene/animation/animation_blend_tree.cpp @@ -350,8 +350,8 @@ void AnimationNodeOneShot::_bind_methods() { ADD_GROUP("", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sync"), "set_use_sync", "is_using_sync"); - BIND_ENUM_CONSTANT(MIX_MODE_BLEND) - BIND_ENUM_CONSTANT(MIX_MODE_ADD) + BIND_ENUM_CONSTANT(MIX_MODE_BLEND); + BIND_ENUM_CONSTANT(MIX_MODE_ADD); } AnimationNodeOneShot::AnimationNodeOneShot() { diff --git a/scene/animation/animation_cache.cpp b/scene/animation/animation_cache.cpp index e26bd5b5a1..5956609244 100644 --- a/scene/animation/animation_cache.cpp +++ b/scene/animation/animation_cache.cpp @@ -80,7 +80,7 @@ void AnimationCache::_update_cache() { if (!node) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(!node, "Invalid track path in animation: " + np + "."); + ERR_CONTINUE_MSG(!node, "Invalid track path in animation '" + np + "'."); } Path path; @@ -91,7 +91,7 @@ void AnimationCache::_update_cache() { if (np.get_subname_count() > 1) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(animation->track_get_type(i) == Animation::TYPE_TRANSFORM, "Transform tracks can't have a subpath: " + np + "."); + ERR_CONTINUE_MSG(animation->track_get_type(i) == Animation::TYPE_TRANSFORM, "Transform tracks can't have a subpath '" + np + "'."); } Spatial *sp = Object::cast_to<Spatial>(node); @@ -99,7 +99,7 @@ void AnimationCache::_update_cache() { if (!sp) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(!sp, "Transform track not of type Spatial: " + np + "."); + ERR_CONTINUE_MSG(!sp, "Transform track not of type Spatial '" + np + "'."); } if (np.get_subname_count() == 1) { @@ -110,13 +110,13 @@ void AnimationCache::_update_cache() { if (!sk) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(!sk, "Property defined in Transform track, but not a Skeleton!: " + np + "."); + ERR_CONTINUE_MSG(!sk, "Property defined in Transform track, but not a Skeleton! '" + np + "'."); } int idx = sk->find_bone(ps); if (idx == -1) { path_cache.push_back(Path()); - ERR_CONTINUE_MSG(idx == -1, "Property defined in Transform track, but not a Skeleton Bone!: " + np + "."); + ERR_CONTINUE_MSG(idx == -1, "Property defined in Transform track, but not a Skeleton Bone! '" + np + "'."); } path.bone_idx = idx; diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp index 051f832882..f9bf129b59 100644 --- a/scene/animation/animation_player.cpp +++ b/scene/animation/animation_player.cpp @@ -256,7 +256,7 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim) { Skeleton *sk = Object::cast_to<Skeleton>(child); bone_idx = sk->find_bone(a->track_get_path(i).get_subname(0)); - if (bone_idx == -1 || sk->is_bone_ignore_animation(bone_idx)) { + if (bone_idx == -1) { continue; } @@ -1098,7 +1098,7 @@ void AnimationPlayer::get_animation_list(List<StringName> *p_animations) const { void AnimationPlayer::set_blend_time(const StringName &p_animation1, const StringName &p_animation2, float p_time) { - ERR_FAIL_COND(p_time < 0); + ERR_FAIL_COND_MSG(p_time < 0, "Blend time cannot be smaller than 0."); BlendKey bk; bk.from = p_animation1; diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp index bb7c400cfe..eb152bc41e 100644 --- a/scene/animation/animation_tree.cpp +++ b/scene/animation/animation_tree.cpp @@ -622,7 +622,7 @@ bool AnimationTree::_update_caches(AnimationPlayer *player) { Skeleton *sk = Object::cast_to<Skeleton>(spatial); int bone_idx = sk->find_bone(path.get_subname(0)); - if (bone_idx != -1 && !sk->is_bone_ignore_animation(bone_idx)) { + if (bone_idx != -1) { track_xform->skeleton = sk; track_xform->bone_idx = bone_idx; diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index 8f6d53c21c..ba5936562a 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -820,11 +820,7 @@ void AnimationTreePlayer::_process_animation(float p_delta) { t.value = t.object->get_indexed(t.subpath); t.value.zero(); - if (t.skeleton) { - t.skip = t.skeleton->is_bone_ignore_animation(t.bone_idx); - } else { - t.skip = false; - } + t.skip = false; } /* STEP 2 PROCESS ANIMATIONS */ diff --git a/scene/animation/skeleton_ik.cpp b/scene/animation/skeleton_ik.cpp index 7a1b10792b..4ec22cf3df 100644 --- a/scene/animation/skeleton_ik.cpp +++ b/scene/animation/skeleton_ik.cpp @@ -320,7 +320,7 @@ void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool ove new_bone_pose.basis = new_bone_pose.basis * p_task->chain.tips[0].end_effector->goal_transform.basis; } - p_task->skeleton->set_bone_global_pose(ci->bone, new_bone_pose); + p_task->skeleton->set_bone_global_pose_override(ci->bone, new_bone_pose, 1.0); if (!ci->children.empty()) ci = &ci->children.write[0]; diff --git a/scene/animation/tween.cpp b/scene/animation/tween.cpp index 0f7d4466c8..a7d936fcd3 100644 --- a/scene/animation/tween.cpp +++ b/scene/animation/tween.cpp @@ -191,7 +191,7 @@ void Tween::_notification(int p_what) { case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { // Are we processing during 'regular' time? if (tween_process_mode == TWEEN_PROCESS_IDLE) - // Do nothing since we whould only process during idle time + // Do nothing since we would only process during idle time break; // Should we update? @@ -281,7 +281,7 @@ void Tween::_bind_methods() { BIND_ENUM_CONSTANT(EASE_OUT_IN); } -Variant &Tween::_get_initial_val(InterpolateData &p_data) { +Variant Tween::_get_initial_val(const InterpolateData &p_data) const { // What type of data are we interpolating? switch (p_data.type) { @@ -299,7 +299,7 @@ Variant &Tween::_get_initial_val(InterpolateData &p_data) { ERR_FAIL_COND_V(object == NULL, p_data.initial_val); // Are we targeting a property or a method? - static Variant initial_val; + Variant initial_val; if (p_data.type == TARGETING_PROPERTY) { // Get the property from the target object bool valid = false; @@ -322,6 +322,41 @@ Variant &Tween::_get_initial_val(InterpolateData &p_data) { return p_data.delta_val; } +Variant Tween::_get_final_val(const InterpolateData &p_data) const { + switch (p_data.type) { + case FOLLOW_PROPERTY: + case FOLLOW_METHOD: { + // Get the object that is being followed + Object *target = ObjectDB::get_instance(p_data.target_id); + ERR_FAIL_COND_V(target == NULL, p_data.initial_val); + + // We want to figure out the final value + Variant final_val; + if (p_data.type == FOLLOW_PROPERTY) { + // Read the property as-is + bool valid = false; + final_val = target->get_indexed(p_data.target_key, &valid); + ERR_FAIL_COND_V(!valid, p_data.initial_val); + } else { + // We're looking at a method. Call the method on the target object + Variant::CallError error; + final_val = target->call(p_data.target_key[0], NULL, 0, error); + ERR_FAIL_COND_V(error.error != Variant::CallError::CALL_OK, p_data.initial_val); + } + + // If we're looking at an INT value, instead convert it to a REAL + // This is better for interpolation + if (final_val.get_type() == Variant::INT) final_val = final_val.operator real_t(); + + return final_val; + } + default: { + // If we're not following a final value/method, use the final value from the data + return p_data.final_val; + } + } +} + Variant &Tween::_get_delta_val(InterpolateData &p_data) { // What kind of data are we interpolating? @@ -384,7 +419,7 @@ Variant &Tween::_get_delta_val(InterpolateData &p_data) { Variant Tween::_run_equation(InterpolateData &p_data) { // Get the initial and delta values from the data - Variant &initial_val = _get_initial_val(p_data); + Variant initial_val = _get_initial_val(p_data); Variant &delta_val = _get_delta_val(p_data); Variant result; @@ -718,7 +753,8 @@ void Tween::_tween_process(float p_delta) { // Is the tween now finished? if (data.finish) { // Set it to the final value directly - _apply_tween_value(data, data.final_val); + Variant final_val = _get_final_val(data); + _apply_tween_value(data, final_val); // Mark the tween as completed and emit the signal data.elapsed = 0; diff --git a/scene/animation/tween.h b/scene/animation/tween.h index 64ce099ecd..574238f5c9 100644 --- a/scene/animation/tween.h +++ b/scene/animation/tween.h @@ -127,7 +127,8 @@ private: real_t _run_equation(TransitionType p_trans_type, EaseType p_ease_type, real_t t, real_t b, real_t c, real_t d); Variant &_get_delta_val(InterpolateData &p_data); - Variant &_get_initial_val(InterpolateData &p_data); + Variant _get_initial_val(const InterpolateData &p_data) const; + Variant _get_final_val(const InterpolateData &p_data) const; Variant _run_equation(InterpolateData &p_data); bool _calc_delta_val(const Variant &p_initial_val, const Variant &p_final_val, Variant &p_delta_val); bool _apply_tween_value(InterpolateData &p_data, Variant &value); diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp index 6dd9e401f6..96b62b97f9 100644 --- a/scene/gui/color_picker.cpp +++ b/scene/gui/color_picker.cpp @@ -35,8 +35,8 @@ #include "core/os/os.h" #ifdef TOOLS_ENABLED -#include "editor_scale.h" -#include "editor_settings.h" +#include "editor/editor_scale.h" +#include "editor/editor_settings.h" #endif #include "scene/main/viewport.h" @@ -396,11 +396,18 @@ void ColorPicker::_update_text_value() { } void ColorPicker::_sample_draw() { - Rect2 r = Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95)); + const Rect2 r = Rect2(Point2(), Size2(uv_edit->get_size().width, sample->get_size().height * 0.95)); + if (color.a < 1.0) { sample->draw_texture_rect(get_icon("preset_bg", "ColorPicker"), r, true); } + sample->draw_rect(r, color); + + if (color.r > 1 || color.g > 1 || color.b > 1) { + // Draw an indicator to denote that the color is "overbright" and can't be displayed accurately in the preview + sample->draw_texture(get_icon("overbright_indicator", "ColorPicker"), Point2()); + } } void ColorPicker::_hsv_draw(int p_which, Control *c) { @@ -894,10 +901,15 @@ void ColorPickerButton::_notification(int p_what) { switch (p_what) { case NOTIFICATION_DRAW: { - Ref<StyleBox> normal = get_stylebox("normal"); - Rect2 r = Rect2(normal->get_offset(), get_size() - normal->get_minimum_size()); + const Ref<StyleBox> normal = get_stylebox("normal"); + const Rect2 r = Rect2(normal->get_offset(), get_size() - normal->get_minimum_size()); draw_texture_rect(Control::get_icon("bg", "ColorPickerButton"), r, true); draw_rect(r, color); + + if (color.r > 1 || color.g > 1 || color.b > 1) { + // Draw an indicator to denote that the color is "overbright" and can't be displayed accurately in the preview + draw_texture(Control::get_icon("overbright_indicator", "ColorPicker"), normal->get_offset()); + } } break; case MainLoop::NOTIFICATION_WM_QUIT_REQUEST: { diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 174c2fce7d..8b4d5d4980 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -645,6 +645,7 @@ void Control::_notification(int p_notification) { } break; case NOTIFICATION_THEME_CHANGED: { + minimum_size_changed(); update(); } break; case NOTIFICATION_MODAL_CLOSE: { @@ -818,7 +819,7 @@ Size2 Control::get_minimum_size() const { Ref<Texture> Control::get_icon(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const Ref<Texture> *tex = data.icon_override.getptr(p_name); if (tex) @@ -860,7 +861,7 @@ Ref<Texture> Control::get_icon(const StringName &p_name, const StringName &p_typ } Ref<Shader> Control::get_shader(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const Ref<Shader> *sdr = data.shader_override.getptr(p_name); if (sdr) @@ -903,7 +904,7 @@ Ref<Shader> Control::get_shader(const StringName &p_name, const StringName &p_ty Ref<StyleBox> Control::get_stylebox(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const Ref<StyleBox> *style = data.style_override.getptr(p_name); if (style) return *style; @@ -949,7 +950,7 @@ Ref<StyleBox> Control::get_stylebox(const StringName &p_name, const StringName & } Ref<Font> Control::get_font(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const Ref<Font> *font = data.font_override.getptr(p_name); if (font) return *font; @@ -986,7 +987,7 @@ Ref<Font> Control::get_font(const StringName &p_name, const StringName &p_type) } Color Control::get_color(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const Color *color = data.color_override.getptr(p_name); if (color) return *color; @@ -1026,7 +1027,7 @@ Color Control::get_color(const StringName &p_name, const StringName &p_type) con int Control::get_constant(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { const int *constant = data.constant_override.getptr(p_name); if (constant) return *constant; @@ -1102,7 +1103,7 @@ bool Control::has_constant_override(const StringName &p_name) const { bool Control::has_icon(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_icon_override(p_name)) return true; } @@ -1141,7 +1142,7 @@ bool Control::has_icon(const StringName &p_name, const StringName &p_type) const bool Control::has_shader(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_shader_override(p_name)) return true; } @@ -1179,7 +1180,7 @@ bool Control::has_shader(const StringName &p_name, const StringName &p_type) con } bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_stylebox_override(p_name)) return true; } @@ -1217,7 +1218,7 @@ bool Control::has_stylebox(const StringName &p_name, const StringName &p_type) c } bool Control::has_font(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_font_override(p_name)) return true; } @@ -1256,7 +1257,7 @@ bool Control::has_font(const StringName &p_name, const StringName &p_type) const bool Control::has_color(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_color_override(p_name)) return true; } @@ -1295,7 +1296,7 @@ bool Control::has_color(const StringName &p_name, const StringName &p_type) cons bool Control::has_constant(const StringName &p_name, const StringName &p_type) const { - if (p_type == StringName() || p_type == "") { + if (p_type == StringName() || p_type == get_class_name()) { if (has_constant_override(p_name)) return true; } @@ -1411,6 +1412,9 @@ void Control::_size_changed() { } void Control::set_anchor(Margin p_margin, float p_anchor, bool p_keep_margin, bool p_push_opposite_anchor) { + + ERR_FAIL_INDEX((int)p_margin, 4); + Rect2 parent_rect = get_parent_anchorable_rect(); float parent_range = (p_margin == MARGIN_LEFT || p_margin == MARGIN_RIGHT) ? parent_rect.size.x : parent_rect.size.y; float previous_margin_pos = data.margin[p_margin] + data.anchor[p_margin] * parent_range; @@ -1455,6 +1459,9 @@ void Control::set_anchor_and_margin(Margin p_margin, float p_anchor, float p_pos } void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_margins) { + + ERR_FAIL_INDEX((int)p_preset, 16); + //Left switch (p_preset) { case PRESET_TOP_LEFT: @@ -1569,6 +1576,10 @@ void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_margins) { } void Control::set_margins_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) { + + ERR_FAIL_INDEX((int)p_preset, 16); + ERR_FAIL_INDEX((int)p_resize_mode, 4); + // Calculate the size if the node is not resized Size2 min_size = get_minimum_size(); Size2 new_size = get_size(); @@ -1703,6 +1714,8 @@ void Control::set_anchors_and_margins_preset(LayoutPreset p_preset, LayoutPreset float Control::get_anchor(Margin p_margin) const { + ERR_FAIL_INDEX_V(int(p_margin), 4, 0.0); + return data.anchor[p_margin]; } @@ -1719,6 +1732,8 @@ void Control::_change_notify_margins() { void Control::set_margin(Margin p_margin, float p_value) { + ERR_FAIL_INDEX((int)p_margin, 4); + data.margin[p_margin] = p_value; _size_changed(); } @@ -1739,6 +1754,8 @@ void Control::set_end(const Size2 &p_point) { float Control::get_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); + return data.margin[p_margin]; } @@ -1950,6 +1967,8 @@ void Control::add_constant_override(const StringName &p_name, int p_constant) { void Control::set_focus_mode(FocusMode p_focus_mode) { + ERR_FAIL_INDEX((int)p_focus_mode, 3); + if (is_inside_tree() && p_focus_mode == FOCUS_NONE && data.focus_mode != FOCUS_NONE && has_focus()) release_focus(); @@ -2202,9 +2221,11 @@ void Control::_modal_stack_remove() { if (!data.MI) return; - get_viewport()->_gui_remove_from_modal_stack(data.MI, data.modal_prev_focus_owner); - + List<Control *>::Element *element = data.MI; data.MI = NULL; + + get_viewport()->_gui_remove_from_modal_stack(element, data.modal_prev_focus_owner); + data.modal_prev_focus_owner = 0; } @@ -2297,6 +2318,8 @@ Control *Control::make_custom_tooltip(const String &p_text) const { void Control::set_default_cursor_shape(CursorShape p_shape) { + ERR_FAIL_INDEX(int(p_shape), CURSOR_MAX); + data.default_cursor = p_shape; } @@ -2357,6 +2380,8 @@ NodePath Control::get_focus_previous() const { Control *Control::_get_focus_neighbour(Margin p_margin, int p_count) { + ERR_FAIL_INDEX_V((int)p_margin, 4, NULL); + if (p_count >= MAX_NEIGHBOUR_SEARCH_COUNT) return NULL; if (!data.focus_neighbour[p_margin].is_empty()) { @@ -2759,6 +2784,8 @@ bool Control::is_clipping_contents() { void Control::set_h_grow_direction(GrowDirection p_direction) { + ERR_FAIL_INDEX((int)p_direction, 3); + data.h_grow = p_direction; _size_changed(); } @@ -2770,6 +2797,8 @@ Control::GrowDirection Control::get_h_grow_direction() const { void Control::set_v_grow_direction(GrowDirection p_direction) { + ERR_FAIL_INDEX((int)p_direction, 3); + data.v_grow = p_direction; _size_changed(); } @@ -2947,7 +2976,7 @@ void Control::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_global_position", PROPERTY_HINT_NONE, "", 0), "_set_global_position", "get_global_position"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_size", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "_set_size", "get_size"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_min_size"), "set_custom_minimum_size", "get_custom_minimum_size"); - ADD_PROPERTY(PropertyInfo(Variant::REAL, "rect_rotation", PROPERTY_HINT_RANGE, "-1080,1080,0.01"), "set_rotation_degrees", "get_rotation_degrees"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "rect_rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater"), "set_rotation_degrees", "get_rotation_degrees"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_scale"), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "rect_pivot_offset"), "set_pivot_offset", "get_pivot_offset"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rect_clip_content"), "set_clip_contents", "is_clipping_contents"); diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp index 59bbdad97a..a1b584bad6 100644 --- a/scene/gui/dialogs.cpp +++ b/scene/gui/dialogs.cpp @@ -35,6 +35,7 @@ #ifdef TOOLS_ENABLED #include "editor/editor_node.h" +#include "scene/main/viewport.h" // Only used to check for more modals when dimming the editor. #endif // WindowDialog @@ -59,7 +60,7 @@ void WindowDialog::_fix_size() { float left = 0; float bottom = 0; float right = 0; - // Check validity, because the theme could contain a different type of StyleBox + // Check validity, because the theme could contain a different type of StyleBox. if (panel->get_class() == "StyleBoxTexture") { Ref<StyleBoxTexture> panel_texture = Object::cast_to<StyleBoxTexture>(*panel); top = panel_texture->get_expand_margin_size(MARGIN_TOP); @@ -205,9 +206,9 @@ void WindowDialog::_notification(int p_what) { Color title_color = get_color("title_color", "WindowDialog"); int title_height = get_constant("title_height", "WindowDialog"); int font_height = title_font->get_height() - title_font->get_descent() * 2; - int x = (size.x - title_font->get_string_size(title).x) / 2; + int x = (size.x - title_font->get_string_size(xl_title).x) / 2; int y = (-title_height + font_height) / 2; - title_font->draw(canvas, Point2(x, y), title, title_color, size.x - panel->get_minimum_size().x); + title_font->draw(canvas, Point2(x, y), xl_title, title_color, size.x - panel->get_minimum_size().x); } break; case NOTIFICATION_THEME_CHANGED: @@ -221,8 +222,9 @@ void WindowDialog::_notification(int p_what) { case NOTIFICATION_TRANSLATION_CHANGED: { String new_title = tr(title); - if (title != new_title) { - title = new_title; + if (new_title != xl_title) { + xl_title = new_title; + minimum_size_changed(); update(); } } break; @@ -237,12 +239,14 @@ void WindowDialog::_notification(int p_what) { #ifdef TOOLS_ENABLED case NOTIFICATION_POST_POPUP: { - if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton()) + if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton()) { + was_editor_dimmed = EditorNode::get_singleton()->is_editor_dimmed(); EditorNode::get_singleton()->dim_editor(true); + } } break; case NOTIFICATION_POPUP_HIDE: { - if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton()) + if (get_tree() && Engine::get_singleton()->is_editor_hint() && EditorNode::get_singleton() && !was_editor_dimmed) EditorNode::get_singleton()->dim_editor(false); } break; #endif @@ -282,9 +286,10 @@ int WindowDialog::_drag_hit_test(const Point2 &pos) const { void WindowDialog::set_title(const String &p_title) { - String new_title = tr(p_title); - if (title != new_title) { - title = new_title; + if (title != p_title) { + title = p_title; + xl_title = tr(p_title); + minimum_size_changed(); update(); } } @@ -305,7 +310,7 @@ Size2 WindowDialog::get_minimum_size() const { Ref<Font> font = get_font("title_font", "WindowDialog"); const int button_width = close_button->get_combined_minimum_size().x; - const int title_width = font->get_string_size(title).x; + const int title_width = font->get_string_size(xl_title).x; const int padding = button_width / 2; const int button_area = button_width + padding; @@ -342,6 +347,10 @@ WindowDialog::WindowDialog() { close_button = memnew(TextureButton); add_child(close_button); close_button->connect("pressed", this, "_closed"); + +#ifdef TOOLS_ENABLED + was_editor_dimmed = false; +#endif } WindowDialog::~WindowDialog() { @@ -353,7 +362,7 @@ void PopupDialog::_notification(int p_what) { if (p_what == NOTIFICATION_DRAW) { RID ci = get_canvas_item(); - get_stylebox("panel", "PopupMenu")->draw(ci, Rect2(Point2(), get_size())); + get_stylebox("panel")->draw(ci, Rect2(Point2(), get_size())); } } diff --git a/scene/gui/dialogs.h b/scene/gui/dialogs.h index 1a0350ba18..2eb0978e9b 100644 --- a/scene/gui/dialogs.h +++ b/scene/gui/dialogs.h @@ -53,11 +53,16 @@ class WindowDialog : public Popup { TextureButton *close_button; String title; + String xl_title; int drag_type; Point2 drag_offset; Point2 drag_offset_far; bool resizable; +#ifdef TOOLS_ENABLED + bool was_editor_dimmed; +#endif + void _gui_input(const Ref<InputEvent> &p_event); void _closed(); int _drag_hit_test(const Point2 &pos) const; @@ -105,7 +110,6 @@ class AcceptDialog : public WindowDialog { HBoxContainer *hbc; Label *label; Button *ok; - //Button *cancel; no more cancel (there is X on that titlebar) bool hide_on_ok; void _custom_action(const String &p_action); diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index 9bc593ea3b..6400061309 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -46,14 +46,31 @@ VBoxContainer *FileDialog::get_vbox() { void FileDialog::_notification(int p_what) { - if (p_what == NOTIFICATION_ENTER_TREE) { + if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) { - dir_up->set_icon(get_icon("parent_folder")); - refresh->set_icon(get_icon("reload")); - show_hidden->set_icon(get_icon("toggle_hidden")); - } + if (p_what == NOTIFICATION_ENTER_TREE) { + dir_up->set_icon(get_icon("parent_folder")); + refresh->set_icon(get_icon("reload")); + show_hidden->set_icon(get_icon("toggle_hidden")); + } + + Color font_color = get_color("font_color", "ToolButton"); + Color font_color_hover = get_color("font_color_hover", "ToolButton"); + Color font_color_pressed = get_color("font_color_pressed", "ToolButton"); + + dir_up->add_color_override("icon_color_normal", font_color); + dir_up->add_color_override("icon_color_hover", font_color_hover); + dir_up->add_color_override("icon_color_pressed", font_color_pressed); + + refresh->add_color_override("icon_color_normal", font_color); + refresh->add_color_override("icon_color_hover", font_color_hover); + refresh->add_color_override("icon_color_pressed", font_color_pressed); - if (p_what == NOTIFICATION_POPUP_HIDE) { + show_hidden->add_color_override("icon_color_normal", font_color); + show_hidden->add_color_override("icon_color_hover", font_color_hover); + show_hidden->add_color_override("icon_color_pressed", font_color_pressed); + + } else if (p_what == NOTIFICATION_POPUP_HIDE) { set_process_unhandled_input(false); } @@ -161,8 +178,12 @@ void FileDialog::_post_popup() { set_process_unhandled_input(true); // For open dir mode, deselect all items on file dialog open. - if (mode == MODE_OPEN_DIR) + if (mode == MODE_OPEN_DIR) { deselect_items(); + file_box->set_visible(false); + } else { + file_box->set_visible(true); + } } void FileDialog::_action_pressed() { @@ -396,6 +417,10 @@ void FileDialog::update_file_name() { void FileDialog::update_file_list() { tree->clear(); + + // Scroll back to the top after opening a directory + tree->get_vscroll_bar()->set_value(0); + dir_access->list_dir_begin(); TreeItem *root = tree->create_item(); @@ -637,6 +662,8 @@ bool FileDialog::is_mode_overriding_title() const { void FileDialog::set_mode(Mode p_mode) { + ERR_FAIL_INDEX((int)p_mode, 5); + mode = p_mode; switch (mode) { @@ -875,6 +902,10 @@ FileDialog::FileDialog() { hbc->add_child(dir_up); dir_up->connect("pressed", this, "_go_up"); + drives = memnew(OptionButton); + hbc->add_child(drives); + drives->connect("item_selected", this, "_select_drive"); + hbc->add_child(memnew(Label(RTR("Path:")))); dir = memnew(LineEdit); hbc->add_child(dir); @@ -892,10 +923,6 @@ FileDialog::FileDialog() { show_hidden->connect("toggled", this, "set_show_hidden_files"); hbc->add_child(show_hidden); - drives = memnew(OptionButton); - hbc->add_child(drives); - drives->connect("item_selected", this, "_select_drive"); - makedir = memnew(Button); makedir->set_text(RTR("Create Folder")); makedir->connect("pressed", this, "_make_dir"); @@ -906,18 +933,18 @@ FileDialog::FileDialog() { tree->set_hide_root(true); vbc->add_margin_child(RTR("Directories & Files:"), tree, true); - hbc = memnew(HBoxContainer); - hbc->add_child(memnew(Label(RTR("File:")))); + file_box = memnew(HBoxContainer); + file_box->add_child(memnew(Label(RTR("File:")))); file = memnew(LineEdit); file->set_stretch_ratio(4); file->set_h_size_flags(SIZE_EXPAND_FILL); - hbc->add_child(file); + file_box->add_child(file); filter = memnew(OptionButton); filter->set_stretch_ratio(3); filter->set_h_size_flags(SIZE_EXPAND_FILL); filter->set_clip_text(true); // too many extensions overflows it - hbc->add_child(filter); - vbc->add_child(hbc); + file_box->add_child(filter); + vbc->add_child(file_box); dir_access = DirAccess::create(DirAccess::ACCESS_RESOURCES); access = ACCESS_RESOURCES; diff --git a/scene/gui/file_dialog.h b/scene/gui/file_dialog.h index 4fd6d0d13c..687ebc8036 100644 --- a/scene/gui/file_dialog.h +++ b/scene/gui/file_dialog.h @@ -78,10 +78,11 @@ private: LineEdit *dir; OptionButton *drives; Tree *tree; + HBoxContainer *file_box; LineEdit *file; + OptionButton *filter; AcceptDialog *mkdirerr; AcceptDialog *exterr; - OptionButton *filter; DirAccess *dir_access; ConfirmationDialog *confirm_save; diff --git a/scene/gui/grid_container.cpp b/scene/gui/grid_container.cpp index d0e2edc7b5..154e67b6f3 100644 --- a/scene/gui/grid_container.cpp +++ b/scene/gui/grid_container.cpp @@ -36,20 +36,18 @@ void GridContainer::_notification(int p_what) { case NOTIFICATION_SORT_CHILDREN: { - int valid_controls_index; - - Map<int, int> col_minw; // max of min_width of all controls in each col (indexed by col) - Map<int, int> row_minh; // max of min_height of all controls in each row (indexed by row) - Set<int> col_expanded; // columns which have the SIZE_EXPAND flag set - Set<int> row_expanded; // rows which have the SIZE_EXPAND flag set + Map<int, int> col_minw; // Max of min_width of all controls in each col (indexed by col). + Map<int, int> row_minh; // Max of min_height of all controls in each row (indexed by row). + Set<int> col_expanded; // Columns which have the SIZE_EXPAND flag set. + Set<int> row_expanded; // Rows which have the SIZE_EXPAND flag set. int hsep = get_constant("hseparation"); int vsep = get_constant("vseparation"); int max_col = MIN(get_child_count(), columns); - int max_row = get_child_count() / columns; + int max_row = ceil((float)get_child_count() / (float)columns); - // Compute the per-column/per-row data - valid_controls_index = 0; + // Compute the per-column/per-row data. + int valid_controls_index = 0; for (int i = 0; i < get_child_count(); i++) { Control *c = Object::cast_to<Control>(get_child(i)); if (!c || !c->is_visible_in_tree()) @@ -77,7 +75,12 @@ void GridContainer::_notification(int p_what) { } } - // Evaluate the remaining space for expanded columns/rows + // Consider all empty columns expanded. + for (int i = valid_controls_index; i < columns; i++) { + col_expanded.insert(i); + } + + // Evaluate the remaining space for expanded columns/rows. Size2 remaining_space = get_size(); for (Map<int, int>::Element *E = col_minw.front(); E; E = E->next()) { if (!col_expanded.has(E->key())) @@ -93,7 +96,7 @@ void GridContainer::_notification(int p_what) { bool can_fit = false; while (!can_fit && col_expanded.size() > 0) { - // Check if all minwidth constraints are ok if we use the remaining space + // Check if all minwidth constraints are OK if we use the remaining space. can_fit = true; int max_index = col_expanded.front()->get(); for (Set<int>::Element *E = col_expanded.front(); E; E = E->next()) { @@ -105,7 +108,7 @@ void GridContainer::_notification(int p_what) { } } - // If not, the column with maximum minwidth is not expanded + // If not, the column with maximum minwidth is not expanded. if (!can_fit) { col_expanded.erase(max_index); remaining_space.width -= col_minw[max_index]; @@ -114,7 +117,7 @@ void GridContainer::_notification(int p_what) { can_fit = false; while (!can_fit && row_expanded.size() > 0) { - // Check if all minwidth constraints are ok if we use the remaining space + // Check if all minheight constraints are OK if we use the remaining space. can_fit = true; int max_index = row_expanded.front()->get(); for (Set<int>::Element *E = row_expanded.front(); E; E = E->next()) { @@ -126,14 +129,14 @@ void GridContainer::_notification(int p_what) { } } - // If not, the row with maximum minwidth is not expanded + // If not, the row with maximum minheight is not expanded. if (!can_fit) { row_expanded.erase(max_index); remaining_space.height -= row_minh[max_index]; } } - // Finally, fit the nodes + // Finally, fit the nodes. int col_expand = col_expanded.size() > 0 ? remaining_space.width / col_expanded.size() : 0; int row_expand = row_expanded.size() > 0 ? remaining_space.height / row_expanded.size() : 0; @@ -152,11 +155,11 @@ void GridContainer::_notification(int p_what) { if (col == 0) { col_ofs = 0; if (row > 0) - row_ofs += ((row_expanded.has(row - 1)) ? row_expand : row_minh[row - 1]) + vsep; + row_ofs += (row_expanded.has(row - 1) ? row_expand : row_minh[row - 1]) + vsep; } Point2 p(col_ofs, row_ofs); - Size2 s((col_expanded.has(col)) ? col_expand : col_minw[col], (row_expanded.has(row)) ? row_expand : row_minh[row]); + Size2 s(col_expanded.has(col) ? col_expand : col_minw[col], row_expanded.has(row) ? row_expand : row_minh[row]); fit_child_in_rect(c, Rect2(p, s)); @@ -207,7 +210,7 @@ Size2 GridContainer::get_minimum_size() const { for (int i = 0; i < get_child_count(); i++) { Control *c = Object::cast_to<Control>(get_child(i)); - if (!c || !c->is_visible_in_tree()) + if (!c || !c->is_visible()) continue; int row = valid_controls_index / columns; int col = valid_controls_index % columns; diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp index a3bc68ffcd..1406586361 100644 --- a/scene/gui/item_list.cpp +++ b/scene/gui/item_list.cpp @@ -411,6 +411,7 @@ void ItemList::set_max_columns(int p_amount) { ERR_FAIL_COND(p_amount < 0); max_columns = p_amount; update(); + shape_changed = true; } int ItemList::get_max_columns() const { @@ -430,6 +431,7 @@ ItemList::SelectMode ItemList::get_select_mode() const { void ItemList::set_icon_mode(IconMode p_mode) { + ERR_FAIL_INDEX((int)p_mode, 2); icon_mode = p_mode; update(); shape_changed = true; @@ -925,7 +927,7 @@ void ItemList::_notification(int p_what) { current_columns = max_columns; while (true) { - //repeat util all fits + //repeat until all fits bool all_fit = true; Vector2 ofs; int col = 0; diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp index 510f1b18ad..9e2cd9e941 100644 --- a/scene/gui/label.cpp +++ b/scene/gui/label.cpp @@ -296,8 +296,9 @@ Size2 Label::get_minimum_size() const { Size2 min_style = get_stylebox("normal")->get_minimum_size(); // don't want to mutable everything - if (word_cache_dirty) + if (word_cache_dirty) { const_cast<Label *>(this)->regenerate_word_cache(); + } if (autowrap) return Size2(1, clip ? 1 : minsize.height) + min_style; @@ -377,8 +378,14 @@ void Label::regenerate_word_cache() { memdelete(current); } - Ref<StyleBox> style = get_stylebox("normal"); - int width = autowrap ? (get_size().width - style->get_minimum_size().width) : get_longest_line_width(); + int width; + if (autowrap) { + Ref<StyleBox> style = get_stylebox("normal"); + width = MAX(get_size().width, get_custom_minimum_size().width) - style->get_minimum_size().width; + } else { + width = get_longest_line_width(); + } + Ref<Font> font = get_font("font"); int current_word_size = 0; @@ -452,6 +459,11 @@ void Label::regenerate_word_cache() { current_word_size += char_width; line_width += char_width; total_char_cache++; + + // allow autowrap to cut words when they exceed line width + if (autowrap && (current_word_size > width)) { + separatable = true; + } } if ((autowrap && (line_width >= width) && ((last && last->char_pos >= 0) || separatable)) || insert_newline) { diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index 6893c38733..ab6f80bfa9 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -87,7 +87,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } else { - if (b->is_doubleclick()) { + if (b->is_doubleclick() && selecting_enabled) { selection.enabled = true; selection.begin = 0; @@ -195,13 +195,13 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { unsigned int code = k->get_scancode(); - if (k->get_command()) { + if (k->get_command() && is_shortcut_keys_enabled()) { bool handled = true; switch (code) { - case (KEY_X): { // CUT + case (KEY_X): { // CUT. if (editable) { cut_text(); @@ -209,13 +209,13 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } break; - case (KEY_C): { // COPY + case (KEY_C): { // COPY. copy_text(); } break; - case (KEY_V): { // PASTE + case (KEY_V): { // PASTE. if (editable) { @@ -224,7 +224,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } break; - case (KEY_Z): { // undo / redo + case (KEY_Z): { // Undo/redo. if (editable) { if (k->get_shift()) { redo(); @@ -234,7 +234,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } } break; - case (KEY_U): { // Delete from start to cursor + case (KEY_U): { // Delete from start to cursor. if (editable) { @@ -255,7 +255,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } break; - case (KEY_Y): { // PASTE (Yank for unix users) + case (KEY_Y): { // PASTE (Yank for unix users). if (editable) { @@ -263,7 +263,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } } break; - case (KEY_K): { // Delete from cursor_pos to end + case (KEY_K): { // Delete from cursor_pos to end. if (editable) { @@ -273,14 +273,15 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { } } break; - case (KEY_A): { //Select All + case (KEY_A): { // Select all. select(); + } break; #ifdef APPLE_STYLE_KEYS - case (KEY_LEFT): { // Go to start of text - like HOME key + case (KEY_LEFT): { // Go to start of text - like HOME key. set_cursor_position(0); } break; - case (KEY_RIGHT): { // Go to end of text - like END key + case (KEY_RIGHT): { // Go to end of text - like END key. set_cursor_position(text.length()); } break; #endif @@ -473,7 +474,7 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { int text_len = text.length(); if (cursor_pos == text_len) - break; // nothing to do + break; // Nothing to do. #ifdef APPLE_STYLE_KEYS if (k->get_alt()) { @@ -531,6 +532,16 @@ void LineEdit::_gui_input(Ref<InputEvent> p_event) { set_cursor_position(text.length()); shift_selection_check_post(k->get_shift()); } break; + case KEY_MENU: { + if (context_menu_enabled) { + Point2 pos = Point2(get_cursor_pixel_pos(), (get_size().y + get_font("font")->get_height()) / 2); + menu->set_position(get_global_transform().xform(pos)); + menu->set_size(Vector2(1, 1)); + menu->set_scale(get_global_transform().get_scale()); + menu->popup(); + menu->grab_focus(); + } + } break; default: { @@ -730,7 +741,7 @@ void LineEdit::_notification(int p_what) { Color cursor_color = get_color("cursor_color"); const String &t = using_placeholder ? placeholder_translated : text; - // draw placeholder color + // Draw placeholder color. if (using_placeholder) font_color.a *= placeholder_alpha; @@ -745,6 +756,7 @@ void LineEdit::_notification(int p_what) { color_icon = get_color("clear_button_color"); } } + r_icon->draw(ci, Point2(width - r_icon->get_width() - style->get_margin(MARGIN_RIGHT), height / 2 - r_icon->get_height() / 2), color_icon); if (align == ALIGN_CENTER) { @@ -762,7 +774,7 @@ void LineEdit::_notification(int p_what) { FontDrawer drawer(font, Color(1, 1, 1)); while (true) { - //end of string, break! + // End of string, break. if (char_ofs >= t.length()) break; @@ -799,7 +811,7 @@ void LineEdit::_notification(int p_what) { CharType next = (pass && !text.empty()) ? secret_character[0] : t[char_ofs + 1]; int char_width = font->get_char_size(cchar, next).width; - // end of widget, break! + // End of widget, break. if ((x_ofs + char_width) > ofs_max) break; @@ -854,7 +866,7 @@ void LineEdit::_notification(int p_what) { } } - if (char_ofs == cursor_pos && draw_caret) { //may be at the end + if (char_ofs == cursor_pos && draw_caret) { // May be at the end. if (ime_text.length() == 0) { #ifdef TOOLS_ENABLED VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(x_ofs, y_ofs), Size2(Math::round(EDSCALE), caret_height)), cursor_color); @@ -1043,7 +1055,7 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { } pixel_ofs += char_w; - if (pixel_ofs > p_x) { //found what we look for + if (pixel_ofs > p_x) { // Found what we look for. break; } @@ -1053,6 +1065,52 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) { set_cursor_position(ofs); } +int LineEdit::get_cursor_pixel_pos() { + + Ref<Font> font = get_font("font"); + int ofs = window_pos; + Ref<StyleBox> style = get_stylebox("normal"); + int pixel_ofs = 0; + Size2 size = get_size(); + bool display_clear_icon = !text.empty() && is_editable() && clear_button_enabled; + int r_icon_width = Control::get_icon("clear")->get_width(); + + switch (align) { + + case ALIGN_FILL: + case ALIGN_LEFT: { + + pixel_ofs = int(style->get_offset().x); + } break; + case ALIGN_CENTER: { + + if (window_pos != 0) + pixel_ofs = int(style->get_offset().x); + else + pixel_ofs = int(size.width - (cached_width)) / 2; + + if (display_clear_icon) + pixel_ofs -= int(r_icon_width / 2 + style->get_margin(MARGIN_RIGHT)); + } break; + case ALIGN_RIGHT: { + + pixel_ofs = int(size.width - style->get_margin(MARGIN_RIGHT) - (cached_width)); + + if (display_clear_icon) + pixel_ofs -= int(r_icon_width + style->get_margin(MARGIN_RIGHT)); + } break; + } + + while (ofs < cursor_pos) { + if (font != NULL) { + pixel_ofs += font->get_char_size(text[ofs]).width; + } + ofs++; + } + + return pixel_ofs; +} + bool LineEdit::cursor_get_blink_enabled() const { return caret_blink_enabled; } @@ -1210,10 +1268,10 @@ void LineEdit::set_cursor_position(int p_pos) { Ref<Font> font = get_font("font"); if (cursor_pos <= window_pos) { - /* Adjust window if cursor goes too much to the left */ + // Adjust window if cursor goes too much to the left. set_window_pos(MAX(0, cursor_pos - 1)); } else { - /* Adjust window if cursor goes too much to the right */ + // Adjust window if cursor goes too much to the right. int window_width = get_size().width - style->get_minimum_size().width; bool display_clear_icon = !text.empty() && is_editable() && clear_button_enabled; if (right_icon.is_valid() || display_clear_icon) { @@ -1232,10 +1290,10 @@ void LineEdit::set_cursor_position(int p_pos) { for (int i = cursor_pos; i >= window_pos; i--) { if (i >= text.length()) { - //do not do this, because if the cursor is at the end, its just fine that it takes no space - //accum_width = font->get_char_size(' ').width; //anything should do + // Do not do this, because if the cursor is at the end, its just fine that it takes no space. + // accum_width = font->get_char_size(' ').width; } else { - accum_width += font->get_char_size(text[i], i + 1 < text.length() ? text[i + 1] : 0).width; //anything should do + accum_width += font->get_char_size(text[i], i + 1 < text.length() ? text[i + 1] : 0).width; // Anything should do. } if (accum_width > window_width) break; @@ -1297,23 +1355,31 @@ Size2 LineEdit::get_minimum_size() const { Ref<StyleBox> style = get_stylebox("normal"); Ref<Font> font = get_font("font"); - Size2 min = style->get_minimum_size(); - min.height += font->get_height(); + Size2 min_size; - //minimum size of text + // Minimum size of text. int space_size = font->get_char_size(' ').x; - int mstext = get_constant("minimum_spaces") * space_size; + min_size.width = get_constant("minimum_spaces") * space_size; if (expand_to_text_length) { - mstext = MAX(mstext, font->get_string_size(text).x + space_size); //add a spce because some fonts are too exact, and because cursor needs a bit more when at the end + // Add a space because some fonts are too exact, and because cursor needs a bit more when at the end. + min_size.width = MAX(min_size.width, font->get_string_size(text).x + space_size); } - min.width += mstext; + min_size.height = font->get_height(); - return min; -} + // Take icons into account. + if (!text.empty() && is_editable() && clear_button_enabled) { + min_size.width = MAX(min_size.width, Control::get_icon("clear")->get_width()); + min_size.height = MAX(min_size.height, Control::get_icon("clear")->get_height()); + } + if (right_icon.is_valid()) { + min_size.width = MAX(min_size.width, right_icon->get_width()); + min_size.height = MAX(min_size.height, right_icon->get_height()); + } -/* selection */ + return style->get_minimum_size() + min_size; +} void LineEdit::deselect() { @@ -1347,6 +1413,8 @@ int LineEdit::get_max_length() const { } void LineEdit::selection_fill_at_cursor() { + if (!selecting_enabled) + return; selection.begin = cursor_pos; selection.end = selection.cursor_start; @@ -1361,6 +1429,8 @@ void LineEdit::selection_fill_at_cursor() { } void LineEdit::select_all() { + if (!selecting_enabled) + return; if (!text.length()) return; @@ -1377,32 +1447,7 @@ void LineEdit::set_editable(bool p_editable) { return; editable = p_editable; - - // Reorganize context menu. - menu->clear(); - - if (editable) { - menu->add_item(RTR("Undo"), MENU_UNDO, KEY_MASK_CMD | KEY_Z); - menu->add_item(RTR("Redo"), MENU_REDO, KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Z); - } - - if (editable) { - menu->add_separator(); - menu->add_item(RTR("Cut"), MENU_CUT, KEY_MASK_CMD | KEY_X); - } - - menu->add_item(RTR("Copy"), MENU_COPY, KEY_MASK_CMD | KEY_C); - - if (editable) { - menu->add_item(RTR("Paste"), MENU_PASTE, KEY_MASK_CMD | KEY_V); - } - - menu->add_separator(); - menu->add_item(RTR("Select All"), MENU_SELECT_ALL, KEY_MASK_CMD | KEY_A); - - if (editable) { - menu->add_item(RTR("Clear"), MENU_CLEAR); - } + _generate_context_menu(); update(); } @@ -1425,8 +1470,8 @@ bool LineEdit::is_secret() const { void LineEdit::set_secret_character(const String &p_string) { - // An empty string as the secret character would crash the engine - // It also wouldn't make sense to use multiple characters as the secret character + // An empty string as the secret character would crash the engine. + // It also wouldn't make sense to use multiple characters as the secret character. ERR_FAIL_COND_MSG(p_string.length() != 1, "Secret character must be exactly one character long (" + itos(p_string.length()) + " characters given)."); secret_character = p_string; @@ -1438,6 +1483,8 @@ String LineEdit::get_secret_character() const { } void LineEdit::select(int p_from, int p_to) { + if (!selecting_enabled) + return; if (p_from == 0 && p_to == 0) { deselect(); @@ -1545,6 +1592,29 @@ bool LineEdit::is_clear_button_enabled() const { return clear_button_enabled; } +void LineEdit::set_shortcut_keys_enabled(bool p_enabled) { + shortcut_keys_enabled = p_enabled; + + _generate_context_menu(); +} + +bool LineEdit::is_shortcut_keys_enabled() const { + return shortcut_keys_enabled; +} + +void LineEdit::set_selecting_enabled(bool p_enabled) { + selecting_enabled = p_enabled; + + if (!selecting_enabled) + deselect(); + + _generate_context_menu(); +} + +bool LineEdit::is_selecting_enabled() const { + return selecting_enabled; +} + void LineEdit::set_right_icon(const Ref<Texture> &p_icon) { if (right_icon == p_icon) { return; @@ -1553,8 +1623,11 @@ void LineEdit::set_right_icon(const Ref<Texture> &p_icon) { update(); } -void LineEdit::_text_changed() { +Ref<Texture> LineEdit::get_right_icon() { + return right_icon; +} +void LineEdit::_text_changed() { if (expand_to_text_length) minimum_size_changed(); @@ -1608,6 +1681,25 @@ void LineEdit::_create_undo_state() { undo_stack.push_back(op); } +void LineEdit::_generate_context_menu() { + // Reorganize context menu. + menu->clear(); + if (editable) + menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_X : 0); + menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_C : 0); + if (editable) + menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_V : 0); + menu->add_separator(); + if (is_selecting_enabled()) + menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_A : 0); + if (editable) { + menu->add_item(RTR("Clear"), MENU_CLEAR); + menu->add_separator(); + menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_Z : 0); + menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Z : 0); + } +} + void LineEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("_text_changed"), &LineEdit::_text_changed); @@ -1652,6 +1744,12 @@ void LineEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("is_context_menu_enabled"), &LineEdit::is_context_menu_enabled); ClassDB::bind_method(D_METHOD("set_clear_button_enabled", "enable"), &LineEdit::set_clear_button_enabled); ClassDB::bind_method(D_METHOD("is_clear_button_enabled"), &LineEdit::is_clear_button_enabled); + ClassDB::bind_method(D_METHOD("set_shortcut_keys_enabled", "enable"), &LineEdit::set_shortcut_keys_enabled); + ClassDB::bind_method(D_METHOD("is_shortcut_keys_enabled"), &LineEdit::is_shortcut_keys_enabled); + ClassDB::bind_method(D_METHOD("set_selecting_enabled", "enable"), &LineEdit::set_selecting_enabled); + ClassDB::bind_method(D_METHOD("is_selecting_enabled"), &LineEdit::is_selecting_enabled); + ClassDB::bind_method(D_METHOD("set_right_icon", "icon"), &LineEdit::set_right_icon); + ClassDB::bind_method(D_METHOD("get_right_icon"), &LineEdit::get_right_icon); ADD_SIGNAL(MethodInfo("text_changed", PropertyInfo(Variant::STRING, "new_text"))); ADD_SIGNAL(MethodInfo("text_entered", PropertyInfo(Variant::STRING, "new_text"))); @@ -1677,9 +1775,11 @@ void LineEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "secret"), "set_secret", "is_secret"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "secret_character"), "set_secret_character", "get_secret_character"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand_to_text_length"), "set_expand_to_text_length", "get_expand_to_text_length"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "context_menu_enabled"), "set_context_menu_enabled", "is_context_menu_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clear_button_enabled"), "set_clear_button_enabled", "is_clear_button_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "right_icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_right_icon", "get_right_icon"); ADD_GROUP("Placeholder", "placeholder_"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "placeholder_text"), "set_placeholder", "get_placeholder"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "placeholder_alpha", PROPERTY_HINT_RANGE, "0,1,0.001"), "set_placeholder_alpha", "get_placeholder_alpha"); @@ -1707,6 +1807,8 @@ LineEdit::LineEdit() { clear_button_enabled = false; clear_button_status.press_attempt = false; clear_button_status.pressing_inside = false; + shortcut_keys_enabled = true; + selecting_enabled = true; deselect(); set_focus_mode(FOCUS_ALL); @@ -1724,7 +1826,7 @@ LineEdit::LineEdit() { context_menu_enabled = true; menu = memnew(PopupMenu); add_child(menu); - editable = false; // initialise to opposite first, so we get past the early-out in set_editable + editable = false; // Initialise to opposite first, so we get past the early-out in set_editable. set_editable(true); menu->connect("id_pressed", this, "menu_option"); expand_to_text_length = false; diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h index 1d33f7d4ce..3424131dad 100644 --- a/scene/gui/line_edit.h +++ b/scene/gui/line_edit.h @@ -75,18 +75,22 @@ private: String ime_text; Point2 ime_selection; + bool selecting_enabled; + bool context_menu_enabled; PopupMenu *menu; int cursor_pos; int window_pos; - int max_length; // 0 for no maximum + int max_length; // 0 for no maximum. int cached_width; int cached_placeholder_width; bool clear_button_enabled; + bool shortcut_keys_enabled; + Ref<Texture> right_icon; struct Selection { @@ -118,6 +122,8 @@ private: void _clear_redo(); void _create_undo_state(); + void _generate_context_menu(); + Timer *caret_blink_timer; void _text_changed(); @@ -137,6 +143,7 @@ private: void set_window_pos(int p_pos); void set_cursor_at_pixel_pos(int p_x); + int get_cursor_pixel_pos(); void _reset_caret_blink_timer(); void _toggle_draw_caret(); @@ -216,7 +223,14 @@ public: void set_clear_button_enabled(bool p_enabled); bool is_clear_button_enabled() const; + void set_shortcut_keys_enabled(bool p_enabled); + bool is_shortcut_keys_enabled() const; + + void set_selecting_enabled(bool p_enabled); + bool is_selecting_enabled() const; + void set_right_icon(const Ref<Texture> &p_icon); + Ref<Texture> get_right_icon(); virtual bool is_text_field() const; LineEdit(); diff --git a/scene/gui/option_button.cpp b/scene/gui/option_button.cpp index d1840e43a3..de8df4215d 100644 --- a/scene/gui/option_button.cpp +++ b/scene/gui/option_button.cpp @@ -116,10 +116,16 @@ void OptionButton::add_item(const String &p_label, int p_id) { void OptionButton::set_item_text(int p_idx, const String &p_text) { popup->set_item_text(p_idx, p_text); + + if (current == p_idx) + set_text(p_text); } void OptionButton::set_item_icon(int p_idx, const Ref<Texture> &p_icon) { popup->set_item_icon(p_idx, p_icon); + + if (current == p_idx) + set_icon(p_icon); } void OptionButton::set_item_id(int p_idx, int p_id) { diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index a7c6c5ccab..08faaf7d45 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -79,7 +79,7 @@ Size2 PopupMenu::get_minimum_size() const { if (items[i].checkable_type) has_check = true; - String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].xl_text; + String text = items[i].xl_text; size.width += font->get_string_size(text).width; if (i > 0) size.height += vseparation; @@ -519,7 +519,7 @@ void PopupMenu::_notification(int p_what) { hover->draw(ci, Rect2(item_ofs + Point2(-hseparation, -vseparation / 2), Size2(get_size().width - style->get_minimum_size().width + hseparation * 2, h + vseparation))); } - String text = items[i].shortcut.is_valid() ? String(tr(items[i].shortcut->get_name())) : items[i].xl_text; + String text = items[i].xl_text; item_ofs.x += items[i].h_ofs; if (items[i].separator) { @@ -627,63 +627,50 @@ void PopupMenu::_notification(int p_what) { } } -void PopupMenu::add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_id, uint32_t p_accel) { +/* Methods to add items with or without icon, checkbox, shortcut. + * Be sure to keep them in sync when adding new properties in the Item struct. + */ - Item item; - item.icon = p_icon; - item.text = p_label; - item.xl_text = tr(p_label); +#define ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel) \ + item.text = p_label; \ + item.xl_text = tr(p_label); \ + item.id = p_id == -1 ? items.size() : p_id; \ item.accel = p_accel; - item.id = p_id; - items.push_back(item); - update(); - minimum_size_changed(); -} + void PopupMenu::add_item(const String &p_label, int p_id, uint32_t p_accel) { Item item; - item.text = p_label; - item.xl_text = tr(p_label); - item.accel = p_accel; - item.id = p_id == -1 ? items.size() : p_id; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_submenu_item(const String &p_label, const String &p_submenu, int p_id) { +void PopupMenu::add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_id, uint32_t p_accel) { Item item; - item.text = p_label; - item.xl_text = tr(p_label); - item.id = p_id; - item.submenu = p_submenu; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); + item.icon = p_icon; items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_icon_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id, uint32_t p_accel) { +void PopupMenu::add_check_item(const String &p_label, int p_id, uint32_t p_accel) { Item item; - item.icon = p_icon; - item.text = p_label; - item.xl_text = tr(p_label); - item.accel = p_accel; - item.id = p_id; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX; items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_check_item(const String &p_label, int p_id, uint32_t p_accel) { +void PopupMenu::add_icon_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id, uint32_t p_accel) { Item item; - item.text = p_label; - item.xl_text = tr(p_label); - item.accel = p_accel; - item.id = p_id == -1 ? items.size() : p_id; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); + item.icon = p_icon; item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX; items.push_back(item); update(); @@ -692,63 +679,59 @@ void PopupMenu::add_check_item(const String &p_label, int p_id, uint32_t p_accel void PopupMenu::add_radio_check_item(const String &p_label, int p_id, uint32_t p_accel) { - add_check_item(p_label, p_id, p_accel); - items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + Item item; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); + item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + items.push_back(item); update(); minimum_size_changed(); } void PopupMenu::add_icon_radio_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id, uint32_t p_accel) { - add_icon_check_item(p_icon, p_label, p_id, p_accel); - items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + Item item; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); + item.icon = p_icon; + item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { - - ERR_FAIL_COND(p_shortcut.is_null()); - - _ref_shortcut(p_shortcut); +void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_id, uint32_t p_accel) { Item item; - item.id = p_id; - item.icon = p_icon; - item.shortcut = p_shortcut; - item.shortcut_is_global = p_global; + ITEM_SETUP_WITH_ACCEL(p_label, p_id, p_accel); + item.max_states = p_max_states; + item.state = p_default_state; items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_shortcut(const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { - - ERR_FAIL_COND(p_shortcut.is_null()); +#define ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global) \ + ERR_FAIL_COND_MSG(p_shortcut.is_null(), "Cannot add item with invalid ShortCut."); \ + _ref_shortcut(p_shortcut); \ + item.text = p_shortcut->get_name(); \ + item.xl_text = tr(item.text); \ + item.id = p_id == -1 ? items.size() : p_id; \ + item.shortcut = p_shortcut; \ + item.shortcut_is_global = p_global; - _ref_shortcut(p_shortcut); +void PopupMenu::add_shortcut(const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { Item item; - item.id = p_id; - item.shortcut = p_shortcut; - item.shortcut_is_global = p_global; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { - - ERR_FAIL_COND(p_shortcut.is_null()); - - _ref_shortcut(p_shortcut); +void PopupMenu::add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { Item item; - item.id = p_id; - item.shortcut = p_shortcut; - item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); item.icon = p_icon; - item.shortcut_is_global = p_global; items.push_back(item); update(); minimum_size_changed(); @@ -756,14 +739,19 @@ void PopupMenu::add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<Sh void PopupMenu::add_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { - ERR_FAIL_COND(p_shortcut.is_null()); + Item item; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); + item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX; + items.push_back(item); + update(); + minimum_size_changed(); +} - _ref_shortcut(p_shortcut); +void PopupMenu::add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { Item item; - item.id = p_id; - item.shortcut = p_shortcut; - item.shortcut_is_global = p_global; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); + item.icon = p_icon; item.checkable_type = Item::CHECKABLE_TYPE_CHECK_BOX; items.push_back(item); update(); @@ -772,26 +760,42 @@ void PopupMenu::add_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_id, bo void PopupMenu::add_radio_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { - add_check_shortcut(p_shortcut, p_id, p_global); - items.write[items.size() - 1].checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + Item item; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); + item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + items.push_back(item); update(); minimum_size_changed(); } -void PopupMenu::add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_id, uint32_t p_accel) { +void PopupMenu::add_icon_radio_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id, bool p_global) { + + Item item; + ITEM_SETUP_WITH_SHORTCUT(p_shortcut, p_id, p_global); + item.icon = p_icon; + item.checkable_type = Item::CHECKABLE_TYPE_RADIO_BUTTON; + items.push_back(item); + update(); + minimum_size_changed(); +} + +void PopupMenu::add_submenu_item(const String &p_label, const String &p_submenu, int p_id) { Item item; item.text = p_label; item.xl_text = tr(p_label); - item.accel = p_accel; - item.id = p_id; - item.max_states = p_max_states; - item.state = p_default_state; + item.id = p_id == -1 ? items.size() : p_id; + item.submenu = p_submenu; items.push_back(item); update(); minimum_size_changed(); } +#undef ITEM_SETUP_WITH_ACCEL +#undef ITEM_SETUP_WITH_SHORTCUT + +/* Methods to modify existing items. */ + void PopupMenu::set_item_text(int p_idx, const String &p_text) { ERR_FAIL_INDEX(p_idx, items.size()); @@ -1380,18 +1384,24 @@ void PopupMenu::clear_autohide_areas() { void PopupMenu::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &PopupMenu::_gui_input); - ClassDB::bind_method(D_METHOD("add_icon_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_item, DEFVAL(-1), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("add_item", "label", "id", "accel"), &PopupMenu::add_item, DEFVAL(-1), DEFVAL(0)); - ClassDB::bind_method(D_METHOD("add_icon_check_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_check_item, DEFVAL(-1), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("add_icon_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_item, DEFVAL(-1), DEFVAL(0)); ClassDB::bind_method(D_METHOD("add_check_item", "label", "id", "accel"), &PopupMenu::add_check_item, DEFVAL(-1), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("add_icon_check_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_check_item, DEFVAL(-1), DEFVAL(0)); ClassDB::bind_method(D_METHOD("add_radio_check_item", "label", "id", "accel"), &PopupMenu::add_radio_check_item, DEFVAL(-1), DEFVAL(0)); - ClassDB::bind_method(D_METHOD("add_submenu_item", "label", "submenu", "id"), &PopupMenu::add_submenu_item, DEFVAL(-1)); + ClassDB::bind_method(D_METHOD("add_icon_radio_check_item", "texture", "label", "id", "accel"), &PopupMenu::add_icon_radio_check_item, DEFVAL(-1), DEFVAL(0)); + + ClassDB::bind_method(D_METHOD("add_multistate_item", "label", "max_states", "default_state", "id", "accel"), &PopupMenu::add_multistate_item, DEFVAL(0), DEFVAL(-1), DEFVAL(0)); - ClassDB::bind_method(D_METHOD("add_icon_shortcut", "texture", "shortcut", "id", "global"), &PopupMenu::add_icon_shortcut, DEFVAL(-1), DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_shortcut", "shortcut", "id", "global"), &PopupMenu::add_shortcut, DEFVAL(-1), DEFVAL(false)); - ClassDB::bind_method(D_METHOD("add_icon_check_shortcut", "texture", "shortcut", "id", "global"), &PopupMenu::add_icon_check_shortcut, DEFVAL(-1), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("add_icon_shortcut", "texture", "shortcut", "id", "global"), &PopupMenu::add_icon_shortcut, DEFVAL(-1), DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_check_shortcut", "shortcut", "id", "global"), &PopupMenu::add_check_shortcut, DEFVAL(-1), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("add_icon_check_shortcut", "texture", "shortcut", "id", "global"), &PopupMenu::add_icon_check_shortcut, DEFVAL(-1), DEFVAL(false)); ClassDB::bind_method(D_METHOD("add_radio_check_shortcut", "shortcut", "id", "global"), &PopupMenu::add_radio_check_shortcut, DEFVAL(-1), DEFVAL(false)); + ClassDB::bind_method(D_METHOD("add_icon_radio_check_shortcut", "texture", "shortcut", "id", "global"), &PopupMenu::add_icon_radio_check_shortcut, DEFVAL(-1), DEFVAL(false)); + + ClassDB::bind_method(D_METHOD("add_submenu_item", "label", "submenu", "id"), &PopupMenu::add_submenu_item, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("set_item_text", "idx", "text"), &PopupMenu::set_item_text); ClassDB::bind_method(D_METHOD("set_item_icon", "idx", "icon"), &PopupMenu::set_item_icon); diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h index 8bfe8fc607..8c33178b09 100644 --- a/scene/gui/popup_menu.h +++ b/scene/gui/popup_menu.h @@ -120,21 +120,23 @@ protected: static void _bind_methods(); public: - void add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0); void add_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0); - void add_icon_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0); + void add_icon_item(const Ref<Texture> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0); void add_check_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0); + void add_icon_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0); void add_radio_check_item(const String &p_label, int p_id = -1, uint32_t p_accel = 0); void add_icon_radio_check_item(const Ref<Texture> &p_icon, const String &p_label, int p_id = -1, uint32_t p_accel = 0); - void add_submenu_item(const String &p_label, const String &p_submenu, int p_id = -1); - void add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); + void add_multistate_item(const String &p_label, int p_max_states, int p_default_state = 0, int p_id = -1, uint32_t p_accel = 0); + void add_shortcut(const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); - void add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); + void add_icon_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); void add_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); + void add_icon_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); void add_radio_check_shortcut(const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); + void add_icon_radio_check_shortcut(const Ref<Texture> &p_icon, const Ref<ShortCut> &p_shortcut, int p_id = -1, bool p_global = false); - void add_multistate_item(const String &p_label, int p_max_states, int p_default_state, int p_id = -1, uint32_t p_accel = 0); + void add_submenu_item(const String &p_label, const String &p_submenu, int p_id = -1); void set_item_text(int p_idx, const String &p_text); void set_item_icon(int p_idx, const Ref<Texture> &p_icon); diff --git a/scene/gui/rich_text_effect.cpp b/scene/gui/rich_text_effect.cpp index 67fa85b832..f9e0be5b31 100644 --- a/scene/gui/rich_text_effect.cpp +++ b/scene/gui/rich_text_effect.cpp @@ -119,4 +119,9 @@ CharFXTransform::CharFXTransform() { offset = Point2(); color = Color(); character = 0; + elapsed_time = 0.0f; +} + +CharFXTransform::~CharFXTransform() { + environment.clear(); } diff --git a/scene/gui/rich_text_effect.h b/scene/gui/rich_text_effect.h index f9c3e15399..4330cebfe6 100644 --- a/scene/gui/rich_text_effect.h +++ b/scene/gui/rich_text_effect.h @@ -64,6 +64,8 @@ public: Dictionary environment; CharFXTransform(); + ~CharFXTransform(); + uint64_t get_relative_index() { return relative_index; } void set_relative_index(uint64_t p_index) { relative_index = p_index; } uint64_t get_absolute_index() { return absolute_index; } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index 77d5c8e91f..0331046492 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -143,6 +143,8 @@ Rect2 RichTextLabel::_get_text_rect() { int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &y, int p_width, int p_line, ProcessMode p_mode, const Ref<Font> &p_base_font, const Color &p_base_color, const Color &p_font_color_shadow, bool p_shadow_as_outline, const Point2 &shadow_ofs, const Point2i &p_click_pos, Item **r_click_item, int *r_click_char, bool *r_outside, int p_char_count) { + ERR_FAIL_INDEX_V((int)p_mode, 3, 0); + RID ci; if (r_outside) *r_outside = false; @@ -348,6 +350,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & int it_char_start = p_char_count; Vector<ItemFX *> fx_stack = Vector<ItemFX *>(); + _fetch_item_fx_stack(text, fx_stack); bool custom_fx_ok = true; if (p_mode == PROCESS_DRAW) { @@ -359,8 +362,14 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & strikethrough = true; } - fade = _fetch_by_type<ItemFade>(text, ITEM_FADE); - _fetch_item_stack<ItemFX>(text, fx_stack); + Item *fade_item = it; + while (fade_item) { + if (fade_item->type == ITEM_FADE) { + fade = static_cast<ItemFade *>(fade_item); + break; + } + fade_item = fade_item->parent; + } } else if (p_mode == PROCESS_CACHE) { l.char_count += text->text.length(); @@ -467,18 +476,16 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & faded_visibility > 0.0f); for (int j = 0; j < fx_stack.size(); j++) { - ItemCustomFX *item_custom = Object::cast_to<ItemCustomFX>(fx_stack[j]); - ItemShake *item_shake = Object::cast_to<ItemShake>(fx_stack[j]); - ItemWave *item_wave = Object::cast_to<ItemWave>(fx_stack[j]); - ItemTornado *item_tornado = Object::cast_to<ItemTornado>(fx_stack[j]); - ItemRainbow *item_rainbow = Object::cast_to<ItemRainbow>(fx_stack[j]); - - if (item_custom && custom_fx_ok) { - Ref<CharFXTransform> charfx = Ref<CharFXTransform>(memnew(CharFXTransform)); - Ref<RichTextEffect> custom_effect = _get_custom_effect_by_code(item_custom->identifier); + ItemFX *item_fx = fx_stack[j]; + + if (item_fx->type == ITEM_CUSTOMFX && custom_fx_ok) { + ItemCustomFX *item_custom = static_cast<ItemCustomFX *>(item_fx); + + Ref<CharFXTransform> charfx = item_custom->char_fx_transform; + Ref<RichTextEffect> custom_effect = item_custom->custom_effect; + if (!custom_effect.is_null()) { charfx->elapsed_time = item_custom->elapsed_time; - charfx->environment = item_custom->environment; charfx->relative_index = c_item_offset; charfx->absolute_index = p_char_count; charfx->visibility = visible; @@ -494,7 +501,9 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & visible &= charfx->visibility; fx_char = charfx->character; } - } else if (item_shake) { + } else if (item_fx->type == ITEM_SHAKE) { + ItemShake *item_shake = static_cast<ItemShake *>(item_fx); + uint64_t char_current_rand = item_shake->offset_random(c_item_offset); uint64_t char_previous_rand = item_shake->offset_previous_random(c_item_offset); uint64_t max_rand = 2147483647; @@ -509,14 +518,20 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & Math::cos(current_offset), n_time)) * (float)item_shake->strength / 10.0f; - } else if (item_wave) { + } else if (item_fx->type == ITEM_WAVE) { + ItemWave *item_wave = static_cast<ItemWave *>(item_fx); + double value = Math::sin(item_wave->frequency * item_wave->elapsed_time + ((p_ofs.x + pofs) / 50)) * (item_wave->amplitude / 10.0f); fx_offset += Point2(0, 1) * value; - } else if (item_tornado) { + } else if (item_fx->type == ITEM_TORNADO) { + ItemTornado *item_tornado = static_cast<ItemTornado *>(item_fx); + double torn_x = Math::sin(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + pofs) / 50)) * (item_tornado->radius); double torn_y = Math::cos(item_tornado->frequency * item_tornado->elapsed_time + ((p_ofs.x + pofs) / 50)) * (item_tornado->radius); fx_offset += Point2(torn_x, torn_y); - } else if (item_rainbow) { + } else if (item_fx->type == ITEM_RAINBOW) { + ItemRainbow *item_rainbow = static_cast<ItemRainbow *>(item_fx); + fx_color = fx_color.from_hsv(item_rainbow->frequency * (item_rainbow->elapsed_time + ((p_ofs.x + pofs) / 50)), item_rainbow->saturation, item_rainbow->value, @@ -540,12 +555,12 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & if (p_font_color_shadow.a > 0) { float x_ofs_shadow = align_ofs + pofs; float y_ofs_shadow = y + lh - line_descent; - font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + shadow_ofs, fx_char, c[i + 1], p_font_color_shadow); + font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + shadow_ofs + fx_offset, fx_char, c[i + 1], p_font_color_shadow); if (p_shadow_as_outline) { - font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(-shadow_ofs.x, shadow_ofs.y), fx_char, c[i + 1], p_font_color_shadow); - font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(shadow_ofs.x, -shadow_ofs.y), fx_char, c[i + 1], p_font_color_shadow); - font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(-shadow_ofs.x, -shadow_ofs.y), fx_char, c[i + 1], p_font_color_shadow); + font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(-shadow_ofs.x, shadow_ofs.y) + fx_offset, fx_char, c[i + 1], p_font_color_shadow); + font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(shadow_ofs.x, -shadow_ofs.y) + fx_offset, fx_char, c[i + 1], p_font_color_shadow); + font->draw_char(ci, Point2(x_ofs_shadow, y_ofs_shadow) + Vector2(-shadow_ofs.x, -shadow_ofs.y) + fx_offset, fx_char, c[i + 1], p_font_color_shadow); } } @@ -609,19 +624,19 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & if (p_mode == PROCESS_POINTER && r_click_char) *r_click_char = 0; - ENSURE_WIDTH(img->image->get_width()); + ENSURE_WIDTH(img->size.width); - bool visible = visible_characters < 0 || (p_char_count < visible_characters && YRANGE_VISIBLE(y + lh - font->get_descent() - img->image->get_height(), img->image->get_height())); + bool visible = visible_characters < 0 || (p_char_count < visible_characters && YRANGE_VISIBLE(y + lh - font->get_descent() - img->size.height, img->size.height)); if (visible) line_is_blank = false; if (p_mode == PROCESS_DRAW && visible) { - img->image->draw(ci, p_ofs + Point2(align_ofs + wofs, y + lh - font->get_descent() - img->image->get_height())); + img->image->draw_rect(ci, Rect2(p_ofs + Point2(align_ofs + wofs, y + lh - font->get_descent() - img->size.height), img->size)); } p_char_count++; - ADVANCE(img->image->get_width()); - CHECK_HEIGHT((img->image->get_height() + font->get_descent())); + ADVANCE(img->size.width); + CHECK_HEIGHT((img->size.height + font->get_descent())); } break; case ITEM_NEWLINE: { @@ -844,7 +859,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int & void RichTextLabel::_scroll_changed(double) { - if (updating_scroll) + if (updating_scroll || !scroll_active) return; if (scroll_follow && vscroll->get_value() >= (vscroll->get_max() - vscroll->get_page())) @@ -884,7 +899,11 @@ void RichTextLabel::_update_scroll() { void RichTextLabel::_update_fx(RichTextLabel::ItemFrame *p_frame, float p_delta_time) { Item *it = p_frame; while (it) { - ItemFX *ifx = Object::cast_to<ItemFX>(it); + ItemFX *ifx = NULL; + + if (it->type == ITEM_CUSTOMFX || it->type == ITEM_SHAKE || it->type == ITEM_WAVE || it->type == ITEM_TORNADO || it->type == ITEM_RAINBOW) { + ifx = static_cast<ItemFX *>(it); + } if (!ifx) { it = _get_next_item(it, true); @@ -893,7 +912,12 @@ void RichTextLabel::_update_fx(RichTextLabel::ItemFrame *p_frame, float p_delta_ ifx->elapsed_time += p_delta_time; - ItemShake *shake = Object::cast_to<ItemShake>(it); + ItemShake *shake = NULL; + + if (it->type == ITEM_SHAKE) { + shake = static_cast<ItemShake *>(it); + } + if (shake) { bool cycle = (shake->elapsed_time > (1.0f / shake->rate)); if (cycle) { @@ -983,9 +1007,6 @@ void RichTextLabel::_notification(int p_what) { case NOTIFICATION_INTERNAL_PROCESS: { float dt = get_process_delta_time(); - for (int i = 0; i < custom_effects.size(); i++) { - } - _update_fx(main, dt); update(); } @@ -1397,6 +1418,9 @@ bool RichTextLabel::_find_strikethrough(Item *p_item) { } bool RichTextLabel::_find_by_type(Item *p_item, ItemType p_type) { + + ERR_FAIL_INDEX_V((int)p_type, 19, false); + Item *item = p_item; while (item) { @@ -1408,6 +1432,17 @@ bool RichTextLabel::_find_by_type(Item *p_item, ItemType p_type) { return false; } +void RichTextLabel::_fetch_item_fx_stack(Item *p_item, Vector<ItemFX *> &r_stack) { + Item *item = p_item; + while (item) { + if (item->type == ITEM_CUSTOMFX || item->type == ITEM_SHAKE || item->type == ITEM_WAVE || item->type == ITEM_TORNADO || item->type == ITEM_RAINBOW) { + r_stack.push_back(static_cast<ItemFX *>(item)); + } + + item = item->parent; + } +} + bool RichTextLabel::_find_meta(Item *p_item, Variant *r_meta, ItemMeta **r_item) { Item *item = p_item; @@ -1599,7 +1634,7 @@ void RichTextLabel::_remove_item(Item *p_item, const int p_line, const int p_sub } } -void RichTextLabel::add_image(const Ref<Texture> &p_image) { +void RichTextLabel::add_image(const Ref<Texture> &p_image, const int p_width, const int p_height) { if (current->type == ITEM_TABLE) return; @@ -1608,6 +1643,30 @@ void RichTextLabel::add_image(const Ref<Texture> &p_image) { ItemImage *item = memnew(ItemImage); item->image = p_image; + + if (p_width > 0) { + // custom width + item->size.width = p_width; + if (p_height > 0) { + // custom height + item->size.height = p_height; + } else { + // calculate height to keep aspect ratio + item->size.height = p_image->get_height() * p_width / p_image->get_width(); + } + } else { + if (p_height > 0) { + // custom height + item->size.height = p_height; + // calculate width to keep aspect ratio + item->size.width = p_image->get_width() * p_height / p_image->get_height(); + } else { + // keep original width and height + item->size.height = p_image->get_height(); + item->size.width = p_image->get_width(); + } + } + _add_item(item, false); } @@ -1662,6 +1721,41 @@ void RichTextLabel::push_font(const Ref<Font> &p_font) { _add_item(item, true); } +void RichTextLabel::push_normal() { + Ref<Font> normal_font = get_font("normal_font"); + ERR_FAIL_COND(normal_font.is_null()); + + push_font(normal_font); +} + +void RichTextLabel::push_bold() { + Ref<Font> bold_font = get_font("bold_font"); + ERR_FAIL_COND(bold_font.is_null()); + + push_font(bold_font); +} + +void RichTextLabel::push_bold_italics() { + Ref<Font> bold_italics_font = get_font("bold_italics_font"); + ERR_FAIL_COND(bold_italics_font.is_null()); + + push_font(bold_italics_font); +} + +void RichTextLabel::push_italics() { + Ref<Font> italics_font = get_font("italics_font"); + ERR_FAIL_COND(italics_font.is_null()); + + push_font(italics_font); +} + +void RichTextLabel::push_mono() { + Ref<Font> mono_font = get_font("mono_font"); + ERR_FAIL_COND(mono_font.is_null()); + + push_font(mono_font); +} + void RichTextLabel::push_color(const Color &p_color) { ERR_FAIL_COND(current->type == ITEM_TABLE); @@ -1776,10 +1870,10 @@ void RichTextLabel::push_rainbow(float p_saturation, float p_value, float p_freq _add_item(item, true); } -void RichTextLabel::push_customfx(String p_identifier, Dictionary p_environment) { +void RichTextLabel::push_customfx(Ref<RichTextEffect> p_custom_effect, Dictionary p_environment) { ItemCustomFX *item = memnew(ItemCustomFX); - item->identifier = p_identifier; - item->environment = p_environment; + item->custom_effect = p_custom_effect; + item->char_fx_transform->environment = p_environment; _add_item(item, true); } @@ -2090,6 +2184,7 @@ Error RichTextLabel::append_bbcode(const String &p_bbcode) { int end = p_bbcode.find("[", brk_end); if (end == -1) end = p_bbcode.length(); + String image = p_bbcode.substr(brk_end + 1, end - brk_end - 1); Ref<Texture> texture = ResourceLoader::load(image, "Texture"); @@ -2098,6 +2193,32 @@ Error RichTextLabel::append_bbcode(const String &p_bbcode) { pos = end; tag_stack.push_front(tag); + } else if (tag.begins_with("img=")) { + + int width = 0; + int height = 0; + + String params = tag.substr(4, tag.length()); + int sep = params.find("x"); + if (sep == -1) { + width = params.to_int(); + } else { + width = params.substr(0, sep).to_int(); + height = params.substr(sep + 1, params.length()).to_int(); + } + + int end = p_bbcode.find("[", brk_end); + if (end == -1) + end = p_bbcode.length(); + + String image = p_bbcode.substr(brk_end + 1, end - brk_end - 1); + + Ref<Texture> texture = ResourceLoader::load(image, "Texture"); + if (texture.is_valid()) + add_image(texture, width, height); + + pos = end; + tag_stack.push_front("img"); } else if (tag.begins_with("color=")) { String col = tag.substr(6, tag.length()); @@ -2287,7 +2408,7 @@ Error RichTextLabel::append_bbcode(const String &p_bbcode) { Ref<RichTextEffect> effect = _get_custom_effect_by_code(identifier); if (!effect.is_null()) { - push_customfx(identifier, properties); + push_customfx(effect, properties); pos = brk_end + 1; tag_stack.push_front(identifier); set_process_internal(true); @@ -2546,10 +2667,15 @@ void RichTextLabel::_bind_methods() { ClassDB::bind_method(D_METHOD("get_text"), &RichTextLabel::get_text); ClassDB::bind_method(D_METHOD("add_text", "text"), &RichTextLabel::add_text); ClassDB::bind_method(D_METHOD("set_text", "text"), &RichTextLabel::set_text); - ClassDB::bind_method(D_METHOD("add_image", "image"), &RichTextLabel::add_image); + ClassDB::bind_method(D_METHOD("add_image", "image", "width", "height"), &RichTextLabel::add_image, DEFVAL(0), DEFVAL(0)); ClassDB::bind_method(D_METHOD("newline"), &RichTextLabel::add_newline); ClassDB::bind_method(D_METHOD("remove_line", "line"), &RichTextLabel::remove_line); ClassDB::bind_method(D_METHOD("push_font", "font"), &RichTextLabel::push_font); + ClassDB::bind_method(D_METHOD("push_normal"), &RichTextLabel::push_normal); + ClassDB::bind_method(D_METHOD("push_bold"), &RichTextLabel::push_bold); + ClassDB::bind_method(D_METHOD("push_bold_italics"), &RichTextLabel::push_bold_italics); + ClassDB::bind_method(D_METHOD("push_italics"), &RichTextLabel::push_italics); + ClassDB::bind_method(D_METHOD("push_mono"), &RichTextLabel::push_mono); ClassDB::bind_method(D_METHOD("push_color", "color"), &RichTextLabel::push_color); ClassDB::bind_method(D_METHOD("push_align", "align"), &RichTextLabel::push_align); ClassDB::bind_method(D_METHOD("push_indent", "level"), &RichTextLabel::push_indent); @@ -2631,7 +2757,7 @@ void RichTextLabel::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selection_enabled"), "set_selection_enabled", "is_selection_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_selected_font_color"), "set_override_selected_font_color", "is_overriding_selected_font_color"); - ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "custom_effects", (PropertyHint)(PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE), "17/17:RichTextEffect", PROPERTY_USAGE_DEFAULT, "RichTextEffect"), "set_effects", "get_effects"); + ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "custom_effects", PROPERTY_HINT_RESOURCE_TYPE, "17/17:RichTextEffect", (PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_SCRIPT_VARIABLE), "RichTextEffect"), "set_effects", "get_effects"); ADD_SIGNAL(MethodInfo("meta_clicked", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); ADD_SIGNAL(MethodInfo("meta_hover_started", PropertyInfo(Variant::NIL, "meta", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NIL_IS_VARIANT))); @@ -2700,17 +2826,16 @@ Size2 RichTextLabel::get_minimum_size() const { } Ref<RichTextEffect> RichTextLabel::_get_custom_effect_by_code(String p_bbcode_identifier) { - Ref<RichTextEffect> r; for (int i = 0; i < custom_effects.size(); i++) { if (!custom_effects[i].is_valid()) continue; if (custom_effects[i]->get_bbcode() == p_bbcode_identifier) { - r = custom_effects[i]; + return custom_effects[i]; } } - return r; + return Ref<RichTextEffect>(); } Dictionary RichTextLabel::parse_expressions_for_values(Vector<String> p_expressions) { diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h index 6755f9ef2a..b9837fdfcc 100644 --- a/scene/gui/rich_text_label.h +++ b/scene/gui/rich_text_label.h @@ -103,8 +103,7 @@ private: } }; - struct Item : public Object { - + struct Item { int index; Item *parent; ItemType type; @@ -128,7 +127,6 @@ private: }; struct ItemFrame : public Item { - int parent_line; bool cell; Vector<Line> lines; @@ -144,70 +142,59 @@ private: }; struct ItemText : public Item { - String text; ItemText() { type = ITEM_TEXT; } }; struct ItemImage : public Item { - Ref<Texture> image; + Size2 size; ItemImage() { type = ITEM_IMAGE; } }; struct ItemFont : public Item { - Ref<Font> font; ItemFont() { type = ITEM_FONT; } }; struct ItemColor : public Item { - Color color; ItemColor() { type = ITEM_COLOR; } }; struct ItemUnderline : public Item { - ItemUnderline() { type = ITEM_UNDERLINE; } }; struct ItemStrikethrough : public Item { - ItemStrikethrough() { type = ITEM_STRIKETHROUGH; } }; struct ItemMeta : public Item { - Variant meta; ItemMeta() { type = ITEM_META; } }; struct ItemAlign : public Item { - Align align; ItemAlign() { type = ITEM_ALIGN; } }; struct ItemIndent : public Item { - int level; ItemIndent() { type = ITEM_INDENT; } }; struct ItemList : public Item { - ListType list_type; ItemList() { type = ITEM_LIST; } }; struct ItemNewline : public Item { - ItemNewline() { type = ITEM_NEWLINE; } }; struct ItemTable : public Item { - struct Column { bool expand; int expand_ratio; @@ -301,18 +288,20 @@ private: }; struct ItemCustomFX : public ItemFX { - String identifier; - Dictionary environment; + Ref<CharFXTransform> char_fx_transform; + Ref<RichTextEffect> custom_effect; ItemCustomFX() { - identifier = ""; - environment = Dictionary(); type = ITEM_CUSTOMFX; + + char_fx_transform.instance(); } virtual ~ItemCustomFX() { _clear_children(); - environment.clear(); + + char_fx_transform.unref(); + custom_effect.unref(); } }; @@ -391,32 +380,7 @@ private: bool _find_meta(Item *p_item, Variant *r_meta, ItemMeta **r_item = NULL); bool _find_layout_subitem(Item *from, Item *to); bool _find_by_type(Item *p_item, ItemType p_type); - template <typename T> - T *_fetch_by_type(Item *p_item, ItemType p_type) { - Item *item = p_item; - T *result = NULL; - while (item) { - if (item->type == p_type) { - result = Object::cast_to<T>(item); - if (result) - return result; - } - item = item->parent; - } - - return result; - }; - template <typename T> - void _fetch_item_stack(Item *p_item, Vector<T *> &r_stack) { - Item *item = p_item; - while (item) { - T *found = Object::cast_to<T>(item); - if (found) { - r_stack.push_back(found); - } - item = item->parent; - } - } + void _fetch_item_fx_stack(Item *p_item, Vector<ItemFX *> &r_stack); void _update_scroll(); void _update_fx(ItemFrame *p_frame, float p_delta_time); @@ -443,10 +407,15 @@ protected: public: String get_text(); void add_text(const String &p_text); - void add_image(const Ref<Texture> &p_image); + void add_image(const Ref<Texture> &p_image, const int p_width = 0, const int p_height = 0); void add_newline(); bool remove_line(const int p_line); void push_font(const Ref<Font> &p_font); + void push_normal(); + void push_bold(); + void push_bold_italics(); + void push_italics(); + void push_mono(); void push_color(const Color &p_color); void push_underline(); void push_strikethrough(); @@ -456,11 +425,11 @@ public: void push_meta(const Variant &p_meta); void push_table(int p_columns); void push_fade(int p_start_index, int p_length); - void push_shake(int p_level, float p_rate); + void push_shake(int p_strength, float p_rate); void push_wave(float p_frequency, float p_amplitude); void push_tornado(float p_frequency, float p_radius); void push_rainbow(float p_saturation, float p_value, float p_frequency); - void push_customfx(String p_identifier, Dictionary p_environment); + void push_customfx(Ref<RichTextEffect> p_custom_effect, Dictionary p_environment); void set_table_column_expand(int p_column, bool p_expand, int p_ratio = 1); int get_current_table_column() const; void push_cell(); diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp index b777e77bc3..9f853cf0c8 100644 --- a/scene/gui/slider.cpp +++ b/scene/gui/slider.cpp @@ -287,7 +287,6 @@ void Slider::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "scrollable"), "set_scrollable", "is_scrollable"); ADD_PROPERTY(PropertyInfo(Variant::INT, "tick_count", PROPERTY_HINT_RANGE, "0,4096,1"), "set_ticks", "get_ticks"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ticks_on_borders"), "set_ticks_on_borders", "get_ticks_on_borders"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "focus_mode", PROPERTY_HINT_ENUM, "None,Click,All"), "set_focus_mode", "get_focus_mode"); } Slider::Slider(Orientation p_orientation) { diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 172c366c41..bf067898e6 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -108,21 +108,21 @@ void SpinBox::_gui_input(const Ref<InputEvent> &p_event) { case BUTTON_LEFT: { + line_edit->grab_focus(); + set_value(get_value() + (up ? get_step() : -get_step())); range_click_timer->set_wait_time(0.6); range_click_timer->set_one_shot(true); range_click_timer->start(); - line_edit->grab_focus(); - drag.allowed = true; drag.capture_pos = mb->get_position(); } break; case BUTTON_RIGHT: { - set_value((up ? get_max() : get_min())); line_edit->grab_focus(); + set_value((up ? get_max() : get_min())); } break; case BUTTON_WHEEL_UP: { if (line_edit->has_focus()) { diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp index 292d80be9d..a29ba36bad 100644 --- a/scene/gui/tab_container.cpp +++ b/scene/gui/tab_container.cpp @@ -94,7 +94,7 @@ void TabContainer::_gui_input(const Ref<InputEvent> &p_event) { return; } - // Do not activate tabs when tabs is empty + // Do not activate tabs when tabs is empty. if (get_tab_count() == 0) return; @@ -140,6 +140,76 @@ void TabContainer::_gui_input(const Ref<InputEvent> &p_event) { pos.x -= tab_width; } } + + Ref<InputEventMouseMotion> mm = p_event; + + if (mm.is_valid()) { + + Point2 pos(mm->get_position().x, mm->get_position().y); + Size2 size = get_size(); + + // Mouse must be on tabs in the tab header area. + if (pos.x < tabs_ofs_cache || pos.y > _get_top_margin()) { + + if (menu_hovered || highlight_arrow > -1) { + menu_hovered = false; + highlight_arrow = -1; + update(); + } + return; + } + + Ref<Texture> menu = get_icon("menu"); + if (popup) { + + if (pos.x >= size.width - menu->get_width()) { + if (!menu_hovered) { + menu_hovered = true; + highlight_arrow = -1; + update(); + return; + } + } else if (menu_hovered) { + menu_hovered = false; + update(); + } + + if (menu_hovered) { + return; + } + } + + // Do not activate tabs when tabs is empty. + if ((get_tab_count() == 0 || !buttons_visible_cache) && menu_hovered) { + highlight_arrow = -1; + update(); + return; + } + + int popup_ofs = 0; + if (popup) { + popup_ofs = menu->get_width(); + } + + Ref<Texture> increment = get_icon("increment"); + Ref<Texture> decrement = get_icon("decrement"); + if (pos.x >= size.width - increment->get_width() - popup_ofs) { + + if (highlight_arrow != 1) { + highlight_arrow = 1; + update(); + } + } else if (pos.x >= size.width - increment->get_width() - decrement->get_width() - popup_ofs) { + + if (highlight_arrow != 0) { + highlight_arrow = 0; + update(); + } + } else if (highlight_arrow > -1) { + highlight_arrow = -1; + update(); + } + } } void TabContainer::_notification(int p_what) { @@ -203,9 +273,11 @@ void TabContainer::_notification(int p_what) { Ref<StyleBox> tab_fg = get_stylebox("tab_fg"); Ref<StyleBox> tab_disabled = get_stylebox("tab_disabled"); Ref<Texture> increment = get_icon("increment"); + Ref<Texture> increment_hl = get_icon("increment_highlight"); Ref<Texture> decrement = get_icon("decrement"); + Ref<Texture> decrement_hl = get_icon("decrement_highlight"); Ref<Texture> menu = get_icon("menu"); - Ref<Texture> menu_hl = get_icon("menu_hl"); + Ref<Texture> menu_hl = get_icon("menu_highlight"); Ref<Font> font = get_font("font"); Color font_color_fg = get_color("font_color_fg"); Color font_color_bg = get_color("font_color_bg"); @@ -332,7 +404,7 @@ void TabContainer::_notification(int p_what) { x = get_size().width; if (popup) { x -= menu->get_width(); - if (mouse_x_cache > x) + if (menu_hovered) menu_hl->draw(get_canvas_item(), Size2(x, (header_height - menu_hl->get_height()) / 2)); else menu->draw(get_canvas_item(), Size2(x, (header_height - menu->get_height()) / 2)); @@ -340,23 +412,26 @@ void TabContainer::_notification(int p_what) { // Draw the navigation buttons. if (buttons_visible_cache) { - int y_center = header_height / 2; x -= increment->get_width(); - increment->draw(canvas, - Point2(x, y_center - (increment->get_height() / 2)), - Color(1, 1, 1, last_tab_cache < tabs.size() - 1 ? 1.0 : 0.5)); + if (last_tab_cache < tabs.size() - 1) { + draw_texture(highlight_arrow == 1 ? increment_hl : increment, Point2(x, (header_height - increment->get_height()) / 2)); + } else { + draw_texture(increment, Point2(x, (header_height - increment->get_height()) / 2), Color(1, 1, 1, 0.5)); + } x -= decrement->get_width(); - decrement->draw(canvas, - Point2(x, y_center - (decrement->get_height() / 2)), - Color(1, 1, 1, first_tab_cache > 0 ? 1.0 : 0.5)); + if (first_tab_cache > 0) { + draw_texture(highlight_arrow == 0 ? decrement_hl : decrement, Point2(x, (header_height - decrement->get_height()) / 2)); + } else { + draw_texture(decrement, Point2(x, (header_height - decrement->get_height()) / 2), Color(1, 1, 1, 0.5)); + } } } break; case NOTIFICATION_THEME_CHANGED: { minimum_size_changed(); - call_deferred("_on_theme_changed"); //wait until all changed theme + call_deferred("_on_theme_changed"); // Wait until all changed theme. } break; } } @@ -367,6 +442,14 @@ void TabContainer::_on_theme_changed() { } } +void TabContainer::_on_mouse_exited() { + if (menu_hovered || highlight_arrow > -1) { + menu_hovered = false; + highlight_arrow = -1; + update(); + } +} + int TabContainer::_get_tab_width(int p_index) const { ERR_FAIL_INDEX_V(p_index, get_tab_count(), 0); @@ -894,6 +977,7 @@ void TabContainer::set_use_hidden_tabs_for_min_size(bool p_use_hidden_tabs) { bool TabContainer::get_use_hidden_tabs_for_min_size() const { return use_hidden_tabs_for_min_size; } + void TabContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &TabContainer::_gui_input); @@ -925,6 +1009,7 @@ void TabContainer::_bind_methods() { ClassDB::bind_method(D_METHOD("_child_renamed_callback"), &TabContainer::_child_renamed_callback); ClassDB::bind_method(D_METHOD("_on_theme_changed"), &TabContainer::_on_theme_changed); + ClassDB::bind_method(D_METHOD("_on_mouse_exited"), &TabContainer::_on_mouse_exited); ClassDB::bind_method(D_METHOD("_update_current_tab"), &TabContainer::_update_current_tab); ADD_SIGNAL(MethodInfo("tab_changed", PropertyInfo(Variant::INT, "tab"))); @@ -947,14 +1032,17 @@ TabContainer::TabContainer() { first_tab_cache = 0; last_tab_cache = 0; buttons_visible_cache = false; + menu_hovered = false; + highlight_arrow = -1; tabs_ofs_cache = 0; current = 0; previous = 0; - mouse_x_cache = 0; align = ALIGN_CENTER; tabs_visible = true; popup = NULL; drag_to_rearrange_enabled = false; tabs_rearrange_group = -1; use_hidden_tabs_for_min_size = false; + + connect("mouse_exited", this, "_on_mouse_exited"); } diff --git a/scene/gui/tab_container.h b/scene/gui/tab_container.h index 0314f86837..0c17ebc3ae 100644 --- a/scene/gui/tab_container.h +++ b/scene/gui/tab_container.h @@ -46,7 +46,6 @@ public: }; private: - int mouse_x_cache; int first_tab_cache; int tabs_ofs_cache; int last_tab_cache; @@ -54,6 +53,8 @@ private: int previous; bool tabs_visible; bool buttons_visible_cache; + bool menu_hovered; + int highlight_arrow; TabAlign align; Control *_get_tab(int p_idx) const; int _get_top_margin() const; @@ -65,6 +66,7 @@ private: Vector<Control *> _get_tabs() const; int _get_tab_width(int p_index) const; void _on_theme_changed(); + void _on_mouse_exited(); void _update_current_tab(); protected: diff --git a/scene/gui/tabs.cpp b/scene/gui/tabs.cpp index 7b0836cd28..c24f15384b 100644 --- a/scene/gui/tabs.cpp +++ b/scene/gui/tabs.cpp @@ -53,7 +53,7 @@ Size2 Tabs::get_minimum_size() const { ms.width += get_constant("hseparation"); } - ms.width += Math::ceil(font->get_string_size(tabs[i].text).width); + ms.width += Math::ceil(font->get_string_size(tabs[i].xl_text).width); if (tabs[i].disabled) ms.width += tab_disabled->get_minimum_size().width; @@ -223,15 +223,12 @@ void Tabs::_notification(int p_what) { switch (p_what) { case NOTIFICATION_TRANSLATION_CHANGED: { + for (int i = 0; i < tabs.size(); ++i) { + tabs.write[i].xl_text = tr(tabs[i].text); + } minimum_size_changed(); update(); } break; - case NOTIFICATION_MOUSE_EXIT: { - rb_hover = -1; - cb_hover = -1; - hover = -1; - update(); - } break; case NOTIFICATION_RESIZED: { _update_cache(); _ensure_no_over_offset(); @@ -324,7 +321,7 @@ void Tabs::_notification(int p_what) { w += icon->get_width() + get_constant("hseparation"); } - font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].text, col, tabs[i].size_text); + font->draw(ci, Point2i(w, sb->get_margin(MARGIN_TOP) + ((sb_rect.size.y - sb_ms.y) - font->get_height()) / 2 + font->get_ascent()), tabs[i].xl_text, col, tabs[i].size_text); w += tabs[i].size_text; @@ -441,6 +438,7 @@ void Tabs::set_tab_title(int p_tab, const String &p_title) { ERR_FAIL_INDEX(p_tab, tabs.size()); tabs.write[p_tab].text = p_title; + tabs.write[p_tab].xl_text = tr(p_title); update(); minimum_size_changed(); } @@ -549,7 +547,7 @@ void Tabs::_update_cache() { for (int i = 0; i < tabs.size(); i++) { tabs.write[i].ofs_cache = mw; tabs.write[i].size_cache = get_tab_width(i); - tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].text).width); + tabs.write[i].size_text = Math::ceil(font->get_string_size(tabs[i].xl_text).width); mw += tabs[i].size_cache; if (tabs[i].size_cache <= min_width || i == current) { size_fixed += tabs[i].size_cache; @@ -597,10 +595,20 @@ void Tabs::_update_cache() { } } +void Tabs::_on_mouse_exited() { + + rb_hover = -1; + cb_hover = -1; + hover = -1; + highlight_arrow = -1; + update(); +} + void Tabs::add_tab(const String &p_str, const Ref<Texture> &p_icon) { Tab t; t.text = p_str; + t.xl_text = tr(p_str); t.icon = p_icon; t.disabled = false; t.ofs_cache = 0; @@ -656,7 +664,7 @@ Variant Tabs::get_drag_data(const Point2 &p_point) { tf->set_texture(tabs[tab_over].icon); drag_preview->add_child(tf); } - Label *label = memnew(Label(tabs[tab_over].text)); + Label *label = memnew(Label(tabs[tab_over].xl_text)); drag_preview->add_child(label); if (!tabs[tab_over].right_button.is_null()) { TextureRect *tf = memnew(TextureRect); @@ -805,7 +813,7 @@ int Tabs::get_tab_width(int p_idx) const { x += get_constant("hseparation"); } - x += Math::ceil(font->get_string_size(tabs[p_idx].text).width); + x += Math::ceil(font->get_string_size(tabs[p_idx].xl_text).width); if (tabs[p_idx].disabled) x += tab_disabled->get_minimum_size().width; @@ -948,6 +956,7 @@ void Tabs::_bind_methods() { ClassDB::bind_method(D_METHOD("_gui_input"), &Tabs::_gui_input); ClassDB::bind_method(D_METHOD("_update_hover"), &Tabs::_update_hover); + ClassDB::bind_method(D_METHOD("_on_mouse_exited"), &Tabs::_on_mouse_exited); ClassDB::bind_method(D_METHOD("get_tab_count"), &Tabs::get_tab_count); ClassDB::bind_method(D_METHOD("set_current_tab", "tab_idx"), &Tabs::set_current_tab); ClassDB::bind_method(D_METHOD("get_current_tab"), &Tabs::get_current_tab); @@ -1024,4 +1033,6 @@ Tabs::Tabs() { hover = -1; drag_to_rearrange_enabled = false; tabs_rearrange_group = -1; + + connect("mouse_exited", this, "_on_mouse_exited"); } diff --git a/scene/gui/tabs.h b/scene/gui/tabs.h index 7c54f1acf2..0edf2fedc1 100644 --- a/scene/gui/tabs.h +++ b/scene/gui/tabs.h @@ -58,6 +58,7 @@ private: struct Tab { String text; + String xl_text; Ref<Texture> icon; int ofs_cache; bool disabled; @@ -89,7 +90,7 @@ private: bool cb_pressing; CloseButtonDisplayPolicy cb_displaypolicy; - int hover; // hovered tab + int hover; // Hovered tab. int min_width; bool scrolling_enabled; bool drag_to_rearrange_enabled; @@ -101,6 +102,8 @@ private: void _update_hover(); void _update_cache(); + void _on_mouse_exited(); + protected: void _gui_input(const Ref<InputEvent> &p_event); void _notification(int p_what); diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 7bcef5f9ab..c818633f48 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -161,57 +161,58 @@ void TextEdit::Text::_update_line_cache(int p_line) const { /* BEGIN */ int lr = cr.begin_key.length(); - if (lr == 0 || lr > left) - continue; + const CharType *kc; + bool match; - const CharType *kc = cr.begin_key.c_str(); + if (lr != 0 && lr <= left) { + kc = cr.begin_key.c_str(); - bool match = true; + match = true; - for (int k = 0; k < lr; k++) { - if (kc[k] != str[i + k]) { - match = false; - break; + for (int k = 0; k < lr; k++) { + if (kc[k] != str[i + k]) { + match = false; + break; + } } - } - if (match) { + if (match) { - ColorRegionInfo cri; - cri.end = false; - cri.region = j; - text.write[p_line].region_info[i] = cri; - i += lr - 1; + ColorRegionInfo cri; + cri.end = false; + cri.region = j; + text.write[p_line].region_info[i] = cri; + i += lr - 1; - break; + break; + } } /* END */ lr = cr.end_key.length(); - if (lr == 0 || lr > left) - continue; - - kc = cr.end_key.c_str(); + if (lr != 0 && lr <= left) { + kc = cr.end_key.c_str(); - match = true; + match = true; - for (int k = 0; k < lr; k++) { - if (kc[k] != str[i + k]) { - match = false; - break; + for (int k = 0; k < lr; k++) { + if (kc[k] != str[i + k]) { + match = false; + break; + } } - } - if (match) { + if (match) { - ColorRegionInfo cri; - cri.end = true; - cri.region = j; - text.write[p_line].region_info[i] = cri; - i += lr - 1; + ColorRegionInfo cri; + cri.end = true; + cri.region = j; + text.write[p_line].region_info[i] = cri; + i += lr - 1; - break; + break; + } } } } @@ -268,6 +269,12 @@ void TextEdit::Text::clear_wrap_cache() { } } +void TextEdit::Text::clear_info_icons() { + for (int i = 0; i < text.size(); i++) { + text.write[i].has_info = false; + } +} + void TextEdit::Text::clear() { text.clear(); @@ -302,6 +309,7 @@ void TextEdit::Text::insert(int p_at, const String &p_text) { line.breakpoint = false; line.bookmark = false; line.hidden = false; + line.has_info = false; line.width_cache = -1; line.wrap_amount_cache = -1; line.data = p_text; @@ -647,7 +655,7 @@ void TextEdit::_notification(int p_what) { if (scrolling && get_v_scroll() != target_v_scroll) { double target_y = target_v_scroll - get_v_scroll(); double dist = sqrt(target_y * target_y); - // To ensure minimap is responsive overide the speed setting. + // To ensure minimap is responsive override the speed setting. double vel = ((target_y / dist) * ((minimap_clicked) ? 3000 : v_scroll_speed)) * get_physics_process_delta_time(); if (Math::abs(vel) >= dist) { @@ -935,7 +943,7 @@ void TextEdit::_notification(int p_what) { int minimap_line = (v_scroll->get_max() <= minimap_visible_lines) ? -1 : first_visible_line; if (minimap_line >= 0) { minimap_line -= num_lines_from_rows(first_visible_line, 0, -num_lines_before, wi); - minimap_line -= (smooth_scroll_enabled ? 1 : 0); + minimap_line -= (minimap_line > 0 && smooth_scroll_enabled ? 1 : 0); } int minimap_draw_amount = minimap_visible_lines + times_line_wraps(minimap_line + 1); @@ -957,6 +965,10 @@ void TextEdit::_notification(int p_what) { } } + if (minimap_line < 0 || minimap_line >= (int)text.size()) { + break; + } + Map<int, HighlighterInfo> color_map; if (syntax_coloring) { color_map = _get_line_syntax_highlighting(minimap_line); @@ -1271,7 +1283,8 @@ void TextEdit::_notification(int p_what) { } // Loop through characters in one line. - for (int j = 0; j < str.length(); j++) { + int j = 0; + for (; j < str.length(); j++) { if (syntax_coloring) { if (color_map.has(last_wrap_column + j)) { @@ -1501,7 +1514,7 @@ void TextEdit::_notification(int p_what) { } } - if (cursor.column == last_wrap_column + str.length() && cursor.line == line && cursor_wrap_index == line_wrap_index && (char_ofs + char_margin) >= xmargin_beg) { + if (cursor.column == (last_wrap_column + j) && cursor.line == line && cursor_wrap_index == line_wrap_index && (char_ofs + char_margin) >= xmargin_beg) { cursor_pos = Point2i(char_ofs + char_margin + ofs_x, ofs_y); cursor_pos.y += (get_row_height() - cache.font->get_height()) / 2; @@ -1722,7 +1735,9 @@ void TextEdit::_notification(int p_what) { end = font->get_string_size(l.substr(0, l.rfind(String::chr(0xFFFF)))).x; } - draw_string(font, hint_ofs + sb->get_offset() + Vector2(0, font->get_ascent() + font->get_height() * i + spacing), l.replace(String::chr(0xFFFF), ""), font_color); + Point2 round_ofs = hint_ofs + sb->get_offset() + Vector2(0, font->get_ascent() + font->get_height() * i + spacing); + round_ofs = round_ofs.round(); + draw_string(font, round_ofs, l.replace(String::chr(0xFFFF), ""), font_color); if (end > 0) { Vector2 b = hint_ofs + sb->get_offset() + Vector2(begin, font->get_height() + font->get_height() * i + spacing - 1); draw_line(b, b + Vector2(end - begin, 0), font_color); @@ -2081,6 +2096,44 @@ void TextEdit::_get_mouse_pos(const Point2i &p_mouse, int &r_row, int &r_col) co r_col = col; } +Vector2i TextEdit::_get_cursor_pixel_pos() { + adjust_viewport_to_cursor(); + int row = (cursor.line - get_first_visible_line() - cursor.wrap_ofs); + // Correct for hidden and wrapped lines + for (int i = get_first_visible_line(); i < cursor.line; i++) { + if (is_line_hidden(i)) { + row -= 1; + continue; + } + row += times_line_wraps(i); + } + // Row might be wrapped. Adjust row and r_column + Vector<String> rows2 = get_wrap_rows_text(cursor.line); + while (rows2.size() > 1) { + if (cursor.column >= rows2[0].length()) { + cursor.column -= rows2[0].length(); + rows2.remove(0); + row++; + } else { + break; + } + } + + // Calculate final pixel position + int y = (row - get_v_scroll_offset() + 1 /*Bottom of line*/) * get_row_height(); + int x = cache.style_normal->get_margin(MARGIN_LEFT) + cache.line_number_w + cache.breakpoint_gutter_width + cache.fold_gutter_width + cache.info_gutter_width - cursor.x_ofs; + int ix = 0; + while (ix < rows2[0].size() && ix < cursor.column) { + if (cache.font != NULL) { + x += cache.font->get_char_size(rows2[0].get(ix)).width; + } + ix++; + } + x += get_indent_level(cursor.line) * cache.font->get_char_size(' ').width; + + return Vector2i(x, y); +} + void TextEdit::_get_minimap_mouse_row(const Point2i &p_mouse, int &r_row) const { float rows = p_mouse.y; @@ -2107,7 +2160,7 @@ void TextEdit::_get_minimap_mouse_row(const Point2i &p_mouse, int &r_row) const int minimap_line = (v_scroll->get_max() <= minimap_visible_lines) ? -1 : first_visible_line; if (first_visible_line > 0 && minimap_line >= 0) { minimap_line -= num_lines_from_rows(first_visible_line, 0, -num_lines_before, wi); - minimap_line -= (smooth_scroll_enabled ? 1 : 0); + minimap_line -= (minimap_line > 0 && smooth_scroll_enabled ? 1 : 0); } else { minimap_line = 0; } @@ -2417,7 +2470,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { if (mm.is_valid()) { if (select_identifiers_enabled) { - if (mm->get_command() && mm->get_button_mask() == 0) { + if (!dragging_minimap && !dragging_selection && mm->get_command() && mm->get_button_mask() == 0) { String new_word = get_word_at_pos(mm->get_position()); if (new_word != highlighted_word) { @@ -2475,7 +2528,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { #endif if (select_identifiers_enabled) { - if (k->is_pressed()) { + if (k->is_pressed() && !dragging_minimap && !dragging_selection) { highlighted_word = get_word_at_pos(get_local_mouse_position()); update(); @@ -2804,19 +2857,51 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { // No need to indent if we are going upwards. if (auto_indent && !(k->get_command() && k->get_shift())) { - // Indent once again if previous line will end with ':' or '{' and the line is not a comment + // Indent once again if previous line will end with ':','{','[','(' and the line is not a comment // (i.e. colon/brace precedes current cursor position). - if (cursor.column > 0 && (text[cursor.line][cursor.column - 1] == ':' || text[cursor.line][cursor.column - 1] == '{') && !is_line_comment(cursor.line)) { - if (indent_using_spaces) { - ins += space_indent; - } else { - ins += "\t"; + if (cursor.column > 0) { + const Map<int, Text::ColorRegionInfo> &cri_map = text.get_color_region_info(cursor.line); + bool indent_char_found = false; + bool should_indent = false; + char indent_char = ':'; + char c = text[cursor.line][cursor.column]; + + for (int i = 0; i < cursor.column; i++) { + c = text[cursor.line][i]; + switch (c) { + case ':': + case '{': + case '[': + case '(': + indent_char_found = true; + should_indent = true; + indent_char = c; + continue; + } + + if (indent_char_found && cri_map.has(i) && (color_regions[cri_map[i].region].begin_key == "#" || color_regions[cri_map[i].region].begin_key == "//")) { + + should_indent = true; + break; + } else if (indent_char_found && !_is_whitespace(c)) { + should_indent = false; + indent_char_found = false; + } } - // No need to move the brace below if we are not taking the text with us. - if (text[cursor.line][cursor.column] == '}' && !k->get_command()) { - brace_indent = true; - ins += "\n" + ins.substr(1, ins.length() - 2); + if (!is_line_comment(cursor.line) && should_indent) { + if (indent_using_spaces) { + ins += space_indent; + } else { + ins += "\t"; + } + + // No need to move the brace below if we are not taking the text with us. + char closing_char = _get_right_pair_symbol(indent_char); + if ((closing_char != 0) && (closing_char == text[cursor.line][cursor.column]) && !k->get_command()) { + brace_indent = true; + ins += "\n" + ins.substr(1, ins.length() - 2); + } } } } @@ -3222,7 +3307,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { if (readonly) break; - if (k->get_shift() && !k->get_command() && !k->get_alt()) { + if (k->get_shift() && !k->get_command() && !k->get_alt() && is_shortcut_keys_enabled()) { cut(); break; } @@ -3453,13 +3538,15 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { scancode_handled = false; break; } - select_all(); + if (is_shortcut_keys_enabled()) { + select_all(); + } #else if ((!k->get_command() && !k->get_control())) { scancode_handled = false; break; } - if (!k->get_shift() && k->get_command()) + if (!k->get_shift() && k->get_command() && is_shortcut_keys_enabled()) select_all(); else if (k->get_control()) { if (k->get_shift()) @@ -3515,8 +3602,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { scancode_handled = false; break; } - - cut(); + if (is_shortcut_keys_enabled()) { + cut(); + } } break; case KEY_C: { @@ -3526,7 +3614,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { break; } - copy(); + if (is_shortcut_keys_enabled()) { + copy(); + } } break; case KEY_Z: { @@ -3540,10 +3630,12 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { break; } - if (k->get_shift()) - redo(); - else - undo(); + if (is_shortcut_keys_enabled()) { + if (k->get_shift()) + redo(); + else + undo(); + } } break; case KEY_Y: { @@ -3556,7 +3648,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { break; } - redo(); + if (is_shortcut_keys_enabled()) { + redo(); + } } break; case KEY_V: { if (readonly) { @@ -3567,7 +3661,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { break; } - paste(); + if (is_shortcut_keys_enabled()) { + paste(); + } } break; case KEY_SPACE: { @@ -3585,6 +3681,16 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { } break; + case KEY_MENU: { + if (context_menu_enabled) { + menu->set_position(get_global_transform().xform(_get_cursor_pixel_pos())); + menu->set_size(Vector2(1, 1)); + menu->set_scale(get_global_transform().get_scale()); + menu->popup(); + menu->grab_focus(); + } + } break; + default: { scancode_handled = false; @@ -3822,7 +3928,9 @@ void TextEdit::_base_insert_text(int p_line, int p_char, const String &p_text, i if (shift_first_line) { text.set_breakpoint(p_line + 1, text.is_breakpoint(p_line)); text.set_hidden(p_line + 1, text.is_hidden(p_line)); - text.set_info_icon(p_line + 1, text.get_info_icon(p_line), text.get_info(p_line)); + if (text.has_info_icon(p_line)) { + text.set_info_icon(p_line + 1, text.get_info_icon(p_line), text.get_info(p_line)); + } text.set_breakpoint(p_line, false); text.set_hidden(p_line, false); @@ -3906,7 +4014,7 @@ void TextEdit::_base_remove_text(int p_from_line, int p_from_column, int p_to_li void TextEdit::_insert_text(int p_line, int p_char, const String &p_text, int *r_end_line, int *r_end_char) { - if (!setting_text) + if (!setting_text && idle_detect->is_inside_tree()) idle_detect->start(); if (undo_enabled) { @@ -3960,7 +4068,7 @@ void TextEdit::_insert_text(int p_line, int p_char, const String &p_text, int *r void TextEdit::_remove_text(int p_from_line, int p_from_column, int p_to_line, int p_to_column) { - if (!setting_text) + if (!setting_text && idle_detect->is_inside_tree()) idle_detect->start(); String text; @@ -4011,6 +4119,7 @@ void TextEdit::_insert_text_at_cursor(const String &p_text) { int new_column, new_line; _insert_text(cursor.line, cursor.column, p_text, &new_line, &new_column); + _update_scrollbars(); cursor_set_line(new_line); cursor_set_column(new_column); @@ -4061,6 +4170,25 @@ int TextEdit::_get_control_height() const { return control_height; } +void TextEdit::_generate_context_menu() { + // Reorganize context menu. + menu->clear(); + if (!readonly) + menu->add_item(RTR("Cut"), MENU_CUT, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_X : 0); + menu->add_item(RTR("Copy"), MENU_COPY, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_C : 0); + if (!readonly) + menu->add_item(RTR("Paste"), MENU_PASTE, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_V : 0); + menu->add_separator(); + if (is_selecting_enabled()) + menu->add_item(RTR("Select All"), MENU_SELECT_ALL, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_A : 0); + if (!readonly) { + menu->add_item(RTR("Clear"), MENU_CLEAR); + menu->add_separator(); + menu->add_item(RTR("Undo"), MENU_UNDO, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_Z : 0); + menu->add_item(RTR("Redo"), MENU_REDO, is_shortcut_keys_enabled() ? KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_Z : 0); + } +} + int TextEdit::get_visible_rows() const { return _get_control_height() / get_row_height(); } @@ -4671,6 +4799,9 @@ void TextEdit::set_text(String p_text) { selection.active = false; } + cursor_set_line(0); + cursor_set_column(0); + update(); setting_text = false; }; @@ -4769,6 +4900,7 @@ void TextEdit::set_readonly(bool p_readonly) { return; readonly = p_readonly; + _generate_context_menu(); // Reorganize context menu. menu->clear(); @@ -4971,15 +5103,18 @@ Map<int, TextEdit::Text::ColorRegionInfo> TextEdit::_get_line_color_region_info( void TextEdit::clear_colors() { keywords.clear(); + member_keywords.clear(); color_regions.clear(); color_region_cache.clear(); syntax_highlighting_cache.clear(); text.clear_width_cache(); + update(); } void TextEdit::add_keyword_color(const String &p_keyword, const Color &p_color) { keywords[p_keyword] = p_color; + syntax_highlighting_cache.clear(); update(); } @@ -4996,12 +5131,14 @@ Color TextEdit::get_keyword_color(String p_keyword) const { void TextEdit::add_color_region(const String &p_begin_key, const String &p_end_key, const Color &p_color, bool p_line_only) { color_regions.push_back(ColorRegion(p_begin_key, p_end_key, p_color, p_line_only)); + syntax_highlighting_cache.clear(); text.clear_width_cache(); update(); } void TextEdit::add_member_keyword(const String &p_keyword, const Color &p_color) { member_keywords[p_keyword] = p_color; + syntax_highlighting_cache.clear(); update(); } @@ -5015,6 +5152,7 @@ Color TextEdit::get_member_color(String p_member) const { void TextEdit::clear_member_keywords() { member_keywords.clear(); + syntax_highlighting_cache.clear(); update(); } @@ -5108,6 +5246,8 @@ void TextEdit::paste() { } void TextEdit::select_all() { + if (!selecting_enabled) + return; if (text.size() == 1 && text[0].length() == 0) return; @@ -5132,6 +5272,8 @@ void TextEdit::deselect() { } void TextEdit::select(int p_from_line, int p_from_column, int p_to_line, int p_to_column) { + if (!selecting_enabled) + return; if (p_from_line < 0) p_from_line = 0; @@ -5303,11 +5445,11 @@ int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_searc PoolVector<int> TextEdit::_search_bind(const String &p_key, uint32_t p_search_flags, int p_from_line, int p_from_column) const { int col, line; - if (search(p_key, p_search_flags, p_from_line, p_from_column, col, line)) { + if (search(p_key, p_search_flags, p_from_line, p_from_column, line, col)) { PoolVector<int> result; result.resize(2); - result.set(0, line); - result.set(1, col); + result.set(SEARCH_RESULT_COLUMN, col); + result.set(SEARCH_RESULT_LINE, line); return result; } else { @@ -5551,9 +5693,7 @@ void TextEdit::set_line_info_icon(int p_line, Ref<Texture> p_icon, String p_info } void TextEdit::clear_info_icons() { - for (int i = 0; i < text.size(); i++) { - text.set_info_icon(i, NULL, ""); - } + text.clear_info_icons(); update(); } @@ -5830,7 +5970,7 @@ void TextEdit::unfold_line(int p_line) { if (!is_folded(p_line) && !is_line_hidden(p_line)) return; - int fold_start = p_line; + int fold_start; for (fold_start = p_line; fold_start > 0; fold_start--) { if (is_folded(fold_start)) break; @@ -5935,6 +6075,7 @@ void TextEdit::undo() { } } + _update_scrollbars(); if (undo_stack_pos->get().type == TextOperation::TYPE_REMOVE) { cursor_set_line(undo_stack_pos->get().to_line); cursor_set_column(undo_stack_pos->get().to_column); @@ -5970,6 +6111,8 @@ void TextEdit::redo() { break; } } + + _update_scrollbars(); cursor_set_line(undo_stack_pos->get().to_line); cursor_set_column(undo_stack_pos->get().to_column); undo_stack_pos = undo_stack_pos->next(); @@ -6027,7 +6170,7 @@ bool TextEdit::is_indent_using_spaces() const { } void TextEdit::set_indent_size(const int p_size) { - ERR_FAIL_COND(p_size <= 0); + ERR_FAIL_COND_MSG(p_size <= 0, "Indend size must be greater than 0."); indent_size = p_size; text.set_indent_size(p_size); @@ -6245,9 +6388,10 @@ void TextEdit::_confirm_completion() { String line = text[cursor.line]; CharType next_char = line[cursor.column]; CharType last_completion_char = completion_current.insert_text[completion_current.insert_text.length() - 1]; + CharType last_completion_char_display = completion_current.display[completion_current.display.length() - 1]; - if ((last_completion_char == '"' || last_completion_char == '\'') && last_completion_char == next_char) { - _base_remove_text(cursor.line, cursor.column, cursor.line, cursor.column + 1); + if ((last_completion_char == '"' || last_completion_char == '\'') && (last_completion_char == next_char || last_completion_char_display == next_char)) { + _remove_text(cursor.line, cursor.column, cursor.line, cursor.column + 1); } if (last_completion_char == '(') { @@ -6393,6 +6537,7 @@ void TextEdit::_update_completion_candidates() { if (inquote && restore_quotes == 1 && !option.display.is_quoted()) { String quote = single_quote ? "'" : "\""; option.display = option.display.quote(quote); + option.insert_text = option.insert_text.quote(quote); } if (option.display.begins_with(s)) { @@ -6775,6 +6920,29 @@ bool TextEdit::is_context_menu_enabled() { return context_menu_enabled; } +void TextEdit::set_shortcut_keys_enabled(bool p_enabled) { + shortcut_keys_enabled = p_enabled; + + _generate_context_menu(); +} + +void TextEdit::set_selecting_enabled(bool p_enabled) { + selecting_enabled = p_enabled; + + if (!selecting_enabled) + deselect(); + + _generate_context_menu(); +} + +bool TextEdit::is_selecting_enabled() const { + return selecting_enabled; +} + +bool TextEdit::is_shortcut_keys_enabled() const { + return shortcut_keys_enabled; +} + PopupMenu *TextEdit::get_menu() const { return menu; } @@ -6795,6 +6963,9 @@ void TextEdit::_bind_methods() { BIND_ENUM_CONSTANT(SEARCH_WHOLE_WORDS); BIND_ENUM_CONSTANT(SEARCH_BACKWARDS); + BIND_ENUM_CONSTANT(SEARCH_RESULT_COLUMN); + BIND_ENUM_CONSTANT(SEARCH_RESULT_LINE); + /* ClassDB::bind_method(D_METHOD("delete_char"),&TextEdit::delete_char); ClassDB::bind_method(D_METHOD("delete_line"),&TextEdit::delete_line); @@ -6830,6 +7001,10 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("is_wrap_enabled"), &TextEdit::is_wrap_enabled); ClassDB::bind_method(D_METHOD("set_context_menu_enabled", "enable"), &TextEdit::set_context_menu_enabled); ClassDB::bind_method(D_METHOD("is_context_menu_enabled"), &TextEdit::is_context_menu_enabled); + ClassDB::bind_method(D_METHOD("set_shortcut_keys_enabled", "enable"), &TextEdit::set_shortcut_keys_enabled); + ClassDB::bind_method(D_METHOD("is_shortcut_keys_enabled"), &TextEdit::is_shortcut_keys_enabled); + ClassDB::bind_method(D_METHOD("set_selecting_enabled", "enable"), &TextEdit::set_selecting_enabled); + ClassDB::bind_method(D_METHOD("is_selecting_enabled"), &TextEdit::is_selecting_enabled); ClassDB::bind_method(D_METHOD("cut"), &TextEdit::cut); ClassDB::bind_method(D_METHOD("copy"), &TextEdit::copy); @@ -6920,6 +7095,8 @@ void TextEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), "set_highlight_all_occurrences", "is_highlight_all_occurrences_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_selected_font_color"), "set_override_selected_font_color", "is_overriding_selected_font_color"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "context_menu_enabled"), "set_context_menu_enabled", "is_context_menu_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "selecting_enabled"), "set_selecting_enabled", "is_selecting_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smooth_scrolling"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled"); ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_scroll_speed"), "set_v_scroll_speed", "get_v_scroll_speed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hiding_enabled"), "set_hiding_enabled", "is_hiding_enabled"); @@ -7078,7 +7255,9 @@ TextEdit::TextEdit() { minimap_char_size = Point2(1, 2); minimap_line_spacing = 1; + selecting_enabled = true; context_menu_enabled = true; + shortcut_keys_enabled = true; menu = memnew(PopupMenu); add_child(menu); readonly = true; // Initialise to opposite first, so we get past the early-out in set_readonly. diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index 9c568acd93..594366de7d 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -78,6 +78,7 @@ public: bool bookmark : 1; bool hidden : 1; bool safe : 1; + bool has_info : 1; int wrap_amount_cache : 24; Map<int, ColorRegionInfo> region_info; Ref<Texture> info_icon; @@ -115,10 +116,15 @@ public: void set_safe(int p_line, bool p_safe) { text.write[p_line].safe = p_safe; } bool is_safe(int p_line) const { return text[p_line].safe; } void set_info_icon(int p_line, Ref<Texture> p_icon, String p_info) { + if (p_icon.is_null()) { + text.write[p_line].has_info = false; + return; + } text.write[p_line].info_icon = p_icon; text.write[p_line].info = p_info; + text.write[p_line].has_info = true; } - bool has_info_icon(int p_line) const { return text[p_line].info_icon.is_valid(); } + bool has_info_icon(int p_line) const { return text[p_line].has_info; } const Ref<Texture> &get_info_icon(int p_line) const { return text[p_line].info_icon; } const String &get_info(int p_line) const { return text[p_line].info; } void insert(int p_at, const String &p_text); @@ -127,6 +133,7 @@ public: void clear(); void clear_width_cache(); void clear_wrap_cache(); + void clear_info_icons(); _FORCE_INLINE_ const String &operator[](int p_line) const { return text[p_line].data; } Text() { indent_size = 4; } }; @@ -365,10 +372,15 @@ private: int search_result_line; int search_result_col; + bool selecting_enabled; + bool context_menu_enabled; + bool shortcut_keys_enabled; int executing_line; + void _generate_context_menu(); + int get_visible_rows() const; int get_total_visible_rows() const; @@ -492,12 +504,16 @@ public: }; enum SearchFlags { - SEARCH_MATCH_CASE = 1, SEARCH_WHOLE_WORDS = 2, SEARCH_BACKWARDS = 4 }; + enum SearchResult { + SEARCH_RESULT_COLUMN, + SEARCH_RESULT_LINE, + }; + virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const; void _get_mouse_pos(const Point2i &p_mouse, int &r_row, int &r_col) const; @@ -582,6 +598,7 @@ public: int cursor_get_column() const; int cursor_get_line() const; + Vector2i _get_cursor_pixel_pos(); bool cursor_get_blink_enabled() const; void cursor_set_blink_enabled(const bool p_enabled); @@ -737,6 +754,12 @@ public: void set_context_menu_enabled(bool p_enable); bool is_context_menu_enabled(); + void set_selecting_enabled(bool p_enabled); + bool is_selecting_enabled() const; + + void set_shortcut_keys_enabled(bool p_enabled); + bool is_shortcut_keys_enabled() const; + PopupMenu *get_menu() const; String get_text_for_completion(); @@ -749,6 +772,7 @@ public: VARIANT_ENUM_CAST(TextEdit::MenuItems); VARIANT_ENUM_CAST(TextEdit::SearchFlags); +VARIANT_ENUM_CAST(TextEdit::SearchResult); class SyntaxHighlighter { protected: diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp index c534df5cbe..9b60a9d1c3 100644 --- a/scene/gui/texture_progress.cpp +++ b/scene/gui/texture_progress.cpp @@ -344,6 +344,9 @@ void TextureProgress::_notification(int p_what) { case FILL_CLOCKWISE: case FILL_COUNTER_CLOCKWISE: case FILL_CLOCKWISE_AND_COUNTER_CLOCKWISE: { + if (nine_patch_stretch) + s = get_size(); + float val = get_as_ratio() * rad_max_degrees / 360; if (val == 1) { Rect2 region = Rect2(Point2(), s); @@ -384,7 +387,13 @@ void TextureProgress::_notification(int p_what) { draw_polygon(points, colors, uvs, progress); } if (Engine::get_singleton()->is_editor_hint()) { - Point2 p = progress->get_size(); + Point2 p; + + if (nine_patch_stretch) + p = get_size(); + else + p = progress->get_size(); + p.x *= get_relative_center().x; p.y *= get_relative_center().y; p = p.floor(); diff --git a/scene/gui/texture_rect.cpp b/scene/gui/texture_rect.cpp index 423794d8ba..473cee5ca1 100644 --- a/scene/gui/texture_rect.cpp +++ b/scene/gui/texture_rect.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "texture_rect.h" +#include "core/core_string_names.h" #include "servers/visual_server.h" void TextureRect::_notification(int p_what) { @@ -123,6 +124,7 @@ void TextureRect::_bind_methods() { ClassDB::bind_method(D_METHOD("is_flipped_v"), &TextureRect::is_flipped_v); ClassDB::bind_method(D_METHOD("set_stretch_mode", "stretch_mode"), &TextureRect::set_stretch_mode); ClassDB::bind_method(D_METHOD("get_stretch_mode"), &TextureRect::get_stretch_mode); + ClassDB::bind_method(D_METHOD("_texture_changed"), &TextureRect::_texture_changed); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "expand"), "set_expand", "has_expand"); @@ -140,9 +142,27 @@ void TextureRect::_bind_methods() { BIND_ENUM_CONSTANT(STRETCH_KEEP_ASPECT_COVERED); } +void TextureRect::_texture_changed() { + + if (texture.is_valid()) { + update(); + minimum_size_changed(); + } +} + void TextureRect::set_texture(const Ref<Texture> &p_tex) { + if (p_tex == texture) + return; + + if (texture.is_valid()) + texture->disconnect(CoreStringNames::get_singleton()->changed, this, "_texture_changed"); + texture = p_tex; + + if (texture.is_valid()) + texture->connect(CoreStringNames::get_singleton()->changed, this, "_texture_changed"); + update(); /* if (texture.is_valid()) diff --git a/scene/gui/texture_rect.h b/scene/gui/texture_rect.h index 1c5bd9d99c..d144020562 100644 --- a/scene/gui/texture_rect.h +++ b/scene/gui/texture_rect.h @@ -56,6 +56,8 @@ private: Ref<Texture> texture; StretchMode stretch_mode; + void _texture_changed(); + protected: void _notification(int p_what); virtual Size2 get_minimum_size() const; diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 2a18436a5e..2c38676c83 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -328,7 +328,7 @@ void TreeItem::set_collapsed(bool p_collapsed) { ci = ci->parent; } - if (ci) { // collapsing cursor/selectd, move it! + if (ci) { // collapsing cursor/selected, move it! if (tree->select_mode == Tree::SELECT_MULTI) { @@ -547,6 +547,11 @@ Ref<Texture> TreeItem::get_button(int p_column, int p_idx) const { ERR_FAIL_INDEX_V(p_idx, cells[p_column].buttons.size(), Ref<Texture>()); return cells[p_column].buttons[p_idx].texture; } +String TreeItem::get_button_tooltip(int p_column, int p_idx) const { + ERR_FAIL_INDEX_V(p_column, cells.size(), String()); + ERR_FAIL_INDEX_V(p_idx, cells[p_column].buttons.size(), String()); + return cells[p_column].buttons[p_idx].tooltip; +} int TreeItem::get_button_id(int p_column, int p_idx) const { ERR_FAIL_INDEX_V(p_column, cells.size(), -1); ERR_FAIL_INDEX_V(p_idx, cells[p_column].buttons.size(), -1); @@ -724,6 +729,43 @@ bool TreeItem::is_folding_disabled() const { return disable_folding; } +Variant TreeItem::_call_recursive_bind(const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + + if (p_argcount < 1) { + r_error.error = Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS; + r_error.argument = 0; + return Variant(); + } + + if (p_args[0]->get_type() != Variant::STRING) { + r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument = 0; + r_error.expected = Variant::STRING; + return Variant(); + } + + StringName method = *p_args[0]; + + call_recursive(method, &p_args[1], p_argcount - 1, r_error); + return Variant(); +} + +void recursive_call_aux(TreeItem *p_item, const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + if (!p_item) { + return; + } + p_item->call(p_method, p_args, p_argcount, r_error); + TreeItem *c = p_item->get_children(); + while (c) { + recursive_call_aux(c, p_method, p_args, p_argcount, r_error); + c = c->get_next(); + } +} + +void TreeItem::call_recursive(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error) { + recursive_call_aux(this, p_method, p_args, p_argcount, r_error); +} + void TreeItem::_bind_methods() { ClassDB::bind_method(D_METHOD("set_cell_mode", "column", "mode"), &TreeItem::set_cell_mode); @@ -785,6 +827,7 @@ void TreeItem::_bind_methods() { ClassDB::bind_method(D_METHOD("set_custom_color", "column", "color"), &TreeItem::set_custom_color); ClassDB::bind_method(D_METHOD("clear_custom_color", "column"), &TreeItem::clear_custom_color); + ClassDB::bind_method(D_METHOD("get_custom_color", "column"), &TreeItem::get_custom_color); ClassDB::bind_method(D_METHOD("set_custom_bg_color", "column", "color", "just_outline"), &TreeItem::set_custom_bg_color, DEFVAL(false)); ClassDB::bind_method(D_METHOD("clear_custom_bg_color", "column"), &TreeItem::clear_custom_bg_color); @@ -795,6 +838,7 @@ void TreeItem::_bind_methods() { ClassDB::bind_method(D_METHOD("add_button", "column", "button", "button_idx", "disabled", "tooltip"), &TreeItem::add_button, DEFVAL(-1), DEFVAL(false), DEFVAL("")); ClassDB::bind_method(D_METHOD("get_button_count", "column"), &TreeItem::get_button_count); + ClassDB::bind_method(D_METHOD("get_button_tooltip", "column", "button_idx"), &TreeItem::get_button_tooltip); ClassDB::bind_method(D_METHOD("get_button", "column", "button_idx"), &TreeItem::get_button); ClassDB::bind_method(D_METHOD("set_button", "column", "button_idx", "button"), &TreeItem::set_button); ClassDB::bind_method(D_METHOD("erase_button", "column", "button_idx"), &TreeItem::erase_button); @@ -814,6 +858,14 @@ void TreeItem::_bind_methods() { ClassDB::bind_method(D_METHOD("set_disable_folding", "disable"), &TreeItem::set_disable_folding); ClassDB::bind_method(D_METHOD("is_folding_disabled"), &TreeItem::is_folding_disabled); + { + MethodInfo mi; + mi.name = "call_recursive"; + mi.arguments.push_back(PropertyInfo(Variant::STRING, "method")); + + ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "call_recursive", &TreeItem::_call_recursive_bind, mi); + } + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collapsed"), "set_collapsed", "is_collapsed"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disable_folding"), "set_disable_folding", "is_folding_disabled"); ADD_PROPERTY(PropertyInfo(Variant::INT, "custom_minimum_height", PROPERTY_HINT_RANGE, "0,1000,1"), "set_custom_minimum_height", "get_custom_minimum_height"); @@ -914,7 +966,6 @@ void Tree::update_cache() { cache.arrow_collapsed = get_icon("arrow_collapsed"); cache.arrow = get_icon("arrow"); cache.select_arrow = get_icon("select_arrow"); - cache.select_option = get_icon("select_option"); cache.updown = get_icon("updown"); cache.custom_button = get_stylebox("custom_button"); @@ -930,7 +981,6 @@ void Tree::update_cache() { cache.vseparation = get_constant("vseparation"); cache.item_margin = get_constant("item_margin"); cache.button_margin = get_constant("button_margin"); - cache.guide_width = get_constant("guide_width"); cache.draw_guides = get_constant("draw_guides"); cache.draw_relationship_lines = get_constant("draw_relationship_lines"); cache.relationship_line_color = get_color("relationship_line_color"); @@ -1184,7 +1234,7 @@ int Tree::draw_item(const Point2i &p_pos, const Point2 &p_draw_ofs, const Size2 } } - if (select_mode != SELECT_ROW && (p_item->cells[i].selected || selected_item == p_item)) { + if ((select_mode == SELECT_ROW && selected_item == p_item) || p_item->cells[i].selected) { Rect2i r(cell_rect.position, cell_rect.size); if (p_item->cells[i].text.size() > 0) { @@ -2548,7 +2598,9 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { } else { Rect2 rect = get_selected()->get_meta("__focus_rect"); if (rect.has_point(Point2(b->get_position().x, b->get_position().y))) { - edit_selected(); + if (!edit_selected()) { + emit_signal("item_double_clicked"); + } } else { emit_signal("item_double_clicked"); } @@ -2671,11 +2723,21 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { } break; case BUTTON_WHEEL_UP: { + double prev_value = v_scroll->get_value(); v_scroll->set_value(v_scroll->get_value() - v_scroll->get_page() * b->get_factor() / 8); + if (v_scroll->get_value() != prev_value) { + accept_event(); + } + } break; case BUTTON_WHEEL_DOWN: { + double prev_value = v_scroll->get_value(); v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * b->get_factor() / 8); + if (v_scroll->get_value() != prev_value) { + accept_event(); + } + } break; } } @@ -2683,7 +2745,11 @@ void Tree::_gui_input(Ref<InputEvent> p_event) { Ref<InputEventPanGesture> pan_gesture = p_event; if (pan_gesture.is_valid()) { + double prev_value = v_scroll->get_value(); v_scroll->set_value(v_scroll->get_value() + v_scroll->get_page() * pan_gesture->get_delta().y / 8); + if (v_scroll->get_value() != prev_value) { + accept_event(); + } } } @@ -2699,7 +2765,6 @@ bool Tree::edit_selected() { return false; Rect2 rect = s->get_meta("__focus_rect"); - popup_edited_item = s; popup_edited_item_col = col; diff --git a/scene/gui/tree.h b/scene/gui/tree.h index fdc6da5055..361830173b 100644 --- a/scene/gui/tree.h +++ b/scene/gui/tree.h @@ -172,6 +172,8 @@ protected: remove_child(Object::cast_to<TreeItem>(p_child)); } + Variant _call_recursive_bind(const Variant **p_args, int p_argcount, Variant::CallError &r_error); + public: /* cell mode */ void set_cell_mode(int p_column, TreeCellMode p_mode); @@ -201,6 +203,7 @@ public: void add_button(int p_column, const Ref<Texture> &p_button, int p_id = -1, bool p_disabled = false, const String &p_tooltip = ""); int get_button_count(int p_column) const; + String get_button_tooltip(int p_column, int p_idx) const; Ref<Texture> get_button(int p_column, int p_idx) const; int get_button_id(int p_column, int p_idx) const; void erase_button(int p_column, int p_idx); @@ -279,6 +282,8 @@ public: void set_disable_folding(bool p_disable); bool is_folding_disabled() const; + void call_recursive(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error); + ~TreeItem(); }; @@ -416,7 +421,6 @@ private: Ref<Texture> arrow_collapsed; Ref<Texture> arrow; Ref<Texture> select_arrow; - Ref<Texture> select_option; Ref<Texture> updown; Color font_color; @@ -429,7 +433,6 @@ private: int hseparation; int vseparation; int item_margin; - int guide_width; int button_margin; Point2 offset; int draw_relationship_lines; diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index 5768f58977..fd2d4a1a11 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -36,6 +36,10 @@ int VideoPlayer::sp_get_channel_count() const { + if (playback.is_null()) { + return 0; + } + return playback->get_channels(); } @@ -56,6 +60,9 @@ bool VideoPlayer::mix(AudioFrame *p_buffer, int p_frames) { // Called from main thread (eg VideoStreamPlaybackWebm::update) int VideoPlayer::_audio_mix_callback(void *p_udata, const float *p_data, int p_frames) { + ERR_FAIL_NULL_V(p_udata, 0); + ERR_FAIL_NULL_V(p_data, 0); + VideoPlayer *vp = (VideoPlayer *)p_udata; int todo = MIN(vp->resampler.get_writer_space(), p_frames); @@ -71,6 +78,12 @@ int VideoPlayer::_audio_mix_callback(void *p_udata, const float *p_data, int p_f return todo; } +void VideoPlayer::_mix_audios(void *p_self) { + + ERR_FAIL_NULL(p_self); + reinterpret_cast<VideoPlayer *>(p_self)->_mix_audio(); +} + // Called from audio thread void VideoPlayer::_mix_audio() { @@ -143,7 +156,7 @@ void VideoPlayer::_notification(int p_notification) { bus_index = AudioServer::get_singleton()->thread_find_bus_index(bus); - if (stream.is_null() || paused || !playback->is_playing()) + if (stream.is_null() || paused || playback.is_null() || !playback->is_playing()) return; double audio_time = USEC_TO_SEC(OS::get_singleton()->get_ticks_usec()); @@ -358,7 +371,7 @@ void VideoPlayer::set_stream_position(float p_position) { playback->seek(p_position); } -Ref<Texture> VideoPlayer::get_video_texture() { +Ref<Texture> VideoPlayer::get_video_texture() const { if (playback.is_valid()) return playback->get_texture(); @@ -394,9 +407,9 @@ StringName VideoPlayer::get_bus() const { return "Master"; } -void VideoPlayer::_validate_property(PropertyInfo &property) const { +void VideoPlayer::_validate_property(PropertyInfo &p_property) const { - if (property.name == "bus") { + if (p_property.name == "bus") { String options; for (int i = 0; i < AudioServer::get_singleton()->get_bus_count(); i++) { @@ -406,7 +419,7 @@ void VideoPlayer::_validate_property(PropertyInfo &property) const { options += name; } - property.hint_string = options; + p_property.hint_string = options; } } diff --git a/scene/gui/video_player.h b/scene/gui/video_player.h index 62fb7838b6..7d2821427e 100644 --- a/scene/gui/video_player.h +++ b/scene/gui/video_player.h @@ -55,7 +55,6 @@ class VideoPlayer : public Control { RID stream_rid; Ref<ImageTexture> texture; - Ref<Image> last_frame; AudioRBResampler resampler; Vector<AudioFrame> mix_buffer; @@ -75,19 +74,19 @@ class VideoPlayer : public Control { void _mix_audio(); static int _audio_mix_callback(void *p_udata, const float *p_data, int p_frames); - static void _mix_audios(void *self) { reinterpret_cast<VideoPlayer *>(self)->_mix_audio(); } + static void _mix_audios(void *p_self); protected: static void _bind_methods(); void _notification(int p_notification); - void _validate_property(PropertyInfo &property) const; + void _validate_property(PropertyInfo &p_property) const; public: Size2 get_minimum_size() const; void set_expand(bool p_expand); bool has_expand() const; - Ref<Texture> get_video_texture(); + Ref<Texture> get_video_texture() const; void set_stream(const Ref<VideoStream> &p_stream); Ref<VideoStream> get_stream() const; diff --git a/scene/main/node.cpp b/scene/main/node.cpp index bd01ca2886..217dacfbfe 100644 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -2171,7 +2171,7 @@ void Node::_duplicate_and_reown(Node *p_new_parent, const Map<Node *, Node *> &p if (get_filename() != "") { Ref<PackedScene> res = ResourceLoader::load(get_filename()); - ERR_FAIL_COND(res.is_null()); + ERR_FAIL_COND_MSG(res.is_null(), "Cannot load scene: " + get_filename()); node = res->instance(); ERR_FAIL_COND(!node); } else { @@ -2832,6 +2832,8 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("rset_unreliable", "property", "value"), &Node::rset_unreliable); ClassDB::bind_method(D_METHOD("rset_unreliable_id", "peer_id", "property", "value"), &Node::rset_unreliable_id); + ClassDB::bind_method(D_METHOD("update_configuration_warning"), &Node::update_configuration_warning); + BIND_CONSTANT(NOTIFICATION_ENTER_TREE); BIND_CONSTANT(NOTIFICATION_EXIT_TREE); BIND_CONSTANT(NOTIFICATION_MOVED_IN_PARENT); @@ -2861,6 +2863,8 @@ void Node::_bind_methods() { BIND_CONSTANT(NOTIFICATION_WM_ABOUT); BIND_CONSTANT(NOTIFICATION_CRASH); BIND_CONSTANT(NOTIFICATION_OS_IME_UPDATE); + BIND_CONSTANT(NOTIFICATION_APP_RESUMED); + BIND_CONSTANT(NOTIFICATION_APP_PAUSED); BIND_ENUM_CONSTANT(PAUSE_MODE_INHERIT); BIND_ENUM_CONSTANT(PAUSE_MODE_STOP); diff --git a/scene/main/node.h b/scene/main/node.h index 51a1436014..a8bcd2f273 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -250,7 +250,9 @@ public: NOTIFICATION_TRANSLATION_CHANGED = MainLoop::NOTIFICATION_TRANSLATION_CHANGED, NOTIFICATION_WM_ABOUT = MainLoop::NOTIFICATION_WM_ABOUT, NOTIFICATION_CRASH = MainLoop::NOTIFICATION_CRASH, - NOTIFICATION_OS_IME_UPDATE = MainLoop::NOTIFICATION_OS_IME_UPDATE + NOTIFICATION_OS_IME_UPDATE = MainLoop::NOTIFICATION_OS_IME_UPDATE, + NOTIFICATION_APP_RESUMED = MainLoop::NOTIFICATION_APP_RESUMED, + NOTIFICATION_APP_PAUSED = MainLoop::NOTIFICATION_APP_PAUSED }; diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 5483fe1d6f..38ad6886b1 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -70,15 +70,25 @@ float SceneTreeTimer::get_time_left() const { } void SceneTreeTimer::set_pause_mode_process(bool p_pause_mode_process) { - if (process_pause != p_pause_mode_process) { - process_pause = p_pause_mode_process; - } + + process_pause = p_pause_mode_process; } bool SceneTreeTimer::is_pause_mode_process() { return process_pause; } +void SceneTreeTimer::release_connections() { + + List<Connection> connections; + get_all_signal_connections(&connections); + + for (List<Connection>::Element *E = connections.front(); E; E = E->next()) { + Connection const &connection = E->get(); + disconnect(connection.signal, connection.target, connection.method); + } +} + SceneTreeTimer::SceneTreeTimer() { time_left = 0; process_pause = true; @@ -561,6 +571,8 @@ bool SceneTree::idle(float p_time) { E = N; } + flush_transform_notifications(); //additional transforms after timers update + _call_idle_callbacks(); #ifdef TOOLS_ENABLED @@ -610,6 +622,12 @@ void SceneTree::finish() { memdelete(root); //delete root root = NULL; } + + // cleanup timers + for (List<Ref<SceneTreeTimer> >::Element *E = timers.front(); E; E = E->next()) { + E->get()->release_connections(); + } + timers.clear(); } void SceneTree::quit() { @@ -630,6 +648,7 @@ void SceneTree::_notification(int p_notification) { break; } } break; + case NOTIFICATION_WM_GO_BACK_REQUEST: { get_root()->propagate_notification(p_notification); @@ -639,28 +658,23 @@ void SceneTree::_notification(int p_notification) { break; } } break; - case NOTIFICATION_OS_MEMORY_WARNING: - case NOTIFICATION_OS_IME_UPDATE: - case NOTIFICATION_WM_MOUSE_ENTER: - case NOTIFICATION_WM_MOUSE_EXIT: - case NOTIFICATION_WM_FOCUS_IN: - case NOTIFICATION_WM_FOCUS_OUT: - case NOTIFICATION_WM_ABOUT: { - if (p_notification == NOTIFICATION_WM_FOCUS_IN) { - InputDefault *id = Object::cast_to<InputDefault>(Input::get_singleton()); - if (id) { - id->ensure_touch_mouse_raised(); - } + case NOTIFICATION_WM_FOCUS_IN: { + + InputDefault *id = Object::cast_to<InputDefault>(Input::get_singleton()); + if (id) { + id->ensure_touch_mouse_raised(); } get_root()->propagate_notification(p_notification); } break; + case NOTIFICATION_TRANSLATION_CHANGED: { if (!Engine::get_singleton()->is_editor_hint()) { get_root()->propagate_notification(p_notification); } } break; + case NOTIFICATION_WM_UNFOCUS_REQUEST: { notify_group_flags(GROUP_CALL_REALTIME | GROUP_CALL_MULTILEVEL, "input", NOTIFICATION_WM_UNFOCUS_REQUEST); @@ -669,7 +683,15 @@ void SceneTree::_notification(int p_notification) { } break; - case NOTIFICATION_CRASH: { + case NOTIFICATION_OS_MEMORY_WARNING: + case NOTIFICATION_OS_IME_UPDATE: + case NOTIFICATION_WM_MOUSE_ENTER: + case NOTIFICATION_WM_MOUSE_EXIT: + case NOTIFICATION_WM_FOCUS_OUT: + case NOTIFICATION_WM_ABOUT: + case NOTIFICATION_CRASH: + case NOTIFICATION_APP_RESUMED: + case NOTIFICATION_APP_PAUSED: { get_root()->propagate_notification(p_notification); } break; diff --git a/scene/main/scene_tree.h b/scene/main/scene_tree.h index d387886d61..ef847ebb5b 100644 --- a/scene/main/scene_tree.h +++ b/scene/main/scene_tree.h @@ -61,6 +61,8 @@ public: void set_pause_mode_process(bool p_pause_mode_process); bool is_pause_mode_process(); + void release_connections(); + SceneTreeTimer(); }; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 0b26602b68..d060ac273d 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -98,22 +98,22 @@ NodePath ViewportTexture::get_viewport_path_in_scene() const { int ViewportTexture::get_width() const { - ERR_FAIL_COND_V(!vp, 0); + ERR_FAIL_COND_V_MSG(!vp, 0, "Viewport Texture must be set to use it."); return vp->size.width; } int ViewportTexture::get_height() const { - ERR_FAIL_COND_V(!vp, 0); + ERR_FAIL_COND_V_MSG(!vp, 0, "Viewport Texture must be set to use it."); return vp->size.height; } Size2 ViewportTexture::get_size() const { - ERR_FAIL_COND_V(!vp, Size2()); + ERR_FAIL_COND_V_MSG(!vp, Size2(), "Viewport Texture must be set to use it."); return vp->size; } RID ViewportTexture::get_rid() const { - //ERR_FAIL_COND_V(!vp, RID()); + //ERR_FAIL_COND_V_MSG(!vp, RID(), "Viewport Texture must be set to use it."); return proxy; } @@ -123,7 +123,7 @@ bool ViewportTexture::has_alpha() const { } Ref<Image> ViewportTexture::get_data() const { - ERR_FAIL_COND_V(!vp, Ref<Image>()); + ERR_FAIL_COND_V_MSG(!vp, Ref<Image>(), "Viewport Texture must be set to use it."); return VS::get_singleton()->texture_get_data(vp->texture_rid); } void ViewportTexture::set_flags(uint32_t p_flags) { @@ -1465,18 +1465,19 @@ void Viewport::_gui_show_tooltip() { rp->add_child(gui.tooltip_popup); gui.tooltip_popup->force_parent_owned(); gui.tooltip_popup->set_as_toplevel(true); - //gui.tooltip_popup->hide(); + if (gui.tooltip) // Avoids crash when rapidly switching controls. + gui.tooltip_popup->set_scale(gui.tooltip->get_global_transform().get_scale()); Point2 tooltip_offset = ProjectSettings::get_singleton()->get("display/mouse_cursor/tooltip_position_offset"); Rect2 r(gui.tooltip_pos + tooltip_offset, gui.tooltip_popup->get_minimum_size()); Rect2 vr = gui.tooltip_popup->get_viewport_rect(); - if (r.size.x + r.position.x > vr.size.x) - r.position.x = vr.size.x - r.size.x; + if (r.size.x * gui.tooltip_popup->get_scale().x + r.position.x > vr.size.x) + r.position.x = vr.size.x - r.size.x * gui.tooltip_popup->get_scale().x; else if (r.position.x < 0) r.position.x = 0; - if (r.size.y + r.position.y > vr.size.y) - r.position.y = vr.size.y - r.size.y; + if (r.size.y * gui.tooltip_popup->get_scale().y + r.position.y > vr.size.y) + r.position.y = vr.size.y - r.size.y * gui.tooltip_popup->get_scale().y; else if (r.position.y < 0) r.position.y = 0; @@ -1742,6 +1743,12 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { return; // no one gets the event if exclusive NO ONE } + if (mb->get_button_index() == BUTTON_WHEEL_UP || mb->get_button_index() == BUTTON_WHEEL_DOWN || mb->get_button_index() == BUTTON_WHEEL_LEFT || mb->get_button_index() == BUTTON_WHEEL_RIGHT) { + //cancel scroll wheel events, only clicks should trigger focus changes. + set_input_as_handled(); + return; + } + top->notification(Control::NOTIFICATION_MODAL_CLOSE); top->_modal_stack_remove(); top->hide(); @@ -2367,7 +2374,6 @@ void Viewport::_gui_remove_from_modal_stack(List<Control *>::Element *MI, Object List<Control *>::Element *next = MI->next(); gui.modal_stack.erase(MI); - MI = NULL; if (p_prev_focus_owner) { diff --git a/scene/register_scene_types.cpp b/scene/register_scene_types.cpp index e3af521e8c..314fc721fc 100644 --- a/scene/register_scene_types.cpp +++ b/scene/register_scene_types.cpp @@ -139,7 +139,6 @@ #include "scene/resources/cylinder_shape.h" #include "scene/resources/default_theme/default_theme.h" #include "scene/resources/dynamic_font.h" -#include "scene/resources/dynamic_font_stb.h" #include "scene/resources/gradient.h" #include "scene/resources/height_map_shape.h" #include "scene/resources/line_shape_2d.h" @@ -364,6 +363,9 @@ void register_scene_types() { /* REGISTER 3D */ + ClassDB::register_class<Skin>(); + ClassDB::register_virtual_class<SkinReference>(); + ClassDB::register_class<Spatial>(); ClassDB::register_virtual_class<SpatialGizmo>(); ClassDB::register_class<Skeleton>(); diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 985b38f913..f4ac277d00 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -2741,77 +2741,77 @@ void Animation::copy_track(int p_track, Ref<Animation> p_to_animation) { void Animation::_bind_methods() { ClassDB::bind_method(D_METHOD("add_track", "type", "at_position"), &Animation::add_track, DEFVAL(-1)); - ClassDB::bind_method(D_METHOD("remove_track", "idx"), &Animation::remove_track); + ClassDB::bind_method(D_METHOD("remove_track", "track_idx"), &Animation::remove_track); ClassDB::bind_method(D_METHOD("get_track_count"), &Animation::get_track_count); - ClassDB::bind_method(D_METHOD("track_get_type", "idx"), &Animation::track_get_type); - ClassDB::bind_method(D_METHOD("track_get_path", "idx"), &Animation::track_get_path); - ClassDB::bind_method(D_METHOD("track_set_path", "idx", "path"), &Animation::track_set_path); + ClassDB::bind_method(D_METHOD("track_get_type", "track_idx"), &Animation::track_get_type); + ClassDB::bind_method(D_METHOD("track_get_path", "track_idx"), &Animation::track_get_path); + ClassDB::bind_method(D_METHOD("track_set_path", "track_idx", "path"), &Animation::track_set_path); ClassDB::bind_method(D_METHOD("find_track", "path"), &Animation::find_track); - ClassDB::bind_method(D_METHOD("track_move_up", "idx"), &Animation::track_move_up); - ClassDB::bind_method(D_METHOD("track_move_down", "idx"), &Animation::track_move_down); - ClassDB::bind_method(D_METHOD("track_move_to", "idx", "to_idx"), &Animation::track_move_to); - ClassDB::bind_method(D_METHOD("track_swap", "idx", "with_idx"), &Animation::track_swap); + ClassDB::bind_method(D_METHOD("track_move_up", "track_idx"), &Animation::track_move_up); + ClassDB::bind_method(D_METHOD("track_move_down", "track_idx"), &Animation::track_move_down); + ClassDB::bind_method(D_METHOD("track_move_to", "track_idx", "to_idx"), &Animation::track_move_to); + ClassDB::bind_method(D_METHOD("track_swap", "track_idx", "with_idx"), &Animation::track_swap); - ClassDB::bind_method(D_METHOD("track_set_imported", "idx", "imported"), &Animation::track_set_imported); - ClassDB::bind_method(D_METHOD("track_is_imported", "idx"), &Animation::track_is_imported); + ClassDB::bind_method(D_METHOD("track_set_imported", "track_idx", "imported"), &Animation::track_set_imported); + ClassDB::bind_method(D_METHOD("track_is_imported", "track_idx"), &Animation::track_is_imported); - ClassDB::bind_method(D_METHOD("track_set_enabled", "idx", "enabled"), &Animation::track_set_enabled); - ClassDB::bind_method(D_METHOD("track_is_enabled", "idx"), &Animation::track_is_enabled); + ClassDB::bind_method(D_METHOD("track_set_enabled", "track_idx", "enabled"), &Animation::track_set_enabled); + ClassDB::bind_method(D_METHOD("track_is_enabled", "track_idx"), &Animation::track_is_enabled); - ClassDB::bind_method(D_METHOD("transform_track_insert_key", "idx", "time", "location", "rotation", "scale"), &Animation::transform_track_insert_key); - ClassDB::bind_method(D_METHOD("track_insert_key", "idx", "time", "key", "transition"), &Animation::track_insert_key, DEFVAL(1)); - ClassDB::bind_method(D_METHOD("track_remove_key", "idx", "key_idx"), &Animation::track_remove_key); - ClassDB::bind_method(D_METHOD("track_remove_key_at_position", "idx", "position"), &Animation::track_remove_key_at_position); - ClassDB::bind_method(D_METHOD("track_set_key_value", "idx", "key", "value"), &Animation::track_set_key_value); - ClassDB::bind_method(D_METHOD("track_set_key_transition", "idx", "key_idx", "transition"), &Animation::track_set_key_transition); - ClassDB::bind_method(D_METHOD("track_set_key_time", "idx", "key_idx", "time"), &Animation::track_set_key_time); - ClassDB::bind_method(D_METHOD("track_get_key_transition", "idx", "key_idx"), &Animation::track_get_key_transition); + ClassDB::bind_method(D_METHOD("transform_track_insert_key", "track_idx", "time", "location", "rotation", "scale"), &Animation::transform_track_insert_key); + ClassDB::bind_method(D_METHOD("track_insert_key", "track_idx", "time", "key", "transition"), &Animation::track_insert_key, DEFVAL(1)); + ClassDB::bind_method(D_METHOD("track_remove_key", "track_idx", "key_idx"), &Animation::track_remove_key); + ClassDB::bind_method(D_METHOD("track_remove_key_at_position", "track_idx", "position"), &Animation::track_remove_key_at_position); + ClassDB::bind_method(D_METHOD("track_set_key_value", "track_idx", "key", "value"), &Animation::track_set_key_value); + ClassDB::bind_method(D_METHOD("track_set_key_transition", "track_idx", "key_idx", "transition"), &Animation::track_set_key_transition); + ClassDB::bind_method(D_METHOD("track_set_key_time", "track_idx", "key_idx", "time"), &Animation::track_set_key_time); + ClassDB::bind_method(D_METHOD("track_get_key_transition", "track_idx", "key_idx"), &Animation::track_get_key_transition); - ClassDB::bind_method(D_METHOD("track_get_key_count", "idx"), &Animation::track_get_key_count); - ClassDB::bind_method(D_METHOD("track_get_key_value", "idx", "key_idx"), &Animation::track_get_key_value); - ClassDB::bind_method(D_METHOD("track_get_key_time", "idx", "key_idx"), &Animation::track_get_key_time); - ClassDB::bind_method(D_METHOD("track_find_key", "idx", "time", "exact"), &Animation::track_find_key, DEFVAL(false)); + ClassDB::bind_method(D_METHOD("track_get_key_count", "track_idx"), &Animation::track_get_key_count); + ClassDB::bind_method(D_METHOD("track_get_key_value", "track_idx", "key_idx"), &Animation::track_get_key_value); + ClassDB::bind_method(D_METHOD("track_get_key_time", "track_idx", "key_idx"), &Animation::track_get_key_time); + ClassDB::bind_method(D_METHOD("track_find_key", "track_idx", "time", "exact"), &Animation::track_find_key, DEFVAL(false)); - ClassDB::bind_method(D_METHOD("track_set_interpolation_type", "idx", "interpolation"), &Animation::track_set_interpolation_type); - ClassDB::bind_method(D_METHOD("track_get_interpolation_type", "idx"), &Animation::track_get_interpolation_type); + ClassDB::bind_method(D_METHOD("track_set_interpolation_type", "track_idx", "interpolation"), &Animation::track_set_interpolation_type); + ClassDB::bind_method(D_METHOD("track_get_interpolation_type", "track_idx"), &Animation::track_get_interpolation_type); - ClassDB::bind_method(D_METHOD("track_set_interpolation_loop_wrap", "idx", "interpolation"), &Animation::track_set_interpolation_loop_wrap); - ClassDB::bind_method(D_METHOD("track_get_interpolation_loop_wrap", "idx"), &Animation::track_get_interpolation_loop_wrap); + ClassDB::bind_method(D_METHOD("track_set_interpolation_loop_wrap", "track_idx", "interpolation"), &Animation::track_set_interpolation_loop_wrap); + ClassDB::bind_method(D_METHOD("track_get_interpolation_loop_wrap", "track_idx"), &Animation::track_get_interpolation_loop_wrap); - ClassDB::bind_method(D_METHOD("transform_track_interpolate", "idx", "time_sec"), &Animation::_transform_track_interpolate); - ClassDB::bind_method(D_METHOD("value_track_set_update_mode", "idx", "mode"), &Animation::value_track_set_update_mode); - ClassDB::bind_method(D_METHOD("value_track_get_update_mode", "idx"), &Animation::value_track_get_update_mode); + ClassDB::bind_method(D_METHOD("transform_track_interpolate", "track_idx", "time_sec"), &Animation::_transform_track_interpolate); + ClassDB::bind_method(D_METHOD("value_track_set_update_mode", "track_idx", "mode"), &Animation::value_track_set_update_mode); + ClassDB::bind_method(D_METHOD("value_track_get_update_mode", "track_idx"), &Animation::value_track_get_update_mode); - ClassDB::bind_method(D_METHOD("value_track_get_key_indices", "idx", "time_sec", "delta"), &Animation::_value_track_get_key_indices); + ClassDB::bind_method(D_METHOD("value_track_get_key_indices", "track_idx", "time_sec", "delta"), &Animation::_value_track_get_key_indices); - ClassDB::bind_method(D_METHOD("method_track_get_key_indices", "idx", "time_sec", "delta"), &Animation::_method_track_get_key_indices); - ClassDB::bind_method(D_METHOD("method_track_get_name", "idx", "key_idx"), &Animation::method_track_get_name); - ClassDB::bind_method(D_METHOD("method_track_get_params", "idx", "key_idx"), &Animation::method_track_get_params); + ClassDB::bind_method(D_METHOD("method_track_get_key_indices", "track_idx", "time_sec", "delta"), &Animation::_method_track_get_key_indices); + ClassDB::bind_method(D_METHOD("method_track_get_name", "track_idx", "key_idx"), &Animation::method_track_get_name); + ClassDB::bind_method(D_METHOD("method_track_get_params", "track_idx", "key_idx"), &Animation::method_track_get_params); - ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track", "time", "value", "in_handle", "out_handle"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2())); + ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2())); - ClassDB::bind_method(D_METHOD("bezier_track_set_key_value", "idx", "key_idx", "value"), &Animation::bezier_track_set_key_value); - ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "idx", "key_idx", "in_handle"), &Animation::bezier_track_set_key_in_handle); - ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "idx", "key_idx", "out_handle"), &Animation::bezier_track_set_key_out_handle); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_value", "track_idx", "key_idx", "value"), &Animation::bezier_track_set_key_value); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle"), &Animation::bezier_track_set_key_in_handle); + ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle"), &Animation::bezier_track_set_key_out_handle); - ClassDB::bind_method(D_METHOD("bezier_track_get_key_value", "idx", "key_idx"), &Animation::bezier_track_get_key_value); - ClassDB::bind_method(D_METHOD("bezier_track_get_key_in_handle", "idx", "key_idx"), &Animation::bezier_track_get_key_in_handle); - ClassDB::bind_method(D_METHOD("bezier_track_get_key_out_handle", "idx", "key_idx"), &Animation::bezier_track_get_key_out_handle); + ClassDB::bind_method(D_METHOD("bezier_track_get_key_value", "track_idx", "key_idx"), &Animation::bezier_track_get_key_value); + ClassDB::bind_method(D_METHOD("bezier_track_get_key_in_handle", "track_idx", "key_idx"), &Animation::bezier_track_get_key_in_handle); + ClassDB::bind_method(D_METHOD("bezier_track_get_key_out_handle", "track_idx", "key_idx"), &Animation::bezier_track_get_key_out_handle); - ClassDB::bind_method(D_METHOD("bezier_track_interpolate", "track", "time"), &Animation::bezier_track_interpolate); + ClassDB::bind_method(D_METHOD("bezier_track_interpolate", "track_idx", "time"), &Animation::bezier_track_interpolate); - ClassDB::bind_method(D_METHOD("audio_track_insert_key", "track", "time", "stream", "start_offset", "end_offset"), &Animation::audio_track_insert_key, DEFVAL(0), DEFVAL(0)); - ClassDB::bind_method(D_METHOD("audio_track_set_key_stream", "idx", "key_idx", "stream"), &Animation::audio_track_set_key_stream); - ClassDB::bind_method(D_METHOD("audio_track_set_key_start_offset", "idx", "key_idx", "offset"), &Animation::audio_track_set_key_start_offset); - ClassDB::bind_method(D_METHOD("audio_track_set_key_end_offset", "idx", "key_idx", "offset"), &Animation::audio_track_set_key_end_offset); - ClassDB::bind_method(D_METHOD("audio_track_get_key_stream", "idx", "key_idx"), &Animation::audio_track_get_key_stream); - ClassDB::bind_method(D_METHOD("audio_track_get_key_start_offset", "idx", "key_idx"), &Animation::audio_track_get_key_start_offset); - ClassDB::bind_method(D_METHOD("audio_track_get_key_end_offset", "idx", "key_idx"), &Animation::audio_track_get_key_end_offset); + ClassDB::bind_method(D_METHOD("audio_track_insert_key", "track_idx", "time", "stream", "start_offset", "end_offset"), &Animation::audio_track_insert_key, DEFVAL(0), DEFVAL(0)); + ClassDB::bind_method(D_METHOD("audio_track_set_key_stream", "track_idx", "key_idx", "stream"), &Animation::audio_track_set_key_stream); + ClassDB::bind_method(D_METHOD("audio_track_set_key_start_offset", "track_idx", "key_idx", "offset"), &Animation::audio_track_set_key_start_offset); + ClassDB::bind_method(D_METHOD("audio_track_set_key_end_offset", "track_idx", "key_idx", "offset"), &Animation::audio_track_set_key_end_offset); + ClassDB::bind_method(D_METHOD("audio_track_get_key_stream", "track_idx", "key_idx"), &Animation::audio_track_get_key_stream); + ClassDB::bind_method(D_METHOD("audio_track_get_key_start_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_start_offset); + ClassDB::bind_method(D_METHOD("audio_track_get_key_end_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_end_offset); - ClassDB::bind_method(D_METHOD("animation_track_insert_key", "track", "time", "animation"), &Animation::animation_track_insert_key); - ClassDB::bind_method(D_METHOD("animation_track_set_key_animation", "idx", "key_idx", "animation"), &Animation::animation_track_set_key_animation); - ClassDB::bind_method(D_METHOD("animation_track_get_key_animation", "idx", "key_idx"), &Animation::animation_track_get_key_animation); + ClassDB::bind_method(D_METHOD("animation_track_insert_key", "track_idx", "time", "animation"), &Animation::animation_track_insert_key); + ClassDB::bind_method(D_METHOD("animation_track_set_key_animation", "track_idx", "key_idx", "animation"), &Animation::animation_track_set_key_animation); + ClassDB::bind_method(D_METHOD("animation_track_get_key_animation", "track_idx", "key_idx"), &Animation::animation_track_get_key_animation); ClassDB::bind_method(D_METHOD("set_length", "time_sec"), &Animation::set_length); ClassDB::bind_method(D_METHOD("get_length"), &Animation::get_length); @@ -2823,7 +2823,7 @@ void Animation::_bind_methods() { ClassDB::bind_method(D_METHOD("get_step"), &Animation::get_step); ClassDB::bind_method(D_METHOD("clear"), &Animation::clear); - ClassDB::bind_method(D_METHOD("copy_track", "track", "to_animation"), &Animation::copy_track); + ClassDB::bind_method(D_METHOD("copy_track", "track_idx", "to_animation"), &Animation::copy_track); ADD_PROPERTY(PropertyInfo(Variant::REAL, "length", PROPERTY_HINT_RANGE, "0.001,99999,0.001"), "set_length", "get_length"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "loop"), "set_loop", "has_loop"); @@ -2870,9 +2870,9 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons const Vector3 &v1 = t1.value.loc; const Vector3 &v2 = t2.value.loc; - if (v0 == v2) { + if (v0.is_equal_approx(v2)) { //0 and 2 are close, let's see if 1 is close - if (v0 != v1) { + if (!v0.is_equal_approx(v1)) { //not close, not optimizable return false; } @@ -2909,9 +2909,9 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons //localize both to rotation from q0 - if (Math::is_zero_approx((q0 - q2).length())) { + if (q0.is_equal_approx(q2)) { - if (!Math::is_zero_approx((q0 - q1).length())) + if (!q0.is_equal_approx(q1)) return false; } else { @@ -2959,9 +2959,9 @@ bool Animation::_transform_track_optimize_key(const TKey<TransformKey> &t0, cons const Vector3 &v1 = t1.value.scale; const Vector3 &v2 = t2.value.scale; - if (v0 == v2) { + if (v0.is_equal_approx(v2)) { //0 and 2 are close, let's see if 1 is close - if (v0 != v1) { + if (!v0.is_equal_approx(v1)) { //not close, not optimizable return false; } diff --git a/scene/resources/bit_map.cpp b/scene/resources/bit_map.cpp index e4a64a1de1..e6139dd707 100644 --- a/scene/resources/bit_map.cpp +++ b/scene/resources/bit_map.cpp @@ -197,16 +197,14 @@ Vector<Vector2> BitMap::_march_square(const Rect2i &rect, const Point2i &start) | 4 | 8 | <- current pixel (curx,cury) +---+---+ */ - //NOTE: due to the way we pick points from texture, rect needs to be smaller, otherwise it goes outside 1 pixel - Rect2i fixed_rect = Rect2i(rect.position, rect.size - Size2i(2, 2)); Point2i tl = Point2i(curx - 1, cury - 1); - sv += (fixed_rect.has_point(tl) && get_bit(tl)) ? 1 : 0; + sv += (rect.has_point(tl) && get_bit(tl)) ? 1 : 0; Point2i tr = Point2i(curx, cury - 1); - sv += (fixed_rect.has_point(tr) && get_bit(tr)) ? 2 : 0; + sv += (rect.has_point(tr) && get_bit(tr)) ? 2 : 0; Point2i bl = Point2i(curx - 1, cury); - sv += (fixed_rect.has_point(bl) && get_bit(bl)) ? 4 : 0; + sv += (rect.has_point(bl) && get_bit(bl)) ? 4 : 0; Point2i br = Point2i(curx, cury); - sv += (fixed_rect.has_point(br) && get_bit(br)) ? 8 : 0; + sv += (rect.has_point(br) && get_bit(br)) ? 8 : 0; ERR_FAIL_COND_V(sv == 0 || sv == 15, Vector<Vector2>()); } @@ -300,15 +298,15 @@ Vector<Vector2> BitMap::_march_square(const Rect2i &rect, const Point2i &start) +---+---+ | 4 | | +---+---+ - this normally go RIGHT, but if its coming from UP, it should go LEFT + this normally go RIGHT, but if its coming from RIGHT, it should go LEFT */ if (case6s.has(Point2i(curx, cury))) { - //found, so we go down, and delete from case6s; + //found, so we go left, and delete from case6s; stepx = -1; stepy = 0; case6s.erase(Point2i(curx, cury)); } else { - //not found, we go up, and add to case6s; + //not found, we go right, and add to case6s; stepx = 1; stepy = 0; case6s.insert(Point2i(curx, cury)); @@ -510,12 +508,19 @@ Vector<Vector<Vector2> > BitMap::clip_opaque_to_polygons(const Rect2 &p_rect, fl for (int j = r.position.x; j < r.position.x + r.size.width; j++) { if (!fill->get_bit(Point2(j, i)) && get_bit(Point2(j, i))) { + fill_bits(this, fill, Point2i(j, i), r); + Vector<Vector2> polygon = _march_square(r, Point2i(j, i)); print_verbose("BitMap: Pre reduce: " + itos(polygon.size())); polygon = reduce(polygon, r, p_epsilon); print_verbose("BitMap: Post reduce: " + itos(polygon.size())); + + if (polygon.size() < 3) { + print_verbose("Invalid polygon, skipped"); + continue; + } + polygons.push_back(polygon); - fill_bits(this, fill, Point2i(j, i), r); } } } @@ -525,6 +530,13 @@ Vector<Vector<Vector2> > BitMap::clip_opaque_to_polygons(const Rect2 &p_rect, fl void BitMap::grow_mask(int p_pixels, const Rect2 &p_rect) { + if (p_pixels == 0) { + return; + } + + bool bit_value = p_pixels > 0; + p_pixels = Math::abs(p_pixels); + Rect2i r = Rect2i(0, 0, width, height).clip(p_rect); Ref<BitMap> copy; @@ -534,7 +546,7 @@ void BitMap::grow_mask(int p_pixels, const Rect2 &p_rect) { for (int i = r.position.y; i < r.position.y + r.size.height; i++) { for (int j = r.position.x; j < r.position.x + r.size.width; j++) { - if (copy->get_bit(Point2(j, i))) + if (bit_value == get_bit(Point2(j, i))) continue; bool found = false; @@ -542,16 +554,21 @@ void BitMap::grow_mask(int p_pixels, const Rect2 &p_rect) { for (int y = i - p_pixels; y <= i + p_pixels; y++) { for (int x = j - p_pixels; x <= j + p_pixels; x++) { - if (x < p_rect.position.x || x >= p_rect.position.x + p_rect.size.x) - continue; - if (y < p_rect.position.y || y >= p_rect.position.y + p_rect.size.y) - continue; + bool outside = false; + + if ((x < p_rect.position.x) || (x >= p_rect.position.x + p_rect.size.x) || (y < p_rect.position.y) || (y >= p_rect.position.y + p_rect.size.y)) { + // outside of rectangle counts as bit not set + if (!bit_value) + outside = true; + else + continue; + } float d = Point2(j, i).distance_to(Point2(x, y)) - CMP_EPSILON; if (d > p_pixels) continue; - if (copy->get_bit(Point2(x, y))) { + if (outside || (bit_value == copy->get_bit(Point2(x, y)))) { found = true; break; } @@ -561,12 +578,17 @@ void BitMap::grow_mask(int p_pixels, const Rect2 &p_rect) { } if (found) { - set_bit(Point2(j, i), true); + set_bit(Point2(j, i), bit_value); } } } } +void BitMap::shrink_mask(int p_pixels, const Rect2 &p_rect) { + + grow_mask(-p_pixels, p_rect); +} + Array BitMap::_opaque_to_polygons_bind(const Rect2 &p_rect, float p_epsilon) const { Vector<Vector<Vector2> > result = clip_opaque_to_polygons(p_rect, p_epsilon); diff --git a/scene/resources/bit_map.h b/scene/resources/bit_map.h index daf24affb1..b062dd7376 100644 --- a/scene/resources/bit_map.h +++ b/scene/resources/bit_map.h @@ -67,6 +67,7 @@ public: void resize(const Size2 &p_new_size); void grow_mask(int p_pixels, const Rect2 &p_rect); + void shrink_mask(int p_pixels, const Rect2 &p_rect); void blit(const Vector2 &p_pos, const Ref<BitMap> &p_bitmap); Ref<Image> convert_to_image() const; diff --git a/scene/resources/box_shape.cpp b/scene/resources/box_shape.cpp index d819e9f776..c6fe14e55e 100644 --- a/scene/resources/box_shape.cpp +++ b/scene/resources/box_shape.cpp @@ -31,7 +31,7 @@ #include "box_shape.h" #include "servers/physics_server.h" -Vector<Vector3> BoxShape::_gen_debug_mesh_lines() { +Vector<Vector3> BoxShape::get_debug_mesh_lines() { Vector<Vector3> lines; AABB aabb; diff --git a/scene/resources/box_shape.h b/scene/resources/box_shape.h index 42d54310a8..0bce929aee 100644 --- a/scene/resources/box_shape.h +++ b/scene/resources/box_shape.h @@ -42,12 +42,13 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); public: void set_extents(const Vector3 &p_extents); Vector3 get_extents() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + BoxShape(); }; diff --git a/scene/resources/capsule_shape.cpp b/scene/resources/capsule_shape.cpp index 669b261bfe..1ec3bd7158 100644 --- a/scene/resources/capsule_shape.cpp +++ b/scene/resources/capsule_shape.cpp @@ -31,7 +31,7 @@ #include "capsule_shape.h" #include "servers/physics_server.h" -Vector<Vector3> CapsuleShape::_gen_debug_mesh_lines() { +Vector<Vector3> CapsuleShape::get_debug_mesh_lines() { float radius = get_radius(); float height = get_height(); diff --git a/scene/resources/capsule_shape.h b/scene/resources/capsule_shape.h index 6bca53f783..befbc1dcd5 100644 --- a/scene/resources/capsule_shape.h +++ b/scene/resources/capsule_shape.h @@ -44,14 +44,14 @@ protected: virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); - public: void set_radius(float p_radius); float get_radius() const; void set_height(float p_height); float get_height() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + CapsuleShape(); }; diff --git a/scene/resources/concave_polygon_shape.cpp b/scene/resources/concave_polygon_shape.cpp index b4cc38c8c0..dbc07ef591 100644 --- a/scene/resources/concave_polygon_shape.cpp +++ b/scene/resources/concave_polygon_shape.cpp @@ -32,7 +32,7 @@ #include "servers/physics_server.h" -Vector<Vector3> ConcavePolygonShape::_gen_debug_mesh_lines() { +Vector<Vector3> ConcavePolygonShape::get_debug_mesh_lines() { Set<DrawEdge> edges; diff --git a/scene/resources/concave_polygon_shape.h b/scene/resources/concave_polygon_shape.h index 1b8ddfc308..57362a29be 100644 --- a/scene/resources/concave_polygon_shape.h +++ b/scene/resources/concave_polygon_shape.h @@ -61,12 +61,13 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); public: void set_faces(const PoolVector<Vector3> &p_faces); PoolVector<Vector3> get_faces() const; + Vector<Vector3> get_debug_mesh_lines(); + ConcavePolygonShape(); }; diff --git a/scene/resources/convex_polygon_shape.cpp b/scene/resources/convex_polygon_shape.cpp index 499688a185..af459ec311 100644 --- a/scene/resources/convex_polygon_shape.cpp +++ b/scene/resources/convex_polygon_shape.cpp @@ -32,7 +32,7 @@ #include "core/math/quick_hull.h" #include "servers/physics_server.h" -Vector<Vector3> ConvexPolygonShape::_gen_debug_mesh_lines() { +Vector<Vector3> ConvexPolygonShape::get_debug_mesh_lines() { PoolVector<Vector3> points = get_points(); diff --git a/scene/resources/convex_polygon_shape.h b/scene/resources/convex_polygon_shape.h index 5c192476d3..e6daf1bef4 100644 --- a/scene/resources/convex_polygon_shape.h +++ b/scene/resources/convex_polygon_shape.h @@ -43,12 +43,12 @@ protected: virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); - public: void set_points(const PoolVector<Vector3> &p_points); PoolVector<Vector3> get_points() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + ConvexPolygonShape(); }; diff --git a/scene/resources/cylinder_shape.cpp b/scene/resources/cylinder_shape.cpp index f60f7ab376..c1a0a0ac5d 100644 --- a/scene/resources/cylinder_shape.cpp +++ b/scene/resources/cylinder_shape.cpp @@ -31,7 +31,7 @@ #include "cylinder_shape.h" #include "servers/physics_server.h" -Vector<Vector3> CylinderShape::_gen_debug_mesh_lines() { +Vector<Vector3> CylinderShape::get_debug_mesh_lines() { float radius = get_radius(); float height = get_height(); diff --git a/scene/resources/cylinder_shape.h b/scene/resources/cylinder_shape.h index 58a4f5a817..411c1515ed 100644 --- a/scene/resources/cylinder_shape.h +++ b/scene/resources/cylinder_shape.h @@ -43,14 +43,14 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); - public: void set_radius(float p_radius); float get_radius() const; void set_height(float p_height); float get_height() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + CylinderShape(); }; diff --git a/scene/resources/default_theme/button_hover.png b/scene/resources/default_theme/button_hover.png Binary files differindex ef226e3caf..ff2258281e 100644 --- a/scene/resources/default_theme/button_hover.png +++ b/scene/resources/default_theme/button_hover.png diff --git a/scene/resources/default_theme/button_normal.png b/scene/resources/default_theme/button_normal.png Binary files differindex 7d0bd16221..c189b61b89 100644 --- a/scene/resources/default_theme/button_normal.png +++ b/scene/resources/default_theme/button_normal.png diff --git a/scene/resources/default_theme/color_picker_hue.png b/scene/resources/default_theme/color_picker_hue.png Binary files differindex de2cd0c2bf..7b46f03cb4 100644 --- a/scene/resources/default_theme/color_picker_hue.png +++ b/scene/resources/default_theme/color_picker_hue.png diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp index d761eb01fe..e82819f270 100644 --- a/scene/resources/default_theme/default_theme.cpp +++ b/scene/resources/default_theme/default_theme.cpp @@ -432,7 +432,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_font("font", "TextEdit", default_font); - theme->set_color("background_color", "TextEdit", Color(0, 0, 0)); + theme->set_color("background_color", "TextEdit", Color(0, 0, 0, 0)); theme->set_color("completion_background_color", "TextEdit", Color(0.17, 0.16, 0.2)); theme->set_color("completion_selected_color", "TextEdit", Color(0.26, 0.26, 0.27)); theme->set_color("completion_existing_color", "TextEdit", Color(0.87, 0.87, 0.87, 0.13)); @@ -558,9 +558,14 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_stylebox("panel", "PopupPanel", style_pp); + // PopupDialog + + Ref<StyleBoxTexture> style_pd = make_stylebox(popup_bg_png, 4, 4, 4, 4, 10, 10, 10, 10); + theme->set_stylebox("panel", "PopupDialog", style_pd); + // PopupMenu - theme->set_stylebox("panel", "PopupMenu", make_stylebox(popup_bg_png, 4, 4, 4, 4, 10, 10, 10, 10)); + theme->set_stylebox("panel", "PopupMenu", style_pd); theme->set_stylebox("panel_disabled", "PopupMenu", make_stylebox(popup_bg_disabled_png, 4, 4, 4, 4)); theme->set_stylebox("hover", "PopupMenu", selected); theme->set_stylebox("separator", "PopupMenu", make_stylebox(vseparator_png, 3, 3, 3, 3)); @@ -657,7 +662,6 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_constant("hseparation", "Tree", 4 * scale); theme->set_constant("vseparation", "Tree", 4 * scale); - theme->set_constant("guide_width", "Tree", 2 * scale); theme->set_constant("item_margin", "Tree", 12 * scale); theme->set_constant("button_margin", "Tree", 4 * scale); theme->set_constant("draw_relationship_lines", "Tree", 0); @@ -764,7 +768,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_color("folder_icon_modulate", "FileDialog", Color(1, 1, 1)); theme->set_color("files_disabled", "FileDialog", Color(0, 0, 0, 0.7)); - // colorPicker + // ColorPicker theme->set_constant("margin", "ColorPicker", 4 * scale); theme->set_constant("sv_width", "ColorPicker", 256 * scale); @@ -777,6 +781,7 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const theme->set_icon("color_hue", "ColorPicker", make_icon(color_picker_hue_png)); theme->set_icon("color_sample", "ColorPicker", make_icon(color_picker_sample_png)); theme->set_icon("preset_bg", "ColorPicker", make_icon(mini_checkerboard_png)); + theme->set_icon("overbright_indicator", "ColorPicker", make_icon(overbright_indicator_png)); theme->set_icon("bg", "ColorPickerButton", make_icon(mini_checkerboard_png)); diff --git a/scene/resources/default_theme/error_icon.png b/scene/resources/default_theme/error_icon.png Binary files differindex 00680db5df..30336b91a4 100644 --- a/scene/resources/default_theme/error_icon.png +++ b/scene/resources/default_theme/error_icon.png diff --git a/scene/resources/default_theme/graph_node_selected.png b/scene/resources/default_theme/graph_node_selected.png Binary files differindex cc4eb7f753..c52d88586b 100644 --- a/scene/resources/default_theme/graph_node_selected.png +++ b/scene/resources/default_theme/graph_node_selected.png diff --git a/scene/resources/default_theme/graph_port.png b/scene/resources/default_theme/graph_port.png Binary files differindex f33ae3baf3..358934f4d8 100644 --- a/scene/resources/default_theme/graph_port.png +++ b/scene/resources/default_theme/graph_port.png diff --git a/scene/resources/default_theme/icon_visibility.png b/scene/resources/default_theme/icon_visibility.png Binary files differindex 6402571f3e..b2df8cbdb8 100644 --- a/scene/resources/default_theme/icon_visibility.png +++ b/scene/resources/default_theme/icon_visibility.png diff --git a/scene/resources/default_theme/option_button_normal.png b/scene/resources/default_theme/option_button_normal.png Binary files differindex 2dadb40338..43fc29e958 100644 --- a/scene/resources/default_theme/option_button_normal.png +++ b/scene/resources/default_theme/option_button_normal.png diff --git a/scene/resources/default_theme/overbright_indicator.png b/scene/resources/default_theme/overbright_indicator.png Binary files differnew file mode 100644 index 0000000000..89f800c230 --- /dev/null +++ b/scene/resources/default_theme/overbright_indicator.png diff --git a/scene/resources/default_theme/scroll_grabber_hl.png b/scene/resources/default_theme/scroll_grabber_hl.png Binary files differindex 006cfa3361..21ee486e0b 100644 --- a/scene/resources/default_theme/scroll_grabber_hl.png +++ b/scene/resources/default_theme/scroll_grabber_hl.png diff --git a/scene/resources/default_theme/space.png b/scene/resources/default_theme/space.png Binary files differindex 7e458a6c45..3c66316074 100644 --- a/scene/resources/default_theme/space.png +++ b/scene/resources/default_theme/space.png diff --git a/scene/resources/default_theme/tab_container_bg.png b/scene/resources/default_theme/tab_container_bg.png Binary files differindex 7d0bd16221..c189b61b89 100644 --- a/scene/resources/default_theme/tab_container_bg.png +++ b/scene/resources/default_theme/tab_container_bg.png diff --git a/scene/resources/default_theme/tab_current.png b/scene/resources/default_theme/tab_current.png Binary files differindex 520d147217..d5641e917a 100644 --- a/scene/resources/default_theme/tab_current.png +++ b/scene/resources/default_theme/tab_current.png diff --git a/scene/resources/default_theme/tab_disabled.png b/scene/resources/default_theme/tab_disabled.png Binary files differindex 97157a58dd..a7c04effa3 100644 --- a/scene/resources/default_theme/tab_disabled.png +++ b/scene/resources/default_theme/tab_disabled.png diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h index 11904b7aff..0a4e557451 100644 --- a/scene/resources/default_theme/theme_data.h +++ b/scene/resources/default_theme/theme_data.h @@ -19,11 +19,11 @@ static const unsigned char button_focus_png[] = { }; static const unsigned char button_hover_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x8a, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0x40, 0x4b, 0x5f, 0x5a, 0x6c, 0x5f, 0x5a, 0x6b, 0x56, 0x53, 0x64, 0x57, 0x53, 0x64, 0x3e, 0x3b, 0x46, 0x57, 0x53, 0x63, 0x57, 0x53, 0x63, 0x5b, 0x57, 0x68, 0x5a, 0x56, 0x67, 0x4d, 0x4a, 0x57, 0x49, 0x46, 0x52, 0x48, 0x45, 0x51, 0x5b, 0x57, 0x66, 0x59, 0x55, 0x64, 0x47, 0x44, 0x50, 0x58, 0x54, 0x64, 0x46, 0x43, 0x50, 0x56, 0x53, 0x63, 0x45, 0x42, 0x4f, 0x56, 0x53, 0x62, 0x45, 0x42, 0x4e, 0x55, 0x51, 0x62, 0x44, 0x41, 0x4e, 0x55, 0x51, 0x60, 0x44, 0x41, 0x4d, 0x43, 0x40, 0x4c, 0x47, 0x43, 0x51, 0x43, 0x3f, 0x4d, 0x42, 0x3f, 0x4c, 0x53, 0x50, 0x5f, 0x53, 0x4f, 0x5e, 0x40, 0xdc, 0xe6, 0x80, 0x0, 0x0, 0x0, 0x16, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0x6b, 0x28, 0x52, 0x7a, 0x0, 0x0, 0x0, 0x67, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x5d, 0xcf, 0x47, 0x2, 0x83, 0x30, 0x10, 0x43, 0x51, 0x69, 0x98, 0xf4, 0xe4, 0xfe, 0x87, 0x24, 0xfb, 0xf4, 0x8, 0xd1, 0xb1, 0x3f, 0xb8, 0xbd, 0xdd, 0x24, 0x38, 0x4, 0x40, 0x43, 0xc9, 0xfd, 0x24, 0x1a, 0x7a, 0x27, 0x2d, 0x7, 0xc2, 0x41, 0x2f, 0xbd, 0x69, 0x88, 0x23, 0x27, 0x38, 0x3d, 0xfd, 0x22, 0x2f, 0xd3, 0x1b, 0xc3, 0x35, 0xe9, 0x85, 0x39, 0xd, 0x10, 0x2c, 0x0, 0x25, 0x20, 0x81, 0x2d, 0xc0, 0xa0, 0x2d, 0x8, 0xa9, 0x12, 0x64, 0x0, 0x66, 0x91, 0xa5, 0x61, 0xf3, 0xbe, 0xc5, 0x18, 0xd9, 0x7e, 0x7e, 0x21, 0x45, 0x1b, 0x53, 0x77, 0x4a, 0xac, 0x87, 0x63, 0x3d, 0x7e, 0x7, 0x87, 0x7b, 0x3b, 0x5b, 0x7a, 0xd3, 0xea, 0x4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x8a, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x42, 0x40, 0x4b, 0x5f, 0x5a, 0x6c, 0x5f, 0x5a, 0x6b, 0x56, 0x53, 0x64, 0x57, 0x53, 0x64, 0x3e, 0x3b, 0x46, 0x57, 0x53, 0x63, 0x57, 0x53, 0x63, 0x5b, 0x57, 0x68, 0x5a, 0x56, 0x67, 0x4d, 0x4a, 0x57, 0x49, 0x46, 0x52, 0x48, 0x45, 0x51, 0x5b, 0x57, 0x66, 0x59, 0x55, 0x64, 0x47, 0x44, 0x50, 0x58, 0x54, 0x64, 0x46, 0x43, 0x50, 0x56, 0x53, 0x63, 0x45, 0x42, 0x4f, 0x56, 0x53, 0x62, 0x45, 0x42, 0x4e, 0x55, 0x51, 0x62, 0x44, 0x41, 0x4e, 0x55, 0x51, 0x60, 0x44, 0x41, 0x4d, 0x43, 0x40, 0x4c, 0x47, 0x43, 0x51, 0x43, 0x3f, 0x4d, 0x42, 0x3f, 0x4c, 0x53, 0x50, 0x5f, 0x53, 0x4f, 0x5e, 0x40, 0xdc, 0xe6, 0x80, 0x0, 0x0, 0x0, 0x16, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0x6b, 0x28, 0x52, 0x7a, 0x0, 0x0, 0x0, 0x65, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6d, 0xcf, 0xc5, 0x1, 0x84, 0x40, 0x14, 0x4, 0xd1, 0x2e, 0x5c, 0xf3, 0xf, 0x92, 0xbd, 0xaf, 0xd3, 0xb8, 0x53, 0x30, 0xf6, 0x6e, 0x1f, 0x31, 0x26, 0xc9, 0x63, 0x90, 0xcc, 0xe2, 0xb1, 0x4f, 0x34, 0x48, 0x8a, 0x86, 0xfc, 0xf6, 0x87, 0x1e, 0x82, 0x8c, 0x19, 0xf2, 0x17, 0x4, 0x50, 0xce, 0x6f, 0x8d, 0xd7, 0x88, 0x7e, 0x69, 0xc9, 0x23, 0x4, 0x1c, 0x40, 0x47, 0x50, 0x24, 0xed, 0x41, 0x3d, 0x78, 0xf, 0x56, 0xe4, 0x23, 0xb8, 0x7, 0x69, 0x11, 0xf7, 0x12, 0x12, 0x7e, 0xea, 0x60, 0xa, 0x9a, 0xef, 0x3f, 0xb0, 0x83, 0x26, 0x98, 0x7b, 0x70, 0x33, 0xdc, 0x65, 0xfc, 0xe, 0x81, 0x4e, 0x3b, 0x55, 0xea, 0xaa, 0xb0, 0xe, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char button_normal_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x87, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x56, 0x52, 0x60, 0x47, 0x44, 0x52, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x47, 0x44, 0x51, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x40, 0x3e, 0x48, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x36, 0x34, 0x3e, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x3f, 0x38, 0xaa, 0x5e, 0x0, 0x0, 0x0, 0x15, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0xe8, 0xff, 0x76, 0xed, 0x0, 0x0, 0x0, 0x65, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x65, 0xcf, 0x45, 0x2, 0x84, 0x30, 0x14, 0x4, 0xd1, 0x2e, 0x1c, 0xee, 0x7f, 0xca, 0xd1, 0xed, 0x28, 0x8d, 0x4b, 0x92, 0x5a, 0xbe, 0xe8, 0x2f, 0xc4, 0x9c, 0x24, 0xcf, 0x15, 0x54, 0xab, 0x78, 0xee, 0x53, 0x30, 0x4a, 0x85, 0xa6, 0xfc, 0xf1, 0x87, 0x11, 0xb2, 0x9a, 0x15, 0x9a, 0x37, 0x13, 0x74, 0xce, 0xb4, 0xd4, 0x77, 0xcb, 0xe, 0xb4, 0x96, 0x99, 0x10, 0x34, 0x81, 0x42, 0x50, 0x21, 0x9d, 0x41, 0x23, 0xf8, 0xc, 0x56, 0xe1, 0x10, 0x9c, 0x40, 0x4e, 0xfe, 0x6e, 0x72, 0x96, 0x7e, 0xd7, 0xdf, 0x3f, 0xb3, 0x79, 0x90, 0xcd, 0xf1, 0xc4, 0x26, 0x1e, 0x8e, 0x78, 0xfc, 0x1, 0xf5, 0x61, 0x3f, 0x44, 0xe8, 0xf1, 0xdd, 0xba, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x87, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x56, 0x52, 0x60, 0x47, 0x44, 0x52, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x47, 0x44, 0x51, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x40, 0x3e, 0x48, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x36, 0x34, 0x3e, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x3f, 0x38, 0xaa, 0x5e, 0x0, 0x0, 0x0, 0x15, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0xe8, 0xff, 0x76, 0xed, 0x0, 0x0, 0x0, 0x63, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6d, 0xcf, 0x45, 0x2, 0x84, 0x30, 0x0, 0x4, 0xc1, 0x69, 0x1c, 0xfe, 0xff, 0xca, 0xd5, 0xeb, 0x2a, 0x83, 0x6b, 0xd2, 0xb7, 0x54, 0x1c, 0x31, 0x26, 0xc9, 0x63, 0x50, 0xcc, 0x32, 0x8d, 0x3f, 0xd9, 0x20, 0x5, 0x1a, 0xf2, 0xc7, 0x1f, 0x7a, 0x48, 0x4a, 0x66, 0xa8, 0xde, 0xc, 0xd0, 0x38, 0xd1, 0x54, 0xdb, 0x4c, 0x2b, 0xd0, 0x5c, 0x62, 0x8e, 0xa0, 0x1, 0x74, 0x4, 0x65, 0xd2, 0x1e, 0xd4, 0x83, 0xf7, 0x60, 0x65, 0x3e, 0x82, 0x3, 0x48, 0x49, 0xdf, 0x55, 0xca, 0xd4, 0xef, 0xfa, 0xfb, 0x27, 0x36, 0xf, 0x92, 0x31, 0x9e, 0x44, 0x3e, 0x17, 0x7c, 0xbf, 0x3, 0xef, 0x34, 0x3f, 0x3e, 0xe0, 0x24, 0x67, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char button_pressed_png[] = { @@ -47,7 +47,7 @@ static const unsigned char close_hl_png[] = { }; static const unsigned char color_picker_hue_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x8, 0x2, 0x0, 0x0, 0x0, 0xfd, 0x5c, 0x8b, 0xcf, 0x0, 0x0, 0x0, 0x59, 0x49, 0x44, 0x41, 0x54, 0x28, 0x91, 0xcd, 0xd0, 0x31, 0xa, 0x3, 0x31, 0x10, 0x43, 0xd1, 0x87, 0xc0, 0xf6, 0xfd, 0x8f, 0x1b, 0xdb, 0x30, 0x69, 0x76, 0x21, 0x65, 0xd8, 0x14, 0x71, 0xf1, 0xf9, 0x8c, 0x84, 0x9a, 0x51, 0x44, 0x13, 0xfd, 0x21, 0xe3, 0x87, 0xed, 0xf7, 0xa8, 0xcd, 0x2a, 0x99, 0x8e, 0x46, 0x2b, 0x94, 0xd0, 0x43, 0xb, 0xe3, 0x64, 0xb3, 0x2a, 0xa6, 0x93, 0xb9, 0x9f, 0x9a, 0x4e, 0x3a, 0x69, 0x97, 0xc7, 0xe5, 0x3b, 0x1b, 0xff, 0xef, 0x6d, 0xa5, 0xec, 0x30, 0xc3, 0xeb, 0xf2, 0xc, 0xeb, 0xe3, 0x5e, 0x27, 0xf4, 0x8a, 0x37, 0x75, 0x7b, 0x8a, 0xe5, 0x90, 0x9a, 0xab, 0x81, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x8, 0x2, 0x0, 0x0, 0x0, 0xfd, 0x5c, 0x8b, 0xcf, 0x0, 0x0, 0x0, 0x54, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xcd, 0xc9, 0x1, 0x6, 0x43, 0x31, 0x10, 0x45, 0xd1, 0x63, 0xc8, 0xcf, 0xfe, 0x97, 0xdb, 0x9f, 0xf0, 0x1a, 0x15, 0xb4, 0x0, 0xa5, 0x1a, 0x1c, 0xd7, 0xcc, 0x13, 0x4a, 0x5b, 0xae, 0x2f, 0xf5, 0xdd, 0xdf, 0x92, 0xc9, 0x88, 0xba, 0x1d, 0x4d, 0xb, 0xa2, 0xb8, 0x96, 0xb6, 0xf4, 0x93, 0xcb, 0x48, 0xb9, 0x9d, 0x8c, 0x16, 0xa4, 0x2e, 0x5e, 0xda, 0x6e, 0xe7, 0xe3, 0xd7, 0xff, 0xbf, 0x9b, 0x22, 0x66, 0x71, 0x2f, 0x8f, 0xdd, 0xc5, 0x78, 0xbb, 0xc7, 0x9, 0xbb, 0xf0, 0x4, 0x75, 0x7b, 0x8a, 0xe5, 0x7c, 0x23, 0x8a, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char color_picker_sample_png[] = { @@ -59,7 +59,7 @@ static const unsigned char dropdown_png[] = { }; static const unsigned char error_icon_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe2, 0xb, 0xf, 0x0, 0x22, 0x18, 0xc, 0x35, 0xef, 0x18, 0x0, 0x0, 0x0, 0xe, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x0, 0x1, 0x0, 0x2, 0x10, 0x0, 0x1, 0x14, 0xc2, 0xc0, 0x92, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xb, 0x13, 0x0, 0x0, 0xb, 0x13, 0x1, 0x0, 0x9a, 0x9c, 0x18, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0xe, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0x60, 0x18, 0x5, 0xa3, 0x0, 0x1, 0x0, 0x2, 0x10, 0x0, 0x1, 0x14, 0xc2, 0xc0, 0x92, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char focus_png[] = { @@ -99,11 +99,11 @@ static const unsigned char graph_node_position_png[] = { }; static const unsigned char graph_node_selected_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x40, 0x8, 0x3, 0x0, 0x0, 0x0, 0x24, 0xa3, 0x7, 0xa4, 0x0, 0x0, 0x1, 0x5f, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xb2, 0xcc, 0xae, 0xa0, 0xbb, 0x9c, 0x92, 0xa6, 0x9a, 0x91, 0xa4, 0x95, 0x8c, 0x9e, 0xaf, 0x9f, 0xaf, 0xa0, 0x94, 0xa5, 0x8e, 0x84, 0x95, 0x7f, 0x75, 0x84, 0x73, 0x6a, 0x78, 0x6d, 0x64, 0x72, 0xa2, 0xa2, 0xb9, 0x9c, 0x90, 0xa2, 0x8b, 0x81, 0x90, 0xdc, 0xda, 0xce, 0xe2, 0xe1, 0xd2, 0x9d, 0x91, 0xa9, 0x85, 0x7c, 0x8c, 0xdb, 0xd9, 0xce, 0xdb, 0xd9, 0xcd, 0xda, 0xce, 0xe0, 0xde, 0xd5, 0xe3, 0xdf, 0xd6, 0xe4, 0x97, 0x8d, 0xa0, 0x7a, 0x70, 0x7f, 0xdb, 0xd0, 0xdf, 0xdb, 0xd0, 0xe1, 0xda, 0xd0, 0xe1, 0x70, 0x67, 0x75, 0xd8, 0xcb, 0xde, 0xda, 0xcf, 0xdf, 0xdb, 0xce, 0xe1, 0xdb, 0xcf, 0xe1, 0xdb, 0xd0, 0xe0, 0xda, 0xcf, 0xe0, 0xd8, 0xcc, 0xde, 0x90, 0x87, 0x99, 0x6d, 0x67, 0x72, 0xd7, 0xcc, 0xdf, 0xda, 0xce, 0xdf, 0xd8, 0xcb, 0xdf, 0xd7, 0xca, 0xde, 0xd9, 0xcc, 0xdf, 0xd9, 0xcd, 0xdf, 0xd6, 0xc9, 0xdd, 0xd9, 0xcd, 0xde, 0xd6, 0xc8, 0xdc, 0xd5, 0xc8, 0xdc, 0xd7, 0xcb, 0xdd, 0xd7, 0xca, 0xdd, 0xd5, 0xc7, 0xdc, 0xd3, 0xc6, 0xdb, 0xd5, 0xc9, 0xdc, 0xd5, 0xc9, 0xdd, 0xd6, 0xc9, 0xdc, 0xd4, 0xc6, 0xdb, 0xd3, 0xc5, 0xdb, 0xd5, 0xc8, 0xdb, 0xd4, 0xc8, 0xdc, 0xd3, 0xc4, 0xd9, 0xd4, 0xc6, 0xda, 0xd2, 0xc3, 0xd9, 0xd3, 0xc5, 0xda, 0xd2, 0xc5, 0xd9, 0xd3, 0xc5, 0xd9, 0xd2, 0xc5, 0xda, 0xd1, 0xc2, 0xd9, 0xd2, 0xc4, 0xd8, 0xd2, 0xc4, 0xd9, 0xd0, 0xc2, 0xd9, 0xd0, 0xc1, 0xd7, 0xd0, 0xc2, 0xd7, 0xd0, 0xc2, 0xd8, 0xd1, 0xc2, 0xd7, 0xcf, 0xc1, 0xd7, 0xd0, 0xc2, 0xd6, 0xcf, 0xc1, 0xd6, 0xcf, 0xc2, 0xd7, 0xcf, 0xc0, 0xd7, 0xce, 0xbf, 0xd6, 0xce, 0xc0, 0xd5, 0xce, 0xc0, 0xd6, 0xce, 0xbf, 0xd5, 0xcd, 0xbf, 0xd5, 0xcd, 0xbe, 0xd5, 0xcd, 0xbe, 0xd4, 0xcc, 0xbd, 0xd5, 0xcc, 0xbd, 0xd4, 0xcc, 0xbc, 0xd4, 0x47, 0x40, 0x4a, 0x1d, 0x1a, 0x1f, 0x69, 0x5f, 0x6f, 0x4a, 0x42, 0x4f, 0x5e, 0x54, 0x63, 0x3b, 0x34, 0x3f, 0x5e, 0x55, 0x63, 0x63, 0x59, 0x67, 0x77, 0x6d, 0x7b, 0x6d, 0x62, 0x73, 0x7f, 0x76, 0x85, 0xdb, 0xd9, 0xcd, 0xdb, 0xd8, 0xcd, 0x6d, 0x62, 0x74, 0x8f, 0x84, 0x94, 0x7f, 0x76, 0x83, 0xdb, 0xd8, 0xcd, 0xa4, 0x95, 0xa4, 0x7e, 0x74, 0x84, 0x74, 0x6b, 0x79, 0x6f, 0x66, 0x74, 0x96, 0x8a, 0xa2, 0x91, 0x88, 0x9b, 0x0, 0x0, 0x0, 0xaa, 0xaa, 0xaa, 0xbf, 0xbf, 0xbf, 0xf0, 0xc9, 0xec, 0x71, 0x0, 0x0, 0x0, 0x75, 0x74, 0x52, 0x4e, 0x53, 0x1, 0x3, 0xa, 0x13, 0x1a, 0x1c, 0x1d, 0x10, 0x2b, 0x4d, 0x64, 0x6e, 0x72, 0xb, 0x2c, 0x6a, 0xfc, 0xff, 0x15, 0x52, 0xfd, 0xff, 0xe2, 0xe2, 0xe2, 0x1b, 0x68, 0xe2, 0xe2, 0xe2, 0x71, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0x1e, 0x72, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0x6b, 0xc7, 0x56, 0xfe, 0xff, 0xc7, 0x30, 0x74, 0xfe, 0x11, 0x57, 0x6d, 0x72, 0x16, 0x1c, 0x0, 0x3, 0x4, 0x35, 0xf5, 0x4, 0x26, 0x0, 0x0, 0x1, 0x1f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0xd0, 0x35, 0x82, 0x1c, 0x31, 0x14, 0x84, 0xe1, 0xbf, 0xa4, 0xd7, 0x32, 0x33, 0xb3, 0xf, 0x63, 0x8e, 0xcd, 0x10, 0xcd, 0x99, 0x1c, 0x3a, 0x75, 0xe8, 0xcc, 0xbe, 0x8e, 0x99, 0x79, 0xb9, 0x49, 0x6f, 0x49, 0xd3, 0xcb, 0x7b, 0x82, 0xa9, 0xac, 0x3e, 0xb1, 0xc, 0xad, 0x4, 0xf0, 0x95, 0x98, 0xd2, 0x6, 0x68, 0xec, 0x60, 0xa9, 0xac, 0x52, 0xb2, 0x6a, 0xf3, 0x92, 0x3d, 0x9a, 0xdf, 0x2f, 0x39, 0x20, 0xf7, 0xb9, 0x7d, 0x6e, 0xbf, 0xcf, 0x62, 0xea, 0xaa, 0x96, 0x24, 0x69, 0xce, 0xbe, 0xd9, 0x55, 0x4d, 0xef, 0x5b, 0xd8, 0xbb, 0x90, 0x9a, 0xa6, 0x39, 0x21, 0xf6, 0x5d, 0xb5, 0x77, 0xa9, 0x8a, 0x7, 0x35, 0xd5, 0xc0, 0x19, 0x32, 0x9f, 0xcf, 0x1b, 0x10, 0x3d, 0x9c, 0x1, 0x20, 0x2, 0x6, 0x84, 0xbf, 0x24, 0x9a, 0x44, 0x73, 0xac, 0x80, 0x4e, 0x80, 0x5c, 0x4e, 0x28, 0x60, 0x2, 0xc9, 0x3d, 0xa8, 0x40, 0x25, 0xe6, 0x0, 0xe, 0xe4, 0x2, 0x51, 0x1c, 0x2, 0x40, 0x5, 0x82, 0xa4, 0x2c, 0x3c, 0x76, 0xc3, 0x12, 0x51, 0xfb, 0x9e, 0xba, 0xdb, 0x3b, 0x6c, 0x2a, 0x45, 0xd8, 0xaf, 0x3c, 0x86, 0x3e, 0x57, 0x31, 0xc7, 0x7e, 0x98, 0x51, 0x25, 0x39, 0xca, 0x15, 0x1a, 0x3, 0x2, 0x8f, 0xc0, 0x70, 0xa, 0x20, 0x1c, 0x2f, 0x10, 0x87, 0x2f, 0x1c, 0x66, 0xec, 0xe, 0x1b, 0x33, 0x81, 0xd, 0x99, 0xc0, 0x55, 0xfd, 0x8, 0x5e, 0x4a, 0xe0, 0x82, 0x1b, 0xf3, 0x68, 0xc, 0x62, 0x7e, 0xaf, 0x4d, 0xdf, 0x79, 0x15, 0xf2, 0x30, 0xe3, 0xfa, 0x1b, 0xab, 0xc3, 0x3d, 0x59, 0xe3, 0x99, 0xa0, 0xe4, 0xf7, 0xbc, 0xb6, 0xd6, 0xa4, 0x97, 0x65, 0xc6, 0x63, 0xf7, 0xd6, 0x66, 0x62, 0x1f, 0x9f, 0xe9, 0x5, 0x30, 0x72, 0xef, 0xe2, 0x8c, 0xf9, 0xf3, 0x83, 0x23, 0xbd, 0x3e, 0xf, 0x2c, 0x6e, 0xbb, 0xf7, 0xff, 0x5, 0x5f, 0xfe, 0xb3, 0x14, 0x31, 0xf4, 0x31, 0x33, 0xfa, 0x41, 0xd3, 0xe9, 0xe7, 0x22, 0x6, 0x0, 0xb4, 0xb3, 0x74, 0xef, 0x4f, 0xde, 0x59, 0x95, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x40, 0x8, 0x3, 0x0, 0x0, 0x0, 0x24, 0xa3, 0x7, 0xa4, 0x0, 0x0, 0x1, 0x5f, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xb2, 0xcc, 0xae, 0xa0, 0xbb, 0x9c, 0x92, 0xa6, 0x9a, 0x91, 0xa4, 0x95, 0x8c, 0x9e, 0xaf, 0x9f, 0xaf, 0xa0, 0x94, 0xa5, 0x8e, 0x84, 0x95, 0x7f, 0x75, 0x84, 0x73, 0x6a, 0x78, 0x6d, 0x64, 0x72, 0xa2, 0xa2, 0xb9, 0x9c, 0x90, 0xa2, 0x8b, 0x81, 0x90, 0xdc, 0xda, 0xce, 0xe2, 0xe1, 0xd2, 0x9d, 0x91, 0xa9, 0x85, 0x7c, 0x8c, 0xdb, 0xd9, 0xce, 0xdb, 0xd9, 0xcd, 0xda, 0xce, 0xe0, 0xde, 0xd5, 0xe3, 0xdf, 0xd6, 0xe4, 0x97, 0x8d, 0xa0, 0x7a, 0x70, 0x7f, 0xdb, 0xd0, 0xdf, 0xdb, 0xd0, 0xe1, 0xda, 0xd0, 0xe1, 0x70, 0x67, 0x75, 0xd8, 0xcb, 0xde, 0xda, 0xcf, 0xdf, 0xdb, 0xce, 0xe1, 0xdb, 0xcf, 0xe1, 0xdb, 0xd0, 0xe0, 0xda, 0xcf, 0xe0, 0xd8, 0xcc, 0xde, 0x90, 0x87, 0x99, 0x6d, 0x67, 0x72, 0xd7, 0xcc, 0xdf, 0xda, 0xce, 0xdf, 0xd8, 0xcb, 0xdf, 0xd7, 0xca, 0xde, 0xd9, 0xcc, 0xdf, 0xd9, 0xcd, 0xdf, 0xd6, 0xc9, 0xdd, 0xd9, 0xcd, 0xde, 0xd6, 0xc8, 0xdc, 0xd5, 0xc8, 0xdc, 0xd7, 0xcb, 0xdd, 0xd7, 0xca, 0xdd, 0xd5, 0xc7, 0xdc, 0xd3, 0xc6, 0xdb, 0xd5, 0xc9, 0xdc, 0xd5, 0xc9, 0xdd, 0xd6, 0xc9, 0xdc, 0xd4, 0xc6, 0xdb, 0xd3, 0xc5, 0xdb, 0xd5, 0xc8, 0xdb, 0xd4, 0xc8, 0xdc, 0xd3, 0xc4, 0xd9, 0xd4, 0xc6, 0xda, 0xd2, 0xc3, 0xd9, 0xd3, 0xc5, 0xda, 0xd2, 0xc5, 0xd9, 0xd3, 0xc5, 0xd9, 0xd2, 0xc5, 0xda, 0xd1, 0xc2, 0xd9, 0xd2, 0xc4, 0xd8, 0xd2, 0xc4, 0xd9, 0xd0, 0xc2, 0xd9, 0xd0, 0xc1, 0xd7, 0xd0, 0xc2, 0xd7, 0xd0, 0xc2, 0xd8, 0xd1, 0xc2, 0xd7, 0xcf, 0xc1, 0xd7, 0xd0, 0xc2, 0xd6, 0xcf, 0xc1, 0xd6, 0xcf, 0xc2, 0xd7, 0xcf, 0xc0, 0xd7, 0xce, 0xbf, 0xd6, 0xce, 0xc0, 0xd5, 0xce, 0xc0, 0xd6, 0xce, 0xbf, 0xd5, 0xcd, 0xbf, 0xd5, 0xcd, 0xbe, 0xd5, 0xcd, 0xbe, 0xd4, 0xcc, 0xbd, 0xd5, 0xcc, 0xbd, 0xd4, 0xcc, 0xbc, 0xd4, 0x47, 0x40, 0x4a, 0x1d, 0x1a, 0x1f, 0x69, 0x5f, 0x6f, 0x4a, 0x42, 0x4f, 0x5e, 0x54, 0x63, 0x3b, 0x34, 0x3f, 0x5e, 0x55, 0x63, 0x63, 0x59, 0x67, 0x77, 0x6d, 0x7b, 0x6d, 0x62, 0x73, 0x7f, 0x76, 0x85, 0xdb, 0xd9, 0xcd, 0xdb, 0xd8, 0xcd, 0x6d, 0x62, 0x74, 0x8f, 0x84, 0x94, 0x7f, 0x76, 0x83, 0xdb, 0xd8, 0xcd, 0xa4, 0x95, 0xa4, 0x7e, 0x74, 0x84, 0x74, 0x6b, 0x79, 0x6f, 0x66, 0x74, 0x96, 0x8a, 0xa2, 0x91, 0x88, 0x9b, 0x0, 0x0, 0x0, 0xaa, 0xaa, 0xaa, 0xbf, 0xbf, 0xbf, 0xf0, 0xc9, 0xec, 0x71, 0x0, 0x0, 0x0, 0x75, 0x74, 0x52, 0x4e, 0x53, 0x1, 0x3, 0xa, 0x13, 0x1a, 0x1c, 0x1d, 0x10, 0x2b, 0x4d, 0x64, 0x6e, 0x72, 0xb, 0x2c, 0x6a, 0xfc, 0xff, 0x15, 0x52, 0xfd, 0xff, 0xe2, 0xe2, 0xe2, 0x1b, 0x68, 0xe2, 0xe2, 0xe2, 0x71, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0x1e, 0x72, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0x6b, 0xc7, 0x56, 0xfe, 0xff, 0xc7, 0x30, 0x74, 0xfe, 0x11, 0x57, 0x6d, 0x72, 0x16, 0x1c, 0x0, 0x3, 0x4, 0x35, 0xf5, 0x4, 0x26, 0x0, 0x0, 0x1, 0x16, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0xcc, 0xc5, 0x61, 0x95, 0x61, 0x10, 0x85, 0xe1, 0xf7, 0x8c, 0x5c, 0xc3, 0xdd, 0x65, 0x4d, 0xea, 0xc8, 0x6, 0xdb, 0x63, 0xab, 0x74, 0x90, 0x42, 0xe8, 0x20, 0x5b, 0x3a, 0xa0, 0x12, 0xaa, 0xc0, 0x25, 0xd7, 0xe5, 0x1f, 0xec, 0xc3, 0xa5, 0x82, 0x9c, 0xdd, 0x79, 0x46, 0x84, 0xbe, 0x4, 0xa8, 0x2f, 0x91, 0x7a, 0xbf, 0xc0, 0x52, 0x47, 0x5a, 0xa5, 0x51, 0xe4, 0x6f, 0x27, 0xd1, 0xd7, 0x6c, 0x24, 0x15, 0xa0, 0xaa, 0xe9, 0xb0, 0xec, 0x75, 0x10, 0x51, 0x9, 0xbd, 0xde, 0x60, 0x44, 0xbc, 0xb6, 0xeb, 0x43, 0x86, 0xc, 0x56, 0x3d, 0x96, 0xfb, 0x99, 0xc, 0xaf, 0xfb, 0xfe, 0xd4, 0x8f, 0xf5, 0xf3, 0xc3, 0x72, 0xb3, 0x39, 0x67, 0xec, 0xbf, 0x3b, 0x12, 0x80, 0x97, 0x9d, 0x3, 0xc0, 0x81, 0x0, 0xec, 0x2d, 0x3d, 0x96, 0x3d, 0x96, 0x27, 0x1a, 0xe8, 0x14, 0xa8, 0x54, 0x58, 0x83, 0x10, 0x48, 0x55, 0xa6, 0x6, 0x29, 0xa6, 0x0, 0x87, 0xba, 0x6, 0x2e, 0x8e, 0x0, 0xa0, 0x6, 0x26, 0xa9, 0x13, 0xe5, 0x6b, 0xc0, 0x80, 0xcc, 0x8c, 0xea, 0xb2, 0xd6, 0x83, 0xef, 0x4f, 0x25, 0x87, 0x91, 0xba, 0xb6, 0x11, 0x74, 0x96, 0xde, 0xf3, 0xae, 0x6d, 0x90, 0x3d, 0x15, 0xea, 0x12, 0xd1, 0x0, 0x41, 0x39, 0xd0, 0xc0, 0x4, 0x88, 0xa2, 0x1a, 0xb8, 0x0, 0xe0, 0x3b, 0xd8, 0x7f, 0xc1, 0xf8, 0x25, 0x7, 0xf0, 0x4b, 0x3b, 0x80, 0xb8, 0xae, 0x17, 0x56, 0xad, 0x18, 0x97, 0xca, 0x98, 0xa1, 0xd6, 0x11, 0x33, 0x6c, 0x7f, 0x1b, 0xe3, 0xfb, 0xc6, 0xf6, 0xbe, 0xf7, 0xb6, 0xb6, 0x2c, 0x3b, 0xa, 0xb3, 0xbe, 0x6e, 0xe8, 0x59, 0xac, 0x42, 0x7a, 0xd2, 0x36, 0xee, 0x57, 0xad, 0x62, 0xec, 0x1b, 0x7f, 0xa4, 0x3d, 0x60, 0xa7, 0x6a, 0xed, 0x63, 0xa1, 0xc3, 0x3b, 0x7a, 0xa, 0xc0, 0xad, 0xda, 0x1b, 0x57, 0xec, 0xf2, 0xd8, 0x75, 0x17, 0x0, 0x6a, 0x7f, 0x97, 0x8f, 0x54, 0xa2, 0x67, 0xc8, 0xba, 0xb8, 0x46, 0x24, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char graph_port_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, 0x8, 0x4, 0x0, 0x0, 0x0, 0x27, 0x3b, 0x7, 0x36, 0x0, 0x0, 0x0, 0x72, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x65, 0xce, 0x41, 0xa, 0x83, 0x30, 0x10, 0x85, 0xe1, 0xb9, 0x98, 0xe2, 0x9, 0x3c, 0x50, 0xe9, 0xc6, 0x83, 0x45, 0x7b, 0x8b, 0xfc, 0x7a, 0x1, 0xd7, 0x49, 0xba, 0xd, 0xd3, 0x79, 0xd0, 0x16, 0x41, 0xfe, 0x6c, 0xe6, 0x83, 0xc0, 0x33, 0x8f, 0xf2, 0xc4, 0xc6, 0x3b, 0x5a, 0x99, 0x75, 0xc7, 0xe3, 0x49, 0xc7, 0x7f, 0xe5, 0x25, 0x30, 0x4f, 0xa2, 0xd3, 0x6b, 0x74, 0x8a, 0xfb, 0x31, 0x1a, 0x2f, 0x51, 0xfb, 0x26, 0x66, 0x35, 0x1a, 0x5e, 0xff, 0x58, 0x84, 0xd5, 0xa8, 0x37, 0x2c, 0xc6, 0x76, 0xfb, 0x9e, 0x8c, 0x19, 0x17, 0x97, 0x48, 0x44, 0xdf, 0x7, 0xad, 0x5c, 0x2e, 0x93, 0x7a, 0x7e, 0x68, 0x67, 0x74, 0x8c, 0x24, 0x1a, 0x95, 0xb4, 0xf, 0xba, 0x3f, 0x56, 0x94, 0xa6, 0x72, 0xc9, 0xf9, 0xda, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xa, 0x8, 0x4, 0x0, 0x0, 0x0, 0x27, 0x3b, 0x7, 0x36, 0x0, 0x0, 0x0, 0x6e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x65, 0x8e, 0xc1, 0xd, 0xc2, 0x30, 0x10, 0x4, 0xb7, 0x31, 0x22, 0x2a, 0x48, 0x41, 0x88, 0x4f, 0xa, 0x73, 0x42, 0x17, 0x1e, 0xd2, 0x40, 0xde, 0x3e, 0xf3, 0xb5, 0x8c, 0x8f, 0x13, 0x8, 0x29, 0x3b, 0xbf, 0xd1, 0x9e, 0xf6, 0xe4, 0xc9, 0x57, 0x36, 0x5e, 0x83, 0x95, 0x59, 0x11, 0xee, 0x34, 0xfa, 0x97, 0xbc, 0x44, 0x6b, 0xa8, 0xa3, 0xdb, 0xe0, 0x70, 0xdd, 0xf6, 0x49, 0x3c, 0x5c, 0xd5, 0x20, 0xf4, 0x2a, 0x2a, 0xdd, 0x7e, 0xb2, 0xb8, 0x34, 0x61, 0x27, 0x59, 0xc4, 0x76, 0x3a, 0x4f, 0x62, 0xa6, 0xbb, 0x2e, 0x83, 0x18, 0x7a, 0x5e, 0x7c, 0x7f, 0xf9, 0x7b, 0xa9, 0xe5, 0x9b, 0x22, 0xfb, 0x44, 0xa2, 0x62, 0xa4, 0x4f, 0x4b, 0x6f, 0x69, 0x3b, 0x9a, 0x7e, 0xcd, 0xde, 0x94, 0x27, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char hseparator_png[] = { @@ -167,7 +167,7 @@ static const unsigned char icon_snap_grid_png[] = { }; static const unsigned char icon_visibility_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x3, 0x73, 0x42, 0x49, 0x54, 0x8, 0x8, 0x8, 0xdb, 0xe1, 0x4f, 0xe0, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xe, 0xc4, 0x0, 0x0, 0xe, 0xc4, 0x1, 0x95, 0x2b, 0xe, 0x1b, 0x0, 0x0, 0x0, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x0, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x0, 0x0, 0x0, 0x96, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0xdf, 0xdf, 0xdf, 0xe3, 0xe3, 0xe3, 0xe6, 0xe6, 0xe6, 0xd5, 0xd5, 0xd5, 0xd8, 0xd8, 0xd8, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xe1, 0xe1, 0xe1, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xde, 0xde, 0xde, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xb7, 0x7e, 0xd, 0xb6, 0x0, 0x0, 0x0, 0x32, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x8, 0x9, 0xa, 0xc, 0xd, 0xe, 0xf, 0x11, 0x12, 0x13, 0x2e, 0x2f, 0x32, 0x33, 0x36, 0x37, 0x38, 0x48, 0x49, 0x4b, 0x50, 0x53, 0x55, 0x56, 0x6c, 0x6d, 0x6e, 0x70, 0x77, 0x79, 0x7b, 0x7c, 0xc5, 0xd7, 0xd8, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe2, 0xe3, 0xf0, 0xf2, 0xf3, 0xf4, 0xfe, 0x5e, 0x62, 0x1a, 0x26, 0x0, 0x0, 0x0, 0x86, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x8d, 0xc1, 0xb, 0x16, 0x42, 0x40, 0x0, 0x86, 0xd1, 0x2f, 0xa2, 0x77, 0x2a, 0x85, 0xde, 0x91, 0x5e, 0x33, 0x8a, 0x7f, 0xff, 0x9b, 0xcb, 0x99, 0x63, 0x1, 0xee, 0xa5, 0x9f, 0xc1, 0x3e, 0x6f, 0xea, 0xfc, 0xe0, 0xd1, 0x99, 0xdd, 0xe5, 0x94, 0xb, 0x9c, 0xf9, 0x57, 0x26, 0x9, 0x82, 0x5d, 0xa1, 0xdf, 0x92, 0x96, 0xf7, 0x94, 0x99, 0xd0, 0x1a, 0x1b, 0x7d, 0x7c, 0xe0, 0x2c, 0x25, 0x6c, 0x2b, 0x1b, 0x93, 0x4a, 0x17, 0xa0, 0x94, 0x2, 0xac, 0x64, 0x8, 0xa5, 0x12, 0x78, 0x48, 0x1, 0x56, 0x32, 0x8c, 0xa4, 0x7, 0x70, 0x93, 0x76, 0xc4, 0xd6, 0x6c, 0xc8, 0xa4, 0x2b, 0x30, 0xac, 0x54, 0x8c, 0x69, 0x4d, 0xad, 0xcc, 0x90, 0xd6, 0xba, 0x91, 0x49, 0xc3, 0x30, 0xb3, 0x6a, 0x22, 0x9c, 0xd5, 0x5b, 0xce, 0x2b, 0xa2, 0xe3, 0x9f, 0xf2, 0xba, 0xce, 0x8f, 0x3e, 0xbd, 0xfc, 0x1, 0xdb, 0xf3, 0x10, 0xc5, 0x78, 0x85, 0x14, 0x89, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xe, 0xc4, 0x0, 0x0, 0xe, 0xc4, 0x1, 0x95, 0x2b, 0xe, 0x1b, 0x0, 0x0, 0x0, 0x3, 0x73, 0x42, 0x49, 0x54, 0x8, 0x8, 0x8, 0xdb, 0xe1, 0x4f, 0xe0, 0x0, 0x0, 0x0, 0x96, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0xdf, 0xdf, 0xdf, 0xe3, 0xe3, 0xe3, 0xe6, 0xe6, 0xe6, 0xd5, 0xd5, 0xd5, 0xd8, 0xd8, 0xd8, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xe1, 0xe1, 0xe1, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xde, 0xde, 0xde, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xb7, 0x7e, 0xd, 0xb6, 0x0, 0x0, 0x0, 0x32, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x8, 0x9, 0xa, 0xc, 0xd, 0xe, 0xf, 0x11, 0x12, 0x13, 0x2e, 0x2f, 0x32, 0x33, 0x36, 0x37, 0x38, 0x48, 0x49, 0x4b, 0x50, 0x53, 0x55, 0x56, 0x6c, 0x6d, 0x6e, 0x70, 0x77, 0x79, 0x7b, 0x7c, 0xc5, 0xd7, 0xd8, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe2, 0xe3, 0xf0, 0xf2, 0xf3, 0xf4, 0xfe, 0x5e, 0x62, 0x1a, 0x26, 0x0, 0x0, 0x0, 0x83, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x8d, 0xc8, 0x45, 0x42, 0x3, 0x1, 0x0, 0xc0, 0xc0, 0xd4, 0x8b, 0x43, 0x1d, 0x5f, 0x77, 0xcb, 0xff, 0x1f, 0x87, 0xd3, 0xf3, 0xe6, 0x36, 0x61, 0x5c, 0x93, 0xc7, 0x70, 0xe8, 0xc3, 0xa7, 0xe9, 0xbf, 0xaf, 0x62, 0x55, 0x4d, 0x6e, 0x7e, 0x7d, 0xdd, 0x5a, 0x1d, 0x16, 0x8b, 0x7d, 0x64, 0x77, 0xfb, 0xed, 0x69, 0x66, 0x75, 0x1, 0xb0, 0xae, 0x2c, 0x67, 0xc0, 0xab, 0x1e, 0xd8, 0x35, 0xf5, 0x96, 0xa3, 0xbe, 0x1, 0x89, 0x2e, 0xa8, 0xb5, 0x62, 0xa9, 0x9, 0x90, 0x9e, 0xc7, 0x4a, 0x53, 0x20, 0xd0, 0x3d, 0xdb, 0xba, 0xda, 0x70, 0xd2, 0x77, 0x60, 0xde, 0x18, 0xad, 0x1, 0x2e, 0x6b, 0xab, 0x39, 0xc0, 0xc3, 0x60, 0x75, 0x5c, 0x2e, 0x4f, 0xb5, 0xc3, 0x1d, 0x3f, 0xdd, 0x17, 0xaa, 0x9a, 0xff, 0x19, 0x66, 0x2f, 0x61, 0xdf, 0x87, 0xcf, 0x33, 0x46, 0xf5, 0x9, 0xdb, 0xf3, 0x10, 0xc5, 0x55, 0x93, 0xc, 0xea, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char icon_zoom_less_png[] = { @@ -211,13 +211,17 @@ static const unsigned char option_button_hover_png[] = { }; static const unsigned char option_button_normal_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x40, 0xde, 0x8d, 0x6b, 0x0, 0x0, 0x1, 0x41, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x2b, 0x2b, 0x31, 0x2e, 0x2e, 0x34, 0x56, 0x52, 0x60, 0x2a, 0x2a, 0x30, 0x47, 0x44, 0x52, 0x22, 0x22, 0x27, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x24, 0x24, 0x28, 0x24, 0x24, 0x29, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x5d, 0x5a, 0x6a, 0x2a, 0x2a, 0x31, 0x2a, 0x2a, 0x30, 0x2d, 0x2d, 0x34, 0x2f, 0x2f, 0x36, 0x2e, 0x2e, 0x35, 0x2c, 0x2c, 0x32, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x26, 0x26, 0x2b, 0x24, 0x24, 0x28, 0x27, 0x27, 0x2d, 0x29, 0x29, 0x2f, 0x28, 0x28, 0x2e, 0x25, 0x25, 0x2b, 0x23, 0x23, 0x28, 0x40, 0x3e, 0x48, 0x50, 0x4e, 0x5a, 0x26, 0x26, 0x2c, 0x25, 0x25, 0x2a, 0x2a, 0x2a, 0x2f, 0x2b, 0x2b, 0x31, 0x22, 0x22, 0x26, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x2d, 0x2d, 0x33, 0x22, 0x22, 0x27, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x27, 0x27, 0x2b, 0x2e, 0x2e, 0x34, 0x2c, 0x2c, 0x31, 0x29, 0x29, 0x2e, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x24, 0x24, 0x2a, 0x24, 0x24, 0x29, 0x20, 0x20, 0x25, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x28, 0x28, 0x2d, 0x2b, 0x2b, 0x30, 0x29, 0x29, 0x2d, 0x20, 0x20, 0x23, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x22, 0x22, 0x28, 0x27, 0x27, 0x2c, 0x1e, 0x1e, 0x22, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x46, 0x42, 0x4f, 0x21, 0x21, 0x26, 0x21, 0x21, 0x25, 0x23, 0x23, 0x27, 0x20, 0x20, 0x24, 0x1d, 0x1d, 0x21, 0x36, 0x34, 0x3e, 0x44, 0x41, 0x4e, 0x1f, 0x1f, 0x24, 0x1f, 0x1f, 0x23, 0x1e, 0x1e, 0x21, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x4e, 0x4b, 0x58, 0x8, 0xd9, 0x10, 0xcb, 0x0, 0x0, 0x0, 0x24, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x1d, 0x16, 0xd, 0x7, 0x2, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x43, 0x3a, 0x2d, 0x1b, 0x77, 0xef, 0xe6, 0x49, 0xef, 0xe6, 0xef, 0xe7, 0x77, 0xef, 0xe4, 0x4a, 0xba, 0xea, 0xc1, 0xeb, 0x0, 0x0, 0x0, 0xe7, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6c, 0x91, 0x53, 0x62, 0x5, 0x41, 0x14, 0x44, 0xab, 0x46, 0xb1, 0x6d, 0x67, 0x3, 0x59, 0x44, 0x16, 0x9e, 0xdf, 0xe8, 0x2f, 0xb6, 0xcd, 0xe7, 0x61, 0xe3, 0x3e, 0x4e, 0xb5, 0x2e, 0x4e, 0xdb, 0xa3, 0x11, 0x80, 0xc4, 0x51, 0xc6, 0x3f, 0x5a, 0xe5, 0xb1, 0x4f, 0x8, 0xd5, 0xff, 0x15, 0xd1, 0x26, 0xba, 0x7d, 0xbd, 0xec, 0xa3, 0x75, 0x94, 0x24, 0x11, 0xbb, 0xe1, 0x2f, 0x1f, 0xe0, 0x91, 0xde, 0x8, 0xf3, 0x1, 0xe, 0x3d, 0x42, 0x1, 0xe3, 0x49, 0xf, 0x1a, 0xc0, 0xb7, 0xb5, 0x47, 0x92, 0x52, 0xb7, 0x3b, 0x79, 0xa7, 0x80, 0x21, 0xc2, 0x2a, 0xa9, 0x15, 0x8b, 0x8e, 0x1c, 0x2e, 0x64, 0x71, 0x4, 0xd0, 0x5b, 0x34, 0x80, 0xa0, 0x34, 0x29, 0xab, 0xd5, 0x7a, 0xfb, 0x5e, 0xc2, 0x51, 0xc0, 0x3, 0x83, 0x6, 0x10, 0xa2, 0xa1, 0x62, 0x1f, 0xf0, 0xae, 0x0, 0x38, 0xd, 0xe0, 0x67, 0xfe, 0xe9, 0xb, 0x72, 0x86, 0xb7, 0x5, 0x46, 0xa, 0x48, 0xfc, 0xa6, 0x15, 0x1e, 0x96, 0xc5, 0x79, 0x99, 0xbe, 0x78, 0x59, 0x2c, 0x1, 0x5e, 0x92, 0x34, 0x6d, 0xb1, 0xf9, 0xda, 0x75, 0x66, 0x6d, 0xfa, 0xf3, 0x5, 0x7f, 0x58, 0x3, 0x8d, 0x15, 0xc8, 0x85, 0xf3, 0xd, 0x6b, 0x1f, 0xdf, 0x6e, 0x8c, 0x33, 0xd4, 0xc0, 0xce, 0xd6, 0xa8, 0x0, 0xd5, 0x20, 0xbc, 0xb5, 0xf6, 0xc2, 0x68, 0xb6, 0xf4, 0x8d, 0x6, 0x9c, 0xc3, 0x6d, 0x5a, 0x60, 0xf, 0x53, 0x7d, 0x72, 0x86, 0x6a, 0xf4, 0xf1, 0xed, 0x1, 0x74, 0x5a, 0x3f, 0xab, 0x94, 0xee, 0x3f, 0x7a, 0x64, 0x11, 0x8a, 0x6e, 0x0, 0x80, 0xdd, 0x4f, 0x5c, 0xe, 0xd7, 0x26, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x40, 0xde, 0x8d, 0x6b, 0x0, 0x0, 0x1, 0x41, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x2b, 0x2b, 0x31, 0x2e, 0x2e, 0x34, 0x56, 0x52, 0x60, 0x2a, 0x2a, 0x30, 0x47, 0x44, 0x52, 0x22, 0x22, 0x27, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x24, 0x24, 0x28, 0x24, 0x24, 0x29, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x5d, 0x5a, 0x6a, 0x2a, 0x2a, 0x31, 0x2a, 0x2a, 0x30, 0x2d, 0x2d, 0x34, 0x2f, 0x2f, 0x36, 0x2e, 0x2e, 0x35, 0x2c, 0x2c, 0x32, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x26, 0x26, 0x2b, 0x24, 0x24, 0x28, 0x27, 0x27, 0x2d, 0x29, 0x29, 0x2f, 0x28, 0x28, 0x2e, 0x25, 0x25, 0x2b, 0x23, 0x23, 0x28, 0x40, 0x3e, 0x48, 0x50, 0x4e, 0x5a, 0x26, 0x26, 0x2c, 0x25, 0x25, 0x2a, 0x2a, 0x2a, 0x2f, 0x2b, 0x2b, 0x31, 0x22, 0x22, 0x26, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x2d, 0x2d, 0x33, 0x22, 0x22, 0x27, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x27, 0x27, 0x2b, 0x2e, 0x2e, 0x34, 0x2c, 0x2c, 0x31, 0x29, 0x29, 0x2e, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x24, 0x24, 0x2a, 0x24, 0x24, 0x29, 0x20, 0x20, 0x25, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x28, 0x28, 0x2d, 0x2b, 0x2b, 0x30, 0x29, 0x29, 0x2d, 0x20, 0x20, 0x23, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x22, 0x22, 0x28, 0x27, 0x27, 0x2c, 0x1e, 0x1e, 0x22, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x46, 0x42, 0x4f, 0x21, 0x21, 0x26, 0x21, 0x21, 0x25, 0x23, 0x23, 0x27, 0x20, 0x20, 0x24, 0x1d, 0x1d, 0x21, 0x36, 0x34, 0x3e, 0x44, 0x41, 0x4e, 0x1f, 0x1f, 0x24, 0x1f, 0x1f, 0x23, 0x1e, 0x1e, 0x21, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x4e, 0x4b, 0x58, 0x8, 0xd9, 0x10, 0xcb, 0x0, 0x0, 0x0, 0x24, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x1d, 0x16, 0xd, 0x7, 0x2, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x43, 0x3a, 0x2d, 0x1b, 0x77, 0xef, 0xe6, 0x49, 0xef, 0xe6, 0xef, 0xe7, 0x77, 0xef, 0xe4, 0x4a, 0xba, 0xea, 0xc1, 0xeb, 0x0, 0x0, 0x0, 0xe6, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6c, 0xd1, 0x55, 0x5a, 0xc4, 0x30, 0x14, 0x5, 0xe0, 0x73, 0xea, 0x82, 0xbb, 0x3b, 0x6c, 0x80, 0x45, 0xb0, 0x70, 0x5e, 0xb1, 0x37, 0xdc, 0x75, 0xdc, 0x3d, 0x43, 0x2a, 0x5f, 0x3a, 0x7e, 0x6a, 0xc9, 0xbd, 0x7f, 0x9d, 0x2a, 0x0, 0xa4, 0x16, 0xd, 0xaa, 0x18, 0x8e, 0x41, 0x3f, 0x11, 0xd1, 0xbe, 0x52, 0xc7, 0x48, 0xa8, 0xfb, 0x5e, 0x68, 0xd4, 0x24, 0x96, 0x6a, 0xfc, 0xaf, 0x8b, 0x32, 0xbf, 0x61, 0x90, 0xc6, 0x3c, 0x27, 0x3, 0xce, 0xfe, 0x20, 0x2, 0x4b, 0xd2, 0x45, 0x1f, 0x14, 0xd5, 0x78, 0x5e, 0x36, 0x1c, 0x7d, 0xe5, 0x33, 0x2, 0xb3, 0x84, 0x8a, 0xec, 0xd4, 0xeb, 0x9a, 0x1a, 0x1b, 0x82, 0xf5, 0x79, 0x20, 0x2, 0x46, 0x1f, 0x58, 0x8d, 0x95, 0xe4, 0x6a, 0x1d, 0xcf, 0x4f, 0x89, 0x85, 0x10, 0x80, 0x56, 0x1f, 0x8, 0xf4, 0x53, 0xf7, 0x81, 0x6c, 0x4, 0xa0, 0xf5, 0x41, 0x69, 0xeb, 0xb7, 0xd0, 0x7b, 0x86, 0xcc, 0x36, 0xbb, 0x11, 0x90, 0x66, 0x1f, 0x88, 0xef, 0xbd, 0x64, 0x92, 0x5a, 0x7b, 0x4e, 0xed, 0x34, 0x42, 0x20, 0xa5, 0xd5, 0x7, 0x27, 0x69, 0xfb, 0x51, 0x8d, 0x69, 0x6e, 0xd5, 0xcc, 0xb9, 0x18, 0xf4, 0xaf, 0x40, 0x6e, 0x3f, 0x1d, 0xab, 0xf1, 0xdd, 0xc7, 0xf1, 0x12, 0x45, 0xc, 0xce, 0x4f, 0x17, 0x12, 0xd0, 0xb6, 0xc4, 0x87, 0x1a, 0x6f, 0x2f, 0x48, 0x8b, 0xef, 0x31, 0xd0, 0x6e, 0xce, 0xa8, 0xc0, 0x25, 0x56, 0x7d, 0x5, 0x52, 0xed, 0x6e, 0xae, 0x68, 0x0, 0xd4, 0x86, 0x7f, 0x56, 0x43, 0x62, 0x38, 0xc, 0x46, 0x28, 0xba, 0x1, 0x7a, 0xad, 0x4f, 0x59, 0x90, 0xab, 0xbf, 0xa4, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char option_button_pressed_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x40, 0xde, 0x8d, 0x6b, 0x0, 0x0, 0x1, 0x4a, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x2f, 0x37, 0x46, 0x43, 0x4f, 0x2b, 0x2b, 0x31, 0x2e, 0x2e, 0x34, 0x47, 0x44, 0x50, 0x2a, 0x2a, 0x30, 0x55, 0x52, 0x5f, 0x22, 0x22, 0x27, 0x3d, 0x3a, 0x45, 0x56, 0x52, 0x60, 0x24, 0x24, 0x28, 0x24, 0x24, 0x29, 0x43, 0x40, 0x4c, 0x42, 0x40, 0x4b, 0x4c, 0x49, 0x56, 0x2a, 0x2a, 0x31, 0x2a, 0x2a, 0x30, 0x2d, 0x2d, 0x34, 0x2f, 0x2f, 0x36, 0x2e, 0x2e, 0x35, 0x2c, 0x2c, 0x32, 0x3a, 0x38, 0x41, 0x36, 0x34, 0x3d, 0x44, 0x41, 0x4c, 0x26, 0x26, 0x2b, 0x24, 0x24, 0x28, 0x27, 0x27, 0x2d, 0x29, 0x29, 0x2f, 0x28, 0x28, 0x2e, 0x25, 0x25, 0x2b, 0x23, 0x23, 0x28, 0x44, 0x42, 0x4e, 0x36, 0x34, 0x3e, 0x44, 0x41, 0x4e, 0x26, 0x26, 0x2c, 0x25, 0x25, 0x2a, 0x2a, 0x2a, 0x2f, 0x2b, 0x2b, 0x31, 0x22, 0x22, 0x26, 0x46, 0x42, 0x4f, 0x38, 0x35, 0x3f, 0x2d, 0x2d, 0x33, 0x22, 0x22, 0x27, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x27, 0x27, 0x2b, 0x2e, 0x2e, 0x34, 0x2c, 0x2c, 0x31, 0x29, 0x29, 0x2e, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x24, 0x24, 0x2a, 0x24, 0x24, 0x29, 0x20, 0x20, 0x25, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x28, 0x28, 0x2d, 0x2b, 0x2b, 0x30, 0x29, 0x29, 0x2d, 0x20, 0x20, 0x23, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x22, 0x22, 0x28, 0x27, 0x27, 0x2c, 0x1e, 0x1e, 0x22, 0x50, 0x4d, 0x5a, 0x3f, 0x3d, 0x48, 0x3f, 0x3d, 0x47, 0x4f, 0x4c, 0x59, 0x21, 0x21, 0x26, 0x21, 0x21, 0x25, 0x23, 0x23, 0x27, 0x20, 0x20, 0x24, 0x1d, 0x1d, 0x21, 0x45, 0x42, 0x4d, 0x41, 0x3e, 0x49, 0x40, 0x3e, 0x48, 0x50, 0x4e, 0x5a, 0x1f, 0x1f, 0x24, 0x1f, 0x1f, 0x23, 0x1e, 0x1e, 0x21, 0x52, 0x4e, 0x5c, 0x51, 0x4e, 0x5b, 0x5d, 0x59, 0x69, 0x10, 0x9d, 0xe0, 0x3c, 0x0, 0x0, 0x0, 0x24, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x1d, 0x16, 0xd, 0x7, 0x2, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x43, 0x3a, 0x2d, 0x1b, 0x77, 0xef, 0xe6, 0x49, 0xef, 0xe6, 0xef, 0xe7, 0x77, 0xef, 0xe4, 0x4a, 0xba, 0xea, 0xc1, 0xeb, 0x0, 0x0, 0x0, 0xe6, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6c, 0xcf, 0x3, 0x62, 0x4, 0x51, 0x10, 0x4, 0xd0, 0xaa, 0x31, 0x62, 0xdb, 0xb8, 0x49, 0x2e, 0x9e, 0x3b, 0xc4, 0xb6, 0x9d, 0xc5, 0x58, 0x1f, 0xc1, 0xd6, 0xe8, 0x77, 0xf7, 0x1b, 0x59, 0x6c, 0x2, 0x20, 0x37, 0xaa, 0xc5, 0x17, 0x7e, 0xc7, 0x62, 0x28, 0x45, 0x75, 0xfe, 0x6c, 0xe1, 0x4f, 0x68, 0x86, 0x41, 0x69, 0x44, 0x51, 0x4b, 0xb1, 0xce, 0xcc, 0xe4, 0x83, 0xd7, 0xb0, 0x48, 0x6b, 0x98, 0xe8, 0x9, 0x38, 0x70, 0x8b, 0xa, 0xcc, 0x12, 0x1a, 0xf0, 0x4d, 0xac, 0x87, 0xf3, 0x96, 0x6f, 0x8e, 0x5f, 0x56, 0xc0, 0x53, 0x20, 0x8f, 0xbf, 0xdb, 0x86, 0x58, 0x5b, 0x9, 0xbf, 0x47, 0x80, 0xa, 0x58, 0x1a, 0x38, 0xad, 0x9, 0x5f, 0xac, 0xe3, 0x20, 0xbc, 0x4b, 0x46, 0x4b, 0x0, 0x3a, 0x1a, 0x24, 0xd0, 0x69, 0x85, 0xc0, 0x63, 0x5, 0x60, 0x68, 0xf0, 0x36, 0x7f, 0xf3, 0xaa, 0xbe, 0xe1, 0x61, 0x81, 0x69, 0x5, 0x72, 0x5b, 0x83, 0xe4, 0x6a, 0x59, 0x16, 0xf7, 0x53, 0x47, 0x77, 0x8b, 0xad, 0x12, 0xe4, 0xb9, 0xa3, 0xc1, 0xe6, 0x83, 0x7b, 0x20, 0xd6, 0xb4, 0xe7, 0xbf, 0xed, 0xe1, 0x1a, 0xd8, 0xfa, 0xdf, 0xb9, 0x70, 0xb8, 0x21, 0xd6, 0xbb, 0x17, 0x1b, 0xe3, 0x4c, 0x6a, 0xb0, 0xbd, 0x25, 0x5, 0x3b, 0x5e, 0x7c, 0x21, 0xc0, 0xc2, 0x68, 0xee, 0xf1, 0xbc, 0x6, 0x46, 0xb1, 0xbd, 0x5e, 0x30, 0x5, 0x27, 0x19, 0x24, 0xb8, 0x61, 0x6e, 0xf8, 0xf5, 0xf7, 0xcd, 0x47, 0x16, 0xa0, 0x18, 0x13, 0x6a, 0x64, 0x7d, 0xff, 0x8f, 0x1e, 0x59, 0x84, 0xa2, 0x1b, 0x0, 0xe5, 0xe0, 0x4e, 0x46, 0x1d, 0x98, 0x92, 0x5c, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; +static const unsigned char overbright_indicator_png[] = { + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x4, 0x3, 0x0, 0x0, 0x0, 0xed, 0xdd, 0xe2, 0x52, 0x0, 0x0, 0x1, 0x85, 0x69, 0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x0, 0x0, 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, 0xc3, 0x40, 0x1c, 0xc5, 0x5f, 0x53, 0xa5, 0x2a, 0x2d, 0xe, 0x16, 0x11, 0x75, 0xc8, 0x50, 0x9d, 0x2c, 0x8a, 0x8a, 0x38, 0x6a, 0x15, 0x8a, 0x50, 0x21, 0xd4, 0xa, 0xad, 0x3a, 0x98, 0x5c, 0xfa, 0x21, 0x34, 0x69, 0x48, 0x52, 0x5c, 0x1c, 0x5, 0xd7, 0x82, 0x83, 0x1f, 0x8b, 0x55, 0x7, 0x17, 0x67, 0x5d, 0x1d, 0x5c, 0x5, 0x41, 0xf0, 0x3, 0xc4, 0xc5, 0xd5, 0x49, 0xd1, 0x45, 0x4a, 0xfc, 0x5f, 0x5a, 0x68, 0x11, 0xe3, 0xc1, 0x71, 0x3f, 0xde, 0xdd, 0x7b, 0xdc, 0xbd, 0x3, 0x84, 0x6a, 0x91, 0x69, 0x56, 0xdb, 0x18, 0xa0, 0xe9, 0xb6, 0x99, 0x8c, 0xc7, 0xc4, 0x74, 0x66, 0x45, 0xc, 0xbc, 0xa2, 0x13, 0x3, 0x8, 0xa1, 0x17, 0xa3, 0x32, 0xb3, 0x8c, 0x59, 0x49, 0x4a, 0xc0, 0x73, 0x7c, 0xdd, 0xc3, 0xc7, 0xd7, 0xbb, 0x28, 0xcf, 0xf2, 0x3e, 0xf7, 0xe7, 0x8, 0xa9, 0x59, 0x8b, 0x1, 0x3e, 0x91, 0x78, 0x86, 0x19, 0xa6, 0x4d, 0xbc, 0x4e, 0x3c, 0xb5, 0x69, 0x1b, 0x9c, 0xf7, 0x89, 0xc3, 0xac, 0x20, 0xab, 0xc4, 0xe7, 0xc4, 0x23, 0x26, 0x5d, 0x90, 0xf8, 0x91, 0xeb, 0x4a, 0x9d, 0xdf, 0x38, 0xe7, 0x5d, 0x16, 0x78, 0x66, 0xd8, 0x4c, 0x25, 0xe7, 0x88, 0xc3, 0xc4, 0x62, 0xbe, 0x85, 0x95, 0x16, 0x66, 0x5, 0x53, 0x23, 0x9e, 0x24, 0x8e, 0xa8, 0x9a, 0x4e, 0xf9, 0x42, 0xba, 0xce, 0x2a, 0xe7, 0x2d, 0xce, 0x5a, 0xb1, 0xcc, 0x1a, 0xf7, 0xe4, 0x2f, 0xc, 0x66, 0xf5, 0xe5, 0x25, 0xae, 0xd3, 0x1c, 0x44, 0x1c, 0xb, 0x58, 0x84, 0x4, 0x11, 0xa, 0xca, 0xd8, 0x40, 0x11, 0x36, 0xa2, 0xb4, 0xea, 0xa4, 0x58, 0x48, 0xd2, 0x7e, 0xcc, 0xc3, 0xdf, 0xef, 0xfa, 0x25, 0x72, 0x29, 0xe4, 0xda, 0x0, 0x23, 0xc7, 0x3c, 0x4a, 0xd0, 0x20, 0xbb, 0x7e, 0xf0, 0x3f, 0xf8, 0xdd, 0xad, 0x95, 0x9b, 0x18, 0xaf, 0x27, 0x5, 0x63, 0x40, 0xfb, 0x8b, 0xe3, 0x7c, 0xc, 0x1, 0x81, 0x5d, 0xa0, 0x56, 0x71, 0x9c, 0xef, 0x63, 0xc7, 0xa9, 0x9d, 0x0, 0xfe, 0x67, 0xe0, 0x4a, 0x6f, 0xfa, 0x4b, 0x55, 0x60, 0xfa, 0x93, 0xf4, 0x4a, 0x53, 0x8b, 0x1c, 0x1, 0xdd, 0xdb, 0xc0, 0xc5, 0x75, 0x53, 0x53, 0xf6, 0x80, 0xcb, 0x1d, 0xa0, 0xef, 0xc9, 0x90, 0x4d, 0xd9, 0x95, 0xfc, 0x34, 0x85, 0x5c, 0xe, 0x78, 0x3f, 0xa3, 0x6f, 0xca, 0x0, 0x3d, 0xb7, 0x40, 0xd7, 0x6a, 0xbd, 0xb7, 0xc6, 0x3e, 0x4e, 0x1f, 0x80, 0x14, 0x75, 0x95, 0xb8, 0x1, 0xe, 0xe, 0x81, 0xe1, 0x3c, 0x65, 0xaf, 0x79, 0xbc, 0xbb, 0xa3, 0xb5, 0xb7, 0x7f, 0xcf, 0x34, 0xfa, 0xfb, 0x1, 0x8e, 0x80, 0x72, 0xb2, 0xed, 0x78, 0xfa, 0x7b, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0xe, 0xc4, 0x0, 0x0, 0xe, 0xc4, 0x1, 0x95, 0x2b, 0xe, 0x1b, 0x0, 0x0, 0x0, 0x15, 0x50, 0x4c, 0x54, 0x45, 0xff, 0xff, 0xff, 0x63, 0x63, 0x66, 0x0, 0x0, 0x3, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4c, 0x39, 0x3a, 0xe, 0x0, 0x0, 0x0, 0x6, 0x74, 0x52, 0x4e, 0x53, 0xff, 0xff, 0xff, 0x7f, 0x0, 0x80, 0x2c, 0x16, 0xc1, 0x6d, 0x0, 0x0, 0x0, 0x1, 0x62, 0x4b, 0x47, 0x44, 0x6, 0x61, 0x66, 0xb8, 0x7d, 0x0, 0x0, 0x0, 0x32, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x62, 0x0, 0x1, 0x46, 0x65, 0x17, 0x17, 0x30, 0x43, 0xc8, 0x4, 0x50, 0x88, 0x1c, 0x52, 0x1, 0x0, 0x2, 0x40, 0x14, 0xbb, 0x70, 0x8b, 0x40, 0xff, 0x2c, 0x18, 0xbe, 0xc6, 0xed, 0x8d, 0x42, 0xa1, 0x50, 0x28, 0x14, 0xa, 0x85, 0xbd, 0xb0, 0x13, 0xfc, 0x71, 0x1, 0xca, 0xf, 0x19, 0x62, 0x24, 0xd6, 0x8, 0xaa, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 +}; + static const unsigned char panel_bg_png[] = { 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x1, 0x3, 0x0, 0x0, 0x0, 0xfe, 0xc1, 0x2c, 0xc8, 0x0, 0x0, 0x0, 0x6, 0x50, 0x4c, 0x54, 0x45, 0x25, 0x25, 0x2a, 0x35, 0x32, 0x3b, 0x4a, 0x73, 0x58, 0x4a, 0x0, 0x0, 0x0, 0xa, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x40, 0x3, 0x0, 0x0, 0x10, 0x0, 0x1, 0xb3, 0xac, 0xe2, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; @@ -275,7 +279,7 @@ static const unsigned char scroll_grabber_png[] = { }; static const unsigned char scroll_grabber_hl_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x3, 0x0, 0x0, 0x0, 0x61, 0xab, 0xac, 0xd5, 0x0, 0x0, 0x0, 0x69, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x97, 0xd0, 0xdf, 0x92, 0xcb, 0xdc, 0x84, 0xbb, 0xd4, 0x92, 0xca, 0xdc, 0x95, 0xd0, 0xdd, 0x83, 0xbb, 0xd3, 0x8b, 0xc8, 0xd7, 0x79, 0xb5, 0xcb, 0x78, 0xb4, 0xca, 0x73, 0xb0, 0xc7, 0x73, 0xb0, 0xc7, 0x7b, 0xc0, 0xcf, 0x79, 0xc5, 0xd1, 0x6b, 0xae, 0xc1, 0x75, 0xc6, 0xcf, 0x70, 0xbc, 0xca, 0x64, 0xa6, 0xbc, 0x71, 0xbc, 0xc9, 0x82, 0xba, 0xd4, 0x6a, 0xa2, 0xc6, 0x62, 0x9a, 0xc2, 0x61, 0x9a, 0xc1, 0x68, 0x9f, 0xc2, 0x5d, 0x92, 0xbb, 0x5c, 0x92, 0xb8, 0x58, 0x8d, 0xb6, 0x59, 0x8e, 0xb3, 0x56, 0x89, 0xb0, 0x5c, 0x91, 0xb2, 0x53, 0x84, 0xa9, 0x58, 0x8f, 0xae, 0x54, 0x83, 0xa4, 0x57, 0x8e, 0xad, 0x64, 0xa5, 0xba, 0x17, 0x3b, 0xfc, 0x67, 0x0, 0x0, 0x0, 0x13, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x25, 0xad, 0xf1, 0xad, 0x27, 0xef, 0xad, 0xf1, 0xf3, 0xf1, 0xf3, 0xad, 0x28, 0xef, 0x27, 0xad, 0xf2, 0xad, 0xcd, 0x8a, 0x27, 0xfe, 0x0, 0x0, 0x0, 0x49, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x75, 0xc7, 0xa5, 0x1, 0x3, 0x1, 0x0, 0x4, 0xc1, 0xdd, 0xb, 0x9a, 0x60, 0xff, 0x3d, 0x6, 0x54, 0xe0, 0x59, 0x3d, 0x8f, 0x9b, 0xb0, 0x66, 0x3, 0x98, 0xdc, 0xff, 0x35, 0x20, 0xec, 0x3c, 0x6b, 0xf5, 0xae, 0xff, 0x6c, 0xda, 0xdc, 0x36, 0x31, 0xc7, 0x6f, 0xc9, 0x16, 0x8c, 0x40, 0x1d, 0xba, 0x64, 0x21, 0x42, 0xc0, 0x97, 0xc9, 0xe6, 0x25, 0x8, 0x5c, 0xf4, 0xf6, 0x2c, 0x5f, 0x8c, 0x39, 0x4c, 0x3, 0xfe, 0x9a, 0x10, 0x43, 0x82, 0xcf, 0x27, 0x93, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xc, 0x8, 0x3, 0x0, 0x0, 0x0, 0x61, 0xab, 0xac, 0xd5, 0x0, 0x0, 0x0, 0x69, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x97, 0xd0, 0xdf, 0x92, 0xcb, 0xdc, 0x84, 0xbb, 0xd4, 0x92, 0xca, 0xdc, 0x95, 0xd0, 0xdd, 0x83, 0xbb, 0xd3, 0x8b, 0xc8, 0xd7, 0x79, 0xb5, 0xcb, 0x78, 0xb4, 0xca, 0x73, 0xb0, 0xc7, 0x73, 0xb0, 0xc7, 0x7b, 0xc0, 0xcf, 0x79, 0xc5, 0xd1, 0x6b, 0xae, 0xc1, 0x75, 0xc6, 0xcf, 0x70, 0xbc, 0xca, 0x64, 0xa6, 0xbc, 0x71, 0xbc, 0xc9, 0x82, 0xba, 0xd4, 0x6a, 0xa2, 0xc6, 0x62, 0x9a, 0xc2, 0x61, 0x9a, 0xc1, 0x68, 0x9f, 0xc2, 0x5d, 0x92, 0xbb, 0x5c, 0x92, 0xb8, 0x58, 0x8d, 0xb6, 0x59, 0x8e, 0xb3, 0x56, 0x89, 0xb0, 0x5c, 0x91, 0xb2, 0x53, 0x84, 0xa9, 0x58, 0x8f, 0xae, 0x54, 0x83, 0xa4, 0x57, 0x8e, 0xad, 0x64, 0xa5, 0xba, 0x17, 0x3b, 0xfc, 0x67, 0x0, 0x0, 0x0, 0x13, 0x74, 0x52, 0x4e, 0x53, 0x0, 0x25, 0xad, 0xf1, 0xad, 0x27, 0xef, 0xad, 0xf1, 0xf3, 0xf1, 0xf3, 0xad, 0x28, 0xef, 0x27, 0xad, 0xf2, 0xad, 0xcd, 0x8a, 0x27, 0xfe, 0x0, 0x0, 0x0, 0x46, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x7d, 0x8a, 0x25, 0x2, 0xc4, 0x40, 0x0, 0x3, 0x27, 0x39, 0x52, 0x57, 0xfa, 0xff, 0x1f, 0x17, 0x54, 0x19, 0x6d, 0x61, 0x4c, 0x90, 0x5b, 0x5e, 0x80, 0xec, 0x66, 0x58, 0x76, 0x3, 0x1f, 0x15, 0xd2, 0x9c, 0x97, 0x61, 0xf, 0xbf, 0x4a, 0xc0, 0x12, 0x3b, 0xde, 0xfb, 0xeb, 0x8, 0x66, 0xf, 0xbe, 0x8, 0x2, 0x83, 0x92, 0xec, 0x57, 0x12, 0x8, 0x28, 0xa5, 0x3a, 0x4e, 0x89, 0x7, 0x56, 0x51, 0x36, 0x11, 0x22, 0x4, 0xb, 0xcc, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char scroll_grabber_pressed_png[] = { @@ -291,7 +295,7 @@ static const unsigned char selection_oof_png[] = { }; static const unsigned char space_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x6, 0x0, 0x0, 0x0, 0xc4, 0xf, 0xbe, 0x8b, 0x0, 0x0, 0x0, 0x6, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x0, 0xff, 0x0, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x0, 0x0, 0x0, 0x2f, 0x49, 0x44, 0x41, 0x54, 0x18, 0x95, 0x63, 0x60, 0xa0, 0x2a, 0xf8, 0xff, 0xff, 0xbf, 0xe0, 0xff, 0xff, 0xff, 0x5, 0x91, 0xc5, 0x58, 0x90, 0x24, 0x85, 0x18, 0x18, 0x18, 0x14, 0xa0, 0x6c, 0x6, 0x46, 0x46, 0xc6, 0xf7, 0xc, 0xc, 0xc, 0xc, 0x4c, 0x14, 0x5b, 0x41, 0x39, 0x0, 0x0, 0x71, 0x1a, 0x13, 0x5d, 0x87, 0xfe, 0x9e, 0x7d, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x8, 0x4, 0x0, 0x0, 0x0, 0x6e, 0x6, 0x76, 0x0, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x1c, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x63, 0x20, 0x16, 0xfc, 0x17, 0xfc, 0x2f, 0x88, 0xcc, 0x15, 0xfa, 0x6f, 0x4, 0x84, 0x82, 0x18, 0x2, 0xe8, 0x5a, 0x88, 0x4, 0x0, 0x8c, 0xa4, 0xd, 0x47, 0x8, 0xea, 0xcc, 0xbb, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char spinbox_updown_png[] = { @@ -315,15 +319,15 @@ static const unsigned char tab_close_png[] = { }; static const unsigned char tab_container_bg_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x87, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x56, 0x52, 0x60, 0x47, 0x44, 0x52, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x47, 0x44, 0x51, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x40, 0x3e, 0x48, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x36, 0x34, 0x3e, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x3f, 0x38, 0xaa, 0x5e, 0x0, 0x0, 0x0, 0x15, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0xe8, 0xff, 0x76, 0xed, 0x0, 0x0, 0x0, 0x65, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x65, 0xcf, 0x45, 0x2, 0x84, 0x30, 0x14, 0x4, 0xd1, 0x2e, 0x1c, 0xee, 0x7f, 0xca, 0xd1, 0xed, 0x28, 0x8d, 0x4b, 0x92, 0x5a, 0xbe, 0xe8, 0x2f, 0xc4, 0x9c, 0x24, 0xcf, 0x15, 0x54, 0xab, 0x78, 0xee, 0x53, 0x30, 0x4a, 0x85, 0xa6, 0xfc, 0xf1, 0x87, 0x11, 0xb2, 0x9a, 0x15, 0x9a, 0x37, 0x13, 0x74, 0xce, 0xb4, 0xd4, 0x77, 0xcb, 0xe, 0xb4, 0x96, 0x99, 0x10, 0x34, 0x81, 0x42, 0x50, 0x21, 0x9d, 0x41, 0x23, 0xf8, 0xc, 0x56, 0xe1, 0x10, 0x9c, 0x40, 0x4e, 0xfe, 0x6e, 0x72, 0x96, 0x7e, 0xd7, 0xdf, 0x3f, 0xb3, 0x79, 0x90, 0xcd, 0xf1, 0xc4, 0x26, 0x1e, 0x8e, 0x78, 0xfc, 0x1, 0xf5, 0x61, 0x3f, 0x44, 0xe8, 0xf1, 0xdd, 0xba, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x87, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x3a, 0x44, 0x56, 0x53, 0x61, 0x56, 0x52, 0x60, 0x47, 0x44, 0x52, 0x33, 0x31, 0x39, 0x47, 0x44, 0x50, 0x47, 0x44, 0x51, 0x52, 0x50, 0x5d, 0x51, 0x4f, 0x5d, 0x46, 0x42, 0x4e, 0x42, 0x3e, 0x4a, 0x41, 0x3e, 0x49, 0x51, 0x4e, 0x5b, 0x40, 0x3e, 0x48, 0x4f, 0x4c, 0x59, 0x3f, 0x3d, 0x47, 0x4e, 0x4a, 0x58, 0x3e, 0x3b, 0x46, 0x4b, 0x49, 0x55, 0x3c, 0x3a, 0x44, 0x4a, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x49, 0x46, 0x53, 0x3a, 0x38, 0x42, 0x47, 0x45, 0x50, 0x39, 0x37, 0x40, 0x47, 0x43, 0x50, 0x38, 0x35, 0x3f, 0x36, 0x34, 0x3e, 0x44, 0x42, 0x4d, 0x44, 0x41, 0x4c, 0x3f, 0x38, 0xaa, 0x5e, 0x0, 0x0, 0x0, 0x15, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xef, 0x77, 0xef, 0xed, 0xe8, 0xff, 0x76, 0xed, 0x0, 0x0, 0x0, 0x63, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x6d, 0xcf, 0x45, 0x2, 0x84, 0x30, 0x0, 0x4, 0xc1, 0x69, 0x1c, 0xfe, 0xff, 0xca, 0xd5, 0xeb, 0x2a, 0x83, 0x6b, 0xd2, 0xb7, 0x54, 0x1c, 0x31, 0x26, 0xc9, 0x63, 0x50, 0xcc, 0x32, 0x8d, 0x3f, 0xd9, 0x20, 0x5, 0x1a, 0xf2, 0xc7, 0x1f, 0x7a, 0x48, 0x4a, 0x66, 0xa8, 0xde, 0xc, 0xd0, 0x38, 0xd1, 0x54, 0xdb, 0x4c, 0x2b, 0xd0, 0x5c, 0x62, 0x8e, 0xa0, 0x1, 0x74, 0x4, 0x65, 0xd2, 0x1e, 0xd4, 0x83, 0xf7, 0x60, 0x65, 0x3e, 0x82, 0x3, 0x48, 0x49, 0xdf, 0x55, 0xca, 0xd4, 0xef, 0xfa, 0xfb, 0x27, 0x36, 0xf, 0x92, 0x31, 0x9e, 0x44, 0x3e, 0x17, 0x7c, 0xbf, 0x3, 0xef, 0x34, 0x3f, 0x3e, 0xe0, 0x24, 0x67, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char tab_current_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x99, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x3d, 0x48, 0x5b, 0x58, 0x66, 0x5b, 0x57, 0x65, 0x57, 0x54, 0x62, 0x55, 0x53, 0x62, 0x4a, 0x46, 0x52, 0x46, 0x41, 0x4e, 0x45, 0x41, 0x4d, 0x55, 0x52, 0x60, 0x44, 0x41, 0x4c, 0x53, 0x50, 0x5e, 0x43, 0x40, 0x4b, 0x52, 0x4e, 0x5d, 0x41, 0x3e, 0x4a, 0x4f, 0x4d, 0x5a, 0x3f, 0x3d, 0x48, 0x4e, 0x4b, 0x59, 0x3e, 0x3c, 0x47, 0x4d, 0x4a, 0x58, 0x3d, 0x3b, 0x46, 0x4b, 0x49, 0x54, 0x3c, 0x3a, 0x44, 0x4b, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x3b, 0x39, 0x42, 0x3b, 0x38, 0x43, 0x3b, 0x38, 0x42, 0x3a, 0x37, 0x41, 0x39, 0x37, 0x41, 0x3a, 0x38, 0x41, 0x39, 0x36, 0x3f, 0x38, 0x36, 0x3f, 0x39, 0x36, 0x40, 0x38, 0x36, 0x40, 0x37, 0x35, 0x3e, 0x37, 0x34, 0x3e, 0x36, 0x35, 0x3d, 0xd7, 0x41, 0xa4, 0x19, 0x0, 0x0, 0x0, 0x11, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xa3, 0x31, 0x6b, 0xc2, 0x0, 0x0, 0x0, 0x60, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x55, 0xca, 0x85, 0xd, 0xc0, 0x40, 0x14, 0xc3, 0x50, 0x27, 0xf7, 0xd5, 0xfd, 0xd7, 0x2d, 0xa6, 0x4c, 0x16, 0x3f, 0xb9, 0xd0, 0x11, 0x90, 0xa3, 0x52, 0x77, 0x49, 0x8e, 0x86, 0xd2, 0x26, 0x16, 0x7b, 0x59, 0x32, 0x68, 0x3, 0x37, 0x5d, 0xe0, 0x59, 0x3b, 0x74, 0x31, 0x67, 0x4b, 0x3b, 0xf, 0x71, 0xe5, 0xe8, 0xf, 0xec, 0xc0, 0x1f, 0x28, 0xf8, 0x2, 0x14, 0xf9, 0x42, 0xa8, 0xfc, 0x21, 0x3b, 0xe4, 0x1, 0x6f, 0x0, 0x18, 0x11, 0xac, 0x99, 0xc0, 0xe, 0x25, 0x22, 0x2d, 0x76, 0xc6, 0x13, 0x1a, 0x8, 0xac, 0x78, 0xfc, 0x1c, 0x70, 0x30, 0x2b, 0xba, 0xe9, 0x31, 0x70, 0xc1, 0x7f, 0x3b, 0x77, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x3, 0x0, 0x0, 0x0, 0x28, 0x2d, 0xf, 0x53, 0x0, 0x0, 0x0, 0x99, 0x50, 0x4c, 0x54, 0x45, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x3d, 0x48, 0x5b, 0x58, 0x66, 0x5b, 0x57, 0x65, 0x57, 0x54, 0x62, 0x55, 0x53, 0x62, 0x4a, 0x46, 0x52, 0x46, 0x41, 0x4e, 0x45, 0x41, 0x4d, 0x55, 0x52, 0x60, 0x44, 0x41, 0x4c, 0x53, 0x50, 0x5e, 0x43, 0x40, 0x4b, 0x52, 0x4e, 0x5d, 0x41, 0x3e, 0x4a, 0x4f, 0x4d, 0x5a, 0x3f, 0x3d, 0x48, 0x4e, 0x4b, 0x59, 0x3e, 0x3c, 0x47, 0x4d, 0x4a, 0x58, 0x3d, 0x3b, 0x46, 0x4b, 0x49, 0x54, 0x3c, 0x3a, 0x44, 0x4b, 0x47, 0x54, 0x3b, 0x39, 0x43, 0x3b, 0x39, 0x42, 0x3b, 0x38, 0x43, 0x3b, 0x38, 0x42, 0x3a, 0x37, 0x41, 0x39, 0x37, 0x41, 0x3a, 0x38, 0x41, 0x39, 0x36, 0x3f, 0x38, 0x36, 0x3f, 0x39, 0x36, 0x40, 0x38, 0x36, 0x40, 0x37, 0x35, 0x3e, 0x37, 0x34, 0x3e, 0x36, 0x35, 0x3d, 0xd7, 0x41, 0xa4, 0x19, 0x0, 0x0, 0x0, 0x11, 0x74, 0x52, 0x4e, 0x53, 0x4, 0xa, 0x11, 0x19, 0x1f, 0x22, 0x24, 0x15, 0x25, 0x34, 0x3f, 0x46, 0x47, 0x48, 0x77, 0xef, 0xef, 0xa3, 0x31, 0x6b, 0xc2, 0x0, 0x0, 0x0, 0x5f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x55, 0xca, 0x85, 0xd, 0xc0, 0x40, 0x14, 0xc3, 0x50, 0x27, 0xf7, 0xd5, 0xfd, 0xd7, 0x2d, 0xa6, 0x4c, 0x16, 0x3f, 0x59, 0xe8, 0x8, 0xc8, 0x91, 0xd4, 0x5d, 0x92, 0xa3, 0xa1, 0x76, 0xb1, 0xd8, 0xcb, 0x92, 0x41, 0x1b, 0xb8, 0xe9, 0x2, 0xcf, 0xd2, 0x7e, 0xc4, 0x9c, 0x2d, 0xed, 0x3c, 0xc4, 0x95, 0xa3, 0x3f, 0xb0, 0x3, 0x7f, 0xa0, 0xe0, 0xb, 0x50, 0xe4, 0xb, 0xa1, 0xf2, 0x87, 0x38, 0x31, 0x4f, 0x4e, 0xa, 0x30, 0x22, 0x58, 0x33, 0x81, 0x1d, 0x4a, 0x44, 0x5a, 0xec, 0x8c, 0x27, 0x34, 0x10, 0x58, 0xf1, 0xf8, 0x39, 0xe0, 0x60, 0x56, 0x63, 0x63, 0x30, 0x69, 0xf8, 0x3c, 0xb4, 0xd1, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char tab_disabled_png[] = { - 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x3, 0xa7, 0x7a, 0x54, 0x58, 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78, 0x69, 0x66, 0x0, 0x0, 0x78, 0xda, 0xcd, 0x96, 0x59, 0x92, 0xe3, 0x2a, 0x10, 0x45, 0xff, 0x59, 0x45, 0x2f, 0x81, 0xcc, 0x24, 0x19, 0x96, 0x83, 0x18, 0x22, 0x7a, 0x7, 0x6f, 0xf9, 0x7d, 0xc1, 0x48, 0x1e, 0xab, 0x5c, 0x65, 0xfb, 0xe3, 0x89, 0xb0, 0x40, 0x29, 0x48, 0xae, 0xee, 0x41, 0xc8, 0xa6, 0xfd, 0xf7, 0xb7, 0x9b, 0x3f, 0x38, 0x28, 0x45, 0x6f, 0x9c, 0x86, 0xe8, 0x93, 0xf7, 0x16, 0x87, 0x4b, 0x2e, 0x71, 0x46, 0x23, 0xda, 0xd3, 0x71, 0xaa, 0xc9, 0xba, 0x79, 0x5e, 0x17, 0x76, 0x6f, 0x5c, 0xc5, 0xcd, 0x71, 0x83, 0x11, 0x12, 0xd4, 0x72, 0xba, 0xf4, 0x6d, 0xf5, 0xcf, 0x88, 0xeb, 0x79, 0x40, 0x70, 0x2b, 0xbe, 0x5d, 0xc7, 0x4d, 0x28, 0x2b, 0x4f, 0x5c, 0x89, 0xe8, 0x48, 0x3c, 0xf, 0x19, 0x33, 0x8f, 0xf6, 0xea, 0x17, 0x57, 0x22, 0xe1, 0x53, 0x9c, 0xd6, 0xb5, 0x49, 0x6b, 0x5c, 0x76, 0x17, 0x8f, 0xb3, 0x7e, 0x5c, 0x56, 0xda, 0x95, 0xfc, 0xf6, 0xda, 0x5, 0x98, 0x51, 0x15, 0xf9, 0x84, 0xd, 0x37, 0x21, 0xb1, 0x38, 0xc7, 0x31, 0x8b, 0x40, 0x81, 0x24, 0xc9, 0x32, 0xda, 0x79, 0xde, 0x19, 0x91, 0x80, 0xb6, 0x43, 0x9d, 0x45, 0x84, 0x1e, 0x7b, 0x67, 0x8e, 0xe6, 0x8d, 0x79, 0x47, 0xeb, 0xc6, 0x3b, 0x9b, 0x57, 0x5c, 0xae, 0xad, 0x30, 0xd6, 0xaf, 0xe, 0xfe, 0xc6, 0xa3, 0x15, 0x27, 0xbd, 0x89, 0xcb, 0x31, 0xd, 0xdf, 0x52, 0xdb, 0x67, 0xbe, 0xba, 0x91, 0xcb, 0x31, 0xc5, 0x9d, 0x77, 0xbd, 0xd7, 0xd8, 0x7b, 0x3b, 0x3d, 0x5d, 0x76, 0x1e, 0x4e, 0x79, 0xb3, 0x1e, 0x6a, 0x7f, 0x94, 0xd9, 0x42, 0xc7, 0xd, 0x56, 0xca, 0x1c, 0xe6, 0x51, 0x2, 0x7e, 0x8a, 0x76, 0x98, 0x25, 0xa1, 0x44, 0x3c, 0x62, 0x1, 0xb1, 0xa, 0x9a, 0x1b, 0x4a, 0x31, 0x94, 0x88, 0xe1, 0x69, 0x27, 0x47, 0x95, 0x32, 0x75, 0x6a, 0xb3, 0x2e, 0x54, 0x20, 0xd1, 0x71, 0xe3, 0x80, 0x9a, 0xb9, 0xb0, 0xcc, 0x58, 0x94, 0xc0, 0x89, 0xcb, 0x84, 0xe2, 0x46, 0xa1, 0xce, 0x1, 0x78, 0xaa, 0x91, 0x8, 0x3e, 0x5, 0xd4, 0x4, 0x61, 0x3e, 0xb4, 0xd0, 0x9c, 0x37, 0xcd, 0xf9, 0xa, 0x45, 0xcc, 0x5c, 0x9, 0x3d, 0x99, 0x90, 0x8c, 0x30, 0xe2, 0xae, 0x98, 0x47, 0xc1, 0x57, 0xca, 0x91, 0xa8, 0xf7, 0xb1, 0x74, 0x89, 0x6c, 0x3c, 0xbc, 0x82, 0x2e, 0x1e, 0x6b, 0x1a, 0x32, 0x6, 0xb9, 0x71, 0x46, 0x2f, 0x0, 0xa1, 0xbe, 0x3c, 0xd5, 0xe9, 0xef, 0x2c, 0xe6, 0x62, 0xdd, 0xd8, 0xb, 0xb0, 0x2, 0x82, 0x3a, 0x6d, 0x8e, 0x78, 0xc0, 0x6c, 0xb7, 0x53, 0x8a, 0x4d, 0xe9, 0xbc, 0xb6, 0x64, 0x72, 0x16, 0xf4, 0x53, 0xeb, 0x8c, 0x3d, 0xbd, 0x1a, 0x14, 0xea, 0x4a, 0x0, 0x8b, 0x30, 0xb7, 0x42, 0xc, 0x9, 0x8, 0x58, 0x4f, 0xa2, 0xe4, 0xc9, 0x6, 0xe6, 0x40, 0x4, 0x1f, 0x23, 0xf8, 0x64, 0x28, 0x67, 0x71, 0xbc, 0x81, 0x0, 0xa9, 0x72, 0x25, 0xd3, 0xc1, 0x46, 0xc4, 0x3, 0x4e, 0xe4, 0x31, 0x37, 0xc6, 0x4, 0x9a, 0x7d, 0x59, 0xf9, 0x14, 0xc6, 0xd6, 0x2, 0x10, 0x2a, 0x1e, 0xaf, 0x4a, 0x1c, 0x2f, 0x10, 0x60, 0x39, 0xa7, 0x58, 0x3f, 0xc1, 0x45, 0xac, 0xa1, 0xac, 0xa2, 0xce, 0xa8, 0xaa, 0xd7, 0xa0, 0x51, 0x93, 0x66, 0x2f, 0xde, 0x79, 0xf5, 0xde, 0x7, 0x3f, 0xf6, 0xa8, 0x1c, 0x24, 0xb8, 0xa0, 0xc1, 0x87, 0x10, 0x62, 0x48, 0x21, 0x47, 0x89, 0x2e, 0x6a, 0xf4, 0x31, 0xc4, 0x18, 0x53, 0xcc, 0x89, 0x93, 0x60, 0xb, 0xd3, 0xe4, 0x53, 0x30, 0x29, 0xa6, 0x94, 0x72, 0xc6, 0xa4, 0x19, 0xa9, 0x33, 0x46, 0x67, 0xf4, 0xc8, 0x79, 0xe3, 0x4d, 0x36, 0xb7, 0xe9, 0xe6, 0xb7, 0xb0, 0xc5, 0x2d, 0x6d, 0xb9, 0x60, 0xf9, 0x14, 0x57, 0xb4, 0xf8, 0x12, 0x4a, 0x2c, 0xa9, 0xe4, 0xca, 0x55, 0x2a, 0x5e, 0xff, 0xea, 0x6b, 0x30, 0x35, 0xd6, 0x54, 0x73, 0xa3, 0x86, 0xa5, 0xd4, 0x5c, 0xd3, 0xe6, 0x5b, 0x68, 0xb1, 0xa5, 0x96, 0x3b, 0xd6, 0x5a, 0x97, 0xee, 0xba, 0x76, 0xdf, 0x43, 0x8f, 0x3d, 0xf5, 0x7c, 0x50, 0x5b, 0x54, 0xaf, 0xa9, 0xd1, 0xd, 0xb9, 0xef, 0xa9, 0xd1, 0xa2, 0x36, 0x88, 0xb9, 0xd9, 0x2f, 0x9c, 0xa9, 0x21, 0x1c, 0xc2, 0x9e, 0x82, 0xc6, 0x76, 0xa2, 0x83, 0x19, 0x88, 0xb1, 0x23, 0x10, 0xf, 0x83, 0x0, 0x16, 0x34, 0xf, 0x66, 0x36, 0x92, 0x73, 0x3c, 0xc8, 0xd, 0x66, 0x36, 0x31, 0x5e, 0xa, 0x65, 0x50, 0x23, 0x1d, 0x70, 0x2a, 0xd, 0x62, 0x20, 0xe8, 0x1a, 0xb1, 0x76, 0x3a, 0xd8, 0x9d, 0xc9, 0x7d, 0xcb, 0xcd, 0xa8, 0xfb, 0x15, 0x37, 0xfe, 0x8a, 0x9c, 0x19, 0xe8, 0x3e, 0x41, 0xce, 0xc, 0x74, 0x8b, 0xdc, 0x3d, 0xb7, 0x7, 0xd4, 0x6a, 0x9e, 0x5f, 0x14, 0x99, 0x80, 0xc6, 0x5b, 0x38, 0x3c, 0xb5, 0xd2, 0xb1, 0xb1, 0xa1, 0x43, 0x8b, 0x99, 0x63, 0x1e, 0xdf, 0xa4, 0x97, 0x6b, 0xf3, 0x6e, 0x82, 0xff, 0x59, 0xa2, 0x76, 0x98, 0x52, 0xcd, 0x96, 0x67, 0xd4, 0xe2, 0x7b, 0x78, 0x6a, 0xd8, 0xd7, 0x6a, 0x83, 0x5d, 0x64, 0x45, 0x84, 0x8e, 0x89, 0x9e, 0x4a, 0xe9, 0x9a, 0xf6, 0x51, 0x92, 0x67, 0xc, 0xd4, 0xe2, 0x2e, 0xcf, 0xfd, 0x52, 0xb, 0xf9, 0x35, 0x30, 0x1d, 0x1e, 0xe1, 0x3, 0xb4, 0xf2, 0x97, 0x94, 0x9f, 0x8a, 0x71, 0x37, 0x62, 0x3e, 0x48, 0xd, 0x42, 0xcc, 0xae, 0x24, 0xb7, 0xa7, 0x4a, 0xf8, 0x50, 0xd2, 0x3e, 0x8d, 0xbf, 0xda, 0xc3, 0x12, 0xb3, 0xf9, 0xa7, 0x4a, 0xe8, 0x91, 0x27, 0x9f, 0x51, 0x74, 0x1, 0x67, 0x5b, 0xc9, 0xcd, 0xd7, 0x4a, 0x5c, 0xff, 0xce, 0x93, 0xf7, 0x14, 0x5d, 0x78, 0x52, 0x6e, 0xee, 0x99, 0x7, 0x4a, 0xea, 0xfe, 0xd6, 0x44, 0x25, 0xa7, 0xe3, 0x6f, 0xeb, 0xf, 0x6a, 0xf3, 0x93, 0x8e, 0x14, 0xf6, 0x67, 0xeb, 0xc2, 0x5f, 0x2c, 0x73, 0x73, 0x88, 0xad, 0xb2, 0x6b, 0xca, 0x73, 0xb8, 0x8e, 0xff, 0xd0, 0x3f, 0xaf, 0xcd, 0x77, 0x1d, 0xb4, 0x9f, 0x2d, 0x79, 0xe6, 0xb7, 0xe9, 0x2e, 0xbf, 0x62, 0xc9, 0x5d, 0x6d, 0x9e, 0x58, 0xa2, 0x4f, 0x76, 0x0, 0xa9, 0xec, 0xf7, 0x6d, 0xe4, 0x25, 0x4b, 0xee, 0x6a, 0xf3, 0xd8, 0x92, 0xfa, 0x74, 0x33, 0x71, 0xe9, 0x7a, 0xb9, 0x9a, 0xcf, 0x6c, 0xfd, 0xa7, 0x44, 0x17, 0xeb, 0xf5, 0xf7, 0x4a, 0x2e, 0x13, 0xbd, 0xbd, 0xad, 0xd9, 0x99, 0xe8, 0x4d, 0x25, 0x9f, 0x50, 0x74, 0x65, 0x89, 0x79, 0x57, 0xc9, 0x3b, 0x8a, 0x1e, 0xc2, 0xd9, 0x15, 0x75, 0xfc, 0x61, 0x49, 0xe6, 0x1f, 0xbf, 0x1c, 0xa8, 0x52, 0x2b, 0xb1, 0xc9, 0xd4, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x0, 0x7, 0x74, 0x49, 0x4d, 0x45, 0x7, 0xe3, 0x2, 0xa, 0x13, 0x29, 0x21, 0x5f, 0x36, 0xe2, 0x14, 0x0, 0x0, 0x0, 0xaf, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x7d, 0x91, 0x41, 0xa, 0xc2, 0x40, 0x10, 0x4, 0x6b, 0x92, 0x61, 0x37, 0xb0, 0x87, 0xec, 0x39, 0x3e, 0xc6, 0x3f, 0xf8, 0x9a, 0x3c, 0xc1, 0xd7, 0xf8, 0x3, 0xf, 0x3e, 0xc6, 0xab, 0x44, 0x50, 0x30, 0x26, 0x66, 0x3c, 0x2c, 0x6, 0x3, 0xd9, 0xf4, 0x69, 0xa0, 0xab, 0x9b, 0x86, 0x11, 0x14, 0x87, 0xa7, 0xc2, 0x51, 0x52, 0x90, 0x34, 0xf1, 0xe1, 0xcd, 0x8b, 0x9e, 0xb7, 0xe2, 0x8, 0x44, 0x6a, 0x2, 0x1e, 0x41, 0x0, 0xc3, 0xe8, 0x79, 0x72, 0xa7, 0x3, 0xc5, 0x13, 0xf7, 0x87, 0x5d, 0x3b, 0x46, 0x16, 0xd2, 0xee, 0x7a, 0xbc, 0x9c, 0x18, 0x95, 0x8a, 0xba, 0x69, 0x6f, 0x71, 0xc4, 0xfe, 0x6c, 0x41, 0x63, 0xd3, 0x72, 0xe6, 0xa1, 0x38, 0xc2, 0x10, 0x87, 0x65, 0x1c, 0x63, 0x60, 0x88, 0x4, 0x9c, 0x52, 0xe2, 0xa7, 0x45, 0x9a, 0x79, 0x29, 0x9e, 0x52, 0x29, 0x10, 0x63, 0x5a, 0x1, 0xc, 0x84, 0x42, 0x1, 0xc9, 0x36, 0x8, 0x68, 0x3a, 0x33, 0x0, 0x9, 0x30, 0x5b, 0x5, 0xc, 0x6c, 0x6e, 0x98, 0x36, 0x1b, 0x24, 0xdb, 0xf0, 0xdb, 0xc0, 0x2a, 0x90, 0x54, 0x6c, 0xba, 0x96, 0x0, 0xc9, 0x2, 0xc2, 0xfc, 0xe0, 0xac, 0xbe, 0xe, 0x38, 0x38, 0x83, 0xbf, 0x35, 0x30, 0x94, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 + 0x89, 0x50, 0x4e, 0x47, 0xd, 0xa, 0x1a, 0xa, 0x0, 0x0, 0x0, 0xd, 0x49, 0x48, 0x44, 0x52, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x10, 0x8, 0x4, 0x0, 0x0, 0x0, 0xb5, 0xfa, 0x37, 0xea, 0x0, 0x0, 0x0, 0x9, 0x70, 0x48, 0x59, 0x73, 0x0, 0x0, 0x2e, 0x23, 0x0, 0x0, 0x2e, 0x23, 0x1, 0x78, 0xa5, 0x3f, 0x76, 0x0, 0x0, 0x0, 0x2, 0x62, 0x4b, 0x47, 0x44, 0x0, 0xff, 0x87, 0x8f, 0xcc, 0xbf, 0x0, 0x0, 0x0, 0xa6, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x7c, 0xcd, 0xc5, 0x41, 0x4, 0x41, 0x10, 0x0, 0xc0, 0xea, 0xbd, 0xc1, 0x6d, 0xde, 0x47, 0x30, 0xe4, 0x40, 0x34, 0x1b, 0x2, 0xd1, 0x10, 0x1, 0x1a, 0xc, 0x4f, 0xdc, 0x6d, 0x1b, 0x77, 0xe6, 0xea, 0xd5, 0xde, 0xa1, 0x98, 0x36, 0x63, 0xd6, 0xb4, 0x91, 0xe, 0x30, 0x78, 0x74, 0xe7, 0xc6, 0xad, 0xbb, 0x97, 0xf6, 0x82, 0x6a, 0xc5, 0x82, 0x19, 0x21, 0x90, 0xd2, 0xad, 0x4b, 0xa7, 0x4e, 0x28, 0x66, 0xd4, 0xb5, 0xf5, 0xd5, 0xfe, 0xa1, 0xfa, 0xa1, 0x9c, 0x1c, 0x6c, 0xec, 0x6f, 0x7a, 0x28, 0x66, 0xad, 0x8c, 0xfb, 0xa3, 0xfa, 0x20, 0x7d, 0x9, 0xa5, 0x8e, 0x7b, 0xdb, 0x2e, 0x5e, 0x5f, 0xdc, 0xd7, 0x7b, 0x3f, 0xa5, 0x7b, 0xf7, 0xd5, 0x82, 0xe9, 0x62, 0x64, 0x66, 0x90, 0xfe, 0x1a, 0x98, 0x31, 0x2a, 0x3a, 0x91, 0x6, 0x7f, 0x25, 0xa1, 0x2b, 0x88, 0xe6, 0x85, 0xa0, 0x40, 0x73, 0x0, 0x5, 0x99, 0xf2, 0xff, 0x17, 0xf9, 0x79, 0x61, 0x98, 0x78, 0x21, 0x9a, 0x17, 0x82, 0xf2, 0x99, 0x34, 0x74, 0x13, 0xbb, 0x49, 0x87, 0xd0, 0x12, 0x4f, 0x3, 0x29, 0x20, 0x0, 0x0, 0xe, 0x38, 0x38, 0x83, 0xd2, 0xe8, 0x36, 0x36, 0x0, 0x0, 0x0, 0x0, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; static const unsigned char tab_menu_png[] = { diff --git a/scene/resources/dynamic_font.cpp b/scene/resources/dynamic_font.cpp index 2364a4a8a3..99a2881d58 100644 --- a/scene/resources/dynamic_font.cpp +++ b/scene/resources/dynamic_font.cpp @@ -130,7 +130,7 @@ Error DynamicFontAtSize::_load() { } else { FileAccess *f = FileAccess::open(font->font_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot open font file '" + font->font_path + "'."); size_t len = f->get_len(); _fontdata[font->font_path] = Vector<uint8_t>(); @@ -145,7 +145,7 @@ Error DynamicFontAtSize::_load() { if (font->font_mem == NULL && font->font_path != String()) { FileAccess *f = FileAccess::open(font->font_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(!f, ERR_CANT_OPEN, "Cannot open font file '" + font->font_path + "'."); memset(&stream, 0, sizeof(FT_StreamRec)); stream.base = NULL; @@ -182,18 +182,17 @@ Error DynamicFontAtSize::_load() { //error = FT_New_Face( library, src_path.utf8().get_data(),0,&face ); if (error == FT_Err_Unknown_File_Format) { - ERR_EXPLAIN("Unknown font format."); + FT_Done_FreeType(library); + ERR_FAIL_V_MSG(ERR_FILE_CANT_OPEN, "Unknown font format."); } else if (error) { - ERR_EXPLAIN("Error loading font."); FT_Done_FreeType(library); + ERR_FAIL_V_MSG(ERR_FILE_CANT_OPEN, "Error loading font."); } - ERR_FAIL_COND_V(error, ERR_FILE_CANT_OPEN); - - if (FT_HAS_COLOR(face)) { + if (FT_HAS_COLOR(face) && face->num_fixed_sizes > 0) { int best_match = 0; int diff = ABS(id.size - ((int64_t)face->available_sizes[0].width)); scale_color_font = float(id.size) / face->available_sizes[0].width; diff --git a/scene/resources/dynamic_font_stb.cpp b/scene/resources/dynamic_font_stb.cpp deleted file mode 100644 index ccff617a16..0000000000 --- a/scene/resources/dynamic_font_stb.cpp +++ /dev/null @@ -1,524 +0,0 @@ -/*************************************************************************/ -/* dynamic_font_stb.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 "dynamic_font_stb.h" - -#ifndef FREETYPE_ENABLED - -#define STB_TRUETYPE_IMPLEMENTATION -#include "core/os/file_access.h" - -void DynamicFontData::lock() { - - fr = font_data.read(); - - if (fr.ptr() != last_data_ptr) { - - last_data_ptr = fr.ptr(); - - if (!stbtt_InitFont(&info, last_data_ptr, 0)) { - valid = false; - } else { - valid = true; - } - - last_data_ptr = fr.ptr(); - } -} - -void DynamicFontData::unlock() { - - fr.release(); -} - -void DynamicFontData::set_font_data(const PoolVector<uint8_t> &p_font) { - //clear caches and stuff - ERR_FAIL_COND(font_data.size()); - font_data = p_font; - - lock(); - - if (valid) { - stbtt_GetFontVMetrics(&info, &ascent, &descent, &linegap); - descent = -descent + linegap; - - for (int i = 32; i < 1024; i++) { - for (int j = 32; j < 1024; j++) { - - int kern = stbtt_GetCodepointKernAdvance(&info, i, j); - if (kern != 0) { - KerningPairKey kpk; - kpk.A = i; - kpk.B = j; - kerning_map[kpk] = kern; - } - } - } - } - - unlock(); - //clear existing stuff - - ERR_FAIL_COND(!valid); -} - -Ref<DynamicFontAtSize> DynamicFontData::_get_dynamic_font_at_size(int p_size) { - - ERR_FAIL_COND_V(!valid, Ref<DynamicFontAtSize>()); - - if (size_cache.has(p_size)) { - return Ref<DynamicFontAtSize>(size_cache[p_size]); - } - - Ref<DynamicFontAtSize> dfas; - dfas.instance(); - - dfas->font = Ref<DynamicFontData>(this); - - size_cache[p_size] = dfas.ptr(); - - dfas->size = p_size; - - lock(); - - dfas->scale = stbtt_ScaleForPixelHeight(&info, p_size); - - unlock(); - - return dfas; -} - -DynamicFontData::DynamicFontData() { - last_data_ptr = NULL; - valid = false; -} - -DynamicFontData::~DynamicFontData() { -} - -//////////////////// - -float DynamicFontAtSize::get_height() const { - - return (font->ascent + font->descent) * scale; -} - -float DynamicFontAtSize::get_ascent() const { - - return font->ascent * scale; -} -float DynamicFontAtSize::get_descent() const { - - return font->descent * scale; -} - -Size2 DynamicFontAtSize::get_char_size(CharType p_char, CharType p_next) const { - - const_cast<DynamicFontAtSize *>(this)->_update_char(p_char); - - const Character *c = char_map.getptr(p_char); - ERR_FAIL_COND_V(!c, Size2()); - - Size2 ret(c->advance, get_height()); - - if (p_next) { - DynamicFontData::KerningPairKey kpk; - kpk.A = p_char; - kpk.B = p_next; - - const Map<DynamicFontData::KerningPairKey, int>::Element *K = font->kerning_map.find(kpk); - if (K) { - ret.x += K->get() * scale; - } - } - - return ret; -} - -float DynamicFontAtSize::draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, bool p_outline) const { - - const_cast<DynamicFontAtSize *>(this)->_update_char(p_char); - - const Character *c = char_map.getptr(p_char); - - if (!c) { - return 0; - } - - if (!p_outline) { - Point2 cpos = p_pos; - cpos.x += c->h_align; - cpos.y -= get_ascent(); - cpos.y += c->v_align; - ERR_FAIL_COND_V(c->texture_idx < -1 || c->texture_idx >= textures.size(), 0); - if (c->texture_idx != -1) - VisualServer::get_singleton()->canvas_item_add_texture_rect_region(p_canvas_item, Rect2(cpos, c->rect.size), textures[c->texture_idx].texture->get_rid(), c->rect, p_modulate); - } - - //textures[c->texture_idx].texture->draw(p_canvas_item,Vector2()); - - float ret = c->advance; - if (p_next) { - DynamicFontData::KerningPairKey kpk; - kpk.A = p_char; - kpk.B = p_next; - - const Map<DynamicFontData::KerningPairKey, int>::Element *K = font->kerning_map.find(kpk); - if (K) { - ret += K->get() * scale; - } - } - - return ret; -} - -void DynamicFontAtSize::_update_char(CharType p_char) { - - if (char_map.has(p_char)) - return; - - font->lock(); - - int w, h, xofs, yofs; - unsigned char *cpbitmap = stbtt_GetCodepointBitmap(&font->info, scale, scale, p_char, &w, &h, &xofs, &yofs); - - if (!cpbitmap) { - //no glyph - - int advance; - stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0); - Character ch; - ch.texture_idx = -1; - ch.advance = advance * scale; - ch.h_align = 0; - ch.v_align = 0; - - char_map[p_char] = ch; - - font->unlock(); - - return; - } - - int mw = w + rect_margin * 2; - int mh = h + rect_margin * 2; - - if (mw > 4096 || mh > 4096) { - - stbtt_FreeBitmap(cpbitmap, NULL); - font->unlock(); - ERR_FAIL_COND(mw > 4096); - ERR_FAIL_COND(mh > 4096); - } - - //find a texture to fit this... - - int tex_index = -1; - int tex_x = 0; - int tex_y = 0; - - for (int i = 0; i < textures.size(); i++) { - - CharTexture &ct = textures[i]; - - if (mw > ct.texture_size || mh > ct.texture_size) //too big for this texture - continue; - - tex_y = 0x7FFFFFFF; - tex_x = 0; - - for (int j = 0; j < ct.texture_size - mw; j++) { - - int max_y = 0; - - for (int k = j; k < j + mw; k++) { - - int y = ct.offsets[k]; - if (y > max_y) - max_y = y; - } - - if (max_y < tex_y) { - tex_y = max_y; - tex_x = j; - } - } - - if (tex_y == 0x7FFFFFFF || tex_y + mh > ct.texture_size) - continue; //fail, could not fit it here - - tex_index = i; - break; - } - - if (tex_index == -1) { - //could not find texture to fit, create one - tex_x = 0; - tex_y = 0; - - int texsize = MAX(size * 8, 256); - if (mw > texsize) - texsize = mw; //special case, adapt to it? - if (mh > texsize) - texsize = mh; //special case, adapt to it? - - texsize = next_power_of_2(texsize); - - texsize = MIN(texsize, 4096); - - CharTexture tex; - tex.texture_size = texsize; - tex.imgdata.resize(texsize * texsize * 2); //grayscale alpha - - { - //zero texture - PoolVector<uint8_t>::Write w = tex.imgdata.write(); - ERR_FAIL_COND(texsize * texsize * 2 > tex.imgdata.size()); - for (int i = 0; i < texsize * texsize * 2; i++) { - w[i] = 0; - } - } - tex.offsets.resize(texsize); - for (int i = 0; i < texsize; i++) //zero offsets - tex.offsets[i] = 0; - - textures.push_back(tex); - tex_index = textures.size() - 1; - } - - //fit character in char texture - - CharTexture &tex = textures[tex_index]; - - { - PoolVector<uint8_t>::Write wr = tex.imgdata.write(); - - for (int i = 0; i < h; i++) { - for (int j = 0; j < w; j++) { - - int ofs = ((i + tex_y + rect_margin) * tex.texture_size + j + tex_x + rect_margin) * 2; - ERR_FAIL_COND(ofs >= tex.imgdata.size()); - wr[ofs + 0] = 255; //grayscale as 1 - wr[ofs + 1] = cpbitmap[i * w + j]; //alpha as 0 - } - } - } - - //blit to image and texture - { - Ref<Image> img = memnew(Image(tex.texture_size, tex.texture_size, 0, Image::FORMAT_LA8, tex.imgdata)); - - if (tex.texture.is_null()) { - tex.texture.instance(); - tex.texture->create_from_image(img, Texture::FLAG_FILTER); - } else { - tex.texture->set_data(img); //update - } - } - - // update height array - - for (int k = tex_x; k < tex_x + mw; k++) { - - tex.offsets[k] = tex_y + mh; - } - - int advance; - stbtt_GetCodepointHMetrics(&font->info, p_char, &advance, 0); - - Character chr; - chr.h_align = xofs; - chr.v_align = yofs + get_ascent(); - chr.advance = advance * scale; - chr.texture_idx = tex_index; - - chr.rect = Rect2(tex_x + rect_margin, tex_y + rect_margin, w, h); - - char_map[p_char] = chr; - - stbtt_FreeBitmap(cpbitmap, NULL); - - font->unlock(); -} - -DynamicFontAtSize::DynamicFontAtSize() { - - rect_margin = 1; -} - -DynamicFontAtSize::~DynamicFontAtSize() { - - ERR_FAIL_COND(!font.ptr()); - font->size_cache.erase(size); -} - -///////////////////////// - -void DynamicFont::_bind_methods() { - - ClassDB::bind_method(D_METHOD("set_font_data", "data"), &DynamicFont::set_font_data); - ClassDB::bind_method(D_METHOD("get_font_data"), &DynamicFont::get_font_data); - - ClassDB::bind_method(D_METHOD("set_size", "data"), &DynamicFont::set_size); - ClassDB::bind_method(D_METHOD("get_size"), &DynamicFont::get_size); - - ADD_PROPERTY(PropertyInfo(Variant::INT, "font/size"), "set_size", "get_size"); - ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "font/font", PROPERTY_HINT_RESOURCE_TYPE, "DynamicFontData"), "set_font_data", "get_font_data"); -} - -void DynamicFont::set_font_data(const Ref<DynamicFontData> &p_data) { - - data = p_data; - data_at_size = data->_get_dynamic_font_at_size(size); -} - -Ref<DynamicFontData> DynamicFont::get_font_data() const { - - return data; -} - -void DynamicFont::set_size(int p_size) { - - if (size == p_size) - return; - size = p_size; - ERR_FAIL_COND(p_size < 1); - if (!data.is_valid()) - return; - data_at_size = data->_get_dynamic_font_at_size(size); -} -int DynamicFont::get_size() const { - - return size; -} - -float DynamicFont::get_height() const { - - if (!data_at_size.is_valid()) - return 1; - - return data_at_size->get_height(); -} - -float DynamicFont::get_ascent() const { - - if (!data_at_size.is_valid()) - return 1; - - return data_at_size->get_ascent(); -} - -float DynamicFont::get_descent() const { - - if (!data_at_size.is_valid()) - return 1; - - return data_at_size->get_descent(); -} - -Size2 DynamicFont::get_char_size(CharType p_char, CharType p_next) const { - - if (!data_at_size.is_valid()) - return Size2(1, 1); - - return data_at_size->get_char_size(p_char, p_next); -} - -bool DynamicFont::is_distance_field_hint() const { - - return false; -} - -float DynamicFont::draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next, const Color &p_modulate, bool p_outline) const { - - if (!data_at_size.is_valid()) - return 0; - - return data_at_size->draw_char(p_canvas_item, p_pos, p_char, p_next, p_modulate, p_outline); -} - -DynamicFont::DynamicFont() { - - size = 16; -} - -DynamicFont::~DynamicFont() { -} - -///////////////////////// - -RES ResourceFormatLoaderDynamicFont::load(const String &p_path, const String &p_original_path, Error *r_error) { - - if (r_error) - *r_error = ERR_FILE_CANT_OPEN; - - FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, RES()); - - PoolVector<uint8_t> data; - - data.resize(f->get_len()); - - ERR_FAIL_COND_V(data.size() == 0, RES()); - - { - PoolVector<uint8_t>::Write w = data.write(); - f->get_buffer(w.ptr(), data.size()); - } - - Ref<DynamicFontData> dfd; - dfd.instance(); - dfd->set_font_data(data); - - if (r_error) - *r_error = OK; - - return dfd; -} - -void ResourceFormatLoaderDynamicFont::get_recognized_extensions(List<String> *p_extensions) const { - - p_extensions->push_back("ttf"); -} - -bool ResourceFormatLoaderDynamicFont::handles_type(const String &p_type) const { - - return (p_type == "DynamicFontData"); -} - -String ResourceFormatLoaderDynamicFont::get_resource_type(const String &p_path) const { - - String el = p_path.get_extension().to_lower(); - if (el == "ttf") - return "DynamicFontData"; - return ""; -} - -#endif diff --git a/scene/resources/dynamic_font_stb.h b/scene/resources/dynamic_font_stb.h deleted file mode 100644 index caee6e7e32..0000000000 --- a/scene/resources/dynamic_font_stb.h +++ /dev/null @@ -1,191 +0,0 @@ -/*************************************************************************/ -/* dynamic_font_stb.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 DYNAMICFONT_STB_H -#define DYNAMICFONT_STB_H - -#ifndef FREETYPE_ENABLED - -#include "core/io/resource_loader.h" -#include "font.h" - -#include "thirdparty/misc/stb_truetype.h" - -class DynamicFontAtSize; -class DynamicFont; - -class DynamicFontData : public Resource { - - GDCLASS(DynamicFontData, Resource); - - bool valid; - - PoolVector<uint8_t> font_data; - PoolVector<uint8_t>::Read fr; - const uint8_t *last_data_ptr; - - struct KerningPairKey { - - union { - struct { - uint32_t A, B; - }; - - uint64_t pair; - }; - - _FORCE_INLINE_ bool operator<(const KerningPairKey &p_r) const { return pair < p_r.pair; } - }; - - Map<KerningPairKey, int> kerning_map; - - Map<int, DynamicFontAtSize *> size_cache; - - friend class DynamicFontAtSize; - - stbtt_fontinfo info; - int ascent; - int descent; - int linegap; - - void lock(); - void unlock(); - - friend class DynamicFont; - - Ref<DynamicFontAtSize> _get_dynamic_font_at_size(int p_size); - -public: - void set_font_data(const PoolVector<uint8_t> &p_font); - DynamicFontData(); - ~DynamicFontData(); -}; - -class DynamicFontAtSize : public Reference { - - GDCLASS(DynamicFontAtSize, Reference); - - int rect_margin; - - struct CharTexture { - - PoolVector<uint8_t> imgdata; - int texture_size; - Vector<int> offsets; - Ref<ImageTexture> texture; - }; - - Vector<CharTexture> textures; - - struct Character { - - int texture_idx; - Rect2 rect; - float v_align; - float h_align; - float advance; - - Character() { - texture_idx = 0; - v_align = 0; - } - }; - - HashMap<CharType, Character> char_map; - - _FORCE_INLINE_ void _update_char(CharType p_char); - - friend class DynamicFontData; - Ref<DynamicFontData> font; - float scale; - int size; - -protected: -public: - float get_height() const; - - float get_ascent() const; - float get_descent() const; - - Size2 get_char_size(CharType p_char, CharType p_next = 0) const; - - float draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next = 0, const Color &p_modulate = Color(1, 1, 1), bool p_outline = false) const; - - DynamicFontAtSize(); - ~DynamicFontAtSize(); -}; - -/////////////// - -class DynamicFont : public Font { - - GDCLASS(DynamicFont, Font); - - Ref<DynamicFontData> data; - Ref<DynamicFontAtSize> data_at_size; - int size; - -protected: - static void _bind_methods(); - -public: - void set_font_data(const Ref<DynamicFontData> &p_data); - Ref<DynamicFontData> get_font_data() const; - - void set_size(int p_size); - int get_size() const; - - virtual float get_height() const; - - virtual float get_ascent() const; - virtual float get_descent() const; - - virtual Size2 get_char_size(CharType p_char, CharType p_next = 0) const; - - virtual bool is_distance_field_hint() const; - - virtual float draw_char(RID p_canvas_item, const Point2 &p_pos, CharType p_char, CharType p_next = 0, const Color &p_modulate = Color(1, 1, 1), bool p_outline = false) const; - - DynamicFont(); - ~DynamicFont(); -}; - -///////////// - -class ResourceFormatLoaderDynamicFont : public ResourceFormatLoader { -public: - virtual RES load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL); - virtual void get_recognized_extensions(List<String> *p_extensions) const; - virtual bool handles_type(const String &p_type) const; - virtual String get_resource_type(const String &p_path) const; -}; - -#endif -#endif // DYNAMICFONT_H diff --git a/scene/resources/environment.cpp b/scene/resources/environment.cpp index afb7f1102b..bc96b5e9f3 100644 --- a/scene/resources/environment.cpp +++ b/scene/resources/environment.cpp @@ -354,10 +354,6 @@ void Environment::_validate_property(PropertyInfo &property) const { "tonemap_", "ss_reflections_", "ssao_", - "dof_blur_far_", - "dof_blur_near_", - "glow_", - "adjustment_", NULL }; diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp index cff77acdd7..124e4d37e6 100644 --- a/scene/resources/font.cpp +++ b/scene/resources/font.cpp @@ -96,7 +96,7 @@ void Font::_bind_methods() { ClassDB::bind_method(D_METHOD("get_height"), &Font::get_height); ClassDB::bind_method(D_METHOD("is_distance_field_hint"), &Font::is_distance_field_hint); ClassDB::bind_method(D_METHOD("get_string_size", "string"), &Font::get_string_size); - ClassDB::bind_method(D_METHOD("get_wordwrap_string_size", "string", "p_width"), &Font::get_wordwrap_string_size); + ClassDB::bind_method(D_METHOD("get_wordwrap_string_size", "string", "width"), &Font::get_wordwrap_string_size); ClassDB::bind_method(D_METHOD("has_outline"), &Font::has_outline); ClassDB::bind_method(D_METHOD("draw_char", "canvas_item", "position", "char", "next", "modulate", "outline"), &Font::draw_char, DEFVAL(-1), DEFVAL(Color(1, 1, 1)), DEFVAL(false)); ClassDB::bind_method(D_METHOD("update_changes"), &Font::update_changes); @@ -358,7 +358,7 @@ float BitmapFont::get_descent() const { void BitmapFont::add_texture(const Ref<Texture> &p_texture) { - ERR_FAIL_COND(p_texture.is_null()); + ERR_FAIL_COND_MSG(p_texture.is_null(), "It's not a reference to a valid Texture object."); textures.push_back(p_texture); } diff --git a/scene/resources/height_map_shape.cpp b/scene/resources/height_map_shape.cpp index f763700d52..214706626d 100644 --- a/scene/resources/height_map_shape.cpp +++ b/scene/resources/height_map_shape.cpp @@ -31,7 +31,7 @@ #include "height_map_shape.h" #include "servers/physics_server.h" -Vector<Vector3> HeightMapShape::_gen_debug_mesh_lines() { +Vector<Vector3> HeightMapShape::get_debug_mesh_lines() { Vector<Vector3> points; if ((map_width != 0) && (map_depth != 0)) { diff --git a/scene/resources/height_map_shape.h b/scene/resources/height_map_shape.h index b062f4e893..4cf2a76213 100644 --- a/scene/resources/height_map_shape.h +++ b/scene/resources/height_map_shape.h @@ -46,8 +46,6 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); - public: void set_map_width(int p_new); int get_map_width() const; @@ -56,6 +54,8 @@ public: void set_map_data(PoolRealArray p_new); PoolRealArray get_map_data() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + HeightMapShape(); }; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 0de462d616..fab0aace14 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -496,10 +496,16 @@ void SpatialMaterial::_update_shader() { } code += "uniform float roughness : hint_range(0,1);\n"; code += "uniform float point_size : hint_range(0,128);\n"; - code += "uniform sampler2D texture_metallic : hint_white;\n"; - code += "uniform vec4 metallic_texture_channel;\n"; - code += "uniform sampler2D texture_roughness : hint_white;\n"; - code += "uniform vec4 roughness_texture_channel;\n"; + + if (textures[TEXTURE_METALLIC] != NULL) { + code += "uniform sampler2D texture_metallic : hint_white;\n"; + code += "uniform vec4 metallic_texture_channel;\n"; + } + + if (textures[TEXTURE_ROUGHNESS] != NULL) { + code += "uniform sampler2D texture_roughness : hint_white;\n"; + code += "uniform vec4 roughness_texture_channel;\n"; + } if (billboard_mode == BILLBOARD_PARTICLES) { code += "uniform int particles_anim_h_frames;\n"; code += "uniform int particles_anim_v_frames;\n"; @@ -790,20 +796,30 @@ void SpatialMaterial::_update_shader() { if (flags[FLAG_ALBEDO_FROM_VERTEX_COLOR]) { code += "\talbedo_tex *= COLOR;\n"; } - code += "\tALBEDO = albedo.rgb * albedo_tex.rgb;\n"; - if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tfloat metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel);\n"; + + if (textures[TEXTURE_METALLIC] != NULL) { + if (flags[FLAG_UV1_USE_TRIPLANAR]) { + code += "\tfloat metallic_tex = dot(triplanar_texture(texture_metallic,uv1_power_normal,uv1_triplanar_pos),metallic_texture_channel);\n"; + } else { + code += "\tfloat metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel);\n"; + } + code += "\tMETALLIC = metallic_tex * metallic;\n"; } else { - code += "\tfloat metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel);\n"; + code += "\tMETALLIC = metallic;\n"; } - code += "\tMETALLIC = metallic_tex * metallic;\n"; - if (flags[FLAG_UV1_USE_TRIPLANAR]) { - code += "\tfloat roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel);\n"; + + if (textures[TEXTURE_ROUGHNESS] != NULL) { + if (flags[FLAG_UV1_USE_TRIPLANAR]) { + code += "\tfloat roughness_tex = dot(triplanar_texture(texture_roughness,uv1_power_normal,uv1_triplanar_pos),roughness_texture_channel);\n"; + } else { + code += "\tfloat roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel);\n"; + } + code += "\tROUGHNESS = roughness_tex * roughness;\n"; } else { - code += "\tfloat roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel);\n"; + code += "\tROUGHNESS = roughness;\n"; } - code += "\tROUGHNESS = roughness_tex * roughness;\n"; + code += "\tSPECULAR = specular;\n"; if (features[FEATURE_NORMAL_MAPPING]) { @@ -1389,6 +1405,8 @@ void SpatialMaterial::set_texture(TextureParam p_param, const Ref<Texture> &p_te textures[p_param] = p_texture; RID rid = p_texture.is_valid() ? p_texture->get_rid() : RID(); VS::get_singleton()->material_set_param(_get_material(), shader_names->texture_names[p_param], rid); + _queue_shader_change(); + _change_notify(); } Ref<Texture> SpatialMaterial::get_texture(TextureParam p_param) const { @@ -1754,6 +1772,7 @@ SpatialMaterial::TextureChannel SpatialMaterial::get_roughness_texture_channel() void SpatialMaterial::set_ao_texture_channel(TextureChannel p_channel) { + ERR_FAIL_INDEX(p_channel, 5); ao_texture_channel = p_channel; VS::get_singleton()->material_set_param(_get_material(), shader_names->ao_texture_channel, _get_texture_mask(p_channel)); } @@ -1764,6 +1783,7 @@ SpatialMaterial::TextureChannel SpatialMaterial::get_ao_texture_channel() const void SpatialMaterial::set_refraction_texture_channel(TextureChannel p_channel) { + ERR_FAIL_INDEX(p_channel, 5); refraction_texture_channel = p_channel; VS::get_singleton()->material_set_param(_get_material(), shader_names->refraction_texture_channel, _get_texture_mask(p_channel)); } @@ -1804,10 +1824,9 @@ RID SpatialMaterial::get_material_rid_for_2d(bool p_shaded, bool p_transparent, material->set_flag(FLAG_SRGB_VERTEX_COLOR, true); material->set_flag(FLAG_ALBEDO_FROM_VERTEX_COLOR, true); material->set_flag(FLAG_USE_ALPHA_SCISSOR, p_cut_alpha); - if (p_billboard) { - material->set_billboard_mode(BILLBOARD_ENABLED); - } else if (p_billboard_y) { - material->set_billboard_mode(BILLBOARD_FIXED_Y); + if (p_billboard || p_billboard_y) { + material->set_flag(FLAG_BILLBOARD_KEEP_SCALE, true); + material->set_billboard_mode(p_billboard_y ? BILLBOARD_FIXED_Y : BILLBOARD_ENABLED); } materials_for_2d[version] = material; diff --git a/scene/resources/mesh_library.cpp b/scene/resources/mesh_library.cpp index d40a5dee2e..f04af29761 100644 --- a/scene/resources/mesh_library.cpp +++ b/scene/resources/mesh_library.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "mesh_library.h" +#include "core/engine.h" bool MeshLibrary::_set(const StringName &p_name, const Variant &p_value) { @@ -117,7 +118,7 @@ void MeshLibrary::create_item(int p_item) { void MeshLibrary::set_item_name(int p_item, const String &p_name) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].name = p_name; emit_changed(); _change_notify(); @@ -125,7 +126,7 @@ void MeshLibrary::set_item_name(int p_item, const String &p_name) { void MeshLibrary::set_item_mesh(int p_item, const Ref<Mesh> &p_mesh) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].mesh = p_mesh; notify_change_to_owners(); emit_changed(); @@ -134,7 +135,7 @@ void MeshLibrary::set_item_mesh(int p_item, const Ref<Mesh> &p_mesh) { void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].shapes = p_shapes; _change_notify(); notify_change_to_owners(); @@ -144,7 +145,7 @@ void MeshLibrary::set_item_shapes(int p_item, const Vector<ShapeData> &p_shapes) void MeshLibrary::set_item_navmesh(int p_item, const Ref<NavigationMesh> &p_navmesh) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].navmesh = p_navmesh; _change_notify(); notify_change_to_owners(); @@ -154,7 +155,7 @@ void MeshLibrary::set_item_navmesh(int p_item, const Ref<NavigationMesh> &p_navm void MeshLibrary::set_item_navmesh_transform(int p_item, const Transform &p_transform) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].navmesh_transform = p_transform; notify_change_to_owners(); emit_changed(); @@ -163,7 +164,7 @@ void MeshLibrary::set_item_navmesh_transform(int p_item, const Transform &p_tran void MeshLibrary::set_item_preview(int p_item, const Ref<Texture> &p_preview) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map[p_item].preview = p_preview; emit_changed(); _change_notify(); @@ -171,37 +172,42 @@ void MeshLibrary::set_item_preview(int p_item, const Ref<Texture> &p_preview) { String MeshLibrary::get_item_name(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), ""); + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), "", "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].name; } Ref<Mesh> MeshLibrary::get_item_mesh(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Ref<Mesh>()); + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), Ref<Mesh>(), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].mesh; } Vector<MeshLibrary::ShapeData> MeshLibrary::get_item_shapes(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Vector<ShapeData>()); + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), Vector<ShapeData>(), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].shapes; } Ref<NavigationMesh> MeshLibrary::get_item_navmesh(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Ref<NavigationMesh>()); + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), Ref<NavigationMesh>(), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].navmesh; } Transform MeshLibrary::get_item_navmesh_transform(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Transform()); + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), Transform(), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].navmesh_transform; } Ref<Texture> MeshLibrary::get_item_preview(int p_item) const { - ERR_FAIL_COND_V(!item_map.has(p_item), Ref<Texture>()); + if (!Engine::get_singleton()->is_editor_hint()) { + ERR_PRINT("MeshLibrary item previews are only generated in an editor context, which means they aren't available in a running project."); + return Ref<Texture>(); + } + + ERR_FAIL_COND_V_MSG(!item_map.has(p_item), Ref<Texture>(), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); return item_map[p_item].preview; } @@ -211,7 +217,7 @@ bool MeshLibrary::has_item(int p_item) const { } void MeshLibrary::remove_item(int p_item) { - ERR_FAIL_COND(!item_map.has(p_item)); + ERR_FAIL_COND_MSG(!item_map.has(p_item), "Requested for nonexistent MeshLibrary item '" + itos(p_item) + "'."); item_map.erase(p_item); notify_change_to_owners(); _change_notify(); diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index dc6ef2b49c..969743f78c 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -567,8 +567,8 @@ void ParticlesMaterial::_update_shader() { } } //scale by scale - code += " float base_scale = mix(scale * tex_scale, 1.0, scale_random * scale_rand);\n"; - code += " if (base_scale == 0.0) {\n"; + code += " float base_scale = tex_scale * mix(scale, 1.0, scale_random * scale_rand);\n"; + code += " if (base_scale < 0.000001) {\n"; code += " base_scale = 0.000001;\n"; code += " }\n"; if (trail_size_modifier.is_valid()) { diff --git a/scene/resources/plane_shape.cpp b/scene/resources/plane_shape.cpp index 08f6ccd764..d3274ec5f8 100644 --- a/scene/resources/plane_shape.cpp +++ b/scene/resources/plane_shape.cpp @@ -32,7 +32,7 @@ #include "servers/physics_server.h" -Vector<Vector3> PlaneShape::_gen_debug_mesh_lines() { +Vector<Vector3> PlaneShape::get_debug_mesh_lines() { Plane p = get_plane(); Vector<Vector3> points; diff --git a/scene/resources/plane_shape.h b/scene/resources/plane_shape.h index 87c367cfde..f853d1966b 100644 --- a/scene/resources/plane_shape.h +++ b/scene/resources/plane_shape.h @@ -42,12 +42,12 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); - public: void set_plane(Plane p_plane); Plane get_plane() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + PlaneShape(); }; #endif // PLANE_SHAPE_H diff --git a/scene/resources/polygon_path_finder.cpp b/scene/resources/polygon_path_finder.cpp index 52fc21ac11..bd3236cb5b 100644 --- a/scene/resources/polygon_path_finder.cpp +++ b/scene/resources/polygon_path_finder.cpp @@ -466,11 +466,11 @@ Dictionary PolygonPathFinder::_get_data() const { PoolVector<Vector2> p; PoolVector<int> ind; Array connections; - p.resize(points.size() - 2); - connections.resize(points.size() - 2); + p.resize(MAX(0, points.size() - 2)); + connections.resize(MAX(0, points.size() - 2)); ind.resize(edges.size() * 2); PoolVector<float> penalties; - penalties.resize(points.size() - 2); + penalties.resize(MAX(0, points.size() - 2)); { PoolVector<Vector2>::Write wp = p.write(); PoolVector<float>::Write pw = penalties.write(); diff --git a/scene/resources/ray_shape.cpp b/scene/resources/ray_shape.cpp index 0acfffdc06..f185263a36 100644 --- a/scene/resources/ray_shape.cpp +++ b/scene/resources/ray_shape.cpp @@ -32,7 +32,7 @@ #include "servers/physics_server.h" -Vector<Vector3> RayShape::_gen_debug_mesh_lines() { +Vector<Vector3> RayShape::get_debug_mesh_lines() { Vector<Vector3> points; points.push_back(Vector3()); @@ -90,6 +90,12 @@ void RayShape::_bind_methods() { RayShape::RayShape() : Shape(PhysicsServer::get_singleton()->shape_create(PhysicsServer::SHAPE_RAY)) { - set_length(1.0); - set_slips_on_slope(false); + length = 1.0; + slips_on_slope = false; + + /* Code copied from setters to prevent the use of uninitialized variables */ + _update_shape(); + notify_change_to_owners(); + _change_notify("length"); + _change_notify("slips_on_slope"); } diff --git a/scene/resources/ray_shape.h b/scene/resources/ray_shape.h index 89fc34051c..fee7475c69 100644 --- a/scene/resources/ray_shape.h +++ b/scene/resources/ray_shape.h @@ -41,7 +41,6 @@ class RayShape : public Shape { protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); public: void set_length(float p_length); @@ -50,6 +49,8 @@ public: void set_slips_on_slope(bool p_active); bool get_slips_on_slope() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + RayShape(); }; #endif // RAY_SHAPE_H diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp index cd229732ba..baffc1396d 100644 --- a/scene/resources/resource_format_text.cpp +++ b/scene/resources/resource_format_text.cpp @@ -1225,7 +1225,7 @@ Ref<ResourceInteractiveLoader> ResourceFormatLoaderText::load_interactive(const Error err; FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, Ref<ResourceInteractiveLoader>()); + ERR_FAIL_COND_V_MSG(err != OK, Ref<ResourceInteractiveLoader>(), "Cannot open file '" + p_path + "'."); Ref<ResourceInteractiveLoaderText> ria = memnew(ResourceInteractiveLoaderText); String path = p_original_path != "" ? p_original_path : p_path; @@ -1321,7 +1321,7 @@ Error ResourceFormatLoaderText::convert_file_to_binary(const String &p_src_path, Error err; FileAccess *f = FileAccess::open(p_src_path, FileAccess::READ, &err); - ERR_FAIL_COND_V(err != OK, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(err != OK, ERR_CANT_OPEN, "Cannot open file '" + p_src_path + "'."); Ref<ResourceInteractiveLoaderText> ria = memnew(ResourceInteractiveLoaderText); const String &path = p_src_path; @@ -1481,7 +1481,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const RES &p_r Error err; f = FileAccess::open(p_path, FileAccess::WRITE, &err); - ERR_FAIL_COND_V(err, ERR_CANT_OPEN); + ERR_FAIL_COND_V_MSG(err, ERR_CANT_OPEN, "Cannot save file '" + p_path + "'."); FileAccessRef _fref(f); local_path = ProjectSettings::get_singleton()->localize_path(p_path); @@ -1713,6 +1713,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const RES &p_r } if (groups.size()) { + groups.sort_custom<StringName::AlphCompare>(); String sgroups = " groups=[\n"; for (int j = 0; j < groups.size(); j++) { sgroups += "\"" + String(groups[j]).c_escape() + "\",\n"; diff --git a/scene/resources/shader.cpp b/scene/resources/shader.cpp index 89570beb5f..57e2470164 100644 --- a/scene/resources/shader.cpp +++ b/scene/resources/shader.cpp @@ -222,10 +222,7 @@ Error ResourceFormatSaverShader::save(const String &p_path, const RES &p_resourc Error err; FileAccess *file = FileAccess::open(p_path, FileAccess::WRITE, &err); - if (err) { - - ERR_FAIL_COND_V(err, err); - } + ERR_FAIL_COND_V_MSG(err, err, "Cannot save shader '" + p_path + "'."); file->store_string(source); if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) { diff --git a/scene/resources/shape.cpp b/scene/resources/shape.cpp index 6ba46f066c..3500fdb4bc 100644 --- a/scene/resources/shape.cpp +++ b/scene/resources/shape.cpp @@ -37,7 +37,7 @@ void Shape::add_vertices_to_array(PoolVector<Vector3> &array, const Transform &p_xform) { - Vector<Vector3> toadd = _gen_debug_mesh_lines(); + Vector<Vector3> toadd = get_debug_mesh_lines(); if (toadd.size()) { @@ -64,7 +64,7 @@ Ref<ArrayMesh> Shape::get_debug_mesh() { if (debug_mesh_cache.is_valid()) return debug_mesh_cache; - Vector<Vector3> lines = _gen_debug_mesh_lines(); + Vector<Vector3> lines = get_debug_mesh_lines(); debug_mesh_cache = Ref<ArrayMesh>(memnew(ArrayMesh)); diff --git a/scene/resources/shape.h b/scene/resources/shape.h index ba763eaab1..2743fd0c65 100644 --- a/scene/resources/shape.h +++ b/scene/resources/shape.h @@ -50,13 +50,13 @@ protected: _FORCE_INLINE_ RID get_shape() const { return shape; } Shape(RID p_shape); - virtual Vector<Vector3> _gen_debug_mesh_lines() = 0; // { return Vector<Vector3>(); } virtual void _update_shape(); public: virtual RID get_rid() const { return shape; } Ref<ArrayMesh> get_debug_mesh(); + virtual Vector<Vector3> get_debug_mesh_lines() = 0; // { return Vector<Vector3>(); } void add_vertices_to_array(PoolVector<Vector3> &array, const Transform &p_xform); diff --git a/scene/resources/skin.cpp b/scene/resources/skin.cpp new file mode 100644 index 0000000000..98c114e0e6 --- /dev/null +++ b/scene/resources/skin.cpp @@ -0,0 +1,132 @@ +/*************************************************************************/ +/* skin.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 "skin.h" + +void Skin::set_bind_count(int p_size) { + ERR_FAIL_COND(p_size < 0); + binds.resize(p_size); + binds_ptr = binds.ptrw(); + bind_count = p_size; + emit_changed(); +} + +void Skin::add_bind(int p_bone, const Transform &p_pose) { + uint32_t index = bind_count; + set_bind_count(bind_count + 1); + set_bind_bone(index, p_bone); + set_bind_pose(index, p_pose); +} + +void Skin::set_bind_bone(int p_index, int p_bone) { + ERR_FAIL_INDEX(p_index, bind_count); + binds_ptr[p_index].bone = p_bone; + emit_changed(); +} + +void Skin::set_bind_pose(int p_index, const Transform &p_pose) { + ERR_FAIL_INDEX(p_index, bind_count); + binds_ptr[p_index].pose = p_pose; + emit_changed(); +} + +void Skin::clear_binds() { + binds.clear(); + binds_ptr = nullptr; + bind_count = 0; + emit_changed(); +} + +bool Skin::_set(const StringName &p_name, const Variant &p_value) { + String name = p_name; + if (name == "bind_count") { + set_bind_count(p_value); + return true; + } else if (name.begins_with("bind/")) { + int index = name.get_slicec('/', 1).to_int(); + String what = name.get_slicec('/', 2); + if (what == "bone") { + set_bind_bone(index, p_value); + return true; + } else if (what == "pose") { + set_bind_pose(index, p_value); + return true; + } + } + return false; +} + +bool Skin::_get(const StringName &p_name, Variant &r_ret) const { + + String name = p_name; + if (name == "bind_count") { + r_ret = get_bind_count(); + return true; + } else if (name.begins_with("bind/")) { + int index = name.get_slicec('/', 1).to_int(); + String what = name.get_slicec('/', 2); + if (what == "bone") { + r_ret = get_bind_bone(index); + return true; + } else if (what == "pose") { + r_ret = get_bind_pose(index); + return true; + } + } + return false; +} +void Skin::_get_property_list(List<PropertyInfo> *p_list) const { + p_list->push_back(PropertyInfo(Variant::INT, "bind_count", PROPERTY_HINT_RANGE, "0,16384,1,or_greater")); + for (int i = 0; i < get_bind_count(); i++) { + p_list->push_back(PropertyInfo(Variant::INT, "bind/" + itos(i) + "/bone", PROPERTY_HINT_RANGE, "0,16384,1,or_greater")); + p_list->push_back(PropertyInfo(Variant::TRANSFORM, "bind/" + itos(i) + "/pose")); + } +} + +void Skin::_bind_methods() { + + ClassDB::bind_method(D_METHOD("set_bind_count", "bind_count"), &Skin::set_bind_count); + ClassDB::bind_method(D_METHOD("get_bind_count"), &Skin::get_bind_count); + + ClassDB::bind_method(D_METHOD("add_bind", "bone", "pose"), &Skin::add_bind); + + ClassDB::bind_method(D_METHOD("set_bind_pose", "bind_index", "pose"), &Skin::set_bind_pose); + ClassDB::bind_method(D_METHOD("get_bind_pose", "bind_index"), &Skin::get_bind_pose); + + ClassDB::bind_method(D_METHOD("set_bind_bone", "bind_index", "bone"), &Skin::set_bind_bone); + ClassDB::bind_method(D_METHOD("get_bind_bone", "bind_index"), &Skin::get_bind_bone); + + ClassDB::bind_method(D_METHOD("clear_binds"), &Skin::clear_binds); +} + +Skin::Skin() { + bind_count = 0; + binds_ptr = nullptr; +} diff --git a/editor/output_strings.h b/scene/resources/skin.h index 4fd3f7d836..7dd02eca5d 100644 --- a/editor/output_strings.h +++ b/scene/resources/skin.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* output_strings.h */ +/* skin.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -28,60 +28,57 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef OUTPUT_STRINGS_H -#define OUTPUT_STRINGS_H +#ifndef SKIN_H +#define SKIN_H -#include "core/map.h" -#include "scene/gui/control.h" -#include "scene/gui/scroll_bar.h" +#include "core/resource.h" -class OutputStrings : public Control { +class Skin : public Resource { + GDCLASS(Skin, Resource) - GDCLASS(OutputStrings, Control); - -public: - enum LineType { - - LINE_NORMAL, - LINE_WARNING, - LINE_ERROR, - LINE_LINK + struct Bind { + int bone; + Transform pose; }; -private: - struct Line { + Vector<Bind> binds; - LineType type; - Variant meta; - String text; - }; + Bind *binds_ptr; + int bind_count; - int font_height; - int size_height; +protected: + bool _set(const StringName &p_name, const Variant &p_value); + bool _get(const StringName &p_name, Variant &r_ret) const; + void _get_property_list(List<PropertyInfo> *p_list) const; - Size2 margin; - typedef Map<int, Line> LineMap; - Map<int, Line> line_map; + static void _bind_methods(); - VScrollBar *v_scroll; - HScrollBar *h_scroll; +public: + void set_bind_count(int p_size); + inline int get_bind_count() const { return bind_count; } - bool following; - int line_max_count; - bool updating; + void add_bind(int p_bone, const Transform &p_pose); - void _vscroll_changed(float p_value); - void _hscroll_changed(float p_value); - void update_scrollbars(); + void set_bind_bone(int p_index, int p_bone); + void set_bind_pose(int p_index, const Transform &p_pose); -protected: - static void _bind_methods(); - void _notification(int p_what); + inline int get_bind_bone(int p_index) const { +#ifdef DEBUG_ENABLED + ERR_FAIL_INDEX_V(p_index, bind_count, -1); +#endif + return binds_ptr[p_index].bone; + } -public: - void add_line(const String &p_text, const Variant &p_meta = Variant(), const LineType p_type = LINE_NORMAL); + inline Transform get_bind_pose(int p_index) const { +#ifdef DEBUG_ENABLED + ERR_FAIL_INDEX_V(p_index, bind_count, Transform()); +#endif + return binds_ptr[p_index].pose; + } + + void clear_binds(); - OutputStrings(); + Skin(); }; -#endif // OUTPUT_STRINGS_H +#endif // SKIN_H diff --git a/scene/resources/sphere_shape.cpp b/scene/resources/sphere_shape.cpp index af89413ced..019bc9189a 100644 --- a/scene/resources/sphere_shape.cpp +++ b/scene/resources/sphere_shape.cpp @@ -31,7 +31,7 @@ #include "sphere_shape.h" #include "servers/physics_server.h" -Vector<Vector3> SphereShape::_gen_debug_mesh_lines() { +Vector<Vector3> SphereShape::get_debug_mesh_lines() { float r = get_radius(); diff --git a/scene/resources/sphere_shape.h b/scene/resources/sphere_shape.h index 682928e885..679882fe23 100644 --- a/scene/resources/sphere_shape.h +++ b/scene/resources/sphere_shape.h @@ -42,12 +42,13 @@ protected: static void _bind_methods(); virtual void _update_shape(); - virtual Vector<Vector3> _gen_debug_mesh_lines(); public: void set_radius(float p_radius); float get_radius() const; + virtual Vector<Vector3> get_debug_mesh_lines(); + SphereShape(); }; diff --git a/scene/resources/style_box.cpp b/scene/resources/style_box.cpp index 5dd429fa75..9ee7c2936e 100644 --- a/scene/resources/style_box.cpp +++ b/scene/resources/style_box.cpp @@ -40,16 +40,22 @@ bool StyleBox::test_mask(const Point2 &p_point, const Rect2 &p_rect) const { void StyleBox::set_default_margin(Margin p_margin, float p_value) { + ERR_FAIL_INDEX((int)p_margin, 4); + margin[p_margin] = p_value; emit_changed(); } float StyleBox::get_default_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0.0); + return margin[p_margin]; } float StyleBox::get_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0.0); + if (margin[p_margin] < 0) return get_style_margin(p_margin); else @@ -157,11 +163,15 @@ void StyleBoxTexture::set_margin_size(Margin p_margin, float p_size) { } float StyleBoxTexture::get_margin_size(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0.0); + return margin[p_margin]; } float StyleBoxTexture::get_style_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0.0); + return margin[p_margin]; } @@ -250,6 +260,7 @@ Rect2 StyleBoxTexture::get_region_rect() const { void StyleBoxTexture::set_h_axis_stretch_mode(AxisStretchMode p_mode) { + ERR_FAIL_INDEX((int)p_mode, 3); axis_h = p_mode; emit_changed(); } @@ -261,6 +272,7 @@ StyleBoxTexture::AxisStretchMode StyleBoxTexture::get_h_axis_stretch_mode() cons void StyleBoxTexture::set_v_axis_stretch_mode(AxisStretchMode p_mode) { + ERR_FAIL_INDEX((int)p_mode, 3); axis_v = p_mode; emit_changed(); } @@ -391,11 +403,13 @@ int StyleBoxFlat::get_border_width_min() const { } void StyleBoxFlat::set_border_width(Margin p_margin, int p_width) { + ERR_FAIL_INDEX((int)p_margin, 4); border_width[p_margin] = p_width; emit_changed(); } int StyleBoxFlat::get_border_width(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0); return border_width[p_margin]; } @@ -437,15 +451,19 @@ int StyleBoxFlat::get_corner_radius_min() const { void StyleBoxFlat::set_corner_radius(const Corner p_corner, const int radius) { + ERR_FAIL_INDEX((int)p_corner, 4); corner_radius[p_corner] = radius; emit_changed(); } int StyleBoxFlat::get_corner_radius(const Corner p_corner) const { + + ERR_FAIL_INDEX_V((int)p_corner, 4, 0); return corner_radius[p_corner]; } void StyleBoxFlat::set_expand_margin_size(Margin p_expand_margin, float p_size) { + ERR_FAIL_INDEX((int)p_expand_margin, 4); expand_margin[p_expand_margin] = p_size; emit_changed(); } @@ -468,6 +486,7 @@ void StyleBoxFlat::set_expand_margin_size_all(float p_expand_margin_size) { float StyleBoxFlat::get_expand_margin_size(Margin p_expand_margin) const { + ERR_FAIL_INDEX_V((int)p_expand_margin, 4, 0.0); return expand_margin[p_expand_margin]; } void StyleBoxFlat::set_draw_center(bool p_enabled) { @@ -713,6 +732,7 @@ void StyleBoxFlat::draw(RID p_canvas_item, const Rect2 &p_rect) const { Vector<Point2> verts; Vector<int> indices; Vector<Color> colors; + Vector<Point2> uvs; //DRAW SHADOW if (draw_shadow) { @@ -799,12 +819,21 @@ void StyleBoxFlat::draw(RID p_canvas_item, const Rect2 &p_rect) const { } } + //COMPUTE UV COORDINATES + Rect2 uv_rect = style_rect.grow(aa_on ? aa_size : 0); + uvs.resize(verts.size()); + for (int i = 0; i < verts.size(); i++) { + uvs.write[i].x = (verts[i].x - uv_rect.position.x) / uv_rect.size.width; + uvs.write[i].y = (verts[i].y - uv_rect.position.y) / uv_rect.size.height; + } + //DRAWING VisualServer *vs = VisualServer::get_singleton(); - vs->canvas_item_add_triangle_array(p_canvas_item, indices, verts, colors); + vs->canvas_item_add_triangle_array(p_canvas_item, indices, verts, colors, uvs); } float StyleBoxFlat::get_style_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, 0.0); return border_width[p_margin]; } void StyleBoxFlat::_bind_methods() { @@ -988,6 +1017,7 @@ void StyleBoxLine::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "vertical"), "set_vertical", "is_vertical"); } float StyleBoxLine::get_style_margin(Margin p_margin) const { + ERR_FAIL_INDEX_V((int)p_margin, 4, thickness); return thickness; } Size2 StyleBoxLine::get_center_size() const { diff --git a/scene/resources/text_file.cpp b/scene/resources/text_file.cpp index b84f3f1f9e..3faedc883d 100644 --- a/scene/resources/text_file.cpp +++ b/scene/resources/text_file.cpp @@ -53,9 +53,8 @@ Error TextFile::load_text(const String &p_path) { PoolVector<uint8_t> sourcef; Error err; FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err); - if (err) { - ERR_FAIL_COND_V(err, err); - } + + ERR_FAIL_COND_V_MSG(err, err, "Cannot open TextFile '" + p_path + "'."); int len = f->get_len(); sourcef.resize(len + 1); diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp index e44b17584b..c2e2f85723 100644 --- a/scene/resources/texture.cpp +++ b/scene/resources/texture.cpp @@ -117,6 +117,7 @@ void ImageTexture::reload_from_file() { } else { Resource::reload_from_file(); _change_notify(); + emit_changed(); } } @@ -175,11 +176,12 @@ void ImageTexture::_reload_hook(const RID &p_hook) { img.instance(); Error err = ImageLoader::load_image(path, img); - ERR_FAIL_COND(err != OK); + ERR_FAIL_COND_MSG(err != OK, "Cannot load image from path '" + path + "'."); VisualServer::get_singleton()->texture_set_data(texture, img); _change_notify(); + emit_changed(); } void ImageTexture::create(int p_width, int p_height, Image::Format p_format, uint32_t p_flags) { @@ -190,6 +192,7 @@ void ImageTexture::create(int p_width, int p_height, Image::Format p_format, uin w = p_width; h = p_height; _change_notify(); + emit_changed(); } void ImageTexture::create_from_image(const Ref<Image> &p_image, uint32_t p_flags) { @@ -202,23 +205,23 @@ void ImageTexture::create_from_image(const Ref<Image> &p_image, uint32_t p_flags VisualServer::get_singleton()->texture_allocate(texture, p_image->get_width(), p_image->get_height(), 0, p_image->get_format(), VS::TEXTURE_TYPE_2D, p_flags); VisualServer::get_singleton()->texture_set_data(texture, p_image); _change_notify(); + emit_changed(); image_stored = true; } void ImageTexture::set_flags(uint32_t p_flags) { - /* uint32_t cube = flags & FLAG_CUBEMAP; - if (flags == p_flags&cube) + if (flags == p_flags) return; - flags=p_flags|cube; */ flags = p_flags; if (w == 0 || h == 0) { return; //uninitialized, do not set to texture } VisualServer::get_singleton()->texture_set_flags(texture, p_flags); _change_notify("flags"); + emit_changed(); } uint32_t ImageTexture::get_flags() const { @@ -250,6 +253,8 @@ void ImageTexture::set_data(const Ref<Image> &p_image) { VisualServer::get_singleton()->texture_set_data(texture, p_image); _change_notify(); + emit_changed(); + alpha_cache.unref(); image_stored = true; } @@ -736,6 +741,7 @@ Error StreamTexture::load(const String &p_path) { format = image->get_format(); _change_notify(); + emit_changed(); return OK; } String StreamTexture::get_load_path() const { @@ -827,6 +833,7 @@ void StreamTexture::set_flags(uint32_t p_flags) { flags = p_flags; VS::get_singleton()->texture_set_flags(texture, flags); _change_notify("flags"); + emit_changed(); } void StreamTexture::reload_from_file() { @@ -2355,7 +2362,7 @@ RES ResourceFormatLoaderTextureLayered::load(const String &p_path, const String } FileAccess *f = FileAccess::open(p_path, FileAccess::READ); - ERR_FAIL_COND_V(!f, RES()); + ERR_FAIL_COND_V_MSG(!f, RES(), "Cannot open file '" + p_path + "'."); uint8_t header[5] = { 0, 0, 0, 0, 0 }; f->get_buffer(header, 4); @@ -2372,7 +2379,7 @@ RES ResourceFormatLoaderTextureLayered::load(const String &p_path, const String } } else { - ERR_FAIL_V_MSG(RES(), "Unrecognized layered texture file format: " + String((const char *)header) + "."); + ERR_FAIL_V_MSG(RES(), "Unrecognized layered texture file format '" + String((const char *)header) + "'."); } int tw = f->get_32(); diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp index ae18be1695..f1429a7d7b 100644 --- a/scene/resources/theme.cpp +++ b/scene/resources/theme.cpp @@ -37,6 +37,97 @@ void Theme::_emit_theme_changed() { emit_changed(); } +PoolVector<String> Theme::_get_icon_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_icon_list(p_type, &il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_stylebox_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_stylebox_list(p_type, &il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_stylebox_types(void) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_stylebox_types(&il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_font_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_font_list(p_type, &il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_color_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_color_list(p_type, &il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_constant_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_constant_list(p_type, &il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + +PoolVector<String> Theme::_get_type_list(const String &p_type) const { + + PoolVector<String> ilret; + List<StringName> il; + + get_type_list(&il); + ilret.resize(il.size()); + for (List<StringName>::Element *E = il.front(); E; E = E->next()) { + ilret.push_back(E->get()); + } + return ilret; +} + bool Theme::_set(const StringName &p_name, const Variant &p_value) { String sname = p_name; @@ -300,6 +391,8 @@ void Theme::clear_icon(const StringName &p_name, const StringName &p_type) { void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + if (!icon_map.has(p_type)) return; @@ -344,6 +437,9 @@ void Theme::clear_shader(const StringName &p_name, const StringName &p_type) { } void Theme::get_shader_list(const StringName &p_type, List<StringName> *p_list) const { + + ERR_FAIL_NULL(p_list); + if (!shader_map.has(p_type)) return; @@ -408,6 +504,8 @@ void Theme::clear_stylebox(const StringName &p_name, const StringName &p_type) { void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + if (!style_map.has(p_type)) return; @@ -420,6 +518,8 @@ void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const } void Theme::get_stylebox_types(List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + const StringName *key = NULL; while ((key = style_map.next(key))) { p_list->push_back(*key); @@ -478,6 +578,8 @@ void Theme::clear_font(const StringName &p_name, const StringName &p_type) { void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + if (!font_map.has(p_type)) return; @@ -526,6 +628,8 @@ void Theme::clear_color(const StringName &p_name, const StringName &p_type) { void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + if (!color_map.has(p_type)) return; @@ -574,6 +678,8 @@ void Theme::clear_constant(const StringName &p_name, const StringName &p_type) { void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const { + ERR_FAIL_NULL(p_list); + if (!constant_map.has(p_type)) return; @@ -637,6 +743,12 @@ void Theme::copy_default_theme() { void Theme::copy_theme(const Ref<Theme> &p_other) { + if (p_other.is_null()) { + clear(); + + return; + } + //these need reconnecting, so add normally { const StringName *K = NULL; @@ -680,8 +792,9 @@ void Theme::copy_theme(const Ref<Theme> &p_other) { void Theme::get_type_list(List<StringName> *p_list) const { - Set<StringName> types; + ERR_FAIL_NULL(p_list); + Set<StringName> types; const StringName *key = NULL; while ((key = icon_map.next(key))) { diff --git a/scene/resources/theme.h b/scene/resources/theme.h index 187694de65..471e5b1a51 100644 --- a/scene/resources/theme.h +++ b/scene/resources/theme.h @@ -52,6 +52,14 @@ class Theme : public Resource { HashMap<StringName, HashMap<StringName, Color> > color_map; HashMap<StringName, HashMap<StringName, int> > constant_map; + PoolVector<String> _get_icon_list(const String &p_type) const; + PoolVector<String> _get_stylebox_list(const String &p_type) const; + PoolVector<String> _get_stylebox_types(void) const; + PoolVector<String> _get_font_list(const String &p_type) const; + PoolVector<String> _get_color_list(const String &p_type) const; + PoolVector<String> _get_constant_list(const String &p_type) const; + PoolVector<String> _get_type_list(const String &p_type) const; + protected: bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; @@ -65,70 +73,6 @@ protected: Ref<Font> default_theme_font; - PoolVector<String> _get_icon_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_icon_list(p_type, &il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_stylebox_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_stylebox_list(p_type, &il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_stylebox_types(void) const { - PoolVector<String> ilret; - List<StringName> il; - get_stylebox_types(&il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_font_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_font_list(p_type, &il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_color_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_color_list(p_type, &il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_constant_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_constant_list(p_type, &il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - PoolVector<String> _get_type_list(const String &p_type) const { - PoolVector<String> ilret; - List<StringName> il; - get_type_list(&il); - for (List<StringName>::Element *E = il.front(); E; E = E->next()) { - ilret.push_back(E->get()); - } - return ilret; - } - static void _bind_methods(); public: diff --git a/scene/resources/video_stream.h b/scene/resources/video_stream.h index eb3bf6770f..81c7b062cc 100644 --- a/scene/resources/video_stream.h +++ b/scene/resources/video_stream.h @@ -63,7 +63,7 @@ public: //virtual int mix(int16_t* p_buffer,int p_frames)=0; - virtual Ref<Texture> get_texture() = 0; + virtual Ref<Texture> get_texture() const = 0; virtual void update(float p_delta) = 0; virtual void set_mix_callback(AudioMixCallback p_callback, void *p_userdata) = 0; diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp index f5ea6adc85..9f99732714 100644 --- a/scene/resources/visual_shader.cpp +++ b/scene/resources/visual_shader.cpp @@ -103,6 +103,10 @@ String VisualShaderNode::get_warning(Shader::Mode p_mode, VisualShader::Type p_t return String(); } +String VisualShaderNode::get_input_port_default_hint(int p_port) const { + return ""; +} + void VisualShaderNode::_bind_methods() { ClassDB::bind_method(D_METHOD("set_output_port_for_preview", "port"), &VisualShaderNode::set_output_port_for_preview); @@ -122,7 +126,8 @@ void VisualShaderNode::_bind_methods() { BIND_ENUM_CONSTANT(PORT_TYPE_VECTOR); BIND_ENUM_CONSTANT(PORT_TYPE_BOOLEAN); BIND_ENUM_CONSTANT(PORT_TYPE_TRANSFORM); - BIND_ENUM_CONSTANT(PORT_TYPE_ICON_COLOR); + BIND_ENUM_CONSTANT(PORT_TYPE_SAMPLER); + BIND_ENUM_CONSTANT(PORT_TYPE_MAX); } VisualShaderNode::VisualShaderNode() { @@ -1058,7 +1063,16 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui String src_var = "n_out" + itos(from_node) + "p" + itos(from_port); - if (in_type == out_type) { + if (in_type == VisualShaderNode::PORT_TYPE_SAMPLER && out_type == VisualShaderNode::PORT_TYPE_SAMPLER) { + VisualShaderNode *ptr = const_cast<VisualShaderNode *>(graph[type].nodes[from_node].node.ptr()); + if (ptr->has_method("get_input_real_name")) { + inputs[i] = ptr->call("get_input_real_name"); + } else if (ptr->has_method("get_uniform_name")) { + inputs[i] = ptr->call("get_uniform_name"); + } else { + inputs[i] = ""; + } + } else if (in_type == out_type) { inputs[i] = src_var; } else if (in_type == VisualShaderNode::PORT_TYPE_SCALAR && out_type == VisualShaderNode::PORT_TYPE_VECTOR) { inputs[i] = "dot(" + src_var + ",vec3(0.333333,0.333333,0.333333))"; @@ -1139,12 +1153,16 @@ Error VisualShader::_write_node(Type type, StringBuilder &global_code, StringBui global_code += vsnode->generate_global(get_mode(), type, node); - if (!r_classes.has(vsnode->get_class_name())) { + String class_name = vsnode->get_class_name(); + if (class_name == "VisualShaderNodeCustom") { + class_name = vsnode->get_script_instance()->get_script()->get_language()->get_global_class_name(vsnode->get_script_instance()->get_script()->get_path()); + } + if (!r_classes.has(class_name)) { global_code_per_node += vsnode->generate_global_per_node(get_mode(), type, node); for (int i = 0; i < TYPE_MAX; i++) { global_code_per_func[Type(i)] += vsnode->generate_global_per_func(get_mode(), Type(i), node); } - r_classes.insert(vsnode->get_class_name()); + r_classes.insert(class_name); } } @@ -1332,7 +1350,6 @@ void VisualShader::_bind_methods() { ClassDB::bind_method(D_METHOD("get_valid_node_id", "type"), &VisualShader::get_valid_node_id); ClassDB::bind_method(D_METHOD("remove_node", "type", "id"), &VisualShader::remove_node); - ClassDB::bind_method(D_METHOD("rebuild"), &VisualShader::rebuild); ClassDB::bind_method(D_METHOD("is_node_connection", "type", "from_node", "from_port", "to_node", "to_port"), &VisualShader::is_node_connection); ClassDB::bind_method(D_METHOD("can_connect_nodes", "type", "from_node", "from_port", "to_node", "to_port"), &VisualShader::is_node_connection); @@ -1426,6 +1443,8 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = { { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "viewport_size", "vec3(VIEWPORT_SIZE, 0.0)" }, { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_BOOLEAN, "output_is_srgb", "OUTPUT_IS_SRGB" }, { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_BOOLEAN, "front_facing", "FRONT_FACING" }, + { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "screen_texture", "SCREEN_TEXTURE" }, + { Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "depth_texture", "DEPTH_TEXTURE" }, // Spatial, Light { Shader::MODE_SPATIAL, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "fragcoord", "FRAGCOORD.xyz" }, @@ -1472,6 +1491,9 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = { { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "point_coord", "vec3(POINT_COORD,0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SCALAR, "light_pass", "float(AT_LIGHT_PASS ? 1.0 : 0.0)" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "texture", "TEXTURE" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "normal_texture", "NORMAL_TEXTURE" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_SAMPLER, "screen_texture", "SCREEN_TEXTURE" }, // Canvas Item, Light { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "fragcoord", "FRAGCOORD.xyz" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "uv", "vec3(UV,0.0)" }, @@ -1488,6 +1510,7 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = { { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "texture_pixel_size", "vec3(TEXTURE_PIXEL_SIZE, 1.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_VECTOR, "point_coord", "vec3(POINT_COORD,0.0)" }, { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SCALAR, "time", "TIME" }, + { Shader::MODE_CANVAS_ITEM, VisualShader::TYPE_LIGHT, VisualShaderNode::PORT_TYPE_SAMPLER, "texture", "TEXTURE" }, // Particles, Vertex { Shader::MODE_PARTICLES, VisualShader::TYPE_VERTEX, VisualShaderNode::PORT_TYPE_VECTOR, "color", "COLOR.rgb" }, @@ -1583,11 +1606,15 @@ String VisualShaderNodeInput::get_output_port_name(int p_port) const { } String VisualShaderNodeInput::get_caption() const { - return TTR("Input"); + return "Input"; } String VisualShaderNodeInput::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { + if (get_output_port_type(0) == PORT_TYPE_SAMPLER) { + return ""; + } + if (p_for_preview) { int idx = 0; @@ -1656,6 +1683,20 @@ String VisualShaderNodeInput::get_input_name() const { return input_name; } +String VisualShaderNodeInput::get_input_real_name() const { + + int idx = 0; + + while (ports[idx].mode != Shader::MODE_MAX) { + if (ports[idx].mode == shader_mode && ports[idx].shader_type == shader_type && ports[idx].name == input_name) { + return String(ports[idx].string); + } + idx++; + } + + return ""; +} + VisualShaderNodeInput::PortType VisualShaderNodeInput::get_input_type_by_name(String p_name) const { int idx = 0; @@ -1752,6 +1793,7 @@ void VisualShaderNodeInput::_bind_methods() { ClassDB::bind_method(D_METHOD("set_input_name", "name"), &VisualShaderNodeInput::set_input_name); ClassDB::bind_method(D_METHOD("get_input_name"), &VisualShaderNodeInput::get_input_name); + ClassDB::bind_method(D_METHOD("get_input_real_name"), &VisualShaderNodeInput::get_input_real_name); ADD_PROPERTY(PropertyInfo(Variant::STRING, "input_name", PROPERTY_HINT_ENUM, ""), "set_input_name", "get_input_name"); ADD_SIGNAL(MethodInfo("input_type_changed")); @@ -1905,7 +1947,7 @@ bool VisualShaderNodeOutput::is_port_separator(int p_index) const { } String VisualShaderNodeOutput::get_caption() const { - return TTR("Output"); + return "Output"; } String VisualShaderNodeOutput::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { @@ -2207,7 +2249,7 @@ void VisualShaderNodeGroupBase::clear_output_ports() { void VisualShaderNodeGroupBase::set_input_port_type(int p_id, int p_type) { ERR_FAIL_COND(!has_input_port(p_id)); - ERR_FAIL_COND(p_type < 0 || p_type > PORT_TYPE_TRANSFORM); + ERR_FAIL_COND(p_type < 0 || p_type >= PORT_TYPE_MAX); if (input_ports[p_id].type == p_type) return; @@ -2273,7 +2315,7 @@ String VisualShaderNodeGroupBase::get_input_port_name(int p_id) const { void VisualShaderNodeGroupBase::set_output_port_type(int p_id, int p_type) { ERR_FAIL_COND(!has_output_port(p_id)); - ERR_FAIL_COND(p_type < 0 || p_type > PORT_TYPE_TRANSFORM); + ERR_FAIL_COND(p_type < 0 || p_type >= PORT_TYPE_MAX); if (output_ports[p_id].type == p_type) return; @@ -2410,10 +2452,10 @@ void VisualShaderNodeGroupBase::_bind_methods() { ClassDB::bind_method(D_METHOD("has_output_port", "id"), &VisualShaderNodeGroupBase::has_output_port); ClassDB::bind_method(D_METHOD("clear_output_ports"), &VisualShaderNodeGroupBase::clear_output_ports); - ClassDB::bind_method(D_METHOD("set_input_port_name"), &VisualShaderNodeGroupBase::set_input_port_name); - ClassDB::bind_method(D_METHOD("set_input_port_type"), &VisualShaderNodeGroupBase::set_input_port_type); - ClassDB::bind_method(D_METHOD("set_output_port_name"), &VisualShaderNodeGroupBase::set_output_port_name); - ClassDB::bind_method(D_METHOD("set_output_port_type"), &VisualShaderNodeGroupBase::set_output_port_type); + ClassDB::bind_method(D_METHOD("set_input_port_name", "id", "name"), &VisualShaderNodeGroupBase::set_input_port_name); + ClassDB::bind_method(D_METHOD("set_input_port_type", "id", "type"), &VisualShaderNodeGroupBase::set_input_port_type); + ClassDB::bind_method(D_METHOD("set_output_port_name", "id", "name"), &VisualShaderNodeGroupBase::set_output_port_name); + ClassDB::bind_method(D_METHOD("set_output_port_type", "id", "type"), &VisualShaderNodeGroupBase::set_output_port_type); ClassDB::bind_method(D_METHOD("get_free_input_port_id"), &VisualShaderNodeGroupBase::get_free_input_port_id); ClassDB::bind_method(D_METHOD("get_free_output_port_id"), &VisualShaderNodeGroupBase::get_free_output_port_id); diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h index 45beb8e6ca..09222c8d81 100644 --- a/scene/resources/visual_shader.h +++ b/scene/resources/visual_shader.h @@ -184,7 +184,8 @@ public: PORT_TYPE_VECTOR, PORT_TYPE_BOOLEAN, PORT_TYPE_TRANSFORM, - PORT_TYPE_ICON_COLOR // just a hint for node tree icons, do not use it as actual port type ! + PORT_TYPE_SAMPLER, + PORT_TYPE_MAX, }; virtual String get_caption() const = 0; @@ -200,6 +201,8 @@ public: virtual PortType get_output_port_type(int p_port) const = 0; virtual String get_output_port_name(int p_port) const = 0; + virtual String get_input_port_default_hint(int p_port) const; + void set_output_port_for_preview(int p_index); int get_output_port_for_preview() const; @@ -296,6 +299,7 @@ public: void set_input_name(String p_name); String get_input_name() const; + String get_input_real_name() const; int get_input_index_count() const; PortType get_input_index_type(int p_index) const; @@ -350,6 +354,7 @@ public: class VisualShaderNodeUniform : public VisualShaderNode { GDCLASS(VisualShaderNodeUniform, VisualShaderNode); +private: String uniform_name; protected: diff --git a/scene/resources/visual_shader_nodes.cpp b/scene/resources/visual_shader_nodes.cpp index f5c599b67e..a94fdd9d7b 100644 --- a/scene/resources/visual_shader_nodes.cpp +++ b/scene/resources/visual_shader_nodes.cpp @@ -29,6 +29,7 @@ /*************************************************************************/ #include "visual_shader_nodes.h" + ////////////// Scalar String VisualShaderNodeScalarConstant::get_caption() const { @@ -38,9 +39,11 @@ String VisualShaderNodeScalarConstant::get_caption() const { int VisualShaderNodeScalarConstant::get_input_port_count() const { return 0; } + VisualShaderNodeScalarConstant::PortType VisualShaderNodeScalarConstant::get_input_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarConstant::get_input_port_name(int p_port) const { return String(); } @@ -48,9 +51,11 @@ String VisualShaderNodeScalarConstant::get_input_port_name(int p_port) const { int VisualShaderNodeScalarConstant::get_output_port_count() const { return 1; } + VisualShaderNodeScalarConstant::PortType VisualShaderNodeScalarConstant::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarConstant::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -158,9 +163,11 @@ String VisualShaderNodeColorConstant::get_caption() const { int VisualShaderNodeColorConstant::get_input_port_count() const { return 0; } + VisualShaderNodeColorConstant::PortType VisualShaderNodeColorConstant::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeColorConstant::get_input_port_name(int p_port) const { return String(); } @@ -168,9 +175,11 @@ String VisualShaderNodeColorConstant::get_input_port_name(int p_port) const { int VisualShaderNodeColorConstant::get_output_port_count() const { return 2; } + VisualShaderNodeColorConstant::PortType VisualShaderNodeColorConstant::get_output_port_type(int p_port) const { return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; } + String VisualShaderNodeColorConstant::get_output_port_name(int p_port) const { return p_port == 0 ? "" : "alpha"; //no output port means the editor will be used as port } @@ -222,9 +231,11 @@ String VisualShaderNodeVec3Constant::get_caption() const { int VisualShaderNodeVec3Constant::get_input_port_count() const { return 0; } + VisualShaderNodeVec3Constant::PortType VisualShaderNodeVec3Constant::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVec3Constant::get_input_port_name(int p_port) const { return String(); } @@ -232,9 +243,11 @@ String VisualShaderNodeVec3Constant::get_input_port_name(int p_port) const { int VisualShaderNodeVec3Constant::get_output_port_count() const { return 1; } + VisualShaderNodeVec3Constant::PortType VisualShaderNodeVec3Constant::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVec3Constant::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -280,9 +293,11 @@ String VisualShaderNodeTransformConstant::get_caption() const { int VisualShaderNodeTransformConstant::get_input_port_count() const { return 0; } + VisualShaderNodeTransformConstant::PortType VisualShaderNodeTransformConstant::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformConstant::get_input_port_name(int p_port) const { return String(); } @@ -290,9 +305,11 @@ String VisualShaderNodeTransformConstant::get_input_port_name(int p_port) const int VisualShaderNodeTransformConstant::get_output_port_count() const { return 1; } + VisualShaderNodeTransformConstant::PortType VisualShaderNodeTransformConstant::get_output_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformConstant::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -344,29 +361,60 @@ String VisualShaderNodeTexture::get_caption() const { } int VisualShaderNodeTexture::get_input_port_count() const { - return 2; + return 3; } + VisualShaderNodeTexture::PortType VisualShaderNodeTexture::get_input_port_type(int p_port) const { - return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; + + switch (p_port) { + case 0: + return PORT_TYPE_VECTOR; + case 1: + return PORT_TYPE_SCALAR; + case 2: + return PORT_TYPE_SAMPLER; + default: + return PORT_TYPE_SCALAR; + } } + String VisualShaderNodeTexture::get_input_port_name(int p_port) const { - return p_port == 0 ? "uv" : "lod"; + + switch (p_port) { + case 0: + return "uv"; + case 1: + return "lod"; + case 2: + return "sampler2D"; + default: + return ""; + } } int VisualShaderNodeTexture::get_output_port_count() const { return 2; } + VisualShaderNodeTexture::PortType VisualShaderNodeTexture::get_output_port_type(int p_port) const { if (p_port == 0 && source == SOURCE_DEPTH) return PORT_TYPE_SCALAR; return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; } + String VisualShaderNodeTexture::get_output_port_name(int p_port) const { if (p_port == 0 && source == SOURCE_DEPTH) return "depth"; return p_port == 0 ? "rgb" : "alpha"; } +String VisualShaderNodeTexture::get_input_port_default_hint(int p_port) const { + if (p_port == 0) { + return "UV.xy"; + } + return ""; +} + static String make_unique_id(VisualShader::Type p_type, int p_id, const String &p_name) { static const char *typepf[VisualShader::TYPE_MAX] = { "vtx", "frg", "lgt" }; @@ -403,9 +451,13 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader: if (source == SOURCE_TEXTURE) { String id = make_unique_id(p_type, p_id, "tex"); String code; - if (p_input_vars[0] == String()) { //none bound, do nothing + if (p_input_vars[0] == String()) { // Use UV by default. - code += "\tvec4 " + id + "_read = vec4(0.0);\n"; + if (p_input_vars[1] == String()) { + code += "\tvec4 " + id + "_read = texture( " + id + " , UV.xy );\n"; + } else { + code += "\tvec4 " + id + "_read = textureLod( " + id + " , UV.xy , " + p_input_vars[1] + " );\n"; + } } else if (p_input_vars[1] == String()) { //no lod @@ -419,16 +471,50 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader: return code; } + if (source == SOURCE_PORT) { + String id = p_input_vars[2]; + + String code; + code += "\t{\n"; + if (id == String()) { + code += "\t\tvec4 " + id + "_tex_read = vec4(0.0);\n"; + } else { + if (p_input_vars[0] == String()) { // Use UV by default. + + if (p_input_vars[1] == String()) { + code += "\t\tvec4 " + id + "_tex_read = texture( " + id + " , UV.xy );\n"; + } else { + code += "\t\tvec4 " + id + "_tex_read = textureLod( " + id + " , UV.xy , " + p_input_vars[1] + " );\n"; + } + + } else if (p_input_vars[1] == String()) { + //no lod + code += "\t\tvec4 " + id + "_tex_read = texture( " + id + " , " + p_input_vars[0] + ".xy );\n"; + } else { + code += "\t\tvec4 " + id + "_tex_read = textureLod( " + id + " , " + p_input_vars[0] + ".xy , " + p_input_vars[1] + " );\n"; + } + + code += "\t\t" + p_output_vars[0] + " = " + id + "_tex_read.rgb;\n"; + code += "\t\t" + p_output_vars[1] + " = " + id + "_tex_read.a;\n"; + } + code += "\t}\n"; + return code; + } + if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) { String code = "\t{\n"; - if (p_input_vars[0] == String() || p_for_preview) { //none bound, do nothing + if (p_input_vars[0] == String() || p_for_preview) { // Use UV by default. - code += "\t\tvec4 _tex_read = vec4(0.0);\n"; + if (p_input_vars[1] == String()) { + code += "\t\tvec4 _tex_read = textureLod( SCREEN_TEXTURE , UV.xy , 0.0 );\n"; + } else { + code += "\t\tvec4 _tex_read = textureLod( SCREEN_TEXTURE , UV.xy , " + p_input_vars[1] + ");\n"; + } } else if (p_input_vars[1] == String()) { //no lod - code += "\t\tvec4 _tex_read = textureLod( SCREEN_TEXTURE , " + p_input_vars[0] + ".xy, 0.0 );\n"; + code += "\t\tvec4 _tex_read = textureLod( SCREEN_TEXTURE , " + p_input_vars[0] + ".xy , 0.0 );\n"; } else { code += "\t\tvec4 _tex_read = textureLod( SCREEN_TEXTURE , " + p_input_vars[0] + ".xy , " + p_input_vars[1] + " );\n"; } @@ -442,9 +528,13 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader: if (source == SOURCE_2D_TEXTURE && p_mode == Shader::MODE_CANVAS_ITEM && p_type == VisualShader::TYPE_FRAGMENT) { String code = "\t{\n"; - if (p_input_vars[0] == String()) { //none bound, do nothing + if (p_input_vars[0] == String()) { // Use UV by default. - code += "\t\tvec4 _tex_read = vec4(0.0);\n"; + if (p_input_vars[1] == String()) { + code += "\t\tvec4 _tex_read = texture( TEXTURE , UV.xy );\n"; + } else { + code += "\t\tvec4 _tex_read = textureLod( TEXTURE , UV.xy , " + p_input_vars[1] + " );\n"; + } } else if (p_input_vars[1] == String()) { //no lod @@ -462,9 +552,13 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader: if (source == SOURCE_2D_NORMAL && p_mode == Shader::MODE_CANVAS_ITEM && p_type == VisualShader::TYPE_FRAGMENT) { String code = "\t{\n"; - if (p_input_vars[0] == String()) { //none bound, do nothing + if (p_input_vars[0] == String()) { // Use UV by default. - code += "\t\tvec4 _tex_read = vec4(0.0);\n"; + if (p_input_vars[1] == String()) { + code += "\t\tvec4 _tex_read = texture( NORMAL_TEXTURE , UV.xy );\n"; + } else { + code += "\t\tvec4 _tex_read = textureLod( NORMAL_TEXTURE , UV.xy , " + p_input_vars[1] + " );\n"; + } } else if (p_input_vars[1] == String()) { //no lod @@ -492,9 +586,13 @@ String VisualShaderNodeTexture::generate_code(Shader::Mode p_mode, VisualShader: if (source == SOURCE_DEPTH && p_mode == Shader::MODE_SPATIAL && p_type == VisualShader::TYPE_FRAGMENT) { String code = "\t{\n"; - if (p_input_vars[0] == String()) { //none bound, do nothing + if (p_input_vars[0] == String()) { // Use UV by default. - code += "\t\tfloat _depth = 0.0;\n"; + if (p_input_vars[1] == String()) { + code += "\t\tfloat _depth = texture( DEPTH_TEXTURE , UV.xy ).r;\n"; + } else { + code += "\t\tfloat _depth = textureLod( DEPTH_TEXTURE , UV.xy , " + p_input_vars[1] + " ).r;\n"; + } } else if (p_input_vars[1] == String()) { //no lod @@ -567,6 +665,10 @@ String VisualShaderNodeTexture::get_warning(Shader::Mode p_mode, VisualShader::T return String(); // all good } + if (source == SOURCE_PORT) { + return String(); // all good + } + if (source == SOURCE_SCREEN && (p_mode == Shader::MODE_SPATIAL || p_mode == Shader::MODE_CANVAS_ITEM) && p_type == VisualShader::TYPE_FRAGMENT) { return String(); // all good @@ -604,7 +706,7 @@ void VisualShaderNodeTexture::_bind_methods() { ClassDB::bind_method(D_METHOD("set_texture_type", "value"), &VisualShaderNodeTexture::set_texture_type); ClassDB::bind_method(D_METHOD("get_texture_type"), &VisualShaderNodeTexture::get_texture_type); - ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,Screen,Texture2D,NormalMap2D,Depth"), "set_source", "get_source"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,Screen,Texture2D,NormalMap2D,Depth,SamplerPort"), "set_source", "get_source"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture"); ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_type", PROPERTY_HINT_ENUM, "Data,Color,Normalmap"), "set_texture_type", "get_texture_type"); @@ -630,21 +732,43 @@ String VisualShaderNodeCubeMap::get_caption() const { } int VisualShaderNodeCubeMap::get_input_port_count() const { - return 2; + return 3; } + VisualShaderNodeCubeMap::PortType VisualShaderNodeCubeMap::get_input_port_type(int p_port) const { - return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; + switch (p_port) { + case 0: + return PORT_TYPE_VECTOR; + case 1: + return PORT_TYPE_SCALAR; + case 2: + return PORT_TYPE_SAMPLER; + default: + return PORT_TYPE_SCALAR; + } } + String VisualShaderNodeCubeMap::get_input_port_name(int p_port) const { - return p_port == 0 ? "uv" : "lod"; + switch (p_port) { + case 0: + return "uv"; + case 1: + return "lod"; + case 2: + return "samplerCube"; + default: + return ""; + } } int VisualShaderNodeCubeMap::get_output_port_count() const { return 2; } + VisualShaderNodeCubeMap::PortType VisualShaderNodeCubeMap::get_output_port_type(int p_port) const { return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; } + String VisualShaderNodeCubeMap::get_output_port_name(int p_port) const { return p_port == 0 ? "rgb" : "alpha"; } @@ -660,22 +784,44 @@ Vector<VisualShader::DefaultTextureParam> VisualShaderNodeCubeMap::get_default_t String VisualShaderNodeCubeMap::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { - String u = "uniform sampler2DCube " + make_unique_id(p_type, p_id, "cube"); - switch (texture_type) { - case TYPE_DATA: break; - case TYPE_COLOR: u += " : hint_albedo"; break; - case TYPE_NORMALMAP: u += " : hint_normal"; break; + if (source == SOURCE_TEXTURE) { + String u = "uniform samplerCube " + make_unique_id(p_type, p_id, "cube"); + switch (texture_type) { + case TYPE_DATA: break; + case TYPE_COLOR: u += " : hint_albedo"; break; + case TYPE_NORMALMAP: u += " : hint_normal"; break; + } + return u + ";"; } - return u + ";"; + return String(); } String VisualShaderNodeCubeMap::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { - String id = make_unique_id(p_type, p_id, "cube"); String code; - if (p_input_vars[0] == String()) { //none bound, do nothing + String id; + if (source == SOURCE_TEXTURE) { + id = make_unique_id(p_type, p_id, "cube"); + } else if (source == SOURCE_PORT) { + id = p_input_vars[2]; + } else { + return String(); + } + if (id == String()) { code += "\tvec4 " + id + "_read = vec4(0.0);\n"; + code += "\t" + p_output_vars[0] + " = " + id + "_read.rgb;\n"; + code += "\t" + p_output_vars[1] + " = " + id + "_read.a;\n"; + return code; + } + + if (p_input_vars[0] == String()) { // Use UV by default. + + if (p_input_vars[1] == String()) { + code += "\tvec4 " + id + "_read = texture( " + id + " , vec3( UV, 0.0 ) );\n"; + } else { + code += "\tvec4 " + id + "_read = textureLod( " + id + " , vec3( UV, 0.0 )" + " , " + p_input_vars[1] + " );\n"; + } } else if (p_input_vars[1] == String()) { //no lod @@ -683,12 +829,29 @@ String VisualShaderNodeCubeMap::generate_code(Shader::Mode p_mode, VisualShader: } else { code += "\tvec4 " + id + "_read = textureLod( " + id + " , " + p_input_vars[0] + " , " + p_input_vars[1] + " );\n"; } - code += "\t" + p_output_vars[0] + " = " + id + "_read.rgb;\n"; code += "\t" + p_output_vars[1] + " = " + id + "_read.a;\n"; + return code; } +String VisualShaderNodeCubeMap::get_input_port_default_hint(int p_port) const { + if (p_port == 0) { + return "vec3(UV, 0.0)"; + } + return ""; +} + +void VisualShaderNodeCubeMap::set_source(Source p_source) { + source = p_source; + emit_changed(); + emit_signal("editor_refresh_request"); +} + +VisualShaderNodeCubeMap::Source VisualShaderNodeCubeMap::get_source() const { + return source; +} + void VisualShaderNodeCubeMap::set_cube_map(Ref<CubeMap> p_value) { cube_map = p_value; @@ -711,22 +874,32 @@ VisualShaderNodeCubeMap::TextureType VisualShaderNodeCubeMap::get_texture_type() Vector<StringName> VisualShaderNodeCubeMap::get_editable_properties() const { Vector<StringName> props; - props.push_back("cube_map"); - props.push_back("texture_type"); + props.push_back("source"); + if (source == SOURCE_TEXTURE) { + props.push_back("cube_map"); + props.push_back("texture_type"); + } return props; } void VisualShaderNodeCubeMap::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_source", "value"), &VisualShaderNodeCubeMap::set_source); + ClassDB::bind_method(D_METHOD("get_source"), &VisualShaderNodeCubeMap::get_source); + ClassDB::bind_method(D_METHOD("set_cube_map", "value"), &VisualShaderNodeCubeMap::set_cube_map); ClassDB::bind_method(D_METHOD("get_cube_map"), &VisualShaderNodeCubeMap::get_cube_map); ClassDB::bind_method(D_METHOD("set_texture_type", "value"), &VisualShaderNodeCubeMap::set_texture_type); ClassDB::bind_method(D_METHOD("get_texture_type"), &VisualShaderNodeCubeMap::get_texture_type); + ADD_PROPERTY(PropertyInfo(Variant::INT, "source", PROPERTY_HINT_ENUM, "Texture,SamplerPort"), "set_source", "get_source"); ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "cube_map", PROPERTY_HINT_RESOURCE_TYPE, "CubeMap"), "set_cube_map", "get_cube_map"); ADD_PROPERTY(PropertyInfo(Variant::INT, "texture_type", PROPERTY_HINT_ENUM, "Data,Color,Normalmap"), "set_texture_type", "get_texture_type"); + BIND_ENUM_CONSTANT(SOURCE_TEXTURE); + BIND_ENUM_CONSTANT(SOURCE_PORT); + BIND_ENUM_CONSTANT(TYPE_DATA); BIND_ENUM_CONSTANT(TYPE_COLOR); BIND_ENUM_CONSTANT(TYPE_NORMALMAP); @@ -734,7 +907,9 @@ void VisualShaderNodeCubeMap::_bind_methods() { VisualShaderNodeCubeMap::VisualShaderNodeCubeMap() { texture_type = TYPE_DATA; + source = SOURCE_TEXTURE; } + ////////////// Scalar Op String VisualShaderNodeScalarOp::get_caption() const { @@ -744,9 +919,11 @@ String VisualShaderNodeScalarOp::get_caption() const { int VisualShaderNodeScalarOp::get_input_port_count() const { return 2; } + VisualShaderNodeScalarOp::PortType VisualShaderNodeScalarOp::get_input_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarOp::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -754,9 +931,11 @@ String VisualShaderNodeScalarOp::get_input_port_name(int p_port) const { int VisualShaderNodeScalarOp::get_output_port_count() const { return 1; } + VisualShaderNodeScalarOp::PortType VisualShaderNodeScalarOp::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarOp::get_output_port_name(int p_port) const { return "op"; //no output port means the editor will be used as port } @@ -832,9 +1011,11 @@ String VisualShaderNodeVectorOp::get_caption() const { int VisualShaderNodeVectorOp::get_input_port_count() const { return 2; } + VisualShaderNodeVectorOp::PortType VisualShaderNodeVectorOp::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorOp::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -842,9 +1023,11 @@ String VisualShaderNodeVectorOp::get_input_port_name(int p_port) const { int VisualShaderNodeVectorOp::get_output_port_count() const { return 1; } + VisualShaderNodeVectorOp::PortType VisualShaderNodeVectorOp::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorOp::get_output_port_name(int p_port) const { return "op"; //no output port means the editor will be used as port } @@ -924,9 +1107,11 @@ String VisualShaderNodeColorOp::get_caption() const { int VisualShaderNodeColorOp::get_input_port_count() const { return 2; } + VisualShaderNodeColorOp::PortType VisualShaderNodeColorOp::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeColorOp::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -934,9 +1119,11 @@ String VisualShaderNodeColorOp::get_input_port_name(int p_port) const { int VisualShaderNodeColorOp::get_output_port_count() const { return 1; } + VisualShaderNodeColorOp::PortType VisualShaderNodeColorOp::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeColorOp::get_output_port_name(int p_port) const { return "op"; //no output port means the editor will be used as port } @@ -1072,9 +1259,11 @@ String VisualShaderNodeTransformMult::get_caption() const { int VisualShaderNodeTransformMult::get_input_port_count() const { return 2; } + VisualShaderNodeTransformMult::PortType VisualShaderNodeTransformMult::get_input_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformMult::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -1082,9 +1271,11 @@ String VisualShaderNodeTransformMult::get_input_port_name(int p_port) const { int VisualShaderNodeTransformMult::get_output_port_count() const { return 1; } + VisualShaderNodeTransformMult::PortType VisualShaderNodeTransformMult::get_output_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformMult::get_output_port_name(int p_port) const { return "mult"; //no output port means the editor will be used as port } @@ -1147,9 +1338,11 @@ String VisualShaderNodeTransformVecMult::get_caption() const { int VisualShaderNodeTransformVecMult::get_input_port_count() const { return 2; } + VisualShaderNodeTransformVecMult::PortType VisualShaderNodeTransformVecMult::get_input_port_type(int p_port) const { return p_port == 0 ? PORT_TYPE_TRANSFORM : PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformVecMult::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -1157,9 +1350,11 @@ String VisualShaderNodeTransformVecMult::get_input_port_name(int p_port) const { int VisualShaderNodeTransformVecMult::get_output_port_count() const { return 1; } + VisualShaderNodeTransformVecMult::PortType VisualShaderNodeTransformVecMult::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformVecMult::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -1221,9 +1416,11 @@ String VisualShaderNodeScalarFunc::get_caption() const { int VisualShaderNodeScalarFunc::get_input_port_count() const { return 1; } + VisualShaderNodeScalarFunc::PortType VisualShaderNodeScalarFunc::get_input_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarFunc::get_input_port_name(int p_port) const { return ""; } @@ -1231,9 +1428,11 @@ String VisualShaderNodeScalarFunc::get_input_port_name(int p_port) const { int VisualShaderNodeScalarFunc::get_output_port_count() const { return 1; } + VisualShaderNodeScalarFunc::PortType VisualShaderNodeScalarFunc::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarFunc::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -1350,9 +1549,11 @@ String VisualShaderNodeVectorFunc::get_caption() const { int VisualShaderNodeVectorFunc::get_input_port_count() const { return 1; } + VisualShaderNodeVectorFunc::PortType VisualShaderNodeVectorFunc::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorFunc::get_input_port_name(int p_port) const { return ""; } @@ -1360,9 +1561,11 @@ String VisualShaderNodeVectorFunc::get_input_port_name(int p_port) const { int VisualShaderNodeVectorFunc::get_output_port_count() const { return 1; } + VisualShaderNodeVectorFunc::PortType VisualShaderNodeVectorFunc::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorFunc::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -1675,9 +1878,11 @@ String VisualShaderNodeDotProduct::get_caption() const { int VisualShaderNodeDotProduct::get_input_port_count() const { return 2; } + VisualShaderNodeDotProduct::PortType VisualShaderNodeDotProduct::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeDotProduct::get_input_port_name(int p_port) const { return p_port == 0 ? "a" : "b"; } @@ -1685,9 +1890,11 @@ String VisualShaderNodeDotProduct::get_input_port_name(int p_port) const { int VisualShaderNodeDotProduct::get_output_port_count() const { return 1; } + VisualShaderNodeDotProduct::PortType VisualShaderNodeDotProduct::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeDotProduct::get_output_port_name(int p_port) const { return "dot"; } @@ -1710,9 +1917,11 @@ String VisualShaderNodeVectorLen::get_caption() const { int VisualShaderNodeVectorLen::get_input_port_count() const { return 1; } + VisualShaderNodeVectorLen::PortType VisualShaderNodeVectorLen::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorLen::get_input_port_name(int p_port) const { return ""; } @@ -1720,9 +1929,11 @@ String VisualShaderNodeVectorLen::get_input_port_name(int p_port) const { int VisualShaderNodeVectorLen::get_output_port_count() const { return 1; } + VisualShaderNodeVectorLen::PortType VisualShaderNodeVectorLen::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeVectorLen::get_output_port_name(int p_port) const { return "length"; } @@ -1745,7 +1956,7 @@ int VisualShaderNodeDeterminant::get_input_port_count() const { return 1; } -VisualShaderNodeScalarClamp::PortType VisualShaderNodeDeterminant::get_input_port_type(int p_port) const { +VisualShaderNodeDeterminant::PortType VisualShaderNodeDeterminant::get_input_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } @@ -1872,7 +2083,7 @@ int VisualShaderNodeVectorDerivativeFunc::get_output_port_count() const { return 1; } -VisualShaderNodeScalarDerivativeFunc::PortType VisualShaderNodeVectorDerivativeFunc::get_output_port_type(int p_port) const { +VisualShaderNodeVectorDerivativeFunc::PortType VisualShaderNodeVectorDerivativeFunc::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } @@ -2078,7 +2289,7 @@ int VisualShaderNodeOuterProduct::get_input_port_count() const { return 2; } -VisualShaderNodeFaceForward::PortType VisualShaderNodeOuterProduct::get_input_port_type(int p_port) const { +VisualShaderNodeOuterProduct::PortType VisualShaderNodeOuterProduct::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } @@ -2143,7 +2354,7 @@ int VisualShaderNodeVectorScalarStep::get_output_port_count() const { return 1; } -VisualShaderNodeVectorClamp::PortType VisualShaderNodeVectorScalarStep::get_output_port_type(int p_port) const { +VisualShaderNodeVectorScalarStep::PortType VisualShaderNodeVectorScalarStep::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } @@ -2234,7 +2445,7 @@ int VisualShaderNodeVectorSmoothStep::get_output_port_count() const { return 1; } -VisualShaderNodeVectorClamp::PortType VisualShaderNodeVectorSmoothStep::get_output_port_type(int p_port) const { +VisualShaderNodeVectorSmoothStep::PortType VisualShaderNodeVectorSmoothStep::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } @@ -2285,7 +2496,7 @@ int VisualShaderNodeVectorScalarSmoothStep::get_output_port_count() const { return 1; } -VisualShaderNodeVectorClamp::PortType VisualShaderNodeVectorScalarSmoothStep::get_output_port_type(int p_port) const { +VisualShaderNodeVectorScalarSmoothStep::PortType VisualShaderNodeVectorScalarSmoothStep::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } @@ -2540,6 +2751,7 @@ VisualShaderNodeVectorScalarMix::VisualShaderNodeVectorScalarMix() { } ////////////// Vector Compose + String VisualShaderNodeVectorCompose::get_caption() const { return "VectorCompose"; } @@ -2547,9 +2759,11 @@ String VisualShaderNodeVectorCompose::get_caption() const { int VisualShaderNodeVectorCompose::get_input_port_count() const { return 3; } + VisualShaderNodeVectorCompose::PortType VisualShaderNodeVectorCompose::get_input_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeVectorCompose::get_input_port_name(int p_port) const { if (p_port == 0) { return "x"; @@ -2563,9 +2777,11 @@ String VisualShaderNodeVectorCompose::get_input_port_name(int p_port) const { int VisualShaderNodeVectorCompose::get_output_port_count() const { return 1; } + VisualShaderNodeVectorCompose::PortType VisualShaderNodeVectorCompose::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorCompose::get_output_port_name(int p_port) const { return "vec"; } @@ -2590,9 +2806,11 @@ String VisualShaderNodeTransformCompose::get_caption() const { int VisualShaderNodeTransformCompose::get_input_port_count() const { return 4; } + VisualShaderNodeTransformCompose::PortType VisualShaderNodeTransformCompose::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformCompose::get_input_port_name(int p_port) const { if (p_port == 0) { return "x"; @@ -2608,9 +2826,11 @@ String VisualShaderNodeTransformCompose::get_input_port_name(int p_port) const { int VisualShaderNodeTransformCompose::get_output_port_count() const { return 1; } + VisualShaderNodeTransformCompose::PortType VisualShaderNodeTransformCompose::get_output_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformCompose::get_output_port_name(int p_port) const { return "xform"; } @@ -2635,9 +2855,11 @@ String VisualShaderNodeVectorDecompose::get_caption() const { int VisualShaderNodeVectorDecompose::get_input_port_count() const { return 1; } + VisualShaderNodeVectorDecompose::PortType VisualShaderNodeVectorDecompose::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVectorDecompose::get_input_port_name(int p_port) const { return "vec"; } @@ -2645,9 +2867,11 @@ String VisualShaderNodeVectorDecompose::get_input_port_name(int p_port) const { int VisualShaderNodeVectorDecompose::get_output_port_count() const { return 3; } + VisualShaderNodeVectorDecompose::PortType VisualShaderNodeVectorDecompose::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeVectorDecompose::get_output_port_name(int p_port) const { if (p_port == 0) { return "x"; @@ -2679,9 +2903,11 @@ String VisualShaderNodeTransformDecompose::get_caption() const { int VisualShaderNodeTransformDecompose::get_input_port_count() const { return 1; } + VisualShaderNodeTransformDecompose::PortType VisualShaderNodeTransformDecompose::get_input_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformDecompose::get_input_port_name(int p_port) const { return "xform"; } @@ -2689,9 +2915,11 @@ String VisualShaderNodeTransformDecompose::get_input_port_name(int p_port) const int VisualShaderNodeTransformDecompose::get_output_port_count() const { return 4; } + VisualShaderNodeTransformDecompose::PortType VisualShaderNodeTransformDecompose::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformDecompose::get_output_port_name(int p_port) const { if (p_port == 0) { return "x"; @@ -2726,9 +2954,11 @@ String VisualShaderNodeScalarUniform::get_caption() const { int VisualShaderNodeScalarUniform::get_input_port_count() const { return 0; } + VisualShaderNodeScalarUniform::PortType VisualShaderNodeScalarUniform::get_input_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarUniform::get_input_port_name(int p_port) const { return String(); } @@ -2736,9 +2966,11 @@ String VisualShaderNodeScalarUniform::get_input_port_name(int p_port) const { int VisualShaderNodeScalarUniform::get_output_port_count() const { return 1; } + VisualShaderNodeScalarUniform::PortType VisualShaderNodeScalarUniform::get_output_port_type(int p_port) const { return PORT_TYPE_SCALAR; } + String VisualShaderNodeScalarUniform::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } @@ -2746,6 +2978,7 @@ String VisualShaderNodeScalarUniform::get_output_port_name(int p_port) const { String VisualShaderNodeScalarUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { return "uniform float " + get_uniform_name() + ";\n"; } + String VisualShaderNodeScalarUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { return "\t" + p_output_vars[0] + " = " + get_uniform_name() + ";\n"; } @@ -2803,9 +3036,11 @@ String VisualShaderNodeColorUniform::get_caption() const { int VisualShaderNodeColorUniform::get_input_port_count() const { return 0; } + VisualShaderNodeColorUniform::PortType VisualShaderNodeColorUniform::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeColorUniform::get_input_port_name(int p_port) const { return String(); } @@ -2813,9 +3048,11 @@ String VisualShaderNodeColorUniform::get_input_port_name(int p_port) const { int VisualShaderNodeColorUniform::get_output_port_count() const { return 2; } + VisualShaderNodeColorUniform::PortType VisualShaderNodeColorUniform::get_output_port_type(int p_port) const { return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; } + String VisualShaderNodeColorUniform::get_output_port_name(int p_port) const { return p_port == 0 ? "color" : "alpha"; //no output port means the editor will be used as port } @@ -2843,9 +3080,11 @@ String VisualShaderNodeVec3Uniform::get_caption() const { int VisualShaderNodeVec3Uniform::get_input_port_count() const { return 0; } + VisualShaderNodeVec3Uniform::PortType VisualShaderNodeVec3Uniform::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVec3Uniform::get_input_port_name(int p_port) const { return String(); } @@ -2853,12 +3092,15 @@ String VisualShaderNodeVec3Uniform::get_input_port_name(int p_port) const { int VisualShaderNodeVec3Uniform::get_output_port_count() const { return 1; } + VisualShaderNodeVec3Uniform::PortType VisualShaderNodeVec3Uniform::get_output_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeVec3Uniform::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } + String VisualShaderNodeVec3Uniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { return "uniform vec3 " + get_uniform_name() + ";\n"; } @@ -2879,9 +3121,11 @@ String VisualShaderNodeTransformUniform::get_caption() const { int VisualShaderNodeTransformUniform::get_input_port_count() const { return 0; } + VisualShaderNodeTransformUniform::PortType VisualShaderNodeTransformUniform::get_input_port_type(int p_port) const { return PORT_TYPE_VECTOR; } + String VisualShaderNodeTransformUniform::get_input_port_name(int p_port) const { return String(); } @@ -2889,12 +3133,15 @@ String VisualShaderNodeTransformUniform::get_input_port_name(int p_port) const { int VisualShaderNodeTransformUniform::get_output_port_count() const { return 1; } + VisualShaderNodeTransformUniform::PortType VisualShaderNodeTransformUniform::get_output_port_type(int p_port) const { return PORT_TYPE_TRANSFORM; } + String VisualShaderNodeTransformUniform::get_output_port_name(int p_port) const { return ""; //no output port means the editor will be used as port } + String VisualShaderNodeTransformUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { return "uniform mat4 " + get_uniform_name() + ";\n"; } @@ -2915,21 +3162,45 @@ String VisualShaderNodeTextureUniform::get_caption() const { int VisualShaderNodeTextureUniform::get_input_port_count() const { return 2; } + VisualShaderNodeTextureUniform::PortType VisualShaderNodeTextureUniform::get_input_port_type(int p_port) const { return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; } + String VisualShaderNodeTextureUniform::get_input_port_name(int p_port) const { return p_port == 0 ? "uv" : "lod"; } int VisualShaderNodeTextureUniform::get_output_port_count() const { - return 2; + return 3; } + VisualShaderNodeTextureUniform::PortType VisualShaderNodeTextureUniform::get_output_port_type(int p_port) const { - return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; + + switch (p_port) { + case 0: + return PORT_TYPE_VECTOR; + case 1: + return PORT_TYPE_SCALAR; + case 2: + return PORT_TYPE_SAMPLER; + default: + return PORT_TYPE_SCALAR; + } } + String VisualShaderNodeTextureUniform::get_output_port_name(int p_port) const { - return p_port == 0 ? "rgb" : "alpha"; + + switch (p_port) { + case 0: + return "rgb"; + case 1: + return "alpha"; + case 2: + return "sampler2D"; + default: + return ""; + } } String VisualShaderNodeTextureUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { @@ -2959,9 +3230,12 @@ String VisualShaderNodeTextureUniform::generate_code(Shader::Mode p_mode, Visual String id = get_uniform_name(); String code = "\t{\n"; - if (p_input_vars[0] == String()) { //none bound, do nothing - - code += "\t\tvec4 n_tex_read = vec4(0.0);\n"; + if (p_input_vars[0] == String()) { // Use UV by default. + if (p_input_vars[1] == String()) { + code += "\t\tvec4 n_tex_read = texture( " + id + " , UV.xy );\n"; + } else { + code += "\t\tvec4 n_tex_read = textureLod( " + id + " , UV.xy , " + p_input_vars[1] + " );\n"; + } } else if (p_input_vars[1] == String()) { //no lod code += "\t\tvec4 n_tex_read = texture( " + id + " , " + p_input_vars[0] + ".xy );\n"; @@ -2989,6 +3263,7 @@ void VisualShaderNodeTextureUniform::set_color_default(ColorDefault p_default) { color_default = p_default; emit_changed(); } + VisualShaderNodeTextureUniform::ColorDefault VisualShaderNodeTextureUniform::get_color_default() const { return color_default; } @@ -3019,6 +3294,13 @@ void VisualShaderNodeTextureUniform::_bind_methods() { BIND_ENUM_CONSTANT(COLOR_DEFAULT_BLACK); } +String VisualShaderNodeTextureUniform::get_input_port_default_hint(int p_port) const { + if (p_port == 0) { + return "UV.xy"; + } + return ""; +} + VisualShaderNodeTextureUniform::VisualShaderNodeTextureUniform() { texture_type = TYPE_DATA; color_default = COLOR_DEFAULT_WHITE; @@ -3113,6 +3395,15 @@ String VisualShaderNodeTextureUniformTriplanar::generate_code(Shader::Mode p_mod return code; } +String VisualShaderNodeTextureUniformTriplanar::get_input_port_default_hint(int p_port) const { + if (p_port == 0) { + return "default"; + } else if (p_port == 1) { + return "default"; + } + return ""; +} + VisualShaderNodeTextureUniformTriplanar::VisualShaderNodeTextureUniformTriplanar() { } @@ -3122,24 +3413,55 @@ String VisualShaderNodeCubeMapUniform::get_caption() const { return "CubeMapUniform"; } +int VisualShaderNodeCubeMapUniform::get_output_port_count() const { + return 1; +} + +VisualShaderNodeCubeMapUniform::PortType VisualShaderNodeCubeMapUniform::get_output_port_type(int p_port) const { + return PORT_TYPE_SAMPLER; +} + +String VisualShaderNodeCubeMapUniform::get_output_port_name(int p_port) const { + return "samplerCube"; +} + int VisualShaderNodeCubeMapUniform::get_input_port_count() const { - return 2; + return 0; } + VisualShaderNodeCubeMapUniform::PortType VisualShaderNodeCubeMapUniform::get_input_port_type(int p_port) const { - return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; + return PORT_TYPE_SCALAR; } + String VisualShaderNodeCubeMapUniform::get_input_port_name(int p_port) const { - return p_port == 0 ? "normal" : "lod"; + return ""; } -int VisualShaderNodeCubeMapUniform::get_output_port_count() const { - return 2; -} -VisualShaderNodeCubeMapUniform::PortType VisualShaderNodeCubeMapUniform::get_output_port_type(int p_port) const { - return p_port == 0 ? PORT_TYPE_VECTOR : PORT_TYPE_SCALAR; +String VisualShaderNodeCubeMapUniform::get_input_port_default_hint(int p_port) const { + return ""; } -String VisualShaderNodeCubeMapUniform::get_output_port_name(int p_port) const { - return p_port == 0 ? "rgb" : "alpha"; + +String VisualShaderNodeCubeMapUniform::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const { + String code = "uniform samplerCube " + get_uniform_name(); + + switch (texture_type) { + case TYPE_DATA: + if (color_default == COLOR_DEFAULT_BLACK) + code += " : hint_black;\n"; + else + code += ";\n"; + break; + case TYPE_COLOR: + if (color_default == COLOR_DEFAULT_BLACK) + code += " : hint_black_albedo;\n"; + else + code += " : hint_albedo;\n"; + break; + case TYPE_NORMALMAP: code += " : hint_normal;\n"; break; + case TYPE_ANISO: code += " : hint_aniso;\n"; break; + } + + return code; } String VisualShaderNodeCubeMapUniform::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const { diff --git a/scene/resources/visual_shader_nodes.h b/scene/resources/visual_shader_nodes.h index 0c6e060353..339e59bda9 100644 --- a/scene/resources/visual_shader_nodes.h +++ b/scene/resources/visual_shader_nodes.h @@ -199,7 +199,8 @@ public: SOURCE_SCREEN, SOURCE_2D_TEXTURE, SOURCE_2D_NORMAL, - SOURCE_DEPTH + SOURCE_DEPTH, + SOURCE_PORT, }; enum TextureType { @@ -226,6 +227,8 @@ public: virtual PortType get_output_port_type(int p_port) const; virtual String get_output_port_name(int p_port) const; + virtual String get_input_port_default_hint(int p_port) const; + virtual Vector<VisualShader::DefaultTextureParam> get_default_texture_parameters(VisualShader::Type p_type, int p_id) const; virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty @@ -256,6 +259,11 @@ class VisualShaderNodeCubeMap : public VisualShaderNode { Ref<CubeMap> cube_map; public: + enum Source { + SOURCE_TEXTURE, + SOURCE_PORT + }; + enum TextureType { TYPE_DATA, TYPE_COLOR, @@ -263,6 +271,7 @@ public: }; private: + Source source; TextureType texture_type; protected: @@ -274,6 +283,7 @@ public: virtual int get_input_port_count() const; virtual PortType get_input_port_type(int p_port) const; virtual String get_input_port_name(int p_port) const; + virtual String get_input_port_default_hint(int p_port) const; virtual int get_output_port_count() const; virtual PortType get_output_port_type(int p_port) const; @@ -283,6 +293,9 @@ public: virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty + void set_source(Source p_source); + Source get_source() const; + void set_cube_map(Ref<CubeMap> p_value); Ref<CubeMap> get_cube_map() const; @@ -295,6 +308,7 @@ public: }; VARIANT_ENUM_CAST(VisualShaderNodeCubeMap::TextureType) +VARIANT_ENUM_CAST(VisualShaderNodeCubeMap::Source) /////////////////////////////////////// /// OPS @@ -1409,7 +1423,7 @@ public: COLOR_DEFAULT_BLACK }; -private: +protected: TextureType texture_type; ColorDefault color_default; @@ -1422,6 +1436,7 @@ public: virtual int get_input_port_count() const; virtual PortType get_input_port_type(int p_port) const; virtual String get_input_port_name(int p_port) const; + virtual String get_input_port_default_hint(int p_port) const; virtual int get_output_port_count() const; virtual PortType get_output_port_type(int p_port) const; @@ -1456,6 +1471,8 @@ public: virtual PortType get_input_port_type(int p_port) const; virtual String get_input_port_name(int p_port) const; + virtual String get_input_port_default_hint(int p_port) const; + virtual String generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_global_per_func(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty @@ -1465,8 +1482,8 @@ public: /////////////////////////////////////// -class VisualShaderNodeCubeMapUniform : public VisualShaderNode { - GDCLASS(VisualShaderNodeCubeMapUniform, VisualShaderNode); +class VisualShaderNodeCubeMapUniform : public VisualShaderNodeTextureUniform { + GDCLASS(VisualShaderNodeCubeMapUniform, VisualShaderNodeTextureUniform); public: virtual String get_caption() const; @@ -1479,6 +1496,8 @@ public: virtual PortType get_output_port_type(int p_port) const; virtual String get_output_port_name(int p_port) const; + virtual String get_input_port_default_hint(int p_port) const; + virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const; virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const; //if no output is connected, the output var passed will be empty. if no input is connected and input is NIL, the input var passed will be empty VisualShaderNodeCubeMapUniform(); diff --git a/scene/resources/world.cpp b/scene/resources/world.cpp index 0ca5d7eb36..2c22f45f9d 100644 --- a/scene/resources/world.cpp +++ b/scene/resources/world.cpp @@ -332,7 +332,9 @@ World::World() { PhysicsServer::get_singleton()->area_set_param(space, PhysicsServer::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/3d/default_gravity", 9.8)); PhysicsServer::get_singleton()->area_set_param(space, PhysicsServer::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/3d/default_gravity_vector", Vector3(0, -1, 0))); PhysicsServer::get_singleton()->area_set_param(space, PhysicsServer::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF("physics/3d/default_linear_damp", 0.1)); + ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_linear_damp", PropertyInfo(Variant::REAL, "physics/3d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater")); PhysicsServer::get_singleton()->area_set_param(space, PhysicsServer::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/3d/default_angular_damp", 0.1)); + ProjectSettings::get_singleton()->set_custom_property_info("physics/3d/default_angular_damp", PropertyInfo(Variant::REAL, "physics/3d/default_angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater")); #ifdef _3D_DISABLED indexer = NULL; diff --git a/scene/resources/world_2d.cpp b/scene/resources/world_2d.cpp index 13b45f58dc..b5743ad416 100644 --- a/scene/resources/world_2d.cpp +++ b/scene/resources/world_2d.cpp @@ -394,7 +394,9 @@ World2D::World2D() { Physics2DServer::get_singleton()->area_set_param(space, Physics2DServer::AREA_PARAM_GRAVITY, GLOBAL_DEF("physics/2d/default_gravity", 98)); Physics2DServer::get_singleton()->area_set_param(space, Physics2DServer::AREA_PARAM_GRAVITY_VECTOR, GLOBAL_DEF("physics/2d/default_gravity_vector", Vector2(0, 1))); Physics2DServer::get_singleton()->area_set_param(space, Physics2DServer::AREA_PARAM_LINEAR_DAMP, GLOBAL_DEF("physics/2d/default_linear_damp", 0.1)); - Physics2DServer::get_singleton()->area_set_param(space, Physics2DServer::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/2d/default_angular_damp", 1)); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/default_linear_damp", PropertyInfo(Variant::REAL, "physics/2d/default_linear_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater")); + Physics2DServer::get_singleton()->area_set_param(space, Physics2DServer::AREA_PARAM_ANGULAR_DAMP, GLOBAL_DEF("physics/2d/default_angular_damp", 1.0)); + ProjectSettings::get_singleton()->set_custom_property_info("physics/2d/default_angular_damp", PropertyInfo(Variant::REAL, "physics/2d/default_angular_damp", PROPERTY_HINT_RANGE, "-1,100,0.001,or_greater")); indexer = memnew(SpatialIndexer2D); } diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp index 2cf6a67bef..1da0146084 100644 --- a/servers/audio_server.cpp +++ b/servers/audio_server.cpp @@ -1079,6 +1079,7 @@ void AudioServer::finish() { for (int i = 0; i < AudioDriverManager::get_driver_count(); i++) { AudioDriverManager::get_driver(i)->finish(); + AudioDriverManager::get_driver(i)->clear_capture_buffer(); } for (int i = 0; i < buses.size(); i++) { diff --git a/servers/audio_server.h b/servers/audio_server.h index 72bb6faf42..da4b9daf5b 100644 --- a/servers/audio_server.h +++ b/servers/audio_server.h @@ -115,6 +115,8 @@ public: unsigned int get_capture_position() { return capture_position; } unsigned int get_capture_size() { return capture_size; } + void clear_capture_buffer() { capture_buffer.resize(0); } + #ifdef DEBUG_ENABLED uint64_t get_profiling_time() const { return prof_time; } void reset_profiling_time() { prof_time = 0; } diff --git a/servers/camera_server.h b/servers/camera_server.h index 5a62af3d60..c76d046e58 100644 --- a/servers/camera_server.h +++ b/servers/camera_server.h @@ -81,7 +81,7 @@ public: void remove_feed(const Ref<CameraFeed> &p_feed); // get our feeds - Ref<CameraFeed> get_feed(int p_idx); + Ref<CameraFeed> get_feed(int p_index); int get_feed_count(); Array get_feeds(); diff --git a/servers/physics/body_sw.cpp b/servers/physics/body_sw.cpp index a3bb581cb5..ba98e14d2e 100644 --- a/servers/physics/body_sw.cpp +++ b/servers/physics/body_sw.cpp @@ -260,12 +260,14 @@ void BodySW::set_mode(PhysicsServer::BodyMode p_mode) { _inv_mass = mass > 0 ? (1.0 / mass) : 0; _set_static(false); + set_active(true); } break; case PhysicsServer::BODY_MODE_CHARACTER: { _inv_mass = mass > 0 ? (1.0 / mass) : 0; _set_static(false); + set_active(true); angular_velocity = Vector3(); } break; } @@ -794,7 +796,7 @@ BodySW::BodySW() : still_time = 0; continuous_cd = false; - can_sleep = false; + can_sleep = true; fi_callback = NULL; } diff --git a/servers/physics/collision_object_sw.h b/servers/physics/collision_object_sw.h index b9912f0ba2..08708e2f60 100644 --- a/servers/physics/collision_object_sw.h +++ b/servers/physics/collision_object_sw.h @@ -88,7 +88,7 @@ protected: _FORCE_INLINE_ void _set_transform(const Transform &p_transform, bool p_update_shapes = true) { #ifdef DEBUG_ENABLED - ERR_FAIL_COND_MSG(p_transform.origin.length_squared() > MAX_OBJECT_DISTANCE_X2, "Object went too far away (more than " + itos(MAX_OBJECT_DISTANCE) + " units from origin)."); + ERR_FAIL_COND_MSG(p_transform.origin.length_squared() > MAX_OBJECT_DISTANCE_X2, "Object went too far away (more than '" + itos(MAX_OBJECT_DISTANCE) + "' units from origin)."); #endif transform = p_transform; diff --git a/servers/physics_2d/body_2d_sw.cpp b/servers/physics_2d/body_2d_sw.cpp index 6ba159ca0a..de1dfc9ee7 100644 --- a/servers/physics_2d/body_2d_sw.cpp +++ b/servers/physics_2d/body_2d_sw.cpp @@ -238,6 +238,7 @@ void Body2DSW::set_mode(Physics2DServer::BodyMode p_mode) { _inv_mass = mass > 0 ? (1.0 / mass) : 0; _inv_inertia = inertia > 0 ? (1.0 / inertia) : 0; _set_static(false); + set_active(true); } break; case Physics2DServer::BODY_MODE_CHARACTER: { @@ -245,6 +246,7 @@ void Body2DSW::set_mode(Physics2DServer::BodyMode p_mode) { _inv_mass = mass > 0 ? (1.0 / mass) : 0; _inv_inertia = 0; _set_static(false); + set_active(true); angular_velocity = 0; } break; } @@ -694,7 +696,7 @@ Body2DSW::Body2DSW() : still_time = 0; continuous_cd_mode = Physics2DServer::CCD_MODE_DISABLED; - can_sleep = false; + can_sleep = true; fi_callback = NULL; } diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.cpp b/servers/physics_2d/physics_2d_server_wrap_mt.cpp index c698290fd9..9fc15d9660 100644 --- a/servers/physics_2d/physics_2d_server_wrap_mt.cpp +++ b/servers/physics_2d/physics_2d_server_wrap_mt.cpp @@ -139,6 +139,7 @@ void Physics2DServerWrapMT::finish() { segment_shape_free_cached_ids(); circle_shape_free_cached_ids(); rectangle_shape_free_cached_ids(); + capsule_shape_free_cached_ids(); convex_polygon_shape_free_cached_ids(); concave_polygon_shape_free_cached_ids(); diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h index 31b468b50b..9aaebefd80 100644 --- a/servers/visual/rasterizer.h +++ b/servers/visual/rasterizer.h @@ -357,7 +357,6 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) = 0; virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const = 0; virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform) = 0; - virtual void skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_world_transform) = 0; /* Light API */ diff --git a/servers/visual/shader_language.cpp b/servers/visual/shader_language.cpp index 4bc65a8f4f..9babc99349 100644 --- a/servers/visual/shader_language.cpp +++ b/servers/visual/shader_language.cpp @@ -31,6 +31,8 @@ #include "shader_language.h" #include "core/os/os.h" #include "core/print_string.h" +#include "servers/visual_server.h" + static bool _is_text_char(CharType c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; @@ -924,6 +926,9 @@ bool ShaderLanguage::_find_identifier(const BlockNode *p_block, const Map<String if (r_data_type) { *r_data_type = shader->varyings[p_identifier].type; } + if (r_array_size) { + *r_array_size = shader->varyings[p_identifier].array_size; + } if (r_type) { *r_type = IDENTIFIER_VARYING; } @@ -1347,730 +1352,711 @@ bool ShaderLanguage::_validate_operator(OperatorNode *p_op, DataType *r_ret_type const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = { //constructors - { "bool", TYPE_BOOL, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec2", TYPE_BVEC2, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec2", TYPE_BVEC2, { TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_BVEC2, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BVEC2, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BVEC2, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BOOL, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BVEC3, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "float", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec2", TYPE_VEC2, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec2", TYPE_VEC2, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_VEC2, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "int", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec2", TYPE_IVEC2, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec2", TYPE_IVEC2, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_IVEC2, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_INT, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "mat2", TYPE_MAT2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "mat3", TYPE_MAT3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "mat4", TYPE_MAT4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "mat2", TYPE_MAT2, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mat3", TYPE_MAT3, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mat4", TYPE_MAT4, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, + { "bool", TYPE_BOOL, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec2", TYPE_BVEC2, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec2", TYPE_BVEC2, { TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_BVEC2, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_BOOL, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BVEC2, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BVEC2, TYPE_BOOL, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BOOL, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BOOL, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BVEC3, TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "float", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec2", TYPE_VEC2, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec2", TYPE_VEC2, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_VEC2, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "int", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec2", TYPE_IVEC2, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec2", TYPE_IVEC2, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_INT, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_IVEC2, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_INT, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_INT, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UINT, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UINT, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "mat2", TYPE_MAT2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat3", TYPE_MAT3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat4", TYPE_MAT4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "mat2", TYPE_MAT2, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat3", TYPE_MAT3, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat4", TYPE_MAT4, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, //conversion scalars - { "int", TYPE_INT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "int", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "int", TYPE_INT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "int", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, + { "int", TYPE_INT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "int", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "int", TYPE_INT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "int", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, - { "float", TYPE_FLOAT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "float", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "float", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "float", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, + { "float", TYPE_FLOAT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "float", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "float", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "float", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, - { "uint", TYPE_UINT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "uint", TYPE_UINT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, + { "uint", TYPE_UINT, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "uint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, - { "bool", TYPE_BOOL, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL }, - { "bool", TYPE_BOOL, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "bool", TYPE_BOOL, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "bool", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, + { "bool", TYPE_BOOL, { TYPE_BOOL, TYPE_VOID }, TAG_GLOBAL, false }, + { "bool", TYPE_BOOL, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "bool", TYPE_BOOL, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "bool", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, //conversion vectors - { "ivec2", TYPE_IVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ivec2", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ivec2", TYPE_IVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ivec2", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "vec2", TYPE_VEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "vec2", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "vec2", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "vec2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "uvec2", TYPE_UVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uvec2", TYPE_UVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uvec2", TYPE_UVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uvec2", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "bvec2", TYPE_BVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "bvec2", TYPE_BVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "bvec2", TYPE_BVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "bvec2", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - - { "ivec3", TYPE_IVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "ivec3", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - - { "vec3", TYPE_VEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "vec3", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - - { "uvec3", TYPE_UVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "uvec3", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - - { "bvec3", TYPE_BVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "bvec3", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - - { "ivec4", TYPE_IVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "ivec4", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "vec4", TYPE_VEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "vec4", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "uvec4", TYPE_UVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "uvec4", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "bvec4", TYPE_BVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "bvec4", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, + { "ivec2", TYPE_IVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec2", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec2", TYPE_IVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec2", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "vec2", TYPE_VEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec2", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec2", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "uvec2", TYPE_UVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec2", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "bvec2", TYPE_BVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec2", TYPE_BVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec2", TYPE_BVEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec2", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + + { "ivec3", TYPE_IVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec3", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + + { "vec3", TYPE_VEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec3", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + + { "uvec3", TYPE_UVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec3", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + + { "bvec3", TYPE_BVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec3", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + + { "ivec4", TYPE_IVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "ivec4", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "vec4", TYPE_VEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "vec4", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "uvec4", TYPE_UVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "uvec4", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "bvec4", TYPE_BVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "bvec4", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, //conversion between matrixes - { "mat2", TYPE_MAT2, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, - { "mat2", TYPE_MAT2, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - { "mat3", TYPE_MAT3, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "mat3", TYPE_MAT3, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - { "mat4", TYPE_MAT4, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "mat4", TYPE_MAT4, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, + { "mat2", TYPE_MAT2, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat2", TYPE_MAT2, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat3", TYPE_MAT3, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat3", TYPE_MAT3, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat4", TYPE_MAT4, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mat4", TYPE_MAT4, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, //builtins - trigonometry - { "radians", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "radians", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "radians", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "radians", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "degrees", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "degrees", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "degrees", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "degrees", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "sin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "sin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "sin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "sin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "cos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "cos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "cos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "cos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "tan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "tan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "tan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "tan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "asin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "asin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "asin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "asin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "acos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "acos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "acos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "acos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "sinh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "sinh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "sinh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "sinh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "cosh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "cosh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "cosh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "cosh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "tanh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "tanh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "tanh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "tanh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "asinh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "asinh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "asinh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "asinh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "acosh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "acosh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "acosh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "acosh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "atanh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "atanh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "atanh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "atanh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, + { "radians", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "radians", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "radians", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "radians", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "degrees", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "degrees", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "degrees", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "degrees", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "sin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "sin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "sin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "sin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "cos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "cos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "cos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "cos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "tan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "tan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "tan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "tan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "asin", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "asin", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "asin", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "asin", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "acos", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "acos", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "acos", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "acos", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "atan", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "sinh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "sinh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "sinh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "sinh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "cosh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "cosh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "cosh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "cosh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "tanh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "tanh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "tanh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "tanh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "asinh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "asinh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "asinh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "asinh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "acosh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "acosh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "acosh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "acosh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "atanh", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "atanh", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "atanh", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "atanh", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, //builtins - exponential - { "pow", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "pow", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "pow", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "pow", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "exp", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "exp", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "exp", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "exp", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "log", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "log", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "log", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "log", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "exp2", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "exp2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "exp2", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "exp2", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "log2", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "log2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "log2", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "log2", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "sqrt", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "sqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "sqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "sqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "inversesqrt", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "inversesqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "inversesqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "inversesqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, + { "pow", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "pow", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "pow", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "pow", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "log", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "log", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "log", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "log", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp2", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp2", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "exp2", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "log2", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "log2", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "log2", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "log2", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "sqrt", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "sqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "sqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "sqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "inversesqrt", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "inversesqrt", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "inversesqrt", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "inversesqrt", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, //builtins - common - { "abs", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "abs", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "abs", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "sign", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "sign", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "sign", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "floor", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "floor", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "floor", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "floor", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "trunc", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "trunc", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "trunc", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "trunc", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "round", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "round", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "round", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "round", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "roundEven", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "roundEven", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "roundEven", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "roundEven", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "ceil", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "ceil", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "ceil", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "ceil", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "fract", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "fract", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "fract", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "fract", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "mod", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "mod", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "modf", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "modf", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "modf", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "modf", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "min", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "min", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "min", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - - { "max", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "max", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "max", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - - { "clamp", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "clamp", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "clamp", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - - { "mix", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "step", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC2, { TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC3, { TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "step", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC2, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC3, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "smoothstep", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "isnan", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "isnan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "isnan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "isnan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "isinf", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "isinf", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "isinf", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "isinf", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "floatBitsToInt", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToInt", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToInt", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToInt", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "floatBitsToUint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToUint", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToUint", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "floatBitsToUint", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "intBitsToFloat", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "intBitsToFloat", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "intBitsToFloat", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "intBitsToFloat", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "uintBitsToFloat", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL }, - { "uintBitsToFloat", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "uintBitsToFloat", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "uintBitsToFloat", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "abs", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "abs", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "abs", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "sign", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "sign", TYPE_INT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_IVEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_IVEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "sign", TYPE_IVEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "floor", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "floor", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "floor", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "floor", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "trunc", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "trunc", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "trunc", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "trunc", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "round", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "round", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "round", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "round", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "roundEven", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "roundEven", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "roundEven", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "roundEven", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "ceil", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "ceil", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "ceil", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "ceil", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "fract", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "fract", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "fract", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "fract", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "mod", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "mod", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "modf", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "modf", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "modf", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "modf", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "min", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "min", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "min", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "min", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "max", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "max", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "max", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "max", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "clamp", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC2, { TYPE_VEC2, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC3, { TYPE_VEC3, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_VEC4, { TYPE_VEC4, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "clamp", TYPE_INT, { TYPE_INT, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC2, { TYPE_IVEC2, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC3, { TYPE_IVEC3, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_IVEC4, { TYPE_IVEC4, TYPE_INT, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "clamp", TYPE_UINT, { TYPE_UINT, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC2, { TYPE_UVEC2, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC3, { TYPE_UVEC3, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + { "clamp", TYPE_UVEC4, { TYPE_UVEC4, TYPE_UINT, TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "mix", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "mix", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "step", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC2, { TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC3, { TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "step", TYPE_VEC4, { TYPE_FLOAT, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_FLOAT, { TYPE_FLOAT, TYPE_FLOAT, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC2, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC3, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "smoothstep", TYPE_VEC4, { TYPE_FLOAT, TYPE_FLOAT, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "isnan", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "isnan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "isnan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "isnan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "isinf", TYPE_BOOL, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "isinf", TYPE_BVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "isinf", TYPE_BVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "isinf", TYPE_BVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "floatBitsToInt", TYPE_INT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToInt", TYPE_IVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToInt", TYPE_IVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToInt", TYPE_IVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "floatBitsToUint", TYPE_UINT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToUint", TYPE_UVEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToUint", TYPE_UVEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "floatBitsToUint", TYPE_UVEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "intBitsToFloat", TYPE_FLOAT, { TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "intBitsToFloat", TYPE_VEC2, { TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "intBitsToFloat", TYPE_VEC3, { TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "intBitsToFloat", TYPE_VEC4, { TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "uintBitsToFloat", TYPE_FLOAT, { TYPE_UINT, TYPE_VOID }, TAG_GLOBAL, true }, + { "uintBitsToFloat", TYPE_VEC2, { TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "uintBitsToFloat", TYPE_VEC3, { TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "uintBitsToFloat", TYPE_VEC4, { TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, true }, //builtins - geometric - { "length", TYPE_FLOAT, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "length", TYPE_FLOAT, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "length", TYPE_FLOAT, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "distance", TYPE_FLOAT, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "distance", TYPE_FLOAT, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "distance", TYPE_FLOAT, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "dot", TYPE_FLOAT, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "dot", TYPE_FLOAT, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "dot", TYPE_FLOAT, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "cross", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "normalize", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "normalize", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "normalize", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "reflect", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "refract", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "faceforward", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "faceforward", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "faceforward", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "matrixCompMult", TYPE_MAT2, { TYPE_MAT2, TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "matrixCompMult", TYPE_MAT3, { TYPE_MAT3, TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, - { "matrixCompMult", TYPE_MAT4, { TYPE_MAT4, TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - - { "outerProduct", TYPE_MAT2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "outerProduct", TYPE_MAT3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "outerProduct", TYPE_MAT4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "transpose", TYPE_MAT2, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "transpose", TYPE_MAT3, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, - { "transpose", TYPE_MAT4, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - - { "determinant", TYPE_FLOAT, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "determinant", TYPE_FLOAT, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, - { "determinant", TYPE_FLOAT, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - - { "inverse", TYPE_MAT2, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL }, - { "inverse", TYPE_MAT3, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL }, - { "inverse", TYPE_MAT4, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThan", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThan", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThanEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThanEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "lessThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "lessThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThanEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThanEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "greaterThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "greaterThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "equal", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "equal", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "equal", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "equal", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "equal", TYPE_BVEC4, { TYPE_BVEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "notEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "notEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "length", TYPE_FLOAT, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "length", TYPE_FLOAT, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "length", TYPE_FLOAT, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "distance", TYPE_FLOAT, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "distance", TYPE_FLOAT, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "distance", TYPE_FLOAT, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "dot", TYPE_FLOAT, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "dot", TYPE_FLOAT, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "dot", TYPE_FLOAT, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "cross", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "normalize", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "normalize", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "normalize", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + { "reflect", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "refract", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "faceforward", TYPE_VEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "faceforward", TYPE_VEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "faceforward", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "matrixCompMult", TYPE_MAT2, { TYPE_MAT2, TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "matrixCompMult", TYPE_MAT3, { TYPE_MAT3, TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, + { "matrixCompMult", TYPE_MAT4, { TYPE_MAT4, TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "outerProduct", TYPE_MAT2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "outerProduct", TYPE_MAT3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "outerProduct", TYPE_MAT4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "transpose", TYPE_MAT2, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "transpose", TYPE_MAT3, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, + { "transpose", TYPE_MAT4, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "determinant", TYPE_FLOAT, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "determinant", TYPE_FLOAT, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, + { "determinant", TYPE_FLOAT, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "inverse", TYPE_MAT2, { TYPE_MAT2, TYPE_VOID }, TAG_GLOBAL, false }, + { "inverse", TYPE_MAT3, { TYPE_MAT3, TYPE_VOID }, TAG_GLOBAL, false }, + { "inverse", TYPE_MAT4, { TYPE_MAT4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThan", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThan", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThan", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThan", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThan", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThanEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThanEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "lessThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "lessThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThanEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThanEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "greaterThanEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "greaterThanEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "equal", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "equal", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "equal", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "equal", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "equal", TYPE_BVEC4, { TYPE_BVEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "notEqual", TYPE_BVEC2, { TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC3, { TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false }, + + { "notEqual", TYPE_BVEC2, { TYPE_IVEC2, TYPE_IVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC3, { TYPE_IVEC3, TYPE_IVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC4, { TYPE_IVEC4, TYPE_IVEC4, TYPE_VOID }, TAG_GLOBAL, false }, - { "notEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "notEqual", TYPE_BVEC2, { TYPE_UVEC2, TYPE_UVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC3, { TYPE_UVEC3, TYPE_UVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC4, { TYPE_UVEC4, TYPE_UVEC4, TYPE_VOID }, TAG_GLOBAL, false }, - { "notEqual", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "notEqual", TYPE_BVEC4, { TYPE_BVEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "notEqual", TYPE_BVEC2, { TYPE_BVEC2, TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC3, { TYPE_BVEC3, TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "notEqual", TYPE_BVEC4, { TYPE_BVEC4, TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, - { "any", TYPE_BOOL, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "any", TYPE_BOOL, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "any", TYPE_BOOL, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "any", TYPE_BOOL, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "any", TYPE_BOOL, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "any", TYPE_BOOL, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, - { "all", TYPE_BOOL, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "all", TYPE_BOOL, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "all", TYPE_BOOL, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "all", TYPE_BOOL, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "all", TYPE_BOOL, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "all", TYPE_BOOL, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, - { "not", TYPE_BVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL }, - { "not", TYPE_BVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL }, - { "not", TYPE_BVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL }, + { "not", TYPE_BVEC2, { TYPE_BVEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "not", TYPE_BVEC3, { TYPE_BVEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "not", TYPE_BVEC4, { TYPE_BVEC4, TYPE_VOID }, TAG_GLOBAL, false }, //builtins - texture - { "textureSize", TYPE_IVEC2, { TYPE_SAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC2, { TYPE_ISAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC2, { TYPE_USAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBE, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureLod", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - - { "dFdx", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "dFdx", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "dFdx", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "dFdx", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "dFdy", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "dFdy", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "dFdy", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "dFdy", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, - - { "fwidth", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL }, - { "fwidth", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL }, - { "fwidth", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL }, - { "fwidth", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL }, + { "textureSize", TYPE_IVEC2, { TYPE_SAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC2, { TYPE_ISAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC2, { TYPE_USAMPLER2D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER2DARRAY, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_SAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_ISAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC3, { TYPE_USAMPLER3D, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureSize", TYPE_IVEC2, { TYPE_SAMPLERCUBE, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + + { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, false }, + { "texture", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, false }, + { "texture", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProj", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + + { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureLod", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, false }, + + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_IVEC2, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + { "texelFetch", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_IVEC3, TYPE_INT, TYPE_VOID }, TAG_GLOBAL, true }, + + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC3, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureProjLod", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC4, TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2D, TYPE_VEC2, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER2DARRAY, TYPE_VEC3, TYPE_VEC2, TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_IVEC4, { TYPE_ISAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_UVEC4, { TYPE_USAMPLER3D, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "textureGrad", TYPE_VEC4, { TYPE_SAMPLERCUBE, TYPE_VEC3, TYPE_VEC3, TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + + { "dFdx", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdx", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdx", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdx", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "dFdy", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdy", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdy", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "dFdy", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, + + { "fwidth", TYPE_FLOAT, { TYPE_FLOAT, TYPE_VOID }, TAG_GLOBAL, true }, + { "fwidth", TYPE_VEC2, { TYPE_VEC2, TYPE_VOID }, TAG_GLOBAL, true }, + { "fwidth", TYPE_VEC3, { TYPE_VEC3, TYPE_VOID }, TAG_GLOBAL, true }, + { "fwidth", TYPE_VEC4, { TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, true }, //sub-functions //array - { "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY }, + { "length", TYPE_INT, { TYPE_VOID }, TAG_ARRAY, false }, - { NULL, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL } + { NULL, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL, false } }; @@ -2097,6 +2083,8 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, OperatorNode *p int argcount = args.size(); bool failed_builtin = false; + bool unsupported_builtin = false; + int builtin_idx = 0; if (argcount <= 4) { // test builtins @@ -2123,6 +2111,16 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, OperatorNode *p } } + if (!fail) { + if (VisualServer::get_singleton()->is_low_end()) { + if (builtin_func_defs[idx].high_end) { + fail = true; + unsupported_builtin = true; + builtin_idx = idx; + } + } + } + if (!fail && argcount < 4 && builtin_func_defs[idx].args[argcount] != TYPE_VOID) fail = true; //make sure the number of arguments matches @@ -2192,6 +2190,21 @@ bool ShaderLanguage::_validate_function_call(BlockNode *p_block, OperatorNode *p } } + if (unsupported_builtin) { + + String arglist = ""; + for (int i = 0; i < argcount; i++) { + if (i > 0) { + arglist += ", "; + } + arglist += get_datatype_name(builtin_func_defs[builtin_idx].args[i]); + } + + String err = "Built-in function \"" + String(name) + "(" + arglist + ")\" is supported only on high-end platform!"; + _set_error(err); + return false; + } + if (failed_builtin) { String err = "Invalid arguments for built-in function: " + String(name) + "("; for (int i = 0; i < argcount; i++) { @@ -2759,6 +2772,12 @@ bool ShaderLanguage::_validate_assign(Node *p_node, const Map<StringName, BuiltI return false; } + if (shader->varyings.has(arr->name) && current_function != String("vertex")) { + if (r_message) + *r_message = RTR("Varyings can only be assigned in vertex function."); + return false; + } + return true; } @@ -2905,6 +2924,16 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons bool ok = _parse_function_arguments(p_block, p_builtin_types, func, &carg); + // Check if block has a variable with the same name as function to prevent shader crash. + ShaderLanguage::BlockNode *bnode = p_block; + while (bnode) { + if (bnode->variables.has(name)) { + _set_error("Expected function name"); + return NULL; + } + bnode = bnode->parent_block; + } + //test if function was parsed first for (int i = 0; i < shader->functions.size(); i++) { if (shader->functions[i].name == name) { @@ -3833,9 +3862,12 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui } StringName name = tk.text; - if (_find_identifier(p_block, p_builtin_types, name)) { - _set_error("Redefinition of '" + String(name) + "'"); - return ERR_PARSE_ERROR; + ShaderLanguage::IdentifierType itype; + if (_find_identifier(p_block, p_builtin_types, name, (ShaderLanguage::DataType *)0, &itype)) { + if (itype != IDENTIFIER_FUNCTION) { + _set_error("Redefinition of '" + String(name) + "'"); + return ERR_PARSE_ERROR; + } } BlockNode::Variable var; @@ -3993,6 +4025,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui return ERR_PARSE_ERROR; } + if (node->is_const && n->type == Node::TYPE_OPERATOR && ((OperatorNode *)n)->op == OP_CALL) { + _set_error("Expected constant expression"); + return ERR_PARSE_ERROR; + } + if (var.type != n->get_datatype()) { _set_error("Invalid assignment of '" + get_datatype_name(n->get_datatype()) + "' to '" + get_datatype_name(var.type) + "'"); return ERR_PARSE_ERROR; @@ -4053,7 +4090,10 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui Node *n = _parse_and_reduce_expression(p_block, p_builtin_types); if (!n) return ERR_PARSE_ERROR; - + if (node->is_const && n->type == Node::TYPE_OPERATOR && ((OperatorNode *)n)->op == OP_CALL) { + _set_error("Expected constant expression after '='"); + return ERR_PARSE_ERROR; + } decl.initializer = n; if (var.type != n->get_datatype()) { @@ -4113,6 +4153,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui if (!n) return ERR_PARSE_ERROR; + if (n->get_datatype() != TYPE_BOOL) { + _set_error("Expected boolean expression"); + return ERR_PARSE_ERROR; + } + tk = _get_token(); if (tk.type != TK_PARENTHESIS_CLOSE) { _set_error("Expected ')' after expression"); @@ -4142,6 +4187,12 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui _set_tkpos(pos); //rollback } } else if (tk.type == TK_CF_SWITCH) { + + if (VisualServer::get_singleton()->is_low_end()) { + _set_error("\"switch\" operator is supported only on high-end platform!"); + return ERR_PARSE_ERROR; + } + // switch() {} tk = _get_token(); if (tk.type != TK_PARENTHESIS_OPEN) { @@ -4580,19 +4631,75 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const Map<StringName, Bui return OK; } +String ShaderLanguage::_get_shader_type_list(const Set<String> &p_shader_types) const { + + // Return a list of shader types as an human-readable string + String valid_types; + for (const Set<String>::Element *E = p_shader_types.front(); E; E = E->next()) { + if (valid_types != String()) { + valid_types += ", "; + } + + valid_types += "'" + E->get() + "'"; + } + + return valid_types; +} + +Error ShaderLanguage::_validate_datatype(DataType p_type) { + if (VisualServer::get_singleton()->is_low_end()) { + bool invalid_type = false; + + switch (p_type) { + case TYPE_ISAMPLER2D: + invalid_type = true; + break; + case TYPE_USAMPLER2D: + invalid_type = true; + break; + case TYPE_SAMPLER3D: + invalid_type = true; + break; + case TYPE_ISAMPLER3D: + invalid_type = true; + break; + case TYPE_USAMPLER3D: + invalid_type = true; + break; + case TYPE_SAMPLER2DARRAY: + invalid_type = true; + break; + case TYPE_USAMPLER2DARRAY: + invalid_type = true; + break; + case TYPE_ISAMPLER2DARRAY: + invalid_type = true; + break; + default: + break; + } + + if (invalid_type) { + _set_error(vformat("\"%s\" type is supported only on high-end platform!", get_datatype_name(p_type))); + return ERR_UNAVAILABLE; + } + } + return OK; +} + Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_functions, const Vector<StringName> &p_render_modes, const Set<String> &p_shader_types) { Token tk = _get_token(); if (tk.type != TK_SHADER_TYPE) { - _set_error("Expected 'shader_type' at the beginning of shader."); + _set_error("Expected 'shader_type' at the beginning of shader. Valid types are: " + _get_shader_type_list(p_shader_types)); return ERR_PARSE_ERROR; } tk = _get_token(); if (tk.type != TK_IDENTIFIER) { - _set_error("Expected identifier after 'shader_type', indicating type of shader."); + _set_error("Expected identifier after 'shader_type', indicating type of shader. Valid types are: " + _get_shader_type_list(p_shader_types)); return ERR_PARSE_ERROR; } @@ -4601,15 +4708,7 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct shader_type_identifier = tk.text; if (!p_shader_types.has(shader_type_identifier)) { - - String valid; - for (Set<String>::Element *E = p_shader_types.front(); E; E = E->next()) { - if (valid != String()) { - valid += ", "; - } - valid += "'" + E->get() + "'"; - } - _set_error("Invalid shader type, valid types are: " + valid); + _set_error("Invalid shader type. Valid types are: " + _get_shader_type_list(p_shader_types)); return ERR_PARSE_ERROR; } @@ -4695,7 +4794,7 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct } if (!uniform && (type < TYPE_FLOAT || type > TYPE_MAT4)) { - _set_error("Invalid type for varying, only float,vec2,vec3,vec4,mat2,mat3,mat4 allowed."); + _set_error("Invalid type for varying, only float,vec2,vec3,vec4,mat2,mat3,mat4 or array of these types allowed."); return ERR_PARSE_ERROR; } @@ -4712,6 +4811,11 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct return ERR_PARSE_ERROR; } + if (has_builtin(p_functions, name)) { + _set_error("Redefinition of '" + String(name) + "'"); + return ERR_PARSE_ERROR; + } + if (uniform) { ShaderNode::Uniform uniform2; @@ -4719,6 +4823,9 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct if (is_sampler_type(type)) { uniform2.texture_order = texture_uniforms++; uniform2.order = -1; + if (_validate_datatype(type) != OK) { + return ERR_PARSE_ERROR; + } } else { uniform2.texture_order = -1; uniform2.order = uniforms++; @@ -4877,13 +4984,36 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct varying.type = type; varying.precision = precision; varying.interpolation = interpolation; - shader->varyings[name] = varying; tk = _get_token(); - if (tk.type != TK_SEMICOLON) { - _set_error("Expected ';'"); + if (tk.type != TK_SEMICOLON && tk.type != TK_BRACKET_OPEN) { + _set_error("Expected ';' or '['"); return ERR_PARSE_ERROR; } + + if (tk.type == TK_BRACKET_OPEN) { + tk = _get_token(); + if (tk.type == TK_INT_CONSTANT && tk.constant > 0) { + varying.array_size = (int)tk.constant; + + tk = _get_token(); + if (tk.type == TK_BRACKET_CLOSE) { + tk = _get_token(); + if (tk.type != TK_SEMICOLON) { + _set_error("Expected ';'"); + return ERR_PARSE_ERROR; + } + } else { + _set_error("Expected ']'"); + return ERR_PARSE_ERROR; + } + } else { + _set_error("Expected single integer constant > 0"); + return ERR_PARSE_ERROR; + } + } + + shader->varyings[name] = varying; } } break; @@ -4937,6 +5067,11 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct return ERR_PARSE_ERROR; } + if (has_builtin(p_functions, name)) { + _set_error("Redefinition of '" + String(name) + "'"); + return ERR_PARSE_ERROR; + } + tk = _get_token(); if (tk.type != TK_PARENTHESIS_OPEN) { if (type == TYPE_VOID) { @@ -4995,6 +5130,11 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct return ERR_PARSE_ERROR; } + if (has_builtin(p_functions, name)) { + _set_error("Redefinition of '" + String(name) + "'"); + return ERR_PARSE_ERROR; + } + tk = _get_token(); } else if (tk.type == TK_SEMICOLON) { @@ -5071,6 +5211,10 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct ptype = get_token_datatype(tk.type); + if (_validate_datatype(ptype) != OK) { + return ERR_PARSE_ERROR; + } + if (ptype == TYPE_VOID) { _set_error("void not allowed in argument"); return ERR_PARSE_ERROR; @@ -5089,10 +5233,19 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct pname = tk.text; - if (_find_identifier(func_node->body, builtin_types, pname)) { + ShaderLanguage::IdentifierType itype; + if (_find_identifier(func_node->body, builtin_types, pname, (ShaderLanguage::DataType *)0, &itype)) { + if (itype != IDENTIFIER_FUNCTION) { + _set_error("Redefinition of '" + String(pname) + "'"); + return ERR_PARSE_ERROR; + } + } + + if (has_builtin(p_functions, pname)) { _set_error("Redefinition of '" + String(pname) + "'"); return ERR_PARSE_ERROR; } + FunctionNode::Argument arg; arg.type = ptype; arg.name = pname; @@ -5159,6 +5312,26 @@ Error ShaderLanguage::_parse_shader(const Map<StringName, FunctionInfo> &p_funct return OK; } +bool ShaderLanguage::has_builtin(const Map<StringName, ShaderLanguage::FunctionInfo> &p_functions, const StringName &p_name) { + + if (p_functions.has("vertex")) { + if (p_functions["vertex"].built_ins.has(p_name)) { + return true; + } + } + if (p_functions.has("fragment")) { + if (p_functions["fragment"].built_ins.has(p_name)) { + return true; + } + } + if (p_functions.has("light")) { + if (p_functions["light"].built_ins.has(p_name)) { + return true; + } + } + return false; +} + Error ShaderLanguage::_find_last_flow_op_in_op(ControlFlowNode *p_flow, FlowOperation p_op) { bool found = false; @@ -5316,9 +5489,7 @@ Error ShaderLanguage::complete(const String &p_code, const Map<StringName, Funct nodes = NULL; shader = alloc_node<ShaderNode>(); - Error err = _parse_shader(p_functions, p_render_modes, p_shader_types); - if (err != OK) - ERR_PRINT("Failed to parse shader"); + _parse_shader(p_functions, p_render_modes, p_shader_types); switch (completion_type) { @@ -5365,7 +5536,7 @@ Error ShaderLanguage::complete(const String &p_code, const Map<StringName, Funct if (block->parent_function) { if (comp_ident) { for (int i = 0; i < block->parent_function->arguments.size(); i++) { - matches.insert(block->parent_function->arguments[i].name, ScriptCodeCompletionOption::KIND_FUNCTION); + matches.insert(block->parent_function->arguments[i].name, ScriptCodeCompletionOption::KIND_VARIABLE); } } skip_function = block->parent_function->name; diff --git a/servers/visual/shader_language.h b/servers/visual/shader_language.h index 6753456323..0b0947da0c 100644 --- a/servers/visual/shader_language.h +++ b/servers/visual/shader_language.h @@ -519,11 +519,13 @@ public: DataType type; DataInterpolation interpolation; DataPrecision precision; + int array_size; Varying() : type(TYPE_VOID), interpolation(INTERPOLATION_FLAT), - precision(PRECISION_DEFAULT) {} + precision(PRECISION_DEFAULT), + array_size(0) {} }; struct Uniform { @@ -643,6 +645,7 @@ public: Map<StringName, BuiltInInfo> built_ins; bool can_discard; }; + static bool has_builtin(const Map<StringName, ShaderLanguage::FunctionInfo> &p_functions, const StringName &p_name); private: struct KeyWord { @@ -712,7 +715,7 @@ private: enum SubClassTag { TAG_GLOBAL, - TAG_ARRAY + TAG_ARRAY, }; struct BuiltinFuncDef { @@ -721,6 +724,7 @@ private: DataType rettype; const DataType args[MAX_ARGS]; SubClassTag tag; + bool high_end; }; struct BuiltinFuncOutArgs { //arguments used as out in built in functions @@ -740,6 +744,8 @@ private: static const BuiltinFuncDef builtin_func_defs[]; static const BuiltinFuncOutArgs builtin_func_out_args[]; + Error _validate_datatype(DataType p_type); + bool _validate_function_call(BlockNode *p_block, OperatorNode *p_func, DataType *r_ret_type); bool _parse_function_arguments(BlockNode *p_block, const Map<StringName, BuiltInInfo> &p_builtin_types, OperatorNode *p_func, int *r_complete_arg = NULL); @@ -748,6 +754,8 @@ private: Node *_parse_and_reduce_expression(BlockNode *p_block, const Map<StringName, BuiltInInfo> &p_builtin_types); Error _parse_block(BlockNode *p_block, const Map<StringName, BuiltInInfo> &p_builtin_types, bool p_just_one = false, bool p_can_break = false, bool p_can_continue = false); + String _get_shader_type_list(const Set<String> &p_shader_types) const; + Error _parse_shader(const Map<StringName, FunctionInfo> &p_functions, const Vector<StringName> &p_render_modes, const Set<String> &p_shader_types); Error _find_last_flow_op_in_block(BlockNode *p_block, FlowOperation p_op); diff --git a/servers/visual/shader_types.cpp b/servers/visual/shader_types.cpp index 75910ff1c0..019f477362 100644 --- a/servers/visual/shader_types.cpp +++ b/servers/visual/shader_types.cpp @@ -235,6 +235,7 @@ ShaderTypes::ShaderTypes() { shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["TEXTURE_PIXEL_SIZE"] = constt(ShaderLanguage::TYPE_VEC2); shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["SCREEN_UV"] = constt(ShaderLanguage::TYPE_VEC2); shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["LIGHT_VEC"] = ShaderLanguage::TYPE_VEC2; + shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["SHADOW_VEC"] = ShaderLanguage::TYPE_VEC2; shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["LIGHT_HEIGHT"] = ShaderLanguage::TYPE_FLOAT; shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["LIGHT_COLOR"] = ShaderLanguage::TYPE_VEC4; shader_modes[VS::SHADER_CANVAS_ITEM].functions["light"].built_ins["LIGHT_UV"] = constt(ShaderLanguage::TYPE_VEC2); diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp index f5a1276c27..ed06a67e4c 100644 --- a/servers/visual/visual_server_canvas.cpp +++ b/servers/visual/visual_server_canvas.cpp @@ -680,11 +680,22 @@ void VisualServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const R rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_H; rect->rect.size.x = -rect->rect.size.x; } + if (p_src_rect.size.x < 0) { + + rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_H; + rect->source.size.x = -rect->source.size.x; + } if (p_rect.size.y < 0) { rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_V; rect->rect.size.y = -rect->rect.size.y; } + if (p_src_rect.size.y < 0) { + + rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_V; + rect->source.size.y = -rect->source.size.y; + } + if (p_transpose) { rect->flags |= RasterizerCanvas::CANVAS_RECT_TRANSPOSE; SWAP(rect->rect.size.x, rect->rect.size.y); diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h index dcfbd28dd6..0df228457e 100644 --- a/servers/visual/visual_server_raster.h +++ b/servers/visual/visual_server_raster.h @@ -294,7 +294,6 @@ public: BIND3(skeleton_bone_set_transform_2d, RID, int, const Transform2D &) BIND2RC(Transform2D, skeleton_bone_get_transform_2d, RID, int) BIND2(skeleton_set_base_transform_2d, RID, const Transform2D &) - BIND3(skeleton_set_world_transform, RID, bool, const Transform &) /* Light API */ diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index 0863d5c2e3..ae1f3712b0 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -184,7 +184,7 @@ void VisualServerViewport::_draw_viewport(Viewport *p_viewport, ARVRInterface::E for (Map<RID, Viewport::CanvasData>::Element *E = p_viewport->canvas_map.front(); E; E = E->next()) { VisualServerCanvas::Canvas *canvas = static_cast<VisualServerCanvas::Canvas *>(E->get().canvas); - Transform2D xf = p_viewport->global_transform * E->get().transform; + Transform2D xf = _canvas_get_transform(p_viewport, canvas, &E->get(), clip_rect.size); for (Set<RasterizerCanvas::LightOccluderInstance *>::Element *F = canvas->occluders.front(); F; F = F->next()) { @@ -461,7 +461,7 @@ void VisualServerViewport::viewport_set_render_direct_to_screen(RID p_viewport, VSG::storage->render_target_set_flag(viewport->render_target, RasterizerStorage::RENDER_TARGET_DIRECT_TO_SCREEN, p_enable); viewport->viewport_render_direct_to_screen = p_enable; - // if attached to screen already, setup screen size and position, this needs to happen after setting flag to avoid an unneccesary buffer allocation + // if attached to screen already, setup screen size and position, this needs to happen after setting flag to avoid an unnecessary buffer allocation if (VSG::rasterizer->is_low_end() && viewport->viewport_to_screen_rect != Rect2() && p_enable) { VSG::storage->render_target_set_size(viewport->render_target, viewport->viewport_to_screen_rect.size.x, viewport->viewport_to_screen_rect.size.y); diff --git a/servers/visual/visual_server_wrap_mt.cpp b/servers/visual/visual_server_wrap_mt.cpp index 79e4d8cbba..1f0217c0ce 100644 --- a/servers/visual/visual_server_wrap_mt.cpp +++ b/servers/visual/visual_server_wrap_mt.cpp @@ -137,6 +137,7 @@ void VisualServerWrapMT::finish() { } texture_free_cached_ids(); + sky_free_cached_ids(); shader_free_cached_ids(); material_free_cached_ids(); mesh_free_cached_ids(); @@ -148,6 +149,7 @@ void VisualServerWrapMT::finish() { spot_light_free_cached_ids(); reflection_probe_free_cached_ids(); gi_probe_free_cached_ids(); + lightmap_capture_free_cached_ids(); particles_free_cached_ids(); camera_free_cached_ids(); viewport_free_cached_ids(); diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h index 41993d7c88..273cf728c1 100644 --- a/servers/visual/visual_server_wrap_mt.h +++ b/servers/visual/visual_server_wrap_mt.h @@ -230,7 +230,6 @@ public: FUNC3(skeleton_bone_set_transform_2d, RID, int, const Transform2D &) FUNC2RC(Transform2D, skeleton_bone_get_transform_2d, RID, int) FUNC2(skeleton_set_base_transform_2d, RID, const Transform2D &) - FUNC3(skeleton_set_world_transform, RID, bool, const Transform &) /* Light API */ diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp index 13fcda2402..4bab9b76ba 100644 --- a/servers/visual_server.cpp +++ b/servers/visual_server.cpp @@ -508,12 +508,11 @@ Error VisualServer::_surface_set_data(Array p_arrays, uint32_t p_format, uint32_ if (p_format & ARRAY_COMPRESS_TANGENT) { for (int i = 0; i < p_vertex_array_len; i++) { - - uint8_t xyzw[4] = { - (uint8_t)CLAMP(src[i * 4 + 0] * 127, -128, 127), - (uint8_t)CLAMP(src[i * 4 + 1] * 127, -128, 127), - (uint8_t)CLAMP(src[i * 4 + 2] * 127, -128, 127), - (uint8_t)CLAMP(src[i * 4 + 3] * 127, -128, 127) + int8_t xyzw[4] = { + (int8_t)CLAMP(src[i * 4 + 0] * 127, -128, 127), + (int8_t)CLAMP(src[i * 4 + 1] * 127, -128, 127), + (int8_t)CLAMP(src[i * 4 + 2] * 127, -128, 127), + (int8_t)CLAMP(src[i * 4 + 3] * 127, -128, 127) }; copymem(&vw[p_offsets[ai] + i * p_stride], xyzw, 4); @@ -1973,7 +1972,7 @@ void VisualServer::_bind_methods() { ClassDB::bind_method(D_METHOD("canvas_item_add_primitive", "item", "points", "colors", "uvs", "texture", "width", "normal_map"), &VisualServer::canvas_item_add_primitive, DEFVAL(1.0), DEFVAL(RID())); ClassDB::bind_method(D_METHOD("canvas_item_add_polygon", "item", "points", "colors", "uvs", "texture", "normal_map", "antialiased"), &VisualServer::canvas_item_add_polygon, DEFVAL(Vector<Point2>()), DEFVAL(RID()), DEFVAL(RID()), DEFVAL(false)); ClassDB::bind_method(D_METHOD("canvas_item_add_triangle_array", "item", "indices", "points", "colors", "uvs", "bones", "weights", "texture", "count", "normal_map"), &VisualServer::canvas_item_add_triangle_array, DEFVAL(Vector<Point2>()), DEFVAL(Vector<int>()), DEFVAL(Vector<float>()), DEFVAL(RID()), DEFVAL(-1), DEFVAL(RID())); - ClassDB::bind_method(D_METHOD("canvas_item_add_mesh", "item", "mesh", "texture", "normal_map"), &VisualServer::canvas_item_add_mesh, DEFVAL(RID())); + ClassDB::bind_method(D_METHOD("canvas_item_add_mesh", "item", "mesh", "transform", "modulate", "texture", "normal_map"), &VisualServer::canvas_item_add_mesh, DEFVAL(Transform2D()), DEFVAL(Color(1, 1, 1)), DEFVAL(RID()), DEFVAL(RID())); ClassDB::bind_method(D_METHOD("canvas_item_add_multimesh", "item", "mesh", "texture", "normal_map"), &VisualServer::canvas_item_add_multimesh, DEFVAL(RID())); ClassDB::bind_method(D_METHOD("canvas_item_add_particles", "item", "particles", "texture", "normal_map"), &VisualServer::canvas_item_add_particles); ClassDB::bind_method(D_METHOD("canvas_item_add_set_transform", "item", "transform"), &VisualServer::canvas_item_add_set_transform); diff --git a/servers/visual_server.h b/servers/visual_server.h index 1b0164e5ca..5e6c4d9b1e 100644 --- a/servers/visual_server.h +++ b/servers/visual_server.h @@ -391,7 +391,6 @@ public: virtual void skeleton_bone_set_transform_2d(RID p_skeleton, int p_bone, const Transform2D &p_transform) = 0; virtual Transform2D skeleton_bone_get_transform_2d(RID p_skeleton, int p_bone) const = 0; virtual void skeleton_set_base_transform_2d(RID p_skeleton, const Transform2D &p_base_transform) = 0; - virtual void skeleton_set_world_transform(RID p_skeleton, bool p_enable, const Transform &p_base_transform) = 0; /* Light API */ diff --git a/thirdparty/README.md b/thirdparty/README.md index 3f2fc6d8f9..8928009817 100644 --- a/thirdparty/README.md +++ b/thirdparty/README.md @@ -4,7 +4,7 @@ ## assimp - Upstream: http://github.com/assimp/assimp -- Version: git (1d565b0aab5a2ee00462f18c5b8a81f6a5454a48) +- Version: git (308db73d0b3c2d1870cd3e465eaa283692a4cf23) - License: BSD-3-Clause @@ -157,12 +157,12 @@ Files extracted from upstream source: ## libogg - Upstream: https://www.xiph.org/ogg -- Version: 1.3.3 +- Version: git (c8fca6b, 2019) - License: BSD-3-Clause Files extracted from upstream source: -- `src/*.c` +- `src/*.{c,h}` - `include/ogg/*.h` in ogg/ - COPYING @@ -250,7 +250,7 @@ from the Android NDK r18. ## libwebp - Upstream: https://chromium.googlesource.com/webm/libwebp/ -- Version: 1.0.2 +- Version: 1.0.3 - License: BSD-3-Clause Files extracted from upstream source: @@ -374,10 +374,6 @@ Collection of single-file libraries used in Godot components. * Upstream: https://wiki.blender.org/index.php/Dev:Shading/Tangent_Space_Normal_Maps * Version: 1.0 * License: zlib -- `stb_truetype.h` - * Upstream: https://github.com/nothings/stb - * Version: 1.21 - * License: Public Domain (Unlicense) or MIT - `stb_vorbis.c` * Upstream: https://github.com/nothings/stb * Version: 1.16 @@ -538,7 +534,7 @@ Files extracted from upstream source: ## zstd - Upstream: https://github.com/facebook/zstd -- Version: 1.4.1 +- Version: 1.4.3 - License: BSD-3-Clause Files extracted from upstream source: diff --git a/thirdparty/assimp/code/Common/BaseImporter.cpp b/thirdparty/assimp/code/Common/BaseImporter.cpp index de5018a250..5c1e605549 100644 --- a/thirdparty/assimp/code/Common/BaseImporter.cpp +++ b/thirdparty/assimp/code/Common/BaseImporter.cpp @@ -67,7 +67,20 @@ using namespace Assimp; // Constructor to be privately used by Importer BaseImporter::BaseImporter() AI_NO_EXCEPT : m_progress() { - // nothing to do here + /** + * Assimp Importer + * unit conversions available + * if you need another measurment unit add it below. + * it's currently defined in assimp that we prefer meters. + * + * NOTE: Initialised here rather than in the header file + * to workaround a VS2013 bug with brace initialisers + * */ + importerUnits[ImporterUnits::M] = 1.0; + importerUnits[ImporterUnits::CM] = 0.01; + importerUnits[ImporterUnits::MM] = 0.001; + importerUnits[ImporterUnits::INCHES] = 0.0254; + importerUnits[ImporterUnits::FEET] = 0.3048; } // ------------------------------------------------------------------------------------------------ @@ -85,7 +98,7 @@ void BaseImporter::UpdateImporterScale( Importer* pImp ) double activeScale = importerScale * fileScale; // Set active scaling - pImp->SetPropertyFloat( AI_CONFIG_APP_SCALE_KEY, activeScale); + pImp->SetPropertyFloat( AI_CONFIG_APP_SCALE_KEY, static_cast<float>( activeScale) ); ASSIMP_LOG_DEBUG_F("UpdateImporterScale scale set: %f", activeScale ); } diff --git a/thirdparty/assimp/code/Common/DefaultIOSystem.cpp b/thirdparty/assimp/code/Common/DefaultIOSystem.cpp index d40b67de32..6fdc24dd80 100644 --- a/thirdparty/assimp/code/Common/DefaultIOSystem.cpp +++ b/thirdparty/assimp/code/Common/DefaultIOSystem.cpp @@ -61,83 +61,66 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; -// maximum path length -// XXX http://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html -#ifdef PATH_MAX -# define PATHLIMIT PATH_MAX -#else -# define PATHLIMIT 4096 +#ifdef _WIN32 +static std::wstring Utf8ToWide(const char* in) +{ + int size = MultiByteToWideChar(CP_UTF8, 0, in, -1, nullptr, 0); + // size includes terminating null; std::wstring adds null automatically + std::wstring out(static_cast<size_t>(size) - 1, L'\0'); + MultiByteToWideChar(CP_UTF8, 0, in, -1, &out[0], size); + return out; +} + +static std::string WideToUtf8(const wchar_t* in) +{ + int size = WideCharToMultiByte(CP_UTF8, 0, in, -1, nullptr, 0, nullptr, nullptr); + // size includes terminating null; std::string adds null automatically + std::string out(static_cast<size_t>(size) - 1, '\0'); + WideCharToMultiByte(CP_UTF8, 0, in, -1, &out[0], size, nullptr, nullptr); + return out; +} #endif // ------------------------------------------------------------------------------------------------ // Tests for the existence of a file at the given path. -bool DefaultIOSystem::Exists( const char* pFile) const +bool DefaultIOSystem::Exists(const char* pFile) const { #ifdef _WIN32 - wchar_t fileName16[PATHLIMIT]; - -#ifndef WindowsStore - bool isUnicode = IsTextUnicode(pFile, static_cast<int>(strlen(pFile)), NULL) != 0; - if (isUnicode) { - - MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, pFile, -1, fileName16, PATHLIMIT); - struct __stat64 filestat; - if (0 != _wstat64(fileName16, &filestat)) { - return false; - } - } else { -#endif - FILE* file = ::fopen(pFile, "rb"); - if (!file) - return false; - - ::fclose(file); -#ifndef WindowsStore + struct __stat64 filestat; + if (_wstat64(Utf8ToWide(pFile).c_str(), &filestat) != 0) { + return false; } -#endif #else - FILE* file = ::fopen( pFile, "rb"); - if( !file) + FILE* file = ::fopen(pFile, "rb"); + if (!file) return false; - ::fclose( file); + ::fclose(file); #endif return true; } // ------------------------------------------------------------------------------------------------ // Open a new file with a given path. -IOStream* DefaultIOSystem::Open( const char* strFile, const char* strMode) +IOStream* DefaultIOSystem::Open(const char* strFile, const char* strMode) { - ai_assert(NULL != strFile); - ai_assert(NULL != strMode); + ai_assert(strFile != nullptr); + ai_assert(strMode != nullptr); FILE* file; #ifdef _WIN32 - wchar_t fileName16[PATHLIMIT]; -#ifndef WindowsStore - bool isUnicode = IsTextUnicode(strFile, static_cast<int>(strlen(strFile)), NULL) != 0; - if (isUnicode) { - MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, strFile, -1, fileName16, PATHLIMIT); - std::string mode8(strMode); - file = ::_wfopen(fileName16, std::wstring(mode8.begin(), mode8.end()).c_str()); - } else { -#endif - file = ::fopen(strFile, strMode); -#ifndef WindowsStore - } -#endif + file = ::_wfopen(Utf8ToWide(strFile).c_str(), Utf8ToWide(strMode).c_str()); #else file = ::fopen(strFile, strMode); #endif - if (nullptr == file) + if (!file) return nullptr; - return new DefaultIOStream(file, (std::string) strFile); + return new DefaultIOStream(file, strFile); } // ------------------------------------------------------------------------------------------------ // Closes the given file and releases all resources associated with it. -void DefaultIOSystem::Close( IOStream* pFile) +void DefaultIOSystem::Close(IOStream* pFile) { delete pFile; } @@ -155,78 +138,56 @@ char DefaultIOSystem::getOsSeparator() const // ------------------------------------------------------------------------------------------------ // IOSystem default implementation (ComparePaths isn't a pure virtual function) -bool IOSystem::ComparePaths (const char* one, const char* second) const +bool IOSystem::ComparePaths(const char* one, const char* second) const { - return !ASSIMP_stricmp(one,second); + return !ASSIMP_stricmp(one, second); } // ------------------------------------------------------------------------------------------------ // Convert a relative path into an absolute path -inline static void MakeAbsolutePath (const char* in, char* _out) +inline static std::string MakeAbsolutePath(const char* in) { - ai_assert(in && _out); -#if defined( _MSC_VER ) || defined( __MINGW32__ ) -#ifndef WindowsStore - bool isUnicode = IsTextUnicode(in, static_cast<int>(strlen(in)), NULL) != 0; - if (isUnicode) { - wchar_t out16[PATHLIMIT]; - wchar_t in16[PATHLIMIT]; - MultiByteToWideChar(CP_UTF8, MB_PRECOMPOSED, in, -1, out16, PATHLIMIT); - wchar_t* ret = ::_wfullpath(out16, in16, PATHLIMIT); - if (ret) { - WideCharToMultiByte(CP_UTF8, MB_PRECOMPOSED, out16, -1, _out, PATHLIMIT, nullptr, nullptr); - } - if (!ret) { - // preserve the input path, maybe someone else is able to fix - // the path before it is accessed (e.g. our file system filter) - ASSIMP_LOG_WARN_F("Invalid path: ", std::string(in)); - strcpy(_out, in); - } - - } else { -#endif - char* ret = :: _fullpath(_out, in, PATHLIMIT); - if (!ret) { - // preserve the input path, maybe someone else is able to fix - // the path before it is accessed (e.g. our file system filter) - ASSIMP_LOG_WARN_F("Invalid path: ", std::string(in)); - strcpy(_out, in); - } -#ifndef WindowsStore + ai_assert(in); + std::string out; +#ifdef _WIN32 + wchar_t* ret = ::_wfullpath(nullptr, Utf8ToWide(in).c_str(), 0); + if (ret) { + out = WideToUtf8(ret); + free(ret); } -#endif #else - // use realpath - char* ret = realpath(in, _out); - if(!ret) { + char* ret = realpath(in, nullptr); + if (ret) { + out = ret; + free(ret); + } +#endif + if (!ret) { // preserve the input path, maybe someone else is able to fix // the path before it is accessed (e.g. our file system filter) ASSIMP_LOG_WARN_F("Invalid path: ", std::string(in)); - strcpy(_out,in); + out = in; } -#endif + return out; } // ------------------------------------------------------------------------------------------------ // DefaultIOSystem's more specialized implementation -bool DefaultIOSystem::ComparePaths (const char* one, const char* second) const +bool DefaultIOSystem::ComparePaths(const char* one, const char* second) const { // chances are quite good both paths are formatted identically, // so we can hopefully return here already - if( !ASSIMP_stricmp(one,second) ) + if (!ASSIMP_stricmp(one, second)) return true; - char temp1[PATHLIMIT]; - char temp2[PATHLIMIT]; - - MakeAbsolutePath (one, temp1); - MakeAbsolutePath (second, temp2); + std::string temp1 = MakeAbsolutePath(one); + std::string temp2 = MakeAbsolutePath(second); - return !ASSIMP_stricmp(temp1,temp2); + return !ASSIMP_stricmp(temp1, temp2); } // ------------------------------------------------------------------------------------------------ -std::string DefaultIOSystem::fileName( const std::string &path ) +std::string DefaultIOSystem::fileName(const std::string& path) { std::string ret = path; std::size_t last = ret.find_last_of("\\/"); @@ -235,16 +196,16 @@ std::string DefaultIOSystem::fileName( const std::string &path ) } // ------------------------------------------------------------------------------------------------ -std::string DefaultIOSystem::completeBaseName( const std::string &path ) +std::string DefaultIOSystem::completeBaseName(const std::string& path) { std::string ret = fileName(path); std::size_t pos = ret.find_last_of('.'); - if(pos != ret.npos) ret = ret.substr(0, pos); + if (pos != std::string::npos) ret = ret.substr(0, pos); return ret; } // ------------------------------------------------------------------------------------------------ -std::string DefaultIOSystem::absolutePath( const std::string &path ) +std::string DefaultIOSystem::absolutePath(const std::string& path) { std::string ret = path; std::size_t last = ret.find_last_of("\\/"); @@ -253,5 +214,3 @@ std::string DefaultIOSystem::absolutePath( const std::string &path ) } // ------------------------------------------------------------------------------------------------ - -#undef PATHLIMIT diff --git a/thirdparty/assimp/code/Common/Exporter.cpp b/thirdparty/assimp/code/Common/Exporter.cpp index 090b561ae0..4ce1a2bd80 100644 --- a/thirdparty/assimp/code/Common/Exporter.cpp +++ b/thirdparty/assimp/code/Common/Exporter.cpp @@ -102,6 +102,8 @@ void ExportSceneX3D(const char*, IOSystem*, const aiScene*, const ExportProperti void ExportSceneFBX(const char*, IOSystem*, const aiScene*, const ExportProperties*); void ExportSceneFBXA(const char*, IOSystem*, const aiScene*, const ExportProperties*); void ExportScene3MF( const char*, IOSystem*, const aiScene*, const ExportProperties* ); +void ExportSceneM3D(const char*, IOSystem*, const aiScene*, const ExportProperties*); +void ExportSceneA3D(const char*, IOSystem*, const aiScene*, const ExportProperties*); void ExportAssimp2Json(const char* , IOSystem*, const aiScene* , const Assimp::ExportProperties*); // ------------------------------------------------------------------------------------------------ @@ -179,6 +181,11 @@ Exporter::ExportFormatEntry gExporters[] = Exporter::ExportFormatEntry( "fbxa", "Autodesk FBX (ascii)", "fbx", &ExportSceneFBXA, 0 ), #endif +#ifndef ASSIMP_BUILD_NO_M3D_EXPORTER + Exporter::ExportFormatEntry( "m3d", "Model 3D (binary)", "m3d", &ExportSceneM3D, 0 ), + Exporter::ExportFormatEntry( "a3d", "Model 3D (ascii)", "m3d", &ExportSceneA3D, 0 ), +#endif + #ifndef ASSIMP_BUILD_NO_3MF_EXPORTER Exporter::ExportFormatEntry( "3mf", "The 3MF-File-Format", "3mf", &ExportScene3MF, 0 ), #endif @@ -316,34 +323,6 @@ const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const cha } // ------------------------------------------------------------------------------------------------ -bool IsVerboseFormat(const aiMesh* mesh) { - // avoid slow vector<bool> specialization - std::vector<unsigned int> seen(mesh->mNumVertices,0); - for(unsigned int i = 0; i < mesh->mNumFaces; ++i) { - const aiFace& f = mesh->mFaces[i]; - for(unsigned int j = 0; j < f.mNumIndices; ++j) { - if(++seen[f.mIndices[j]] == 2) { - // found a duplicate index - return false; - } - } - } - - return true; -} - -// ------------------------------------------------------------------------------------------------ -bool IsVerboseFormat(const aiScene* pScene) { - for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) { - if(!IsVerboseFormat(pScene->mMeshes[i])) { - return false; - } - } - - return true; -} - -// ------------------------------------------------------------------------------------------------ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing, const ExportProperties* pProperties) { ASSIMP_BEGIN_EXCEPTION_REGION(); @@ -352,7 +331,7 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c // format. They will likely not be aware that there is a flag in the scene to indicate // this, however. To avoid surprises and bug reports, we check for duplicates in // meshes upfront. - const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || IsVerboseFormat(pScene); + const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || MakeVerboseFormatProcess::IsVerboseFormat(pScene); pimpl->mProgressHandler->UpdateFileWrite(0, 4); @@ -472,7 +451,10 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c } ExportProperties emptyProperties; // Never pass NULL ExportProperties so Exporters don't have to worry. - exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProperties ? pProperties : &emptyProperties); + ExportProperties* pProp = pProperties ? (ExportProperties*)pProperties : &emptyProperties; + pProp->SetPropertyBool("bJoinIdenticalVertices", must_join_again); + exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp); + exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get(), pProp); pimpl->mProgressHandler->UpdateFileWrite(4, 4); } catch (DeadlyExportError& err) { diff --git a/thirdparty/assimp/code/Common/ImporterRegistry.cpp b/thirdparty/assimp/code/Common/ImporterRegistry.cpp index 32ac3b4168..b9f28f0356 100644 --- a/thirdparty/assimp/code/Common/ImporterRegistry.cpp +++ b/thirdparty/assimp/code/Common/ImporterRegistry.cpp @@ -197,6 +197,9 @@ corresponding preprocessor flag to selectively disable formats. #ifndef ASSIMP_BUILD_NO_MMD_IMPORTER # include "MMD/MMDImporter.h" #endif +#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER +# include "M3D/M3DImporter.h" +#endif #ifndef ASSIMP_BUILD_NO_STEP_IMPORTER # include "Importer/StepFile/StepFileImporter.h" #endif @@ -223,6 +226,9 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out) #if (!defined ASSIMP_BUILD_NO_3DS_IMPORTER) out.push_back( new Discreet3DSImporter()); #endif +#if (!defined ASSIMP_BUILD_NO_M3D_IMPORTER) + out.push_back( new M3DImporter()); +#endif #if (!defined ASSIMP_BUILD_NO_MD3_IMPORTER) out.push_back( new MD3Importer()); #endif diff --git a/thirdparty/assimp/code/Common/PostStepRegistry.cpp b/thirdparty/assimp/code/Common/PostStepRegistry.cpp index ef58f8ddfd..8ff4af0400 100644 --- a/thirdparty/assimp/code/Common/PostStepRegistry.cpp +++ b/thirdparty/assimp/code/Common/PostStepRegistry.cpp @@ -131,11 +131,15 @@ corresponding preprocessor flag to selectively disable steps. #if (!defined ASSIMP_BUILD_NO_GLOBALSCALE_PROCESS) # include "PostProcessing/ScaleProcess.h" #endif +#if (!defined ASSIMP_BUILD_NO_ARMATUREPOPULATE_PROCESS) +# include "PostProcessing/ArmaturePopulate.h" +#endif #if (!defined ASSIMP_BUILD_NO_GENBOUNDINGBOXES_PROCESS) # include "PostProcessing/GenBoundingBoxesProcess.h" #endif + namespace Assimp { // ------------------------------------------------------------------------------------------------ @@ -180,6 +184,9 @@ void GetPostProcessingStepInstanceList(std::vector< BaseProcess* >& out) #if (!defined ASSIMP_BUILD_NO_GLOBALSCALE_PROCESS) out.push_back( new ScaleProcess()); #endif +#if (!defined ASSIMP_BUILD_NO_ARMATUREPOPULATE_PROCESS) + out.push_back( new ArmaturePopulate()); +#endif #if (!defined ASSIMP_BUILD_NO_PRETRANSFORMVERTICES_PROCESS) out.push_back( new PretransformVertices()); #endif diff --git a/thirdparty/assimp/code/Common/SceneCombiner.cpp b/thirdparty/assimp/code/Common/SceneCombiner.cpp index e445bd7434..f7b13cc951 100644 --- a/thirdparty/assimp/code/Common/SceneCombiner.cpp +++ b/thirdparty/assimp/code/Common/SceneCombiner.cpp @@ -1091,6 +1091,35 @@ void SceneCombiner::Copy( aiMesh** _dest, const aiMesh* src ) { aiFace& f = dest->mFaces[i]; GetArrayCopy(f.mIndices,f.mNumIndices); } + + // make a deep copy of all blend shapes + CopyPtrArray(dest->mAnimMeshes, dest->mAnimMeshes, dest->mNumAnimMeshes); +} + +// ------------------------------------------------------------------------------------------------ +void SceneCombiner::Copy(aiAnimMesh** _dest, const aiAnimMesh* src) { + if (nullptr == _dest || nullptr == src) { + return; + } + + aiAnimMesh* dest = *_dest = new aiAnimMesh(); + + // get a flat copy + ::memcpy(dest, src, sizeof(aiAnimMesh)); + + // and reallocate all arrays + GetArrayCopy(dest->mVertices, dest->mNumVertices); + GetArrayCopy(dest->mNormals, dest->mNumVertices); + GetArrayCopy(dest->mTangents, dest->mNumVertices); + GetArrayCopy(dest->mBitangents, dest->mNumVertices); + + unsigned int n = 0; + while (dest->HasTextureCoords(n)) + GetArrayCopy(dest->mTextureCoords[n++], dest->mNumVertices); + + n = 0; + while (dest->HasVertexColors(n)) + GetArrayCopy(dest->mColors[n++], dest->mNumVertices); } // ------------------------------------------------------------------------------------------------ @@ -1167,6 +1196,7 @@ void SceneCombiner::Copy( aiAnimation** _dest, const aiAnimation* src ) { // and reallocate all arrays CopyPtrArray( dest->mChannels, src->mChannels, dest->mNumChannels ); + CopyPtrArray( dest->mMorphMeshChannels, src->mMorphMeshChannels, dest->mNumMorphMeshChannels ); } // ------------------------------------------------------------------------------------------------ @@ -1186,6 +1216,26 @@ void SceneCombiner::Copy(aiNodeAnim** _dest, const aiNodeAnim* src) { GetArrayCopy( dest->mRotationKeys, dest->mNumRotationKeys ); } +void SceneCombiner::Copy(aiMeshMorphAnim** _dest, const aiMeshMorphAnim* src) { + if ( nullptr == _dest || nullptr == src ) { + return; + } + + aiMeshMorphAnim* dest = *_dest = new aiMeshMorphAnim(); + + // get a flat copy + ::memcpy(dest,src,sizeof(aiMeshMorphAnim)); + + // and reallocate all arrays + GetArrayCopy( dest->mKeys, dest->mNumKeys ); + for (ai_uint i = 0; i < dest->mNumKeys;++i) { + dest->mKeys[i].mValues = new unsigned int[dest->mKeys[i].mNumValuesAndWeights]; + dest->mKeys[i].mWeights = new double[dest->mKeys[i].mNumValuesAndWeights]; + ::memcpy(dest->mKeys[i].mValues, src->mKeys[i].mValues, dest->mKeys[i].mNumValuesAndWeights * sizeof(unsigned int)); + ::memcpy(dest->mKeys[i].mWeights, src->mKeys[i].mWeights, dest->mKeys[i].mNumValuesAndWeights * sizeof(double)); + } +} + // ------------------------------------------------------------------------------------------------ void SceneCombiner::Copy( aiCamera** _dest,const aiCamera* src) { if ( nullptr == _dest || nullptr == src ) { diff --git a/thirdparty/assimp/code/Common/Version.cpp b/thirdparty/assimp/code/Common/Version.cpp index cc94340ac8..cf1da7d5ba 100644 --- a/thirdparty/assimp/code/Common/Version.cpp +++ b/thirdparty/assimp/code/Common/Version.cpp @@ -46,8 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <assimp/scene.h> #include "ScenePrivate.h" -static const unsigned int MajorVersion = 4; -static const unsigned int MinorVersion = 1; +#include "revision.h" // -------------------------------------------------------------------------------- // Legal information string - don't remove this. @@ -56,9 +55,9 @@ static const char* LEGAL_INFORMATION = "Open Asset Import Library (Assimp).\n" "A free C/C++ library to import various 3D file formats into applications\n\n" -"(c) 2008-2017, assimp team\n" +"(c) 2006-2019, assimp team\n" "License under the terms and conditions of the 3-clause BSD license\n" -"http://assimp.sourceforge.net\n" +"http://assimp.org\n" ; // ------------------------------------------------------------------------------------------------ @@ -70,13 +69,13 @@ ASSIMP_API const char* aiGetLegalString () { // ------------------------------------------------------------------------------------------------ // Get Assimp minor version ASSIMP_API unsigned int aiGetVersionMinor () { - return MinorVersion; + return VER_MINOR; } // ------------------------------------------------------------------------------------------------ // Get Assimp major version ASSIMP_API unsigned int aiGetVersionMajor () { - return MajorVersion; + return VER_MAJOR; } // ------------------------------------------------------------------------------------------------ @@ -104,9 +103,6 @@ ASSIMP_API unsigned int aiGetCompileFlags () { return flags; } -// include current build revision, which is even updated from time to time -- :-) -#include "revision.h" - // ------------------------------------------------------------------------------------------------ ASSIMP_API unsigned int aiGetVersionRevision() { return GitVersion; diff --git a/thirdparty/assimp/code/Common/scene.cpp b/thirdparty/assimp/code/Common/scene.cpp index 2acb348d81..d15619acff 100644 --- a/thirdparty/assimp/code/Common/scene.cpp +++ b/thirdparty/assimp/code/Common/scene.cpp @@ -44,23 +44,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. aiNode::aiNode() : mName("") -, mParent(NULL) +, mParent(nullptr) , mNumChildren(0) -, mChildren(NULL) +, mChildren(nullptr) , mNumMeshes(0) -, mMeshes(NULL) -, mMetaData(NULL) { +, mMeshes(nullptr) +, mMetaData(nullptr) { // empty } aiNode::aiNode(const std::string& name) : mName(name) -, mParent(NULL) +, mParent(nullptr) , mNumChildren(0) -, mChildren(NULL) +, mChildren(nullptr) , mNumMeshes(0) -, mMeshes(NULL) -, mMetaData(NULL) { +, mMeshes(nullptr) +, mMetaData(nullptr) { // empty } @@ -68,7 +68,7 @@ aiNode::aiNode(const std::string& name) aiNode::~aiNode() { // delete all children recursively // to make sure we won't crash if the data is invalid ... - if (mChildren && mNumChildren) + if (mNumChildren && mChildren) { for (unsigned int a = 0; a < mNumChildren; a++) delete mChildren[a]; diff --git a/thirdparty/assimp/code/FBX/FBXCompileConfig.h b/thirdparty/assimp/code/FBX/FBXCompileConfig.h index 3a3841fa5b..03536a1823 100644 --- a/thirdparty/assimp/code/FBX/FBXCompileConfig.h +++ b/thirdparty/assimp/code/FBX/FBXCompileConfig.h @@ -47,6 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define INCLUDED_AI_FBX_COMPILECONFIG_H #include <map> +#include <set> // #if _MSC_VER > 1500 || (defined __GNUC___) @@ -54,16 +55,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # else # define fbx_unordered_map map # define fbx_unordered_multimap multimap +# define fbx_unordered_set set +# define fbx_unordered_multiset multiset #endif #ifdef ASSIMP_FBX_USE_UNORDERED_MULTIMAP # include <unordered_map> +# include <unordered_set> # if _MSC_VER > 1600 # define fbx_unordered_map unordered_map # define fbx_unordered_multimap unordered_multimap +# define fbx_unordered_set unordered_set +# define fbx_unordered_multiset unordered_multiset # else # define fbx_unordered_map tr1::unordered_map # define fbx_unordered_multimap tr1::unordered_multimap +# define fbx_unordered_set tr1::unordered_set +# define fbx_unordered_multiset tr1::unordered_multiset # endif #endif diff --git a/thirdparty/assimp/code/FBX/FBXConverter.cpp b/thirdparty/assimp/code/FBX/FBXConverter.cpp index 9bd970098e..d8a22d9f74 100644 --- a/thirdparty/assimp/code/FBX/FBXConverter.cpp +++ b/thirdparty/assimp/code/FBX/FBXConverter.cpp @@ -55,6 +55,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "FBXImporter.h" #include <assimp/StringComparison.h> +#include <assimp/MathFunctions.h> #include <assimp/scene.h> @@ -67,7 +68,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <sstream> #include <iomanip> #include <cstdint> - +#include <iostream> +#include <stdlib.h> namespace Assimp { namespace FBX { @@ -76,9 +78,9 @@ namespace Assimp { #define MAGIC_NODE_TAG "_$AssimpFbx$" -#define CONVERT_FBX_TIME(time) static_cast<double>(time) / 46186158000L +#define CONVERT_FBX_TIME(time) static_cast<double>(time) / 46186158000LL - FBXConverter::FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones, FbxUnit unit ) + FBXConverter::FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones ) : defaultMaterialIndex() , lights() , cameras() @@ -90,12 +92,19 @@ namespace Assimp { , mNodeNames() , anim_fps() , out(out) - , doc(doc) - , mCurrentUnit(FbxUnit::cm) { + , doc(doc) { // animations need to be converted first since this will // populate the node_anim_chain_bits map, which is needed // to determine which nodes need to be generated. ConvertAnimations(); + // Embedded textures in FBX could be connected to nothing but to itself, + // for instance Texture -> Video connection only but not to the main graph, + // The idea here is to traverse all objects to find these Textures and convert them, + // so later during material conversion it will find converted texture in the textures_converted array. + if (doc.Settings().readTextures) + { + ConvertOrphantEmbeddedTextures(); + } ConvertRootNode(); if (doc.Settings().readAllMaterials) { @@ -145,7 +154,7 @@ namespace Assimp { out->mRootNode->mName.Set(unique_name); // root has ID 0 - ConvertNodes(0L, *out->mRootNode); + ConvertNodes(0L, out->mRootNode, out->mRootNode); } static std::string getAncestorBaseName(const aiNode* node) @@ -179,8 +188,11 @@ namespace Assimp { GetUniqueName(original_name, unique_name); return unique_name; } - - void FBXConverter::ConvertNodes(uint64_t id, aiNode& parent, const aiMatrix4x4& parent_transform) { + /// todo: pre-build node hierarchy + /// todo: get bone from stack + /// todo: make map of aiBone* to aiNode* + /// then update convert clusters to the new format + void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node) { const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(id, "Model"); std::vector<aiNode*> nodes; @@ -191,62 +203,69 @@ namespace Assimp { try { for (const Connection* con : conns) { - // ignore object-property links if (con->PropertyName().length()) { - continue; + // really important we document why this is ignored. + FBXImporter::LogInfo("ignoring property link - no docs on why this is ignored"); + continue; //? } + // convert connection source object into Object base class const Object* const object = con->SourceObject(); if (nullptr == object) { - FBXImporter::LogWarn("failed to convert source object for Model link"); + FBXImporter::LogError("failed to convert source object for Model link"); continue; } + // FBX Model::Cube, Model::Bone001, etc elements + // This detects if we can cast the object into this model structure. const Model* const model = dynamic_cast<const Model*>(object); if (nullptr != model) { nodes_chain.clear(); post_nodes_chain.clear(); - aiMatrix4x4 new_abs_transform = parent_transform; - - std::string unique_name = MakeUniqueNodeName(model, parent); - + aiMatrix4x4 new_abs_transform = parent->mTransformation; + std::string node_name = FixNodeName(model->Name()); // even though there is only a single input node, the design of // assimp (or rather: the complicated transformation chain that // is employed by fbx) means that we may need multiple aiNode's // to represent a fbx node's transformation. - const bool need_additional_node = GenerateTransformationNodeChain(*model, unique_name, nodes_chain, post_nodes_chain); + + // generate node transforms - this includes pivot data + // if need_additional_node is true then you t + const bool need_additional_node = GenerateTransformationNodeChain(*model, node_name, nodes_chain, post_nodes_chain); + + // assert that for the current node we must have at least a single transform ai_assert(nodes_chain.size()); if (need_additional_node) { - nodes_chain.push_back(new aiNode(unique_name)); + nodes_chain.push_back(new aiNode(node_name)); } //setup metadata on newest node SetupNodeMetadata(*model, *nodes_chain.back()); // link all nodes in a row - aiNode* last_parent = &parent; - for (aiNode* prenode : nodes_chain) { - ai_assert(prenode); + aiNode* last_parent = parent; + for (aiNode* child : nodes_chain) { + ai_assert(child); - if (last_parent != &parent) { + if (last_parent != parent) { last_parent->mNumChildren = 1; last_parent->mChildren = new aiNode*[1]; - last_parent->mChildren[0] = prenode; + last_parent->mChildren[0] = child; } - prenode->mParent = last_parent; - last_parent = prenode; + child->mParent = last_parent; + last_parent = child; - new_abs_transform *= prenode->mTransformation; + new_abs_transform *= child->mTransformation; } // attach geometry - ConvertModel(*model, *nodes_chain.back(), new_abs_transform); + ConvertModel(*model, nodes_chain.back(), root_node, new_abs_transform); // check if there will be any child nodes const std::vector<const Connection*>& child_conns @@ -258,7 +277,7 @@ namespace Assimp { for (aiNode* postnode : post_nodes_chain) { ai_assert(postnode); - if (last_parent != &parent) { + if (last_parent != parent) { last_parent->mNumChildren = 1; last_parent->mChildren = new aiNode*[1]; last_parent->mChildren[0] = postnode; @@ -280,15 +299,15 @@ namespace Assimp { ); } - // attach sub-nodes (if any) - ConvertNodes(model->ID(), *last_parent, new_abs_transform); + // recursion call - child nodes + ConvertNodes(model->ID(), last_parent, root_node); if (doc.Settings().readLights) { - ConvertLights(*model, unique_name); + ConvertLights(*model, node_name); } if (doc.Settings().readCameras) { - ConvertCameras(*model, unique_name); + ConvertCameras(*model, node_name); } nodes.push_back(nodes_chain.front()); @@ -297,11 +316,17 @@ namespace Assimp { } if (nodes.size()) { - parent.mChildren = new aiNode*[nodes.size()](); - parent.mNumChildren = static_cast<unsigned int>(nodes.size()); + parent->mChildren = new aiNode*[nodes.size()](); + parent->mNumChildren = static_cast<unsigned int>(nodes.size()); - std::swap_ranges(nodes.begin(), nodes.end(), parent.mChildren); + std::swap_ranges(nodes.begin(), nodes.end(), parent->mChildren); } + else + { + parent->mNumChildren = 0; + parent->mChildren = nullptr; + } + } catch (std::exception&) { Util::delete_fun<aiNode> deleter; @@ -554,7 +579,7 @@ namespace Assimp { return; } - const float angle_epsilon = 1e-6f; + const float angle_epsilon = Math::getEpsilon<float>(); out = aiMatrix4x4(); @@ -695,7 +720,7 @@ namespace Assimp { std::fill_n(chain, static_cast<unsigned int>(TransformationComp_MAXIMUM), aiMatrix4x4()); // generate transformation matrices for all the different transformation components - const float zero_epsilon = 1e-6f; + const float zero_epsilon = Math::getEpsilon<float>(); const aiVector3D all_ones(1.0f, 1.0f, 1.0f); const aiVector3D& PreRotation = PropertyGet<aiVector3D>(props, "PreRotation", ok); @@ -803,7 +828,7 @@ namespace Assimp { // is_complex needs to be consistent with NeedsComplexTransformationChain() // or the interplay between this code and the animation converter would // not be guaranteed. - ai_assert(NeedsComplexTransformationChain(model) == ((chainBits & chainMaskComplex) != 0)); + //ai_assert(NeedsComplexTransformationChain(model) == ((chainBits & chainMaskComplex) != 0)); // now, if we have more than just Translation, Scaling and Rotation, // we need to generate a full node chain to accommodate for assimp's @@ -905,7 +930,8 @@ namespace Assimp { } } - void FBXConverter::ConvertModel(const Model& model, aiNode& nd, const aiMatrix4x4& node_global_transform) + void FBXConverter::ConvertModel(const Model &model, aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform) { const std::vector<const Geometry*>& geos = model.GetGeometry(); @@ -917,11 +943,12 @@ namespace Assimp { const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*>(geo); const LineGeometry* const line = dynamic_cast<const LineGeometry*>(geo); if (mesh) { - const std::vector<unsigned int>& indices = ConvertMesh(*mesh, model, node_global_transform, nd); + const std::vector<unsigned int>& indices = ConvertMesh(*mesh, model, parent, root_node, + absolute_transform); std::copy(indices.begin(), indices.end(), std::back_inserter(meshes)); } else if (line) { - const std::vector<unsigned int>& indices = ConvertLine(*line, model, node_global_transform, nd); + const std::vector<unsigned int>& indices = ConvertLine(*line, model, parent, root_node); std::copy(indices.begin(), indices.end(), std::back_inserter(meshes)); } else { @@ -930,15 +957,16 @@ namespace Assimp { } if (meshes.size()) { - nd.mMeshes = new unsigned int[meshes.size()](); - nd.mNumMeshes = static_cast<unsigned int>(meshes.size()); + parent->mMeshes = new unsigned int[meshes.size()](); + parent->mNumMeshes = static_cast<unsigned int>(meshes.size()); - std::swap_ranges(meshes.begin(), meshes.end(), nd.mMeshes); + std::swap_ranges(meshes.begin(), meshes.end(), parent->mMeshes); } } - std::vector<unsigned int> FBXConverter::ConvertMesh(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd) + std::vector<unsigned int> + FBXConverter::ConvertMesh(const MeshGeometry &mesh, const Model &model, aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform) { std::vector<unsigned int> temp; @@ -962,18 +990,18 @@ namespace Assimp { const MatIndexArray::value_type base = mindices[0]; for (MatIndexArray::value_type index : mindices) { if (index != base) { - return ConvertMeshMultiMaterial(mesh, model, node_global_transform, nd); + return ConvertMeshMultiMaterial(mesh, model, parent, root_node, absolute_transform); } } } // faster code-path, just copy the data - temp.push_back(ConvertMeshSingleMaterial(mesh, model, node_global_transform, nd)); + temp.push_back(ConvertMeshSingleMaterial(mesh, model, absolute_transform, parent, root_node)); return temp; } std::vector<unsigned int> FBXConverter::ConvertLine(const LineGeometry& line, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd) + aiNode *parent, aiNode *root_node) { std::vector<unsigned int> temp; @@ -984,7 +1012,7 @@ namespace Assimp { return temp; } - aiMesh* const out_mesh = SetupEmptyMesh(line, nd); + aiMesh* const out_mesh = SetupEmptyMesh(line, root_node); out_mesh->mPrimitiveTypes |= aiPrimitiveType_LINE; // copy vertices @@ -1019,7 +1047,7 @@ namespace Assimp { return temp; } - aiMesh* FBXConverter::SetupEmptyMesh(const Geometry& mesh, aiNode& nd) + aiMesh* FBXConverter::SetupEmptyMesh(const Geometry& mesh, aiNode *parent) { aiMesh* const out_mesh = new aiMesh(); meshes.push_back(out_mesh); @@ -1036,17 +1064,18 @@ namespace Assimp { } else { - out_mesh->mName = nd.mName; + out_mesh->mName = parent->mName; } return out_mesh; } - unsigned int FBXConverter::ConvertMeshSingleMaterial(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd) + unsigned int FBXConverter::ConvertMeshSingleMaterial(const MeshGeometry &mesh, const Model &model, + const aiMatrix4x4 &absolute_transform, aiNode *parent, + aiNode *root_node) { const MatIndexArray& mindices = mesh.GetMaterialIndices(); - aiMesh* const out_mesh = SetupEmptyMesh(mesh, nd); + aiMesh* const out_mesh = SetupEmptyMesh(mesh, parent); const std::vector<aiVector3D>& vertices = mesh.GetVertices(); const std::vector<unsigned int>& faces = mesh.GetFaceIndexCounts(); @@ -1113,7 +1142,7 @@ namespace Assimp { binormals = &tempBinormals; } else { - binormals = NULL; + binormals = nullptr; } } @@ -1163,8 +1192,9 @@ namespace Assimp { ConvertMaterialForMesh(out_mesh, model, mesh, mindices[0]); } - if (doc.Settings().readWeights && mesh.DeformerSkin() != NULL) { - ConvertWeights(out_mesh, model, mesh, node_global_transform, NO_MATERIAL_SEPARATION); + if (doc.Settings().readWeights && mesh.DeformerSkin() != nullptr) { + ConvertWeights(out_mesh, model, mesh, absolute_transform, parent, root_node, NO_MATERIAL_SEPARATION, + nullptr); } std::vector<aiAnimMesh*> animMeshes; @@ -1209,8 +1239,10 @@ namespace Assimp { return static_cast<unsigned int>(meshes.size() - 1); } - std::vector<unsigned int> FBXConverter::ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd) + std::vector<unsigned int> + FBXConverter::ConvertMeshMultiMaterial(const MeshGeometry &mesh, const Model &model, aiNode *parent, + aiNode *root_node, + const aiMatrix4x4 &absolute_transform) { const MatIndexArray& mindices = mesh.GetMaterialIndices(); ai_assert(mindices.size()); @@ -1221,7 +1253,7 @@ namespace Assimp { for (MatIndexArray::value_type index : mindices) { if (had.find(index) == had.end()) { - indices.push_back(ConvertMeshMultiMaterial(mesh, model, index, node_global_transform, nd)); + indices.push_back(ConvertMeshMultiMaterial(mesh, model, index, parent, root_node, absolute_transform)); had.insert(index); } } @@ -1229,18 +1261,18 @@ namespace Assimp { return indices; } - unsigned int FBXConverter::ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model, - MatIndexArray::value_type index, - const aiMatrix4x4& node_global_transform, - aiNode& nd) + unsigned int FBXConverter::ConvertMeshMultiMaterial(const MeshGeometry &mesh, const Model &model, + MatIndexArray::value_type index, + aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform) { - aiMesh* const out_mesh = SetupEmptyMesh(mesh, nd); + aiMesh* const out_mesh = SetupEmptyMesh(mesh, parent); const MatIndexArray& mindices = mesh.GetMaterialIndices(); const std::vector<aiVector3D>& vertices = mesh.GetVertices(); const std::vector<unsigned int>& faces = mesh.GetFaceIndexCounts(); - const bool process_weights = doc.Settings().readWeights && mesh.DeformerSkin() != NULL; + const bool process_weights = doc.Settings().readWeights && mesh.DeformerSkin() != nullptr; unsigned int count_faces = 0; unsigned int count_vertices = 0; @@ -1300,7 +1332,7 @@ namespace Assimp { binormals = &tempBinormals; } else { - binormals = NULL; + binormals = nullptr; } } @@ -1399,7 +1431,7 @@ namespace Assimp { ConvertMaterialForMesh(out_mesh, model, mesh, index); if (process_weights) { - ConvertWeights(out_mesh, model, mesh, node_global_transform, index, &reverseMapping); + ConvertWeights(out_mesh, model, mesh, absolute_transform, parent, root_node, index, &reverseMapping); } std::vector<aiAnimMesh*> animMeshes; @@ -1449,10 +1481,10 @@ namespace Assimp { return static_cast<unsigned int>(meshes.size() - 1); } - void FBXConverter::ConvertWeights(aiMesh* out, const Model& model, const MeshGeometry& geo, - const aiMatrix4x4& node_global_transform, - unsigned int materialIndex, - std::vector<unsigned int>* outputVertStartIndices) + void FBXConverter::ConvertWeights(aiMesh *out, const Model &model, const MeshGeometry &geo, + const aiMatrix4x4 &absolute_transform, + aiNode *parent, aiNode *root_node, unsigned int materialIndex, + std::vector<unsigned int> *outputVertStartIndices) { ai_assert(geo.DeformerSkin()); @@ -1463,13 +1495,12 @@ namespace Assimp { const Skin& sk = *geo.DeformerSkin(); std::vector<aiBone*> bones; - bones.reserve(sk.Clusters().size()); const bool no_mat_check = materialIndex == NO_MATERIAL_SEPARATION; ai_assert(no_mat_check || outputVertStartIndices); try { - + // iterate over the sub deformers for (const Cluster* cluster : sk.Clusters()) { ai_assert(cluster); @@ -1483,15 +1514,16 @@ namespace Assimp { index_out_indices.clear(); out_indices.clear(); + // now check if *any* of these weights is contained in the output mesh, // taking notes so we don't need to do it twice. for (WeightIndexArray::value_type index : indices) { unsigned int count = 0; const unsigned int* const out_idx = geo.ToOutputVertexIndex(index, count); - // ToOutputVertexIndex only returns NULL if index is out of bounds + // ToOutputVertexIndex only returns nullptr if index is out of bounds // which should never happen - ai_assert(out_idx != NULL); + ai_assert(out_idx != nullptr); index_out_indices.push_back(no_index_sentinel); count_out_indices.push_back(0); @@ -1520,68 +1552,107 @@ namespace Assimp { } } } - + // if we found at least one, generate the output bones // XXX this could be heavily simplified by collecting the bone // data in a single step. - ConvertCluster(bones, model, *cluster, out_indices, index_out_indices, - count_out_indices, node_global_transform); + ConvertCluster(bones, cluster, out_indices, index_out_indices, + count_out_indices, absolute_transform, parent, root_node); } + + bone_map.clear(); } - catch (std::exception&) { + catch (std::exception&e) { std::for_each(bones.begin(), bones.end(), Util::delete_fun<aiBone>()); throw; } if (bones.empty()) { + out->mBones = nullptr; + out->mNumBones = 0; return; - } - - out->mBones = new aiBone*[bones.size()](); - out->mNumBones = static_cast<unsigned int>(bones.size()); + } else { + out->mBones = new aiBone *[bones.size()](); + out->mNumBones = static_cast<unsigned int>(bones.size()); - std::swap_ranges(bones.begin(), bones.end(), out->mBones); + std::swap_ranges(bones.begin(), bones.end(), out->mBones); + } } - void FBXConverter::ConvertCluster(std::vector<aiBone*>& bones, const Model& /*model*/, const Cluster& cl, - std::vector<size_t>& out_indices, - std::vector<size_t>& index_out_indices, - std::vector<size_t>& count_out_indices, - const aiMatrix4x4& node_global_transform) + const aiNode* FBXConverter::GetNodeByName( const aiString& name, aiNode *current_node ) { + aiNode * iter = current_node; + //printf("Child count: %d", iter->mNumChildren); + return iter; + } - aiBone* const bone = new aiBone(); - bones.push_back(bone); + void FBXConverter::ConvertCluster(std::vector<aiBone *> &local_mesh_bones, const Cluster *cl, + std::vector<size_t> &out_indices, std::vector<size_t> &index_out_indices, + std::vector<size_t> &count_out_indices, const aiMatrix4x4 &absolute_transform, + aiNode *parent, aiNode *root_node) { + ai_assert(cl); // make sure cluster valid + std::string deformer_name = cl->TargetNode()->Name(); + aiString bone_name = aiString(FixNodeName(deformer_name)); - bone->mName = FixNodeName(cl.TargetNode()->Name()); + aiBone *bone = nullptr; - bone->mOffsetMatrix = cl.TransformLink(); - bone->mOffsetMatrix.Inverse(); + if (bone_map.count(deformer_name)) { + std::cout << "retrieved bone from lookup " << bone_name.C_Str() << ". Deformer: " << deformer_name + << std::endl; + bone = bone_map[deformer_name]; + } else { + std::cout << "created new bone " << bone_name.C_Str() << ". Deformer: " << deformer_name << std::endl; + bone = new aiBone(); + bone->mName = bone_name; - bone->mOffsetMatrix = bone->mOffsetMatrix * node_global_transform; + // store local transform link for post processing + bone->mOffsetMatrix = cl->TransformLink(); + bone->mOffsetMatrix.Inverse(); - bone->mNumWeights = static_cast<unsigned int>(out_indices.size()); - aiVertexWeight* cursor = bone->mWeights = new aiVertexWeight[out_indices.size()]; + aiMatrix4x4 matrix = (aiMatrix4x4)absolute_transform; - const size_t no_index_sentinel = std::numeric_limits<size_t>::max(); - const WeightArray& weights = cl.GetWeights(); + bone->mOffsetMatrix = bone->mOffsetMatrix * matrix; // * mesh_offset - const size_t c = index_out_indices.size(); - for (size_t i = 0; i < c; ++i) { - const size_t index_index = index_out_indices[i]; - if (index_index == no_index_sentinel) { - continue; - } + // + // Now calculate the aiVertexWeights + // + + aiVertexWeight *cursor = nullptr; + + bone->mNumWeights = static_cast<unsigned int>(out_indices.size()); + cursor = bone->mWeights = new aiVertexWeight[out_indices.size()]; - const size_t cc = count_out_indices[i]; - for (size_t j = 0; j < cc; ++j) { - aiVertexWeight& out_weight = *cursor++; + const size_t no_index_sentinel = std::numeric_limits<size_t>::max(); + const WeightArray& weights = cl->GetWeights(); - out_weight.mVertexId = static_cast<unsigned int>(out_indices[index_index + j]); - out_weight.mWeight = weights[i]; + const size_t c = index_out_indices.size(); + for (size_t i = 0; i < c; ++i) { + const size_t index_index = index_out_indices[i]; + + if (index_index == no_index_sentinel) { + continue; + } + + const size_t cc = count_out_indices[i]; + for (size_t j = 0; j < cc; ++j) { + // cursor runs from first element relative to the start + // or relative to the start of the next indexes. + aiVertexWeight& out_weight = *cursor++; + + out_weight.mVertexId = static_cast<unsigned int>(out_indices[index_index + j]); + out_weight.mWeight = weights[i]; + } } + + bone_map.insert(std::pair<const std::string, aiBone *>(deformer_name, bone)); } + + std::cout << "bone research: Indicies size: " << out_indices.size() << std::endl; + + // lookup must be populated in case something goes wrong + // this also allocates bones to mesh instance outside + local_mesh_bones.push_back(bone); } void FBXConverter::ConvertMaterialForMesh(aiMesh* out, const Model& model, const MeshGeometry& geo, @@ -1711,7 +1782,7 @@ namespace Assimp { bool textureReady = false; //tells if our texture is ready (if it was loaded or if it was found) unsigned int index; - VideoMap::const_iterator it = textures_converted.find(media); + VideoMap::const_iterator it = textures_converted.find(*media); if (it != textures_converted.end()) { index = (*it).second; textureReady = true; @@ -1719,7 +1790,7 @@ namespace Assimp { else { if (media->ContentLength() > 0) { index = ConvertVideo(*media); - textures_converted[media] = index; + textures_converted[*media] = index; textureReady = true; } } @@ -2002,6 +2073,21 @@ namespace Assimp { TrySetTextureProperties(out_mat, textures, "Maya|SpecularTexture", aiTextureType_SPECULAR, mesh); TrySetTextureProperties(out_mat, textures, "Maya|FalloffTexture", aiTextureType_OPACITY, mesh); TrySetTextureProperties(out_mat, textures, "Maya|ReflectionMapTexture", aiTextureType_REFLECTION, mesh); + + // Maya PBR + TrySetTextureProperties(out_mat, textures, "Maya|baseColor|file", aiTextureType_BASE_COLOR, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|normalCamera|file", aiTextureType_NORMAL_CAMERA, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|emissionColor|file", aiTextureType_EMISSION_COLOR, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|metalness|file", aiTextureType_METALNESS, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|diffuseRoughness|file", aiTextureType_DIFFUSE_ROUGHNESS, mesh); + + // Maya stingray + TrySetTextureProperties(out_mat, textures, "Maya|TEX_color_map|file", aiTextureType_BASE_COLOR, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|TEX_normal_map|file", aiTextureType_NORMAL_CAMERA, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|TEX_emissive_map|file", aiTextureType_EMISSION_COLOR, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|TEX_metallic_map|file", aiTextureType_METALNESS, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|TEX_roughness_map|file", aiTextureType_DIFFUSE_ROUGHNESS, mesh); + TrySetTextureProperties(out_mat, textures, "Maya|TEX_ao_map|file", aiTextureType_AMBIENT_OCCLUSION, mesh); } void FBXConverter::SetTextureProperties(aiMaterial* out_mat, const LayeredTextureMap& layeredTextures, const MeshGeometry* const mesh) @@ -2228,13 +2314,13 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa if (media != nullptr && media->ContentLength() > 0) { unsigned int index; - VideoMap::const_iterator it = textures_converted.find(media); + VideoMap::const_iterator it = textures_converted.find(*media); if (it != textures_converted.end()) { index = (*it).second; } else { index = ConvertVideo(*media); - textures_converted[media] = index; + textures_converted[*media] = index; } // setup texture reference string (copied from ColladaLoader::FindFilenameForEffectTexture) @@ -2662,7 +2748,7 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa // sanity check whether the input is ok static void validateAnimCurveNodes(const std::vector<const AnimationCurveNode*>& curves, bool strictMode) { - const Object* target(NULL); + const Object* target(nullptr); for (const AnimationCurveNode* node : curves) { if (!target) { target = node->Target(); @@ -2693,7 +2779,7 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa #ifdef ASSIMP_BUILD_DEBUG validateAnimCurveNodes(curves, doc.Settings().strictMode); #endif - const AnimationCurveNode* curve_node = NULL; + const AnimationCurveNode* curve_node = nullptr; for (const AnimationCurveNode* node : curves) { ai_assert(node); @@ -2953,7 +3039,7 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa TransformationCompDefaultValue(comp) ); - const float epsilon = 1e-6f; + const float epsilon = Math::getEpsilon<float>(); return (dyn_val - static_val).SquareLength() < epsilon; } @@ -3541,7 +3627,7 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa ai_assert(!out->mMeshes); ai_assert(!out->mNumMeshes); - // note: the trailing () ensures initialization with NULL - not + // note: the trailing () ensures initialization with nullptr - not // many C++ users seem to know this, so pointing it out to avoid // confusion why this code works. @@ -3588,10 +3674,51 @@ void FBXConverter::SetShadingPropertiesRaw(aiMaterial* out_mat, const PropertyTa } } + void FBXConverter::ConvertOrphantEmbeddedTextures() + { + // in C++14 it could be: + // for (auto&& [id, object] : objects) + for (auto&& id_and_object : doc.Objects()) + { + auto&& id = std::get<0>(id_and_object); + auto&& object = std::get<1>(id_and_object); + // If an object doesn't have parent + if (doc.ConnectionsBySource().count(id) == 0) + { + const Texture* realTexture = nullptr; + try + { + const auto& element = object->GetElement(); + const Token& key = element.KeyToken(); + const char* obtype = key.begin(); + const size_t length = static_cast<size_t>(key.end() - key.begin()); + if (strncmp(obtype, "Texture", length) == 0) + { + const Texture* texture = static_cast<const Texture*>(object->Get()); + if (texture->Media() && texture->Media()->ContentLength() > 0) + { + realTexture = texture; + } + } + } + catch (...) + { + // do nothing + } + if (realTexture) + { + const Video* media = realTexture->Media(); + unsigned int index = ConvertVideo(*media); + textures_converted[*media] = index; + } + } + } + } + // ------------------------------------------------------------------------------------------------ - void ConvertToAssimpScene(aiScene* out, const Document& doc, bool removeEmptyBones, FbxUnit unit) + void ConvertToAssimpScene(aiScene* out, const Document& doc, bool removeEmptyBones) { - FBXConverter converter(out, doc, removeEmptyBones, unit); + FBXConverter converter(out, doc, removeEmptyBones); } } // !FBX diff --git a/thirdparty/assimp/code/FBX/FBXConverter.h b/thirdparty/assimp/code/FBX/FBXConverter.h index b458627392..46693bdca6 100644 --- a/thirdparty/assimp/code/FBX/FBXConverter.h +++ b/thirdparty/assimp/code/FBX/FBXConverter.h @@ -76,23 +76,13 @@ namespace Assimp { namespace FBX { class Document; - -enum class FbxUnit { - cm = 0, - m, - km, - NumUnits, - - Undefined -}; - /** * Convert a FBX #Document to #aiScene * @param out Empty scene to be populated * @param doc Parsed FBX document * @param removeEmptyBones Will remove bones, which do not have any references to vertices. */ -void ConvertToAssimpScene(aiScene* out, const Document& doc, bool removeEmptyBones, FbxUnit unit); +void ConvertToAssimpScene(aiScene* out, const Document& doc, bool removeEmptyBones); /** Dummy class to encapsulate the conversion process */ class FBXConverter { @@ -123,7 +113,7 @@ public: }; public: - FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones, FbxUnit unit); + FBXConverter(aiScene* out, const Document& doc, bool removeEmptyBones); ~FBXConverter(); private: @@ -133,7 +123,7 @@ private: // ------------------------------------------------------------------------------------------------ // collect and assign child nodes - void ConvertNodes(uint64_t id, aiNode& parent, const aiMatrix4x4& parent_transform = aiMatrix4x4()); + void ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node); // ------------------------------------------------------------------------------------------------ void ConvertLights(const Model& model, const std::string &orig_name ); @@ -189,32 +179,35 @@ private: void SetupNodeMetadata(const Model& model, aiNode& nd); // ------------------------------------------------------------------------------------------------ - void ConvertModel(const Model& model, aiNode& nd, const aiMatrix4x4& node_global_transform); + void ConvertModel(const Model &model, aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform); // ------------------------------------------------------------------------------------------------ // MeshGeometry -> aiMesh, return mesh index + 1 or 0 if the conversion failed - std::vector<unsigned int> ConvertMesh(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd); + std::vector<unsigned int> + ConvertMesh(const MeshGeometry &mesh, const Model &model, aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform); // ------------------------------------------------------------------------------------------------ std::vector<unsigned int> ConvertLine(const LineGeometry& line, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd); + aiNode *parent, aiNode *root_node); // ------------------------------------------------------------------------------------------------ - aiMesh* SetupEmptyMesh(const Geometry& mesh, aiNode& nd); + aiMesh* SetupEmptyMesh(const Geometry& mesh, aiNode *parent); // ------------------------------------------------------------------------------------------------ - unsigned int ConvertMeshSingleMaterial(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd); + unsigned int ConvertMeshSingleMaterial(const MeshGeometry &mesh, const Model &model, + const aiMatrix4x4 &absolute_transform, aiNode *parent, + aiNode *root_node); // ------------------------------------------------------------------------------------------------ - std::vector<unsigned int> ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model, - const aiMatrix4x4& node_global_transform, aiNode& nd); + std::vector<unsigned int> + ConvertMeshMultiMaterial(const MeshGeometry &mesh, const Model &model, aiNode *parent, aiNode *root_node, + const aiMatrix4x4 &absolute_transform); // ------------------------------------------------------------------------------------------------ - unsigned int ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model, - MatIndexArray::value_type index, - const aiMatrix4x4& node_global_transform, aiNode& nd); + unsigned int ConvertMeshMultiMaterial(const MeshGeometry &mesh, const Model &model, MatIndexArray::value_type index, + aiNode *parent, aiNode *root_node, const aiMatrix4x4 &absolute_transform); // ------------------------------------------------------------------------------------------------ static const unsigned int NO_MATERIAL_SEPARATION = /* std::numeric_limits<unsigned int>::max() */ @@ -227,17 +220,17 @@ private: * - outputVertStartIndices is only used when a material index is specified, it gives for * each output vertex the DOM index it maps to. */ - void ConvertWeights(aiMesh* out, const Model& model, const MeshGeometry& geo, - const aiMatrix4x4& node_global_transform = aiMatrix4x4(), - unsigned int materialIndex = NO_MATERIAL_SEPARATION, - std::vector<unsigned int>* outputVertStartIndices = NULL); - + void ConvertWeights(aiMesh *out, const Model &model, const MeshGeometry &geo, const aiMatrix4x4 &absolute_transform, + aiNode *parent = NULL, aiNode *root_node = NULL, + unsigned int materialIndex = NO_MATERIAL_SEPARATION, + std::vector<unsigned int> *outputVertStartIndices = NULL); + // lookup + static const aiNode* GetNodeByName( const aiString& name, aiNode *current_node ); // ------------------------------------------------------------------------------------------------ - void ConvertCluster(std::vector<aiBone*>& bones, const Model& /*model*/, const Cluster& cl, - std::vector<size_t>& out_indices, - std::vector<size_t>& index_out_indices, - std::vector<size_t>& count_out_indices, - const aiMatrix4x4& node_global_transform); + void ConvertCluster(std::vector<aiBone *> &local_mesh_bones, const Cluster *cl, + std::vector<size_t> &out_indices, std::vector<size_t> &index_out_indices, + std::vector<size_t> &count_out_indices, const aiMatrix4x4 &absolute_transform, + aiNode *parent, aiNode *root_node); // ------------------------------------------------------------------------------------------------ void ConvertMaterialForMesh(aiMesh* out, const Model& model, const MeshGeometry& geo, @@ -434,6 +427,10 @@ private: // copy generated meshes, animations, lights, cameras and textures to the output scene void TransferDataToScene(); + // ------------------------------------------------------------------------------------------------ + // FBX file could have embedded textures not connected to anything + void ConvertOrphantEmbeddedTextures(); + private: // 0: not assigned yet, others: index is value - 1 unsigned int defaultMaterialIndex; @@ -445,28 +442,47 @@ private: std::vector<aiCamera*> cameras; std::vector<aiTexture*> textures; - using MaterialMap = std::map<const Material*, unsigned int>; + using MaterialMap = std::fbx_unordered_map<const Material*, unsigned int>; MaterialMap materials_converted; - using VideoMap = std::map<const Video*, unsigned int>; + using VideoMap = std::fbx_unordered_map<const Video, unsigned int>; VideoMap textures_converted; - using MeshMap = std::map<const Geometry*, std::vector<unsigned int> >; + using MeshMap = std::fbx_unordered_map<const Geometry*, std::vector<unsigned int> >; MeshMap meshes_converted; // fixed node name -> which trafo chain components have animations? - using NodeAnimBitMap = std::map<std::string, unsigned int> ; + using NodeAnimBitMap = std::fbx_unordered_map<std::string, unsigned int> ; NodeAnimBitMap node_anim_chain_bits; // number of nodes with the same name - using NodeNameCache = std::unordered_map<std::string, unsigned int>; + using NodeNameCache = std::fbx_unordered_map<std::string, unsigned int>; NodeNameCache mNodeNames; + // Deformer name is not the same as a bone name - it does contain the bone name though :) + // Deformer names in FBX are always unique in an FBX file. + std::map<const std::string, aiBone *> bone_map; + double anim_fps; aiScene* const out; const FBX::Document& doc; - FbxUnit mCurrentUnit; + + static void BuildBoneList(aiNode *current_node, const aiNode *root_node, const aiScene *scene, + std::vector<aiBone*>& bones); + + void BuildBoneStack(aiNode *current_node, const aiNode *root_node, const aiScene *scene, + const std::vector<aiBone *> &bones, + std::map<aiBone *, aiNode *> &bone_stack, + std::vector<aiNode*> &node_stack ); + + static void BuildNodeList(aiNode *current_node, std::vector<aiNode *> &nodes); + + static aiNode *GetNodeFromStack(const aiString &node_name, std::vector<aiNode *> &nodes); + + static aiNode *GetArmatureRoot(aiNode *bone_node, std::vector<aiBone*> &bone_list); + + static bool IsBoneNode(const aiString &bone_name, std::vector<aiBone *> &bones); }; } diff --git a/thirdparty/assimp/code/FBX/FBXDocument.h b/thirdparty/assimp/code/FBX/FBXDocument.h index 18e5c38f13..a60d7d9efa 100644 --- a/thirdparty/assimp/code/FBX/FBXDocument.h +++ b/thirdparty/assimp/code/FBX/FBXDocument.h @@ -637,6 +637,20 @@ public: return ptr; } + bool operator==(const Video& other) const + { + return ( + type == other.type + && relativeFileName == other.relativeFileName + && fileName == other.fileName + ); + } + + bool operator<(const Video& other) const + { + return std::tie(type, relativeFileName, fileName) < std::tie(other.type, other.relativeFileName, other.fileName); + } + private: std::string type; std::string relativeFileName; @@ -1005,10 +1019,10 @@ public: // during their entire lifetime (Document). FBX files have // up to many thousands of objects (most of which we never use), // so the memory overhead for them should be kept at a minimum. -typedef std::map<uint64_t, LazyObject*> ObjectMap; +typedef std::fbx_unordered_map<uint64_t, LazyObject*> ObjectMap; typedef std::fbx_unordered_map<std::string, std::shared_ptr<const PropertyTable> > PropertyTemplateMap; -typedef std::multimap<uint64_t, const Connection*> ConnectionMap; +typedef std::fbx_unordered_multimap<uint64_t, const Connection*> ConnectionMap; /** DOM class for global document settings, a single instance per document can * be accessed via Document.Globals(). */ @@ -1177,4 +1191,25 @@ private: } // Namespace FBX } // Namespace Assimp +namespace std +{ + template <> + struct hash<const Assimp::FBX::Video> + { + std::size_t operator()(const Assimp::FBX::Video& video) const + { + using std::size_t; + using std::hash; + using std::string; + + size_t res = 17; + res = res * 31 + hash<string>()(video.Name()); + res = res * 31 + hash<string>()(video.RelativeFilename()); + res = res * 31 + hash<string>()(video.Type()); + + return res; + } + }; +} + #endif // INCLUDED_AI_FBX_DOCUMENT_H diff --git a/thirdparty/assimp/code/FBX/FBXExportProperty.cpp b/thirdparty/assimp/code/FBX/FBXExportProperty.cpp index f8593e6295..f2a63b72b9 100644 --- a/thirdparty/assimp/code/FBX/FBXExportProperty.cpp +++ b/thirdparty/assimp/code/FBX/FBXExportProperty.cpp @@ -59,11 +59,7 @@ namespace FBX { FBXExportProperty::FBXExportProperty(bool v) : type('C') -, data(1) { - data = { - uint8_t(v) - }; -} +, data(1, uint8_t(v)) {} FBXExportProperty::FBXExportProperty(int16_t v) : type('Y') diff --git a/thirdparty/assimp/code/FBX/FBXExporter.cpp b/thirdparty/assimp/code/FBX/FBXExporter.cpp index 8ebc8555a2..9316dc4f02 100644 --- a/thirdparty/assimp/code/FBX/FBXExporter.cpp +++ b/thirdparty/assimp/code/FBX/FBXExporter.cpp @@ -67,6 +67,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vector> #include <array> #include <unordered_set> +#include <numeric> // RESOURCES: // https://code.blender.org/2013/08/fbx-binary-file-format-specification/ @@ -1005,6 +1006,9 @@ void FBXExporter::WriteObjects () object_node.EndProperties(outstream, binary, indent); object_node.BeginChildren(outstream, binary, indent); + bool bJoinIdenticalVertices = mProperties->GetPropertyBool("bJoinIdenticalVertices", true); + std::vector<std::vector<int32_t>> vVertexIndice;//save vertex_indices as it is needed later + // geometry (aiMesh) mesh_uids.clear(); indent = 1; @@ -1031,21 +1035,35 @@ void FBXExporter::WriteObjects () std::vector<int32_t> vertex_indices; // map of vertex value to its index in the data vector std::map<aiVector3D,size_t> index_by_vertex_value; - int32_t index = 0; - for (size_t vi = 0; vi < m->mNumVertices; ++vi) { - aiVector3D vtx = m->mVertices[vi]; - auto elem = index_by_vertex_value.find(vtx); - if (elem == index_by_vertex_value.end()) { - vertex_indices.push_back(index); - index_by_vertex_value[vtx] = index; - flattened_vertices.push_back(vtx[0]); - flattened_vertices.push_back(vtx[1]); - flattened_vertices.push_back(vtx[2]); - ++index; - } else { - vertex_indices.push_back(int32_t(elem->second)); + if(bJoinIdenticalVertices){ + int32_t index = 0; + for (size_t vi = 0; vi < m->mNumVertices; ++vi) { + aiVector3D vtx = m->mVertices[vi]; + auto elem = index_by_vertex_value.find(vtx); + if (elem == index_by_vertex_value.end()) { + vertex_indices.push_back(index); + index_by_vertex_value[vtx] = index; + flattened_vertices.push_back(vtx[0]); + flattened_vertices.push_back(vtx[1]); + flattened_vertices.push_back(vtx[2]); + ++index; + } else { + vertex_indices.push_back(int32_t(elem->second)); + } + } + } + else { // do not join vertex, respect the export flag + vertex_indices.resize(m->mNumVertices); + std::iota(vertex_indices.begin(), vertex_indices.end(), 0); + for(unsigned int v = 0; v < m->mNumVertices; ++ v) { + aiVector3D vtx = m->mVertices[v]; + flattened_vertices.push_back(vtx.x); + flattened_vertices.push_back(vtx.y); + flattened_vertices.push_back(vtx.z); } } + vVertexIndice.push_back(vertex_indices); + FBX::Node::WritePropertyNode( "Vertices", flattened_vertices, outstream, binary, indent ); @@ -1116,6 +1134,51 @@ void FBXExporter::WriteObjects () normals.End(outstream, binary, indent, true); } + // colors, if any + // TODO only one color channel currently + const int32_t colorChannelIndex = 0; + if (m->HasVertexColors(colorChannelIndex)) { + FBX::Node vertexcolors("LayerElementColor", int32_t(colorChannelIndex)); + vertexcolors.Begin(outstream, binary, indent); + vertexcolors.DumpProperties(outstream, binary, indent); + vertexcolors.EndProperties(outstream, binary, indent); + vertexcolors.BeginChildren(outstream, binary, indent); + indent = 3; + FBX::Node::WritePropertyNode( + "Version", int32_t(101), outstream, binary, indent + ); + char layerName[8]; + sprintf(layerName, "COLOR_%d", colorChannelIndex); + FBX::Node::WritePropertyNode( + "Name", (const char*)layerName, outstream, binary, indent + ); + FBX::Node::WritePropertyNode( + "MappingInformationType", "ByPolygonVertex", + outstream, binary, indent + ); + FBX::Node::WritePropertyNode( + "ReferenceInformationType", "Direct", + outstream, binary, indent + ); + std::vector<double> color_data; + color_data.reserve(4 * polygon_data.size()); + for (size_t fi = 0; fi < m->mNumFaces; ++fi) { + const aiFace &f = m->mFaces[fi]; + for (size_t pvi = 0; pvi < f.mNumIndices; ++pvi) { + const aiColor4D &c = m->mColors[colorChannelIndex][f.mIndices[pvi]]; + color_data.push_back(c.r); + color_data.push_back(c.g); + color_data.push_back(c.b); + color_data.push_back(c.a); + } + } + FBX::Node::WritePropertyNode( + "Colors", color_data, outstream, binary, indent + ); + indent = 2; + vertexcolors.End(outstream, binary, indent, true); + } + // uvs, if any for (size_t uvi = 0; uvi < m->GetNumUVChannels(); ++uvi) { if (m->mNumUVComponents[uvi] > 2) { @@ -1209,6 +1272,11 @@ void FBXExporter::WriteObjects () le.AddChild("Type", "LayerElementNormal"); le.AddChild("TypedIndex", int32_t(0)); layer.AddChild(le); + // TODO only 1 color channel currently + le = FBX::Node("LayerElement"); + le.AddChild("Type", "LayerElementColor"); + le.AddChild("TypedIndex", int32_t(0)); + layer.AddChild(le); le = FBX::Node("LayerElement"); le.AddChild("Type", "LayerElementMaterial"); le.AddChild("TypedIndex", int32_t(0)); @@ -1221,7 +1289,7 @@ void FBXExporter::WriteObjects () for(unsigned int lr = 1; lr < m->GetNumUVChannels(); ++ lr) { - FBX::Node layerExtra("Layer", int32_t(1)); + FBX::Node layerExtra("Layer", int32_t(lr)); layerExtra.AddChild("Version", int32_t(100)); FBX::Node leExtra("LayerElement"); leExtra.AddChild("Type", "LayerElementUV"); @@ -1748,28 +1816,8 @@ void FBXExporter::WriteObjects () // connect it connections.emplace_back("C", "OO", deformer_uid, mesh_uids[mi]); - // we will be indexing by vertex... - // but there might be a different number of "vertices" - // between assimp and our output FBX. - // this code is cut-and-pasted from the geometry section above... - // ideally this should not be so. - // --- - // index of original vertex in vertex data vector - std::vector<int32_t> vertex_indices; - // map of vertex value to its index in the data vector - std::map<aiVector3D,size_t> index_by_vertex_value; - int32_t index = 0; - for (size_t vi = 0; vi < m->mNumVertices; ++vi) { - aiVector3D vtx = m->mVertices[vi]; - auto elem = index_by_vertex_value.find(vtx); - if (elem == index_by_vertex_value.end()) { - vertex_indices.push_back(index); - index_by_vertex_value[vtx] = index; - ++index; - } else { - vertex_indices.push_back(int32_t(elem->second)); - } - } + //computed before + std::vector<int32_t>& vertex_indices = vVertexIndice[mi]; // TODO, FIXME: this won't work if anything is not in the bind pose. // for now if such a situation is detected, we throw an exception. @@ -2435,7 +2483,7 @@ void FBXExporter::WriteModelNodes( void FBXExporter::WriteAnimationCurveNode( StreamWriterLE& outstream, int64_t uid, - std::string name, // "T", "R", or "S" + const std::string& name, // "T", "R", or "S" aiVector3D default_value, std::string property_name, // "Lcl Translation" etc int64_t layer_uid, diff --git a/thirdparty/assimp/code/FBX/FBXExporter.h b/thirdparty/assimp/code/FBX/FBXExporter.h index 71fb55c57f..1ae727eda9 100644 --- a/thirdparty/assimp/code/FBX/FBXExporter.h +++ b/thirdparty/assimp/code/FBX/FBXExporter.h @@ -156,7 +156,7 @@ namespace Assimp void WriteAnimationCurveNode( StreamWriterLE& outstream, int64_t uid, - std::string name, // "T", "R", or "S" + const std::string& name, // "T", "R", or "S" aiVector3D default_value, std::string property_name, // "Lcl Translation" etc int64_t animation_layer_uid, diff --git a/thirdparty/assimp/code/FBX/FBXImporter.cpp b/thirdparty/assimp/code/FBX/FBXImporter.cpp index bd359dbf29..afcc1ddc78 100644 --- a/thirdparty/assimp/code/FBX/FBXImporter.cpp +++ b/thirdparty/assimp/code/FBX/FBXImporter.cpp @@ -48,26 +48,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "FBXImporter.h" -#include "FBXTokenizer.h" +#include "FBXConverter.h" +#include "FBXDocument.h" #include "FBXParser.h" +#include "FBXTokenizer.h" #include "FBXUtil.h" -#include "FBXDocument.h" -#include "FBXConverter.h" -#include <assimp/StreamReader.h> #include <assimp/MemoryIOWrapper.h> -#include <assimp/Importer.hpp> +#include <assimp/StreamReader.h> #include <assimp/importerdesc.h> +#include <assimp/Importer.hpp> namespace Assimp { -template<> -const char* LogFunctions<FBXImporter>::Prefix() { - static auto prefix = "FBX: "; - return prefix; +template <> +const char *LogFunctions<FBXImporter>::Prefix() { + static auto prefix = "FBX: "; + return prefix; } -} +} // namespace Assimp using namespace Assimp; using namespace Assimp::Formatter; @@ -76,136 +76,123 @@ using namespace Assimp::FBX; namespace { static const aiImporterDesc desc = { - "Autodesk FBX Importer", - "", - "", - "", - aiImporterFlags_SupportTextFlavour, - 0, - 0, - 0, - 0, - "fbx" + "Autodesk FBX Importer", + "", + "", + "", + aiImporterFlags_SupportTextFlavour, + 0, + 0, + 0, + 0, + "fbx" }; } // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by #Importer -FBXImporter::FBXImporter() -{ +FBXImporter::FBXImporter() { } // ------------------------------------------------------------------------------------------------ // Destructor, private as well -FBXImporter::~FBXImporter() -{ +FBXImporter::~FBXImporter() { } // ------------------------------------------------------------------------------------------------ // Returns whether the class can handle the format of the given file. -bool FBXImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const -{ - const std::string& extension = GetExtension(pFile); - if (extension == std::string( desc.mFileExtensions ) ) { - return true; - } - - else if ((!extension.length() || checkSig) && pIOHandler) { - // at least ASCII-FBX files usually have a 'FBX' somewhere in their head - const char* tokens[] = {"fbx"}; - return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1); - } - return false; +bool FBXImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const { + const std::string &extension = GetExtension(pFile); + if (extension == std::string(desc.mFileExtensions)) { + return true; + } + + else if ((!extension.length() || checkSig) && pIOHandler) { + // at least ASCII-FBX files usually have a 'FBX' somewhere in their head + const char *tokens[] = { "fbx" }; + return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1); + } + return false; } // ------------------------------------------------------------------------------------------------ // List all extensions handled by this loader -const aiImporterDesc* FBXImporter::GetInfo () const -{ - return &desc; +const aiImporterDesc *FBXImporter::GetInfo() const { + return &desc; } // ------------------------------------------------------------------------------------------------ // Setup configuration properties for the loader -void FBXImporter::SetupProperties(const Importer* pImp) -{ - settings.readAllLayers = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS, true); - settings.readAllMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS, false); - settings.readMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_MATERIALS, true); - settings.readTextures = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_TEXTURES, true); - settings.readCameras = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_CAMERAS, true); - settings.readLights = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_LIGHTS, true); - settings.readAnimations = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS, true); - settings.strictMode = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_STRICT_MODE, false); - settings.preservePivots = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, true); - settings.optimizeEmptyAnimationCurves = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES, true); - settings.useLegacyEmbeddedTextureNaming = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_EMBEDDED_TEXTURES_LEGACY_NAMING, false); - settings.removeEmptyBones = pImp->GetPropertyBool(AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES, true); - settings.convertToMeters = pImp->GetPropertyBool(AI_CONFIG_FBX_CONVERT_TO_M, false); +void FBXImporter::SetupProperties(const Importer *pImp) { + settings.readAllLayers = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS, true); + settings.readAllMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS, false); + settings.readMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_MATERIALS, true); + settings.readTextures = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_TEXTURES, true); + settings.readCameras = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_CAMERAS, true); + settings.readLights = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_LIGHTS, true); + settings.readAnimations = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS, true); + settings.strictMode = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_STRICT_MODE, false); + settings.preservePivots = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, true); + settings.optimizeEmptyAnimationCurves = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES, true); + settings.useLegacyEmbeddedTextureNaming = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_EMBEDDED_TEXTURES_LEGACY_NAMING, false); + settings.removeEmptyBones = pImp->GetPropertyBool(AI_CONFIG_IMPORT_REMOVE_EMPTY_BONES, true); + settings.convertToMeters = pImp->GetPropertyBool(AI_CONFIG_FBX_CONVERT_TO_M, false); } // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. -void FBXImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler) -{ - std::unique_ptr<IOStream> stream(pIOHandler->Open(pFile,"rb")); - if (!stream) { - ThrowException("Could not open file for reading"); - } - - // read entire file into memory - no streaming for this, fbx - // files can grow large, but the assimp output data structure - // then becomes very large, too. Assimp doesn't support - // streaming for its output data structures so the net win with - // streaming input data would be very low. - std::vector<char> contents; - contents.resize(stream->FileSize()+1); - stream->Read( &*contents.begin(), 1, contents.size()-1 ); - contents[ contents.size() - 1 ] = 0; - const char* const begin = &*contents.begin(); - - // broadphase tokenizing pass in which we identify the core - // syntax elements of FBX (brackets, commas, key:value mappings) - TokenList tokens; - try { - - bool is_binary = false; - if (!strncmp(begin,"Kaydara FBX Binary",18)) { - is_binary = true; - TokenizeBinary(tokens,begin,contents.size()); - } - else { - Tokenize(tokens,begin); - } - - // use this information to construct a very rudimentary - // parse-tree representing the FBX scope structure - Parser parser(tokens, is_binary); - - // take the raw parse-tree and convert it to a FBX DOM - Document doc(parser,settings); - - FbxUnit unit(FbxUnit::cm); - if (settings.convertToMeters) { - unit = FbxUnit::m; - } - - // convert the FBX DOM to aiScene - ConvertToAssimpScene(pScene, doc, settings.removeEmptyBones, unit); - - // size relative to cm - float size_relative_to_cm = doc.GlobalSettings().UnitScaleFactor(); - - // Set FBX file scale is relative to CM must be converted to M for - // assimp universal format (M) - SetFileScale( size_relative_to_cm * 0.01f); - - std::for_each(tokens.begin(),tokens.end(),Util::delete_fun<Token>()); - } - catch(std::exception&) { - std::for_each(tokens.begin(),tokens.end(),Util::delete_fun<Token>()); - throw; - } +void FBXImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler) { + std::unique_ptr<IOStream> stream(pIOHandler->Open(pFile, "rb")); + if (!stream) { + ThrowException("Could not open file for reading"); + } + + // read entire file into memory - no streaming for this, fbx + // files can grow large, but the assimp output data structure + // then becomes very large, too. Assimp doesn't support + // streaming for its output data structures so the net win with + // streaming input data would be very low. + std::vector<char> contents; + contents.resize(stream->FileSize() + 1); + stream->Read(&*contents.begin(), 1, contents.size() - 1); + contents[contents.size() - 1] = 0; + const char *const begin = &*contents.begin(); + + // broadphase tokenizing pass in which we identify the core + // syntax elements of FBX (brackets, commas, key:value mappings) + TokenList tokens; + try { + + bool is_binary = false; + if (!strncmp(begin, "Kaydara FBX Binary", 18)) { + is_binary = true; + TokenizeBinary(tokens, begin, contents.size()); + } else { + Tokenize(tokens, begin); + } + + // use this information to construct a very rudimentary + // parse-tree representing the FBX scope structure + Parser parser(tokens, is_binary); + + // take the raw parse-tree and convert it to a FBX DOM + Document doc(parser, settings); + + // convert the FBX DOM to aiScene + ConvertToAssimpScene(pScene, doc, settings.removeEmptyBones); + + // size relative to cm + float size_relative_to_cm = doc.GlobalSettings().UnitScaleFactor(); + + // Set FBX file scale is relative to CM must be converted to M for + // assimp universal format (M) + SetFileScale(size_relative_to_cm * 0.01f); + + std::for_each(tokens.begin(), tokens.end(), Util::delete_fun<Token>()); + } catch (std::exception &) { + std::for_each(tokens.begin(), tokens.end(), Util::delete_fun<Token>()); + throw; + } } #endif // !ASSIMP_BUILD_NO_FBX_IMPORTER diff --git a/thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp b/thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp index 5c9a0e309d..1386e2383c 100644 --- a/thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp +++ b/thirdparty/assimp/code/FBX/FBXMeshGeometry.cpp @@ -610,11 +610,11 @@ void MeshGeometry::ReadVertexDataMaterials(std::vector<int>& materials_out, cons const std::string& ReferenceInformationType) { const size_t face_count = m_faces.size(); - if(face_count <= 0) + if( 0 == face_count ) { return; } - + // materials are handled separately. First of all, they are assigned per-face // and not per polyvert. Secondly, ReferenceInformationType=IndexToDirect // has a slightly different meaning for materials. @@ -625,16 +625,14 @@ void MeshGeometry::ReadVertexDataMaterials(std::vector<int>& materials_out, cons if (materials_out.empty()) { FBXImporter::LogError(Formatter::format("expected material index, ignoring")); return; - } - else if (materials_out.size() > 1) { + } else if (materials_out.size() > 1) { FBXImporter::LogWarn(Formatter::format("expected only a single material index, ignoring all except the first one")); materials_out.clear(); } materials_out.resize(m_vertices.size()); std::fill(materials_out.begin(), materials_out.end(), materials_out.at(0)); - } - else if (MappingInformationType == "ByPolygon" && ReferenceInformationType == "IndexToDirect") { + } else if (MappingInformationType == "ByPolygon" && ReferenceInformationType == "IndexToDirect") { materials_out.resize(face_count); if(materials_out.size() != face_count) { @@ -643,18 +641,16 @@ void MeshGeometry::ReadVertexDataMaterials(std::vector<int>& materials_out, cons ); return; } - } - else { + } else { FBXImporter::LogError(Formatter::format("ignoring material assignments, access type not implemented: ") << MappingInformationType << "," << ReferenceInformationType); } } // ------------------------------------------------------------------------------------------------ ShapeGeometry::ShapeGeometry(uint64_t id, const Element& element, const std::string& name, const Document& doc) - : Geometry(id, element, name, doc) -{ - const Scope* sc = element.Compound(); - if (!sc) { +: Geometry(id, element, name, doc) { + const Scope *sc = element.Compound(); + if (nullptr == sc) { DOMError("failed to read Geometry object (class: Shape), no data scope found"); } const Element& Indexes = GetRequiredElement(*sc, "Indexes", &element); diff --git a/thirdparty/assimp/code/MMD/MMDCpp14.h b/thirdparty/assimp/code/MMD/MMDCpp14.h deleted file mode 100644 index 638b0bfd2f..0000000000 --- a/thirdparty/assimp/code/MMD/MMDCpp14.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above -copyright notice, this list of conditions and the -following disclaimer. - -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the -following disclaimer in the documentation and/or other -materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior -written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#pragma once - -#ifndef MMD_CPP14_H -#define MMD_CPP14_H - -#include <cstddef> -#include <memory> -#include <type_traits> -#include <utility> - -namespace mmd { - template<class T> struct _Unique_if { - typedef std::unique_ptr<T> _Single_object; - }; - - template<class T> struct _Unique_if<T[]> { - typedef std::unique_ptr<T[]> _Unknown_bound; - }; - - template<class T, size_t N> struct _Unique_if<T[N]> { - typedef void _Known_bound; - }; - - template<class T, class... Args> - typename _Unique_if<T>::_Single_object - make_unique(Args&&... args) { - return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); - } - - template<class T> - typename _Unique_if<T>::_Unknown_bound - make_unique(size_t n) { - typedef typename std::remove_extent<T>::type U; - return std::unique_ptr<T>(new U[n]()); - } - - template<class T, class... Args> - typename _Unique_if<T>::_Known_bound - make_unique(Args&&...) = delete; -} - -#endif diff --git a/thirdparty/assimp/code/MMD/MMDImporter.cpp b/thirdparty/assimp/code/MMD/MMDImporter.cpp deleted file mode 100644 index e7744e4cd0..0000000000 --- a/thirdparty/assimp/code/MMD/MMDImporter.cpp +++ /dev/null @@ -1,372 +0,0 @@ -/* ---------------------------------------------------------------------------- -Open Asset Import Library (assimp) ---------------------------------------------------------------------------- - -Copyright (c) 2006-2016, assimp team - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the following -conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- -*/ - -#ifndef ASSIMP_BUILD_NO_MMD_IMPORTER - -#include "MMD/MMDImporter.h" -#include "MMD/MMDPmdParser.h" -#include "MMD/MMDPmxParser.h" -#include "MMD/MMDVmdParser.h" -#include "PostProcessing/ConvertToLHProcess.h" - -#include <assimp/DefaultIOSystem.h> -#include <assimp/Importer.hpp> -#include <assimp/ai_assert.h> -#include <assimp/scene.h> - -#include <fstream> -#include <iomanip> -#include <memory> - -static const aiImporterDesc desc = {"MMD Importer", - "", - "", - "surfaces supported?", - aiImporterFlags_SupportTextFlavour, - 0, - 0, - 0, - 0, - "pmx"}; - -namespace Assimp { - -using namespace std; - -// ------------------------------------------------------------------------------------------------ -// Default constructor -MMDImporter::MMDImporter() -: m_Buffer() -, m_strAbsPath("") { - DefaultIOSystem io; - m_strAbsPath = io.getOsSeparator(); -} - -// ------------------------------------------------------------------------------------------------ -// Destructor. -MMDImporter::~MMDImporter() { - // empty -} - -// ------------------------------------------------------------------------------------------------ -// Returns true, if file is an pmx file. -bool MMDImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, - bool checkSig) const { - if (!checkSig) // Check File Extension - { - return SimpleExtensionCheck(pFile, "pmx"); - } else // Check file Header - { - static const char *pTokens[] = {"PMX "}; - return BaseImporter::SearchFileHeaderForToken(pIOHandler, pFile, pTokens, 1); - } -} - -// ------------------------------------------------------------------------------------------------ -const aiImporterDesc *MMDImporter::GetInfo() const { return &desc; } - -// ------------------------------------------------------------------------------------------------ -// MMD import implementation -void MMDImporter::InternReadFile(const std::string &file, aiScene *pScene, - IOSystem * /*pIOHandler*/) { - // Read file by istream - std::filebuf fb; - if (!fb.open(file, std::ios::in | std::ios::binary)) { - throw DeadlyImportError("Failed to open file " + file + "."); - } - - std::istream fileStream(&fb); - - // Get the file-size and validate it, throwing an exception when fails - fileStream.seekg(0, fileStream.end); - size_t fileSize = static_cast<size_t>(fileStream.tellg()); - fileStream.seekg(0, fileStream.beg); - - if (fileSize < sizeof(pmx::PmxModel)) { - throw DeadlyImportError(file + " is too small."); - } - - pmx::PmxModel model; - model.Read(&fileStream); - - CreateDataFromImport(&model, pScene); -} - -// ------------------------------------------------------------------------------------------------ -void MMDImporter::CreateDataFromImport(const pmx::PmxModel *pModel, - aiScene *pScene) { - if (pModel == NULL) { - return; - } - - aiNode *pNode = new aiNode; - if (!pModel->model_name.empty()) { - pNode->mName.Set(pModel->model_name); - } - - pScene->mRootNode = pNode; - - pNode = new aiNode; - pScene->mRootNode->addChildren(1, &pNode); - pNode->mName.Set(string(pModel->model_name) + string("_mesh")); - - // split mesh by materials - pNode->mNumMeshes = pModel->material_count; - pNode->mMeshes = new unsigned int[pNode->mNumMeshes]; - for (unsigned int index = 0; index < pNode->mNumMeshes; index++) { - pNode->mMeshes[index] = index; - } - - pScene->mNumMeshes = pModel->material_count; - pScene->mMeshes = new aiMesh *[pScene->mNumMeshes]; - for (unsigned int i = 0, indexStart = 0; i < pScene->mNumMeshes; i++) { - const int indexCount = pModel->materials[i].index_count; - - pScene->mMeshes[i] = CreateMesh(pModel, indexStart, indexCount); - pScene->mMeshes[i]->mName = pModel->materials[i].material_name; - pScene->mMeshes[i]->mMaterialIndex = i; - indexStart += indexCount; - } - - // create node hierarchy for bone position - std::unique_ptr<aiNode *[]> ppNode(new aiNode *[pModel->bone_count]); - for (auto i = 0; i < pModel->bone_count; i++) { - ppNode[i] = new aiNode(pModel->bones[i].bone_name); - } - - for (auto i = 0; i < pModel->bone_count; i++) { - const pmx::PmxBone &bone = pModel->bones[i]; - - if (bone.parent_index < 0) { - pScene->mRootNode->addChildren(1, ppNode.get() + i); - } else { - ppNode[bone.parent_index]->addChildren(1, ppNode.get() + i); - - aiVector3D v3 = aiVector3D( - bone.position[0] - pModel->bones[bone.parent_index].position[0], - bone.position[1] - pModel->bones[bone.parent_index].position[1], - bone.position[2] - pModel->bones[bone.parent_index].position[2]); - aiMatrix4x4::Translation(v3, ppNode[i]->mTransformation); - } - } - - // create materials - pScene->mNumMaterials = pModel->material_count; - pScene->mMaterials = new aiMaterial *[pScene->mNumMaterials]; - for (unsigned int i = 0; i < pScene->mNumMaterials; i++) { - pScene->mMaterials[i] = CreateMaterial(&pModel->materials[i], pModel); - } - - // Convert everything to OpenGL space - MakeLeftHandedProcess convertProcess; - convertProcess.Execute(pScene); - - FlipUVsProcess uvFlipper; - uvFlipper.Execute(pScene); - - FlipWindingOrderProcess windingFlipper; - windingFlipper.Execute(pScene); -} - -// ------------------------------------------------------------------------------------------------ -aiMesh *MMDImporter::CreateMesh(const pmx::PmxModel *pModel, - const int indexStart, const int indexCount) { - aiMesh *pMesh = new aiMesh; - - pMesh->mNumVertices = indexCount; - - pMesh->mNumFaces = indexCount / 3; - pMesh->mFaces = new aiFace[pMesh->mNumFaces]; - - const int numIndices = 3; // triangular face - for (unsigned int index = 0; index < pMesh->mNumFaces; index++) { - pMesh->mFaces[index].mNumIndices = numIndices; - unsigned int *indices = new unsigned int[numIndices]; - indices[0] = numIndices * index; - indices[1] = numIndices * index + 1; - indices[2] = numIndices * index + 2; - pMesh->mFaces[index].mIndices = indices; - } - - pMesh->mVertices = new aiVector3D[pMesh->mNumVertices]; - pMesh->mNormals = new aiVector3D[pMesh->mNumVertices]; - pMesh->mTextureCoords[0] = new aiVector3D[pMesh->mNumVertices]; - pMesh->mNumUVComponents[0] = 2; - - // additional UVs - for (int i = 1; i <= pModel->setting.uv; i++) { - pMesh->mTextureCoords[i] = new aiVector3D[pMesh->mNumVertices]; - pMesh->mNumUVComponents[i] = 4; - } - - map<int, vector<aiVertexWeight>> bone_vertex_map; - - // fill in contents and create bones - for (int index = 0; index < indexCount; index++) { - const pmx::PmxVertex *v = - &pModel->vertices[pModel->indices[indexStart + index]]; - const float *position = v->position; - pMesh->mVertices[index].Set(position[0], position[1], position[2]); - const float *normal = v->normal; - - pMesh->mNormals[index].Set(normal[0], normal[1], normal[2]); - pMesh->mTextureCoords[0][index].x = v->uv[0]; - pMesh->mTextureCoords[0][index].y = v->uv[1]; - - for (int i = 1; i <= pModel->setting.uv; i++) { - // TODO: wrong here? use quaternion transform? - pMesh->mTextureCoords[i][index].x = v->uva[i][0]; - pMesh->mTextureCoords[i][index].y = v->uva[i][1]; - } - - // handle bone map - const auto vsBDEF1_ptr = - dynamic_cast<pmx::PmxVertexSkinningBDEF1 *>(v->skinning.get()); - const auto vsBDEF2_ptr = - dynamic_cast<pmx::PmxVertexSkinningBDEF2 *>(v->skinning.get()); - const auto vsBDEF4_ptr = - dynamic_cast<pmx::PmxVertexSkinningBDEF4 *>(v->skinning.get()); - const auto vsSDEF_ptr = - dynamic_cast<pmx::PmxVertexSkinningSDEF *>(v->skinning.get()); - switch (v->skinning_type) { - case pmx::PmxVertexSkinningType::BDEF1: - bone_vertex_map[vsBDEF1_ptr->bone_index].push_back( - aiVertexWeight(index, 1.0)); - break; - case pmx::PmxVertexSkinningType::BDEF2: - bone_vertex_map[vsBDEF2_ptr->bone_index1].push_back( - aiVertexWeight(index, vsBDEF2_ptr->bone_weight)); - bone_vertex_map[vsBDEF2_ptr->bone_index2].push_back( - aiVertexWeight(index, 1.0f - vsBDEF2_ptr->bone_weight)); - break; - case pmx::PmxVertexSkinningType::BDEF4: - bone_vertex_map[vsBDEF4_ptr->bone_index1].push_back( - aiVertexWeight(index, vsBDEF4_ptr->bone_weight1)); - bone_vertex_map[vsBDEF4_ptr->bone_index2].push_back( - aiVertexWeight(index, vsBDEF4_ptr->bone_weight2)); - bone_vertex_map[vsBDEF4_ptr->bone_index3].push_back( - aiVertexWeight(index, vsBDEF4_ptr->bone_weight3)); - bone_vertex_map[vsBDEF4_ptr->bone_index4].push_back( - aiVertexWeight(index, vsBDEF4_ptr->bone_weight4)); - break; - case pmx::PmxVertexSkinningType::SDEF: // TODO: how to use sdef_c, sdef_r0, - // sdef_r1? - bone_vertex_map[vsSDEF_ptr->bone_index1].push_back( - aiVertexWeight(index, vsSDEF_ptr->bone_weight)); - bone_vertex_map[vsSDEF_ptr->bone_index2].push_back( - aiVertexWeight(index, 1.0f - vsSDEF_ptr->bone_weight)); - break; - case pmx::PmxVertexSkinningType::QDEF: - const auto vsQDEF_ptr = - dynamic_cast<pmx::PmxVertexSkinningQDEF *>(v->skinning.get()); - bone_vertex_map[vsQDEF_ptr->bone_index1].push_back( - aiVertexWeight(index, vsQDEF_ptr->bone_weight1)); - bone_vertex_map[vsQDEF_ptr->bone_index2].push_back( - aiVertexWeight(index, vsQDEF_ptr->bone_weight2)); - bone_vertex_map[vsQDEF_ptr->bone_index3].push_back( - aiVertexWeight(index, vsQDEF_ptr->bone_weight3)); - bone_vertex_map[vsQDEF_ptr->bone_index4].push_back( - aiVertexWeight(index, vsQDEF_ptr->bone_weight4)); - break; - } - } - - // make all bones for each mesh - // assign bone weights to skinned bones (otherwise just initialize) - auto bone_ptr_ptr = new aiBone *[pModel->bone_count]; - pMesh->mNumBones = pModel->bone_count; - pMesh->mBones = bone_ptr_ptr; - for (auto ii = 0; ii < pModel->bone_count; ++ii) { - auto pBone = new aiBone; - const auto &pmxBone = pModel->bones[ii]; - pBone->mName = pmxBone.bone_name; - aiVector3D pos(pmxBone.position[0], pmxBone.position[1], pmxBone.position[2]); - aiMatrix4x4::Translation(-pos, pBone->mOffsetMatrix); - auto it = bone_vertex_map.find(ii); - if (it != bone_vertex_map.end()) { - pBone->mNumWeights = static_cast<unsigned int>(it->second.size()); - pBone->mWeights = new aiVertexWeight[pBone->mNumWeights]; - for (unsigned int j = 0; j < pBone->mNumWeights; j++) { - pBone->mWeights[j] = it->second[j]; - } - } - bone_ptr_ptr[ii] = pBone; - } - - return pMesh; -} - -// ------------------------------------------------------------------------------------------------ -aiMaterial *MMDImporter::CreateMaterial(const pmx::PmxMaterial *pMat, - const pmx::PmxModel *pModel) { - aiMaterial *mat = new aiMaterial(); - aiString name(pMat->material_english_name); - mat->AddProperty(&name, AI_MATKEY_NAME); - - aiColor3D diffuse(pMat->diffuse[0], pMat->diffuse[1], pMat->diffuse[2]); - mat->AddProperty(&diffuse, 1, AI_MATKEY_COLOR_DIFFUSE); - aiColor3D specular(pMat->specular[0], pMat->specular[1], pMat->specular[2]); - mat->AddProperty(&specular, 1, AI_MATKEY_COLOR_SPECULAR); - aiColor3D ambient(pMat->ambient[0], pMat->ambient[1], pMat->ambient[2]); - mat->AddProperty(&ambient, 1, AI_MATKEY_COLOR_AMBIENT); - - float opacity = pMat->diffuse[3]; - mat->AddProperty(&opacity, 1, AI_MATKEY_OPACITY); - float shininess = pMat->specularlity; - mat->AddProperty(&shininess, 1, AI_MATKEY_SHININESS_STRENGTH); - - if(pMat->diffuse_texture_index >= 0) { - aiString texture_path(pModel->textures[pMat->diffuse_texture_index]); - mat->AddProperty(&texture_path, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0)); - } - - int mapping_uvwsrc = 0; - mat->AddProperty(&mapping_uvwsrc, 1, - AI_MATKEY_UVWSRC(aiTextureType_DIFFUSE, 0)); - - return mat; -} - -// ------------------------------------------------------------------------------------------------ - -} // Namespace Assimp - -#endif // !! ASSIMP_BUILD_NO_MMD_IMPORTER diff --git a/thirdparty/assimp/code/MMD/MMDImporter.h b/thirdparty/assimp/code/MMD/MMDImporter.h deleted file mode 100644 index 4ee94eeb00..0000000000 --- a/thirdparty/assimp/code/MMD/MMDImporter.h +++ /dev/null @@ -1,96 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2016, assimp team -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#ifndef MMD_FILE_IMPORTER_H_INC -#define MMD_FILE_IMPORTER_H_INC - -#include <assimp/BaseImporter.h> -#include "MMDPmxParser.h" -#include <assimp/material.h> -#include <vector> - -struct aiMesh; - -namespace Assimp { - -// ------------------------------------------------------------------------------------------------ -/// \class MMDImporter -/// \brief Imports MMD a pmx/pmd/vmd file -// ------------------------------------------------------------------------------------------------ -class MMDImporter : public BaseImporter { -public: - /// \brief Default constructor - MMDImporter(); - - /// \brief Destructor - ~MMDImporter(); - -public: - /// \brief Returns whether the class can handle the format of the given file. - /// \remark See BaseImporter::CanRead() for details. - bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const; - -private: - //! \brief Appends the supported extension. - const aiImporterDesc* GetInfo () const; - - //! \brief File import implementation. - void InternReadFile(const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); - - //! \brief Create the data from imported content. - void CreateDataFromImport(const pmx::PmxModel* pModel, aiScene* pScene); - - //! \brief Create the mesh - aiMesh* CreateMesh(const pmx::PmxModel* pModel, const int indexStart, const int indexCount); - - //! \brief Create the material - aiMaterial* CreateMaterial(const pmx::PmxMaterial* pMat, const pmx::PmxModel* pModel); - -private: - //! Data buffer - std::vector<char> m_Buffer; - //! Absolute pathname of model in file system - std::string m_strAbsPath; -}; - -// ------------------------------------------------------------------------------------------------ - -} // Namespace Assimp - -#endif
\ No newline at end of file diff --git a/thirdparty/assimp/code/MMD/MMDPmdParser.h b/thirdparty/assimp/code/MMD/MMDPmdParser.h deleted file mode 100644 index d2f2224aa1..0000000000 --- a/thirdparty/assimp/code/MMD/MMDPmdParser.h +++ /dev/null @@ -1,597 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above -copyright notice, this list of conditions and the -following disclaimer. - -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the -following disclaimer in the documentation and/or other -materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior -written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#pragma once - -#include <vector> -#include <string> -#include <memory> -#include <iostream> -#include <fstream> -#include "MMDCpp14.h" - -namespace pmd -{ - class PmdHeader - { - public: - std::string name; - std::string name_english; - std::string comment; - std::string comment_english; - - bool Read(std::ifstream* stream) - { - char buffer[256]; - stream->read(buffer, 20); - name = std::string(buffer); - stream->read(buffer, 256); - comment = std::string(buffer); - return true; - } - - bool ReadExtension(std::ifstream* stream) - { - char buffer[256]; - stream->read(buffer, 20); - name_english = std::string(buffer); - stream->read(buffer, 256); - comment_english = std::string(buffer); - return true; - } - }; - - class PmdVertex - { - public: - float position[3]; - - float normal[3]; - - float uv[2]; - - uint16_t bone_index[2]; - - uint8_t bone_weight; - - bool edge_invisible; - - bool Read(std::ifstream* stream) - { - stream->read((char*) position, sizeof(float) * 3); - stream->read((char*) normal, sizeof(float) * 3); - stream->read((char*) uv, sizeof(float) * 2); - stream->read((char*) bone_index, sizeof(uint16_t) * 2); - stream->read((char*) &bone_weight, sizeof(uint8_t)); - stream->read((char*) &edge_invisible, sizeof(uint8_t)); - return true; - } - }; - - class PmdMaterial - { - public: - float diffuse[4]; - float power; - float specular[3]; - float ambient[3]; - uint8_t toon_index; - uint8_t edge_flag; - uint32_t index_count; - std::string texture_filename; - std::string sphere_filename; - - bool Read(std::ifstream* stream) - { - char buffer[20]; - stream->read((char*) &diffuse, sizeof(float) * 4); - stream->read((char*) &power, sizeof(float)); - stream->read((char*) &specular, sizeof(float) * 3); - stream->read((char*) &ambient, sizeof(float) * 3); - stream->read((char*) &toon_index, sizeof(uint8_t)); - stream->read((char*) &edge_flag, sizeof(uint8_t)); - stream->read((char*) &index_count, sizeof(uint32_t)); - stream->read((char*) &buffer, sizeof(char) * 20); - char* pstar = strchr(buffer, '*'); - if (NULL == pstar) - { - texture_filename = std::string(buffer); - sphere_filename.clear(); - } - else { - *pstar = 0; - texture_filename = std::string(buffer); - sphere_filename = std::string(pstar+1); - } - return true; - } - }; - - enum class BoneType : uint8_t - { - Rotation, - RotationAndMove, - IkEffector, - Unknown, - IkEffectable, - RotationEffectable, - IkTarget, - Invisible, - Twist, - RotationMovement - }; - - class PmdBone - { - public: - std::string name; - std::string name_english; - uint16_t parent_bone_index; - uint16_t tail_pos_bone_index; - BoneType bone_type; - uint16_t ik_parent_bone_index; - float bone_head_pos[3]; - - void Read(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, 20); - name = std::string(buffer); - stream->read((char*) &parent_bone_index, sizeof(uint16_t)); - stream->read((char*) &tail_pos_bone_index, sizeof(uint16_t)); - stream->read((char*) &bone_type, sizeof(uint8_t)); - stream->read((char*) &ik_parent_bone_index, sizeof(uint16_t)); - stream->read((char*) &bone_head_pos, sizeof(float) * 3); - } - - void ReadExpantion(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, 20); - name_english = std::string(buffer); - } - }; - - class PmdIk - { - public: - uint16_t ik_bone_index; - uint16_t target_bone_index; - uint16_t interations; - float angle_limit; - std::vector<uint16_t> ik_child_bone_index; - - void Read(std::istream *stream) - { - stream->read((char *) &ik_bone_index, sizeof(uint16_t)); - stream->read((char *) &target_bone_index, sizeof(uint16_t)); - uint8_t ik_chain_length; - stream->read((char*) &ik_chain_length, sizeof(uint8_t)); - stream->read((char *) &interations, sizeof(uint16_t)); - stream->read((char *) &angle_limit, sizeof(float)); - ik_child_bone_index.resize(ik_chain_length); - for (int i = 0; i < ik_chain_length; i++) - { - stream->read((char *) &ik_child_bone_index[i], sizeof(uint16_t)); - } - } - }; - - class PmdFaceVertex - { - public: - int vertex_index; - float position[3]; - - void Read(std::istream *stream) - { - stream->read((char *) &vertex_index, sizeof(int)); - stream->read((char *) position, sizeof(float) * 3); - } - }; - - enum class FaceCategory : uint8_t - { - Base, - Eyebrow, - Eye, - Mouth, - Other - }; - - class PmdFace - { - public: - std::string name; - FaceCategory type; - std::vector<PmdFaceVertex> vertices; - std::string name_english; - - void Read(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, 20); - name = std::string(buffer); - int vertex_count; - stream->read((char*) &vertex_count, sizeof(int)); - stream->read((char*) &type, sizeof(uint8_t)); - vertices.resize(vertex_count); - for (int i = 0; i < vertex_count; i++) - { - vertices[i].Read(stream); - } - } - - void ReadExpantion(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, 20); - name_english = std::string(buffer); - } - }; - - class PmdBoneDispName - { - public: - std::string bone_disp_name; - std::string bone_disp_name_english; - - void Read(std::istream *stream) - { - char buffer[50]; - stream->read(buffer, 50); - bone_disp_name = std::string(buffer); - bone_disp_name_english.clear(); - } - void ReadExpantion(std::istream *stream) - { - char buffer[50]; - stream->read(buffer, 50); - bone_disp_name_english = std::string(buffer); - } - }; - - class PmdBoneDisp - { - public: - uint16_t bone_index; - uint8_t bone_disp_index; - - void Read(std::istream *stream) - { - stream->read((char*) &bone_index, sizeof(uint16_t)); - stream->read((char*) &bone_disp_index, sizeof(uint8_t)); - } - }; - - enum class RigidBodyShape : uint8_t - { - Sphere = 0, - Box = 1, - Cpusel = 2 - }; - - enum class RigidBodyType : uint8_t - { - BoneConnected = 0, - Physics = 1, - ConnectedPhysics = 2 - }; - - class PmdRigidBody - { - public: - std::string name; - uint16_t related_bone_index; - uint8_t group_index; - uint16_t mask; - RigidBodyShape shape; - float size[3]; - float position[3]; - float orientation[3]; - float weight; - float linear_damping; - float anglar_damping; - float restitution; - float friction; - RigidBodyType rigid_type; - - void Read(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, sizeof(char) * 20); - name = (std::string(buffer)); - stream->read((char*) &related_bone_index, sizeof(uint16_t)); - stream->read((char*) &group_index, sizeof(uint8_t)); - stream->read((char*) &mask, sizeof(uint16_t)); - stream->read((char*) &shape, sizeof(uint8_t)); - stream->read((char*) size, sizeof(float) * 3); - stream->read((char*) position, sizeof(float) * 3); - stream->read((char*) orientation, sizeof(float) * 3); - stream->read((char*) &weight, sizeof(float)); - stream->read((char*) &linear_damping, sizeof(float)); - stream->read((char*) &anglar_damping, sizeof(float)); - stream->read((char*) &restitution, sizeof(float)); - stream->read((char*) &friction, sizeof(float)); - stream->read((char*) &rigid_type, sizeof(char)); - } - }; - - class PmdConstraint - { - public: - std::string name; - uint32_t rigid_body_index_a; - uint32_t rigid_body_index_b; - float position[3]; - float orientation[3]; - float linear_lower_limit[3]; - float linear_upper_limit[3]; - float angular_lower_limit[3]; - float angular_upper_limit[3]; - float linear_stiffness[3]; - float angular_stiffness[3]; - - void Read(std::istream *stream) - { - char buffer[20]; - stream->read(buffer, 20); - name = std::string(buffer); - stream->read((char *) &rigid_body_index_a, sizeof(uint32_t)); - stream->read((char *) &rigid_body_index_b, sizeof(uint32_t)); - stream->read((char *) position, sizeof(float) * 3); - stream->read((char *) orientation, sizeof(float) * 3); - stream->read((char *) linear_lower_limit, sizeof(float) * 3); - stream->read((char *) linear_upper_limit, sizeof(float) * 3); - stream->read((char *) angular_lower_limit, sizeof(float) * 3); - stream->read((char *) angular_upper_limit, sizeof(float) * 3); - stream->read((char *) linear_stiffness, sizeof(float) * 3); - stream->read((char *) angular_stiffness, sizeof(float) * 3); - } - }; - - class PmdModel - { - public: - float version; - PmdHeader header; - std::vector<PmdVertex> vertices; - std::vector<uint16_t> indices; - std::vector<PmdMaterial> materials; - std::vector<PmdBone> bones; - std::vector<PmdIk> iks; - std::vector<PmdFace> faces; - std::vector<uint16_t> faces_indices; - std::vector<PmdBoneDispName> bone_disp_name; - std::vector<PmdBoneDisp> bone_disp; - std::vector<std::string> toon_filenames; - std::vector<PmdRigidBody> rigid_bodies; - std::vector<PmdConstraint> constraints; - - static std::unique_ptr<PmdModel> LoadFromFile(const char *filename) - { - std::ifstream stream(filename, std::ios::binary); - if (stream.fail()) - { - std::cerr << "could not open \"" << filename << "\"" << std::endl; - return nullptr; - } - auto result = LoadFromStream(&stream); - stream.close(); - return result; - } - - static std::unique_ptr<PmdModel> LoadFromStream(std::ifstream *stream) - { - auto result = mmd::make_unique<PmdModel>(); - char buffer[100]; - - // magic - char magic[3]; - stream->read(magic, 3); - if (magic[0] != 'P' || magic[1] != 'm' || magic[2] != 'd') - { - std::cerr << "invalid file" << std::endl; - return nullptr; - } - - // version - stream->read((char*) &(result->version), sizeof(float)); - if (result ->version != 1.0f) - { - std::cerr << "invalid version" << std::endl; - return nullptr; - } - - // header - result->header.Read(stream); - - // vertices - uint32_t vertex_num; - stream->read((char*) &vertex_num, sizeof(uint32_t)); - result->vertices.resize(vertex_num); - for (uint32_t i = 0; i < vertex_num; i++) - { - result->vertices[i].Read(stream); - } - - // indices - uint32_t index_num; - stream->read((char*) &index_num, sizeof(uint32_t)); - result->indices.resize(index_num); - for (uint32_t i = 0; i < index_num; i++) - { - stream->read((char*) &result->indices[i], sizeof(uint16_t)); - } - - // materials - uint32_t material_num; - stream->read((char*) &material_num, sizeof(uint32_t)); - result->materials.resize(material_num); - for (uint32_t i = 0; i < material_num; i++) - { - result->materials[i].Read(stream); - } - - // bones - uint16_t bone_num; - stream->read((char*) &bone_num, sizeof(uint16_t)); - result->bones.resize(bone_num); - for (uint32_t i = 0; i < bone_num; i++) - { - result->bones[i].Read(stream); - } - - // iks - uint16_t ik_num; - stream->read((char*) &ik_num, sizeof(uint16_t)); - result->iks.resize(ik_num); - for (uint32_t i = 0; i < ik_num; i++) - { - result->iks[i].Read(stream); - } - - // faces - uint16_t face_num; - stream->read((char*) &face_num, sizeof(uint16_t)); - result->faces.resize(face_num); - for (uint32_t i = 0; i < face_num; i++) - { - result->faces[i].Read(stream); - } - - // face frames - uint8_t face_frame_num; - stream->read((char*) &face_frame_num, sizeof(uint8_t)); - result->faces_indices.resize(face_frame_num); - for (uint32_t i = 0; i < face_frame_num; i++) - { - stream->read((char*) &result->faces_indices[i], sizeof(uint16_t)); - } - - // bone names - uint8_t bone_disp_num; - stream->read((char*) &bone_disp_num, sizeof(uint8_t)); - result->bone_disp_name.resize(bone_disp_num); - for (uint32_t i = 0; i < bone_disp_num; i++) - { - result->bone_disp_name[i].Read(stream); - } - - // bone frame - uint32_t bone_frame_num; - stream->read((char*) &bone_frame_num, sizeof(uint32_t)); - result->bone_disp.resize(bone_frame_num); - for (uint32_t i = 0; i < bone_frame_num; i++) - { - result->bone_disp[i].Read(stream); - } - - // english name - bool english; - stream->read((char*) &english, sizeof(char)); - if (english) - { - result->header.ReadExtension(stream); - for (uint32_t i = 0; i < bone_num; i++) - { - result->bones[i].ReadExpantion(stream); - } - for (uint32_t i = 0; i < face_num; i++) - { - if (result->faces[i].type == pmd::FaceCategory::Base) - { - continue; - } - result->faces[i].ReadExpantion(stream); - } - for (uint32_t i = 0; i < result->bone_disp_name.size(); i++) - { - result->bone_disp_name[i].ReadExpantion(stream); - } - } - - // toon textures - if (stream->peek() == std::ios::traits_type::eof()) - { - result->toon_filenames.clear(); - } - else { - result->toon_filenames.resize(10); - for (uint32_t i = 0; i < 10; i++) - { - stream->read(buffer, 100); - result->toon_filenames[i] = std::string(buffer); - } - } - - // physics - if (stream->peek() == std::ios::traits_type::eof()) - { - result->rigid_bodies.clear(); - result->constraints.clear(); - } - else { - uint32_t rigid_body_num; - stream->read((char*) &rigid_body_num, sizeof(uint32_t)); - result->rigid_bodies.resize(rigid_body_num); - for (uint32_t i = 0; i < rigid_body_num; i++) - { - result->rigid_bodies[i].Read(stream); - } - uint32_t constraint_num; - stream->read((char*) &constraint_num, sizeof(uint32_t)); - result->constraints.resize(constraint_num); - for (uint32_t i = 0; i < constraint_num; i++) - { - result->constraints[i].Read(stream); - } - } - - if (stream->peek() != std::ios::traits_type::eof()) - { - std::cerr << "there is unknown data" << std::endl; - } - - return result; - } - }; -} diff --git a/thirdparty/assimp/code/MMD/MMDPmxParser.cpp b/thirdparty/assimp/code/MMD/MMDPmxParser.cpp deleted file mode 100644 index 80f0986dd7..0000000000 --- a/thirdparty/assimp/code/MMD/MMDPmxParser.cpp +++ /dev/null @@ -1,608 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above -copyright notice, this list of conditions and the -following disclaimer. - -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the -following disclaimer in the documentation and/or other -materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior -written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#include <utility> -#include "MMDPmxParser.h" -#include <assimp/StringUtils.h> -#ifdef ASSIMP_USE_HUNTER -# include <utf8/utf8.h> -#else -# include "../contrib/utf8cpp/source/utf8.h" -#endif -#include <assimp/Exceptional.h> - -namespace pmx -{ - int ReadIndex(std::istream *stream, int size) - { - switch (size) - { - case 1: - uint8_t tmp8; - stream->read((char*) &tmp8, sizeof(uint8_t)); - if (255 == tmp8) - { - return -1; - } - else { - return (int) tmp8; - } - case 2: - uint16_t tmp16; - stream->read((char*) &tmp16, sizeof(uint16_t)); - if (65535 == tmp16) - { - return -1; - } - else { - return (int) tmp16; - } - case 4: - int tmp32; - stream->read((char*) &tmp32, sizeof(int)); - return tmp32; - default: - return -1; - } - } - - std::string ReadString(std::istream *stream, uint8_t encoding) - { - int size; - stream->read((char*) &size, sizeof(int)); - std::vector<char> buffer; - if (size == 0) - { - return std::string(""); - } - buffer.reserve(size); - stream->read((char*) buffer.data(), size); - if (encoding == 0) - { - // UTF16 to UTF8 - const uint16_t* sourceStart = (uint16_t*)buffer.data(); - const unsigned int targetSize = size * 3; // enough to encode - char *targetStart = new char[targetSize]; - std::memset(targetStart, 0, targetSize * sizeof(char)); - - utf8::utf16to8( sourceStart, sourceStart + size/2, targetStart ); - - std::string result(targetStart); - delete [] targetStart; - return result; - } - else - { - // the name is already UTF8 - return std::string((const char*)buffer.data(), size); - } - } - - void PmxSetting::Read(std::istream *stream) - { - uint8_t count; - stream->read((char*) &count, sizeof(uint8_t)); - if (count < 8) - { - throw DeadlyImportError("MMD: invalid size"); - } - stream->read((char*) &encoding, sizeof(uint8_t)); - stream->read((char*) &uv, sizeof(uint8_t)); - stream->read((char*) &vertex_index_size, sizeof(uint8_t)); - stream->read((char*) &texture_index_size, sizeof(uint8_t)); - stream->read((char*) &material_index_size, sizeof(uint8_t)); - stream->read((char*) &bone_index_size, sizeof(uint8_t)); - stream->read((char*) &morph_index_size, sizeof(uint8_t)); - stream->read((char*) &rigidbody_index_size, sizeof(uint8_t)); - uint8_t temp; - for (int i = 8; i < count; i++) - { - stream->read((char*)&temp, sizeof(uint8_t)); - } - } - - void PmxVertexSkinningBDEF1::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index = ReadIndex(stream, setting->bone_index_size); - } - - void PmxVertexSkinningBDEF2::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index1 = ReadIndex(stream, setting->bone_index_size); - this->bone_index2 = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->bone_weight, sizeof(float)); - } - - void PmxVertexSkinningBDEF4::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index1 = ReadIndex(stream, setting->bone_index_size); - this->bone_index2 = ReadIndex(stream, setting->bone_index_size); - this->bone_index3 = ReadIndex(stream, setting->bone_index_size); - this->bone_index4 = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->bone_weight1, sizeof(float)); - stream->read((char*) &this->bone_weight2, sizeof(float)); - stream->read((char*) &this->bone_weight3, sizeof(float)); - stream->read((char*) &this->bone_weight4, sizeof(float)); - } - - void PmxVertexSkinningSDEF::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index1 = ReadIndex(stream, setting->bone_index_size); - this->bone_index2 = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->bone_weight, sizeof(float)); - stream->read((char*) this->sdef_c, sizeof(float) * 3); - stream->read((char*) this->sdef_r0, sizeof(float) * 3); - stream->read((char*) this->sdef_r1, sizeof(float) * 3); - } - - void PmxVertexSkinningQDEF::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index1 = ReadIndex(stream, setting->bone_index_size); - this->bone_index2 = ReadIndex(stream, setting->bone_index_size); - this->bone_index3 = ReadIndex(stream, setting->bone_index_size); - this->bone_index4 = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->bone_weight1, sizeof(float)); - stream->read((char*) &this->bone_weight2, sizeof(float)); - stream->read((char*) &this->bone_weight3, sizeof(float)); - stream->read((char*) &this->bone_weight4, sizeof(float)); - } - - void PmxVertex::Read(std::istream *stream, PmxSetting *setting) - { - stream->read((char*) this->position, sizeof(float) * 3); - stream->read((char*) this->normal, sizeof(float) * 3); - stream->read((char*) this->uv, sizeof(float) * 2); - for (int i = 0; i < setting->uv; ++i) - { - stream->read((char*) this->uva[i], sizeof(float) * 4); - } - stream->read((char*) &this->skinning_type, sizeof(PmxVertexSkinningType)); - switch (this->skinning_type) - { - case PmxVertexSkinningType::BDEF1: - this->skinning = mmd::make_unique<PmxVertexSkinningBDEF1>(); - break; - case PmxVertexSkinningType::BDEF2: - this->skinning = mmd::make_unique<PmxVertexSkinningBDEF2>(); - break; - case PmxVertexSkinningType::BDEF4: - this->skinning = mmd::make_unique<PmxVertexSkinningBDEF4>(); - break; - case PmxVertexSkinningType::SDEF: - this->skinning = mmd::make_unique<PmxVertexSkinningSDEF>(); - break; - case PmxVertexSkinningType::QDEF: - this->skinning = mmd::make_unique<PmxVertexSkinningQDEF>(); - break; - default: - throw "invalid skinning type"; - } - this->skinning->Read(stream, setting); - stream->read((char*) &this->edge, sizeof(float)); - } - - void PmxMaterial::Read(std::istream *stream, PmxSetting *setting) - { - this->material_name = ReadString(stream, setting->encoding); - this->material_english_name = ReadString(stream, setting->encoding); - stream->read((char*) this->diffuse, sizeof(float) * 4); - stream->read((char*) this->specular, sizeof(float) * 3); - stream->read((char*) &this->specularlity, sizeof(float)); - stream->read((char*) this->ambient, sizeof(float) * 3); - stream->read((char*) &this->flag, sizeof(uint8_t)); - stream->read((char*) this->edge_color, sizeof(float) * 4); - stream->read((char*) &this->edge_size, sizeof(float)); - this->diffuse_texture_index = ReadIndex(stream, setting->texture_index_size); - this->sphere_texture_index = ReadIndex(stream, setting->texture_index_size); - stream->read((char*) &this->sphere_op_mode, sizeof(uint8_t)); - stream->read((char*) &this->common_toon_flag, sizeof(uint8_t)); - if (this->common_toon_flag) - { - stream->read((char*) &this->toon_texture_index, sizeof(uint8_t)); - } - else { - this->toon_texture_index = ReadIndex(stream, setting->texture_index_size); - } - this->memo = ReadString(stream, setting->encoding); - stream->read((char*) &this->index_count, sizeof(int)); - } - - void PmxIkLink::Read(std::istream *stream, PmxSetting *setting) - { - this->link_target = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->angle_lock, sizeof(uint8_t)); - if (angle_lock == 1) - { - stream->read((char*) this->max_radian, sizeof(float) * 3); - stream->read((char*) this->min_radian, sizeof(float) * 3); - } - } - - void PmxBone::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_name = ReadString(stream, setting->encoding); - this->bone_english_name = ReadString(stream, setting->encoding); - stream->read((char*) this->position, sizeof(float) * 3); - this->parent_index = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->level, sizeof(int)); - stream->read((char*) &this->bone_flag, sizeof(uint16_t)); - if (this->bone_flag & 0x0001) { - this->target_index = ReadIndex(stream, setting->bone_index_size); - } - else { - stream->read((char*)this->offset, sizeof(float) * 3); - } - if (this->bone_flag & (0x0100 | 0x0200)) { - this->grant_parent_index = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->grant_weight, sizeof(float)); - } - if (this->bone_flag & 0x0400) { - stream->read((char*)this->lock_axis_orientation, sizeof(float) * 3); - } - if (this->bone_flag & 0x0800) { - stream->read((char*)this->local_axis_x_orientation, sizeof(float) * 3); - stream->read((char*)this->local_axis_y_orientation, sizeof(float) * 3); - } - if (this->bone_flag & 0x2000) { - stream->read((char*) &this->key, sizeof(int)); - } - if (this->bone_flag & 0x0020) { - this->ik_target_bone_index = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &ik_loop, sizeof(int)); - stream->read((char*) &ik_loop_angle_limit, sizeof(float)); - stream->read((char*) &ik_link_count, sizeof(int)); - this->ik_links = mmd::make_unique<PmxIkLink []>(ik_link_count); - for (int i = 0; i < ik_link_count; i++) { - ik_links[i].Read(stream, setting); - } - } - } - - void PmxMorphVertexOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->vertex_index = ReadIndex(stream, setting->vertex_index_size); - stream->read((char*)this->position_offset, sizeof(float) * 3); - } - - void PmxMorphUVOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->vertex_index = ReadIndex(stream, setting->vertex_index_size); - stream->read((char*)this->uv_offset, sizeof(float) * 4); - } - - void PmxMorphBoneOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->bone_index = ReadIndex(stream, setting->bone_index_size); - stream->read((char*)this->translation, sizeof(float) * 3); - stream->read((char*)this->rotation, sizeof(float) * 4); - } - - void PmxMorphMaterialOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->material_index = ReadIndex(stream, setting->material_index_size); - stream->read((char*) &this->offset_operation, sizeof(uint8_t)); - stream->read((char*)this->diffuse, sizeof(float) * 4); - stream->read((char*)this->specular, sizeof(float) * 3); - stream->read((char*) &this->specularity, sizeof(float)); - stream->read((char*)this->ambient, sizeof(float) * 3); - stream->read((char*)this->edge_color, sizeof(float) * 4); - stream->read((char*) &this->edge_size, sizeof(float)); - stream->read((char*)this->texture_argb, sizeof(float) * 4); - stream->read((char*)this->sphere_texture_argb, sizeof(float) * 4); - stream->read((char*)this->toon_texture_argb, sizeof(float) * 4); - } - - void PmxMorphGroupOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->morph_index = ReadIndex(stream, setting->morph_index_size); - stream->read((char*) &this->morph_weight, sizeof(float)); - } - - void PmxMorphFlipOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->morph_index = ReadIndex(stream, setting->morph_index_size); - stream->read((char*) &this->morph_value, sizeof(float)); - } - - void PmxMorphImplusOffset::Read(std::istream *stream, PmxSetting *setting) - { - this->rigid_body_index = ReadIndex(stream, setting->rigidbody_index_size); - stream->read((char*) &this->is_local, sizeof(uint8_t)); - stream->read((char*)this->velocity, sizeof(float) * 3); - stream->read((char*)this->angular_torque, sizeof(float) * 3); - } - - void PmxMorph::Read(std::istream *stream, PmxSetting *setting) - { - this->morph_name = ReadString(stream, setting->encoding); - this->morph_english_name = ReadString(stream, setting->encoding); - stream->read((char*) &category, sizeof(MorphCategory)); - stream->read((char*) &morph_type, sizeof(MorphType)); - stream->read((char*) &this->offset_count, sizeof(int)); - switch (this->morph_type) - { - case MorphType::Group: - group_offsets = mmd::make_unique<PmxMorphGroupOffset []>(this->offset_count); - for (int i = 0; i < offset_count; i++) - { - group_offsets[i].Read(stream, setting); - } - break; - case MorphType::Vertex: - vertex_offsets = mmd::make_unique<PmxMorphVertexOffset []>(this->offset_count); - for (int i = 0; i < offset_count; i++) - { - vertex_offsets[i].Read(stream, setting); - } - break; - case MorphType::Bone: - bone_offsets = mmd::make_unique<PmxMorphBoneOffset []>(this->offset_count); - for (int i = 0; i < offset_count; i++) - { - bone_offsets[i].Read(stream, setting); - } - break; - case MorphType::Matrial: - material_offsets = mmd::make_unique<PmxMorphMaterialOffset []>(this->offset_count); - for (int i = 0; i < offset_count; i++) - { - material_offsets[i].Read(stream, setting); - } - break; - case MorphType::UV: - case MorphType::AdditionalUV1: - case MorphType::AdditionalUV2: - case MorphType::AdditionalUV3: - case MorphType::AdditionalUV4: - uv_offsets = mmd::make_unique<PmxMorphUVOffset []>(this->offset_count); - for (int i = 0; i < offset_count; i++) - { - uv_offsets[i].Read(stream, setting); - } - break; - default: - throw DeadlyImportError("MMD: unknown morth type"); - } - } - - void PmxFrameElement::Read(std::istream *stream, PmxSetting *setting) - { - stream->read((char*) &this->element_target, sizeof(uint8_t)); - if (this->element_target == 0x00) - { - this->index = ReadIndex(stream, setting->bone_index_size); - } - else { - this->index = ReadIndex(stream, setting->morph_index_size); - } - } - - void PmxFrame::Read(std::istream *stream, PmxSetting *setting) - { - this->frame_name = ReadString(stream, setting->encoding); - this->frame_english_name = ReadString(stream, setting->encoding); - stream->read((char*) &this->frame_flag, sizeof(uint8_t)); - stream->read((char*) &this->element_count, sizeof(int)); - this->elements = mmd::make_unique<PmxFrameElement []>(this->element_count); - for (int i = 0; i < this->element_count; i++) - { - this->elements[i].Read(stream, setting); - } - } - - void PmxRigidBody::Read(std::istream *stream, PmxSetting *setting) - { - this->girid_body_name = ReadString(stream, setting->encoding); - this->girid_body_english_name = ReadString(stream, setting->encoding); - this->target_bone = ReadIndex(stream, setting->bone_index_size); - stream->read((char*) &this->group, sizeof(uint8_t)); - stream->read((char*) &this->mask, sizeof(uint16_t)); - stream->read((char*) &this->shape, sizeof(uint8_t)); - stream->read((char*) this->size, sizeof(float) * 3); - stream->read((char*) this->position, sizeof(float) * 3); - stream->read((char*) this->orientation, sizeof(float) * 3); - stream->read((char*) &this->mass, sizeof(float)); - stream->read((char*) &this->move_attenuation, sizeof(float)); - stream->read((char*) &this->rotation_attenuation, sizeof(float)); - stream->read((char*) &this->repulsion, sizeof(float)); - stream->read((char*) &this->friction, sizeof(float)); - stream->read((char*) &this->physics_calc_type, sizeof(uint8_t)); - } - - void PmxJointParam::Read(std::istream *stream, PmxSetting *setting) - { - this->rigid_body1 = ReadIndex(stream, setting->rigidbody_index_size); - this->rigid_body2 = ReadIndex(stream, setting->rigidbody_index_size); - stream->read((char*) this->position, sizeof(float) * 3); - stream->read((char*) this->orientaiton, sizeof(float) * 3); - stream->read((char*) this->move_limitation_min, sizeof(float) * 3); - stream->read((char*) this->move_limitation_max, sizeof(float) * 3); - stream->read((char*) this->rotation_limitation_min, sizeof(float) * 3); - stream->read((char*) this->rotation_limitation_max, sizeof(float) * 3); - stream->read((char*) this->spring_move_coefficient, sizeof(float) * 3); - stream->read((char*) this->spring_rotation_coefficient, sizeof(float) * 3); - } - - void PmxJoint::Read(std::istream *stream, PmxSetting *setting) - { - this->joint_name = ReadString(stream, setting->encoding); - this->joint_english_name = ReadString(stream, setting->encoding); - stream->read((char*) &this->joint_type, sizeof(uint8_t)); - this->param.Read(stream, setting); - } - - void PmxAncherRigidBody::Read(std::istream *stream, PmxSetting *setting) - { - this->related_rigid_body = ReadIndex(stream, setting->rigidbody_index_size); - this->related_vertex = ReadIndex(stream, setting->vertex_index_size); - stream->read((char*) &this->is_near, sizeof(uint8_t)); - } - - void PmxSoftBody::Read(std::istream * /*stream*/, PmxSetting * /*setting*/) - { - std::cerr << "Not Implemented Exception" << std::endl; - throw DeadlyImportError("MMD: Not Implemented Exception"); - } - - void PmxModel::Init() - { - this->version = 0.0f; - this->model_name.clear(); - this->model_english_name.clear(); - this->model_comment.clear(); - this->model_english_comment.clear(); - this->vertex_count = 0; - this->vertices = nullptr; - this->index_count = 0; - this->indices = nullptr; - this->texture_count = 0; - this->textures = nullptr; - this->material_count = 0; - this->materials = nullptr; - this->bone_count = 0; - this->bones = nullptr; - this->morph_count = 0; - this->morphs = nullptr; - this->frame_count = 0; - this->frames = nullptr; - this->rigid_body_count = 0; - this->rigid_bodies = nullptr; - this->joint_count = 0; - this->joints = nullptr; - this->soft_body_count = 0; - this->soft_bodies = nullptr; - } - - void PmxModel::Read(std::istream *stream) - { - char magic[4]; - stream->read((char*) magic, sizeof(char) * 4); - if (magic[0] != 0x50 || magic[1] != 0x4d || magic[2] != 0x58 || magic[3] != 0x20) - { - std::cerr << "invalid magic number." << std::endl; - throw DeadlyImportError("MMD: invalid magic number."); - } - stream->read((char*) &version, sizeof(float)); - if (version != 2.0f && version != 2.1f) - { - std::cerr << "this is not ver2.0 or ver2.1 but " << version << "." << std::endl; - throw DeadlyImportError("MMD: this is not ver2.0 or ver2.1 but " + to_string(version)); - } - this->setting.Read(stream); - - this->model_name = ReadString(stream, setting.encoding); - this->model_english_name = ReadString(stream, setting.encoding); - this->model_comment = ReadString(stream, setting.encoding); - this->model_english_comment = ReadString(stream, setting.encoding); - - // read vertices - stream->read((char*) &vertex_count, sizeof(int)); - this->vertices = mmd::make_unique<PmxVertex []>(vertex_count); - for (int i = 0; i < vertex_count; i++) - { - vertices[i].Read(stream, &setting); - } - - // read indices - stream->read((char*) &index_count, sizeof(int)); - this->indices = mmd::make_unique<int []>(index_count); - for (int i = 0; i < index_count; i++) - { - this->indices[i] = ReadIndex(stream, setting.vertex_index_size); - } - - // read texture names - stream->read((char*) &texture_count, sizeof(int)); - this->textures = mmd::make_unique<std::string []>(texture_count); - for (int i = 0; i < texture_count; i++) - { - this->textures[i] = ReadString(stream, setting.encoding); - } - - // read materials - stream->read((char*) &material_count, sizeof(int)); - this->materials = mmd::make_unique<PmxMaterial []>(material_count); - for (int i = 0; i < material_count; i++) - { - this->materials[i].Read(stream, &setting); - } - - // read bones - stream->read((char*) &this->bone_count, sizeof(int)); - this->bones = mmd::make_unique<PmxBone []>(this->bone_count); - for (int i = 0; i < this->bone_count; i++) - { - this->bones[i].Read(stream, &setting); - } - - // read morphs - stream->read((char*) &this->morph_count, sizeof(int)); - this->morphs = mmd::make_unique<PmxMorph []>(this->morph_count); - for (int i = 0; i < this->morph_count; i++) - { - this->morphs[i].Read(stream, &setting); - } - - // read display frames - stream->read((char*) &this->frame_count, sizeof(int)); - this->frames = mmd::make_unique<PmxFrame []>(this->frame_count); - for (int i = 0; i < this->frame_count; i++) - { - this->frames[i].Read(stream, &setting); - } - - // read rigid bodies - stream->read((char*) &this->rigid_body_count, sizeof(int)); - this->rigid_bodies = mmd::make_unique<PmxRigidBody []>(this->rigid_body_count); - for (int i = 0; i < this->rigid_body_count; i++) - { - this->rigid_bodies[i].Read(stream, &setting); - } - - // read joints - stream->read((char*) &this->joint_count, sizeof(int)); - this->joints = mmd::make_unique<PmxJoint []>(this->joint_count); - for (int i = 0; i < this->joint_count; i++) - { - this->joints[i].Read(stream, &setting); - } - } -} diff --git a/thirdparty/assimp/code/MMD/MMDPmxParser.h b/thirdparty/assimp/code/MMD/MMDPmxParser.h deleted file mode 100644 index cf523a1298..0000000000 --- a/thirdparty/assimp/code/MMD/MMDPmxParser.h +++ /dev/null @@ -1,782 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above -copyright notice, this list of conditions and the -following disclaimer. - -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the -following disclaimer in the documentation and/or other -materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior -written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#pragma once - -#include <vector> -#include <string> -#include <iostream> -#include <fstream> -#include <memory> -#include "MMDCpp14.h" - -namespace pmx -{ - class PmxSetting - { - public: - PmxSetting() - : encoding(0) - , uv(0) - , vertex_index_size(0) - , texture_index_size(0) - , material_index_size(0) - , bone_index_size(0) - , morph_index_size(0) - , rigidbody_index_size(0) - {} - - uint8_t encoding; - uint8_t uv; - uint8_t vertex_index_size; - uint8_t texture_index_size; - uint8_t material_index_size; - uint8_t bone_index_size; - uint8_t morph_index_size; - uint8_t rigidbody_index_size; - void Read(std::istream *stream); - }; - - enum class PmxVertexSkinningType : uint8_t - { - BDEF1 = 0, - BDEF2 = 1, - BDEF4 = 2, - SDEF = 3, - QDEF = 4, - }; - - class PmxVertexSkinning - { - public: - virtual void Read(std::istream *stream, PmxSetting *setting) = 0; - virtual ~PmxVertexSkinning() {} - }; - - class PmxVertexSkinningBDEF1 : public PmxVertexSkinning - { - public: - PmxVertexSkinningBDEF1() - : bone_index(0) - {} - - int bone_index; - void Read(std::istream *stresam, PmxSetting *setting); - }; - - class PmxVertexSkinningBDEF2 : public PmxVertexSkinning - { - public: - PmxVertexSkinningBDEF2() - : bone_index1(0) - , bone_index2(0) - , bone_weight(0.0f) - {} - - int bone_index1; - int bone_index2; - float bone_weight; - void Read(std::istream *stresam, PmxSetting *setting); - }; - - class PmxVertexSkinningBDEF4 : public PmxVertexSkinning - { - public: - PmxVertexSkinningBDEF4() - : bone_index1(0) - , bone_index2(0) - , bone_index3(0) - , bone_index4(0) - , bone_weight1(0.0f) - , bone_weight2(0.0f) - , bone_weight3(0.0f) - , bone_weight4(0.0f) - {} - - int bone_index1; - int bone_index2; - int bone_index3; - int bone_index4; - float bone_weight1; - float bone_weight2; - float bone_weight3; - float bone_weight4; - void Read(std::istream *stresam, PmxSetting *setting); - }; - - class PmxVertexSkinningSDEF : public PmxVertexSkinning - { - public: - PmxVertexSkinningSDEF() - : bone_index1(0) - , bone_index2(0) - , bone_weight(0.0f) - { - for (int i = 0; i < 3; ++i) { - sdef_c[i] = 0.0f; - sdef_r0[i] = 0.0f; - sdef_r1[i] = 0.0f; - } - } - - int bone_index1; - int bone_index2; - float bone_weight; - float sdef_c[3]; - float sdef_r0[3]; - float sdef_r1[3]; - void Read(std::istream *stresam, PmxSetting *setting); - }; - - class PmxVertexSkinningQDEF : public PmxVertexSkinning - { - public: - PmxVertexSkinningQDEF() - : bone_index1(0) - , bone_index2(0) - , bone_index3(0) - , bone_index4(0) - , bone_weight1(0.0f) - , bone_weight2(0.0f) - , bone_weight3(0.0f) - , bone_weight4(0.0f) - {} - - int bone_index1; - int bone_index2; - int bone_index3; - int bone_index4; - float bone_weight1; - float bone_weight2; - float bone_weight3; - float bone_weight4; - void Read(std::istream *stresam, PmxSetting *setting); - }; - - class PmxVertex - { - public: - PmxVertex() - : edge(0.0f) - { - uv[0] = uv[1] = 0.0f; - for (int i = 0; i < 3; ++i) { - position[i] = 0.0f; - normal[i] = 0.0f; - } - for (int i = 0; i < 4; ++i) { - for (int k = 0; k < 4; ++k) { - uva[i][k] = 0.0f; - } - } - } - - float position[3]; - float normal[3]; - float uv[2]; - float uva[4][4]; - PmxVertexSkinningType skinning_type; - std::unique_ptr<PmxVertexSkinning> skinning; - float edge; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxMaterial - { - public: - PmxMaterial() - : specularlity(0.0f) - , flag(0) - , edge_size(0.0f) - , diffuse_texture_index(0) - , sphere_texture_index(0) - , sphere_op_mode(0) - , common_toon_flag(0) - , toon_texture_index(0) - , index_count(0) - { - for (int i = 0; i < 3; ++i) { - specular[i] = 0.0f; - ambient[i] = 0.0f; - edge_color[i] = 0.0f; - } - for (int i = 0; i < 4; ++i) { - diffuse[i] = 0.0f; - } - } - - std::string material_name; - std::string material_english_name; - float diffuse[4]; - float specular[3]; - float specularlity; - float ambient[3]; - uint8_t flag; - float edge_color[4]; - float edge_size; - int diffuse_texture_index; - int sphere_texture_index; - uint8_t sphere_op_mode; - uint8_t common_toon_flag; - int toon_texture_index; - std::string memo; - int index_count; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxIkLink - { - public: - PmxIkLink() - : link_target(0) - , angle_lock(0) - { - for (int i = 0; i < 3; ++i) { - max_radian[i] = 0.0f; - min_radian[i] = 0.0f; - } - } - - int link_target; - uint8_t angle_lock; - float max_radian[3]; - float min_radian[3]; - void Read(std::istream *stream, PmxSetting *settingn); - }; - - class PmxBone - { - public: - PmxBone() - : parent_index(0) - , level(0) - , bone_flag(0) - , target_index(0) - , grant_parent_index(0) - , grant_weight(0.0f) - , key(0) - , ik_target_bone_index(0) - , ik_loop(0) - , ik_loop_angle_limit(0.0f) - , ik_link_count(0) - { - for (int i = 0; i < 3; ++i) { - position[i] = 0.0f; - offset[i] = 0.0f; - lock_axis_orientation[i] = 0.0f; - local_axis_x_orientation[i] = 0.0f; - local_axis_y_orientation[i] = 0.0f; - } - } - - std::string bone_name; - std::string bone_english_name; - float position[3]; - int parent_index; - int level; - uint16_t bone_flag; - float offset[3]; - int target_index; - int grant_parent_index; - float grant_weight; - float lock_axis_orientation[3]; - float local_axis_x_orientation[3]; - float local_axis_y_orientation[3]; - int key; - int ik_target_bone_index; - int ik_loop; - float ik_loop_angle_limit; - int ik_link_count; - std::unique_ptr<PmxIkLink []> ik_links; - void Read(std::istream *stream, PmxSetting *setting); - }; - - enum class MorphType : uint8_t - { - Group = 0, - Vertex = 1, - Bone = 2, - UV = 3, - AdditionalUV1 = 4, - AdditionalUV2 = 5, - AdditionalUV3 = 6, - AdditionalUV4 = 7, - Matrial = 8, - Flip = 9, - Implus = 10, - }; - - enum class MorphCategory : uint8_t - { - ReservedCategory = 0, - Eyebrow = 1, - Eye = 2, - Mouth = 3, - Other = 4, - }; - - class PmxMorphOffset - { - public: - void virtual Read(std::istream *stream, PmxSetting *setting) = 0; - }; - - class PmxMorphVertexOffset : public PmxMorphOffset - { - public: - PmxMorphVertexOffset() - : vertex_index(0) - { - for (int i = 0; i < 3; ++i) { - position_offset[i] = 0.0f; - } - } - int vertex_index; - float position_offset[3]; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphUVOffset : public PmxMorphOffset - { - public: - PmxMorphUVOffset() - : vertex_index(0) - { - for (int i = 0; i < 4; ++i) { - uv_offset[i] = 0.0f; - } - } - int vertex_index; - float uv_offset[4]; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphBoneOffset : public PmxMorphOffset - { - public: - PmxMorphBoneOffset() - : bone_index(0) - { - for (int i = 0; i < 3; ++i) { - translation[i] = 0.0f; - } - for (int i = 0; i < 4; ++i) { - rotation[i] = 0.0f; - } - } - int bone_index; - float translation[3]; - float rotation[4]; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphMaterialOffset : public PmxMorphOffset - { - public: - PmxMorphMaterialOffset() - : specularity(0.0f) - , edge_size(0.0f) - { - for (int i = 0; i < 3; ++i) { - specular[i] = 0.0f; - ambient[i] = 0.0f; - } - for (int i = 0; i < 4; ++i) { - diffuse[i] = 0.0f; - edge_color[i] = 0.0f; - texture_argb[i] = 0.0f; - sphere_texture_argb[i] = 0.0f; - toon_texture_argb[i] = 0.0f; - } - } - int material_index; - uint8_t offset_operation; - float diffuse[4]; - float specular[3]; - float specularity; - float ambient[3]; - float edge_color[4]; - float edge_size; - float texture_argb[4]; - float sphere_texture_argb[4]; - float toon_texture_argb[4]; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphGroupOffset : public PmxMorphOffset - { - public: - PmxMorphGroupOffset() - : morph_index(0) - , morph_weight(0.0f) - {} - int morph_index; - float morph_weight; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphFlipOffset : public PmxMorphOffset - { - public: - PmxMorphFlipOffset() - : morph_index(0) - , morph_value(0.0f) - {} - int morph_index; - float morph_value; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorphImplusOffset : public PmxMorphOffset - { - public: - PmxMorphImplusOffset() - : rigid_body_index(0) - , is_local(0) - { - for (int i = 0; i < 3; ++i) { - velocity[i] = 0.0f; - angular_torque[i] = 0.0f; - } - } - int rigid_body_index; - uint8_t is_local; - float velocity[3]; - float angular_torque[3]; - void Read(std::istream *stream, PmxSetting *setting); //override; - }; - - class PmxMorph - { - public: - PmxMorph() - : offset_count(0) - { - } - std::string morph_name; - std::string morph_english_name; - MorphCategory category; - MorphType morph_type; - int offset_count; - std::unique_ptr<PmxMorphVertexOffset []> vertex_offsets; - std::unique_ptr<PmxMorphUVOffset []> uv_offsets; - std::unique_ptr<PmxMorphBoneOffset []> bone_offsets; - std::unique_ptr<PmxMorphMaterialOffset []> material_offsets; - std::unique_ptr<PmxMorphGroupOffset []> group_offsets; - std::unique_ptr<PmxMorphFlipOffset []> flip_offsets; - std::unique_ptr<PmxMorphImplusOffset []> implus_offsets; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxFrameElement - { - public: - PmxFrameElement() - : element_target(0) - , index(0) - { - } - uint8_t element_target; - int index; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxFrame - { - public: - PmxFrame() - : frame_flag(0) - , element_count(0) - { - } - std::string frame_name; - std::string frame_english_name; - uint8_t frame_flag; - int element_count; - std::unique_ptr<PmxFrameElement []> elements; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxRigidBody - { - public: - PmxRigidBody() - : target_bone(0) - , group(0) - , mask(0) - , shape(0) - , mass(0.0f) - , move_attenuation(0.0f) - , rotation_attenuation(0.0f) - , repulsion(0.0f) - , friction(0.0f) - , physics_calc_type(0) - { - for (int i = 0; i < 3; ++i) { - size[i] = 0.0f; - position[i] = 0.0f; - orientation[i] = 0.0f; - } - } - std::string girid_body_name; - std::string girid_body_english_name; - int target_bone; - uint8_t group; - uint16_t mask; - uint8_t shape; - float size[3]; - float position[3]; - float orientation[3]; - float mass; - float move_attenuation; - float rotation_attenuation; - float repulsion; - float friction; - uint8_t physics_calc_type; - void Read(std::istream *stream, PmxSetting *setting); - }; - - enum class PmxJointType : uint8_t - { - Generic6DofSpring = 0, - Generic6Dof = 1, - Point2Point = 2, - ConeTwist = 3, - Slider = 5, - Hinge = 6 - }; - - class PmxJointParam - { - public: - PmxJointParam() - : rigid_body1(0) - , rigid_body2(0) - { - for (int i = 0; i < 3; ++i) { - position[i] = 0.0f; - orientaiton[i] = 0.0f; - move_limitation_min[i] = 0.0f; - move_limitation_max[i] = 0.0f; - rotation_limitation_min[i] = 0.0f; - rotation_limitation_max[i] = 0.0f; - spring_move_coefficient[i] = 0.0f; - spring_rotation_coefficient[i] = 0.0f; - } - } - int rigid_body1; - int rigid_body2; - float position[3]; - float orientaiton[3]; - float move_limitation_min[3]; - float move_limitation_max[3]; - float rotation_limitation_min[3]; - float rotation_limitation_max[3]; - float spring_move_coefficient[3]; - float spring_rotation_coefficient[3]; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxJoint - { - public: - std::string joint_name; - std::string joint_english_name; - PmxJointType joint_type; - PmxJointParam param; - void Read(std::istream *stream, PmxSetting *setting); - }; - - enum PmxSoftBodyFlag : uint8_t - { - BLink = 0x01, - Cluster = 0x02, - Link = 0x04 - }; - - class PmxAncherRigidBody - { - public: - PmxAncherRigidBody() - : related_rigid_body(0) - , related_vertex(0) - , is_near(false) - {} - int related_rigid_body; - int related_vertex; - bool is_near; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxSoftBody - { - public: - PmxSoftBody() - : shape(0) - , target_material(0) - , group(0) - , mask(0) - , blink_distance(0) - , cluster_count(0) - , mass(0.0) - , collisioni_margin(0.0) - , aero_model(0) - , VCF(0.0f) - , DP(0.0f) - , DG(0.0f) - , LF(0.0f) - , PR(0.0f) - , VC(0.0f) - , DF(0.0f) - , MT(0.0f) - , CHR(0.0f) - , KHR(0.0f) - , SHR(0.0f) - , AHR(0.0f) - , SRHR_CL(0.0f) - , SKHR_CL(0.0f) - , SSHR_CL(0.0f) - , SR_SPLT_CL(0.0f) - , SK_SPLT_CL(0.0f) - , SS_SPLT_CL(0.0f) - , V_IT(0) - , P_IT(0) - , D_IT(0) - , C_IT(0) - , LST(0.0f) - , AST(0.0f) - , VST(0.0f) - , anchor_count(0) - , pin_vertex_count(0) - {} - std::string soft_body_name; - std::string soft_body_english_name; - uint8_t shape; - int target_material; - uint8_t group; - uint16_t mask; - PmxSoftBodyFlag flag; - int blink_distance; - int cluster_count; - float mass; - float collisioni_margin; - int aero_model; - float VCF; - float DP; - float DG; - float LF; - float PR; - float VC; - float DF; - float MT; - float CHR; - float KHR; - float SHR; - float AHR; - float SRHR_CL; - float SKHR_CL; - float SSHR_CL; - float SR_SPLT_CL; - float SK_SPLT_CL; - float SS_SPLT_CL; - int V_IT; - int P_IT; - int D_IT; - int C_IT; - float LST; - float AST; - float VST; - int anchor_count; - std::unique_ptr<PmxAncherRigidBody []> anchers; - int pin_vertex_count; - std::unique_ptr<int []> pin_vertices; - void Read(std::istream *stream, PmxSetting *setting); - }; - - class PmxModel - { - public: - PmxModel() - : version(0.0f) - , vertex_count(0) - , index_count(0) - , texture_count(0) - , material_count(0) - , bone_count(0) - , morph_count(0) - , frame_count(0) - , rigid_body_count(0) - , joint_count(0) - , soft_body_count(0) - {} - - float version; - PmxSetting setting; - std::string model_name; - std::string model_english_name; - std::string model_comment; - std::string model_english_comment; - int vertex_count; - std::unique_ptr<PmxVertex []> vertices; - int index_count; - std::unique_ptr<int []> indices; - int texture_count; - std::unique_ptr< std::string []> textures; - int material_count; - std::unique_ptr<PmxMaterial []> materials; - int bone_count; - std::unique_ptr<PmxBone []> bones; - int morph_count; - std::unique_ptr<PmxMorph []> morphs; - int frame_count; - std::unique_ptr<PmxFrame [] > frames; - int rigid_body_count; - std::unique_ptr<PmxRigidBody []> rigid_bodies; - int joint_count; - std::unique_ptr<PmxJoint []> joints; - int soft_body_count; - std::unique_ptr<PmxSoftBody []> soft_bodies; - void Init(); - void Read(std::istream *stream); - //static std::unique_ptr<PmxModel> ReadFromFile(const char *filename); - //static std::unique_ptr<PmxModel> ReadFromStream(std::istream *stream); - }; -} diff --git a/thirdparty/assimp/code/MMD/MMDVmdParser.h b/thirdparty/assimp/code/MMD/MMDVmdParser.h deleted file mode 100644 index 947c3a2422..0000000000 --- a/thirdparty/assimp/code/MMD/MMDVmdParser.h +++ /dev/null @@ -1,376 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -* Redistributions of source code must retain the above -copyright notice, this list of conditions and the -following disclaimer. - -* Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the -following disclaimer in the documentation and/or other -materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its -contributors may be used to endorse or promote products -derived from this software without specific prior -written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ----------------------------------------------------------------------- -*/ -#pragma once - -#include <vector> -#include <string> -#include <memory> -#include <iostream> -#include <fstream> -#include <ostream> -#include "MMDCpp14.h" - -namespace vmd -{ - class VmdBoneFrame - { - public: - std::string name; - int frame; - float position[3]; - float orientation[4]; - char interpolation[4][4][4]; - - void Read(std::istream* stream) - { - char buffer[15]; - stream->read((char*) buffer, sizeof(char)*15); - name = std::string(buffer); - stream->read((char*) &frame, sizeof(int)); - stream->read((char*) position, sizeof(float)*3); - stream->read((char*) orientation, sizeof(float)*4); - stream->read((char*) interpolation, sizeof(char) * 4 * 4 * 4); - } - - void Write(std::ostream* stream) - { - stream->write((char*)name.c_str(), sizeof(char) * 15); - stream->write((char*)&frame, sizeof(int)); - stream->write((char*)position, sizeof(float) * 3); - stream->write((char*)orientation, sizeof(float) * 4); - stream->write((char*)interpolation, sizeof(char) * 4 * 4 * 4); - } - }; - - class VmdFaceFrame - { - public: - std::string face_name; - float weight; - uint32_t frame; - - void Read(std::istream* stream) - { - char buffer[15]; - stream->read((char*) &buffer, sizeof(char) * 15); - face_name = std::string(buffer); - stream->read((char*) &frame, sizeof(int)); - stream->read((char*) &weight, sizeof(float)); - } - - void Write(std::ostream* stream) - { - stream->write((char*)face_name.c_str(), sizeof(char) * 15); - stream->write((char*)&frame, sizeof(int)); - stream->write((char*)&weight, sizeof(float)); - } - }; - - class VmdCameraFrame - { - public: - int frame; - float distance; - float position[3]; - float orientation[3]; - char interpolation[6][4]; - float angle; - char unknown[3]; - - void Read(std::istream *stream) - { - stream->read((char*) &frame, sizeof(int)); - stream->read((char*) &distance, sizeof(float)); - stream->read((char*) position, sizeof(float) * 3); - stream->read((char*) orientation, sizeof(float) * 3); - stream->read((char*) interpolation, sizeof(char) * 24); - stream->read((char*) &angle, sizeof(float)); - stream->read((char*) unknown, sizeof(char) * 3); - } - - void Write(std::ostream *stream) - { - stream->write((char*)&frame, sizeof(int)); - stream->write((char*)&distance, sizeof(float)); - stream->write((char*)position, sizeof(float) * 3); - stream->write((char*)orientation, sizeof(float) * 3); - stream->write((char*)interpolation, sizeof(char) * 24); - stream->write((char*)&angle, sizeof(float)); - stream->write((char*)unknown, sizeof(char) * 3); - } - }; - - class VmdLightFrame - { - public: - int frame; - float color[3]; - float position[3]; - - void Read(std::istream* stream) - { - stream->read((char*) &frame, sizeof(int)); - stream->read((char*) color, sizeof(float) * 3); - stream->read((char*) position, sizeof(float) * 3); - } - - void Write(std::ostream* stream) - { - stream->write((char*)&frame, sizeof(int)); - stream->write((char*)color, sizeof(float) * 3); - stream->write((char*)position, sizeof(float) * 3); - } - }; - - class VmdIkEnable - { - public: - std::string ik_name; - bool enable; - }; - - class VmdIkFrame - { - public: - int frame; - bool display; - std::vector<VmdIkEnable> ik_enable; - - void Read(std::istream *stream) - { - char buffer[20]; - stream->read((char*) &frame, sizeof(int)); - stream->read((char*) &display, sizeof(uint8_t)); - int ik_count; - stream->read((char*) &ik_count, sizeof(int)); - ik_enable.resize(ik_count); - for (int i = 0; i < ik_count; i++) - { - stream->read(buffer, 20); - ik_enable[i].ik_name = std::string(buffer); - stream->read((char*) &ik_enable[i].enable, sizeof(uint8_t)); - } - } - - void Write(std::ostream *stream) - { - stream->write((char*)&frame, sizeof(int)); - stream->write((char*)&display, sizeof(uint8_t)); - int ik_count = static_cast<int>(ik_enable.size()); - stream->write((char*)&ik_count, sizeof(int)); - for (int i = 0; i < ik_count; i++) - { - const VmdIkEnable& ik_enable = this->ik_enable.at(i); - stream->write(ik_enable.ik_name.c_str(), 20); - stream->write((char*)&ik_enable.enable, sizeof(uint8_t)); - } - } - }; - - class VmdMotion - { - public: - std::string model_name; - int version; - std::vector<VmdBoneFrame> bone_frames; - std::vector<VmdFaceFrame> face_frames; - std::vector<VmdCameraFrame> camera_frames; - std::vector<VmdLightFrame> light_frames; - std::vector<VmdIkFrame> ik_frames; - - static std::unique_ptr<VmdMotion> LoadFromFile(char const *filename) - { - std::ifstream stream(filename, std::ios::binary); - auto result = LoadFromStream(&stream); - stream.close(); - return result; - } - - static std::unique_ptr<VmdMotion> LoadFromStream(std::ifstream *stream) - { - - char buffer[30]; - auto result = mmd::make_unique<VmdMotion>(); - - // magic and version - stream->read((char*) buffer, 30); - if (strncmp(buffer, "Vocaloid Motion Data", 20)) - { - std::cerr << "invalid vmd file." << std::endl; - return nullptr; - } - result->version = std::atoi(buffer + 20); - - // name - stream->read(buffer, 20); - result->model_name = std::string(buffer); - - // bone frames - int bone_frame_num; - stream->read((char*) &bone_frame_num, sizeof(int)); - result->bone_frames.resize(bone_frame_num); - for (int i = 0; i < bone_frame_num; i++) - { - result->bone_frames[i].Read(stream); - } - - // face frames - int face_frame_num; - stream->read((char*) &face_frame_num, sizeof(int)); - result->face_frames.resize(face_frame_num); - for (int i = 0; i < face_frame_num; i++) - { - result->face_frames[i].Read(stream); - } - - // camera frames - int camera_frame_num; - stream->read((char*) &camera_frame_num, sizeof(int)); - result->camera_frames.resize(camera_frame_num); - for (int i = 0; i < camera_frame_num; i++) - { - result->camera_frames[i].Read(stream); - } - - // light frames - int light_frame_num; - stream->read((char*) &light_frame_num, sizeof(int)); - result->light_frames.resize(light_frame_num); - for (int i = 0; i < light_frame_num; i++) - { - result->light_frames[i].Read(stream); - } - - // unknown2 - stream->read(buffer, 4); - - // ik frames - if (stream->peek() != std::ios::traits_type::eof()) - { - int ik_num; - stream->read((char*) &ik_num, sizeof(int)); - result->ik_frames.resize(ik_num); - for (int i = 0; i < ik_num; i++) - { - result->ik_frames[i].Read(stream); - } - } - - if (stream->peek() != std::ios::traits_type::eof()) - { - std::cerr << "vmd stream has unknown data." << std::endl; - } - - return result; - } - - bool SaveToFile(const std::u16string& /*filename*/) - { - // TODO: How to adapt u16string to string? - /* - std::ofstream stream(filename.c_str(), std::ios::binary); - auto result = SaveToStream(&stream); - stream.close(); - return result; - */ - return false; - } - - bool SaveToStream(std::ofstream *stream) - { - std::string magic = "Vocaloid Motion Data 0002\0"; - magic.resize(30); - - // magic and version - stream->write(magic.c_str(), 30); - - // name - stream->write(model_name.c_str(), 20); - - // bone frames - const int bone_frame_num = static_cast<int>(bone_frames.size()); - stream->write(reinterpret_cast<const char*>(&bone_frame_num), sizeof(int)); - for (int i = 0; i < bone_frame_num; i++) - { - bone_frames[i].Write(stream); - } - - // face frames - const int face_frame_num = static_cast<int>(face_frames.size()); - stream->write(reinterpret_cast<const char*>(&face_frame_num), sizeof(int)); - for (int i = 0; i < face_frame_num; i++) - { - face_frames[i].Write(stream); - } - - // camera frames - const int camera_frame_num = static_cast<int>(camera_frames.size()); - stream->write(reinterpret_cast<const char*>(&camera_frame_num), sizeof(int)); - for (int i = 0; i < camera_frame_num; i++) - { - camera_frames[i].Write(stream); - } - - // light frames - const int light_frame_num = static_cast<int>(light_frames.size()); - stream->write(reinterpret_cast<const char*>(&light_frame_num), sizeof(int)); - for (int i = 0; i < light_frame_num; i++) - { - light_frames[i].Write(stream); - } - - // self shadow datas - const int self_shadow_num = 0; - stream->write(reinterpret_cast<const char*>(&self_shadow_num), sizeof(int)); - - // ik frames - const int ik_num = static_cast<int>(ik_frames.size()); - stream->write(reinterpret_cast<const char*>(&ik_num), sizeof(int)); - for (int i = 0; i < ik_num; i++) - { - ik_frames[i].Write(stream); - } - - return true; - } - }; -} diff --git a/thirdparty/assimp/code/Material/MaterialSystem.cpp b/thirdparty/assimp/code/Material/MaterialSystem.cpp index d0b39093b6..0be6e9f7bb 100644 --- a/thirdparty/assimp/code/Material/MaterialSystem.cpp +++ b/thirdparty/assimp/code/Material/MaterialSystem.cpp @@ -51,7 +51,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <assimp/types.h> #include <assimp/material.h> #include <assimp/DefaultLogger.hpp> -#include <assimp/Macros.h> using namespace Assimp; @@ -545,23 +544,7 @@ aiReturn aiMaterial::AddProperty (const aiString* pInput, unsigned int type, unsigned int index) { - // We don't want to add the whole buffer .. write a 32 bit length - // prefix followed by the zero-terminated UTF8 string. - // (HACK) I don't want to break the ABI now, but we definitely - // ought to change aiString::mLength to uint32_t one day. - if (sizeof(size_t) == 8) { - aiString copy = *pInput; - uint32_t* s = reinterpret_cast<uint32_t*>(©.length); - s[1] = static_cast<uint32_t>(pInput->length); - - return AddBinaryProperty(s+1, - static_cast<unsigned int>(pInput->length+1+4), - pKey, - type, - index, - aiPTI_String); - } - ai_assert(sizeof(size_t)==4); + ai_assert(sizeof(ai_uint32)==4); return AddBinaryProperty(pInput, static_cast<unsigned int>(pInput->length+1+4), pKey, diff --git a/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.cpp b/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.cpp new file mode 100644 index 0000000000..75daeb6b59 --- /dev/null +++ b/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.cpp @@ -0,0 +1,268 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2019, assimp team + + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ +#include "ArmaturePopulate.h" + +#include <assimp/BaseImporter.h> +#include <assimp/DefaultLogger.hpp> +#include <assimp/postprocess.h> +#include <assimp/scene.h> +#include <iostream> + +namespace Assimp { + +/// The default class constructor. +ArmaturePopulate::ArmaturePopulate() : BaseProcess() +{} + +/// The class destructor. +ArmaturePopulate::~ArmaturePopulate() +{} + +bool ArmaturePopulate::IsActive(unsigned int pFlags) const { + return (pFlags & aiProcess_PopulateArmatureData) != 0; +} + +void ArmaturePopulate::SetupProperties(const Importer *pImp) { + // do nothing +} + +void ArmaturePopulate::Execute(aiScene *out) { + + // Now convert all bone positions to the correct mOffsetMatrix + std::vector<aiBone *> bones; + std::vector<aiNode *> nodes; + std::map<aiBone *, aiNode *> bone_stack; + BuildBoneList(out->mRootNode, out->mRootNode, out, bones); + BuildNodeList(out->mRootNode, nodes); + + BuildBoneStack(out->mRootNode, out->mRootNode, out, bones, bone_stack, nodes); + + ASSIMP_LOG_DEBUG_F("Bone stack size: ", bone_stack.size()); + + for (std::pair<aiBone *, aiNode *> kvp : bone_stack) { + aiBone *bone = kvp.first; + aiNode *bone_node = kvp.second; + ASSIMP_LOG_DEBUG_F("active node lookup: ", bone->mName.C_Str()); + // lcl transform grab - done in generate_nodes :) + + // bone->mOffsetMatrix = bone_node->mTransformation; + aiNode *armature = GetArmatureRoot(bone_node, bones); + + ai_assert(armature); + + // set up bone armature id + bone->mArmature = armature; + + // set this bone node to be referenced properly + ai_assert(bone_node); + bone->mNode = bone_node; + } +} + + +/* Reprocess all nodes to calculate bone transforms properly based on the REAL + * mOffsetMatrix not the local. */ +/* Before this would use mesh transforms which is wrong for bone transforms */ +/* Before this would work for simple character skeletons but not complex meshes + * with multiple origins */ +/* Source: sketch fab log cutter fbx */ +void ArmaturePopulate::BuildBoneList(aiNode *current_node, + const aiNode *root_node, + const aiScene *scene, + std::vector<aiBone *> &bones) { + ai_assert(scene); + for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) { + aiNode *child = current_node->mChildren[nodeId]; + ai_assert(child); + + // check for bones + for (unsigned int meshId = 0; meshId < child->mNumMeshes; ++meshId) { + ai_assert(child->mMeshes); + unsigned int mesh_index = child->mMeshes[meshId]; + aiMesh *mesh = scene->mMeshes[mesh_index]; + ai_assert(mesh); + + for (unsigned int boneId = 0; boneId < mesh->mNumBones; ++boneId) { + aiBone *bone = mesh->mBones[boneId]; + ai_assert(bone); + + // duplicate meshes exist with the same bones sometimes :) + // so this must be detected + if (std::find(bones.begin(), bones.end(), bone) == bones.end()) { + // add the element once + bones.push_back(bone); + } + } + + // find mesh and get bones + // then do recursive lookup for bones in root node hierarchy + } + + BuildBoneList(child, root_node, scene, bones); + } +} + +/* Prepare flat node list which can be used for non recursive lookups later */ +void ArmaturePopulate::BuildNodeList(const aiNode *current_node, + std::vector<aiNode *> &nodes) { + ai_assert(current_node); + + for (unsigned int nodeId = 0; nodeId < current_node->mNumChildren; ++nodeId) { + aiNode *child = current_node->mChildren[nodeId]; + ai_assert(child); + + nodes.push_back(child); + + BuildNodeList(child, nodes); + } +} + +/* A bone stack allows us to have multiple armatures, with the same bone names + * A bone stack allows us also to retrieve bones true transform even with + * duplicate names :) + */ +void ArmaturePopulate::BuildBoneStack(aiNode *current_node, + const aiNode *root_node, + const aiScene *scene, + const std::vector<aiBone *> &bones, + std::map<aiBone *, aiNode *> &bone_stack, + std::vector<aiNode *> &node_stack) { + ai_assert(scene); + ai_assert(root_node); + ai_assert(!node_stack.empty()); + + for (aiBone *bone : bones) { + ai_assert(bone); + aiNode *node = GetNodeFromStack(bone->mName, node_stack); + if (node == nullptr) { + node_stack.clear(); + BuildNodeList(root_node, node_stack); + ASSIMP_LOG_DEBUG_F("Resetting bone stack: nullptr element ", bone->mName.C_Str()); + + node = GetNodeFromStack(bone->mName, node_stack); + + if (!node) { + ASSIMP_LOG_ERROR("serious import issue node for bone was not detected"); + continue; + } + } + + ASSIMP_LOG_DEBUG_F("Successfully added bone[", bone->mName.C_Str(), "] to stack and bone node is: ", node->mName.C_Str()); + + bone_stack.insert(std::pair<aiBone *, aiNode *>(bone, node)); + } +} + + +/* Returns the armature root node */ +/* This is required to be detected for a bone initially, it will recurse up + * until it cannot find another bone and return the node No known failure + * points. (yet) + */ +aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node, + std::vector<aiBone *> &bone_list) { + while (bone_node) { + if (!IsBoneNode(bone_node->mName, bone_list)) { + ASSIMP_LOG_DEBUG_F("GetArmatureRoot() Found valid armature: ", bone_node->mName.C_Str()); + return bone_node; + } + + bone_node = bone_node->mParent; + } + + ASSIMP_LOG_ERROR("GetArmatureRoot() can't find armature!"); + + return nullptr; +} + + + +/* Simple IsBoneNode check if this could be a bone */ +bool ArmaturePopulate::IsBoneNode(const aiString &bone_name, + std::vector<aiBone *> &bones) { + for (aiBone *bone : bones) { + if (bone->mName == bone_name) { + return true; + } + } + + return false; +} + +/* Pop this node by name from the stack if found */ +/* Used in multiple armature situations with duplicate node / bone names */ +/* Known flaw: cannot have nodes with bone names, will be fixed in later release + */ +/* (serious to be fixed) Known flaw: nodes which have more than one bone could + * be prematurely dropped from stack */ +aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name, + std::vector<aiNode *> &nodes) { + std::vector<aiNode *>::iterator iter; + aiNode *found = nullptr; + for (iter = nodes.begin(); iter < nodes.end(); ++iter) { + aiNode *element = *iter; + ai_assert(element); + // node valid and node name matches + if (element->mName == node_name) { + found = element; + break; + } + } + + if (found != nullptr) { + ASSIMP_LOG_INFO_F("Removed node from stack: ", found->mName.C_Str()); + // now pop the element from the node list + nodes.erase(iter); + + return found; + } + + // unique names can cause this problem + ASSIMP_LOG_ERROR("[Serious] GetNodeFromStack() can't find node from stack!"); + + return nullptr; +} + + + + +} // Namespace Assimp diff --git a/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.h b/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.h new file mode 100644 index 0000000000..aa1ad7c80c --- /dev/null +++ b/thirdparty/assimp/code/PostProcessing/ArmaturePopulate.h @@ -0,0 +1,112 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2019, assimp team + + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the +following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ +#ifndef ARMATURE_POPULATE_H_ +#define ARMATURE_POPULATE_H_ + +#include "Common/BaseProcess.h" +#include <assimp/BaseImporter.h> +#include <vector> +#include <map> + + +struct aiNode; +struct aiBone; + +namespace Assimp { + +// --------------------------------------------------------------------------- +/** Armature Populate: This is a post process designed + * To save you time when importing models into your game engines + * This was originally designed only for fbx but will work with other formats + * it is intended to auto populate aiBone data with armature and the aiNode + * This is very useful when dealing with skinned meshes + * or when dealing with many different skeletons + * It's off by default but recommend that you try it and use it + * It should reduce down any glue code you have in your + * importers + * You can contact RevoluPowered <gordon@gordonite.tech> + * For more info about this +*/ +class ASSIMP_API ArmaturePopulate : public BaseProcess { +public: + /// The default class constructor. + ArmaturePopulate(); + + /// The class destructor. + virtual ~ArmaturePopulate(); + + /// Overwritten, @see BaseProcess + virtual bool IsActive( unsigned int pFlags ) const; + + /// Overwritten, @see BaseProcess + virtual void SetupProperties( const Importer* pImp ); + + /// Overwritten, @see BaseProcess + virtual void Execute( aiScene* pScene ); + + static aiNode *GetArmatureRoot(aiNode *bone_node, + std::vector<aiBone *> &bone_list); + + static bool IsBoneNode(const aiString &bone_name, + std::vector<aiBone *> &bones); + + static aiNode *GetNodeFromStack(const aiString &node_name, + std::vector<aiNode *> &nodes); + + static void BuildNodeList(const aiNode *current_node, + std::vector<aiNode *> &nodes); + + static void BuildBoneList(aiNode *current_node, const aiNode *root_node, + const aiScene *scene, + std::vector<aiBone *> &bones); + + static void BuildBoneStack(aiNode *current_node, const aiNode *root_node, + const aiScene *scene, + const std::vector<aiBone *> &bones, + std::map<aiBone *, aiNode *> &bone_stack, + std::vector<aiNode *> &node_stack); +}; + +} // Namespace Assimp + + +#endif // SCALE_PROCESS_H_
\ No newline at end of file diff --git a/thirdparty/assimp/code/PostProcessing/ComputeUVMappingProcess.cpp b/thirdparty/assimp/code/PostProcessing/ComputeUVMappingProcess.cpp index bb571a551b..df4d44337d 100644 --- a/thirdparty/assimp/code/PostProcessing/ComputeUVMappingProcess.cpp +++ b/thirdparty/assimp/code/PostProcessing/ComputeUVMappingProcess.cpp @@ -354,12 +354,12 @@ void ComputeUVMappingProcess::ComputePlaneMapping(aiMesh* mesh,const aiVector3D& } else if (axis * base_axis_z >= angle_epsilon) { FindMeshCenter(mesh, center, min, max); - diffu = max.y - min.y; - diffv = max.z - min.z; + diffu = max.x - min.x; + diffv = max.y - min.y; for (unsigned int pnt = 0; pnt < mesh->mNumVertices;++pnt) { const aiVector3D& pos = mesh->mVertices[pnt]; - out[pnt].Set((pos.y - min.y) / diffu,(pos.x - min.x) / diffv,0.0); + out[pnt].Set((pos.x - min.x) / diffu,(pos.y - min.y) / diffv,0.0); } } // slower code path in case the mapping axis is not one of the coordinate system axes diff --git a/thirdparty/assimp/code/PostProcessing/FindInvalidDataProcess.cpp b/thirdparty/assimp/code/PostProcessing/FindInvalidDataProcess.cpp index 433f042448..016884c6e7 100644 --- a/thirdparty/assimp/code/PostProcessing/FindInvalidDataProcess.cpp +++ b/thirdparty/assimp/code/PostProcessing/FindInvalidDataProcess.cpp @@ -52,7 +52,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "FindInvalidDataProcess.h" #include "ProcessHelper.h" -#include <assimp/Macros.h> #include <assimp/Exceptional.h> #include <assimp/qnan.h> diff --git a/thirdparty/assimp/code/PostProcessing/JoinVerticesProcess.cpp b/thirdparty/assimp/code/PostProcessing/JoinVerticesProcess.cpp index 914ec05b46..f121fc60d3 100644 --- a/thirdparty/assimp/code/PostProcessing/JoinVerticesProcess.cpp +++ b/thirdparty/assimp/code/PostProcessing/JoinVerticesProcess.cpp @@ -431,31 +431,6 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) bone->mWeights = new aiVertexWeight[bone->mNumWeights]; memcpy( bone->mWeights, &newWeights[0], bone->mNumWeights * sizeof( aiVertexWeight)); } - else { - - /* NOTE: - * - * In the algorithm above we're assuming that there are no vertices - * with a different bone weight setup at the same position. That wouldn't - * make sense, but it is not absolutely impossible. SkeletonMeshBuilder - * for example generates such input data if two skeleton points - * share the same position. Again this doesn't make sense but is - * reality for some model formats (MD5 for example uses these special - * nodes as attachment tags for its weapons). - * - * Then it is possible that a bone has no weights anymore .... as a quick - * workaround, we're just removing these bones. If they're animated, - * model geometry might be modified but at least there's no risk of a crash. - */ - delete bone; - --pMesh->mNumBones; - for (unsigned int n = a; n < pMesh->mNumBones; ++n) { - pMesh->mBones[n] = pMesh->mBones[n+1]; - } - - --a; - ASSIMP_LOG_WARN("Removing bone -> no weights remaining"); - } } return pMesh->mNumVertices; } diff --git a/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.cpp b/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.cpp index 50ff5ed93d..41f50a5ba5 100644 --- a/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.cpp +++ b/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.cpp @@ -224,3 +224,32 @@ bool MakeVerboseFormatProcess::MakeVerboseFormat(aiMesh* pcMesh) } return (pcMesh->mNumVertices != iOldNumVertices); } + + +// ------------------------------------------------------------------------------------------------ +bool IsMeshInVerboseFormat(const aiMesh* mesh) { + // avoid slow vector<bool> specialization + std::vector<unsigned int> seen(mesh->mNumVertices,0); + for(unsigned int i = 0; i < mesh->mNumFaces; ++i) { + const aiFace& f = mesh->mFaces[i]; + for(unsigned int j = 0; j < f.mNumIndices; ++j) { + if(++seen[f.mIndices[j]] == 2) { + // found a duplicate index + return false; + } + } + } + + return true; +} + +// ------------------------------------------------------------------------------------------------ +bool MakeVerboseFormatProcess::IsVerboseFormat(const aiScene* pScene) { + for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) { + if(!IsMeshInVerboseFormat(pScene->mMeshes[i])) { + return false; + } + } + + return true; +} diff --git a/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.h b/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.h index 1adf8e2f69..8565d5933a 100644 --- a/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.h +++ b/thirdparty/assimp/code/PostProcessing/MakeVerboseFormat.h @@ -94,6 +94,13 @@ public: * @param pScene The imported data to work at. */ void Execute( aiScene* pScene); +public: + + // ------------------------------------------------------------------- + /** Checks whether the scene is already in verbose format. + * @param pScene The data to check. + * @return true if the scene is already in verbose format. */ + static bool IsVerboseFormat(const aiScene* pScene); private: diff --git a/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.cpp b/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.cpp index 712fd6943d..75d1b6ef78 100644 --- a/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.cpp +++ b/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.cpp @@ -538,13 +538,17 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation) { Validate(&pAnimation->mName); - // validate all materials - if (pAnimation->mNumChannels) + // validate all animations + if (pAnimation->mNumChannels || pAnimation->mNumMorphMeshChannels) { - if (!pAnimation->mChannels) { + if (!pAnimation->mChannels && pAnimation->mNumChannels) { ReportError("aiAnimation::mChannels is NULL (aiAnimation::mNumChannels is %i)", pAnimation->mNumChannels); } + if (!pAnimation->mMorphMeshChannels && pAnimation->mNumMorphMeshChannels) { + ReportError("aiAnimation::mMorphMeshChannels is NULL (aiAnimation::mNumMorphMeshChannels is %i)", + pAnimation->mNumMorphMeshChannels); + } for (unsigned int i = 0; i < pAnimation->mNumChannels;++i) { if (!pAnimation->mChannels[i]) @@ -554,6 +558,15 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation) } Validate(pAnimation, pAnimation->mChannels[i]); } + for (unsigned int i = 0; i < pAnimation->mNumMorphMeshChannels;++i) + { + if (!pAnimation->mMorphMeshChannels[i]) + { + ReportError("aiAnimation::mMorphMeshChannels[%i] is NULL (aiAnimation::mNumMorphMeshChannels is %i)", + i, pAnimation->mNumMorphMeshChannels); + } + Validate(pAnimation, pAnimation->mMorphMeshChannels[i]); + } } else { ReportError("aiAnimation::mNumChannels is 0. At least one node animation channel must be there."); @@ -903,6 +916,48 @@ void ValidateDSProcess::Validate( const aiAnimation* pAnimation, } } +void ValidateDSProcess::Validate( const aiAnimation* pAnimation, + const aiMeshMorphAnim* pMeshMorphAnim) +{ + Validate(&pMeshMorphAnim->mName); + + if (!pMeshMorphAnim->mNumKeys) { + ReportError("Empty mesh morph animation channel"); + } + + // otherwise check whether one of the keys exceeds the total duration of the animation + if (pMeshMorphAnim->mNumKeys) + { + if (!pMeshMorphAnim->mKeys) + { + ReportError("aiMeshMorphAnim::mKeys is NULL (aiMeshMorphAnim::mNumKeys is %i)", + pMeshMorphAnim->mNumKeys); + } + double dLast = -10e10; + for (unsigned int i = 0; i < pMeshMorphAnim->mNumKeys;++i) + { + // ScenePreprocessor will compute the duration if still the default value + // (Aramis) Add small epsilon, comparison tended to fail if max_time == duration, + // seems to be due the compilers register usage/width. + if (pAnimation->mDuration > 0. && pMeshMorphAnim->mKeys[i].mTime > pAnimation->mDuration+0.001) + { + ReportError("aiMeshMorphAnim::mKeys[%i].mTime (%.5f) is larger " + "than aiAnimation::mDuration (which is %.5f)",i, + (float)pMeshMorphAnim->mKeys[i].mTime, + (float)pAnimation->mDuration); + } + if (i && pMeshMorphAnim->mKeys[i].mTime <= dLast) + { + ReportWarning("aiMeshMorphAnim::mKeys[%i].mTime (%.5f) is smaller " + "than aiMeshMorphAnim::mKeys[%i] (which is %.5f)",i, + (float)pMeshMorphAnim->mKeys[i].mTime, + i-1, (float)dLast); + } + dLast = pMeshMorphAnim->mKeys[i].mTime; + } + } +} + // ------------------------------------------------------------------------------------------------ void ValidateDSProcess::Validate( const aiNode* pNode) { @@ -958,7 +1013,7 @@ void ValidateDSProcess::Validate( const aiString* pString) { if (pString->length > MAXLEN) { - ReportError("aiString::length is too large (%lu, maximum is %lu)", + ReportError("aiString::length is too large (%u, maximum is %lu)", pString->length,MAXLEN); } const char* sz = pString->data; diff --git a/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.h b/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.h index 0b891ef414..7b309c9251 100644 --- a/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.h +++ b/thirdparty/assimp/code/PostProcessing/ValidateDataStructure.h @@ -55,6 +55,7 @@ struct aiBone; struct aiMesh; struct aiAnimation; struct aiNodeAnim; +struct aiMeshMorphAnim; struct aiTexture; struct aiMaterial; struct aiNode; @@ -150,6 +151,13 @@ protected: void Validate( const aiAnimation* pAnimation, const aiNodeAnim* pBoneAnim); + /** Validates a mesh morph animation channel. + * @param pAnimation Input animation. + * @param pMeshMorphAnim Mesh morph animation channel. + * */ + void Validate( const aiAnimation* pAnimation, + const aiMeshMorphAnim* pMeshMorphAnim); + // ------------------------------------------------------------------- /** Validates a node and all of its subnodes * @param Node Input node*/ diff --git a/thirdparty/assimp/code/revision.h b/thirdparty/assimp/code/revision.h index 88872aef22..66eb875303 100644 --- a/thirdparty/assimp/code/revision.h +++ b/thirdparty/assimp/code/revision.h @@ -1,7 +1,28 @@ #ifndef ASSIMP_REVISION_H_INC #define ASSIMP_REVISION_H_INC -#define GitVersion 0x00000000 +#define GitVersion 0x308db73d #define GitBranch "master" +#define VER_MAJOR 5 +#define VER_MINOR 0 +#define VER_PATCH 0 +#define VER_BUILD 0 + +#define STR_HELP(x) #x +#define STR(x) STR_HELP(x) + +#define VER_FILEVERSION VER_MAJOR,VER_MINOR,VER_PATCH,VER_BUILD +#if (GitVersion == 0) +#define VER_FILEVERSION_STR STR(VER_MAJOR) "." STR(VER_MINOR) "." STR(VER_PATCH) "." STR(VER_BUILD) +#else +#define VER_FILEVERSION_STR STR(VER_MAJOR) "." STR(VER_MINOR) "." STR(VER_PATCH) "." STR(VER_BUILD) " (Commit 308db73d)" +#endif + +#ifdef NDEBUG +#define VER_ORIGINAL_FILENAME_STR "assimp.dll" +#else +#define VER_ORIGINAL_FILENAME_STR "assimp.dll" +#endif // NDEBUG + #endif // ASSIMP_REVISION_H_INC diff --git a/thirdparty/assimp/include/assimp/.editorconfig b/thirdparty/assimp/include/assimp/.editorconfig new file mode 100644 index 0000000000..9ea66423ad --- /dev/null +++ b/thirdparty/assimp/include/assimp/.editorconfig @@ -0,0 +1,8 @@ +# See <http://EditorConfig.org> for details + +[*.{h,hpp,inl}] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_size = 4 +indent_style = space diff --git a/thirdparty/assimp/include/assimp/BaseImporter.h b/thirdparty/assimp/include/assimp/BaseImporter.h index 55f7fe3754..ad8a3dafd8 100644 --- a/thirdparty/assimp/include/assimp/BaseImporter.h +++ b/thirdparty/assimp/include/assimp/BaseImporter.h @@ -41,9 +41,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file Definition of the base class for all importer worker classes. */ +#pragma once #ifndef INCLUDED_AI_BASEIMPORTER_H #define INCLUDED_AI_BASEIMPORTER_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include "Exceptional.h" #include <vector> @@ -191,16 +196,13 @@ public: /** * Assimp Importer * unit conversions available - * if you need another measurment unit add it below. - * it's currently defined in assimp that we prefer meters. + * NOTE: Valid options are initialised in the + * constructor in the implementation file to + * work around a VS2013 compiler bug if support + * for that compiler is dropped in the future + * initialisation can be moved back here * */ - std::map<ImporterUnits, double> importerUnits = { - {ImporterUnits::M, 1}, - {ImporterUnits::CM, 0.01}, - {ImporterUnits::MM, 0.001}, - {ImporterUnits::INCHES, 0.0254}, - {ImporterUnits::FEET, 0.3048} - }; + std::map<ImporterUnits, double> importerUnits; virtual void SetApplicationUnits( const ImporterUnits& unit ) { diff --git a/thirdparty/assimp/include/assimp/Bitmap.h b/thirdparty/assimp/include/assimp/Bitmap.h index e6b5fb1327..4c3f5a437b 100644 --- a/thirdparty/assimp/include/assimp/Bitmap.h +++ b/thirdparty/assimp/include/assimp/Bitmap.h @@ -46,10 +46,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Used for file formats which embed their textures into the model file. */ - +#pragma once #ifndef AI_BITMAP_H_INC #define AI_BITMAP_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include "defs.h" #include <stdint.h> #include <cstddef> diff --git a/thirdparty/assimp/include/assimp/ByteSwapper.h b/thirdparty/assimp/include/assimp/ByteSwapper.h index 20a2463fb8..3f14c471a8 100644 --- a/thirdparty/assimp/include/assimp/ByteSwapper.h +++ b/thirdparty/assimp/include/assimp/ByteSwapper.h @@ -42,9 +42,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Helper class tp perform various byte oder swappings (e.g. little to big endian) */ +#pragma once #ifndef AI_BYTESWAPPER_H_INC #define AI_BYTESWAPPER_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/ai_assert.h> #include <assimp/types.h> #include <stdint.h> diff --git a/thirdparty/assimp/include/assimp/CreateAnimMesh.h b/thirdparty/assimp/include/assimp/CreateAnimMesh.h index a60173588f..1266d1de11 100644 --- a/thirdparty/assimp/include/assimp/CreateAnimMesh.h +++ b/thirdparty/assimp/include/assimp/CreateAnimMesh.h @@ -43,16 +43,26 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file CreateAnimMesh.h * Create AnimMesh from Mesh */ +#pragma once #ifndef INCLUDED_AI_CREATE_ANIM_MESH_H #define INCLUDED_AI_CREATE_ANIM_MESH_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/mesh.h> -namespace Assimp { +namespace Assimp { -/** Create aiAnimMesh from aiMesh. */ +/** + * Create aiAnimMesh from aiMesh. + * @param mesh The input mesh to create an animated mesh from. + * @return The new created animated mesh. + */ ASSIMP_API aiAnimMesh *aiCreateAnimMesh(const aiMesh *mesh); } // end of namespace Assimp + #endif // INCLUDED_AI_CREATE_ANIM_MESH_H diff --git a/thirdparty/assimp/include/assimp/DefaultIOStream.h b/thirdparty/assimp/include/assimp/DefaultIOStream.h index 994d728ff5..c6d382c1b5 100644 --- a/thirdparty/assimp/include/assimp/DefaultIOStream.h +++ b/thirdparty/assimp/include/assimp/DefaultIOStream.h @@ -41,15 +41,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file Default file I/O using fXXX()-family of functions */ +#pragma once #ifndef AI_DEFAULTIOSTREAM_H_INC #define AI_DEFAULTIOSTREAM_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <stdio.h> #include <assimp/IOStream.hpp> #include <assimp/importerdesc.h> #include <assimp/Defines.h> -namespace Assimp { +namespace Assimp { // ---------------------------------------------------------------------------------- //! @class DefaultIOStream @@ -57,8 +62,7 @@ namespace Assimp { //! @note An instance of this class can exist without a valid file handle //! attached to it. All calls fail, but the instance can nevertheless be //! used with no restrictions. -class ASSIMP_API DefaultIOStream : public IOStream -{ +class ASSIMP_API DefaultIOStream : public IOStream { friend class DefaultIOSystem; #if __ANDROID__ # if __ANDROID_API__ > 9 @@ -82,7 +86,6 @@ public: size_t pSize, size_t pCount); - // ------------------------------------------------------------------- /// Write to stream size_t Write(const void* pvBuffer, @@ -107,16 +110,13 @@ public: void Flush(); private: - // File data-structure, using clib FILE* mFile; - // Filename std::string mFilename; - // Cached file size mutable size_t mCachedSize; }; // ---------------------------------------------------------------------------------- -inline +AI_FORCE_INLINE DefaultIOStream::DefaultIOStream() AI_NO_EXCEPT : mFile(nullptr) , mFilename("") @@ -125,7 +125,7 @@ DefaultIOStream::DefaultIOStream() AI_NO_EXCEPT } // ---------------------------------------------------------------------------------- -inline +AI_FORCE_INLINE DefaultIOStream::DefaultIOStream (FILE* pFile, const std::string &strFilename) : mFile(pFile) , mFilename(strFilename) @@ -137,4 +137,3 @@ DefaultIOStream::DefaultIOStream (FILE* pFile, const std::string &strFilename) } // ns assimp #endif //!!AI_DEFAULTIOSTREAM_H_INC - diff --git a/thirdparty/assimp/include/assimp/DefaultIOSystem.h b/thirdparty/assimp/include/assimp/DefaultIOSystem.h index 2dd5c801b5..46f6d447c5 100644 --- a/thirdparty/assimp/include/assimp/DefaultIOSystem.h +++ b/thirdparty/assimp/include/assimp/DefaultIOSystem.h @@ -41,9 +41,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file Default implementation of IOSystem using the standard C file functions */ +#pragma once #ifndef AI_DEFAULTIOSYSTEM_H_INC #define AI_DEFAULTIOSYSTEM_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/IOSystem.hpp> namespace Assimp { diff --git a/thirdparty/assimp/include/assimp/Defines.h b/thirdparty/assimp/include/assimp/Defines.h index 15e1d83c26..be3e2fafd6 100644 --- a/thirdparty/assimp/include/assimp/Defines.h +++ b/thirdparty/assimp/include/assimp/Defines.h @@ -38,6 +38,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +#pragma once +#ifndef AI_DEFINES_H_INC +#define AI_DEFINES_H_INC + +#ifdef __GNUC__ +# pragma GCC system_header +#endif + // We need those constants, workaround for any platforms where nobody defined them yet #if (!defined SIZE_MAX) # define SIZE_MAX (~((size_t)0)) @@ -47,3 +55,4 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # define UINT_MAX (~((unsigned int)0)) #endif +#endif // AI_DEINES_H_INC diff --git a/thirdparty/assimp/include/assimp/Exceptional.h b/thirdparty/assimp/include/assimp/Exceptional.h index 5109b8f077..6bb6ce1e39 100644 --- a/thirdparty/assimp/include/assimp/Exceptional.h +++ b/thirdparty/assimp/include/assimp/Exceptional.h @@ -38,11 +38,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -#ifndef INCLUDED_EXCEPTIONAL_H -#define INCLUDED_EXCEPTIONAL_H +#pragma once +#ifndef AI_INCLUDED_EXCEPTIONAL_H +#define AI_INCLUDED_EXCEPTIONAL_H + +#ifdef __GNUC__ +# pragma GCC system_header +#endif #include <stdexcept> #include <assimp/DefaultIOStream.h> + using std::runtime_error; #ifdef _MSC_VER @@ -53,17 +59,14 @@ using std::runtime_error; /** FOR IMPORTER PLUGINS ONLY: Simple exception class to be thrown if an * unrecoverable error occurs while importing. Loading APIs return * NULL instead of a valid aiScene then. */ -class DeadlyImportError - : public runtime_error -{ +class DeadlyImportError : public runtime_error { public: /** Constructor with arguments */ explicit DeadlyImportError( const std::string& errorText) - : runtime_error(errorText) - { + : runtime_error(errorText) { + // empty } -private: }; typedef DeadlyImportError DeadlyExportError; @@ -84,7 +87,7 @@ struct ExceptionSwallower { template <typename T> struct ExceptionSwallower<T*> { T* operator ()() const { - return NULL; + return nullptr; } }; @@ -122,4 +125,4 @@ struct ExceptionSwallower<void> { }\ } -#endif // INCLUDED_EXCEPTIONAL_H +#endif // AI_INCLUDED_EXCEPTIONAL_H diff --git a/thirdparty/assimp/include/assimp/Exporter.hpp b/thirdparty/assimp/include/assimp/Exporter.hpp index ea0303e804..2612e1f9d2 100644 --- a/thirdparty/assimp/include/assimp/Exporter.hpp +++ b/thirdparty/assimp/include/assimp/Exporter.hpp @@ -48,6 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_EXPORT_HPP_INC #define AI_EXPORT_HPP_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifndef ASSIMP_BUILD_NO_EXPORT #include "cexport.h" diff --git a/thirdparty/assimp/include/assimp/GenericProperty.h b/thirdparty/assimp/include/assimp/GenericProperty.h index 183ecd5197..7796d595b8 100644 --- a/thirdparty/assimp/include/assimp/GenericProperty.h +++ b/thirdparty/assimp/include/assimp/GenericProperty.h @@ -40,12 +40,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +#pragma once #ifndef AI_GENERIC_PROPERTY_H_INCLUDED #define AI_GENERIC_PROPERTY_H_INCLUDED +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/Importer.hpp> #include <assimp/ai_assert.h> -#include "Hash.h" +#include <assimp/Hash.h> #include <map> diff --git a/thirdparty/assimp/include/assimp/Hash.h b/thirdparty/assimp/include/assimp/Hash.h index 30657be198..9056440789 100644 --- a/thirdparty/assimp/include/assimp/Hash.h +++ b/thirdparty/assimp/include/assimp/Hash.h @@ -39,10 +39,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ - +#pragma once #ifndef AI_HASH_H_INCLUDED #define AI_HASH_H_INCLUDED +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <stdint.h> #include <string.h> diff --git a/thirdparty/assimp/include/assimp/IOStream.hpp b/thirdparty/assimp/include/assimp/IOStream.hpp index 0623d0f70b..39932cd949 100644 --- a/thirdparty/assimp/include/assimp/IOStream.hpp +++ b/thirdparty/assimp/include/assimp/IOStream.hpp @@ -48,14 +48,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_IOSTREAM_H_INC #define AI_IOSTREAM_H_INC -#include "types.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> #ifndef __cplusplus # error This header requires C++ to be used. aiFileIO.h is the \ corresponding C interface. #endif -namespace Assimp { +namespace Assimp { // ---------------------------------------------------------------------------------- /** @brief CPP-API: Class to handle file I/O for C++ @@ -125,13 +129,13 @@ public: }; //! class IOStream // ---------------------------------------------------------------------------------- -inline +AI_FORCE_INLINE IOStream::IOStream() AI_NO_EXCEPT { // empty } // ---------------------------------------------------------------------------------- -inline +AI_FORCE_INLINE IOStream::~IOStream() { // empty } diff --git a/thirdparty/assimp/include/assimp/IOStreamBuffer.h b/thirdparty/assimp/include/assimp/IOStreamBuffer.h index 58abd97a02..97c84b23e2 100644 --- a/thirdparty/assimp/include/assimp/IOStreamBuffer.h +++ b/thirdparty/assimp/include/assimp/IOStreamBuffer.h @@ -1,5 +1,3 @@ -#pragma once - /* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -42,10 +40,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +#pragma once +#ifndef AI_IOSTREAMBUFFER_H_INC +#define AI_IOSTREAMBUFFER_H_INC + +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> #include <assimp/IOStream.hpp> - -#include "ParsingUtils.h" +#include <assimp/ParsingUtils.h> #include <vector> @@ -124,7 +129,7 @@ private: }; template<class T> -inline +AI_FORCE_INLINE IOStreamBuffer<T>::IOStreamBuffer( size_t cache ) : m_stream( nullptr ) , m_filesize( 0 ) @@ -138,13 +143,13 @@ IOStreamBuffer<T>::IOStreamBuffer( size_t cache ) } template<class T> -inline +AI_FORCE_INLINE IOStreamBuffer<T>::~IOStreamBuffer() { // empty } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::open( IOStream *stream ) { // file still opened! if ( nullptr != m_stream ) { @@ -174,7 +179,7 @@ bool IOStreamBuffer<T>::open( IOStream *stream ) { } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::close() { if ( nullptr == m_stream ) { return false; @@ -192,19 +197,19 @@ bool IOStreamBuffer<T>::close() { } template<class T> -inline +AI_FORCE_INLINE size_t IOStreamBuffer<T>::size() const { return m_filesize; } template<class T> -inline +AI_FORCE_INLINE size_t IOStreamBuffer<T>::cacheSize() const { return m_cacheSize; } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::readNextBlock() { m_stream->Seek( m_filePos, aiOrigin_SET ); size_t readLen = m_stream->Read( &m_cache[ 0 ], sizeof( T ), m_cacheSize ); @@ -222,25 +227,25 @@ bool IOStreamBuffer<T>::readNextBlock() { } template<class T> -inline +AI_FORCE_INLINE size_t IOStreamBuffer<T>::getNumBlocks() const { return m_numBlocks; } template<class T> -inline +AI_FORCE_INLINE size_t IOStreamBuffer<T>::getCurrentBlockIndex() const { return m_blockIdx; } template<class T> -inline +AI_FORCE_INLINE size_t IOStreamBuffer<T>::getFilePos() const { return m_filePos; } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextDataLine( std::vector<T> &buffer, T continuationToken ) { buffer.resize( m_cacheSize ); if ( m_cachePos >= m_cacheSize || 0 == m_filePos ) { @@ -289,13 +294,13 @@ bool IOStreamBuffer<T>::getNextDataLine( std::vector<T> &buffer, T continuationT return true; } -static inline +static AI_FORCE_INLINE bool isEndOfCache( size_t pos, size_t cacheSize ) { return ( pos == cacheSize ); } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) { buffer.resize(m_cacheSize); if ( isEndOfCache( m_cachePos, m_cacheSize ) || 0 == m_filePos) { @@ -335,7 +340,7 @@ bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) { } template<class T> -inline +AI_FORCE_INLINE bool IOStreamBuffer<T>::getNextBlock( std::vector<T> &buffer) { // Return the last block-value if getNextLine was used before if ( 0 != m_cachePos ) { @@ -353,3 +358,5 @@ bool IOStreamBuffer<T>::getNextBlock( std::vector<T> &buffer) { } } // !ns Assimp + +#endif // AI_IOSTREAMBUFFER_H_INC diff --git a/thirdparty/assimp/include/assimp/IOSystem.hpp b/thirdparty/assimp/include/assimp/IOSystem.hpp index 78139c2839..f1fb3b0c27 100644 --- a/thirdparty/assimp/include/assimp/IOSystem.hpp +++ b/thirdparty/assimp/include/assimp/IOSystem.hpp @@ -50,6 +50,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_IOSYSTEM_H_INC #define AI_IOSYSTEM_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifndef __cplusplus # error This header requires C++ to be used. aiFileIO.h is the \ corresponding C interface. diff --git a/thirdparty/assimp/include/assimp/Importer.hpp b/thirdparty/assimp/include/assimp/Importer.hpp index 4941df4122..bf449a9a25 100644 --- a/thirdparty/assimp/include/assimp/Importer.hpp +++ b/thirdparty/assimp/include/assimp/Importer.hpp @@ -48,6 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_ASSIMP_HPP_INC #define AI_ASSIMP_HPP_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifndef __cplusplus # error This header requires C++ to be used. Use assimp.h for plain C. #endif // __cplusplus diff --git a/thirdparty/assimp/include/assimp/LineSplitter.h b/thirdparty/assimp/include/assimp/LineSplitter.h index 4afe45b92a..6c1097bb6d 100644 --- a/thirdparty/assimp/include/assimp/LineSplitter.h +++ b/thirdparty/assimp/include/assimp/LineSplitter.h @@ -48,9 +48,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef INCLUDED_LINE_SPLITTER_H #define INCLUDED_LINE_SPLITTER_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <stdexcept> -#include "StreamReader.h" -#include "ParsingUtils.h" +#include <assimp/StreamReader.h> +#include <assimp/ParsingUtils.h> namespace Assimp { @@ -140,7 +144,7 @@ private: bool mSwallow, mSkip_empty_lines, mTrim; }; -inline +AI_FORCE_INLINE LineSplitter::LineSplitter(StreamReaderLE& stream, bool skip_empty_lines, bool trim ) : mIdx(0) , mCur() @@ -153,12 +157,12 @@ LineSplitter::LineSplitter(StreamReaderLE& stream, bool skip_empty_lines, bool t mIdx = 0; } -inline +AI_FORCE_INLINE LineSplitter::~LineSplitter() { // empty } -inline +AI_FORCE_INLINE LineSplitter& LineSplitter::operator++() { if (mSwallow) { mSwallow = false; @@ -199,12 +203,12 @@ LineSplitter& LineSplitter::operator++() { return *this; } -inline +AI_FORCE_INLINE LineSplitter &LineSplitter::operator++(int) { return ++(*this); } -inline +AI_FORCE_INLINE const char *LineSplitter::operator[] (size_t idx) const { const char* s = operator->()->c_str(); @@ -222,7 +226,7 @@ const char *LineSplitter::operator[] (size_t idx) const { } template <size_t N> -inline +AI_FORCE_INLINE void LineSplitter::get_tokens(const char* (&tokens)[N]) const { const char* s = operator->()->c_str(); @@ -238,44 +242,44 @@ void LineSplitter::get_tokens(const char* (&tokens)[N]) const { } } -inline +AI_FORCE_INLINE const std::string* LineSplitter::operator -> () const { return &mCur; } -inline +AI_FORCE_INLINE std::string LineSplitter::operator* () const { return mCur; } -inline +AI_FORCE_INLINE LineSplitter::operator bool() const { return mStream.GetRemainingSize() > 0; } -inline +AI_FORCE_INLINE LineSplitter::operator line_idx() const { return mIdx; } -inline +AI_FORCE_INLINE LineSplitter::line_idx LineSplitter::get_index() const { return mIdx; } -inline +AI_FORCE_INLINE StreamReaderLE &LineSplitter::get_stream() { return mStream; } -inline +AI_FORCE_INLINE bool LineSplitter::match_start(const char* check) { const size_t len = ::strlen(check); return len <= mCur.length() && std::equal(check, check + len, mCur.begin()); } -inline +AI_FORCE_INLINE void LineSplitter::swallow_next_increment() { mSwallow = true; } diff --git a/thirdparty/assimp/include/assimp/LogAux.h b/thirdparty/assimp/include/assimp/LogAux.h index 558485272e..bcead78dd3 100644 --- a/thirdparty/assimp/include/assimp/LogAux.h +++ b/thirdparty/assimp/include/assimp/LogAux.h @@ -43,9 +43,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file LogAux.h * @brief Common logging usage patterns for importer implementations */ +#pragma once #ifndef INCLUDED_AI_LOGAUX_H #define INCLUDED_AI_LOGAUX_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/TinyFormatter.h> #include <assimp/Exceptional.h> #include <assimp/DefaultLogger.hpp> diff --git a/thirdparty/assimp/include/assimp/Macros.h b/thirdparty/assimp/include/assimp/Macros.h deleted file mode 100644 index 6515303372..0000000000 --- a/thirdparty/assimp/include/assimp/Macros.h +++ /dev/null @@ -1,49 +0,0 @@ -/* ---------------------------------------------------------------------------- -Open Asset Import Library (assimp) ---------------------------------------------------------------------------- - -Copyright (c) 2006-2019, assimp team - -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the following -conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of the assimp team, nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission of the assimp team. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------------- -*/ - -/* Helper macro to set a pointer to NULL in debug builds - */ -#if (defined ASSIMP_BUILD_DEBUG) -# define AI_DEBUG_INVALIDATE_PTR(x) x = NULL; -#else -# define AI_DEBUG_INVALIDATE_PTR(x) -#endif - diff --git a/thirdparty/assimp/include/assimp/MathFunctions.h b/thirdparty/assimp/include/assimp/MathFunctions.h index cb3b696076..b6c5872a72 100644 --- a/thirdparty/assimp/include/assimp/MathFunctions.h +++ b/thirdparty/assimp/include/assimp/MathFunctions.h @@ -39,22 +39,28 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ +#pragma once + +#ifdef __GNUC__ +# pragma GCC system_header +#endif + /** @file MathFunctions.h - * @brief Implementation of the math functions (gcd and lcm) +* @brief Implementation of math utility functions. * - * Copied from BoostWorkaround/math - */ +*/ + +#include <limits> namespace Assimp { namespace Math { // TODO: use binary GCD for unsigned integers .... template < typename IntegerType > -IntegerType gcd( IntegerType a, IntegerType b ) -{ +inline +IntegerType gcd( IntegerType a, IntegerType b ) { const IntegerType zero = (IntegerType)0; - while ( true ) - { + while ( true ) { if ( a == zero ) return b; b %= a; @@ -66,12 +72,19 @@ IntegerType gcd( IntegerType a, IntegerType b ) } template < typename IntegerType > -IntegerType lcm( IntegerType a, IntegerType b ) -{ +inline +IntegerType lcm( IntegerType a, IntegerType b ) { const IntegerType t = gcd (a,b); - if (!t)return t; + if (!t) + return t; return a / t * b; } +template<class T> +inline +T getEpsilon() { + return std::numeric_limits<T>::epsilon(); +} + } } diff --git a/thirdparty/assimp/include/assimp/MemoryIOWrapper.h b/thirdparty/assimp/include/assimp/MemoryIOWrapper.h index c522787184..5598d4fc5f 100644 --- a/thirdparty/assimp/include/assimp/MemoryIOWrapper.h +++ b/thirdparty/assimp/include/assimp/MemoryIOWrapper.h @@ -42,12 +42,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file MemoryIOWrapper.h * Handy IOStream/IOSystem implemetation to read directly from a memory buffer */ +#pragma once #ifndef AI_MEMORYIOSTREAM_H_INC #define AI_MEMORYIOSTREAM_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/IOStream.hpp> #include <assimp/IOSystem.hpp> #include <assimp/ai_assert.h> + #include <stdint.h> namespace Assimp { diff --git a/thirdparty/assimp/include/assimp/ParsingUtils.h b/thirdparty/assimp/include/assimp/ParsingUtils.h index 6b9574fc67..3025601246 100644 --- a/thirdparty/assimp/include/assimp/ParsingUtils.h +++ b/thirdparty/assimp/include/assimp/ParsingUtils.h @@ -44,11 +44,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file ParsingUtils.h * @brief Defines helper functions for text parsing */ +#pragma once #ifndef AI_PARSING_UTILS_H_INC #define AI_PARSING_UTILS_H_INC -#include "StringComparison.h" -#include "StringUtils.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/StringComparison.h> +#include <assimp/StringUtils.h> #include <assimp/defs.h> namespace Assimp { diff --git a/thirdparty/assimp/include/assimp/Profiler.h b/thirdparty/assimp/include/assimp/Profiler.h index 6ff9d41c0a..624029be99 100644 --- a/thirdparty/assimp/include/assimp/Profiler.h +++ b/thirdparty/assimp/include/assimp/Profiler.h @@ -43,12 +43,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Profiler.h * @brief Utility to measure the respective runtime of each import step */ -#ifndef INCLUDED_PROFILER_H -#define INCLUDED_PROFILER_H +#pragma once +#ifndef AI_INCLUDED_PROFILER_H +#define AI_INCLUDED_PROFILER_H + +#ifdef __GNUC__ +# pragma GCC system_header +#endif #include <chrono> #include <assimp/DefaultLogger.hpp> -#include "TinyFormatter.h" +#include <assimp/TinyFormatter.h> #include <map> @@ -67,7 +72,6 @@ public: // empty } -public: /** Start a named timer */ void BeginRegion(const std::string& region) { @@ -95,5 +99,5 @@ private: } } -#endif +#endif // AI_INCLUDED_PROFILER_H diff --git a/thirdparty/assimp/include/assimp/ProgressHandler.hpp b/thirdparty/assimp/include/assimp/ProgressHandler.hpp index 4e47f1d0a6..8991a64618 100644 --- a/thirdparty/assimp/include/assimp/ProgressHandler.hpp +++ b/thirdparty/assimp/include/assimp/ProgressHandler.hpp @@ -47,9 +47,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_PROGRESSHANDLER_H_INC #define AI_PROGRESSHANDLER_H_INC -#include "types.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> -namespace Assimp { +namespace Assimp { // ------------------------------------------------------------------------------------ /** @brief CPP-API: Abstract interface for custom progress report receivers. diff --git a/thirdparty/assimp/include/assimp/RemoveComments.h b/thirdparty/assimp/include/assimp/RemoveComments.h index 404b496719..f129420535 100644 --- a/thirdparty/assimp/include/assimp/RemoveComments.h +++ b/thirdparty/assimp/include/assimp/RemoveComments.h @@ -4,7 +4,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -43,9 +42,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Declares a helper class, "CommentRemover", which can be * used to remove comments (single and multi line) from a text file. */ +#pragma once #ifndef AI_REMOVE_COMMENTS_H_INC #define AI_REMOVE_COMMENTS_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif #include <assimp/defs.h> @@ -58,8 +61,7 @@ namespace Assimp { * to those in C or C++ so this code has been moved to a separate * module. */ -class ASSIMP_API CommentRemover -{ +class ASSIMP_API CommentRemover { // class cannot be instanced CommentRemover() {} diff --git a/thirdparty/assimp/include/assimp/SGSpatialSort.h b/thirdparty/assimp/include/assimp/SGSpatialSort.h index 5b4f3f41f2..fdb5ce8174 100644 --- a/thirdparty/assimp/include/assimp/SGSpatialSort.h +++ b/thirdparty/assimp/include/assimp/SGSpatialSort.h @@ -42,9 +42,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** Small helper classes to optimize finding vertices close to a given location */ +#pragma once #ifndef AI_D3DSSPATIALSORT_H_INC #define AI_D3DSSPATIALSORT_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> #include <vector> #include <stdint.h> diff --git a/thirdparty/assimp/include/assimp/SceneCombiner.h b/thirdparty/assimp/include/assimp/SceneCombiner.h index 679a2acea4..0683c1e052 100644 --- a/thirdparty/assimp/include/assimp/SceneCombiner.h +++ b/thirdparty/assimp/include/assimp/SceneCombiner.h @@ -43,17 +43,22 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Declares a helper class, "SceneCombiner" providing various * utilities to merge scenes. */ +#pragma once #ifndef AI_SCENE_COMBINER_H_INC #define AI_SCENE_COMBINER_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/ai_assert.h> #include <assimp/types.h> #include <assimp/Defines.h> + #include <stddef.h> #include <set> #include <list> #include <stdint.h> - #include <vector> struct aiScene; @@ -65,8 +70,10 @@ struct aiLight; struct aiMetadata; struct aiBone; struct aiMesh; +struct aiAnimMesh; struct aiAnimation; struct aiNodeAnim; +struct aiMeshMorphAnim; namespace Assimp { @@ -363,6 +370,7 @@ public: static void Copy (aiMesh** dest, const aiMesh* src); // similar to Copy(): + static void Copy (aiAnimMesh** dest, const aiAnimMesh* src); static void Copy (aiMaterial** dest, const aiMaterial* src); static void Copy (aiTexture** dest, const aiTexture* src); static void Copy (aiAnimation** dest, const aiAnimation* src); @@ -370,6 +378,7 @@ public: static void Copy (aiBone** dest, const aiBone* src); static void Copy (aiLight** dest, const aiLight* src); static void Copy (aiNodeAnim** dest, const aiNodeAnim* src); + static void Copy (aiMeshMorphAnim** dest, const aiMeshMorphAnim* src); static void Copy (aiMetadata** dest, const aiMetadata* src); // recursive, of course diff --git a/thirdparty/assimp/include/assimp/SkeletonMeshBuilder.h b/thirdparty/assimp/include/assimp/SkeletonMeshBuilder.h index f9b8d9f55c..ad979a33fa 100644 --- a/thirdparty/assimp/include/assimp/SkeletonMeshBuilder.h +++ b/thirdparty/assimp/include/assimp/SkeletonMeshBuilder.h @@ -47,9 +47,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * for animation skeletons. */ +#pragma once #ifndef AI_SKELETONMESHBUILDER_H_INC #define AI_SKELETONMESHBUILDER_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <vector> #include <assimp/mesh.h> diff --git a/thirdparty/assimp/include/assimp/SmoothingGroups.h b/thirdparty/assimp/include/assimp/SmoothingGroups.h index 92d65cea02..c1a93947f1 100644 --- a/thirdparty/assimp/include/assimp/SmoothingGroups.h +++ b/thirdparty/assimp/include/assimp/SmoothingGroups.h @@ -43,10 +43,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Defines the helper data structures for importing 3DS files. http://www.jalix.org/ressources/graphics/3DS/_unofficials/3ds-unofficial.txt */ +#pragma once #ifndef AI_SMOOTHINGGROUPS_H_INC #define AI_SMOOTHINGGROUPS_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/vector3.h> + #include <stdint.h> #include <vector> diff --git a/thirdparty/assimp/include/assimp/SmoothingGroups.inl b/thirdparty/assimp/include/assimp/SmoothingGroups.inl index 84ea4a1b00..37ea083dbe 100644 --- a/thirdparty/assimp/include/assimp/SmoothingGroups.inl +++ b/thirdparty/assimp/include/assimp/SmoothingGroups.inl @@ -41,13 +41,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Generation of normal vectors basing on smoothing groups */ +#pragma once #ifndef AI_SMOOTHINGGROUPS_INL_INCLUDED #define AI_SMOOTHINGGROUPS_INL_INCLUDED -// internal headers +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/SGSpatialSort.h> -// CRT header #include <algorithm> using namespace Assimp; diff --git a/thirdparty/assimp/include/assimp/SpatialSort.h b/thirdparty/assimp/include/assimp/SpatialSort.h index 61b345bcbf..9f93543150 100644 --- a/thirdparty/assimp/include/assimp/SpatialSort.h +++ b/thirdparty/assimp/include/assimp/SpatialSort.h @@ -41,9 +41,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** Small helper classes to optimise finding vertizes close to a given location */ +#pragma once #ifndef AI_SPATIALSORT_H_INC #define AI_SPATIALSORT_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <vector> #include <assimp/types.h> diff --git a/thirdparty/assimp/include/assimp/StandardShapes.h b/thirdparty/assimp/include/assimp/StandardShapes.h index 3791569b83..c594cb63f4 100644 --- a/thirdparty/assimp/include/assimp/StandardShapes.h +++ b/thirdparty/assimp/include/assimp/StandardShapes.h @@ -41,11 +41,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file Declares a helper class, "StandardShapes" which generates - * vertices for standard shapes, such as cylnders, cones, spheres .. + * vertices for standard shapes, such as cylinders, cones, spheres .. */ +#pragma once #ifndef AI_STANDARD_SHAPES_H_INC #define AI_STANDARD_SHAPES_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/vector3.h> #include <vector> diff --git a/thirdparty/assimp/include/assimp/StreamReader.h b/thirdparty/assimp/include/assimp/StreamReader.h index 9116c14261..cb24f1595b 100644 --- a/thirdparty/assimp/include/assimp/StreamReader.h +++ b/thirdparty/assimp/include/assimp/StreamReader.h @@ -44,15 +44,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Defines the StreamReader class which reads data from * a binary stream with a well-defined endianness. */ - +#pragma once #ifndef AI_STREAMREADER_H_INCLUDED #define AI_STREAMREADER_H_INCLUDED +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/IOStream.hpp> #include <assimp/Defines.h> +#include <assimp/ByteSwapper.h> +#include <assimp/Exceptional.h> -#include "ByteSwapper.h" -#include "Exceptional.h" #include <memory> namespace Assimp { diff --git a/thirdparty/assimp/include/assimp/StreamWriter.h b/thirdparty/assimp/include/assimp/StreamWriter.h index c7cf6c0d74..489e8adfe3 100644 --- a/thirdparty/assimp/include/assimp/StreamWriter.h +++ b/thirdparty/assimp/include/assimp/StreamWriter.h @@ -43,11 +43,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file Defines the StreamWriter class which writes data to * a binary stream with a well-defined endianness. */ - +#pragma once #ifndef AI_STREAMWRITER_H_INCLUDED #define AI_STREAMWRITER_H_INCLUDED -#include "ByteSwapper.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/ByteSwapper.h> #include <assimp/IOStream.hpp> #include <memory> diff --git a/thirdparty/assimp/include/assimp/StringComparison.h b/thirdparty/assimp/include/assimp/StringComparison.h index 8acef277b9..d3ca3e9714 100644 --- a/thirdparty/assimp/include/assimp/StringComparison.h +++ b/thirdparty/assimp/include/assimp/StringComparison.h @@ -49,12 +49,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. These functions are not consistently available on all platforms, or the provided implementations behave too differently. */ +#pragma once #ifndef INCLUDED_AI_STRING_WORKERS_H #define INCLUDED_AI_STRING_WORKERS_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/ai_assert.h> #include <assimp/defs.h> -#include "StringComparison.h" +#include <assimp/StringComparison.h> #include <string.h> #include <stdint.h> diff --git a/thirdparty/assimp/include/assimp/StringUtils.h b/thirdparty/assimp/include/assimp/StringUtils.h index d68b7fa479..af481f819e 100644 --- a/thirdparty/assimp/include/assimp/StringUtils.h +++ b/thirdparty/assimp/include/assimp/StringUtils.h @@ -39,9 +39,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +#pragma once #ifndef INCLUDED_AI_STRINGUTILS_H #define INCLUDED_AI_STRINGUTILS_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/defs.h> #include <sstream> diff --git a/thirdparty/assimp/include/assimp/Subdivision.h b/thirdparty/assimp/include/assimp/Subdivision.h index 43feb73b30..e9450267ec 100644 --- a/thirdparty/assimp/include/assimp/Subdivision.h +++ b/thirdparty/assimp/include/assimp/Subdivision.h @@ -45,7 +45,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_SUBDISIVION_H_INC #define AI_SUBDISIVION_H_INC -#include <cstddef> +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> struct aiMesh; diff --git a/thirdparty/assimp/include/assimp/TinyFormatter.h b/thirdparty/assimp/include/assimp/TinyFormatter.h index 1226b482e6..6227e42c52 100644 --- a/thirdparty/assimp/include/assimp/TinyFormatter.h +++ b/thirdparty/assimp/include/assimp/TinyFormatter.h @@ -45,9 +45,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * to get rid of the boost::format dependency. Much slinker, * basically just extends stringstream. */ +#pragma once #ifndef INCLUDED_TINY_FORMATTER_H #define INCLUDED_TINY_FORMATTER_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <sstream> namespace Assimp { @@ -65,24 +70,15 @@ namespace Formatter { * @endcode */ template < typename T, typename CharTraits = std::char_traits<T>, - typename Allocator = std::allocator<T> -> -class basic_formatter -{ - -public: - - typedef class std::basic_string< - T,CharTraits,Allocator - > string; - - typedef class std::basic_ostringstream< - T,CharTraits,Allocator - > stringstream; - + typename Allocator = std::allocator<T> > +class basic_formatter { public: + typedef class std::basic_string<T,CharTraits,Allocator> string; + typedef class std::basic_ostringstream<T,CharTraits,Allocator> stringstream; - basic_formatter() {} + basic_formatter() { + // empty + } /* Allow basic_formatter<T>'s to be used almost interchangeably * with std::(w)string or const (w)char* arguments because the @@ -104,14 +100,10 @@ public: } #endif - -public: - operator string () const { return underlying.str(); } - /* note - this is declared const because binding temporaries does only * work for const references, so many function prototypes will * include const basic_formatter<T>& s but might still want to diff --git a/thirdparty/assimp/include/assimp/Vertex.h b/thirdparty/assimp/include/assimp/Vertex.h index 2a7f0256ad..5e63db5fe4 100644 --- a/thirdparty/assimp/include/assimp/Vertex.h +++ b/thirdparty/assimp/include/assimp/Vertex.h @@ -47,12 +47,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. that are not currently well-defined (and would cause compile errors due to missing operators in the math library), are commented. */ +#pragma once #ifndef AI_VERTEX_H_INC #define AI_VERTEX_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/vector3.h> #include <assimp/mesh.h> #include <assimp/ai_assert.h> + #include <functional> namespace Assimp { @@ -91,23 +97,14 @@ namespace Assimp { * to *all* vertex components equally. This is useful for stuff like interpolation * or subdivision, but won't work if special handling is required for some vertex components. */ // ------------------------------------------------------------------------------------------------ -class Vertex -{ +class Vertex { friend Vertex operator + (const Vertex&,const Vertex&); friend Vertex operator - (const Vertex&,const Vertex&); - -// friend Vertex operator + (const Vertex&,ai_real); -// friend Vertex operator - (const Vertex&,ai_real); friend Vertex operator * (const Vertex&,ai_real); friend Vertex operator / (const Vertex&,ai_real); - -// friend Vertex operator + (ai_real, const Vertex&); -// friend Vertex operator - (ai_real, const Vertex&); friend Vertex operator * (ai_real, const Vertex&); -// friend Vertex operator / (ai_real, const Vertex&); public: - Vertex() {} // ---------------------------------------------------------------------------- @@ -158,8 +155,6 @@ public: } } -public: - Vertex& operator += (const Vertex& v) { *this = *this+v; return *this; @@ -170,18 +165,6 @@ public: return *this; } - -/* - Vertex& operator += (ai_real v) { - *this = *this+v; - return *this; - } - - Vertex& operator -= (ai_real v) { - *this = *this-v; - return *this; - } -*/ Vertex& operator *= (ai_real v) { *this = *this*v; return *this; @@ -192,12 +175,9 @@ public: return *this; } -public: - // ---------------------------------------------------------------------------- /** Convert back to non-interleaved storage */ void SortBack(aiMesh* out, unsigned int idx) const { - ai_assert(idx<out->mNumVertices); out->mVertices[idx] = position; @@ -291,8 +271,6 @@ public: aiColor4D colors[AI_MAX_NUMBER_OF_COLOR_SETS]; }; - - // ------------------------------------------------------------------------------------------------ AI_FORCE_INLINE Vertex operator + (const Vertex& v0,const Vertex& v1) { return Vertex::BinaryOp<std::plus>(v0,v1); @@ -302,19 +280,6 @@ AI_FORCE_INLINE Vertex operator - (const Vertex& v0,const Vertex& v1) { return Vertex::BinaryOp<std::minus>(v0,v1); } - -// ------------------------------------------------------------------------------------------------ -/* -AI_FORCE_INLINE Vertex operator + (const Vertex& v0,ai_real f) { - return Vertex::BinaryOp<Intern::plus>(v0,f); -} - -AI_FORCE_INLINE Vertex operator - (const Vertex& v0,ai_real f) { - return Vertex::BinaryOp<Intern::minus>(v0,f); -} - -*/ - AI_FORCE_INLINE Vertex operator * (const Vertex& v0,ai_real f) { return Vertex::BinaryOp<Intern::multiplies>(v0,f); } @@ -323,26 +288,10 @@ AI_FORCE_INLINE Vertex operator / (const Vertex& v0,ai_real f) { return Vertex::BinaryOp<Intern::multiplies>(v0,1.f/f); } -// ------------------------------------------------------------------------------------------------ -/* -AI_FORCE_INLINE Vertex operator + (ai_real f,const Vertex& v0) { - return Vertex::BinaryOp<Intern::plus>(f,v0); -} - -AI_FORCE_INLINE Vertex operator - (ai_real f,const Vertex& v0) { - return Vertex::BinaryOp<Intern::minus>(f,v0); -} -*/ - AI_FORCE_INLINE Vertex operator * (ai_real f,const Vertex& v0) { return Vertex::BinaryOp<Intern::multiplies>(f,v0); } -/* -AI_FORCE_INLINE Vertex operator / (ai_real f,const Vertex& v0) { - return Vertex::BinaryOp<Intern::divides>(f,v0); } -*/ -} -#endif +#endif // AI_VERTEX_H_INC diff --git a/thirdparty/assimp/include/assimp/XMLTools.h b/thirdparty/assimp/include/assimp/XMLTools.h index b0d3276873..95f12cdebf 100644 --- a/thirdparty/assimp/include/assimp/XMLTools.h +++ b/thirdparty/assimp/include/assimp/XMLTools.h @@ -40,9 +40,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ +#pragma once #ifndef INCLUDED_ASSIMP_XML_TOOLS_H #define INCLUDED_ASSIMP_XML_TOOLS_H +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <string> namespace Assimp { diff --git a/thirdparty/assimp/include/assimp/aabb.h b/thirdparty/assimp/include/assimp/aabb.h index a20f317424..83bb62256b 100644 --- a/thirdparty/assimp/include/assimp/aabb.h +++ b/thirdparty/assimp/include/assimp/aabb.h @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -45,6 +43,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_AABB_H_INC #define AI_AABB_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/vector3.h> struct aiAABB { @@ -69,8 +71,9 @@ struct aiAABB { // empty } -#endif +#endif // __cplusplus + }; -#endif +#endif // AI_AABB_H_INC diff --git a/thirdparty/assimp/include/assimp/ai_assert.h b/thirdparty/assimp/include/assimp/ai_assert.h index e5de5d3f36..2b32b01d3e 100644 --- a/thirdparty/assimp/include/assimp/ai_assert.h +++ b/thirdparty/assimp/include/assimp/ai_assert.h @@ -44,6 +44,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_ASSERT_H_INC #define AI_ASSERT_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef ASSIMP_BUILD_DEBUG # include <assert.h> # define ai_assert(expression) assert( expression ) diff --git a/thirdparty/assimp/include/assimp/anim.h b/thirdparty/assimp/include/assimp/anim.h index 02e92739ec..e208b11adb 100644 --- a/thirdparty/assimp/include/assimp/anim.h +++ b/thirdparty/assimp/include/assimp/anim.h @@ -50,6 +50,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_ANIM_H_INC #define AI_ANIM_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> #include <assimp/quaternion.h> diff --git a/thirdparty/assimp/include/assimp/camera.h b/thirdparty/assimp/include/assimp/camera.h index e573eea5d1..adb749ff59 100644 --- a/thirdparty/assimp/include/assimp/camera.h +++ b/thirdparty/assimp/include/assimp/camera.h @@ -47,6 +47,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_CAMERA_H_INC #define AI_CAMERA_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include "types.h" #ifdef __cplusplus @@ -113,7 +117,6 @@ struct aiCamera */ C_STRUCT aiVector3D mPosition; - /** 'Up' - vector of the camera coordinate system relative to * the coordinate space defined by the corresponding node. * @@ -134,7 +137,6 @@ struct aiCamera */ C_STRUCT aiVector3D mLookAt; - /** Half horizontal field of view angle, in radians. * * The field of view angle is the angle between the center diff --git a/thirdparty/assimp/include/assimp/cexport.h b/thirdparty/assimp/include/assimp/cexport.h index 1d62dc26b3..cbc0253d50 100644 --- a/thirdparty/assimp/include/assimp/cexport.h +++ b/thirdparty/assimp/include/assimp/cexport.h @@ -3,7 +3,7 @@ Open Asset Import Library (assimp) --------------------------------------------------------------------------- -Copyright (c) 2006-2011, assimp team +Copyright (c) 2006-2019, assimp team All rights reserved. @@ -46,6 +46,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_EXPORT_H_INC #define AI_EXPORT_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifndef ASSIMP_BUILD_NO_EXPORT // Public ASSIMP data structures diff --git a/thirdparty/assimp/include/assimp/cfileio.h b/thirdparty/assimp/include/assimp/cfileio.h index 8f7ca45469..be90999d87 100644 --- a/thirdparty/assimp/include/assimp/cfileio.h +++ b/thirdparty/assimp/include/assimp/cfileio.h @@ -48,10 +48,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_FILEIO_H_INC #define AI_FILEIO_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> + #ifdef __cplusplus extern "C" { #endif + struct aiFileIO; struct aiFile; diff --git a/thirdparty/assimp/include/assimp/cimport.h b/thirdparty/assimp/include/assimp/cimport.h index dbd10f1370..66b1c9a174 100644 --- a/thirdparty/assimp/include/assimp/cimport.h +++ b/thirdparty/assimp/include/assimp/cimport.h @@ -48,8 +48,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_ASSIMP_H_INC #define AI_ASSIMP_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> -#include "importerdesc.h" +#include <assimp/importerdesc.h> #ifdef __cplusplus extern "C" { diff --git a/thirdparty/assimp/include/assimp/color4.h b/thirdparty/assimp/include/assimp/color4.h index 3c97c8eda2..fa86128f4f 100644 --- a/thirdparty/assimp/include/assimp/color4.h +++ b/thirdparty/assimp/include/assimp/color4.h @@ -47,7 +47,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_COLOR4D_H_INC #define AI_COLOR4D_H_INC -#include "defs.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/defs.h> #ifdef __cplusplus @@ -56,8 +60,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * alpha component. Color values range from 0 to 1. */ // ---------------------------------------------------------------------------------- template <typename TReal> -class aiColor4t -{ +class aiColor4t { public: aiColor4t() AI_NO_EXCEPT : r(), g(), b(), a() {} aiColor4t (TReal _r, TReal _g, TReal _b, TReal _a) @@ -65,14 +68,12 @@ public: explicit aiColor4t (TReal _r) : r(_r), g(_r), b(_r), a(_r) {} aiColor4t (const aiColor4t& o) = default; -public: // combined operators const aiColor4t& operator += (const aiColor4t& o); const aiColor4t& operator -= (const aiColor4t& o); const aiColor4t& operator *= (TReal f); const aiColor4t& operator /= (TReal f); -public: // comparison bool operator == (const aiColor4t& other) const; bool operator != (const aiColor4t& other) const; @@ -85,8 +86,6 @@ public: /** check whether a color is (close to) black */ inline bool IsBlack() const; -public: - // Red, green, blue and alpha color values TReal r, g, b, a; }; // !struct aiColor4D diff --git a/thirdparty/assimp/include/assimp/color4.inl b/thirdparty/assimp/include/assimp/color4.inl index afa53dcb5b..d4a2a98109 100644 --- a/thirdparty/assimp/include/assimp/color4.inl +++ b/thirdparty/assimp/include/assimp/color4.inl @@ -48,36 +48,61 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_COLOR4D_INL_INC #define AI_COLOR4D_INL_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus -#include "color4.h" +#include <assimp/color4.h> // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator += (const aiColor4t<TReal>& o) { - r += o.r; g += o.g; b += o.b; a += o.a; +AI_FORCE_INLINE +const aiColor4t<TReal>& aiColor4t<TReal>::operator += (const aiColor4t<TReal>& o) { + r += o.r; + g += o.g; + b += o.b; + a += o.a; + return *this; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator -= (const aiColor4t<TReal>& o) { - r -= o.r; g -= o.g; b -= o.b; a -= o.a; +AI_FORCE_INLINE +const aiColor4t<TReal>& aiColor4t<TReal>::operator -= (const aiColor4t<TReal>& o) { + r -= o.r; + g -= o.g; + b -= o.b; + a -= o.a; + return *this; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator *= (TReal f) { - r *= f; g *= f; b *= f; a *= f; +AI_FORCE_INLINE +const aiColor4t<TReal>& aiColor4t<TReal>::operator *= (TReal f) { + r *= f; + g *= f; + b *= f; + a *= f; + return *this; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE const aiColor4t<TReal>& aiColor4t<TReal>::operator /= (TReal f) { - r /= f; g /= f; b /= f; a /= f; +AI_FORCE_INLINE +const aiColor4t<TReal>& aiColor4t<TReal>::operator /= (TReal f) { + r /= f; + g /= f; + b /= f; + a /= f; + return *this; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE TReal aiColor4t<TReal>::operator[](unsigned int i) const { +AI_FORCE_INLINE +TReal aiColor4t<TReal>::operator[](unsigned int i) const { switch ( i ) { case 0: return r; @@ -94,7 +119,8 @@ AI_FORCE_INLINE TReal aiColor4t<TReal>::operator[](unsigned int i) const { } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE TReal& aiColor4t<TReal>::operator[](unsigned int i) { +AI_FORCE_INLINE +TReal& aiColor4t<TReal>::operator[](unsigned int i) { switch ( i ) { case 0: return r; @@ -111,17 +137,20 @@ AI_FORCE_INLINE TReal& aiColor4t<TReal>::operator[](unsigned int i) { } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE bool aiColor4t<TReal>::operator== (const aiColor4t<TReal>& other) const { +AI_FORCE_INLINE +bool aiColor4t<TReal>::operator== (const aiColor4t<TReal>& other) const { return r == other.r && g == other.g && b == other.b && a == other.a; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE bool aiColor4t<TReal>::operator!= (const aiColor4t<TReal>& other) const { +AI_FORCE_INLINE +bool aiColor4t<TReal>::operator!= (const aiColor4t<TReal>& other) const { return r != other.r || g != other.g || b != other.b || a != other.a; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) const { +AI_FORCE_INLINE +bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) const { return r < other.r || ( r == other.r && ( g < other.g || ( @@ -136,14 +165,17 @@ AI_FORCE_INLINE bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) ) ); } + // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator + (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { +AI_FORCE_INLINE +aiColor4t<TReal> operator + (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { return aiColor4t<TReal>( v1.r + v2.r, v1.g + v2.g, v1.b + v2.b, v1.a + v2.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator - (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { +AI_FORCE_INLINE +aiColor4t<TReal> operator - (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { return aiColor4t<TReal>( v1.r - v2.r, v1.g - v2.g, v1.b - v2.b, v1.a - v2.a); } // ------------------------------------------------------------------------------------------------ @@ -153,53 +185,63 @@ AI_FORCE_INLINE aiColor4t<TReal> operator * (const aiColor4t<TReal>& v1, const a } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator / (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { +AI_FORCE_INLINE +aiColor4t<TReal> operator / (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) { return aiColor4t<TReal>( v1.r / v2.r, v1.g / v2.g, v1.b / v2.b, v1.a / v2.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator * ( TReal f, const aiColor4t<TReal>& v) { +AI_FORCE_INLINE +aiColor4t<TReal> operator * ( TReal f, const aiColor4t<TReal>& v) { return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator * ( const aiColor4t<TReal>& v, TReal f) { +AI_FORCE_INLINE +aiColor4t<TReal> operator * ( const aiColor4t<TReal>& v, TReal f) { return aiColor4t<TReal>( f*v.r, f*v.g, f*v.b, f*v.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator / ( const aiColor4t<TReal>& v, TReal f) { +AI_FORCE_INLINE +aiColor4t<TReal> operator / ( const aiColor4t<TReal>& v, TReal f) { return v * (1/f); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator / ( TReal f,const aiColor4t<TReal>& v) { +AI_FORCE_INLINE +aiColor4t<TReal> operator / ( TReal f,const aiColor4t<TReal>& v) { return aiColor4t<TReal>(f,f,f,f)/v; } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator + ( const aiColor4t<TReal>& v, TReal f) { +AI_FORCE_INLINE +aiColor4t<TReal> operator + ( const aiColor4t<TReal>& v, TReal f) { return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator - ( const aiColor4t<TReal>& v, TReal f) { +AI_FORCE_INLINE +aiColor4t<TReal> operator - ( const aiColor4t<TReal>& v, TReal f) { return aiColor4t<TReal>( v.r-f, v.g-f, v.b-f, v.a-f); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator + ( TReal f, const aiColor4t<TReal>& v) { +AI_FORCE_INLINE +aiColor4t<TReal> operator + ( TReal f, const aiColor4t<TReal>& v) { return aiColor4t<TReal>( f+v.r, f+v.g, f+v.b, f+v.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -AI_FORCE_INLINE aiColor4t<TReal> operator - ( TReal f, const aiColor4t<TReal>& v) { +AI_FORCE_INLINE +aiColor4t<TReal> operator - ( TReal f, const aiColor4t<TReal>& v) { return aiColor4t<TReal>( f-v.r, f-v.g, f-v.b, f-v.a); } // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline bool aiColor4t<TReal> :: IsBlack() const { +AI_FORCE_INLINE +bool aiColor4t<TReal>::IsBlack() const { // The alpha component doesn't care here. black is black. static const TReal epsilon = 10e-3f; return std::fabs( r ) < epsilon && std::fabs( g ) < epsilon && std::fabs( b ) < epsilon; diff --git a/thirdparty/assimp/include/assimp/defs.h b/thirdparty/assimp/include/assimp/defs.h index 05a5e3fd4b..6f2f8ae88b 100644 --- a/thirdparty/assimp/include/assimp/defs.h +++ b/thirdparty/assimp/include/assimp/defs.h @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -50,6 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_DEFINES_H_INC #define AI_DEFINES_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/config.h> ////////////////////////////////////////////////////////////////////////// @@ -126,16 +128,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * GENBOUNDINGBOXES */ ////////////////////////////////////////////////////////////////////////// -#ifdef _MSC_VER +#ifdef _WIN32 # undef ASSIMP_API - ////////////////////////////////////////////////////////////////////////// /* Define 'ASSIMP_BUILD_DLL_EXPORT' to build a DLL of the library */ ////////////////////////////////////////////////////////////////////////// # ifdef ASSIMP_BUILD_DLL_EXPORT # define ASSIMP_API __declspec(dllexport) # define ASSIMP_API_WINONLY __declspec(dllexport) -# pragma warning (disable : 4251) ////////////////////////////////////////////////////////////////////////// /* Define 'ASSIMP_DLL' before including Assimp to link to ASSIMP in @@ -148,7 +148,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # define ASSIMP_API # define ASSIMP_API_WINONLY # endif +#elif defined(SWIG) + + /* Do nothing, the relevant defines are all in AssimpSwigPort.i */ +#else +# define ASSIMP_API __attribute__ ((visibility("default"))) +# define ASSIMP_API_WINONLY +#endif + +#ifdef _MSC_VER +# ifdef ASSIMP_BUILD_DLL_EXPORT +# pragma warning (disable : 4251) +# endif /* Force the compiler to inline a function, if possible */ # define AI_FORCE_INLINE __forceinline @@ -156,17 +168,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Tells the compiler that a function never returns. Used in code analysis * to skip dead paths (e.g. after an assertion evaluated to false). */ # define AI_WONT_RETURN __declspec(noreturn) - #elif defined(SWIG) /* Do nothing, the relevant defines are all in AssimpSwigPort.i */ #else - # define AI_WONT_RETURN - -# define ASSIMP_API __attribute__ ((visibility("default"))) -# define ASSIMP_API_WINONLY # define AI_FORCE_INLINE inline #endif // (defined _MSC_VER) @@ -291,9 +298,10 @@ static const ai_real ai_epsilon = (ai_real) 0.00001; #endif -/* To avoid running out of memory - * This can be adjusted for specific use cases - * It's NOT a total limit, just a limit for individual allocations +/** + * To avoid running out of memory + * This can be adjusted for specific use cases + * It's NOT a total limit, just a limit for individual allocations */ #define AI_MAX_ALLOC(type) ((256U * 1024 * 1024) / sizeof(type)) @@ -307,4 +315,13 @@ static const ai_real ai_epsilon = (ai_real) 0.00001; # endif #endif // _MSC_VER +/** + * Helper macro to set a pointer to NULL in debug builds + */ +#if (defined ASSIMP_BUILD_DEBUG) +# define AI_DEBUG_INVALIDATE_PTR(x) x = NULL; +#else +# define AI_DEBUG_INVALIDATE_PTR(x) +#endif + #endif // !! AI_DEFINES_H_INC diff --git a/thirdparty/assimp/include/assimp/fast_atof.h b/thirdparty/assimp/include/assimp/fast_atof.h index 62ea969e97..6e9a1bba7a 100644 --- a/thirdparty/assimp/include/assimp/fast_atof.h +++ b/thirdparty/assimp/include/assimp/fast_atof.h @@ -13,10 +13,14 @@ // to ensure long numbers are handled correctly // ------------------------------------------------------------------------------------ - +#pragma once #ifndef FAST_A_TO_F_H_INCLUDED #define FAST_A_TO_F_H_INCLUDED +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <cmath> #include <limits> #include <stdint.h> diff --git a/thirdparty/assimp/include/assimp/importerdesc.h b/thirdparty/assimp/include/assimp/importerdesc.h index 36e387f011..0a6919c1ae 100644 --- a/thirdparty/assimp/include/assimp/importerdesc.h +++ b/thirdparty/assimp/include/assimp/importerdesc.h @@ -48,11 +48,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_IMPORTER_DESC_H_INC #define AI_IMPORTER_DESC_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + /** Mixed set of flags for #aiImporterDesc, indicating some features * common to many importers*/ -enum aiImporterFlags -{ +enum aiImporterFlags { /** Indicates that there is a textual encoding of the * file format; and that it is supported.*/ aiImporterFlags_SupportTextFlavour = 0x1, @@ -87,8 +90,7 @@ enum aiImporterFlags * as importers/exporters are added to Assimp, so it might be useful * to have a common mechanism to query some rough importer * characteristics. */ -struct aiImporterDesc -{ +struct aiImporterDesc { /** Full name of the importer (i.e. Blender3D importer)*/ const char* mName; diff --git a/thirdparty/assimp/include/assimp/light.h b/thirdparty/assimp/include/assimp/light.h index 1667cfb8c1..bdb2368c4f 100644 --- a/thirdparty/assimp/include/assimp/light.h +++ b/thirdparty/assimp/include/assimp/light.h @@ -49,7 +49,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_LIGHT_H_INC #define AI_LIGHT_H_INC -#include "types.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> #ifdef __cplusplus extern "C" { diff --git a/thirdparty/assimp/include/assimp/material.h b/thirdparty/assimp/include/assimp/material.h index 4b5a1293dd..19a7c69709 100644 --- a/thirdparty/assimp/include/assimp/material.h +++ b/thirdparty/assimp/include/assimp/material.h @@ -48,7 +48,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MATERIAL_H_INC #define AI_MATERIAL_H_INC -#include "types.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> #ifdef __cplusplus extern "C" { @@ -196,34 +200,40 @@ enum aiTextureType * (#aiMaterialProperty::mSemantic) for all material properties * *not* related to textures. */ - aiTextureType_NONE = 0x0, + aiTextureType_NONE = 0, + + /** LEGACY API MATERIALS + * Legacy refers to materials which + * Were originally implemented in the specifications around 2000. + * These must never be removed, as most engines support them. + */ /** The texture is combined with the result of the diffuse * lighting equation. */ - aiTextureType_DIFFUSE = 0x1, + aiTextureType_DIFFUSE = 1, /** The texture is combined with the result of the specular * lighting equation. */ - aiTextureType_SPECULAR = 0x2, + aiTextureType_SPECULAR = 2, /** The texture is combined with the result of the ambient * lighting equation. */ - aiTextureType_AMBIENT = 0x3, + aiTextureType_AMBIENT = 3, /** The texture is added to the result of the lighting * calculation. It isn't influenced by incoming light. */ - aiTextureType_EMISSIVE = 0x4, + aiTextureType_EMISSIVE = 4, /** The texture is a height map. * * By convention, higher gray-scale values stand for * higher elevations from the base height. */ - aiTextureType_HEIGHT = 0x5, + aiTextureType_HEIGHT = 5, /** The texture is a (tangent space) normal-map. * @@ -231,7 +241,7 @@ enum aiTextureType * normal maps. Assimp does (intentionally) not * distinguish here. */ - aiTextureType_NORMALS = 0x6, + aiTextureType_NORMALS = 6, /** The texture defines the glossiness of the material. * @@ -240,21 +250,21 @@ enum aiTextureType * function defined to map the linear color values in the * texture to a suitable exponent. Have fun. */ - aiTextureType_SHININESS = 0x7, + aiTextureType_SHININESS = 7, /** The texture defines per-pixel opacity. * * Usually 'white' means opaque and 'black' means * 'transparency'. Or quite the opposite. Have fun. */ - aiTextureType_OPACITY = 0x8, + aiTextureType_OPACITY = 8, /** Displacement texture * * The exact purpose and format is application-dependent. * Higher color values stand for higher vertex displacements. */ - aiTextureType_DISPLACEMENT = 0x9, + aiTextureType_DISPLACEMENT = 9, /** Lightmap texture (aka Ambient Occlusion) * @@ -263,14 +273,28 @@ enum aiTextureType * scaling value for the final color value of a pixel. Its * intensity is not affected by incoming light. */ - aiTextureType_LIGHTMAP = 0xA, + aiTextureType_LIGHTMAP = 10, /** Reflection texture * * Contains the color of a perfect mirror reflection. * Rarely used, almost never for real-time applications. */ - aiTextureType_REFLECTION = 0xB, + aiTextureType_REFLECTION = 11, + + /** PBR Materials + * PBR definitions from maya and other modelling packages now use this standard. + * This was originally introduced around 2012. + * Support for this is in game engines like Godot, Unreal or Unity3D. + * Modelling packages which use this are very common now. + */ + + aiTextureType_BASE_COLOR = 12, + aiTextureType_NORMAL_CAMERA = 13, + aiTextureType_EMISSION_COLOR = 14, + aiTextureType_METALNESS = 15, + aiTextureType_DIFFUSE_ROUGHNESS = 16, + aiTextureType_AMBIENT_OCCLUSION = 17, /** Unknown texture * @@ -278,7 +302,7 @@ enum aiTextureType * above is considered to be 'unknown'. It is still imported, * but is excluded from any further post-processing. */ - aiTextureType_UNKNOWN = 0xC, + aiTextureType_UNKNOWN = 18, #ifndef SWIG diff --git a/thirdparty/assimp/include/assimp/material.inl b/thirdparty/assimp/include/assimp/material.inl index b05d6af6c3..8ae6b88d3e 100644 --- a/thirdparty/assimp/include/assimp/material.inl +++ b/thirdparty/assimp/include/assimp/material.inl @@ -49,14 +49,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MATERIAL_INL_INC #define AI_MATERIAL_INL_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + // --------------------------------------------------------------------------- -inline aiPropertyTypeInfo ai_real_to_property_type_info(float) -{ +AI_FORCE_INLINE +aiPropertyTypeInfo ai_real_to_property_type_info(float) { return aiPTI_Float; } -inline aiPropertyTypeInfo ai_real_to_property_type_info(double) -{ +AI_FORCE_INLINE +aiPropertyTypeInfo ai_real_to_property_type_info(double) { return aiPTI_Double; } // --------------------------------------------------------------------------- @@ -64,30 +68,30 @@ inline aiPropertyTypeInfo ai_real_to_property_type_info(double) //! @cond never // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::GetTexture( aiTextureType type, - unsigned int index, - C_STRUCT aiString* path, - aiTextureMapping* mapping /*= NULL*/, - unsigned int* uvindex /*= NULL*/, - ai_real* blend /*= NULL*/, - aiTextureOp* op /*= NULL*/, - aiTextureMapMode* mapmode /*= NULL*/) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::GetTexture( aiTextureType type, + unsigned int index, + C_STRUCT aiString* path, + aiTextureMapping* mapping /*= NULL*/, + unsigned int* uvindex /*= NULL*/, + ai_real* blend /*= NULL*/, + aiTextureOp* op /*= NULL*/, + aiTextureMapMode* mapmode /*= NULL*/) const { return ::aiGetMaterialTexture(this,type,index,path,mapping,uvindex,blend,op,mapmode); } // --------------------------------------------------------------------------- -inline unsigned int aiMaterial::GetTextureCount(aiTextureType type) const -{ +AI_FORCE_INLINE +unsigned int aiMaterial::GetTextureCount(aiTextureType type) const { return ::aiGetMaterialTextureCount(this,type); } // --------------------------------------------------------------------------- template <typename Type> -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx, Type* pOut, - unsigned int* pMax) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx, Type* pOut, + unsigned int* pMax) const { unsigned int iNum = pMax ? *pMax : 1; const aiMaterialProperty* prop; @@ -114,9 +118,9 @@ inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, // --------------------------------------------------------------------------- template <typename Type> -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,Type& pOut) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,Type& pOut) const { const aiMaterialProperty* prop; const aiReturn ret = ::aiGetMaterialProperty(this,pKey,type,idx, (const aiMaterialProperty**)&prop); @@ -136,60 +140,56 @@ inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,ai_real* pOut, - unsigned int* pMax) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,ai_real* pOut, + unsigned int* pMax) const { return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,int* pOut, - unsigned int* pMax) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,int* pOut, + unsigned int* pMax) const { return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,ai_real& pOut) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,ai_real& pOut) const { return aiGetMaterialFloat(this,pKey,type,idx,&pOut); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,int& pOut) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,int& pOut) const { return aiGetMaterialInteger(this,pKey,type,idx,&pOut); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,aiColor4D& pOut) const -{ +AI_FORCE_INLINE +aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,aiColor4D& pOut) const { return aiGetMaterialColor(this,pKey,type,idx,&pOut); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,aiColor3D& pOut) const -{ +AI_FORCE_INLINE aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,aiColor3D& pOut) const { aiColor4D c; const aiReturn ret = aiGetMaterialColor(this,pKey,type,idx,&c); pOut = aiColor3D(c.r,c.g,c.b); return ret; } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,aiString& pOut) const -{ +AI_FORCE_INLINE aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,aiString& pOut) const { return aiGetMaterialString(this,pKey,type,idx,&pOut); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type, - unsigned int idx,aiUVTransform& pOut) const -{ +AI_FORCE_INLINE aiReturn aiMaterial::Get(const char* pKey,unsigned int type, + unsigned int idx,aiUVTransform& pOut) const { return aiGetMaterialUVTransform(this,pKey,type,idx,&pOut); } - // --------------------------------------------------------------------------- template<class TYPE> aiReturn aiMaterial::AddProperty (const TYPE* pInput, @@ -204,84 +204,83 @@ aiReturn aiMaterial::AddProperty (const TYPE* pInput, } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const float* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE aiReturn aiMaterial::AddProperty(const float* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(float), pKey,type,index,aiPTI_Float); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const double* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const double* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(double), pKey,type,index,aiPTI_Double); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiUVTransform), pKey,type,index,ai_real_to_property_type_info(pInput->mRotation)); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const aiColor4D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const aiColor4D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiColor4D), pKey,type,index,ai_real_to_property_type_info(pInput->a)); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const aiColor3D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const aiColor3D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiColor3D), pKey,type,index,ai_real_to_property_type_info(pInput->b)); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const aiVector3D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const aiVector3D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiVector3D), pKey,type,index,ai_real_to_property_type_info(pInput->x)); } // --------------------------------------------------------------------------- -inline aiReturn aiMaterial::AddProperty(const int* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty(const int* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(int), pKey,type,index,aiPTI_Integer); @@ -296,12 +295,12 @@ inline aiReturn aiMaterial::AddProperty(const int* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<float>(const float* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<float>(const float* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(float), pKey,type,index,aiPTI_Float); @@ -309,12 +308,12 @@ inline aiReturn aiMaterial::AddProperty<float>(const float* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<double>(const double* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<double>(const double* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(double), pKey,type,index,aiPTI_Double); @@ -322,12 +321,12 @@ inline aiReturn aiMaterial::AddProperty<double>(const double* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiUVTransform), pKey,type,index,aiPTI_Float); @@ -335,12 +334,12 @@ inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInp // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiColor4D), pKey,type,index,aiPTI_Float); @@ -348,12 +347,12 @@ inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiColor3D), pKey,type,index,aiPTI_Float); @@ -361,12 +360,12 @@ inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(aiVector3D), pKey,type,index,aiPTI_Float); @@ -374,12 +373,12 @@ inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput, // --------------------------------------------------------------------------- template<> -inline aiReturn aiMaterial::AddProperty<int>(const int* pInput, - const unsigned int pNumValues, - const char* pKey, - unsigned int type, - unsigned int index) -{ +AI_FORCE_INLINE +aiReturn aiMaterial::AddProperty<int>(const int* pInput, + const unsigned int pNumValues, + const char* pKey, + unsigned int type, + unsigned int index) { return AddBinaryProperty((const void*)pInput, pNumValues * sizeof(int), pKey,type,index,aiPTI_Integer); diff --git a/thirdparty/assimp/include/assimp/matrix3x3.h b/thirdparty/assimp/include/assimp/matrix3x3.h index 22b69561ff..2c26cf92bb 100644 --- a/thirdparty/assimp/include/assimp/matrix3x3.h +++ b/thirdparty/assimp/include/assimp/matrix3x3.h @@ -48,7 +48,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MATRIX3X3_H_INC #define AI_MATRIX3X3_H_INC -#include "defs.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/defs.h> #ifdef __cplusplus @@ -65,10 +69,8 @@ template <typename T> class aiVector2t; * defined thereby. */ template <typename TReal> -class aiMatrix3x3t -{ +class aiMatrix3x3t { public: - aiMatrix3x3t() AI_NO_EXCEPT : a1(static_cast<TReal>(1.0f)), a2(), a3(), b1(), b2(static_cast<TReal>(1.0f)), b3(), @@ -82,8 +84,6 @@ public: c1(_c1), c2(_c2), c3(_c3) {} -public: - // matrix multiplication. aiMatrix3x3t& operator *= (const aiMatrix3x3t& m); aiMatrix3x3t operator * (const aiMatrix3x3t& m) const; @@ -101,8 +101,6 @@ public: template <typename TOther> operator aiMatrix3x3t<TOther> () const; -public: - // ------------------------------------------------------------------- /** @brief Construction from a 4x4 matrix. The remaining parts * of the matrix are ignored. @@ -122,7 +120,6 @@ public: aiMatrix3x3t& Inverse(); TReal Determinant() const; -public: // ------------------------------------------------------------------- /** @brief Returns a rotation matrix for a rotation around z * @param a Rotation angle, in radians diff --git a/thirdparty/assimp/include/assimp/matrix3x3.inl b/thirdparty/assimp/include/assimp/matrix3x3.inl index d9d45a3e92..1ce8c9691c 100644 --- a/thirdparty/assimp/include/assimp/matrix3x3.inl +++ b/thirdparty/assimp/include/assimp/matrix3x3.inl @@ -48,10 +48,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MATRIX3X3_INL_INC #define AI_MATRIX3X3_INL_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus -#include "matrix3x3.h" +#include <assimp/matrix3x3.h> +#include <assimp/matrix4x4.h> -#include "matrix4x4.h" #include <algorithm> #include <cmath> #include <limits> @@ -59,8 +63,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ------------------------------------------------------------------------------------------------ // Construction from a 4x4 matrix. The remaining parts of the matrix are ignored. template <typename TReal> -inline aiMatrix3x3t<TReal>::aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix) -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>::aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix) { a1 = pMatrix.a1; a2 = pMatrix.a2; a3 = pMatrix.a3; b1 = pMatrix.b1; b2 = pMatrix.b2; b3 = pMatrix.b3; c1 = pMatrix.c1; c2 = pMatrix.c2; c3 = pMatrix.c3; @@ -68,8 +72,8 @@ inline aiMatrix3x3t<TReal>::aiMatrix3x3t( const aiMatrix4x4t<TReal>& pMatrix) // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& m) -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::operator *= (const aiMatrix3x3t<TReal>& m) { *this = aiMatrix3x3t<TReal>(m.a1 * a1 + m.b1 * a2 + m.c1 * a3, m.a2 * a1 + m.b2 * a2 + m.c2 * a3, m.a3 * a1 + m.b3 * a2 + m.c3 * a3, @@ -85,8 +89,7 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::operator *= (const aiMatrix3x3t // ------------------------------------------------------------------------------------------------ template <typename TReal> template <typename TOther> -aiMatrix3x3t<TReal>::operator aiMatrix3x3t<TOther> () const -{ +aiMatrix3x3t<TReal>::operator aiMatrix3x3t<TOther> () const { return aiMatrix3x3t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3), static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3), static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3)); @@ -94,8 +97,8 @@ aiMatrix3x3t<TReal>::operator aiMatrix3x3t<TOther> () const // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline aiMatrix3x3t<TReal> aiMatrix3x3t<TReal>::operator* (const aiMatrix3x3t<TReal>& m) const -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal> aiMatrix3x3t<TReal>::operator* (const aiMatrix3x3t<TReal>& m) const { aiMatrix3x3t<TReal> temp( *this); temp *= m; return temp; @@ -103,7 +106,8 @@ inline aiMatrix3x3t<TReal> aiMatrix3x3t<TReal>::operator* (const aiMatrix3x3t<TR // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) { +AI_FORCE_INLINE +TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) { switch ( p_iIndex ) { case 0: return &a1; @@ -119,7 +123,8 @@ inline TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) { // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline const TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) const { +AI_FORCE_INLINE +const TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) const { switch ( p_iIndex ) { case 0: return &a1; @@ -135,8 +140,8 @@ inline const TReal* aiMatrix3x3t<TReal>::operator[] (unsigned int p_iIndex) cons // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const { return a1 == m.a1 && a2 == m.a2 && a3 == m.a3 && b1 == m.b1 && b2 == m.b2 && b3 == m.b3 && c1 == m.c1 && c2 == m.c2 && c3 == m.c3; @@ -144,14 +149,15 @@ inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const { return !(*this == m); } // --------------------------------------------------------------------------- template<typename TReal> -inline bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const { +AI_FORCE_INLINE +bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const { return std::abs(a1 - m.a1) <= epsilon && std::abs(a2 - m.a2) <= epsilon && @@ -166,8 +172,8 @@ inline bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsil // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Transpose() -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Transpose() { // (TReal&) don't remove, GCC complains cause of packed fields std::swap( (TReal&)a2, (TReal&)b1); std::swap( (TReal&)a3, (TReal&)c1); @@ -177,15 +183,15 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Transpose() // ---------------------------------------------------------------------------------------- template <typename TReal> -inline TReal aiMatrix3x3t<TReal>::Determinant() const -{ +AI_FORCE_INLINE +TReal aiMatrix3x3t<TReal>::Determinant() const { return a1*b2*c3 - a1*b3*c2 + a2*b3*c1 - a2*b1*c3 + a3*b1*c2 - a3*b2*c1; } // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Inverse() -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Inverse() { // Compute the reciprocal determinant TReal det = Determinant(); if(det == static_cast<TReal>(0.0)) @@ -219,8 +225,8 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Inverse() // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t<TReal>& out) { out.a1 = out.b2 = std::cos(a); out.b1 = std::sin(a); out.a2 = - out.b1; @@ -234,8 +240,8 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::RotationZ(TReal a, aiMatrix3x3t // ------------------------------------------------------------------------------------------------ // Returns a rotation matrix for a rotation around an arbitrary axis. template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix3x3t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix3x3t<TReal>& out) { TReal c = std::cos( a), s = std::sin( a), t = 1 - c; TReal x = axis.x, y = axis.y, z = axis.z; @@ -249,8 +255,8 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Rotation( TReal a, const aiVect // ------------------------------------------------------------------------------------------------ template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<TReal>& v, aiMatrix3x3t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<TReal>& v, aiMatrix3x3t<TReal>& out) { out = aiMatrix3x3t<TReal>(); out.a3 = v.x; out.b3 = v.y; @@ -268,9 +274,8 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::Translation( const aiVector2t<T */ // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<TReal>& from, - const aiVector3t<TReal>& to, aiMatrix3x3t<TReal>& mtx) -{ +AI_FORCE_INLINE aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<TReal>& from, + const aiVector3t<TReal>& to, aiMatrix3x3t<TReal>& mtx) { const TReal e = from * to; const TReal f = (e < 0)? -e:e; @@ -352,6 +357,5 @@ inline aiMatrix3x3t<TReal>& aiMatrix3x3t<TReal>::FromToMatrix(const aiVector3t<T return mtx; } - #endif // __cplusplus #endif // AI_MATRIX3X3_INL_INC diff --git a/thirdparty/assimp/include/assimp/matrix4x4.h b/thirdparty/assimp/include/assimp/matrix4x4.h index 046bb535f2..8fc216f669 100644 --- a/thirdparty/assimp/include/assimp/matrix4x4.h +++ b/thirdparty/assimp/include/assimp/matrix4x4.h @@ -47,8 +47,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MATRIX4X4_H_INC #define AI_MATRIX4X4_H_INC -#include "vector3.h" -#include "defs.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/vector3.h> +#include <assimp/defs.h> #ifdef __cplusplus @@ -66,8 +70,7 @@ template<typename TReal> class aiQuaterniont; * defined thereby. */ template<typename TReal> -class aiMatrix4x4t -{ +class aiMatrix4x4t { public: /** set to identity */ @@ -91,8 +94,6 @@ public: aiMatrix4x4t(const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position); -public: - // array access operators /** @fn TReal* operator[] (unsigned int p_iIndex) * @param [in] p_iIndex - index of the row. @@ -120,8 +121,6 @@ public: template <typename TOther> operator aiMatrix4x4t<TOther> () const; -public: - // ------------------------------------------------------------------- /** @brief Transpose the matrix */ aiMatrix4x4t& Transpose(); @@ -182,7 +181,6 @@ public: void DecomposeNoScaling (aiQuaterniont<TReal>& rotation, aiVector3t<TReal>& position) const; - // ------------------------------------------------------------------- /** @brief Creates a trafo matrix from a set of euler angles * @param x Rotation angle for the x-axis, in radians @@ -192,7 +190,6 @@ public: aiMatrix4x4t& FromEulerAnglesXYZ(TReal x, TReal y, TReal z); aiMatrix4x4t& FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb); -public: // ------------------------------------------------------------------- /** @brief Returns a rotation matrix for a rotation around the x axis * @param a Rotation angle, in radians @@ -256,7 +253,6 @@ public: static aiMatrix4x4t& FromToMatrix(const aiVector3t<TReal>& from, const aiVector3t<TReal>& to, aiMatrix4x4t& out); -public: TReal a1, a2, a3, a4; TReal b1, b2, b3, b4; TReal c1, c2, c3, c4; diff --git a/thirdparty/assimp/include/assimp/matrix4x4.inl b/thirdparty/assimp/include/assimp/matrix4x4.inl index ebc67a06ec..84079974f7 100644 --- a/thirdparty/assimp/include/assimp/matrix4x4.inl +++ b/thirdparty/assimp/include/assimp/matrix4x4.inl @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -53,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "matrix4x4.h" #include "matrix3x3.h" #include "quaternion.h" +#include "MathFunctions.h" #include <algorithm> #include <limits> @@ -61,12 +60,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ---------------------------------------------------------------------------------------- template <typename TReal> aiMatrix4x4t<TReal>::aiMatrix4x4t() AI_NO_EXCEPT : - a1(1.0f), a2(), a3(), a4(), - b1(), b2(1.0f), b3(), b4(), - c1(), c2(), c3(1.0f), c4(), - d1(), d2(), d3(), d4(1.0f) -{ - + a1(1.0f), a2(), a3(), a4(), + b1(), b2(1.0f), b3(), b4(), + c1(), c2(), c3(1.0f), c4(), + d1(), d2(), d3(), d4(1.0f) { + // empty } // ---------------------------------------------------------------------------------------- @@ -75,19 +73,17 @@ aiMatrix4x4t<TReal>::aiMatrix4x4t (TReal _a1, TReal _a2, TReal _a3, TReal _a4, TReal _b1, TReal _b2, TReal _b3, TReal _b4, TReal _c1, TReal _c2, TReal _c3, TReal _c4, TReal _d1, TReal _d2, TReal _d3, TReal _d4) : - a1(_a1), a2(_a2), a3(_a3), a4(_a4), - b1(_b1), b2(_b2), b3(_b3), b4(_b4), - c1(_c1), c2(_c2), c3(_c3), c4(_c4), - d1(_d1), d2(_d2), d3(_d3), d4(_d4) -{ - + a1(_a1), a2(_a2), a3(_a3), a4(_a4), + b1(_b1), b2(_b2), b3(_b3), b4(_b4), + c1(_c1), c2(_c2), c3(_c3), c4(_c4), + d1(_d1), d2(_d2), d3(_d3), d4(_d4) { + // empty } // ------------------------------------------------------------------------------------------------ template <typename TReal> template <typename TOther> -aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const -{ +aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const { return aiMatrix4x4t<TOther>(static_cast<TOther>(a1),static_cast<TOther>(a2),static_cast<TOther>(a3),static_cast<TOther>(a4), static_cast<TOther>(b1),static_cast<TOther>(b2),static_cast<TOther>(b3),static_cast<TOther>(b4), static_cast<TOther>(c1),static_cast<TOther>(c2),static_cast<TOther>(c3),static_cast<TOther>(c4), @@ -97,8 +93,8 @@ aiMatrix4x4t<TReal>::operator aiMatrix4x4t<TOther> () const // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiMatrix3x3t<TReal>& m) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiMatrix3x3t<TReal>& m) { a1 = m.a1; a2 = m.a2; a3 = m.a3; a4 = static_cast<TReal>(0.0); b1 = m.b1; b2 = m.b2; b3 = m.b3; b4 = static_cast<TReal>(0.0); c1 = m.c1; c2 = m.c2; c3 = m.c3; c4 = static_cast<TReal>(0.0); @@ -107,8 +103,8 @@ inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiMatrix3x3t<TReal>& m) // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position) { // build a 3x3 rotation matrix aiMatrix3x3t<TReal> m = rotation.GetMatrix(); @@ -135,8 +131,8 @@ inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, cons // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::operator *= (const aiMatrix4x4t<TReal>& m) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::operator *= (const aiMatrix4x4t<TReal>& m) { *this = aiMatrix4x4t<TReal>( m.a1 * a1 + m.b1 * a2 + m.c1 * a3 + m.d1 * a4, m.a2 * a1 + m.b2 * a2 + m.c2 * a3 + m.d2 * a4, @@ -159,8 +155,7 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::operator *= (const aiMatrix4x4t // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const TReal& aFloat) const -{ +AI_FORCE_INLINE aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const TReal& aFloat) const { aiMatrix4x4t<TReal> temp( a1 * aFloat, a2 * aFloat, @@ -183,8 +178,8 @@ inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const TReal& aFloat) // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator+ (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator+ (const aiMatrix4x4t<TReal>& m) const { aiMatrix4x4t<TReal> temp( m.a1 + a1, m.a2 + a2, @@ -207,18 +202,16 @@ inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator+ (const aiMatrix4x4t<TR // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal> aiMatrix4x4t<TReal>::operator* (const aiMatrix4x4t<TReal>& m) const { aiMatrix4x4t<TReal> temp( *this); temp *= m; return temp; } - // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose() -{ +AI_FORCE_INLINE aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose() { // (TReal&) don't remove, GCC complains cause of packed fields std::swap( (TReal&)b1, (TReal&)a2); std::swap( (TReal&)c1, (TReal&)a3); @@ -229,11 +222,10 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Transpose() return *this; } - // ---------------------------------------------------------------------------------------- template <typename TReal> -inline TReal aiMatrix4x4t<TReal>::Determinant() const -{ +AI_FORCE_INLINE +TReal aiMatrix4x4t<TReal>::Determinant() const { return a1*b2*c3*d4 - a1*b2*c4*d3 + a1*b3*c4*d2 - a1*b3*c2*d4 + a1*b4*c2*d3 - a1*b4*c3*d2 - a2*b3*c4*d1 + a2*b3*c1*d4 - a2*b4*c1*d3 + a2*b4*c3*d1 - a2*b1*c3*d4 + a2*b1*c4*d3 @@ -244,8 +236,8 @@ inline TReal aiMatrix4x4t<TReal>::Determinant() const // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Inverse() -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Inverse() { // Compute the reciprocal determinant const TReal det = Determinant(); if(det == static_cast<TReal>(0.0)) @@ -289,9 +281,10 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Inverse() // ---------------------------------------------------------------------------------------- template <typename TReal> -inline TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) { +AI_FORCE_INLINE +TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) { if (p_iIndex > 3) { - return NULL; + return nullptr; } switch ( p_iIndex ) { case 0: @@ -310,9 +303,10 @@ inline TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) { // ---------------------------------------------------------------------------------------- template <typename TReal> -inline const TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) const { +AI_FORCE_INLINE +const TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) const { if (p_iIndex > 3) { - return NULL; + return nullptr; } switch ( p_iIndex ) { @@ -332,8 +326,8 @@ inline const TReal* aiMatrix4x4t<TReal>::operator[](unsigned int p_iIndex) const // ---------------------------------------------------------------------------------------- template <typename TReal> -inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const { return (a1 == m.a1 && a2 == m.a2 && a3 == m.a3 && a4 == m.a4 && b1 == m.b1 && b2 == m.b2 && b3 == m.b3 && b4 == m.b4 && c1 == m.c1 && c2 == m.c2 && c3 == m.c3 && c4 == m.c4 && @@ -342,14 +336,15 @@ inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const // ---------------------------------------------------------------------------------------- template <typename TReal> -inline bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const -{ +AI_FORCE_INLINE +bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const { return !(*this == m); } // --------------------------------------------------------------------------- template<typename TReal> -inline bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const { +AI_FORCE_INLINE +bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const { return std::abs(a1 - m.a1) <= epsilon && std::abs(a2 - m.a2) <= epsilon && @@ -401,13 +396,10 @@ inline bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsil \ do {} while(false) - - - template <typename TReal> -inline void aiMatrix4x4t<TReal>::Decompose (aiVector3t<TReal>& pScaling, aiQuaterniont<TReal>& pRotation, - aiVector3t<TReal>& pPosition) const -{ +AI_FORCE_INLINE +void aiMatrix4x4t<TReal>::Decompose (aiVector3t<TReal>& pScaling, aiQuaterniont<TReal>& pRotation, + aiVector3t<TReal>& pPosition) const { ASSIMP_MATRIX4_4_DECOMPOSE_PART; // build a 3x3 rotation matrix @@ -420,8 +412,8 @@ inline void aiMatrix4x4t<TReal>::Decompose (aiVector3t<TReal>& pScaling, aiQuate } template <typename TReal> -inline void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector3t<TReal>& pRotation, aiVector3t<TReal>& pPosition) const -{ +AI_FORCE_INLINE +void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector3t<TReal>& pRotation, aiVector3t<TReal>& pPosition) const { ASSIMP_MATRIX4_4_DECOMPOSE_PART; /* @@ -442,7 +434,7 @@ inline void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector */ // Use a small epsilon to solve floating-point inaccuracies - const TReal epsilon = 10e-3f; + const TReal epsilon = Assimp::Math::getEpsilon<TReal>(); pRotation.y = std::asin(-vCols[0].z);// D. Angle around oY. @@ -475,10 +467,10 @@ inline void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector #undef ASSIMP_MATRIX4_4_DECOMPOSE_PART template <typename TReal> -inline void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector3t<TReal>& pRotationAxis, TReal& pRotationAngle, - aiVector3t<TReal>& pPosition) const -{ -aiQuaterniont<TReal> pRotation; +AI_FORCE_INLINE +void aiMatrix4x4t<TReal>::Decompose(aiVector3t<TReal>& pScaling, aiVector3t<TReal>& pRotationAxis, TReal& pRotationAngle, + aiVector3t<TReal>& pPosition) const { + aiQuaterniont<TReal> pRotation; Decompose(pScaling, pRotation, pPosition); pRotation.Normalize(); @@ -500,9 +492,9 @@ aiQuaterniont<TReal> pRotation; // ---------------------------------------------------------------------------------------- template <typename TReal> -inline void aiMatrix4x4t<TReal>::DecomposeNoScaling (aiQuaterniont<TReal>& rotation, - aiVector3t<TReal>& position) const -{ +AI_FORCE_INLINE +void aiMatrix4x4t<TReal>::DecomposeNoScaling (aiQuaterniont<TReal>& rotation, + aiVector3t<TReal>& position) const { const aiMatrix4x4t<TReal>& _this = *this; // extract translation @@ -516,15 +508,15 @@ inline void aiMatrix4x4t<TReal>::DecomposeNoScaling (aiQuaterniont<TReal>& rotat // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(const aiVector3t<TReal>& blubb) { return FromEulerAnglesXYZ(blubb.x,blubb.y,blubb.z); } // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(TReal x, TReal y, TReal z) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(TReal x, TReal y, TReal z) { aiMatrix4x4t<TReal>& _this = *this; TReal cx = std::cos(x); @@ -552,8 +544,8 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromEulerAnglesXYZ(TReal x, TRe // ---------------------------------------------------------------------------------------- template <typename TReal> -inline bool aiMatrix4x4t<TReal>::IsIdentity() const -{ +AI_FORCE_INLINE +bool aiMatrix4x4t<TReal>::IsIdentity() const { // Use a small epsilon to solve floating-point inaccuracies const static TReal epsilon = 10e-3f; @@ -577,8 +569,8 @@ inline bool aiMatrix4x4t<TReal>::IsIdentity() const // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationX(TReal a, aiMatrix4x4t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationX(TReal a, aiMatrix4x4t<TReal>& out) { /* | 1 0 0 0 | M = | 0 cos(A) -sin(A) 0 | @@ -592,8 +584,8 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationX(TReal a, aiMatrix4x4t // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationY(TReal a, aiMatrix4x4t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationY(TReal a, aiMatrix4x4t<TReal>& out) { /* | cos(A) 0 sin(A) 0 | M = | 0 1 0 0 | @@ -608,8 +600,8 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationY(TReal a, aiMatrix4x4t // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t<TReal>& out) { /* | cos(A) -sin(A) 0 0 | M = | sin(A) cos(A) 0 0 | @@ -624,26 +616,25 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::RotationZ(TReal a, aiMatrix4x4t // ---------------------------------------------------------------------------------------- // Returns a rotation matrix for a rotation around an arbitrary axis. template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix4x4t<TReal>& out) -{ - TReal c = std::cos( a), s = std::sin( a), t = 1 - c; - TReal x = axis.x, y = axis.y, z = axis.z; - - // Many thanks to MathWorld and Wikipedia - out.a1 = t*x*x + c; out.a2 = t*x*y - s*z; out.a3 = t*x*z + s*y; - out.b1 = t*x*y + s*z; out.b2 = t*y*y + c; out.b3 = t*y*z - s*x; - out.c1 = t*x*z - s*y; out.c2 = t*y*z + s*x; out.c3 = t*z*z + c; - out.a4 = out.b4 = out.c4 = static_cast<TReal>(0.0); - out.d1 = out.d2 = out.d3 = static_cast<TReal>(0.0); - out.d4 = static_cast<TReal>(1.0); - - return out; +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Rotation( TReal a, const aiVector3t<TReal>& axis, aiMatrix4x4t<TReal>& out) { + TReal c = std::cos( a), s = std::sin( a), t = 1 - c; + TReal x = axis.x, y = axis.y, z = axis.z; + + // Many thanks to MathWorld and Wikipedia + out.a1 = t*x*x + c; out.a2 = t*x*y - s*z; out.a3 = t*x*z + s*y; + out.b1 = t*x*y + s*z; out.b2 = t*y*y + c; out.b3 = t*y*z - s*x; + out.c1 = t*x*z - s*y; out.c2 = t*y*z + s*x; out.c3 = t*z*z + c; + out.a4 = out.b4 = out.c4 = static_cast<TReal>(0.0); + out.d1 = out.d2 = out.d3 = static_cast<TReal>(0.0); + out.d4 = static_cast<TReal>(1.0); + + return out; } // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Translation( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out) -{ +AI_FORCE_INLINE aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Translation( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out) { out = aiMatrix4x4t<TReal>(); out.a4 = v.x; out.b4 = v.y; @@ -653,8 +644,8 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Translation( const aiVector3t<T // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal>& v, aiMatrix4x4t<TReal>& out) { out = aiMatrix4x4t<TReal>(); out.a1 = v.x; out.b2 = v.y; @@ -673,9 +664,9 @@ inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::Scaling( const aiVector3t<TReal */ // ---------------------------------------------------------------------------------------- template <typename TReal> -inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from, - const aiVector3t<TReal>& to, aiMatrix4x4t<TReal>& mtx) -{ +AI_FORCE_INLINE +aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from, + const aiVector3t<TReal>& to, aiMatrix4x4t<TReal>& mtx) { aiMatrix3x3t<TReal> m3; aiMatrix3x3t<TReal>::FromToMatrix(from,to,m3); mtx = aiMatrix4x4t<TReal>(m3); diff --git a/thirdparty/assimp/include/assimp/mesh.h b/thirdparty/assimp/include/assimp/mesh.h index f1628f1f54..fbf2a857ad 100644 --- a/thirdparty/assimp/include/assimp/mesh.h +++ b/thirdparty/assimp/include/assimp/mesh.h @@ -48,6 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_MESH_H_INC #define AI_MESH_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/types.h> #include <assimp/aabb.h> @@ -248,6 +252,9 @@ struct aiVertexWeight { }; +// Forward declare aiNode (pointer use only) +struct aiNode; + // --------------------------------------------------------------------------- /** @brief A single bone of a mesh. * @@ -264,6 +271,16 @@ struct aiBone { //! The maximum value for this member is #AI_MAX_BONE_WEIGHTS. unsigned int mNumWeights; +#ifndef ASSIMP_BUILD_NO_ARMATUREPOPULATE_PROCESS + // The bone armature node - used for skeleton conversion + // you must enable aiProcess_PopulateArmatureData to populate this + C_STRUCT aiNode* mArmature; + + // The bone node in the scene - used for skeleton conversion + // you must enable aiProcess_PopulateArmatureData to populate this + C_STRUCT aiNode* mNode; + +#endif //! The influence weights of this bone, by vertex index. C_STRUCT aiVertexWeight* mWeights; @@ -418,11 +435,11 @@ struct aiAnimMesh /**Anim Mesh name */ C_STRUCT aiString mName; - /** Replacement for aiMesh::mVertices. If this array is non-NULL, + /** Replacement for aiMesh::mVertices. If this array is non-nullptr, * it *must* contain mNumVertices entries. The corresponding - * array in the host mesh must be non-NULL as well - animation + * array in the host mesh must be non-nullptr as well - animation * meshes may neither add or nor remove vertex components (if - * a replacement array is NULL and the corresponding source + * a replacement array is nullptr and the corresponding source * array is not, the source data is taken instead)*/ C_STRUCT aiVector3D* mVertices; @@ -596,7 +613,7 @@ struct aiMesh C_STRUCT aiVector3D* mVertices; /** Vertex normals. - * The array contains normalized vectors, NULL if not present. + * The array contains normalized vectors, nullptr if not present. * The array is mNumVertices in size. Normals are undefined for * point and line primitives. A mesh consisting of points and * lines only may not have normal vectors. Meshes with mixed @@ -619,7 +636,7 @@ struct aiMesh /** Vertex tangents. * The tangent of a vertex points in the direction of the positive - * X texture axis. The array contains normalized vectors, NULL if + * X texture axis. The array contains normalized vectors, nullptr if * not present. The array is mNumVertices in size. A mesh consisting * of points and lines only may not have normal vectors. Meshes with * mixed primitive types (i.e. lines and triangles) may have @@ -633,7 +650,7 @@ struct aiMesh /** Vertex bitangents. * The bitangent of a vertex points in the direction of the positive - * Y texture axis. The array contains normalized vectors, NULL if not + * Y texture axis. The array contains normalized vectors, nullptr if not * present. The array is mNumVertices in size. * @note If the mesh contains tangents, it automatically also contains * bitangents. @@ -642,14 +659,14 @@ struct aiMesh /** Vertex color sets. * A mesh may contain 0 to #AI_MAX_NUMBER_OF_COLOR_SETS vertex - * colors per vertex. NULL if not present. Each array is + * colors per vertex. nullptr if not present. Each array is * mNumVertices in size if present. */ C_STRUCT aiColor4D* mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; /** Vertex texture coords, also known as UV channels. * A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per - * vertex. NULL if not present. The array is mNumVertices in size. + * vertex. nullptr if not present. The array is mNumVertices in size. */ C_STRUCT aiVector3D* mTextureCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; @@ -671,7 +688,7 @@ struct aiMesh C_STRUCT aiFace* mFaces; /** The number of bones this mesh contains. - * Can be 0, in which case the mBones array is NULL. + * Can be 0, in which case the mBones array is nullptr. */ unsigned int mNumBones; @@ -769,7 +786,10 @@ struct aiMesh // DO NOT REMOVE THIS ADDITIONAL CHECK if (mNumBones && mBones) { for( unsigned int a = 0; a < mNumBones; a++) { - delete mBones[a]; + if(mBones[a]) + { + delete mBones[a]; + } } delete [] mBones; } diff --git a/thirdparty/assimp/include/assimp/metadata.h b/thirdparty/assimp/include/assimp/metadata.h index 3a1dd1442a..849d90f485 100644 --- a/thirdparty/assimp/include/assimp/metadata.h +++ b/thirdparty/assimp/include/assimp/metadata.h @@ -48,6 +48,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_METADATA_H_INC #define AI_METADATA_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #if defined(_MSC_VER) && (_MSC_VER <= 1500) # include "Compiler/pstdint.h" #else diff --git a/thirdparty/assimp/include/assimp/pbrmaterial.h b/thirdparty/assimp/include/assimp/pbrmaterial.h index ce5f822173..892a6347f7 100644 --- a/thirdparty/assimp/include/assimp/pbrmaterial.h +++ b/thirdparty/assimp/include/assimp/pbrmaterial.h @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -44,9 +42,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /** @file pbrmaterial.h * @brief Defines the material system of the library */ +#pragma once #ifndef AI_PBRMATERIAL_H_INC #define AI_PBRMATERIAL_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #define AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_BASE_COLOR_FACTOR "$mat.gltf.pbrMetallicRoughness.baseColorFactor", 0, 0 #define AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_METALLIC_FACTOR "$mat.gltf.pbrMetallicRoughness.metallicFactor", 0, 0 #define AI_MATKEY_GLTF_PBRMETALLICROUGHNESS_ROUGHNESS_FACTOR "$mat.gltf.pbrMetallicRoughness.roughnessFactor", 0, 0 diff --git a/thirdparty/assimp/include/assimp/postprocess.h b/thirdparty/assimp/include/assimp/postprocess.h index 2a74414216..4b6732e80a 100644 --- a/thirdparty/assimp/include/assimp/postprocess.h +++ b/thirdparty/assimp/include/assimp/postprocess.h @@ -47,7 +47,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_POSTPROCESS_H_INC #define AI_POSTPROCESS_H_INC -#include "types.h" +#include <assimp/types.h> + +#ifdef __GNUC__ +# pragma GCC system_header +#endif #ifdef __cplusplus extern "C" { @@ -316,6 +320,19 @@ enum aiPostProcessSteps */ aiProcess_FixInfacingNormals = 0x2000, + + + // ------------------------------------------------------------------------- + /** + * This step generically populates aiBone->mArmature and aiBone->mNode generically + * The point of these is it saves you later having to calculate these elements + * This is useful when handling rest information or skin information + * If you have multiple armatures on your models we strongly recommend enabling this + * Instead of writing your own multi-root, multi-armature lookups we have done the + * hard work for you :) + */ + aiProcess_PopulateArmatureData = 0x4000, + // ------------------------------------------------------------------------- /** <hr>This step splits meshes with more than one primitive type in * homogeneous sub-meshes. @@ -533,6 +550,8 @@ enum aiPostProcessSteps */ aiProcess_Debone = 0x4000000, + + // ------------------------------------------------------------------------- /** <hr>This step will perform a global scale of the model. * diff --git a/thirdparty/assimp/include/assimp/qnan.h b/thirdparty/assimp/include/assimp/qnan.h index 0918bde5e7..06780da5b8 100644 --- a/thirdparty/assimp/include/assimp/qnan.h +++ b/thirdparty/assimp/include/assimp/qnan.h @@ -50,19 +50,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * but last time I checked compiler coverage was so bad that I decided * to reinvent the wheel. */ - +#pragma once #ifndef AI_QNAN_H_INCLUDED #define AI_QNAN_H_INCLUDED +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #include <assimp/defs.h> + #include <limits> #include <stdint.h> // --------------------------------------------------------------------------- /** Data structure to represent the bit pattern of a 32 Bit * IEEE 754 floating-point number. */ -union _IEEESingle -{ +union _IEEESingle { float Float; struct { @@ -75,8 +79,7 @@ union _IEEESingle // --------------------------------------------------------------------------- /** Data structure to represent the bit pattern of a 64 Bit * IEEE 754 floating-point number. */ -union _IEEEDouble -{ +union _IEEEDouble { double Double; struct { @@ -89,8 +92,7 @@ union _IEEEDouble // --------------------------------------------------------------------------- /** Check whether a given float is qNaN. * @param in Input value */ -AI_FORCE_INLINE bool is_qnan(float in) -{ +AI_FORCE_INLINE bool is_qnan(float in) { // the straightforward solution does not work: // return (in != in); // compiler generates code like this @@ -107,8 +109,7 @@ AI_FORCE_INLINE bool is_qnan(float in) // --------------------------------------------------------------------------- /** Check whether a given double is qNaN. * @param in Input value */ -AI_FORCE_INLINE bool is_qnan(double in) -{ +AI_FORCE_INLINE bool is_qnan(double in) { // the straightforward solution does not work: // return (in != in); // compiler generates code like this @@ -127,8 +128,7 @@ AI_FORCE_INLINE bool is_qnan(double in) * * Denorms return false, they're treated like normal values. * @param in Input value */ -AI_FORCE_INLINE bool is_special_float(float in) -{ +AI_FORCE_INLINE bool is_special_float(float in) { _IEEESingle temp; memcpy(&temp, &in, sizeof(float)); return (temp.IEEE.Exp == (1u << 8)-1); @@ -139,8 +139,7 @@ AI_FORCE_INLINE bool is_special_float(float in) * * Denorms return false, they're treated like normal values. * @param in Input value */ -AI_FORCE_INLINE bool is_special_float(double in) -{ +AI_FORCE_INLINE bool is_special_float(double in) { _IEEESingle temp; memcpy(&temp, &in, sizeof(float)); return (temp.IEEE.Exp == (1u << 11)-1); @@ -150,15 +149,13 @@ AI_FORCE_INLINE bool is_special_float(double in) /** Check whether a float is NOT qNaN. * @param in Input value */ template<class TReal> -AI_FORCE_INLINE bool is_not_qnan(TReal in) -{ +AI_FORCE_INLINE bool is_not_qnan(TReal in) { return !is_qnan(in); } // --------------------------------------------------------------------------- /** @brief Get a fresh qnan. */ -AI_FORCE_INLINE ai_real get_qnan() -{ +AI_FORCE_INLINE ai_real get_qnan() { return std::numeric_limits<ai_real>::quiet_NaN(); } diff --git a/thirdparty/assimp/include/assimp/quaternion.h b/thirdparty/assimp/include/assimp/quaternion.h index 96574d24b9..ae45959b41 100644 --- a/thirdparty/assimp/include/assimp/quaternion.h +++ b/thirdparty/assimp/include/assimp/quaternion.h @@ -49,7 +49,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifdef __cplusplus -#include "defs.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/defs.h> template <typename TReal> class aiVector3t; template <typename TReal> class aiMatrix3x3t; diff --git a/thirdparty/assimp/include/assimp/quaternion.inl b/thirdparty/assimp/include/assimp/quaternion.inl index c26648215e..3ce514d1bb 100644 --- a/thirdparty/assimp/include/assimp/quaternion.inl +++ b/thirdparty/assimp/include/assimp/quaternion.inl @@ -48,8 +48,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_QUATERNION_INL_INC #define AI_QUATERNION_INL_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus -#include "quaternion.h" +#include <assimp/quaternion.h> #include <cmath> diff --git a/thirdparty/assimp/include/assimp/scene.h b/thirdparty/assimp/include/assimp/scene.h index 2667db85b3..b76709eb15 100644 --- a/thirdparty/assimp/include/assimp/scene.h +++ b/thirdparty/assimp/include/assimp/scene.h @@ -48,14 +48,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_SCENE_H_INC #define AI_SCENE_H_INC -#include "types.h" -#include "texture.h" -#include "mesh.h" -#include "light.h" -#include "camera.h" -#include "material.h" -#include "anim.h" -#include "metadata.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> +#include <assimp/texture.h> +#include <assimp/mesh.h> +#include <assimp/light.h> +#include <assimp/camera.h> +#include <assimp/material.h> +#include <assimp/anim.h> +#include <assimp/metadata.h> #ifdef __cplusplus # include <cstdlib> @@ -106,13 +110,13 @@ struct ASSIMP_API aiNode /** The transformation relative to the node's parent. */ C_STRUCT aiMatrix4x4 mTransformation; - /** Parent node. NULL if this node is the root node. */ + /** Parent node. nullptr if this node is the root node. */ C_STRUCT aiNode* mParent; /** The number of child nodes of this node. */ unsigned int mNumChildren; - /** The child nodes of this node. NULL if mNumChildren is 0. */ + /** The child nodes of this node. nullptr if mNumChildren is 0. */ C_STRUCT aiNode** mChildren; /** The number of meshes of this node. */ @@ -123,7 +127,7 @@ struct ASSIMP_API aiNode */ unsigned int* mMeshes; - /** Metadata associated with this node or NULL if there is no metadata. + /** Metadata associated with this node or nullptr if there is no metadata. * Whether any metadata is generated depends on the source file format. See the * @link importer_notes @endlink page for more information on every source file * format. Importers that don't document any metadata don't write any. @@ -145,7 +149,7 @@ struct ASSIMP_API aiNode * of the scene. * * @param name Name to search for - * @return NULL or a valid Node if the search was successful. + * @return nullptr or a valid Node if the search was successful. */ inline const aiNode* FindNode(const aiString& name) const { @@ -340,7 +344,7 @@ struct aiScene #ifdef __cplusplus - //! Default constructor - set everything to 0/NULL + //! Default constructor - set everything to 0/nullptr ASSIMP_API aiScene(); //! Destructor @@ -349,33 +353,33 @@ struct aiScene //! Check whether the scene contains meshes //! Unless no special scene flags are set this will always be true. inline bool HasMeshes() const { - return mMeshes != NULL && mNumMeshes > 0; + return mMeshes != nullptr && mNumMeshes > 0; } //! Check whether the scene contains materials //! Unless no special scene flags are set this will always be true. inline bool HasMaterials() const { - return mMaterials != NULL && mNumMaterials > 0; + return mMaterials != nullptr && mNumMaterials > 0; } //! Check whether the scene contains lights inline bool HasLights() const { - return mLights != NULL && mNumLights > 0; + return mLights != nullptr && mNumLights > 0; } //! Check whether the scene contains textures inline bool HasTextures() const { - return mTextures != NULL && mNumTextures > 0; + return mTextures != nullptr && mNumTextures > 0; } //! Check whether the scene contains cameras inline bool HasCameras() const { - return mCameras != NULL && mNumCameras > 0; + return mCameras != nullptr && mNumCameras > 0; } //! Check whether the scene contains animations inline bool HasAnimations() const { - return mAnimations != NULL && mNumAnimations > 0; + return mAnimations != nullptr && mNumAnimations > 0; } //! Returns a short filename from a full path diff --git a/thirdparty/assimp/include/assimp/texture.h b/thirdparty/assimp/include/assimp/texture.h index dc6cbef65c..0867659f46 100644 --- a/thirdparty/assimp/include/assimp/texture.h +++ b/thirdparty/assimp/include/assimp/texture.h @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2019, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -53,13 +51,16 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_TEXTURE_H_INC #define AI_TEXTURE_H_INC -#include "types.h" +#ifdef __GNUC__ +# pragma GCC system_header +#endif + +#include <assimp/types.h> #ifdef __cplusplus extern "C" { #endif - // -------------------------------------------------------------------------------- /** \def AI_EMBEDDED_TEXNAME_PREFIX @@ -79,7 +80,6 @@ extern "C" { # define AI_MAKE_EMBEDDED_TEXNAME(_n_) AI_EMBEDDED_TEXNAME_PREFIX # _n_ #endif - #include "./Compiler/pushpack1.h" // -------------------------------------------------------------------------------- @@ -87,8 +87,7 @@ extern "C" { * * Used by aiTexture. */ -struct aiTexel -{ +struct aiTexel { unsigned char b,g,r,a; #ifdef __cplusplus diff --git a/thirdparty/assimp/include/assimp/types.h b/thirdparty/assimp/include/assimp/types.h index 331b8cd03f..e32cae331c 100644 --- a/thirdparty/assimp/include/assimp/types.h +++ b/thirdparty/assimp/include/assimp/types.h @@ -48,22 +48,30 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_TYPES_H_INC #define AI_TYPES_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + // Some runtime headers #include <sys/types.h> #include <stddef.h> #include <string.h> #include <limits.h> +#include <stdint.h> // Our compile configuration -#include "defs.h" +#include <assimp/defs.h> // Some types moved to separate header due to size of operators -#include "vector3.h" -#include "vector2.h" -#include "color4.h" -#include "matrix3x3.h" -#include "matrix4x4.h" -#include "quaternion.h" +#include <assimp/vector3.h> +#include <assimp/vector2.h> +#include <assimp/color4.h> +#include <assimp/matrix3x3.h> +#include <assimp/matrix4x4.h> +#include <assimp/quaternion.h> + +typedef int32_t ai_int32; +typedef uint32_t ai_uint32 ; #ifdef __cplusplus #include <cstring> @@ -71,7 +79,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string> // for aiString::Set(const std::string&) namespace Assimp { - //! @cond never +//! @cond never namespace Intern { // -------------------------------------------------------------------- /** @brief Internal helper class to utilize our internal new/delete @@ -269,8 +277,8 @@ struct aiString } /** Copy constructor */ - aiString(const aiString& rOther) : - length(rOther.length) + aiString(const aiString& rOther) + : length(rOther.length) { // Crop the string to the maximum length length = length>=MAXLEN?MAXLEN-1:length; @@ -280,7 +288,7 @@ struct aiString /** Constructor from std::string */ explicit aiString(const std::string& pString) : - length(pString.length()) + length( (ai_uint32) pString.length()) { length = length>=MAXLEN?MAXLEN-1:length; memcpy( data, pString.c_str(), length); @@ -292,15 +300,15 @@ struct aiString if( pString.length() > MAXLEN - 1) { return; } - length = pString.length(); + length = (ai_uint32)pString.length(); memcpy( data, pString.c_str(), length); data[length] = 0; } /** Copy a const char* to the aiString */ void Set( const char* sz) { - const size_t len = ::strlen(sz); - if( len > MAXLEN - 1) { + const ai_int32 len = (ai_uint32) ::strlen(sz); + if( len > (ai_int32)MAXLEN - 1) { return; } length = len; @@ -346,7 +354,7 @@ struct aiString /** Append a string to the string */ void Append (const char* app) { - const size_t len = ::strlen(app); + const ai_uint32 len = (ai_uint32) ::strlen(app); if (!len) { return; } @@ -379,7 +387,7 @@ struct aiString /** Binary length of the string excluding the terminal 0. This is NOT the * logical length of strings containing UTF-8 multi-byte sequences! It's * the number of bytes from the beginning of the string to its end.*/ - size_t length; + ai_uint32 length; /** String buffer. Size limit is MAXLEN */ char data[MAXLEN]; diff --git a/thirdparty/assimp/include/assimp/vector2.h b/thirdparty/assimp/include/assimp/vector2.h index d5ef001542..c8b1ebbbc2 100644 --- a/thirdparty/assimp/include/assimp/vector2.h +++ b/thirdparty/assimp/include/assimp/vector2.h @@ -47,6 +47,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_VECTOR2D_H_INC #define AI_VECTOR2D_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus # include <cmath> #else diff --git a/thirdparty/assimp/include/assimp/vector2.inl b/thirdparty/assimp/include/assimp/vector2.inl index 3b7a7beabb..4bbf432ff8 100644 --- a/thirdparty/assimp/include/assimp/vector2.inl +++ b/thirdparty/assimp/include/assimp/vector2.inl @@ -48,8 +48,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_VECTOR2D_INL_INC #define AI_VECTOR2D_INL_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus -#include "vector2.h" +#include <assimp/vector2.h> #include <cmath> diff --git a/thirdparty/assimp/include/assimp/vector3.h b/thirdparty/assimp/include/assimp/vector3.h index 7ff25cf0ad..fffeb12ad7 100644 --- a/thirdparty/assimp/include/assimp/vector3.h +++ b/thirdparty/assimp/include/assimp/vector3.h @@ -47,13 +47,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_VECTOR3D_H_INC #define AI_VECTOR3D_H_INC +#ifdef __GNUC__ +# pragma GCC system_header +#endif + #ifdef __cplusplus # include <cmath> #else # include <math.h> #endif -#include "defs.h" +#include <assimp/defs.h> #ifdef __cplusplus @@ -63,16 +67,13 @@ template<typename TReal> class aiMatrix4x4t; // --------------------------------------------------------------------------- /** Represents a three-dimensional vector. */ template <typename TReal> -class aiVector3t -{ +class aiVector3t { public: aiVector3t() AI_NO_EXCEPT : x(), y(), z() {} aiVector3t(TReal _x, TReal _y, TReal _z) : x(_x), y(_y), z(_z) {} explicit aiVector3t (TReal _xyz ) : x(_xyz), y(_xyz), z(_xyz) {} aiVector3t( const aiVector3t& o ) = default; -public: - // combined operators const aiVector3t& operator += (const aiVector3t& o); const aiVector3t& operator -= (const aiVector3t& o); @@ -97,7 +98,6 @@ public: template <typename TOther> operator aiVector3t<TOther> () const; -public: /** @brief Set the components of a vector * @param pX X component * @param pY Y component diff --git a/thirdparty/assimp/include/assimp/vector3.inl b/thirdparty/assimp/include/assimp/vector3.inl index 2fce6eddee..6682d3b32c 100644 --- a/thirdparty/assimp/include/assimp/vector3.inl +++ b/thirdparty/assimp/include/assimp/vector3.inl @@ -49,7 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define AI_VECTOR3D_INL_INC #ifdef __cplusplus -#include "vector3.h" +#include <assimp/vector3.h> #include <cmath> diff --git a/thirdparty/assimp/include/assimp/version.h b/thirdparty/assimp/include/assimp/version.h index c62a40e118..2fdd37a43c 100644 --- a/thirdparty/assimp/include/assimp/version.h +++ b/thirdparty/assimp/include/assimp/version.h @@ -49,7 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_VERSION_H_INC #define AI_VERSION_H_INC -#include "defs.h" +#include <assimp/defs.h> #ifdef __cplusplus extern "C" { diff --git a/thirdparty/libogg/bitwise.c b/thirdparty/libogg/bitwise.c index fa2b572029..f5ef79122e 100644 --- a/thirdparty/libogg/bitwise.c +++ b/thirdparty/libogg/bitwise.c @@ -11,7 +11,6 @@ ******************************************************************** function: packing variable sized words into an octet stream - last mod: $Id$ ********************************************************************/ @@ -890,7 +889,7 @@ int main(void){ for(i=0;i<test2size;i++){ if(oggpack_look(&r,32)==-1)report("out of data. failed!"); if(oggpack_look(&r,32)!=large[i]){ - fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpack_look(&r,32),large[i], + fprintf(stderr,"%ld != %lu (%lx!=%lx):",oggpack_look(&r,32),large[i], oggpack_look(&r,32),large[i]); report("read incorrect value!\n"); } @@ -1000,7 +999,7 @@ int main(void){ for(i=0;i<test2size;i++){ if(oggpackB_look(&r,32)==-1)report("out of data. failed!"); if(oggpackB_look(&r,32)!=large[i]){ - fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpackB_look(&r,32),large[i], + fprintf(stderr,"%ld != %lu (%lx!=%lx):",oggpackB_look(&r,32),large[i], oggpackB_look(&r,32),large[i]); report("read incorrect value!\n"); } diff --git a/thirdparty/libogg/crctable.h b/thirdparty/libogg/crctable.h new file mode 100644 index 0000000000..dcc378b309 --- /dev/null +++ b/thirdparty/libogg/crctable.h @@ -0,0 +1,278 @@ +/******************************************************************** + * * + * THIS FILE IS PART OF THE Ogg CONTAINER SOURCE CODE. * + * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * + * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * + * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * + * * + * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2018 * + * by the Xiph.Org Foundation http://www.xiph.org/ * + * * + ********************************************************************/ + +#include <ogg/os_types.h> + +static const ogg_uint32_t crc_lookup[8][256]={ +{0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005, + 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd, + 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75, + 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd, + 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5, + 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d, + 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95, + 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d, + 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072, + 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca, + 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02, + 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba, + 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692, + 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a, + 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2, + 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a, + 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb, + 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53, + 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b, + 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623, + 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b, + 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3, + 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b, + 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3, + 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c, + 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,0x68860bfd,0x6c47164a,0x61043093,0x65c52d24, + 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec, + 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654, + 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c, + 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4, + 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c, + 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4}, + +{0x00000000,0xd219c1dc,0xa0f29e0f,0x72eb5fd3,0x452421a9,0x973de075,0xe5d6bfa6,0x37cf7e7a, + 0x8a484352,0x5851828e,0x2abadd5d,0xf8a31c81,0xcf6c62fb,0x1d75a327,0x6f9efcf4,0xbd873d28, + 0x10519b13,0xc2485acf,0xb0a3051c,0x62bac4c0,0x5575baba,0x876c7b66,0xf58724b5,0x279ee569, + 0x9a19d841,0x4800199d,0x3aeb464e,0xe8f28792,0xdf3df9e8,0x0d243834,0x7fcf67e7,0xadd6a63b, + 0x20a33626,0xf2baf7fa,0x8051a829,0x524869f5,0x6587178f,0xb79ed653,0xc5758980,0x176c485c, + 0xaaeb7574,0x78f2b4a8,0x0a19eb7b,0xd8002aa7,0xefcf54dd,0x3dd69501,0x4f3dcad2,0x9d240b0e, + 0x30f2ad35,0xe2eb6ce9,0x9000333a,0x4219f2e6,0x75d68c9c,0xa7cf4d40,0xd5241293,0x073dd34f, + 0xbabaee67,0x68a32fbb,0x1a487068,0xc851b1b4,0xff9ecfce,0x2d870e12,0x5f6c51c1,0x8d75901d, + 0x41466c4c,0x935fad90,0xe1b4f243,0x33ad339f,0x04624de5,0xd67b8c39,0xa490d3ea,0x76891236, + 0xcb0e2f1e,0x1917eec2,0x6bfcb111,0xb9e570cd,0x8e2a0eb7,0x5c33cf6b,0x2ed890b8,0xfcc15164, + 0x5117f75f,0x830e3683,0xf1e56950,0x23fca88c,0x1433d6f6,0xc62a172a,0xb4c148f9,0x66d88925, + 0xdb5fb40d,0x094675d1,0x7bad2a02,0xa9b4ebde,0x9e7b95a4,0x4c625478,0x3e890bab,0xec90ca77, + 0x61e55a6a,0xb3fc9bb6,0xc117c465,0x130e05b9,0x24c17bc3,0xf6d8ba1f,0x8433e5cc,0x562a2410, + 0xebad1938,0x39b4d8e4,0x4b5f8737,0x994646eb,0xae893891,0x7c90f94d,0x0e7ba69e,0xdc626742, + 0x71b4c179,0xa3ad00a5,0xd1465f76,0x035f9eaa,0x3490e0d0,0xe689210c,0x94627edf,0x467bbf03, + 0xfbfc822b,0x29e543f7,0x5b0e1c24,0x8917ddf8,0xbed8a382,0x6cc1625e,0x1e2a3d8d,0xcc33fc51, + 0x828cd898,0x50951944,0x227e4697,0xf067874b,0xc7a8f931,0x15b138ed,0x675a673e,0xb543a6e2, + 0x08c49bca,0xdadd5a16,0xa83605c5,0x7a2fc419,0x4de0ba63,0x9ff97bbf,0xed12246c,0x3f0be5b0, + 0x92dd438b,0x40c48257,0x322fdd84,0xe0361c58,0xd7f96222,0x05e0a3fe,0x770bfc2d,0xa5123df1, + 0x189500d9,0xca8cc105,0xb8679ed6,0x6a7e5f0a,0x5db12170,0x8fa8e0ac,0xfd43bf7f,0x2f5a7ea3, + 0xa22feebe,0x70362f62,0x02dd70b1,0xd0c4b16d,0xe70bcf17,0x35120ecb,0x47f95118,0x95e090c4, + 0x2867adec,0xfa7e6c30,0x889533e3,0x5a8cf23f,0x6d438c45,0xbf5a4d99,0xcdb1124a,0x1fa8d396, + 0xb27e75ad,0x6067b471,0x128ceba2,0xc0952a7e,0xf75a5404,0x254395d8,0x57a8ca0b,0x85b10bd7, + 0x383636ff,0xea2ff723,0x98c4a8f0,0x4add692c,0x7d121756,0xaf0bd68a,0xdde08959,0x0ff94885, + 0xc3cab4d4,0x11d37508,0x63382adb,0xb121eb07,0x86ee957d,0x54f754a1,0x261c0b72,0xf405caae, + 0x4982f786,0x9b9b365a,0xe9706989,0x3b69a855,0x0ca6d62f,0xdebf17f3,0xac544820,0x7e4d89fc, + 0xd39b2fc7,0x0182ee1b,0x7369b1c8,0xa1707014,0x96bf0e6e,0x44a6cfb2,0x364d9061,0xe45451bd, + 0x59d36c95,0x8bcaad49,0xf921f29a,0x2b383346,0x1cf74d3c,0xceee8ce0,0xbc05d333,0x6e1c12ef, + 0xe36982f2,0x3170432e,0x439b1cfd,0x9182dd21,0xa64da35b,0x74546287,0x06bf3d54,0xd4a6fc88, + 0x6921c1a0,0xbb38007c,0xc9d35faf,0x1bca9e73,0x2c05e009,0xfe1c21d5,0x8cf77e06,0x5eeebfda, + 0xf33819e1,0x2121d83d,0x53ca87ee,0x81d34632,0xb61c3848,0x6405f994,0x16eea647,0xc4f7679b, + 0x79705ab3,0xab699b6f,0xd982c4bc,0x0b9b0560,0x3c547b1a,0xee4dbac6,0x9ca6e515,0x4ebf24c9}, + +{0x00000000,0x01d8ac87,0x03b1590e,0x0269f589,0x0762b21c,0x06ba1e9b,0x04d3eb12,0x050b4795, + 0x0ec56438,0x0f1dc8bf,0x0d743d36,0x0cac91b1,0x09a7d624,0x087f7aa3,0x0a168f2a,0x0bce23ad, + 0x1d8ac870,0x1c5264f7,0x1e3b917e,0x1fe33df9,0x1ae87a6c,0x1b30d6eb,0x19592362,0x18818fe5, + 0x134fac48,0x129700cf,0x10fef546,0x112659c1,0x142d1e54,0x15f5b2d3,0x179c475a,0x1644ebdd, + 0x3b1590e0,0x3acd3c67,0x38a4c9ee,0x397c6569,0x3c7722fc,0x3daf8e7b,0x3fc67bf2,0x3e1ed775, + 0x35d0f4d8,0x3408585f,0x3661add6,0x37b90151,0x32b246c4,0x336aea43,0x31031fca,0x30dbb34d, + 0x269f5890,0x2747f417,0x252e019e,0x24f6ad19,0x21fdea8c,0x2025460b,0x224cb382,0x23941f05, + 0x285a3ca8,0x2982902f,0x2beb65a6,0x2a33c921,0x2f388eb4,0x2ee02233,0x2c89d7ba,0x2d517b3d, + 0x762b21c0,0x77f38d47,0x759a78ce,0x7442d449,0x714993dc,0x70913f5b,0x72f8cad2,0x73206655, + 0x78ee45f8,0x7936e97f,0x7b5f1cf6,0x7a87b071,0x7f8cf7e4,0x7e545b63,0x7c3daeea,0x7de5026d, + 0x6ba1e9b0,0x6a794537,0x6810b0be,0x69c81c39,0x6cc35bac,0x6d1bf72b,0x6f7202a2,0x6eaaae25, + 0x65648d88,0x64bc210f,0x66d5d486,0x670d7801,0x62063f94,0x63de9313,0x61b7669a,0x606fca1d, + 0x4d3eb120,0x4ce61da7,0x4e8fe82e,0x4f5744a9,0x4a5c033c,0x4b84afbb,0x49ed5a32,0x4835f6b5, + 0x43fbd518,0x4223799f,0x404a8c16,0x41922091,0x44996704,0x4541cb83,0x47283e0a,0x46f0928d, + 0x50b47950,0x516cd5d7,0x5305205e,0x52dd8cd9,0x57d6cb4c,0x560e67cb,0x54679242,0x55bf3ec5, + 0x5e711d68,0x5fa9b1ef,0x5dc04466,0x5c18e8e1,0x5913af74,0x58cb03f3,0x5aa2f67a,0x5b7a5afd, + 0xec564380,0xed8eef07,0xefe71a8e,0xee3fb609,0xeb34f19c,0xeaec5d1b,0xe885a892,0xe95d0415, + 0xe29327b8,0xe34b8b3f,0xe1227eb6,0xe0fad231,0xe5f195a4,0xe4293923,0xe640ccaa,0xe798602d, + 0xf1dc8bf0,0xf0042777,0xf26dd2fe,0xf3b57e79,0xf6be39ec,0xf766956b,0xf50f60e2,0xf4d7cc65, + 0xff19efc8,0xfec1434f,0xfca8b6c6,0xfd701a41,0xf87b5dd4,0xf9a3f153,0xfbca04da,0xfa12a85d, + 0xd743d360,0xd69b7fe7,0xd4f28a6e,0xd52a26e9,0xd021617c,0xd1f9cdfb,0xd3903872,0xd24894f5, + 0xd986b758,0xd85e1bdf,0xda37ee56,0xdbef42d1,0xdee40544,0xdf3ca9c3,0xdd555c4a,0xdc8df0cd, + 0xcac91b10,0xcb11b797,0xc978421e,0xc8a0ee99,0xcdaba90c,0xcc73058b,0xce1af002,0xcfc25c85, + 0xc40c7f28,0xc5d4d3af,0xc7bd2626,0xc6658aa1,0xc36ecd34,0xc2b661b3,0xc0df943a,0xc10738bd, + 0x9a7d6240,0x9ba5cec7,0x99cc3b4e,0x981497c9,0x9d1fd05c,0x9cc77cdb,0x9eae8952,0x9f7625d5, + 0x94b80678,0x9560aaff,0x97095f76,0x96d1f3f1,0x93dab464,0x920218e3,0x906bed6a,0x91b341ed, + 0x87f7aa30,0x862f06b7,0x8446f33e,0x859e5fb9,0x8095182c,0x814db4ab,0x83244122,0x82fceda5, + 0x8932ce08,0x88ea628f,0x8a839706,0x8b5b3b81,0x8e507c14,0x8f88d093,0x8de1251a,0x8c39899d, + 0xa168f2a0,0xa0b05e27,0xa2d9abae,0xa3010729,0xa60a40bc,0xa7d2ec3b,0xa5bb19b2,0xa463b535, + 0xafad9698,0xae753a1f,0xac1ccf96,0xadc46311,0xa8cf2484,0xa9178803,0xab7e7d8a,0xaaa6d10d, + 0xbce23ad0,0xbd3a9657,0xbf5363de,0xbe8bcf59,0xbb8088cc,0xba58244b,0xb831d1c2,0xb9e97d45, + 0xb2275ee8,0xb3fff26f,0xb19607e6,0xb04eab61,0xb545ecf4,0xb49d4073,0xb6f4b5fa,0xb72c197d}, + +{0x00000000,0xdc6d9ab7,0xbc1a28d9,0x6077b26e,0x7cf54c05,0xa098d6b2,0xc0ef64dc,0x1c82fe6b, + 0xf9ea980a,0x258702bd,0x45f0b0d3,0x999d2a64,0x851fd40f,0x59724eb8,0x3905fcd6,0xe5686661, + 0xf7142da3,0x2b79b714,0x4b0e057a,0x97639fcd,0x8be161a6,0x578cfb11,0x37fb497f,0xeb96d3c8, + 0x0efeb5a9,0xd2932f1e,0xb2e49d70,0x6e8907c7,0x720bf9ac,0xae66631b,0xce11d175,0x127c4bc2, + 0xeae946f1,0x3684dc46,0x56f36e28,0x8a9ef49f,0x961c0af4,0x4a719043,0x2a06222d,0xf66bb89a, + 0x1303defb,0xcf6e444c,0xaf19f622,0x73746c95,0x6ff692fe,0xb39b0849,0xd3ecba27,0x0f812090, + 0x1dfd6b52,0xc190f1e5,0xa1e7438b,0x7d8ad93c,0x61082757,0xbd65bde0,0xdd120f8e,0x017f9539, + 0xe417f358,0x387a69ef,0x580ddb81,0x84604136,0x98e2bf5d,0x448f25ea,0x24f89784,0xf8950d33, + 0xd1139055,0x0d7e0ae2,0x6d09b88c,0xb164223b,0xade6dc50,0x718b46e7,0x11fcf489,0xcd916e3e, + 0x28f9085f,0xf49492e8,0x94e32086,0x488eba31,0x540c445a,0x8861deed,0xe8166c83,0x347bf634, + 0x2607bdf6,0xfa6a2741,0x9a1d952f,0x46700f98,0x5af2f1f3,0x869f6b44,0xe6e8d92a,0x3a85439d, + 0xdfed25fc,0x0380bf4b,0x63f70d25,0xbf9a9792,0xa31869f9,0x7f75f34e,0x1f024120,0xc36fdb97, + 0x3bfad6a4,0xe7974c13,0x87e0fe7d,0x5b8d64ca,0x470f9aa1,0x9b620016,0xfb15b278,0x277828cf, + 0xc2104eae,0x1e7dd419,0x7e0a6677,0xa267fcc0,0xbee502ab,0x6288981c,0x02ff2a72,0xde92b0c5, + 0xcceefb07,0x108361b0,0x70f4d3de,0xac994969,0xb01bb702,0x6c762db5,0x0c019fdb,0xd06c056c, + 0x3504630d,0xe969f9ba,0x891e4bd4,0x5573d163,0x49f12f08,0x959cb5bf,0xf5eb07d1,0x29869d66, + 0xa6e63d1d,0x7a8ba7aa,0x1afc15c4,0xc6918f73,0xda137118,0x067eebaf,0x660959c1,0xba64c376, + 0x5f0ca517,0x83613fa0,0xe3168dce,0x3f7b1779,0x23f9e912,0xff9473a5,0x9fe3c1cb,0x438e5b7c, + 0x51f210be,0x8d9f8a09,0xede83867,0x3185a2d0,0x2d075cbb,0xf16ac60c,0x911d7462,0x4d70eed5, + 0xa81888b4,0x74751203,0x1402a06d,0xc86f3ada,0xd4edc4b1,0x08805e06,0x68f7ec68,0xb49a76df, + 0x4c0f7bec,0x9062e15b,0xf0155335,0x2c78c982,0x30fa37e9,0xec97ad5e,0x8ce01f30,0x508d8587, + 0xb5e5e3e6,0x69887951,0x09ffcb3f,0xd5925188,0xc910afe3,0x157d3554,0x750a873a,0xa9671d8d, + 0xbb1b564f,0x6776ccf8,0x07017e96,0xdb6ce421,0xc7ee1a4a,0x1b8380fd,0x7bf43293,0xa799a824, + 0x42f1ce45,0x9e9c54f2,0xfeebe69c,0x22867c2b,0x3e048240,0xe26918f7,0x821eaa99,0x5e73302e, + 0x77f5ad48,0xab9837ff,0xcbef8591,0x17821f26,0x0b00e14d,0xd76d7bfa,0xb71ac994,0x6b775323, + 0x8e1f3542,0x5272aff5,0x32051d9b,0xee68872c,0xf2ea7947,0x2e87e3f0,0x4ef0519e,0x929dcb29, + 0x80e180eb,0x5c8c1a5c,0x3cfba832,0xe0963285,0xfc14ccee,0x20795659,0x400ee437,0x9c637e80, + 0x790b18e1,0xa5668256,0xc5113038,0x197caa8f,0x05fe54e4,0xd993ce53,0xb9e47c3d,0x6589e68a, + 0x9d1cebb9,0x4171710e,0x2106c360,0xfd6b59d7,0xe1e9a7bc,0x3d843d0b,0x5df38f65,0x819e15d2, + 0x64f673b3,0xb89be904,0xd8ec5b6a,0x0481c1dd,0x18033fb6,0xc46ea501,0xa419176f,0x78748dd8, + 0x6a08c61a,0xb6655cad,0xd612eec3,0x0a7f7474,0x16fd8a1f,0xca9010a8,0xaae7a2c6,0x768a3871, + 0x93e25e10,0x4f8fc4a7,0x2ff876c9,0xf395ec7e,0xef171215,0x337a88a2,0x530d3acc,0x8f60a07b}, + +{0x00000000,0x490d678d,0x921acf1a,0xdb17a897,0x20f48383,0x69f9e40e,0xb2ee4c99,0xfbe32b14, + 0x41e90706,0x08e4608b,0xd3f3c81c,0x9afeaf91,0x611d8485,0x2810e308,0xf3074b9f,0xba0a2c12, + 0x83d20e0c,0xcadf6981,0x11c8c116,0x58c5a69b,0xa3268d8f,0xea2bea02,0x313c4295,0x78312518, + 0xc23b090a,0x8b366e87,0x5021c610,0x192ca19d,0xe2cf8a89,0xabc2ed04,0x70d54593,0x39d8221e, + 0x036501af,0x4a686622,0x917fceb5,0xd872a938,0x2391822c,0x6a9ce5a1,0xb18b4d36,0xf8862abb, + 0x428c06a9,0x0b816124,0xd096c9b3,0x999bae3e,0x6278852a,0x2b75e2a7,0xf0624a30,0xb96f2dbd, + 0x80b70fa3,0xc9ba682e,0x12adc0b9,0x5ba0a734,0xa0438c20,0xe94eebad,0x3259433a,0x7b5424b7, + 0xc15e08a5,0x88536f28,0x5344c7bf,0x1a49a032,0xe1aa8b26,0xa8a7ecab,0x73b0443c,0x3abd23b1, + 0x06ca035e,0x4fc764d3,0x94d0cc44,0xddddabc9,0x263e80dd,0x6f33e750,0xb4244fc7,0xfd29284a, + 0x47230458,0x0e2e63d5,0xd539cb42,0x9c34accf,0x67d787db,0x2edae056,0xf5cd48c1,0xbcc02f4c, + 0x85180d52,0xcc156adf,0x1702c248,0x5e0fa5c5,0xa5ec8ed1,0xece1e95c,0x37f641cb,0x7efb2646, + 0xc4f10a54,0x8dfc6dd9,0x56ebc54e,0x1fe6a2c3,0xe40589d7,0xad08ee5a,0x761f46cd,0x3f122140, + 0x05af02f1,0x4ca2657c,0x97b5cdeb,0xdeb8aa66,0x255b8172,0x6c56e6ff,0xb7414e68,0xfe4c29e5, + 0x444605f7,0x0d4b627a,0xd65ccaed,0x9f51ad60,0x64b28674,0x2dbfe1f9,0xf6a8496e,0xbfa52ee3, + 0x867d0cfd,0xcf706b70,0x1467c3e7,0x5d6aa46a,0xa6898f7e,0xef84e8f3,0x34934064,0x7d9e27e9, + 0xc7940bfb,0x8e996c76,0x558ec4e1,0x1c83a36c,0xe7608878,0xae6deff5,0x757a4762,0x3c7720ef, + 0x0d9406bc,0x44996131,0x9f8ec9a6,0xd683ae2b,0x2d60853f,0x646de2b2,0xbf7a4a25,0xf6772da8, + 0x4c7d01ba,0x05706637,0xde67cea0,0x976aa92d,0x6c898239,0x2584e5b4,0xfe934d23,0xb79e2aae, + 0x8e4608b0,0xc74b6f3d,0x1c5cc7aa,0x5551a027,0xaeb28b33,0xe7bfecbe,0x3ca84429,0x75a523a4, + 0xcfaf0fb6,0x86a2683b,0x5db5c0ac,0x14b8a721,0xef5b8c35,0xa656ebb8,0x7d41432f,0x344c24a2, + 0x0ef10713,0x47fc609e,0x9cebc809,0xd5e6af84,0x2e058490,0x6708e31d,0xbc1f4b8a,0xf5122c07, + 0x4f180015,0x06156798,0xdd02cf0f,0x940fa882,0x6fec8396,0x26e1e41b,0xfdf64c8c,0xb4fb2b01, + 0x8d23091f,0xc42e6e92,0x1f39c605,0x5634a188,0xadd78a9c,0xe4daed11,0x3fcd4586,0x76c0220b, + 0xccca0e19,0x85c76994,0x5ed0c103,0x17dda68e,0xec3e8d9a,0xa533ea17,0x7e244280,0x3729250d, + 0x0b5e05e2,0x4253626f,0x9944caf8,0xd049ad75,0x2baa8661,0x62a7e1ec,0xb9b0497b,0xf0bd2ef6, + 0x4ab702e4,0x03ba6569,0xd8adcdfe,0x91a0aa73,0x6a438167,0x234ee6ea,0xf8594e7d,0xb15429f0, + 0x888c0bee,0xc1816c63,0x1a96c4f4,0x539ba379,0xa878886d,0xe175efe0,0x3a624777,0x736f20fa, + 0xc9650ce8,0x80686b65,0x5b7fc3f2,0x1272a47f,0xe9918f6b,0xa09ce8e6,0x7b8b4071,0x328627fc, + 0x083b044d,0x413663c0,0x9a21cb57,0xd32cacda,0x28cf87ce,0x61c2e043,0xbad548d4,0xf3d82f59, + 0x49d2034b,0x00df64c6,0xdbc8cc51,0x92c5abdc,0x692680c8,0x202be745,0xfb3c4fd2,0xb231285f, + 0x8be90a41,0xc2e46dcc,0x19f3c55b,0x50fea2d6,0xab1d89c2,0xe210ee4f,0x390746d8,0x700a2155, + 0xca000d47,0x830d6aca,0x581ac25d,0x1117a5d0,0xeaf48ec4,0xa3f9e949,0x78ee41de,0x31e32653}, + +{0x00000000,0x1b280d78,0x36501af0,0x2d781788,0x6ca035e0,0x77883898,0x5af02f10,0x41d82268, + 0xd9406bc0,0xc26866b8,0xef107130,0xf4387c48,0xb5e05e20,0xaec85358,0x83b044d0,0x989849a8, + 0xb641ca37,0xad69c74f,0x8011d0c7,0x9b39ddbf,0xdae1ffd7,0xc1c9f2af,0xecb1e527,0xf799e85f, + 0x6f01a1f7,0x7429ac8f,0x5951bb07,0x4279b67f,0x03a19417,0x1889996f,0x35f18ee7,0x2ed9839f, + 0x684289d9,0x736a84a1,0x5e129329,0x453a9e51,0x04e2bc39,0x1fcab141,0x32b2a6c9,0x299aabb1, + 0xb102e219,0xaa2aef61,0x8752f8e9,0x9c7af591,0xdda2d7f9,0xc68ada81,0xebf2cd09,0xf0dac071, + 0xde0343ee,0xc52b4e96,0xe853591e,0xf37b5466,0xb2a3760e,0xa98b7b76,0x84f36cfe,0x9fdb6186, + 0x0743282e,0x1c6b2556,0x311332de,0x2a3b3fa6,0x6be31dce,0x70cb10b6,0x5db3073e,0x469b0a46, + 0xd08513b2,0xcbad1eca,0xe6d50942,0xfdfd043a,0xbc252652,0xa70d2b2a,0x8a753ca2,0x915d31da, + 0x09c57872,0x12ed750a,0x3f956282,0x24bd6ffa,0x65654d92,0x7e4d40ea,0x53355762,0x481d5a1a, + 0x66c4d985,0x7decd4fd,0x5094c375,0x4bbcce0d,0x0a64ec65,0x114ce11d,0x3c34f695,0x271cfbed, + 0xbf84b245,0xa4acbf3d,0x89d4a8b5,0x92fca5cd,0xd32487a5,0xc80c8add,0xe5749d55,0xfe5c902d, + 0xb8c79a6b,0xa3ef9713,0x8e97809b,0x95bf8de3,0xd467af8b,0xcf4fa2f3,0xe237b57b,0xf91fb803, + 0x6187f1ab,0x7aaffcd3,0x57d7eb5b,0x4cffe623,0x0d27c44b,0x160fc933,0x3b77debb,0x205fd3c3, + 0x0e86505c,0x15ae5d24,0x38d64aac,0x23fe47d4,0x622665bc,0x790e68c4,0x54767f4c,0x4f5e7234, + 0xd7c63b9c,0xccee36e4,0xe196216c,0xfabe2c14,0xbb660e7c,0xa04e0304,0x8d36148c,0x961e19f4, + 0xa5cb3ad3,0xbee337ab,0x939b2023,0x88b32d5b,0xc96b0f33,0xd243024b,0xff3b15c3,0xe41318bb, + 0x7c8b5113,0x67a35c6b,0x4adb4be3,0x51f3469b,0x102b64f3,0x0b03698b,0x267b7e03,0x3d53737b, + 0x138af0e4,0x08a2fd9c,0x25daea14,0x3ef2e76c,0x7f2ac504,0x6402c87c,0x497adff4,0x5252d28c, + 0xcaca9b24,0xd1e2965c,0xfc9a81d4,0xe7b28cac,0xa66aaec4,0xbd42a3bc,0x903ab434,0x8b12b94c, + 0xcd89b30a,0xd6a1be72,0xfbd9a9fa,0xe0f1a482,0xa12986ea,0xba018b92,0x97799c1a,0x8c519162, + 0x14c9d8ca,0x0fe1d5b2,0x2299c23a,0x39b1cf42,0x7869ed2a,0x6341e052,0x4e39f7da,0x5511faa2, + 0x7bc8793d,0x60e07445,0x4d9863cd,0x56b06eb5,0x17684cdd,0x0c4041a5,0x2138562d,0x3a105b55, + 0xa28812fd,0xb9a01f85,0x94d8080d,0x8ff00575,0xce28271d,0xd5002a65,0xf8783ded,0xe3503095, + 0x754e2961,0x6e662419,0x431e3391,0x58363ee9,0x19ee1c81,0x02c611f9,0x2fbe0671,0x34960b09, + 0xac0e42a1,0xb7264fd9,0x9a5e5851,0x81765529,0xc0ae7741,0xdb867a39,0xf6fe6db1,0xedd660c9, + 0xc30fe356,0xd827ee2e,0xf55ff9a6,0xee77f4de,0xafafd6b6,0xb487dbce,0x99ffcc46,0x82d7c13e, + 0x1a4f8896,0x016785ee,0x2c1f9266,0x37379f1e,0x76efbd76,0x6dc7b00e,0x40bfa786,0x5b97aafe, + 0x1d0ca0b8,0x0624adc0,0x2b5cba48,0x3074b730,0x71ac9558,0x6a849820,0x47fc8fa8,0x5cd482d0, + 0xc44ccb78,0xdf64c600,0xf21cd188,0xe934dcf0,0xa8ecfe98,0xb3c4f3e0,0x9ebce468,0x8594e910, + 0xab4d6a8f,0xb06567f7,0x9d1d707f,0x86357d07,0xc7ed5f6f,0xdcc55217,0xf1bd459f,0xea9548e7, + 0x720d014f,0x69250c37,0x445d1bbf,0x5f7516c7,0x1ead34af,0x058539d7,0x28fd2e5f,0x33d52327}, + +{0x00000000,0x4f576811,0x9eaed022,0xd1f9b833,0x399cbdf3,0x76cbd5e2,0xa7326dd1,0xe86505c0, + 0x73397be6,0x3c6e13f7,0xed97abc4,0xa2c0c3d5,0x4aa5c615,0x05f2ae04,0xd40b1637,0x9b5c7e26, + 0xe672f7cc,0xa9259fdd,0x78dc27ee,0x378b4fff,0xdfee4a3f,0x90b9222e,0x41409a1d,0x0e17f20c, + 0x954b8c2a,0xda1ce43b,0x0be55c08,0x44b23419,0xacd731d9,0xe38059c8,0x3279e1fb,0x7d2e89ea, + 0xc824f22f,0x87739a3e,0x568a220d,0x19dd4a1c,0xf1b84fdc,0xbeef27cd,0x6f169ffe,0x2041f7ef, + 0xbb1d89c9,0xf44ae1d8,0x25b359eb,0x6ae431fa,0x8281343a,0xcdd65c2b,0x1c2fe418,0x53788c09, + 0x2e5605e3,0x61016df2,0xb0f8d5c1,0xffafbdd0,0x17cab810,0x589dd001,0x89646832,0xc6330023, + 0x5d6f7e05,0x12381614,0xc3c1ae27,0x8c96c636,0x64f3c3f6,0x2ba4abe7,0xfa5d13d4,0xb50a7bc5, + 0x9488f9e9,0xdbdf91f8,0x0a2629cb,0x457141da,0xad14441a,0xe2432c0b,0x33ba9438,0x7cedfc29, + 0xe7b1820f,0xa8e6ea1e,0x791f522d,0x36483a3c,0xde2d3ffc,0x917a57ed,0x4083efde,0x0fd487cf, + 0x72fa0e25,0x3dad6634,0xec54de07,0xa303b616,0x4b66b3d6,0x0431dbc7,0xd5c863f4,0x9a9f0be5, + 0x01c375c3,0x4e941dd2,0x9f6da5e1,0xd03acdf0,0x385fc830,0x7708a021,0xa6f11812,0xe9a67003, + 0x5cac0bc6,0x13fb63d7,0xc202dbe4,0x8d55b3f5,0x6530b635,0x2a67de24,0xfb9e6617,0xb4c90e06, + 0x2f957020,0x60c21831,0xb13ba002,0xfe6cc813,0x1609cdd3,0x595ea5c2,0x88a71df1,0xc7f075e0, + 0xbadefc0a,0xf589941b,0x24702c28,0x6b274439,0x834241f9,0xcc1529e8,0x1dec91db,0x52bbf9ca, + 0xc9e787ec,0x86b0effd,0x574957ce,0x181e3fdf,0xf07b3a1f,0xbf2c520e,0x6ed5ea3d,0x2182822c, + 0x2dd0ee65,0x62878674,0xb37e3e47,0xfc295656,0x144c5396,0x5b1b3b87,0x8ae283b4,0xc5b5eba5, + 0x5ee99583,0x11befd92,0xc04745a1,0x8f102db0,0x67752870,0x28224061,0xf9dbf852,0xb68c9043, + 0xcba219a9,0x84f571b8,0x550cc98b,0x1a5ba19a,0xf23ea45a,0xbd69cc4b,0x6c907478,0x23c71c69, + 0xb89b624f,0xf7cc0a5e,0x2635b26d,0x6962da7c,0x8107dfbc,0xce50b7ad,0x1fa90f9e,0x50fe678f, + 0xe5f41c4a,0xaaa3745b,0x7b5acc68,0x340da479,0xdc68a1b9,0x933fc9a8,0x42c6719b,0x0d91198a, + 0x96cd67ac,0xd99a0fbd,0x0863b78e,0x4734df9f,0xaf51da5f,0xe006b24e,0x31ff0a7d,0x7ea8626c, + 0x0386eb86,0x4cd18397,0x9d283ba4,0xd27f53b5,0x3a1a5675,0x754d3e64,0xa4b48657,0xebe3ee46, + 0x70bf9060,0x3fe8f871,0xee114042,0xa1462853,0x49232d93,0x06744582,0xd78dfdb1,0x98da95a0, + 0xb958178c,0xf60f7f9d,0x27f6c7ae,0x68a1afbf,0x80c4aa7f,0xcf93c26e,0x1e6a7a5d,0x513d124c, + 0xca616c6a,0x8536047b,0x54cfbc48,0x1b98d459,0xf3fdd199,0xbcaab988,0x6d5301bb,0x220469aa, + 0x5f2ae040,0x107d8851,0xc1843062,0x8ed35873,0x66b65db3,0x29e135a2,0xf8188d91,0xb74fe580, + 0x2c139ba6,0x6344f3b7,0xb2bd4b84,0xfdea2395,0x158f2655,0x5ad84e44,0x8b21f677,0xc4769e66, + 0x717ce5a3,0x3e2b8db2,0xefd23581,0xa0855d90,0x48e05850,0x07b73041,0xd64e8872,0x9919e063, + 0x02459e45,0x4d12f654,0x9ceb4e67,0xd3bc2676,0x3bd923b6,0x748e4ba7,0xa577f394,0xea209b85, + 0x970e126f,0xd8597a7e,0x09a0c24d,0x46f7aa5c,0xae92af9c,0xe1c5c78d,0x303c7fbe,0x7f6b17af, + 0xe4376989,0xab600198,0x7a99b9ab,0x35ced1ba,0xddabd47a,0x92fcbc6b,0x43050458,0x0c526c49}, + +{0x00000000,0x5ba1dcca,0xb743b994,0xece2655e,0x6a466e9f,0x31e7b255,0xdd05d70b,0x86a40bc1, + 0xd48cdd3e,0x8f2d01f4,0x63cf64aa,0x386eb860,0xbecab3a1,0xe56b6f6b,0x09890a35,0x5228d6ff, + 0xadd8a7cb,0xf6797b01,0x1a9b1e5f,0x413ac295,0xc79ec954,0x9c3f159e,0x70dd70c0,0x2b7cac0a, + 0x79547af5,0x22f5a63f,0xce17c361,0x95b61fab,0x1312146a,0x48b3c8a0,0xa451adfe,0xfff07134, + 0x5f705221,0x04d18eeb,0xe833ebb5,0xb392377f,0x35363cbe,0x6e97e074,0x8275852a,0xd9d459e0, + 0x8bfc8f1f,0xd05d53d5,0x3cbf368b,0x671eea41,0xe1bae180,0xba1b3d4a,0x56f95814,0x0d5884de, + 0xf2a8f5ea,0xa9092920,0x45eb4c7e,0x1e4a90b4,0x98ee9b75,0xc34f47bf,0x2fad22e1,0x740cfe2b, + 0x262428d4,0x7d85f41e,0x91679140,0xcac64d8a,0x4c62464b,0x17c39a81,0xfb21ffdf,0xa0802315, + 0xbee0a442,0xe5417888,0x09a31dd6,0x5202c11c,0xd4a6cadd,0x8f071617,0x63e57349,0x3844af83, + 0x6a6c797c,0x31cda5b6,0xdd2fc0e8,0x868e1c22,0x002a17e3,0x5b8bcb29,0xb769ae77,0xecc872bd, + 0x13380389,0x4899df43,0xa47bba1d,0xffda66d7,0x797e6d16,0x22dfb1dc,0xce3dd482,0x959c0848, + 0xc7b4deb7,0x9c15027d,0x70f76723,0x2b56bbe9,0xadf2b028,0xf6536ce2,0x1ab109bc,0x4110d576, + 0xe190f663,0xba312aa9,0x56d34ff7,0x0d72933d,0x8bd698fc,0xd0774436,0x3c952168,0x6734fda2, + 0x351c2b5d,0x6ebdf797,0x825f92c9,0xd9fe4e03,0x5f5a45c2,0x04fb9908,0xe819fc56,0xb3b8209c, + 0x4c4851a8,0x17e98d62,0xfb0be83c,0xa0aa34f6,0x260e3f37,0x7dafe3fd,0x914d86a3,0xcaec5a69, + 0x98c48c96,0xc365505c,0x2f873502,0x7426e9c8,0xf282e209,0xa9233ec3,0x45c15b9d,0x1e608757, + 0x79005533,0x22a189f9,0xce43eca7,0x95e2306d,0x13463bac,0x48e7e766,0xa4058238,0xffa45ef2, + 0xad8c880d,0xf62d54c7,0x1acf3199,0x416eed53,0xc7cae692,0x9c6b3a58,0x70895f06,0x2b2883cc, + 0xd4d8f2f8,0x8f792e32,0x639b4b6c,0x383a97a6,0xbe9e9c67,0xe53f40ad,0x09dd25f3,0x527cf939, + 0x00542fc6,0x5bf5f30c,0xb7179652,0xecb64a98,0x6a124159,0x31b39d93,0xdd51f8cd,0x86f02407, + 0x26700712,0x7dd1dbd8,0x9133be86,0xca92624c,0x4c36698d,0x1797b547,0xfb75d019,0xa0d40cd3, + 0xf2fcda2c,0xa95d06e6,0x45bf63b8,0x1e1ebf72,0x98bab4b3,0xc31b6879,0x2ff90d27,0x7458d1ed, + 0x8ba8a0d9,0xd0097c13,0x3ceb194d,0x674ac587,0xe1eece46,0xba4f128c,0x56ad77d2,0x0d0cab18, + 0x5f247de7,0x0485a12d,0xe867c473,0xb3c618b9,0x35621378,0x6ec3cfb2,0x8221aaec,0xd9807626, + 0xc7e0f171,0x9c412dbb,0x70a348e5,0x2b02942f,0xada69fee,0xf6074324,0x1ae5267a,0x4144fab0, + 0x136c2c4f,0x48cdf085,0xa42f95db,0xff8e4911,0x792a42d0,0x228b9e1a,0xce69fb44,0x95c8278e, + 0x6a3856ba,0x31998a70,0xdd7bef2e,0x86da33e4,0x007e3825,0x5bdfe4ef,0xb73d81b1,0xec9c5d7b, + 0xbeb48b84,0xe515574e,0x09f73210,0x5256eeda,0xd4f2e51b,0x8f5339d1,0x63b15c8f,0x38108045, + 0x9890a350,0xc3317f9a,0x2fd31ac4,0x7472c60e,0xf2d6cdcf,0xa9771105,0x4595745b,0x1e34a891, + 0x4c1c7e6e,0x17bda2a4,0xfb5fc7fa,0xa0fe1b30,0x265a10f1,0x7dfbcc3b,0x9119a965,0xcab875af, + 0x3548049b,0x6ee9d851,0x820bbd0f,0xd9aa61c5,0x5f0e6a04,0x04afb6ce,0xe84dd390,0xb3ec0f5a, + 0xe1c4d9a5,0xba65056f,0x56876031,0x0d26bcfb,0x8b82b73a,0xd0236bf0,0x3cc10eae,0x6760d264}}; diff --git a/thirdparty/libogg/framing.c b/thirdparty/libogg/framing.c index 79fc715c8c..83601199ad 100644 --- a/thirdparty/libogg/framing.c +++ b/thirdparty/libogg/framing.c @@ -5,14 +5,13 @@ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * + * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2018 * * by the Xiph.Org Foundation http://www.xiph.org/ * * * ******************************************************************** function: code raw packets into framed OggSquish stream and decode Ogg streams back into raw packets - last mod: $Id$ note: The CRC code is directly derived from public domain code by Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html @@ -20,6 +19,10 @@ ********************************************************************/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdlib.h> #include <limits.h> #include <string.h> @@ -45,7 +48,7 @@ int ogg_page_eos(const ogg_page *og){ ogg_int64_t ogg_page_granulepos(const ogg_page *og){ unsigned char *page=og->header; - ogg_int64_t granulepos=page[13]&(0xff); + ogg_uint64_t granulepos=page[13]&(0xff); granulepos= (granulepos<<8)|(page[12]&0xff); granulepos= (granulepos<<8)|(page[11]&0xff); granulepos= (granulepos<<8)|(page[10]&0xff); @@ -53,21 +56,21 @@ ogg_int64_t ogg_page_granulepos(const ogg_page *og){ granulepos= (granulepos<<8)|(page[8]&0xff); granulepos= (granulepos<<8)|(page[7]&0xff); granulepos= (granulepos<<8)|(page[6]&0xff); - return(granulepos); + return((ogg_int64_t)granulepos); } int ogg_page_serialno(const ogg_page *og){ - return(og->header[14] | - (og->header[15]<<8) | - (og->header[16]<<16) | - (og->header[17]<<24)); + return((int)((ogg_uint32_t)og->header[14]) | + ((ogg_uint32_t)og->header[15]<<8) | + ((ogg_uint32_t)og->header[16]<<16) | + ((ogg_uint32_t)og->header[17]<<24)); } long ogg_page_pageno(const ogg_page *og){ - return(og->header[18] | - (og->header[19]<<8) | - (og->header[20]<<16) | - (og->header[21]<<24)); + return((long)((ogg_uint32_t)og->header[18]) | + ((ogg_uint32_t)og->header[19]<<8) | + ((ogg_uint32_t)og->header[20]<<16) | + ((ogg_uint32_t)og->header[21]<<24)); } @@ -99,90 +102,31 @@ int ogg_page_packets(const ogg_page *og){ #if 0 /* helper to initialize lookup for direct-table CRC (illustrative; we - use the static init below) */ - -static ogg_uint32_t _ogg_crc_entry(unsigned long index){ - int i; - unsigned long r; - - r = index << 24; - for (i=0; i<8; i++) - if (r & 0x80000000UL) - r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator - polynomial, although we use an - unreflected alg and an init/final - of 0, not 0xffffffff */ - else - r<<=1; - return (r & 0xffffffffUL); + use the static init in crctable.h) */ + +static void _ogg_crc_init(){ + int i, j; + ogg_uint32_t polynomial, crc; + polynomial = 0x04c11db7; /* The same as the ethernet generator + polynomial, although we use an + unreflected alg and an init/final + of 0, not 0xffffffff */ + for (i = 0; i <= 0xFF; i++){ + crc = i << 24; + + for (j = 0; j < 8; j++) + crc = (crc << 1) ^ (crc & (1 << 31) ? polynomial : 0); + + crc_lookup[0][i] = crc; + } + + for (i = 0; i <= 0xFF; i++) + for (j = 1; j < 8; j++) + crc_lookup[j][i] = crc_lookup[0][(crc_lookup[j - 1][i] >> 24) & 0xFF] ^ (crc_lookup[j - 1][i] << 8); } #endif -static const ogg_uint32_t crc_lookup[256]={ - 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9, - 0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005, - 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61, - 0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd, - 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9, - 0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75, - 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011, - 0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd, - 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039, - 0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5, - 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81, - 0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d, - 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49, - 0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95, - 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1, - 0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d, - 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae, - 0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072, - 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16, - 0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca, - 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde, - 0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02, - 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066, - 0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba, - 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e, - 0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692, - 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6, - 0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a, - 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e, - 0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2, - 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686, - 0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a, - 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637, - 0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb, - 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f, - 0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53, - 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47, - 0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b, - 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff, - 0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623, - 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7, - 0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b, - 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f, - 0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3, - 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7, - 0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b, - 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f, - 0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3, - 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640, - 0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c, - 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8, - 0x68860bfd,0x6c47164a,0x61043093,0x65c52d24, - 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30, - 0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec, - 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088, - 0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654, - 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0, - 0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c, - 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18, - 0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4, - 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0, - 0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c, - 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668, - 0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4}; +#include "crctable.h" /* init the encode/decode logical stream state */ @@ -290,10 +234,27 @@ static int _os_lacing_expand(ogg_stream_state *os,long needed){ /* Direct table CRC; note that this will be faster in the future if we perform the checksum simultaneously with other copies */ +static ogg_uint32_t _os_update_crc(ogg_uint32_t crc, unsigned char *buffer, int size){ + while (size>=8){ + crc^=((ogg_uint32_t)buffer[0]<<24)|((ogg_uint32_t)buffer[1]<<16)|((ogg_uint32_t)buffer[2]<<8)|((ogg_uint32_t)buffer[3]); + + crc=crc_lookup[7][ crc>>24 ]^crc_lookup[6][(crc>>16)&0xFF]^ + crc_lookup[5][(crc>> 8)&0xFF]^crc_lookup[4][ crc &0xFF]^ + crc_lookup[3][buffer[4] ]^crc_lookup[2][buffer[5] ]^ + crc_lookup[1][buffer[6] ]^crc_lookup[0][buffer[7] ]; + + buffer+=8; + size-=8; + } + + while (size--) + crc=(crc<<8)^crc_lookup[0][((crc >> 24)&0xff)^*buffer++]; + return crc; +} + void ogg_page_checksum_set(ogg_page *og){ if(og){ ogg_uint32_t crc_reg=0; - int i; /* safety; needed for API behavior, but not framing code */ og->header[22]=0; @@ -301,10 +262,8 @@ void ogg_page_checksum_set(ogg_page *og){ og->header[24]=0; og->header[25]=0; - for(i=0;i<og->header_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]]; - for(i=0;i<og->body_len;i++) - crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]]; + crc_reg=_os_update_crc(crc_reg,og->header,og->header_len); + crc_reg=_os_update_crc(crc_reg,og->body,og->body_len); og->header[22]=(unsigned char)(crc_reg&0xff); og->header[23]=(unsigned char)((crc_reg>>8)&0xff); @@ -414,9 +373,9 @@ static int ogg_stream_flush_i(ogg_stream_state *os,ogg_page *og, int force, int }else{ /* The extra packets_done, packet_just_done logic here attempts to do two things: - 1) Don't unneccessarily span pages. + 1) Don't unnecessarily span pages. 2) Unless necessary, don't flush pages if there are less than four packets on - them; this expands page size to reduce unneccessary overhead if incoming packets + them; this expands page size to reduce unnecessary overhead if incoming packets are large. These are not necessary behaviors, just 'always better than naive flushing' without requiring an application to explicitly request a specific optimized @@ -723,16 +682,15 @@ long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){ /* replace the computed checksum with the one actually read in */ memcpy(page+22,chksum,4); +#ifndef DISABLE_CRC /* Bad checksum. Lose sync */ goto sync_fail; +#endif } } /* yes, have a whole page all ready to go */ { - unsigned char *page=oy->data+oy->returned; - long bytes; - if(og){ og->header=page; og->header_len=oy->headerbytes; @@ -1814,6 +1772,7 @@ int main(void){ test_pack(packets,headret,0,0,0); } +#ifndef DISABLE_CRC { /* test for the libogg 1.1.1 resync in large continuation bug found by Josh Coalson) */ @@ -1823,6 +1782,9 @@ int main(void){ fprintf(stderr,"testing continuation resync in very large packets... "); test_pack(packets,headret,100,2,3); } +#else + fprintf(stderr,"Skipping continuation resync test due to --disable-crc\n"); +#endif { /* term only page. why not? */ @@ -2084,6 +2046,7 @@ int main(void){ fprintf(stderr,"ok.\n"); } +#ifndef DISABLE_CRC /* Test recapture: page + garbage + page */ { ogg_page og_de; @@ -2125,6 +2088,9 @@ int main(void){ fprintf(stderr,"ok.\n"); } +#else + fprintf(stderr,"Skipping recapture test due to --disable-crc\n"); +#endif /* Free page data that was previously copied */ { @@ -2133,6 +2099,9 @@ int main(void){ } } } + ogg_sync_clear(&oy); + ogg_stream_clear(&os_en); + ogg_stream_clear(&os_de); return(0); } diff --git a/thirdparty/libogg/ogg/config_types.h b/thirdparty/libogg/ogg/config_types.h index e630657547..3574a8ad44 100644 --- a/thirdparty/libogg/ogg/config_types.h +++ b/thirdparty/libogg/ogg/config_types.h @@ -8,5 +8,6 @@ typedef uint16_t ogg_uint16_t; typedef int32_t ogg_int32_t; typedef uint32_t ogg_uint32_t; typedef int64_t ogg_int64_t; +typedef uint64_t ogg_uint64_t; #endif diff --git a/thirdparty/libogg/ogg/ogg.h b/thirdparty/libogg/ogg/ogg.h index 7609fc24d6..c4325aa76d 100644 --- a/thirdparty/libogg/ogg/ogg.h +++ b/thirdparty/libogg/ogg/ogg.h @@ -11,7 +11,6 @@ ******************************************************************** function: toplevel libogg include - last mod: $Id$ ********************************************************************/ #ifndef _OGG_H diff --git a/thirdparty/libogg/ogg/os_types.h b/thirdparty/libogg/ogg/os_types.h index b8f56308b5..e655a1d628 100644 --- a/thirdparty/libogg/ogg/os_types.h +++ b/thirdparty/libogg/ogg/os_types.h @@ -10,8 +10,7 @@ * * ******************************************************************** - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id$ + function: Define a consistent set of types on each platform. ********************************************************************/ #ifndef _OS_TYPES_H @@ -44,6 +43,7 @@ typedef unsigned long long ogg_uint64_t; # elif defined(__MWERKS__) typedef long long ogg_int64_t; + typedef unsigned long long ogg_uint64_t; typedef int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef short ogg_int16_t; @@ -62,6 +62,7 @@ typedef __int64 ogg_int64_t; typedef __int32 ogg_int32_t; typedef unsigned __int32 ogg_uint32_t; + typedef unsigned __int64 ogg_uint64_t; typedef __int16 ogg_int16_t; typedef unsigned __int16 ogg_uint16_t; # endif @@ -69,12 +70,13 @@ #elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */ -# include <inttypes.h> +# include <sys/types.h> typedef int16_t ogg_int16_t; - typedef uint16_t ogg_uint16_t; + typedef u_int16_t ogg_uint16_t; typedef int32_t ogg_int32_t; - typedef uint32_t ogg_uint32_t; + typedef u_int32_t ogg_uint32_t; typedef int64_t ogg_int64_t; + typedef u_int64_t ogg_uint64_t; #elif defined(__HAIKU__) @@ -85,6 +87,7 @@ typedef int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef long long ogg_int64_t; + typedef unsigned long long ogg_uint64_t; #elif defined(__BEOS__) @@ -95,6 +98,7 @@ typedef int32_t ogg_int32_t; typedef uint32_t ogg_uint32_t; typedef int64_t ogg_int64_t; + typedef uint64_t ogg_uint64_t; #elif defined (__EMX__) @@ -104,6 +108,8 @@ typedef int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef long long ogg_int64_t; + typedef unsigned long long ogg_uint64_t; + #elif defined (DJGPP) @@ -112,11 +118,13 @@ typedef int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef long long ogg_int64_t; + typedef unsigned long long ogg_uint64_t; #elif defined(R5900) /* PS2 EE */ typedef long ogg_int64_t; + typedef unsigned long ogg_uint64_t; typedef int ogg_int32_t; typedef unsigned ogg_uint32_t; typedef short ogg_int16_t; @@ -129,6 +137,7 @@ typedef signed int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef long long int ogg_int64_t; + typedef unsigned long long int ogg_uint64_t; #elif defined(__TMS320C6X__) @@ -138,6 +147,7 @@ typedef signed int ogg_int32_t; typedef unsigned int ogg_uint32_t; typedef long long int ogg_int64_t; + typedef unsigned long long int ogg_uint64_t; #else diff --git a/thirdparty/libwebp/src/dec/quant_dec.c b/thirdparty/libwebp/src/dec/quant_dec.c index f07212ad73..a0ac018b0f 100644 --- a/thirdparty/libwebp/src/dec/quant_dec.c +++ b/thirdparty/libwebp/src/dec/quant_dec.c @@ -61,12 +61,17 @@ static const uint16_t kAcTable[128] = { void VP8ParseQuant(VP8Decoder* const dec) { VP8BitReader* const br = &dec->br_; - const int base_q0 = VP8GetValue(br, 7); - const int dqy1_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0; - const int dqy2_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0; - const int dqy2_ac = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0; - const int dquv_dc = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0; - const int dquv_ac = VP8Get(br) ? VP8GetSignedValue(br, 4) : 0; + const int base_q0 = VP8GetValue(br, 7, "global-header"); + const int dqy1_dc = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 4, "global-header") : 0; + const int dqy2_dc = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 4, "global-header") : 0; + const int dqy2_ac = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 4, "global-header") : 0; + const int dquv_dc = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 4, "global-header") : 0; + const int dquv_ac = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 4, "global-header") : 0; const VP8SegmentHeader* const hdr = &dec->segment_hdr_; int i; diff --git a/thirdparty/libwebp/src/dec/tree_dec.c b/thirdparty/libwebp/src/dec/tree_dec.c index 3f5a957d32..1c6fdea27c 100644 --- a/thirdparty/libwebp/src/dec/tree_dec.c +++ b/thirdparty/libwebp/src/dec/tree_dec.c @@ -296,20 +296,21 @@ static void ParseIntraMode(VP8BitReader* const br, // to decode more than 1 keyframe. if (dec->segment_hdr_.update_map_) { // Hardcoded tree parsing - block->segment_ = !VP8GetBit(br, dec->proba_.segments_[0]) - ? VP8GetBit(br, dec->proba_.segments_[1]) - : 2 + VP8GetBit(br, dec->proba_.segments_[2]); + block->segment_ = !VP8GetBit(br, dec->proba_.segments_[0], "segments") + ? VP8GetBit(br, dec->proba_.segments_[1], "segments") + : VP8GetBit(br, dec->proba_.segments_[2], "segments") + 2; } else { block->segment_ = 0; // default for intra } - if (dec->use_skip_proba_) block->skip_ = VP8GetBit(br, dec->skip_p_); + if (dec->use_skip_proba_) block->skip_ = VP8GetBit(br, dec->skip_p_, "skip"); - block->is_i4x4_ = !VP8GetBit(br, 145); // decide for B_PRED first + block->is_i4x4_ = !VP8GetBit(br, 145, "block-size"); if (!block->is_i4x4_) { // Hardcoded 16x16 intra-mode decision tree. const int ymode = - VP8GetBit(br, 156) ? (VP8GetBit(br, 128) ? TM_PRED : H_PRED) - : (VP8GetBit(br, 163) ? V_PRED : DC_PRED); + VP8GetBit(br, 156, "pred-modes") ? + (VP8GetBit(br, 128, "pred-modes") ? TM_PRED : H_PRED) : + (VP8GetBit(br, 163, "pred-modes") ? V_PRED : DC_PRED); block->imodes_[0] = ymode; memset(top, ymode, 4 * sizeof(*top)); memset(left, ymode, 4 * sizeof(*left)); @@ -323,22 +324,25 @@ static void ParseIntraMode(VP8BitReader* const br, const uint8_t* const prob = kBModesProba[top[x]][ymode]; #if (USE_GENERIC_TREE == 1) // Generic tree-parsing - int i = kYModesIntra4[VP8GetBit(br, prob[0])]; + int i = kYModesIntra4[VP8GetBit(br, prob[0], "pred-modes")]; while (i > 0) { - i = kYModesIntra4[2 * i + VP8GetBit(br, prob[i])]; + i = kYModesIntra4[2 * i + VP8GetBit(br, prob[i], "pred-modes")]; } ymode = -i; #else // Hardcoded tree parsing - ymode = !VP8GetBit(br, prob[0]) ? B_DC_PRED : - !VP8GetBit(br, prob[1]) ? B_TM_PRED : - !VP8GetBit(br, prob[2]) ? B_VE_PRED : - !VP8GetBit(br, prob[3]) ? - (!VP8GetBit(br, prob[4]) ? B_HE_PRED : - (!VP8GetBit(br, prob[5]) ? B_RD_PRED : B_VR_PRED)) : - (!VP8GetBit(br, prob[6]) ? B_LD_PRED : - (!VP8GetBit(br, prob[7]) ? B_VL_PRED : - (!VP8GetBit(br, prob[8]) ? B_HD_PRED : B_HU_PRED))); + ymode = !VP8GetBit(br, prob[0], "pred-modes") ? B_DC_PRED : + !VP8GetBit(br, prob[1], "pred-modes") ? B_TM_PRED : + !VP8GetBit(br, prob[2], "pred-modes") ? B_VE_PRED : + !VP8GetBit(br, prob[3], "pred-modes") ? + (!VP8GetBit(br, prob[4], "pred-modes") ? B_HE_PRED : + (!VP8GetBit(br, prob[5], "pred-modes") ? B_RD_PRED + : B_VR_PRED)) : + (!VP8GetBit(br, prob[6], "pred-modes") ? B_LD_PRED : + (!VP8GetBit(br, prob[7], "pred-modes") ? B_VL_PRED : + (!VP8GetBit(br, prob[8], "pred-modes") ? B_HD_PRED + : B_HU_PRED)) + ); #endif // USE_GENERIC_TREE top[x] = ymode; } @@ -348,9 +352,9 @@ static void ParseIntraMode(VP8BitReader* const br, } } // Hardcoded UVMode decision tree - block->uvmode_ = !VP8GetBit(br, 142) ? DC_PRED - : !VP8GetBit(br, 114) ? V_PRED - : VP8GetBit(br, 183) ? TM_PRED : H_PRED; + block->uvmode_ = !VP8GetBit(br, 142, "pred-modes-uv") ? DC_PRED + : !VP8GetBit(br, 114, "pred-modes-uv") ? V_PRED + : VP8GetBit(br, 183, "pred-modes-uv") ? TM_PRED : H_PRED; } int VP8ParseIntraModeRow(VP8BitReader* const br, VP8Decoder* const dec) { @@ -514,8 +518,10 @@ void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec) { for (b = 0; b < NUM_BANDS; ++b) { for (c = 0; c < NUM_CTX; ++c) { for (p = 0; p < NUM_PROBAS; ++p) { - const int v = VP8GetBit(br, CoeffsUpdateProba[t][b][c][p]) ? - VP8GetValue(br, 8) : CoeffsProba0[t][b][c][p]; + const int v = + VP8GetBit(br, CoeffsUpdateProba[t][b][c][p], "global-header") ? + VP8GetValue(br, 8, "global-header") : + CoeffsProba0[t][b][c][p]; proba->bands_[t][b].probas_[c][p] = v; } } @@ -524,9 +530,8 @@ void VP8ParseProba(VP8BitReader* const br, VP8Decoder* const dec) { proba->bands_ptr_[t][b] = &proba->bands_[t][kBands[b]]; } } - dec->use_skip_proba_ = VP8Get(br); + dec->use_skip_proba_ = VP8Get(br, "global-header"); if (dec->use_skip_proba_) { - dec->skip_p_ = VP8GetValue(br, 8); + dec->skip_p_ = VP8GetValue(br, 8, "global-header"); } } - diff --git a/thirdparty/libwebp/src/dec/vp8_dec.c b/thirdparty/libwebp/src/dec/vp8_dec.c index c904b529f6..57efb69041 100644 --- a/thirdparty/libwebp/src/dec/vp8_dec.c +++ b/thirdparty/libwebp/src/dec/vp8_dec.c @@ -161,23 +161,26 @@ static int ParseSegmentHeader(VP8BitReader* br, VP8SegmentHeader* hdr, VP8Proba* proba) { assert(br != NULL); assert(hdr != NULL); - hdr->use_segment_ = VP8Get(br); + hdr->use_segment_ = VP8Get(br, "global-header"); if (hdr->use_segment_) { - hdr->update_map_ = VP8Get(br); - if (VP8Get(br)) { // update data + hdr->update_map_ = VP8Get(br, "global-header"); + if (VP8Get(br, "global-header")) { // update data int s; - hdr->absolute_delta_ = VP8Get(br); + hdr->absolute_delta_ = VP8Get(br, "global-header"); for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - hdr->quantizer_[s] = VP8Get(br) ? VP8GetSignedValue(br, 7) : 0; + hdr->quantizer_[s] = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 7, "global-header") : 0; } for (s = 0; s < NUM_MB_SEGMENTS; ++s) { - hdr->filter_strength_[s] = VP8Get(br) ? VP8GetSignedValue(br, 6) : 0; + hdr->filter_strength_[s] = VP8Get(br, "global-header") ? + VP8GetSignedValue(br, 6, "global-header") : 0; } } if (hdr->update_map_) { int s; for (s = 0; s < MB_FEATURE_TREE_PROBS; ++s) { - proba->segments_[s] = VP8Get(br) ? VP8GetValue(br, 8) : 255u; + proba->segments_[s] = VP8Get(br, "global-header") ? + VP8GetValue(br, 8, "global-header") : 255u; } } } else { @@ -205,7 +208,7 @@ static VP8StatusCode ParsePartitions(VP8Decoder* const dec, size_t last_part; size_t p; - dec->num_parts_minus_one_ = (1 << VP8GetValue(br, 2)) - 1; + dec->num_parts_minus_one_ = (1 << VP8GetValue(br, 2, "global-header")) - 1; last_part = dec->num_parts_minus_one_; if (size < 3 * last_part) { // we can't even read the sizes with sz[]! That's a failure. @@ -229,21 +232,21 @@ static VP8StatusCode ParsePartitions(VP8Decoder* const dec, // Paragraph 9.4 static int ParseFilterHeader(VP8BitReader* br, VP8Decoder* const dec) { VP8FilterHeader* const hdr = &dec->filter_hdr_; - hdr->simple_ = VP8Get(br); - hdr->level_ = VP8GetValue(br, 6); - hdr->sharpness_ = VP8GetValue(br, 3); - hdr->use_lf_delta_ = VP8Get(br); + hdr->simple_ = VP8Get(br, "global-header"); + hdr->level_ = VP8GetValue(br, 6, "global-header"); + hdr->sharpness_ = VP8GetValue(br, 3, "global-header"); + hdr->use_lf_delta_ = VP8Get(br, "global-header"); if (hdr->use_lf_delta_) { - if (VP8Get(br)) { // update lf-delta? + if (VP8Get(br, "global-header")) { // update lf-delta? int i; for (i = 0; i < NUM_REF_LF_DELTAS; ++i) { - if (VP8Get(br)) { - hdr->ref_lf_delta_[i] = VP8GetSignedValue(br, 6); + if (VP8Get(br, "global-header")) { + hdr->ref_lf_delta_[i] = VP8GetSignedValue(br, 6, "global-header"); } } for (i = 0; i < NUM_MODE_LF_DELTAS; ++i) { - if (VP8Get(br)) { - hdr->mode_lf_delta_[i] = VP8GetSignedValue(br, 6); + if (VP8Get(br, "global-header")) { + hdr->mode_lf_delta_[i] = VP8GetSignedValue(br, 6, "global-header"); } } } @@ -352,8 +355,8 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) { buf_size -= frm_hdr->partition_length_; if (frm_hdr->key_frame_) { - pic_hdr->colorspace_ = VP8Get(br); - pic_hdr->clamp_type_ = VP8Get(br); + pic_hdr->colorspace_ = VP8Get(br, "global-header"); + pic_hdr->clamp_type_ = VP8Get(br, "global-header"); } if (!ParseSegmentHeader(br, &dec->segment_hdr_, &dec->proba_)) { return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR, @@ -378,7 +381,7 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) { "Not a key frame."); } - VP8Get(br); // ignore the value of update_proba_ + VP8Get(br, "global-header"); // ignore the value of update_proba_ VP8ParseProba(br, dec); @@ -403,28 +406,28 @@ static const uint8_t kZigzag[16] = { // See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2 static int GetLargeValue(VP8BitReader* const br, const uint8_t* const p) { int v; - if (!VP8GetBit(br, p[3])) { - if (!VP8GetBit(br, p[4])) { + if (!VP8GetBit(br, p[3], "coeffs")) { + if (!VP8GetBit(br, p[4], "coeffs")) { v = 2; } else { - v = 3 + VP8GetBit(br, p[5]); + v = 3 + VP8GetBit(br, p[5], "coeffs"); } } else { - if (!VP8GetBit(br, p[6])) { - if (!VP8GetBit(br, p[7])) { - v = 5 + VP8GetBit(br, 159); + if (!VP8GetBit(br, p[6], "coeffs")) { + if (!VP8GetBit(br, p[7], "coeffs")) { + v = 5 + VP8GetBit(br, 159, "coeffs"); } else { - v = 7 + 2 * VP8GetBit(br, 165); - v += VP8GetBit(br, 145); + v = 7 + 2 * VP8GetBit(br, 165, "coeffs"); + v += VP8GetBit(br, 145, "coeffs"); } } else { const uint8_t* tab; - const int bit1 = VP8GetBit(br, p[8]); - const int bit0 = VP8GetBit(br, p[9 + bit1]); + const int bit1 = VP8GetBit(br, p[8], "coeffs"); + const int bit0 = VP8GetBit(br, p[9 + bit1], "coeffs"); const int cat = 2 * bit1 + bit0; v = 0; for (tab = kCat3456[cat]; *tab; ++tab) { - v += v + VP8GetBit(br, *tab); + v += v + VP8GetBit(br, *tab, "coeffs"); } v += 3 + (8 << cat); } @@ -438,24 +441,24 @@ static int GetCoeffsFast(VP8BitReader* const br, int ctx, const quant_t dq, int n, int16_t* out) { const uint8_t* p = prob[n]->probas_[ctx]; for (; n < 16; ++n) { - if (!VP8GetBit(br, p[0])) { + if (!VP8GetBit(br, p[0], "coeffs")) { return n; // previous coeff was last non-zero coeff } - while (!VP8GetBit(br, p[1])) { // sequence of zero coeffs + while (!VP8GetBit(br, p[1], "coeffs")) { // sequence of zero coeffs p = prob[++n]->probas_[0]; if (n == 16) return 16; } { // non zero coeff const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0]; int v; - if (!VP8GetBit(br, p[2])) { + if (!VP8GetBit(br, p[2], "coeffs")) { v = 1; p = p_ctx[1]; } else { v = GetLargeValue(br, p); p = p_ctx[2]; } - out[kZigzag[n]] = VP8GetSigned(br, v) * dq[n > 0]; + out[kZigzag[n]] = VP8GetSigned(br, v, "coeffs") * dq[n > 0]; } } return 16; @@ -468,24 +471,24 @@ static int GetCoeffsAlt(VP8BitReader* const br, int ctx, const quant_t dq, int n, int16_t* out) { const uint8_t* p = prob[n]->probas_[ctx]; for (; n < 16; ++n) { - if (!VP8GetBitAlt(br, p[0])) { + if (!VP8GetBitAlt(br, p[0], "coeffs")) { return n; // previous coeff was last non-zero coeff } - while (!VP8GetBitAlt(br, p[1])) { // sequence of zero coeffs + while (!VP8GetBitAlt(br, p[1], "coeffs")) { // sequence of zero coeffs p = prob[++n]->probas_[0]; if (n == 16) return 16; } { // non zero coeff const VP8ProbaArray* const p_ctx = &prob[n + 1]->probas_[0]; int v; - if (!VP8GetBitAlt(br, p[2])) { + if (!VP8GetBitAlt(br, p[2], "coeffs")) { v = 1; p = p_ctx[1]; } else { v = GetLargeValue(br, p); p = p_ctx[2]; } - out[kZigzag[n]] = VP8GetSigned(br, v) * dq[n > 0]; + out[kZigzag[n]] = VP8GetSigned(br, v, "coeffs") * dq[n > 0]; } } return 16; diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h index 2d7900aae1..3de8d86f90 100644 --- a/thirdparty/libwebp/src/dec/vp8i_dec.h +++ b/thirdparty/libwebp/src/dec/vp8i_dec.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define DEC_MAJ_VERSION 1 #define DEC_MIN_VERSION 0 -#define DEC_REV_VERSION 2 +#define DEC_REV_VERSION 3 // YUV-cache parameters. Cache is 32-bytes wide (= one cacheline). // Constraints are: We need to store one 16x16 block of luma samples (y), diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c index 333bb3e80d..d3e27119ea 100644 --- a/thirdparty/libwebp/src/dec/vp8l_dec.c +++ b/thirdparty/libwebp/src/dec/vp8l_dec.c @@ -362,12 +362,8 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, VP8LMetadata* const hdr = &dec->hdr_; uint32_t* huffman_image = NULL; HTreeGroup* htree_groups = NULL; - // When reading htrees, some might be unused, as the format allows it. - // We will still read them but put them in this htree_group_bogus. - HTreeGroup htree_group_bogus; HuffmanCode* huffman_tables = NULL; - HuffmanCode* huffman_tables_bogus = NULL; - HuffmanCode* next = NULL; + HuffmanCode* huffman_table = NULL; int num_htree_groups = 1; int num_htree_groups_max = 1; int max_alphabet_size = 0; @@ -418,12 +414,6 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, if (*mapped_group == -1) *mapped_group = num_htree_groups++; huffman_image[i] = *mapped_group; } - huffman_tables_bogus = (HuffmanCode*)WebPSafeMalloc( - table_size, sizeof(*huffman_tables_bogus)); - if (huffman_tables_bogus == NULL) { - dec->status_ = VP8_STATUS_OUT_OF_MEMORY; - goto Error; - } } else { num_htree_groups = num_htree_groups_max; } @@ -453,63 +443,71 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, goto Error; } - next = huffman_tables; + huffman_table = huffman_tables; for (i = 0; i < num_htree_groups_max; ++i) { - // If the index "i" is unused in the Huffman image, read the coefficients - // but store them to a bogus htree_group. - const int is_bogus = (mapping != NULL && mapping[i] == -1); - HTreeGroup* const htree_group = - is_bogus ? &htree_group_bogus : - &htree_groups[(mapping == NULL) ? i : mapping[i]]; - HuffmanCode** const htrees = htree_group->htrees; - HuffmanCode* huffman_tables_i = is_bogus ? huffman_tables_bogus : next; - int size; - int total_size = 0; - int is_trivial_literal = 1; - int max_bits = 0; - for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { - int alphabet_size = kAlphabetSize[j]; - htrees[j] = huffman_tables_i; - if (j == 0 && color_cache_bits > 0) { - alphabet_size += 1 << color_cache_bits; - } - size = - ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_tables_i); - if (size == 0) { - goto Error; - } - if (is_trivial_literal && kLiteralMap[j] == 1) { - is_trivial_literal = (huffman_tables_i->bits == 0); + // If the index "i" is unused in the Huffman image, just make sure the + // coefficients are valid but do not store them. + if (mapping != NULL && mapping[i] == -1) { + for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { + int alphabet_size = kAlphabetSize[j]; + if (j == 0 && color_cache_bits > 0) { + alphabet_size += (1 << color_cache_bits); + } + // Passing in NULL so that nothing gets filled. + if (!ReadHuffmanCode(alphabet_size, dec, code_lengths, NULL)) { + goto Error; + } } - total_size += huffman_tables_i->bits; - huffman_tables_i += size; - if (j <= ALPHA) { - int local_max_bits = code_lengths[0]; - int k; - for (k = 1; k < alphabet_size; ++k) { - if (code_lengths[k] > local_max_bits) { - local_max_bits = code_lengths[k]; + } else { + HTreeGroup* const htree_group = + &htree_groups[(mapping == NULL) ? i : mapping[i]]; + HuffmanCode** const htrees = htree_group->htrees; + int size; + int total_size = 0; + int is_trivial_literal = 1; + int max_bits = 0; + for (j = 0; j < HUFFMAN_CODES_PER_META_CODE; ++j) { + int alphabet_size = kAlphabetSize[j]; + htrees[j] = huffman_table; + if (j == 0 && color_cache_bits > 0) { + alphabet_size += (1 << color_cache_bits); + } + size = ReadHuffmanCode(alphabet_size, dec, code_lengths, huffman_table); + if (size == 0) { + goto Error; + } + if (is_trivial_literal && kLiteralMap[j] == 1) { + is_trivial_literal = (huffman_table->bits == 0); + } + total_size += huffman_table->bits; + huffman_table += size; + if (j <= ALPHA) { + int local_max_bits = code_lengths[0]; + int k; + for (k = 1; k < alphabet_size; ++k) { + if (code_lengths[k] > local_max_bits) { + local_max_bits = code_lengths[k]; + } } + max_bits += local_max_bits; } - max_bits += local_max_bits; } - } - if (!is_bogus) next = huffman_tables_i; - htree_group->is_trivial_literal = is_trivial_literal; - htree_group->is_trivial_code = 0; - if (is_trivial_literal) { - const int red = htrees[RED][0].value; - const int blue = htrees[BLUE][0].value; - const int alpha = htrees[ALPHA][0].value; - htree_group->literal_arb = ((uint32_t)alpha << 24) | (red << 16) | blue; - if (total_size == 0 && htrees[GREEN][0].value < NUM_LITERAL_CODES) { - htree_group->is_trivial_code = 1; - htree_group->literal_arb |= htrees[GREEN][0].value << 8; + htree_group->is_trivial_literal = is_trivial_literal; + htree_group->is_trivial_code = 0; + if (is_trivial_literal) { + const int red = htrees[RED][0].value; + const int blue = htrees[BLUE][0].value; + const int alpha = htrees[ALPHA][0].value; + htree_group->literal_arb = ((uint32_t)alpha << 24) | (red << 16) | blue; + if (total_size == 0 && htrees[GREEN][0].value < NUM_LITERAL_CODES) { + htree_group->is_trivial_code = 1; + htree_group->literal_arb |= htrees[GREEN][0].value << 8; + } } + htree_group->use_packed_table = + !htree_group->is_trivial_code && (max_bits < HUFFMAN_PACKED_BITS); + if (htree_group->use_packed_table) BuildPackedTable(htree_group); } - htree_group->use_packed_table = - !htree_group->is_trivial_code && (max_bits < HUFFMAN_PACKED_BITS); - if (htree_group->use_packed_table) BuildPackedTable(htree_group); } ok = 1; @@ -521,7 +519,6 @@ static int ReadHuffmanCodes(VP8LDecoder* const dec, int xsize, int ysize, Error: WebPSafeFree(code_lengths); - WebPSafeFree(huffman_tables_bogus); WebPSafeFree(mapping); if (!ok) { WebPSafeFree(huffman_image); diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c index d8f7a40a56..ab6433e54b 100644 --- a/thirdparty/libwebp/src/demux/demux.c +++ b/thirdparty/libwebp/src/demux/demux.c @@ -25,7 +25,7 @@ #define DMUX_MAJ_VERSION 1 #define DMUX_MIN_VERSION 0 -#define DMUX_REV_VERSION 2 +#define DMUX_REV_VERSION 3 typedef struct { size_t start_; // start location of the data diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c index 76587006a1..2871c56d84 100644 --- a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c +++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c @@ -214,7 +214,7 @@ static void ApplyAlphaMultiply_SSE2(uint8_t* rgba, int alpha_first, // Alpha detection static int HasAlpha8b_SSE2(const uint8_t* src, int length) { - const __m128i all_0xff = _mm_set1_epi8(0xff); + const __m128i all_0xff = _mm_set1_epi8((char)0xff); int i = 0; for (; i + 16 <= length; i += 16) { const __m128i v = _mm_loadu_si128((const __m128i*)(src + i)); @@ -228,7 +228,7 @@ static int HasAlpha8b_SSE2(const uint8_t* src, int length) { static int HasAlpha32b_SSE2(const uint8_t* src, int length) { const __m128i alpha_mask = _mm_set1_epi32(0xff); - const __m128i all_0xff = _mm_set1_epi8(0xff); + const __m128i all_0xff = _mm_set1_epi8((char)0xff); int i = 0; // We don't know if we can access the last 3 bytes after the last alpha // value 'src[4 * length - 4]' (because we don't know if alpha is the first diff --git a/thirdparty/libwebp/src/dsp/cpu.c b/thirdparty/libwebp/src/dsp/cpu.c index 8b40feed29..0fa5b6a5ce 100644 --- a/thirdparty/libwebp/src/dsp/cpu.c +++ b/thirdparty/libwebp/src/dsp/cpu.c @@ -173,8 +173,8 @@ static int AndroidCPUInfo(CPUFeature feature) { const AndroidCpuFamily cpu_family = android_getCpuFamily(); const uint64_t cpu_features = android_getCpuFeatures(); if (feature == kNEON) { - return (cpu_family == ANDROID_CPU_FAMILY_ARM && - 0 != (cpu_features & ANDROID_CPU_ARM_FEATURE_NEON)); + return cpu_family == ANDROID_CPU_FAMILY_ARM && + (cpu_features & ANDROID_CPU_ARM_FEATURE_NEON) != 0; } return 0; } diff --git a/thirdparty/libwebp/src/dsp/dec_sse2.c b/thirdparty/libwebp/src/dsp/dec_sse2.c index b3840faf3a..873aa59e8a 100644 --- a/thirdparty/libwebp/src/dsp/dec_sse2.c +++ b/thirdparty/libwebp/src/dsp/dec_sse2.c @@ -326,7 +326,7 @@ static WEBP_INLINE void Update2Pixels_SSE2(__m128i* const pi, __m128i* const qi, const __m128i a1_lo = _mm_srai_epi16(*a0_lo, 7); const __m128i a1_hi = _mm_srai_epi16(*a0_hi, 7); const __m128i delta = _mm_packs_epi16(a1_lo, a1_hi); - const __m128i sign_bit = _mm_set1_epi8(0x80); + const __m128i sign_bit = _mm_set1_epi8((char)0x80); *pi = _mm_adds_epi8(*pi, delta); *qi = _mm_subs_epi8(*qi, delta); FLIP_SIGN_BIT2(*pi, *qi); @@ -338,9 +338,9 @@ static WEBP_INLINE void NeedsFilter_SSE2(const __m128i* const p1, const __m128i* const q0, const __m128i* const q1, int thresh, __m128i* const mask) { - const __m128i m_thresh = _mm_set1_epi8(thresh); + const __m128i m_thresh = _mm_set1_epi8((char)thresh); const __m128i t1 = MM_ABS(*p1, *q1); // abs(p1 - q1) - const __m128i kFE = _mm_set1_epi8(0xFE); + const __m128i kFE = _mm_set1_epi8((char)0xFE); const __m128i t2 = _mm_and_si128(t1, kFE); // set lsb of each byte to zero const __m128i t3 = _mm_srli_epi16(t2, 1); // abs(p1 - q1) / 2 @@ -360,7 +360,7 @@ static WEBP_INLINE void DoFilter2_SSE2(__m128i* const p1, __m128i* const p0, __m128i* const q0, __m128i* const q1, int thresh) { __m128i a, mask; - const __m128i sign_bit = _mm_set1_epi8(0x80); + const __m128i sign_bit = _mm_set1_epi8((char)0x80); // convert p1/q1 to int8_t (for GetBaseDelta_SSE2) const __m128i p1s = _mm_xor_si128(*p1, sign_bit); const __m128i q1s = _mm_xor_si128(*q1, sign_bit); @@ -380,7 +380,7 @@ static WEBP_INLINE void DoFilter4_SSE2(__m128i* const p1, __m128i* const p0, const __m128i* const mask, int hev_thresh) { const __m128i zero = _mm_setzero_si128(); - const __m128i sign_bit = _mm_set1_epi8(0x80); + const __m128i sign_bit = _mm_set1_epi8((char)0x80); const __m128i k64 = _mm_set1_epi8(64); const __m128i k3 = _mm_set1_epi8(3); const __m128i k4 = _mm_set1_epi8(4); @@ -427,7 +427,7 @@ static WEBP_INLINE void DoFilter6_SSE2(__m128i* const p2, __m128i* const p1, const __m128i* const mask, int hev_thresh) { const __m128i zero = _mm_setzero_si128(); - const __m128i sign_bit = _mm_set1_epi8(0x80); + const __m128i sign_bit = _mm_set1_epi8((char)0x80); __m128i a, not_hev; // compute hev mask @@ -941,7 +941,7 @@ static void VR4_SSE2(uint8_t* dst) { // Vertical-Right const __m128i ABCD0 = _mm_srli_si128(XABCD, 1); const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0); const __m128i _XABCD = _mm_slli_si128(XABCD, 1); - const __m128i IXABCD = _mm_insert_epi16(_XABCD, I | (X << 8), 0); + const __m128i IXABCD = _mm_insert_epi16(_XABCD, (short)(I | (X << 8)), 0); const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0); const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one); const __m128i avg2 = _mm_subs_epu8(avg1, lsb); diff --git a/thirdparty/libwebp/src/dsp/enc_sse2.c b/thirdparty/libwebp/src/dsp/enc_sse2.c index 7b3f142c31..b2e78ed941 100644 --- a/thirdparty/libwebp/src/dsp/enc_sse2.c +++ b/thirdparty/libwebp/src/dsp/enc_sse2.c @@ -777,7 +777,7 @@ static WEBP_INLINE void VR4_SSE2(uint8_t* dst, const __m128i ABCD0 = _mm_srli_si128(XABCD, 1); const __m128i abcd = _mm_avg_epu8(XABCD, ABCD0); const __m128i _XABCD = _mm_slli_si128(XABCD, 1); - const __m128i IXABCD = _mm_insert_epi16(_XABCD, I | (X << 8), 0); + const __m128i IXABCD = _mm_insert_epi16(_XABCD, (short)(I | (X << 8)), 0); const __m128i avg1 = _mm_avg_epu8(IXABCD, ABCD0); const __m128i lsb = _mm_and_si128(_mm_xor_si128(IXABCD, ABCD0), one); const __m128i avg2 = _mm_subs_epu8(avg1, lsb); diff --git a/thirdparty/libwebp/src/dsp/filters.c b/thirdparty/libwebp/src/dsp/filters.c index 069a22eaef..9e910d99c9 100644 --- a/thirdparty/libwebp/src/dsp/filters.c +++ b/thirdparty/libwebp/src/dsp/filters.c @@ -33,9 +33,9 @@ static WEBP_INLINE void PredictLine_C(const uint8_t* src, const uint8_t* pred, uint8_t* dst, int length, int inverse) { int i; if (inverse) { - for (i = 0; i < length; ++i) dst[i] = src[i] + pred[i]; + for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] + pred[i]); } else { - for (i = 0; i < length; ++i) dst[i] = src[i] - pred[i]; + for (i = 0; i < length; ++i) dst[i] = (uint8_t)(src[i] - pred[i]); } } @@ -155,7 +155,7 @@ static WEBP_INLINE void DoGradientFilter_C(const uint8_t* in, const int pred = GradientPredictor_C(preds[w - 1], preds[w - stride], preds[w - stride - 1]); - out[w] = in[w] + (inverse ? pred : -pred); + out[w] = (uint8_t)(in[w] + (inverse ? pred : -pred)); } ++row; preds += stride; @@ -194,7 +194,7 @@ static void HorizontalUnfilter_C(const uint8_t* prev, const uint8_t* in, uint8_t pred = (prev == NULL) ? 0 : prev[0]; int i; for (i = 0; i < width; ++i) { - out[i] = pred + in[i]; + out[i] = (uint8_t)(pred + in[i]); pred = out[i]; } } @@ -206,7 +206,7 @@ static void VerticalUnfilter_C(const uint8_t* prev, const uint8_t* in, HorizontalUnfilter_C(NULL, in, out, width); } else { int i; - for (i = 0; i < width; ++i) out[i] = prev[i] + in[i]; + for (i = 0; i < width; ++i) out[i] = (uint8_t)(prev[i] + in[i]); } } #endif // !WEBP_NEON_OMIT_C_CODE @@ -220,7 +220,7 @@ static void GradientUnfilter_C(const uint8_t* prev, const uint8_t* in, int i; for (i = 0; i < width; ++i) { top = prev[i]; // need to read this first, in case prev==out - left = in[i] + GradientPredictor_C(left, top, top_left); + left = (uint8_t)(in[i] + GradientPredictor_C(left, top, top_left)); top_left = top; out[i] = left; } diff --git a/thirdparty/libwebp/src/dsp/filters_sse2.c b/thirdparty/libwebp/src/dsp/filters_sse2.c index 5a18895676..4b3f2d020f 100644 --- a/thirdparty/libwebp/src/dsp/filters_sse2.c +++ b/thirdparty/libwebp/src/dsp/filters_sse2.c @@ -163,7 +163,8 @@ static void GradientPredictDirect_SSE2(const uint8_t* const row, _mm_storel_epi64((__m128i*)(out + i), H); } for (; i < length; ++i) { - out[i] = row[i] - GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); + const int delta = GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); + out[i] = (uint8_t)(row[i] - delta); } } @@ -188,7 +189,7 @@ static WEBP_INLINE void DoGradientFilter_SSE2(const uint8_t* in, // Filter line-by-line. while (row < last_row) { - out[0] = in[0] - in[-stride]; + out[0] = (uint8_t)(in[0] - in[-stride]); GradientPredictDirect_SSE2(in + 1, in + 1 - stride, out + 1, width - 1); ++row; in += stride; @@ -223,7 +224,7 @@ static void HorizontalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, uint8_t* out, int width) { int i; __m128i last; - out[0] = in[0] + (prev == NULL ? 0 : prev[0]); + out[0] = (uint8_t)(in[0] + (prev == NULL ? 0 : prev[0])); if (width <= 1) return; last = _mm_set_epi32(0, 0, 0, out[0]); for (i = 1; i + 8 <= width; i += 8) { @@ -238,7 +239,7 @@ static void HorizontalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, _mm_storel_epi64((__m128i*)(out + i), A7); last = _mm_srli_epi64(A7, 56); } - for (; i < width; ++i) out[i] = in[i] + out[i - 1]; + for (; i < width; ++i) out[i] = (uint8_t)(in[i] + out[i - 1]); } static void VerticalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, @@ -259,7 +260,7 @@ static void VerticalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, _mm_storeu_si128((__m128i*)&out[i + 0], C0); _mm_storeu_si128((__m128i*)&out[i + 16], C1); } - for (; i < width; ++i) out[i] = in[i] + prev[i]; + for (; i < width; ++i) out[i] = (uint8_t)(in[i] + prev[i]); } } @@ -296,7 +297,8 @@ static void GradientPredictInverse_SSE2(const uint8_t* const in, _mm_storel_epi64((__m128i*)&row[i], out); } for (; i < length; ++i) { - row[i] = in[i] + GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); + const int delta = GradientPredictor_SSE2(row[i - 1], top[i], top[i - 1]); + row[i] = (uint8_t)(in[i] + delta); } } } @@ -306,7 +308,7 @@ static void GradientUnfilter_SSE2(const uint8_t* prev, const uint8_t* in, if (prev == NULL) { HorizontalUnfilter_SSE2(NULL, in, out, width); } else { - out[0] = in[0] + prev[0]; // predict from above + out[0] = (uint8_t)(in[0] + prev[0]); // predict from above GradientPredictInverse_SSE2(in + 1, prev + 1, out + 1, width - 1); } } diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c index d21aa6a0a0..d05af84e7b 100644 --- a/thirdparty/libwebp/src/dsp/lossless.c +++ b/thirdparty/libwebp/src/dsp/lossless.c @@ -270,14 +270,14 @@ void VP8LTransformColorInverse_C(const VP8LMultipliers* const m, int i; for (i = 0; i < num_pixels; ++i) { const uint32_t argb = src[i]; - const uint32_t green = argb >> 8; + const int8_t green = (int8_t)(argb >> 8); const uint32_t red = argb >> 16; int new_red = red & 0xff; int new_blue = argb & 0xff; new_red += ColorTransformDelta(m->green_to_red_, green); new_red &= 0xff; new_blue += ColorTransformDelta(m->green_to_blue_, green); - new_blue += ColorTransformDelta(m->red_to_blue_, new_red); + new_blue += ColorTransformDelta(m->red_to_blue_, (int8_t)new_red); new_blue &= 0xff; dst[i] = (argb & 0xff00ff00u) | (new_red << 16) | (new_blue); } diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c index 1408fbf580..9c36055afc 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc.c @@ -515,13 +515,17 @@ static WEBP_INLINE int ColorTransformDelta(int8_t color_pred, int8_t color) { return ((int)color_pred * color) >> 5; } +static WEBP_INLINE int8_t U32ToS8(uint32_t v) { + return (int8_t)(v & 0xff); +} + void VP8LTransformColor_C(const VP8LMultipliers* const m, uint32_t* data, int num_pixels) { int i; for (i = 0; i < num_pixels; ++i) { const uint32_t argb = data[i]; - const uint32_t green = argb >> 8; - const uint32_t red = argb >> 16; + const int8_t green = U32ToS8(argb >> 8); + const int8_t red = U32ToS8(argb >> 16); int new_red = red & 0xff; int new_blue = argb & 0xff; new_red -= ColorTransformDelta(m->green_to_red_, green); @@ -535,7 +539,7 @@ void VP8LTransformColor_C(const VP8LMultipliers* const m, uint32_t* data, static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red, uint32_t argb) { - const uint32_t green = argb >> 8; + const int8_t green = U32ToS8(argb >> 8); int new_red = argb >> 16; new_red -= ColorTransformDelta(green_to_red, green); return (new_red & 0xff); @@ -544,9 +548,9 @@ static WEBP_INLINE uint8_t TransformColorRed(uint8_t green_to_red, static WEBP_INLINE uint8_t TransformColorBlue(uint8_t green_to_blue, uint8_t red_to_blue, uint32_t argb) { - const uint32_t green = argb >> 8; - const uint32_t red = argb >> 16; - uint8_t new_blue = argb; + const int8_t green = U32ToS8(argb >> 8); + const int8_t red = U32ToS8(argb >> 16); + uint8_t new_blue = argb & 0xff; new_blue -= ColorTransformDelta(green_to_blue, green); new_blue -= ColorTransformDelta(red_to_blue, red); return (new_blue & 0xff); @@ -558,7 +562,7 @@ void VP8LCollectColorRedTransforms_C(const uint32_t* argb, int stride, while (tile_height-- > 0) { int x; for (x = 0; x < tile_width; ++x) { - ++histo[TransformColorRed(green_to_red, argb[x])]; + ++histo[TransformColorRed((uint8_t)green_to_red, argb[x])]; } argb += stride; } @@ -571,7 +575,8 @@ void VP8LCollectColorBlueTransforms_C(const uint32_t* argb, int stride, while (tile_height-- > 0) { int x; for (x = 0; x < tile_width; ++x) { - ++histo[TransformColorBlue(green_to_blue, red_to_blue, argb[x])]; + ++histo[TransformColorBlue((uint8_t)green_to_blue, (uint8_t)red_to_blue, + argb[x])]; } argb += stride; } diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c index 36478c4912..8adc52139b 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c @@ -363,7 +363,7 @@ static void BundleColorMap_SSE2(const uint8_t* const row, int width, int xbits, assert(xbits <= 3); switch (xbits) { case 0: { - const __m128i ff = _mm_set1_epi16(0xff00); + const __m128i ff = _mm_set1_epi16((short)0xff00); const __m128i zero = _mm_setzero_si128(); // Store 0xff000000 | (row[x] << 8). for (x = 0; x + 16 <= width; x += 16, dst += 16) { @@ -382,7 +382,7 @@ static void BundleColorMap_SSE2(const uint8_t* const row, int width, int xbits, break; } case 1: { - const __m128i ff = _mm_set1_epi16(0xff00); + const __m128i ff = _mm_set1_epi16((short)0xff00); const __m128i mul = _mm_set1_epi16(0x110); for (x = 0; x + 16 <= width; x += 16, dst += 8) { // 0a0b | (where a/b are 4 bits). diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c index 2e12a712eb..719d8ed25e 100644 --- a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c +++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c @@ -51,9 +51,9 @@ static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride, int histo[]) { const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue)); const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue)); - const __m128i mask_g = _mm_set1_epi16(0xff00); // green mask - const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask - const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask + const __m128i mask_g = _mm_set1_epi16((short)0xff00); // green mask + const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask + const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1); const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1, diff --git a/thirdparty/libwebp/src/dsp/quant.h b/thirdparty/libwebp/src/dsp/quant.h index 5ba6f9c377..5e8dba8d19 100644 --- a/thirdparty/libwebp/src/dsp/quant.h +++ b/thirdparty/libwebp/src/dsp/quant.h @@ -10,6 +10,8 @@ #ifndef WEBP_DSP_QUANT_H_ #define WEBP_DSP_QUANT_H_ +#include <string.h> + #include "src/dsp/dsp.h" #include "src/webp/types.h" @@ -67,4 +69,17 @@ static WEBP_INLINE int IsFlat(const int16_t* levels, int num_blocks, #endif // defined(WEBP_USE_NEON) && !defined(WEBP_ANDROID_NEON) && // !defined(WEBP_HAVE_NEON_RTCD) +static WEBP_INLINE int IsFlatSource16(const uint8_t* src) { + const uint32_t v = src[0] * 0x01010101u; + int i; + for (i = 0; i < 16; ++i) { + if (memcmp(src + 0, &v, 4) || memcmp(src + 4, &v, 4) || + memcmp(src + 8, &v, 4) || memcmp(src + 12, &v, 4)) { + return 0; + } + src += BPS; + } + return 1; +} + #endif // WEBP_DSP_QUANT_H_ diff --git a/thirdparty/libwebp/src/dsp/rescaler.c b/thirdparty/libwebp/src/dsp/rescaler.c index 753f84fcf4..c5a01e82df 100644 --- a/thirdparty/libwebp/src/dsp/rescaler.c +++ b/thirdparty/libwebp/src/dsp/rescaler.c @@ -109,8 +109,7 @@ void WebPRescalerExportRowExpand_C(WebPRescaler* const wrk) { for (x_out = 0; x_out < x_out_max; ++x_out) { const uint32_t J = frow[x_out]; const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } else { const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); @@ -120,8 +119,7 @@ void WebPRescalerExportRowExpand_C(WebPRescaler* const wrk) { + (uint64_t)B * irow[x_out]; const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } } @@ -138,17 +136,15 @@ void WebPRescalerExportRowShrink_C(WebPRescaler* const wrk) { assert(!wrk->y_expand); if (yscale) { for (x_out = 0; x_out < x_out_max; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(frow[x_out], yscale); + const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = frac; // new fractional start } } else { for (x_out = 0; x_out < x_out_max; ++x_out) { const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = 0; } } diff --git a/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c b/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c index ce9e64862e..419b741fa5 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c +++ b/thirdparty/libwebp/src/dsp/rescaler_mips_dsp_r2.c @@ -107,10 +107,9 @@ static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { ); } for (i = 0; i < (x_out_max & 0x3); ++i) { - const uint32_t frac = (uint32_t)MULT_FIX(*frow++, yscale); - const int v = (int)MULT_FIX_FLOOR(*irow - frac, wrk->fxy_scale); - assert(v >= 0 && v <= 255); - *dst++ = v; + const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(*frow++, yscale); + const int v = (int)MULT_FIX(*irow - frac, wrk->fxy_scale); + *dst++ = (v > 255) ? 255u : (uint8_t)v; *irow++ = frac; // new fractional start } } else { @@ -157,8 +156,7 @@ static void ExportRowShrink_MIPSdspR2(WebPRescaler* const wrk) { } for (i = 0; i < (x_out_max & 0x3); ++i) { const int v = (int)MULT_FIX_FLOOR(*irow, wrk->fxy_scale); - assert(v >= 0 && v <= 255); - *dst++ = v; + *dst++ = (v > 255) ? 255u : (uint8_t)v; *irow++ = 0; } } @@ -219,8 +217,7 @@ static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { for (i = 0; i < (x_out_max & 0x3); ++i) { const uint32_t J = *frow++; const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - *dst++ = v; + *dst++ = (v > 255) ? 255u : (uint8_t)v; } } else { const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); @@ -291,8 +288,7 @@ static void ExportRowExpand_MIPSdspR2(WebPRescaler* const wrk) { + (uint64_t)B * *irow++; const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - *dst++ = v; + *dst++ = (v > 255) ? 255u : (uint8_t)v; } } } diff --git a/thirdparty/libwebp/src/dsp/rescaler_msa.c b/thirdparty/libwebp/src/dsp/rescaler_msa.c index c559254836..256dbdd437 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_msa.c +++ b/thirdparty/libwebp/src/dsp/rescaler_msa.c @@ -166,8 +166,7 @@ static WEBP_INLINE void ExportRowExpand_0(const uint32_t* frow, uint8_t* dst, for (x_out = 0; x_out < length; ++x_out) { const uint32_t J = frow[x_out]; const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } } @@ -241,8 +240,7 @@ static WEBP_INLINE void ExportRowExpand_1(const uint32_t* frow, uint32_t* irow, + (uint64_t)B * irow[x_out]; const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } } @@ -342,10 +340,9 @@ static WEBP_INLINE void ExportRowShrink_0(const uint32_t* frow, uint32_t* irow, length -= 4; } for (x_out = 0; x_out < length; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + const uint32_t frac = (uint32_t)MULT_FIX_FLOOR(frow[x_out], yscale); + const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = frac; } } @@ -406,8 +403,7 @@ static WEBP_INLINE void ExportRowShrink_1(uint32_t* irow, uint8_t* dst, } for (x_out = 0; x_out < length; ++x_out) { const int v = (int)MULT_FIX(irow[x_out], wrk->fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = 0; } } diff --git a/thirdparty/libwebp/src/dsp/rescaler_neon.c b/thirdparty/libwebp/src/dsp/rescaler_neon.c index a553f06f79..b976a852cf 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_neon.c +++ b/thirdparty/libwebp/src/dsp/rescaler_neon.c @@ -81,14 +81,13 @@ static void RescalerExportRowExpand_NEON(WebPRescaler* const wrk) { const uint32x4_t B1 = MULT_FIX(A1, fy_scale_half); const uint16x4_t C0 = vmovn_u32(B0); const uint16x4_t C1 = vmovn_u32(B1); - const uint8x8_t D = vmovn_u16(vcombine_u16(C0, C1)); + const uint8x8_t D = vqmovn_u16(vcombine_u16(C0, C1)); vst1_u8(dst + x_out, D); } for (; x_out < x_out_max; ++x_out) { const uint32_t J = frow[x_out]; const int v = (int)MULT_FIX_C(J, fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } else { const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); @@ -102,7 +101,7 @@ static void RescalerExportRowExpand_NEON(WebPRescaler* const wrk) { const uint32x4_t D1 = MULT_FIX(C1, fy_scale_half); const uint16x4_t E0 = vmovn_u32(D0); const uint16x4_t E1 = vmovn_u32(D1); - const uint8x8_t F = vmovn_u16(vcombine_u16(E0, E1)); + const uint8x8_t F = vqmovn_u16(vcombine_u16(E0, E1)); vst1_u8(dst + x_out, F); } for (; x_out < x_out_max; ++x_out) { @@ -110,8 +109,7 @@ static void RescalerExportRowExpand_NEON(WebPRescaler* const wrk) { + (uint64_t)B * irow[x_out]; const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); const int v = (int)MULT_FIX_C(J, fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } } @@ -135,23 +133,22 @@ static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { for (x_out = 0; x_out < max_span; x_out += 8) { LOAD_32x8(frow + x_out, in0, in1); LOAD_32x8(irow + x_out, in2, in3); - const uint32x4_t A0 = MULT_FIX(in0, yscale_half); - const uint32x4_t A1 = MULT_FIX(in1, yscale_half); + const uint32x4_t A0 = MULT_FIX_FLOOR(in0, yscale_half); + const uint32x4_t A1 = MULT_FIX_FLOOR(in1, yscale_half); const uint32x4_t B0 = vqsubq_u32(in2, A0); const uint32x4_t B1 = vqsubq_u32(in3, A1); - const uint32x4_t C0 = MULT_FIX_FLOOR(B0, fxy_scale_half); - const uint32x4_t C1 = MULT_FIX_FLOOR(B1, fxy_scale_half); + const uint32x4_t C0 = MULT_FIX(B0, fxy_scale_half); + const uint32x4_t C1 = MULT_FIX(B1, fxy_scale_half); const uint16x4_t D0 = vmovn_u32(C0); const uint16x4_t D1 = vmovn_u32(C1); - const uint8x8_t E = vmovn_u16(vcombine_u16(D0, D1)); + const uint8x8_t E = vqmovn_u16(vcombine_u16(D0, D1)); vst1_u8(dst + x_out, E); STORE_32x8(A0, A1, irow + x_out); } for (; x_out < x_out_max; ++x_out) { - const uint32_t frac = (uint32_t)MULT_FIX_C(frow[x_out], yscale); - const int v = (int)MULT_FIX_FLOOR_C(irow[x_out] - frac, fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + const uint32_t frac = (uint32_t)MULT_FIX_FLOOR_C(frow[x_out], yscale); + const int v = (int)MULT_FIX_C(irow[x_out] - frac, fxy_scale); + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = frac; // new fractional start } } else { @@ -161,14 +158,13 @@ static void RescalerExportRowShrink_NEON(WebPRescaler* const wrk) { const uint32x4_t A1 = MULT_FIX(in1, fxy_scale_half); const uint16x4_t B0 = vmovn_u32(A0); const uint16x4_t B1 = vmovn_u32(A1); - const uint8x8_t C = vmovn_u16(vcombine_u16(B0, B1)); + const uint8x8_t C = vqmovn_u16(vcombine_u16(B0, B1)); vst1_u8(dst + x_out, C); STORE_32x8(zero, zero, irow + x_out); } for (; x_out < x_out_max; ++x_out) { const int v = (int)MULT_FIX_C(irow[x_out], fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = 0; } } diff --git a/thirdparty/libwebp/src/dsp/rescaler_sse2.c b/thirdparty/libwebp/src/dsp/rescaler_sse2.c index f7461a452c..d7effea16e 100644 --- a/thirdparty/libwebp/src/dsp/rescaler_sse2.c +++ b/thirdparty/libwebp/src/dsp/rescaler_sse2.c @@ -225,35 +225,6 @@ static WEBP_INLINE void ProcessRow_SSE2(const __m128i* const A0, _mm_storel_epi64((__m128i*)dst, G); } -static WEBP_INLINE void ProcessRow_Floor_SSE2(const __m128i* const A0, - const __m128i* const A1, - const __m128i* const A2, - const __m128i* const A3, - const __m128i* const mult, - uint8_t* const dst) { - const __m128i mask = _mm_set_epi32(0xffffffffu, 0, 0xffffffffu, 0); - const __m128i B0 = _mm_mul_epu32(*A0, *mult); - const __m128i B1 = _mm_mul_epu32(*A1, *mult); - const __m128i B2 = _mm_mul_epu32(*A2, *mult); - const __m128i B3 = _mm_mul_epu32(*A3, *mult); - const __m128i D0 = _mm_srli_epi64(B0, WEBP_RESCALER_RFIX); - const __m128i D1 = _mm_srli_epi64(B1, WEBP_RESCALER_RFIX); -#if (WEBP_RESCALER_RFIX < 32) - const __m128i D2 = - _mm_and_si128(_mm_slli_epi64(B2, 32 - WEBP_RESCALER_RFIX), mask); - const __m128i D3 = - _mm_and_si128(_mm_slli_epi64(B3, 32 - WEBP_RESCALER_RFIX), mask); -#else - const __m128i D2 = _mm_and_si128(B2, mask); - const __m128i D3 = _mm_and_si128(B3, mask); -#endif - const __m128i E0 = _mm_or_si128(D0, D2); - const __m128i E1 = _mm_or_si128(D1, D3); - const __m128i F = _mm_packs_epi32(E0, E1); - const __m128i G = _mm_packus_epi16(F, F); - _mm_storel_epi64((__m128i*)dst, G); -} - static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) { int x_out; uint8_t* const dst = wrk->dst; @@ -274,8 +245,7 @@ static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) { for (; x_out < x_out_max; ++x_out) { const uint32_t J = frow[x_out]; const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } else { const uint32_t B = WEBP_RESCALER_FRAC(-wrk->y_accum, wrk->y_sub); @@ -308,8 +278,7 @@ static void RescalerExportRowExpand_SSE2(WebPRescaler* const wrk) { + (uint64_t)B * irow[x_out]; const uint32_t J = (uint32_t)((I + ROUNDER) >> WEBP_RESCALER_RFIX); const int v = (int)MULT_FIX(J, wrk->fy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; } } } @@ -328,20 +297,15 @@ static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { const int scale_xy = wrk->fxy_scale; const __m128i mult_xy = _mm_set_epi32(0, scale_xy, 0, scale_xy); const __m128i mult_y = _mm_set_epi32(0, yscale, 0, yscale); - const __m128i rounder = _mm_set_epi32(0, ROUNDER, 0, ROUNDER); for (x_out = 0; x_out + 8 <= x_out_max; x_out += 8) { __m128i A0, A1, A2, A3, B0, B1, B2, B3; LoadDispatchAndMult_SSE2(irow + x_out, NULL, &A0, &A1, &A2, &A3); LoadDispatchAndMult_SSE2(frow + x_out, &mult_y, &B0, &B1, &B2, &B3); { - const __m128i C0 = _mm_add_epi64(B0, rounder); - const __m128i C1 = _mm_add_epi64(B1, rounder); - const __m128i C2 = _mm_add_epi64(B2, rounder); - const __m128i C3 = _mm_add_epi64(B3, rounder); - const __m128i D0 = _mm_srli_epi64(C0, WEBP_RESCALER_RFIX); // = frac - const __m128i D1 = _mm_srli_epi64(C1, WEBP_RESCALER_RFIX); - const __m128i D2 = _mm_srli_epi64(C2, WEBP_RESCALER_RFIX); - const __m128i D3 = _mm_srli_epi64(C3, WEBP_RESCALER_RFIX); + const __m128i D0 = _mm_srli_epi64(B0, WEBP_RESCALER_RFIX); // = frac + const __m128i D1 = _mm_srli_epi64(B1, WEBP_RESCALER_RFIX); + const __m128i D2 = _mm_srli_epi64(B2, WEBP_RESCALER_RFIX); + const __m128i D3 = _mm_srli_epi64(B3, WEBP_RESCALER_RFIX); const __m128i E0 = _mm_sub_epi64(A0, D0); // irow[x] - frac const __m128i E1 = _mm_sub_epi64(A1, D1); const __m128i E2 = _mm_sub_epi64(A2, D2); @@ -352,14 +316,13 @@ static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { const __m128i G1 = _mm_or_si128(D1, F3); _mm_storeu_si128((__m128i*)(irow + x_out + 0), G0); _mm_storeu_si128((__m128i*)(irow + x_out + 4), G1); - ProcessRow_Floor_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out); + ProcessRow_SSE2(&E0, &E1, &E2, &E3, &mult_xy, dst + x_out); } } for (; x_out < x_out_max; ++x_out) { - const uint32_t frac = (int)MULT_FIX(frow[x_out], yscale); - const int v = (int)MULT_FIX_FLOOR(irow[x_out] - frac, wrk->fxy_scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + const uint32_t frac = (int)MULT_FIX_FLOOR(frow[x_out], yscale); + const int v = (int)MULT_FIX(irow[x_out] - frac, wrk->fxy_scale); + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = frac; // new fractional start } } else { @@ -375,8 +338,7 @@ static void RescalerExportRowShrink_SSE2(WebPRescaler* const wrk) { } for (; x_out < x_out_max; ++x_out) { const int v = (int)MULT_FIX(irow[x_out], scale); - assert(v >= 0 && v <= 255); - dst[x_out] = v; + dst[x_out] = (v > 255) ? 255u : (uint8_t)v; irow[x_out] = 0; } } diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.c b/thirdparty/libwebp/src/enc/backward_references_enc.c index 3ab7b0ac7d..d445b40fc5 100644 --- a/thirdparty/libwebp/src/enc/backward_references_enc.c +++ b/thirdparty/libwebp/src/enc/backward_references_enc.c @@ -191,13 +191,14 @@ void VP8LHashChainClear(VP8LHashChain* const p) { // ----------------------------------------------------------------------------- -#define HASH_MULTIPLIER_HI (0xc6a4a793ULL) -#define HASH_MULTIPLIER_LO (0x5bd1e996ULL) +static const uint32_t kHashMultiplierHi = 0xc6a4a793u; +static const uint32_t kHashMultiplierLo = 0x5bd1e996u; -static WEBP_INLINE uint32_t GetPixPairHash64(const uint32_t* const argb) { +static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE +uint32_t GetPixPairHash64(const uint32_t* const argb) { uint32_t key; - key = (argb[1] * HASH_MULTIPLIER_HI) & 0xffffffffu; - key += (argb[0] * HASH_MULTIPLIER_LO) & 0xffffffffu; + key = argb[1] * kHashMultiplierHi; + key += argb[0] * kHashMultiplierLo; key = key >> (32 - HASH_BITS); return key; } diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c index 8ac6fa8e02..d89b98524a 100644 --- a/thirdparty/libwebp/src/enc/histogram_enc.c +++ b/thirdparty/libwebp/src/enc/histogram_enc.c @@ -929,9 +929,8 @@ static int HistogramCombineStochastic(VP8LHistogramSet* const image_histo, } mappings = (int*) WebPSafeMalloc(*num_used, sizeof(*mappings)); - if (mappings == NULL || !HistoQueueInit(&histo_queue, kHistoQueueSize)) { - goto End; - } + if (mappings == NULL) return 0; + if (!HistoQueueInit(&histo_queue, kHistoQueueSize)) goto End; // Fill the initial mapping. for (j = 0, iter = 0; iter < image_histo->size; ++iter) { if (histograms[iter] == NULL) continue; diff --git a/thirdparty/libwebp/src/enc/predictor_enc.c b/thirdparty/libwebp/src/enc/predictor_enc.c index 802e89693e..2e6762ea0d 100644 --- a/thirdparty/libwebp/src/enc/predictor_enc.c +++ b/thirdparty/libwebp/src/enc/predictor_enc.c @@ -202,7 +202,7 @@ static uint32_t NearLossless(uint32_t value, uint32_t predict, } if ((value >> 24) == 0 || (value >> 24) == 0xff) { // Preserve transparency of fully transparent or fully opaque pixels. - a = NearLosslessDiff(value >> 24, predict >> 24); + a = NearLosslessDiff((value >> 24) & 0xff, (predict >> 24) & 0xff); } else { a = NearLosslessComponent(value >> 24, predict >> 24, 0xff, quantization); } @@ -215,12 +215,12 @@ static uint32_t NearLossless(uint32_t value, uint32_t predict, // The amount by which green has been adjusted during quantization. It is // subtracted from red and blue for compensation, to avoid accumulating two // quantization errors in them. - green_diff = NearLosslessDiff(new_green, value >> 8); + green_diff = NearLosslessDiff(new_green, (value >> 8) & 0xff); } - r = NearLosslessComponent(NearLosslessDiff(value >> 16, green_diff), + r = NearLosslessComponent(NearLosslessDiff((value >> 16) & 0xff, green_diff), (predict >> 16) & 0xff, 0xff - new_green, quantization); - b = NearLosslessComponent(NearLosslessDiff(value, green_diff), + b = NearLosslessComponent(NearLosslessDiff(value & 0xff, green_diff), predict & 0xff, 0xff - new_green, quantization); return ((uint32_t)a << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; } @@ -587,7 +587,7 @@ static void GetBestGreenToRed( } } } - best_tx->green_to_red_ = green_to_red_best; + best_tx->green_to_red_ = (green_to_red_best & 0xff); } static float GetPredictionCostCrossColorBlue( @@ -666,8 +666,8 @@ static void GetBestGreenRedToBlue( break; // out of iter-loop. } } - best_tx->green_to_blue_ = green_to_blue_best; - best_tx->red_to_blue_ = red_to_blue_best; + best_tx->green_to_blue_ = green_to_blue_best & 0xff; + best_tx->red_to_blue_ = red_to_blue_best & 0xff; } #undef kGreenRedToBlueMaxIters #undef kGreenRedToBlueNumAxis diff --git a/thirdparty/libwebp/src/enc/quant_enc.c b/thirdparty/libwebp/src/enc/quant_enc.c index 03c682e3ae..01eb565c7f 100644 --- a/thirdparty/libwebp/src/enc/quant_enc.c +++ b/thirdparty/libwebp/src/enc/quant_enc.c @@ -33,7 +33,7 @@ // number of non-zero coeffs below which we consider the block very flat // (and apply a penalty to complex predictions) -#define FLATNESS_LIMIT_I16 10 // I16 mode +#define FLATNESS_LIMIT_I16 0 // I16 mode (special case) #define FLATNESS_LIMIT_I4 3 // I4 mode #define FLATNESS_LIMIT_UV 2 // UV mode #define FLATNESS_PENALTY 140 // roughly ~1bit per block @@ -988,6 +988,7 @@ static void PickBestIntra16(VP8EncIterator* const it, VP8ModeScore* rd) { VP8ModeScore* rd_cur = &rd_tmp; VP8ModeScore* rd_best = rd; int mode; + int is_flat = IsFlatSource16(it->yuv_in_ + Y_OFF_ENC); rd->mode_i16 = -1; for (mode = 0; mode < NUM_PRED_MODES; ++mode) { @@ -1003,10 +1004,14 @@ static void PickBestIntra16(VP8EncIterator* const it, VP8ModeScore* rd) { tlambda ? MULT_8B(tlambda, VP8TDisto16x16(src, tmp_dst, kWeightY)) : 0; rd_cur->H = VP8FixedCostsI16[mode]; rd_cur->R = VP8GetCostLuma16(it, rd_cur); - if (mode > 0 && - IsFlat(rd_cur->y_ac_levels[0], kNumBlocks, FLATNESS_LIMIT_I16)) { - // penalty to avoid flat area to be mispredicted by complex mode - rd_cur->R += FLATNESS_PENALTY * kNumBlocks; + if (is_flat) { + // refine the first impression (which was in pixel space) + is_flat = IsFlat(rd_cur->y_ac_levels[0], kNumBlocks, FLATNESS_LIMIT_I16); + if (is_flat) { + // Block is very flat. We put emphasis on the distortion being very low! + rd_cur->D *= 2; + rd_cur->SD *= 2; + } } // Since we always examine Intra16 first, we can overwrite *rd directly. @@ -1087,7 +1092,8 @@ static int PickBestIntra4(VP8EncIterator* const it, VP8ModeScore* const rd) { : 0; rd_tmp.H = mode_costs[mode]; - // Add flatness penalty + // Add flatness penalty, to avoid flat area to be mispredicted + // by a complex mode. if (mode > 0 && IsFlat(tmp_levels, kNumBlocks, FLATNESS_LIMIT_I4)) { rd_tmp.R = FLATNESS_PENALTY * kNumBlocks; } else { @@ -1242,11 +1248,19 @@ static void RefineUsingDistortion(VP8EncIterator* const it, if (mode > 0 && VP8FixedCostsI16[mode] > bit_limit) { continue; } + if (score < best_score) { best_mode = mode; best_score = score; } } + if (it->x_ == 0 || it->y_ == 0) { + // avoid starting a checkerboard resonance from the border. See bug #432. + if (IsFlatSource16(src)) { + best_mode = (it->x_ == 0) ? 0 : 2; + try_both_modes = 0; // stick to i16 + } + } VP8SetIntra16Mode(it, best_mode); // we'll reconstruct later, if i16 mode actually gets selected } diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h index 3a1967da88..24e1944610 100644 --- a/thirdparty/libwebp/src/enc/vp8i_enc.h +++ b/thirdparty/libwebp/src/enc/vp8i_enc.h @@ -32,7 +32,7 @@ extern "C" { // version numbers #define ENC_MAJ_VERSION 1 #define ENC_MIN_VERSION 0 -#define ENC_REV_VERSION 2 +#define ENC_REV_VERSION 3 enum { MAX_LF_LEVELS = 64, // Maximum loop filter level MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h index 3e9d8c48d8..7bc0b07e9b 100644 --- a/thirdparty/libwebp/src/mux/muxi.h +++ b/thirdparty/libwebp/src/mux/muxi.h @@ -29,7 +29,7 @@ extern "C" { #define MUX_MAJ_VERSION 1 #define MUX_MIN_VERSION 0 -#define MUX_REV_VERSION 2 +#define MUX_REV_VERSION 3 // Chunk object. typedef struct WebPChunk WebPChunk; diff --git a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h index 7e607f370a..46b3880706 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h @@ -104,7 +104,8 @@ void VP8LoadNewBytes(VP8BitReader* const br) { } // Read a bit with proba 'prob'. Speed-critical function! -static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob) { +static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, + int prob, const char label[]) { // Don't move this declaration! It makes a big speed difference to store // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't // alter br->range_ value. @@ -129,13 +130,14 @@ static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob) { br->bits_ -= shift; } br->range_ = range - 1; + BT_TRACK(br); return bit; } } // simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here) static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE -int VP8GetSigned(VP8BitReader* const br, int v) { +int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) { if (br->bits_ < 0) { VP8LoadNewBytes(br); } @@ -148,11 +150,13 @@ int VP8GetSigned(VP8BitReader* const br, int v) { br->range_ += mask; br->range_ |= 1; br->value_ -= (bit_t)((split + 1) & mask) << pos; + BT_TRACK(br); return (v ^ mask) - mask; } } -static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, int prob) { +static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, + int prob, const char label[]) { // Don't move this declaration! It makes a big speed difference to store // 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't // alter br->range_ value. @@ -179,6 +183,7 @@ static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br, int prob) { br->bits_ -= shift; } br->range_ = range; + BT_TRACK(br); return bit; } } diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.c b/thirdparty/libwebp/src/utils/bit_reader_utils.c index 5fa3ae7795..60271c0ae0 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_utils.c +++ b/thirdparty/libwebp/src/utils/bit_reader_utils.c @@ -109,17 +109,18 @@ void VP8LoadFinalBytes(VP8BitReader* const br) { //------------------------------------------------------------------------------ // Higher-level calls -uint32_t VP8GetValue(VP8BitReader* const br, int bits) { +uint32_t VP8GetValue(VP8BitReader* const br, int bits, const char label[]) { uint32_t v = 0; while (bits-- > 0) { - v |= VP8GetBit(br, 0x80) << bits; + v |= VP8GetBit(br, 0x80, label) << bits; } return v; } -int32_t VP8GetSignedValue(VP8BitReader* const br, int bits) { - const int value = VP8GetValue(br, bits); - return VP8Get(br) ? -value : value; +int32_t VP8GetSignedValue(VP8BitReader* const br, int bits, + const char label[]) { + const int value = VP8GetValue(br, bits, label); + return VP8Get(br, label) ? -value : value; } //------------------------------------------------------------------------------ @@ -227,3 +228,78 @@ uint32_t VP8LReadBits(VP8LBitReader* const br, int n_bits) { } //------------------------------------------------------------------------------ +// Bit-tracing tool + +#if (BITTRACE > 0) + +#include <stdlib.h> // for atexit() +#include <stdio.h> +#include <string.h> + +#define MAX_NUM_LABELS 32 +static struct { + const char* label; + int size; + int count; +} kLabels[MAX_NUM_LABELS]; + +static int last_label = 0; +static int last_pos = 0; +static const uint8_t* buf_start = NULL; +static int init_done = 0; + +static void PrintBitTraces(void) { + int i; + int scale = 1; + int total = 0; + const char* units = "bits"; +#if (BITTRACE == 2) + scale = 8; + units = "bytes"; +#endif + for (i = 0; i < last_label; ++i) total += kLabels[i].size; + if (total < 1) total = 1; // avoid rounding errors + printf("=== Bit traces ===\n"); + for (i = 0; i < last_label; ++i) { + const int skip = 16 - (int)strlen(kLabels[i].label); + const int value = (kLabels[i].size + scale - 1) / scale; + assert(skip > 0); + printf("%s \%*s: %6d %s \t[%5.2f%%] [count: %7d]\n", + kLabels[i].label, skip, "", value, units, + 100.f * kLabels[i].size / total, + kLabels[i].count); + } + total = (total + scale - 1) / scale; + printf("Total: %d %s\n", total, units); +} + +void BitTrace(const struct VP8BitReader* const br, const char label[]) { + int i, pos; + if (!init_done) { + memset(kLabels, 0, sizeof(kLabels)); + atexit(PrintBitTraces); + buf_start = br->buf_; + init_done = 1; + } + pos = (int)(br->buf_ - buf_start) * 8 - br->bits_; + // if there's a too large jump, we've changed partition -> reset counter + if (abs(pos - last_pos) > 32) { + buf_start = br->buf_; + pos = 0; + last_pos = 0; + } + if (br->range_ >= 0x7f) pos += kVP8Log2Range[br->range_ - 0x7f]; + for (i = 0; i < last_label; ++i) { + if (!strcmp(label, kLabels[i].label)) break; + } + if (i == MAX_NUM_LABELS) abort(); // overflow! + kLabels[i].label = label; + kLabels[i].size += pos - last_pos; + kLabels[i].count += 1; + if (i == last_label) ++last_label; + last_pos = pos; +} + +#endif // BITTRACE > 0 + +//------------------------------------------------------------------------------ diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.h b/thirdparty/libwebp/src/utils/bit_reader_utils.h index de810d402a..199dacf224 100644 --- a/thirdparty/libwebp/src/utils/bit_reader_utils.h +++ b/thirdparty/libwebp/src/utils/bit_reader_utils.h @@ -21,6 +21,27 @@ #endif #include "src/webp/types.h" +// Warning! This macro triggers quite some MACRO wizardry around func signature! +#if !defined(BITTRACE) +#define BITTRACE 0 // 0 = off, 1 = print bits, 2 = print bytes +#endif + +#if (BITTRACE > 0) +struct VP8BitReader; +extern void BitTrace(const struct VP8BitReader* const br, const char label[]); +#define BT_TRACK(br) BitTrace(br, label) +#define VP8Get(BR, L) VP8GetValue(BR, 1, L) +#else +#define BT_TRACK(br) +// We'll REMOVE the 'const char label[]' from all signatures and calls (!!): +#define VP8GetValue(BR, N, L) VP8GetValue(BR, N) +#define VP8Get(BR, L) VP8GetValue(BR, 1, L) +#define VP8GetSignedValue(BR, N, L) VP8GetSignedValue(BR, N) +#define VP8GetBit(BR, P, L) VP8GetBit(BR, P) +#define VP8GetBitAlt(BR, P, L) VP8GetBitAlt(BR, P) +#define VP8GetSigned(BR, V, L) VP8GetSigned(BR, V) +#endif + #ifdef __cplusplus extern "C" { #endif @@ -102,17 +123,15 @@ void VP8BitReaderSetBuffer(VP8BitReader* const br, void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset); // return the next value made of 'num_bits' bits -uint32_t VP8GetValue(VP8BitReader* const br, int num_bits); -static WEBP_INLINE uint32_t VP8Get(VP8BitReader* const br) { - return VP8GetValue(br, 1); -} +uint32_t VP8GetValue(VP8BitReader* const br, int num_bits, const char label[]); // return the next value with sign-extension. -int32_t VP8GetSignedValue(VP8BitReader* const br, int num_bits); +int32_t VP8GetSignedValue(VP8BitReader* const br, int num_bits, + const char label[]); // bit_reader_inl.h will implement the following methods: -// static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob) -// static WEBP_INLINE int VP8GetSigned(VP8BitReader* const br, int v) +// static WEBP_INLINE int VP8GetBit(VP8BitReader* const br, int prob, ...) +// static WEBP_INLINE int VP8GetSigned(VP8BitReader* const br, int v, ...) // and should be included by the .c files that actually need them. // This is to avoid recompiling the whole library whenever this file is touched, // and also allowing platform-specific ad-hoc hacks. diff --git a/thirdparty/libwebp/src/utils/bit_writer_utils.c b/thirdparty/libwebp/src/utils/bit_writer_utils.c index 7f83b4c8a2..bef0e31ca5 100644 --- a/thirdparty/libwebp/src/utils/bit_writer_utils.c +++ b/thirdparty/libwebp/src/utils/bit_writer_utils.c @@ -70,7 +70,7 @@ static void Flush(VP8BitWriter* const bw) { const int value = (bits & 0x100) ? 0x00 : 0xff; for (; bw->run_ > 0; --bw->run_) bw->buf_[pos++] = value; } - bw->buf_[pos++] = bits; + bw->buf_[pos++] = bits & 0xff; bw->pos_ = pos; } else { bw->run_++; // delay writing of bytes 0xff, pending eventual carry. diff --git a/thirdparty/libwebp/src/utils/color_cache_utils.h b/thirdparty/libwebp/src/utils/color_cache_utils.h index 20b7be11c9..ec21d5199b 100644 --- a/thirdparty/libwebp/src/utils/color_cache_utils.h +++ b/thirdparty/libwebp/src/utils/color_cache_utils.h @@ -17,6 +17,7 @@ #include <assert.h> +#include "src/dsp/dsp.h" #include "src/webp/types.h" #ifdef __cplusplus @@ -30,10 +31,11 @@ typedef struct { int hash_bits_; } VP8LColorCache; -static const uint64_t kHashMul = 0x1e35a7bdull; +static const uint32_t kHashMul = 0x1e35a7bdu; -static WEBP_INLINE int VP8LHashPix(uint32_t argb, int shift) { - return (int)(((argb * kHashMul) & 0xffffffffu) >> shift); +static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE +int VP8LHashPix(uint32_t argb, int shift) { + return (int)((argb * kHashMul) >> shift); } static WEBP_INLINE uint32_t VP8LColorCacheLookup( diff --git a/thirdparty/libwebp/src/utils/huffman_utils.c b/thirdparty/libwebp/src/utils/huffman_utils.c index 7a69963c3e..0cba0fbb7d 100644 --- a/thirdparty/libwebp/src/utils/huffman_utils.c +++ b/thirdparty/libwebp/src/utils/huffman_utils.c @@ -91,7 +91,8 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, assert(code_lengths_size != 0); assert(code_lengths != NULL); - assert(root_table != NULL); + assert((root_table != NULL && sorted != NULL) || + (root_table == NULL && sorted == NULL)); assert(root_bits > 0); // Build histogram of code lengths. @@ -120,16 +121,22 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, for (symbol = 0; symbol < code_lengths_size; ++symbol) { const int symbol_code_length = code_lengths[symbol]; if (code_lengths[symbol] > 0) { - sorted[offset[symbol_code_length]++] = symbol; + if (sorted != NULL) { + sorted[offset[symbol_code_length]++] = symbol; + } else { + offset[symbol_code_length]++; + } } } // Special case code with only one value. if (offset[MAX_ALLOWED_CODE_LENGTH] == 1) { - HuffmanCode code; - code.bits = 0; - code.value = (uint16_t)sorted[0]; - ReplicateValue(table, 1, total_size, code); + if (sorted != NULL) { + HuffmanCode code; + code.bits = 0; + code.value = (uint16_t)sorted[0]; + ReplicateValue(table, 1, total_size, code); + } return total_size; } @@ -151,6 +158,7 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, if (num_open < 0) { return 0; } + if (root_table == NULL) continue; for (; count[len] > 0; --count[len]) { HuffmanCode code; code.bits = (uint8_t)len; @@ -169,6 +177,7 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, if (num_open < 0) { return 0; } + if (root_table == NULL) continue; for (; count[len] > 0; --count[len]) { HuffmanCode code; if ((key & mask) != low) { @@ -206,7 +215,10 @@ int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, const int code_lengths[], int code_lengths_size) { int total_size; assert(code_lengths_size <= MAX_CODE_LENGTHS_SIZE); - if (code_lengths_size <= SORTED_SIZE_CUTOFF) { + if (root_table == NULL) { + total_size = BuildHuffmanTable(NULL, root_bits, + code_lengths, code_lengths_size, NULL); + } else if (code_lengths_size <= SORTED_SIZE_CUTOFF) { // use local stack-allocated array. uint16_t sorted[SORTED_SIZE_CUTOFF]; total_size = BuildHuffmanTable(root_table, root_bits, diff --git a/thirdparty/libwebp/src/utils/huffman_utils.h b/thirdparty/libwebp/src/utils/huffman_utils.h index ff7ef17f3b..13b7ad1ac4 100644 --- a/thirdparty/libwebp/src/utils/huffman_utils.h +++ b/thirdparty/libwebp/src/utils/huffman_utils.h @@ -78,6 +78,8 @@ void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups); // the huffman table. // Returns built table size or 0 in case of error (invalid tree or // memory error). +// If root_table is NULL, it returns 0 if a lookup cannot be built, something +// > 0 otherwise (but not the table size). int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, const int code_lengths[], int code_lengths_size); diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.c b/thirdparty/libwebp/src/utils/rescaler_utils.c index 90e2ea76a1..4bcae24af5 100644 --- a/thirdparty/libwebp/src/utils/rescaler_utils.c +++ b/thirdparty/libwebp/src/utils/rescaler_utils.c @@ -84,14 +84,14 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height, int height = *scaled_height; // if width is unspecified, scale original proportionally to height ratio. - if (width == 0) { + if (width == 0 && src_height > 0) { width = - (int)(((uint64_t)src_width * height + src_height / 2) / src_height); + (int)(((uint64_t)src_width * height + src_height - 1) / src_height); } // if height is unspecified, scale original proportionally to width ratio. - if (height == 0) { + if (height == 0 && src_width > 0) { height = - (int)(((uint64_t)src_height * width + src_width / 2) / src_width); + (int)(((uint64_t)src_height * width + src_width - 1) / src_width); } // Check if the overall dimensions still make sense. if (width <= 0 || height <= 0) { diff --git a/thirdparty/libwebp/src/utils/thread_utils.c b/thirdparty/libwebp/src/utils/thread_utils.c index 2052b6b006..438296b45f 100644 --- a/thirdparty/libwebp/src/utils/thread_utils.c +++ b/thirdparty/libwebp/src/utils/thread_utils.c @@ -217,8 +217,12 @@ static THREADFN ThreadLoop(void* ptr) { done = 1; } // signal to the main thread that we're done (for Sync()) - pthread_cond_signal(&impl->condition_); + // Note the associated mutex does not need to be held when signaling the + // condition. Unlocking the mutex first may improve performance in some + // implementations, avoiding the case where the waiting thread can't + // reacquire the mutex when woken. pthread_mutex_unlock(&impl->mutex_); + pthread_cond_signal(&impl->condition_); } return THREAD_RETURN(NULL); // Thread is finished } @@ -240,7 +244,13 @@ static void ChangeState(WebPWorker* const worker, WebPWorkerStatus new_status) { // assign new status and release the working thread if needed if (new_status != OK) { worker->status_ = new_status; + // Note the associated mutex does not need to be held when signaling the + // condition. Unlocking the mutex first may improve performance in some + // implementations, avoiding the case where the waiting thread can't + // reacquire the mutex when woken. + pthread_mutex_unlock(&impl->mutex_); pthread_cond_signal(&impl->condition_); + return; } } pthread_mutex_unlock(&impl->mutex_); diff --git a/thirdparty/libwebp/src/utils/utils.h b/thirdparty/libwebp/src/utils/utils.h index c7620f91ec..2a3ec92678 100644 --- a/thirdparty/libwebp/src/utils/utils.h +++ b/thirdparty/libwebp/src/utils/utils.h @@ -92,14 +92,14 @@ static WEBP_INLINE uint32_t GetLE32(const uint8_t* const data) { // Store 16, 24 or 32 bits in little-endian order. static WEBP_INLINE void PutLE16(uint8_t* const data, int val) { assert(val < (1 << 16)); - data[0] = (val >> 0); - data[1] = (val >> 8); + data[0] = (val >> 0) & 0xff; + data[1] = (val >> 8) & 0xff; } static WEBP_INLINE void PutLE24(uint8_t* const data, int val) { assert(val < (1 << 24)); PutLE16(data, val & 0xffff); - data[2] = (val >> 16); + data[2] = (val >> 16) & 0xff; } static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) { diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h index 549cf07730..339f8810aa 100644 --- a/thirdparty/libwebp/src/webp/encode.h +++ b/thirdparty/libwebp/src/webp/encode.h @@ -62,6 +62,10 @@ WEBP_EXTERN size_t WebPEncodeBGRA(const uint8_t* bgra, // These functions are the equivalent of the above, but compressing in a // lossless manner. Files are usually larger than lossy format, but will // not suffer any compression loss. +// Note these functions, like the lossy versions, use the library's default +// settings. For lossless this means 'exact' is disabled. RGB values in +// transparent areas will be modified to improve compression. To avoid this, +// use WebPEncode() and set WebPConfig::exact to 1. WEBP_EXTERN size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height, int stride, uint8_t** output); diff --git a/thirdparty/misc/stb_truetype.h b/thirdparty/misc/stb_truetype.h deleted file mode 100644 index 72299ea86d..0000000000 --- a/thirdparty/misc/stb_truetype.h +++ /dev/null @@ -1,4882 +0,0 @@ -// stb_truetype.h - v1.21 - public domain -// authored from 2009-2016 by Sean Barrett / RAD Game Tools -// -// This library processes TrueType files: -// parse files -// extract glyph metrics -// extract glyph shapes -// render glyphs to one-channel bitmaps with antialiasing (box filter) -// render glyphs to one-channel SDF bitmaps (signed-distance field/function) -// -// Todo: -// non-MS cmaps -// crashproof on bad data -// hinting? (no longer patented) -// cleartype-style AA? -// optimize: use simple memory allocator for intermediates -// optimize: build edge-list directly from curves -// optimize: rasterize directly from curves? -// -// ADDITIONAL CONTRIBUTORS -// -// Mikko Mononen: compound shape support, more cmap formats -// Tor Andersson: kerning, subpixel rendering -// Dougall Johnson: OpenType / Type 2 font handling -// Daniel Ribeiro Maciel: basic GPOS-based kerning -// -// Misc other: -// Ryan Gordon -// Simon Glass -// github:IntellectualKitty -// Imanol Celaya -// Daniel Ribeiro Maciel -// -// Bug/warning reports/fixes: -// "Zer" on mollyrocket Fabian "ryg" Giesen -// Cass Everitt Martins Mozeiko -// stoiko (Haemimont Games) Cap Petschulat -// Brian Hook Omar Cornut -// Walter van Niftrik github:aloucks -// David Gow Peter LaValle -// David Given Sergey Popov -// Ivan-Assen Ivanov Giumo X. Clanjor -// Anthony Pesch Higor Euripedes -// Johan Duparc Thomas Fields -// Hou Qiming Derek Vinyard -// Rob Loach Cort Stratton -// Kenney Phillis Jr. github:oyvindjam -// Brian Costabile github:vassvik -// -// VERSION HISTORY -// -// 1.21 (2019-02-25) fix warning -// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics() -// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod -// 1.18 (2018-01-29) add missing function -// 1.17 (2017-07-23) make more arguments const; doc fix -// 1.16 (2017-07-12) SDF support -// 1.15 (2017-03-03) make more arguments const -// 1.14 (2017-01-16) num-fonts-in-TTC function -// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts -// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual -// 1.11 (2016-04-02) fix unused-variable warning -// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef -// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly -// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges -// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; -// variant PackFontRanges to pack and render in separate phases; -// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); -// fixed an assert() bug in the new rasterizer -// replace assert() with STBTT_assert() in new rasterizer -// -// Full history can be found at the end of this file. -// -// LICENSE -// -// See end of file for license information. -// -// USAGE -// -// Include this file in whatever places need to refer to it. In ONE C/C++ -// file, write: -// #define STB_TRUETYPE_IMPLEMENTATION -// before the #include of this file. This expands out the actual -// implementation into that C/C++ file. -// -// To make the implementation private to the file that generates the implementation, -// #define STBTT_STATIC -// -// Simple 3D API (don't ship this, but it's fine for tools and quick start) -// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture -// stbtt_GetBakedQuad() -- compute quad to draw for a given char -// -// Improved 3D API (more shippable): -// #include "stb_rect_pack.h" -- optional, but you really want it -// stbtt_PackBegin() -// stbtt_PackSetOversampling() -- for improved quality on small fonts -// stbtt_PackFontRanges() -- pack and renders -// stbtt_PackEnd() -// stbtt_GetPackedQuad() -// -// "Load" a font file from a memory buffer (you have to keep the buffer loaded) -// stbtt_InitFont() -// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections -// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections -// -// Render a unicode codepoint to a bitmap -// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap -// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide -// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be -// -// Character advance/positioning -// stbtt_GetCodepointHMetrics() -// stbtt_GetFontVMetrics() -// stbtt_GetFontVMetricsOS2() -// stbtt_GetCodepointKernAdvance() -// -// Starting with version 1.06, the rasterizer was replaced with a new, -// faster and generally-more-precise rasterizer. The new rasterizer more -// accurately measures pixel coverage for anti-aliasing, except in the case -// where multiple shapes overlap, in which case it overestimates the AA pixel -// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If -// this turns out to be a problem, you can re-enable the old rasterizer with -// #define STBTT_RASTERIZER_VERSION 1 -// which will incur about a 15% speed hit. -// -// ADDITIONAL DOCUMENTATION -// -// Immediately after this block comment are a series of sample programs. -// -// After the sample programs is the "header file" section. This section -// includes documentation for each API function. -// -// Some important concepts to understand to use this library: -// -// Codepoint -// Characters are defined by unicode codepoints, e.g. 65 is -// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is -// the hiragana for "ma". -// -// Glyph -// A visual character shape (every codepoint is rendered as -// some glyph) -// -// Glyph index -// A font-specific integer ID representing a glyph -// -// Baseline -// Glyph shapes are defined relative to a baseline, which is the -// bottom of uppercase characters. Characters extend both above -// and below the baseline. -// -// Current Point -// As you draw text to the screen, you keep track of a "current point" -// which is the origin of each character. The current point's vertical -// position is the baseline. Even "baked fonts" use this model. -// -// Vertical Font Metrics -// The vertical qualities of the font, used to vertically position -// and space the characters. See docs for stbtt_GetFontVMetrics. -// -// Font Size in Pixels or Points -// The preferred interface for specifying font sizes in stb_truetype -// is to specify how tall the font's vertical extent should be in pixels. -// If that sounds good enough, skip the next paragraph. -// -// Most font APIs instead use "points", which are a common typographic -// measurement for describing font size, defined as 72 points per inch. -// stb_truetype provides a point API for compatibility. However, true -// "per inch" conventions don't make much sense on computer displays -// since different monitors have different number of pixels per -// inch. For example, Windows traditionally uses a convention that -// there are 96 pixels per inch, thus making 'inch' measurements have -// nothing to do with inches, and thus effectively defining a point to -// be 1.333 pixels. Additionally, the TrueType font data provides -// an explicit scale factor to scale a given font's glyphs to points, -// but the author has observed that this scale factor is often wrong -// for non-commercial fonts, thus making fonts scaled in points -// according to the TrueType spec incoherently sized in practice. -// -// DETAILED USAGE: -// -// Scale: -// Select how high you want the font to be, in points or pixels. -// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute -// a scale factor SF that will be used by all other functions. -// -// Baseline: -// You need to select a y-coordinate that is the baseline of where -// your text will appear. Call GetFontBoundingBox to get the baseline-relative -// bounding box for all characters. SF*-y0 will be the distance in pixels -// that the worst-case character could extend above the baseline, so if -// you want the top edge of characters to appear at the top of the -// screen where y=0, then you would set the baseline to SF*-y0. -// -// Current point: -// Set the current point where the first character will appear. The -// first character could extend left of the current point; this is font -// dependent. You can either choose a current point that is the leftmost -// point and hope, or add some padding, or check the bounding box or -// left-side-bearing of the first character to be displayed and set -// the current point based on that. -// -// Displaying a character: -// Compute the bounding box of the character. It will contain signed values -// relative to <current_point, baseline>. I.e. if it returns x0,y0,x1,y1, -// then the character should be displayed in the rectangle from -// <current_point+SF*x0, baseline+SF*y0> to <current_point+SF*x1,baseline+SF*y1). -// -// Advancing for the next character: -// Call GlyphHMetrics, and compute 'current_point += SF * advance'. -// -// -// ADVANCED USAGE -// -// Quality: -// -// - Use the functions with Subpixel at the end to allow your characters -// to have subpixel positioning. Since the font is anti-aliased, not -// hinted, this is very import for quality. (This is not possible with -// baked fonts.) -// -// - Kerning is now supported, and if you're supporting subpixel rendering -// then kerning is worth using to give your text a polished look. -// -// Performance: -// -// - Convert Unicode codepoints to glyph indexes and operate on the glyphs; -// if you don't do this, stb_truetype is forced to do the conversion on -// every call. -// -// - There are a lot of memory allocations. We should modify it to take -// a temp buffer and allocate from the temp buffer (without freeing), -// should help performance a lot. -// -// NOTES -// -// The system uses the raw data found in the .ttf file without changing it -// and without building auxiliary data structures. This is a bit inefficient -// on little-endian systems (the data is big-endian), but assuming you're -// caching the bitmaps or glyph shapes this shouldn't be a big deal. -// -// It appears to be very hard to programmatically determine what font a -// given file is in a general way. I provide an API for this, but I don't -// recommend it. -// -// -// PERFORMANCE MEASUREMENTS FOR 1.06: -// -// 32-bit 64-bit -// Previous release: 8.83 s 7.68 s -// Pool allocations: 7.72 s 6.34 s -// Inline sort : 6.54 s 5.65 s -// New rasterizer : 5.63 s 5.00 s - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -//// -//// SAMPLE PROGRAMS -//// -// -// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless -// -#if 0 -#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation -#include "stb_truetype.h" - -unsigned char ttf_buffer[1<<20]; -unsigned char temp_bitmap[512*512]; - -stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs -GLuint ftex; - -void my_stbtt_initfont(void) -{ - fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb")); - stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits! - // can free ttf_buffer at this point - glGenTextures(1, &ftex); - glBindTexture(GL_TEXTURE_2D, ftex); - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap); - // can free temp_bitmap at this point - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); -} - -void my_stbtt_print(float x, float y, char *text) -{ - // assume orthographic projection with units = screen pixels, origin at top left - glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, ftex); - glBegin(GL_QUADS); - while (*text) { - if (*text >= 32 && *text < 128) { - stbtt_aligned_quad q; - stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9 - glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y0); - glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y0); - glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y1); - glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y1); - } - ++text; - } - glEnd(); -} -#endif -// -// -////////////////////////////////////////////////////////////////////////////// -// -// Complete program (this compiles): get a single bitmap, print as ASCII art -// -#if 0 -#include <stdio.h> -#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation -#include "stb_truetype.h" - -char ttf_buffer[1<<25]; - -int main(int argc, char **argv) -{ - stbtt_fontinfo font; - unsigned char *bitmap; - int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20); - - fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb")); - - stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0)); - bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0); - - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) - putchar(" .:ioVM@"[bitmap[j*w+i]>>5]); - putchar('\n'); - } - return 0; -} -#endif -// -// Output: -// -// .ii. -// @@@@@@. -// V@Mio@@o -// :i. V@V -// :oM@@M -// :@@@MM@M -// @@o o@M -// :@@. M@M -// @@@o@@@@ -// :M@@V:@@. -// -////////////////////////////////////////////////////////////////////////////// -// -// Complete program: print "Hello World!" banner, with bugs -// -#if 0 -char buffer[24<<20]; -unsigned char screen[20][79]; - -int main(int arg, char **argv) -{ - stbtt_fontinfo font; - int i,j,ascent,baseline,ch=0; - float scale, xpos=2; // leave a little padding in case the character extends left - char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness - - fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb")); - stbtt_InitFont(&font, buffer, 0); - - scale = stbtt_ScaleForPixelHeight(&font, 15); - stbtt_GetFontVMetrics(&font, &ascent,0,0); - baseline = (int) (ascent*scale); - - while (text[ch]) { - int advance,lsb,x0,y0,x1,y1; - float x_shift = xpos - (float) floor(xpos); - stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb); - stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1); - stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]); - // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong - // because this API is really for baking character bitmaps into textures. if you want to render - // a sequence of characters, you really need to render each bitmap to a temp buffer, then - // "alpha blend" that into the working buffer - xpos += (advance * scale); - if (text[ch+1]) - xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]); - ++ch; - } - - for (j=0; j < 20; ++j) { - for (i=0; i < 78; ++i) - putchar(" .:ioVM@"[screen[j][i]>>5]); - putchar('\n'); - } - - return 0; -} -#endif - - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -//// -//// INTEGRATION WITH YOUR CODEBASE -//// -//// The following sections allow you to supply alternate definitions -//// of C library functions used by stb_truetype, e.g. if you don't -//// link with the C runtime library. - -#ifdef STB_TRUETYPE_IMPLEMENTATION - // #define your own (u)stbtt_int8/16/32 before including to override this - #ifndef stbtt_uint8 - typedef unsigned char stbtt_uint8; - typedef signed char stbtt_int8; - typedef unsigned short stbtt_uint16; - typedef signed short stbtt_int16; - typedef unsigned int stbtt_uint32; - typedef signed int stbtt_int32; - #endif - - typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1]; - typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1]; - - // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h - #ifndef STBTT_ifloor - #include <math.h> - #define STBTT_ifloor(x) ((int) floor(x)) - #define STBTT_iceil(x) ((int) ceil(x)) - #endif - - #ifndef STBTT_sqrt - #include <math.h> - #define STBTT_sqrt(x) sqrt(x) - #define STBTT_pow(x,y) pow(x,y) - #endif - - #ifndef STBTT_fmod - #include <math.h> - #define STBTT_fmod(x,y) fmod(x,y) - #endif - - #ifndef STBTT_cos - #include <math.h> - #define STBTT_cos(x) cos(x) - #define STBTT_acos(x) acos(x) - #endif - - #ifndef STBTT_fabs - #include <math.h> - #define STBTT_fabs(x) fabs(x) - #endif - - // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h - #ifndef STBTT_malloc - #include <stdlib.h> - #define STBTT_malloc(x,u) ((void)(u),malloc(x)) - #define STBTT_free(x,u) ((void)(u),free(x)) - #endif - - #ifndef STBTT_assert - #include <assert.h> - #define STBTT_assert(x) assert(x) - #endif - - #ifndef STBTT_strlen - #include <string.h> - #define STBTT_strlen(x) strlen(x) - #endif - - #ifndef STBTT_memcpy - #include <string.h> - #define STBTT_memcpy memcpy - #define STBTT_memset memset - #endif -#endif - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -//// -//// INTERFACE -//// -//// - -#ifndef __STB_INCLUDE_STB_TRUETYPE_H__ -#define __STB_INCLUDE_STB_TRUETYPE_H__ - -#ifdef STBTT_STATIC -#define STBTT_DEF static -#else -#define STBTT_DEF extern -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// private structure -typedef struct -{ - unsigned char *data; - int cursor; - int size; -} stbtt__buf; - -////////////////////////////////////////////////////////////////////////////// -// -// TEXTURE BAKING API -// -// If you use this API, you only have to call two functions ever. -// - -typedef struct -{ - unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap - float xoff,yoff,xadvance; -} stbtt_bakedchar; - -STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) - float pixel_height, // height of font in pixels - unsigned char *pixels, int pw, int ph, // bitmap to be filled in - int first_char, int num_chars, // characters to bake - stbtt_bakedchar *chardata); // you allocate this, it's num_chars long -// if return is positive, the first unused row of the bitmap -// if return is negative, returns the negative of the number of characters that fit -// if return is 0, no characters fit and no rows were used -// This uses a very crappy packing. - -typedef struct -{ - float x0,y0,s0,t0; // top-left - float x1,y1,s1,t1; // bottom-right -} stbtt_aligned_quad; - -STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above - int char_index, // character to display - float *xpos, float *ypos, // pointers to current position in screen pixel space - stbtt_aligned_quad *q, // output: quad to draw - int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier -// Call GetBakedQuad with char_index = 'character - first_char', and it -// creates the quad you need to draw and advances the current position. -// -// The coordinate system used assumes y increases downwards. -// -// Characters will extend both above and below the current position; -// see discussion of "BASELINE" above. -// -// It's inefficient; you might want to c&p it and optimize it. - -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap); -// Query the font vertical metrics without having to create a font first. - - -////////////////////////////////////////////////////////////////////////////// -// -// NEW TEXTURE BAKING API -// -// This provides options for packing multiple fonts into one atlas, not -// perfectly but better than nothing. - -typedef struct -{ - unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap - float xoff,yoff,xadvance; - float xoff2,yoff2; -} stbtt_packedchar; - -typedef struct stbtt_pack_context stbtt_pack_context; -typedef struct stbtt_fontinfo stbtt_fontinfo; -#ifndef STB_RECT_PACK_VERSION -typedef struct stbrp_rect stbrp_rect; -#endif - -STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context); -// Initializes a packing context stored in the passed-in stbtt_pack_context. -// Future calls using this context will pack characters into the bitmap passed -// in here: a 1-channel bitmap that is width * height. stride_in_bytes is -// the distance from one row to the next (or 0 to mean they are packed tightly -// together). "padding" is the amount of padding to leave between each -// character (normally you want '1' for bitmaps you'll use as textures with -// bilinear filtering). -// -// Returns 0 on failure, 1 on success. - -STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc); -// Cleans up the packing context and frees all memory. - -#define STBTT_POINT_SIZE(x) (-(x)) - -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, - int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range); -// Creates character bitmaps from the font_index'th font found in fontdata (use -// font_index=0 if you don't know what that is). It creates num_chars_in_range -// bitmaps for characters with unicode values starting at first_unicode_char_in_range -// and increasing. Data for how to render them is stored in chardata_for_range; -// pass these to stbtt_GetPackedQuad to get back renderable quads. -// -// font_size is the full height of the character from ascender to descender, -// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed -// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE() -// and pass that result as 'font_size': -// ..., 20 , ... // font max minus min y is 20 pixels tall -// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall - -typedef struct -{ - float font_size; - int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint - int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints - int num_chars; - stbtt_packedchar *chardata_for_range; // output - unsigned char h_oversample, v_oversample; // don't set these, they're used internally -} stbtt_pack_range; - -STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges); -// Creates character bitmaps from multiple ranges of characters stored in -// ranges. This will usually create a better-packed bitmap than multiple -// calls to stbtt_PackFontRange. Note that you can call this multiple -// times within a single PackBegin/PackEnd. - -STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample); -// Oversampling a font increases the quality by allowing higher-quality subpixel -// positioning, and is especially valuable at smaller text sizes. -// -// This function sets the amount of oversampling for all following calls to -// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given -// pack context. The default (no oversampling) is achieved by h_oversample=1 -// and v_oversample=1. The total number of pixels required is -// h_oversample*v_oversample larger than the default; for example, 2x2 -// oversampling requires 4x the storage of 1x1. For best results, render -// oversampled textures with bilinear filtering. Look at the readme in -// stb/tests/oversample for information about oversampled fonts -// -// To use with PackFontRangesGather etc., you must set it before calls -// call to PackFontRangesGatherRects. - -STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip); -// If skip != 0, this tells stb_truetype to skip any codepoints for which -// there is no corresponding glyph. If skip=0, which is the default, then -// codepoints without a glyph recived the font's "missing character" glyph, -// typically an empty box by convention. - -STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above - int char_index, // character to display - float *xpos, float *ypos, // pointers to current position in screen pixel space - stbtt_aligned_quad *q, // output: quad to draw - int align_to_integer); - -STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); -STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects); -STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects); -// Calling these functions in sequence is roughly equivalent to calling -// stbtt_PackFontRanges(). If you more control over the packing of multiple -// fonts, or if you want to pack custom data into a font texture, take a look -// at the source to of stbtt_PackFontRanges() and create a custom version -// using these functions, e.g. call GatherRects multiple times, -// building up a single array of rects, then call PackRects once, -// then call RenderIntoRects repeatedly. This may result in a -// better packing than calling PackFontRanges multiple times -// (or it may not). - -// this is an opaque structure that you shouldn't mess with which holds -// all the context needed from PackBegin to PackEnd. -struct stbtt_pack_context { - void *user_allocator_context; - void *pack_info; - int width; - int height; - int stride_in_bytes; - int padding; - int skip_missing; - unsigned int h_oversample, v_oversample; - unsigned char *pixels; - void *nodes; -}; - -////////////////////////////////////////////////////////////////////////////// -// -// FONT LOADING -// -// - -STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data); -// This function will determine the number of fonts in a font file. TrueType -// collection (.ttc) files may contain multiple fonts, while TrueType font -// (.ttf) files only contain one font. The number of fonts can be used for -// indexing with the previous function where the index is between zero and one -// less than the total fonts. If an error occurs, -1 is returned. - -STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index); -// Each .ttf/.ttc file may have more than one font. Each font has a sequential -// index number starting from 0. Call this function to get the font offset for -// a given index; it returns -1 if the index is out of range. A regular .ttf -// file will only define one font and it always be at offset 0, so it will -// return '0' for index 0, and -1 for all other indices. - -// The following structure is defined publicly so you can declare one on -// the stack or as a global or etc, but you should treat it as opaque. -struct stbtt_fontinfo -{ - void * userdata; - unsigned char * data; // pointer to .ttf file - int fontstart; // offset of start of font - - int numGlyphs; // number of glyphs, needed for range checking - - int loca,head,glyf,hhea,hmtx,kern,gpos; // table locations as offset from start of .ttf - int index_map; // a cmap mapping for our chosen character encoding - int indexToLocFormat; // format needed to map from glyph index to glyph - - stbtt__buf cff; // cff font data - stbtt__buf charstrings; // the charstring index - stbtt__buf gsubrs; // global charstring subroutines index - stbtt__buf subrs; // private charstring subroutines index - stbtt__buf fontdicts; // array of font dicts - stbtt__buf fdselect; // map from glyph to fontdict -}; - -STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset); -// Given an offset into the file that defines a font, this function builds -// the necessary cached info for the rest of the system. You must allocate -// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't -// need to do anything special to free it, because the contents are pure -// value data with no additional data structures. Returns 0 on failure. - - -////////////////////////////////////////////////////////////////////////////// -// -// CHARACTER TO GLYPH-INDEX CONVERSIOn - -STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint); -// If you're going to perform multiple operations on the same character -// and you want a speed-up, call this function with the character you're -// going to process, then use glyph-based functions instead of the -// codepoint-based functions. -// Returns 0 if the character codepoint is not defined in the font. - - -////////////////////////////////////////////////////////////////////////////// -// -// CHARACTER PROPERTIES -// - -STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels); -// computes a scale factor to produce a font whose "height" is 'pixels' tall. -// Height is measured as the distance from the highest ascender to the lowest -// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics -// and computing: -// scale = pixels / (ascent - descent) -// so if you prefer to measure height by the ascent only, use a similar calculation. - -STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels); -// computes a scale factor to produce a font whose EM size is mapped to -// 'pixels' tall. This is probably what traditional APIs compute, but -// I'm not positive. - -STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap); -// ascent is the coordinate above the baseline the font extends; descent -// is the coordinate below the baseline the font extends (i.e. it is typically negative) -// lineGap is the spacing between one row's descent and the next row's ascent... -// so you should advance the vertical position by "*ascent - *descent + *lineGap" -// these are expressed in unscaled coordinates, so you must multiply by -// the scale factor for a given size - -STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap); -// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2 -// table (specific to MS/Windows TTF files). -// -// Returns 1 on success (table present), 0 on failure. - -STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1); -// the bounding box around all possible characters - -STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing); -// leftSideBearing is the offset from the current horizontal position to the left edge of the character -// advanceWidth is the offset from the current horizontal position to the next horizontal position -// these are expressed in unscaled coordinates - -STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2); -// an additional amount to add to the 'advance' value between ch1 and ch2 - -STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1); -// Gets the bounding box of the visible part of the glyph, in unscaled coordinates - -STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing); -STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2); -STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); -// as above, but takes one or more glyph indices for greater efficiency - - -////////////////////////////////////////////////////////////////////////////// -// -// GLYPH SHAPES (you probably don't need these, but they have to go before -// the bitmaps for C declaration-order reasons) -// - -#ifndef STBTT_vmove // you can predefine these to use different values (but why?) - enum { - STBTT_vmove=1, - STBTT_vline, - STBTT_vcurve, - STBTT_vcubic - }; -#endif - -#ifndef stbtt_vertex // you can predefine this to use different values - // (we share this with other code at RAD) - #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file - typedef struct - { - stbtt_vertex_type x,y,cx,cy,cx1,cy1; - unsigned char type,padding; - } stbtt_vertex; -#endif - -STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index); -// returns non-zero if nothing is drawn for this glyph - -STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices); -STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices); -// returns # of vertices and fills *vertices with the pointer to them -// these are expressed in "unscaled" coordinates -// -// The shape is a series of contours. Each one starts with -// a STBTT_moveto, then consists of a series of mixed -// STBTT_lineto and STBTT_curveto segments. A lineto -// draws a line from previous endpoint to its x,y; a curveto -// draws a quadratic bezier from previous endpoint to -// its x,y, using cx,cy as the bezier control point. - -STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices); -// frees the data allocated above - -////////////////////////////////////////////////////////////////////////////// -// -// BITMAP RENDERING -// - -STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata); -// frees the bitmap allocated below - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff); -// allocates a large-enough single-channel 8bpp bitmap and renders the -// specified character/glyph at the specified scale into it, with -// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque). -// *width & *height are filled out with the width & height of the bitmap, -// which is stored left-to-right, top-to-bottom. -// -// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff); -// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel -// shift for the character - -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint); -// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap -// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap -// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the -// width and height and positioning info for it first. - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint); -// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel -// shift for the character - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint); -// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering -// is performed (see stbtt_PackSetOversampling) - -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); -// get the bbox of the bitmap centered around the glyph origin; so the -// bitmap width is ix1-ix0, height is iy1-iy0, and location to place -// the bitmap top left is (leftSideBearing*scale,iy0). -// (Note that the bitmap uses y-increases-down, but the shape uses -// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.) - -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); -// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel -// shift for the character - -// the following functions are equivalent to the above functions, but operate -// on glyph indices instead of Unicode codepoints (for efficiency) -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph); -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph); -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1); -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1); - - -// @TODO: don't expose this structure -typedef struct -{ - int w,h,stride; - unsigned char *pixels; -} stbtt__bitmap; - -// rasterize a shape with quadratic beziers into a bitmap -STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into - float flatness_in_pixels, // allowable error of curve in pixels - stbtt_vertex *vertices, // array of vertices defining shape - int num_verts, // number of vertices in above array - float scale_x, float scale_y, // scale applied to input vertices - float shift_x, float shift_y, // translation applied to input vertices - int x_off, int y_off, // another translation applied to input - int invert, // if non-zero, vertically flip shape - void *userdata); // context for to STBTT_MALLOC - -////////////////////////////////////////////////////////////////////////////// -// -// Signed Distance Function (or Field) rendering - -STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata); -// frees the SDF bitmap allocated below - -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff); -// These functions compute a discretized SDF field for a single character, suitable for storing -// in a single-channel texture, sampling with bilinear filtering, and testing against -// larger than some threshold to produce scalable fonts. -// info -- the font -// scale -- controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap -// glyph/codepoint -- the character to generate the SDF for -// padding -- extra "pixels" around the character which are filled with the distance to the character (not 0), -// which allows effects like bit outlines -// onedge_value -- value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character) -// pixel_dist_scale -- what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale) -// if positive, > onedge_value is inside; if negative, < onedge_value is inside -// width,height -- output height & width of the SDF bitmap (including padding) -// xoff,yoff -- output origin of the character -// return value -- a 2D array of bytes 0..255, width*height in size -// -// pixel_dist_scale & onedge_value are a scale & bias that allows you to make -// optimal use of the limited 0..255 for your application, trading off precision -// and special effects. SDF values outside the range 0..255 are clamped to 0..255. -// -// Example: -// scale = stbtt_ScaleForPixelHeight(22) -// padding = 5 -// onedge_value = 180 -// pixel_dist_scale = 180/5.0 = 36.0 -// -// This will create an SDF bitmap in which the character is about 22 pixels -// high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled -// shape, sample the SDF at each pixel and fill the pixel if the SDF value -// is greater than or equal to 180/255. (You'll actually want to antialias, -// which is beyond the scope of this example.) Additionally, you can compute -// offset outlines (e.g. to stroke the character border inside & outside, -// or only outside). For example, to fill outside the character up to 3 SDF -// pixels, you would compare against (180-36.0*3)/255 = 72/255. The above -// choice of variables maps a range from 5 pixels outside the shape to -// 2 pixels inside the shape to 0..255; this is intended primarily for apply -// outside effects only (the interior range is needed to allow proper -// antialiasing of the font at *smaller* sizes) -// -// The function computes the SDF analytically at each SDF pixel, not by e.g. -// building a higher-res bitmap and approximating it. In theory the quality -// should be as high as possible for an SDF of this size & representation, but -// unclear if this is true in practice (perhaps building a higher-res bitmap -// and computing from that can allow drop-out prevention). -// -// The algorithm has not been optimized at all, so expect it to be slow -// if computing lots of characters or very large sizes. - - - -////////////////////////////////////////////////////////////////////////////// -// -// Finding the right font... -// -// You should really just solve this offline, keep your own tables -// of what font is what, and don't try to get it out of the .ttf file. -// That's because getting it out of the .ttf file is really hard, because -// the names in the file can appear in many possible encodings, in many -// possible languages, and e.g. if you need a case-insensitive comparison, -// the details of that depend on the encoding & language in a complex way -// (actually underspecified in truetype, but also gigantic). -// -// But you can use the provided functions in two possible ways: -// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on -// unicode-encoded names to try to find the font you want; -// you can run this before calling stbtt_InitFont() -// -// stbtt_GetFontNameString() lets you get any of the various strings -// from the file yourself and do your own comparisons on them. -// You have to have called stbtt_InitFont() first. - - -STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags); -// returns the offset (not index) of the font that matches, or -1 if none -// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold". -// if you use any other flag, use a font name like "Arial"; this checks -// the 'macStyle' header field; i don't know if fonts set this consistently -#define STBTT_MACSTYLE_DONTCARE 0 -#define STBTT_MACSTYLE_BOLD 1 -#define STBTT_MACSTYLE_ITALIC 2 -#define STBTT_MACSTYLE_UNDERSCORE 4 -#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0 - -STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2); -// returns 1/0 whether the first string interpreted as utf8 is identical to -// the second string interpreted as big-endian utf16... useful for strings from next func - -STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID); -// returns the string (which may be big-endian double byte, e.g. for unicode) -// and puts the length in bytes in *length. -// -// some of the values for the IDs are below; for more see the truetype spec: -// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html -// http://www.microsoft.com/typography/otspec/name.htm - -enum { // platformID - STBTT_PLATFORM_ID_UNICODE =0, - STBTT_PLATFORM_ID_MAC =1, - STBTT_PLATFORM_ID_ISO =2, - STBTT_PLATFORM_ID_MICROSOFT =3 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_UNICODE - STBTT_UNICODE_EID_UNICODE_1_0 =0, - STBTT_UNICODE_EID_UNICODE_1_1 =1, - STBTT_UNICODE_EID_ISO_10646 =2, - STBTT_UNICODE_EID_UNICODE_2_0_BMP=3, - STBTT_UNICODE_EID_UNICODE_2_0_FULL=4 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT - STBTT_MS_EID_SYMBOL =0, - STBTT_MS_EID_UNICODE_BMP =1, - STBTT_MS_EID_SHIFTJIS =2, - STBTT_MS_EID_UNICODE_FULL =10 -}; - -enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes - STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4, - STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5, - STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6, - STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7 -}; - -enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID... - // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs - STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410, - STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411, - STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412, - STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419, - STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409, - STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D -}; - -enum { // languageID for STBTT_PLATFORM_ID_MAC - STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11, - STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23, - STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32, - STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 , - STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 , - STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33, - STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19 -}; - -#ifdef __cplusplus -} -#endif - -#endif // __STB_INCLUDE_STB_TRUETYPE_H__ - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -//// -//// IMPLEMENTATION -//// -//// - -#ifdef STB_TRUETYPE_IMPLEMENTATION - -#ifndef STBTT_MAX_OVERSAMPLE -#define STBTT_MAX_OVERSAMPLE 8 -#endif - -#if STBTT_MAX_OVERSAMPLE > 255 -#error "STBTT_MAX_OVERSAMPLE cannot be > 255" -#endif - -typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1]; - -#ifndef STBTT_RASTERIZER_VERSION -#define STBTT_RASTERIZER_VERSION 2 -#endif - -#ifdef _MSC_VER -#define STBTT__NOTUSED(v) (void)(v) -#else -#define STBTT__NOTUSED(v) (void)sizeof(v) -#endif - -////////////////////////////////////////////////////////////////////////// -// -// stbtt__buf helpers to parse data from file -// - -static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b) -{ - if (b->cursor >= b->size) - return 0; - return b->data[b->cursor++]; -} - -static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b) -{ - if (b->cursor >= b->size) - return 0; - return b->data[b->cursor]; -} - -static void stbtt__buf_seek(stbtt__buf *b, int o) -{ - STBTT_assert(!(o > b->size || o < 0)); - b->cursor = (o > b->size || o < 0) ? b->size : o; -} - -static void stbtt__buf_skip(stbtt__buf *b, int o) -{ - stbtt__buf_seek(b, b->cursor + o); -} - -static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n) -{ - stbtt_uint32 v = 0; - int i; - STBTT_assert(n >= 1 && n <= 4); - for (i = 0; i < n; i++) - v = (v << 8) | stbtt__buf_get8(b); - return v; -} - -static stbtt__buf stbtt__new_buf(const void *p, size_t size) -{ - stbtt__buf r; - STBTT_assert(size < 0x40000000); - r.data = (stbtt_uint8*) p; - r.size = (int) size; - r.cursor = 0; - return r; -} - -#define stbtt__buf_get16(b) stbtt__buf_get((b), 2) -#define stbtt__buf_get32(b) stbtt__buf_get((b), 4) - -static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s) -{ - stbtt__buf r = stbtt__new_buf(NULL, 0); - if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r; - r.data = b->data + o; - r.size = s; - return r; -} - -static stbtt__buf stbtt__cff_get_index(stbtt__buf *b) -{ - int count, start, offsize; - start = b->cursor; - count = stbtt__buf_get16(b); - if (count) { - offsize = stbtt__buf_get8(b); - STBTT_assert(offsize >= 1 && offsize <= 4); - stbtt__buf_skip(b, offsize * count); - stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1); - } - return stbtt__buf_range(b, start, b->cursor - start); -} - -static stbtt_uint32 stbtt__cff_int(stbtt__buf *b) -{ - int b0 = stbtt__buf_get8(b); - if (b0 >= 32 && b0 <= 246) return b0 - 139; - else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108; - else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108; - else if (b0 == 28) return stbtt__buf_get16(b); - else if (b0 == 29) return stbtt__buf_get32(b); - STBTT_assert(0); - return 0; -} - -static void stbtt__cff_skip_operand(stbtt__buf *b) { - int v, b0 = stbtt__buf_peek8(b); - STBTT_assert(b0 >= 28); - if (b0 == 30) { - stbtt__buf_skip(b, 1); - while (b->cursor < b->size) { - v = stbtt__buf_get8(b); - if ((v & 0xF) == 0xF || (v >> 4) == 0xF) - break; - } - } else { - stbtt__cff_int(b); - } -} - -static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key) -{ - stbtt__buf_seek(b, 0); - while (b->cursor < b->size) { - int start = b->cursor, end, op; - while (stbtt__buf_peek8(b) >= 28) - stbtt__cff_skip_operand(b); - end = b->cursor; - op = stbtt__buf_get8(b); - if (op == 12) op = stbtt__buf_get8(b) | 0x100; - if (op == key) return stbtt__buf_range(b, start, end-start); - } - return stbtt__buf_range(b, 0, 0); -} - -static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out) -{ - int i; - stbtt__buf operands = stbtt__dict_get(b, key); - for (i = 0; i < outcount && operands.cursor < operands.size; i++) - out[i] = stbtt__cff_int(&operands); -} - -static int stbtt__cff_index_count(stbtt__buf *b) -{ - stbtt__buf_seek(b, 0); - return stbtt__buf_get16(b); -} - -static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i) -{ - int count, offsize, start, end; - stbtt__buf_seek(&b, 0); - count = stbtt__buf_get16(&b); - offsize = stbtt__buf_get8(&b); - STBTT_assert(i >= 0 && i < count); - STBTT_assert(offsize >= 1 && offsize <= 4); - stbtt__buf_skip(&b, i*offsize); - start = stbtt__buf_get(&b, offsize); - end = stbtt__buf_get(&b, offsize); - return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start); -} - -////////////////////////////////////////////////////////////////////////// -// -// accessors to parse data from file -// - -// on platforms that don't allow misaligned reads, if we want to allow -// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE - -#define ttBYTE(p) (* (stbtt_uint8 *) (p)) -#define ttCHAR(p) (* (stbtt_int8 *) (p)) -#define ttFixed(p) ttLONG(p) - -static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } -static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; } -static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } -static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; } - -#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3)) -#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3]) - -static int stbtt__isfont(stbtt_uint8 *font) -{ - // check the version number - if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1 - if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this! - if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF - if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0 - if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts - return 0; -} - -// @OPTIMIZE: binary search -static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag) -{ - stbtt_int32 num_tables = ttUSHORT(data+fontstart+4); - stbtt_uint32 tabledir = fontstart + 12; - stbtt_int32 i; - for (i=0; i < num_tables; ++i) { - stbtt_uint32 loc = tabledir + 16*i; - if (stbtt_tag(data+loc+0, tag)) - return ttULONG(data+loc+8); - } - return 0; -} - -static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index) -{ - // if it's just a font, there's only one valid index - if (stbtt__isfont(font_collection)) - return index == 0 ? 0 : -1; - - // check if it's a TTC - if (stbtt_tag(font_collection, "ttcf")) { - // version 1? - if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { - stbtt_int32 n = ttLONG(font_collection+8); - if (index >= n) - return -1; - return ttULONG(font_collection+12+index*4); - } - } - return -1; -} - -static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection) -{ - // if it's just a font, there's only one valid font - if (stbtt__isfont(font_collection)) - return 1; - - // check if it's a TTC - if (stbtt_tag(font_collection, "ttcf")) { - // version 1? - if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) { - return ttLONG(font_collection+8); - } - } - return 0; -} - -static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict) -{ - stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 }; - stbtt__buf pdict; - stbtt__dict_get_ints(&fontdict, 18, 2, private_loc); - if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0); - pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]); - stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff); - if (!subrsoff) return stbtt__new_buf(NULL, 0); - stbtt__buf_seek(&cff, private_loc[1]+subrsoff); - return stbtt__cff_get_index(&cff); -} - -static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart) -{ - stbtt_uint32 cmap, t; - stbtt_int32 i,numTables; - - info->data = data; - info->fontstart = fontstart; - info->cff = stbtt__new_buf(NULL, 0); - - cmap = stbtt__find_table(data, fontstart, "cmap"); // required - info->loca = stbtt__find_table(data, fontstart, "loca"); // required - info->head = stbtt__find_table(data, fontstart, "head"); // required - info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required - info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required - info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required - info->kern = stbtt__find_table(data, fontstart, "kern"); // not required - info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required - - if (!cmap || !info->head || !info->hhea || !info->hmtx) - return 0; - if (info->glyf) { - // required for truetype - if (!info->loca) return 0; - } else { - // initialization for CFF / Type2 fonts (OTF) - stbtt__buf b, topdict, topdictidx; - stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0; - stbtt_uint32 cff; - - cff = stbtt__find_table(data, fontstart, "CFF "); - if (!cff) return 0; - - info->fontdicts = stbtt__new_buf(NULL, 0); - info->fdselect = stbtt__new_buf(NULL, 0); - - // @TODO this should use size from table (not 512MB) - info->cff = stbtt__new_buf(data+cff, 512*1024*1024); - b = info->cff; - - // read the header - stbtt__buf_skip(&b, 2); - stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize - - // @TODO the name INDEX could list multiple fonts, - // but we just use the first one. - stbtt__cff_get_index(&b); // name INDEX - topdictidx = stbtt__cff_get_index(&b); - topdict = stbtt__cff_index_get(topdictidx, 0); - stbtt__cff_get_index(&b); // string INDEX - info->gsubrs = stbtt__cff_get_index(&b); - - stbtt__dict_get_ints(&topdict, 17, 1, &charstrings); - stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype); - stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff); - stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff); - info->subrs = stbtt__get_subrs(b, topdict); - - // we only support Type 2 charstrings - if (cstype != 2) return 0; - if (charstrings == 0) return 0; - - if (fdarrayoff) { - // looks like a CID font - if (!fdselectoff) return 0; - stbtt__buf_seek(&b, fdarrayoff); - info->fontdicts = stbtt__cff_get_index(&b); - info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff); - } - - stbtt__buf_seek(&b, charstrings); - info->charstrings = stbtt__cff_get_index(&b); - } - - t = stbtt__find_table(data, fontstart, "maxp"); - if (t) - info->numGlyphs = ttUSHORT(data+t+4); - else - info->numGlyphs = 0xffff; - - // find a cmap encoding table we understand *now* to avoid searching - // later. (todo: could make this installable) - // the same regardless of glyph. - numTables = ttUSHORT(data + cmap + 2); - info->index_map = 0; - for (i=0; i < numTables; ++i) { - stbtt_uint32 encoding_record = cmap + 4 + 8 * i; - // find an encoding we understand: - switch(ttUSHORT(data+encoding_record)) { - case STBTT_PLATFORM_ID_MICROSOFT: - switch (ttUSHORT(data+encoding_record+2)) { - case STBTT_MS_EID_UNICODE_BMP: - case STBTT_MS_EID_UNICODE_FULL: - // MS/Unicode - info->index_map = cmap + ttULONG(data+encoding_record+4); - break; - } - break; - case STBTT_PLATFORM_ID_UNICODE: - // Mac/iOS has these - // all the encodingIDs are unicode, so we don't bother to check it - info->index_map = cmap + ttULONG(data+encoding_record+4); - break; - } - } - if (info->index_map == 0) - return 0; - - info->indexToLocFormat = ttUSHORT(data+info->head + 50); - return 1; -} - -STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint) -{ - stbtt_uint8 *data = info->data; - stbtt_uint32 index_map = info->index_map; - - stbtt_uint16 format = ttUSHORT(data + index_map + 0); - if (format == 0) { // apple byte encoding - stbtt_int32 bytes = ttUSHORT(data + index_map + 2); - if (unicode_codepoint < bytes-6) - return ttBYTE(data + index_map + 6 + unicode_codepoint); - return 0; - } else if (format == 6) { - stbtt_uint32 first = ttUSHORT(data + index_map + 6); - stbtt_uint32 count = ttUSHORT(data + index_map + 8); - if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count) - return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2); - return 0; - } else if (format == 2) { - STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean - return 0; - } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges - stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1; - stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1; - stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10); - stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1; - - // do a binary search of the segments - stbtt_uint32 endCount = index_map + 14; - stbtt_uint32 search = endCount; - - if (unicode_codepoint > 0xffff) - return 0; - - // they lie from endCount .. endCount + segCount - // but searchRange is the nearest power of two, so... - if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2)) - search += rangeShift*2; - - // now decrement to bias correctly to find smallest - search -= 2; - while (entrySelector) { - stbtt_uint16 end; - searchRange >>= 1; - end = ttUSHORT(data + search + searchRange*2); - if (unicode_codepoint > end) - search += searchRange*2; - --entrySelector; - } - search += 2; - - { - stbtt_uint16 offset, start; - stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1); - - STBTT_assert(unicode_codepoint <= ttUSHORT(data + endCount + 2*item)); - start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item); - if (unicode_codepoint < start) - return 0; - - offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item); - if (offset == 0) - return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item)); - - return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item); - } - } else if (format == 12 || format == 13) { - stbtt_uint32 ngroups = ttULONG(data+index_map+12); - stbtt_int32 low,high; - low = 0; high = (stbtt_int32)ngroups; - // Binary search the right group. - while (low < high) { - stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high - stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12); - stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4); - if ((stbtt_uint32) unicode_codepoint < start_char) - high = mid; - else if ((stbtt_uint32) unicode_codepoint > end_char) - low = mid+1; - else { - stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8); - if (format == 12) - return start_glyph + unicode_codepoint-start_char; - else // format == 13 - return start_glyph; - } - } - return 0; // not found - } - // @TODO - STBTT_assert(0); - return 0; -} - -STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices) -{ - return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices); -} - -static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy) -{ - v->type = type; - v->x = (stbtt_int16) x; - v->y = (stbtt_int16) y; - v->cx = (stbtt_int16) cx; - v->cy = (stbtt_int16) cy; -} - -static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index) -{ - int g1,g2; - - STBTT_assert(!info->cff.size); - - if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range - if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format - - if (info->indexToLocFormat == 0) { - g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2; - g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2; - } else { - g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4); - g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4); - } - - return g1==g2 ? -1 : g1; // if length is 0, return -1 -} - -static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1); - -STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) -{ - if (info->cff.size) { - stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1); - } else { - int g = stbtt__GetGlyfOffset(info, glyph_index); - if (g < 0) return 0; - - if (x0) *x0 = ttSHORT(info->data + g + 2); - if (y0) *y0 = ttSHORT(info->data + g + 4); - if (x1) *x1 = ttSHORT(info->data + g + 6); - if (y1) *y1 = ttSHORT(info->data + g + 8); - } - return 1; -} - -STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1) -{ - return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1); -} - -STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index) -{ - stbtt_int16 numberOfContours; - int g; - if (info->cff.size) - return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0; - g = stbtt__GetGlyfOffset(info, glyph_index); - if (g < 0) return 1; - numberOfContours = ttSHORT(info->data + g); - return numberOfContours == 0; -} - -static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off, - stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy) -{ - if (start_off) { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy); - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy); - } else { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy); - else - stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0); - } - return num_vertices; -} - -static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - stbtt_int16 numberOfContours; - stbtt_uint8 *endPtsOfContours; - stbtt_uint8 *data = info->data; - stbtt_vertex *vertices=0; - int num_vertices=0; - int g = stbtt__GetGlyfOffset(info, glyph_index); - - *pvertices = NULL; - - if (g < 0) return 0; - - numberOfContours = ttSHORT(data + g); - - if (numberOfContours > 0) { - stbtt_uint8 flags=0,flagcount; - stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0; - stbtt_int32 x,y,cx,cy,sx,sy, scx,scy; - stbtt_uint8 *points; - endPtsOfContours = (data + g + 10); - ins = ttUSHORT(data + g + 10 + numberOfContours * 2); - points = data + g + 10 + numberOfContours * 2 + 2 + ins; - - n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2); - - m = n + 2*numberOfContours; // a loose bound on how many vertices we might need - vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata); - if (vertices == 0) - return 0; - - next_move = 0; - flagcount=0; - - // in first pass, we load uninterpreted data into the allocated array - // above, shifted to the end of the array so we won't overwrite it when - // we create our final data starting from the front - - off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated - - // first load flags - - for (i=0; i < n; ++i) { - if (flagcount == 0) { - flags = *points++; - if (flags & 8) - flagcount = *points++; - } else - --flagcount; - vertices[off+i].type = flags; - } - - // now load x coordinates - x=0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - if (flags & 2) { - stbtt_int16 dx = *points++; - x += (flags & 16) ? dx : -dx; // ??? - } else { - if (!(flags & 16)) { - x = x + (stbtt_int16) (points[0]*256 + points[1]); - points += 2; - } - } - vertices[off+i].x = (stbtt_int16) x; - } - - // now load y coordinates - y=0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - if (flags & 4) { - stbtt_int16 dy = *points++; - y += (flags & 32) ? dy : -dy; // ??? - } else { - if (!(flags & 32)) { - y = y + (stbtt_int16) (points[0]*256 + points[1]); - points += 2; - } - } - vertices[off+i].y = (stbtt_int16) y; - } - - // now convert them to our format - num_vertices=0; - sx = sy = cx = cy = scx = scy = 0; - for (i=0; i < n; ++i) { - flags = vertices[off+i].type; - x = (stbtt_int16) vertices[off+i].x; - y = (stbtt_int16) vertices[off+i].y; - - if (next_move == i) { - if (i != 0) - num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); - - // now start the new one - start_off = !(flags & 1); - if (start_off) { - // if we start off with an off-curve point, then when we need to find a point on the curve - // where we can start, and we need to save some state for when we wraparound. - scx = x; - scy = y; - if (!(vertices[off+i+1].type & 1)) { - // next point is also a curve point, so interpolate an on-point curve - sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1; - sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1; - } else { - // otherwise just use the next point as our start point - sx = (stbtt_int32) vertices[off+i+1].x; - sy = (stbtt_int32) vertices[off+i+1].y; - ++i; // we're using point i+1 as the starting point, so skip it - } - } else { - sx = x; - sy = y; - } - stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0); - was_off = 0; - next_move = 1 + ttUSHORT(endPtsOfContours+j*2); - ++j; - } else { - if (!(flags & 1)) { // if it's a curve - if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy); - cx = x; - cy = y; - was_off = 1; - } else { - if (was_off) - stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy); - else - stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0); - was_off = 0; - } - } - } - num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy); - } else if (numberOfContours == -1) { - // Compound shapes. - int more = 1; - stbtt_uint8 *comp = data + g + 10; - num_vertices = 0; - vertices = 0; - while (more) { - stbtt_uint16 flags, gidx; - int comp_num_verts = 0, i; - stbtt_vertex *comp_verts = 0, *tmp = 0; - float mtx[6] = {1,0,0,1,0,0}, m, n; - - flags = ttSHORT(comp); comp+=2; - gidx = ttSHORT(comp); comp+=2; - - if (flags & 2) { // XY values - if (flags & 1) { // shorts - mtx[4] = ttSHORT(comp); comp+=2; - mtx[5] = ttSHORT(comp); comp+=2; - } else { - mtx[4] = ttCHAR(comp); comp+=1; - mtx[5] = ttCHAR(comp); comp+=1; - } - } - else { - // @TODO handle matching point - STBTT_assert(0); - } - if (flags & (1<<3)) { // WE_HAVE_A_SCALE - mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = mtx[2] = 0; - } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE - mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = mtx[2] = 0; - mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO - mtx[0] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[1] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[2] = ttSHORT(comp)/16384.0f; comp+=2; - mtx[3] = ttSHORT(comp)/16384.0f; comp+=2; - } - - // Find transformation scales. - m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]); - n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]); - - // Get indexed glyph. - comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts); - if (comp_num_verts > 0) { - // Transform vertices. - for (i = 0; i < comp_num_verts; ++i) { - stbtt_vertex* v = &comp_verts[i]; - stbtt_vertex_type x,y; - x=v->x; y=v->y; - v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); - v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); - x=v->cx; y=v->cy; - v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4])); - v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5])); - } - // Append vertices. - tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata); - if (!tmp) { - if (vertices) STBTT_free(vertices, info->userdata); - if (comp_verts) STBTT_free(comp_verts, info->userdata); - return 0; - } - if (num_vertices > 0) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex)); - STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex)); - if (vertices) STBTT_free(vertices, info->userdata); - vertices = tmp; - STBTT_free(comp_verts, info->userdata); - num_vertices += comp_num_verts; - } - // More components ? - more = flags & (1<<5); - } - } else if (numberOfContours < 0) { - // @TODO other compound variations? - STBTT_assert(0); - } else { - // numberOfCounters == 0, do nothing - } - - *pvertices = vertices; - return num_vertices; -} - -typedef struct -{ - int bounds; - int started; - float first_x, first_y; - float x, y; - stbtt_int32 min_x, max_x, min_y, max_y; - - stbtt_vertex *pvertices; - int num_vertices; -} stbtt__csctx; - -#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0} - -static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y) -{ - if (x > c->max_x || !c->started) c->max_x = x; - if (y > c->max_y || !c->started) c->max_y = y; - if (x < c->min_x || !c->started) c->min_x = x; - if (y < c->min_y || !c->started) c->min_y = y; - c->started = 1; -} - -static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1) -{ - if (c->bounds) { - stbtt__track_vertex(c, x, y); - if (type == STBTT_vcubic) { - stbtt__track_vertex(c, cx, cy); - stbtt__track_vertex(c, cx1, cy1); - } - } else { - stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy); - c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1; - c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1; - } - c->num_vertices++; -} - -static void stbtt__csctx_close_shape(stbtt__csctx *ctx) -{ - if (ctx->first_x != ctx->x || ctx->first_y != ctx->y) - stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy) -{ - stbtt__csctx_close_shape(ctx); - ctx->first_x = ctx->x = ctx->x + dx; - ctx->first_y = ctx->y = ctx->y + dy; - stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy) -{ - ctx->x += dx; - ctx->y += dy; - stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0); -} - -static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3) -{ - float cx1 = ctx->x + dx1; - float cy1 = ctx->y + dy1; - float cx2 = cx1 + dx2; - float cy2 = cy1 + dy2; - ctx->x = cx2 + dx3; - ctx->y = cy2 + dy3; - stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2); -} - -static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n) -{ - int count = stbtt__cff_index_count(&idx); - int bias = 107; - if (count >= 33900) - bias = 32768; - else if (count >= 1240) - bias = 1131; - n += bias; - if (n < 0 || n >= count) - return stbtt__new_buf(NULL, 0); - return stbtt__cff_index_get(idx, n); -} - -static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index) -{ - stbtt__buf fdselect = info->fdselect; - int nranges, start, end, v, fmt, fdselector = -1, i; - - stbtt__buf_seek(&fdselect, 0); - fmt = stbtt__buf_get8(&fdselect); - if (fmt == 0) { - // untested - stbtt__buf_skip(&fdselect, glyph_index); - fdselector = stbtt__buf_get8(&fdselect); - } else if (fmt == 3) { - nranges = stbtt__buf_get16(&fdselect); - start = stbtt__buf_get16(&fdselect); - for (i = 0; i < nranges; i++) { - v = stbtt__buf_get8(&fdselect); - end = stbtt__buf_get16(&fdselect); - if (glyph_index >= start && glyph_index < end) { - fdselector = v; - break; - } - start = end; - } - } - if (fdselector == -1) stbtt__new_buf(NULL, 0); - return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector)); -} - -static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c) -{ - int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0; - int has_subrs = 0, clear_stack; - float s[48]; - stbtt__buf subr_stack[10], subrs = info->subrs, b; - float f; - -#define STBTT__CSERR(s) (0) - - // this currently ignores the initial width value, which isn't needed if we have hmtx - b = stbtt__cff_index_get(info->charstrings, glyph_index); - while (b.cursor < b.size) { - i = 0; - clear_stack = 1; - b0 = stbtt__buf_get8(&b); - switch (b0) { - // @TODO implement hinting - case 0x13: // hintmask - case 0x14: // cntrmask - if (in_header) - maskbits += (sp / 2); // implicit "vstem" - in_header = 0; - stbtt__buf_skip(&b, (maskbits + 7) / 8); - break; - - case 0x01: // hstem - case 0x03: // vstem - case 0x12: // hstemhm - case 0x17: // vstemhm - maskbits += (sp / 2); - break; - - case 0x15: // rmoveto - in_header = 0; - if (sp < 2) return STBTT__CSERR("rmoveto stack"); - stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]); - break; - case 0x04: // vmoveto - in_header = 0; - if (sp < 1) return STBTT__CSERR("vmoveto stack"); - stbtt__csctx_rmove_to(c, 0, s[sp-1]); - break; - case 0x16: // hmoveto - in_header = 0; - if (sp < 1) return STBTT__CSERR("hmoveto stack"); - stbtt__csctx_rmove_to(c, s[sp-1], 0); - break; - - case 0x05: // rlineto - if (sp < 2) return STBTT__CSERR("rlineto stack"); - for (; i + 1 < sp; i += 2) - stbtt__csctx_rline_to(c, s[i], s[i+1]); - break; - - // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical - // starting from a different place. - - case 0x07: // vlineto - if (sp < 1) return STBTT__CSERR("vlineto stack"); - goto vlineto; - case 0x06: // hlineto - if (sp < 1) return STBTT__CSERR("hlineto stack"); - for (;;) { - if (i >= sp) break; - stbtt__csctx_rline_to(c, s[i], 0); - i++; - vlineto: - if (i >= sp) break; - stbtt__csctx_rline_to(c, 0, s[i]); - i++; - } - break; - - case 0x1F: // hvcurveto - if (sp < 4) return STBTT__CSERR("hvcurveto stack"); - goto hvcurveto; - case 0x1E: // vhcurveto - if (sp < 4) return STBTT__CSERR("vhcurveto stack"); - for (;;) { - if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f); - i += 4; - hvcurveto: - if (i + 3 >= sp) break; - stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]); - i += 4; - } - break; - - case 0x08: // rrcurveto - if (sp < 6) return STBTT__CSERR("rcurveline stack"); - for (; i + 5 < sp; i += 6) - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - break; - - case 0x18: // rcurveline - if (sp < 8) return STBTT__CSERR("rcurveline stack"); - for (; i + 5 < sp - 2; i += 6) - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack"); - stbtt__csctx_rline_to(c, s[i], s[i+1]); - break; - - case 0x19: // rlinecurve - if (sp < 8) return STBTT__CSERR("rlinecurve stack"); - for (; i + 1 < sp - 6; i += 2) - stbtt__csctx_rline_to(c, s[i], s[i+1]); - if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack"); - stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]); - break; - - case 0x1A: // vvcurveto - case 0x1B: // hhcurveto - if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack"); - f = 0.0; - if (sp & 1) { f = s[i]; i++; } - for (; i + 3 < sp; i += 4) { - if (b0 == 0x1B) - stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0); - else - stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]); - f = 0.0; - } - break; - - case 0x0A: // callsubr - if (!has_subrs) { - if (info->fdselect.size) - subrs = stbtt__cid_get_glyph_subrs(info, glyph_index); - has_subrs = 1; - } - // fallthrough - case 0x1D: // callgsubr - if (sp < 1) return STBTT__CSERR("call(g|)subr stack"); - v = (int) s[--sp]; - if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit"); - subr_stack[subr_stack_height++] = b; - b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v); - if (b.size == 0) return STBTT__CSERR("subr not found"); - b.cursor = 0; - clear_stack = 0; - break; - - case 0x0B: // return - if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr"); - b = subr_stack[--subr_stack_height]; - clear_stack = 0; - break; - - case 0x0E: // endchar - stbtt__csctx_close_shape(c); - return 1; - - case 0x0C: { // two-byte escape - float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6; - float dx, dy; - int b1 = stbtt__buf_get8(&b); - switch (b1) { - // @TODO These "flex" implementations ignore the flex-depth and resolution, - // and always draw beziers. - case 0x22: // hflex - if (sp < 7) return STBTT__CSERR("hflex stack"); - dx1 = s[0]; - dx2 = s[1]; - dy2 = s[2]; - dx3 = s[3]; - dx4 = s[4]; - dx5 = s[5]; - dx6 = s[6]; - stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0); - stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0); - break; - - case 0x23: // flex - if (sp < 13) return STBTT__CSERR("flex stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dy3 = s[5]; - dx4 = s[6]; - dy4 = s[7]; - dx5 = s[8]; - dy5 = s[9]; - dx6 = s[10]; - dy6 = s[11]; - //fd is s[12] - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); - stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); - break; - - case 0x24: // hflex1 - if (sp < 9) return STBTT__CSERR("hflex1 stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dx4 = s[5]; - dx5 = s[6]; - dy5 = s[7]; - dx6 = s[8]; - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0); - stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5)); - break; - - case 0x25: // flex1 - if (sp < 11) return STBTT__CSERR("flex1 stack"); - dx1 = s[0]; - dy1 = s[1]; - dx2 = s[2]; - dy2 = s[3]; - dx3 = s[4]; - dy3 = s[5]; - dx4 = s[6]; - dy4 = s[7]; - dx5 = s[8]; - dy5 = s[9]; - dx6 = dy6 = s[10]; - dx = dx1+dx2+dx3+dx4+dx5; - dy = dy1+dy2+dy3+dy4+dy5; - if (STBTT_fabs(dx) > STBTT_fabs(dy)) - dy6 = -dy; - else - dx6 = -dx; - stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3); - stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6); - break; - - default: - return STBTT__CSERR("unimplemented"); - } - } break; - - default: - if (b0 != 255 && b0 != 28 && (b0 < 32 || b0 > 254)) - return STBTT__CSERR("reserved operator"); - - // push immediate - if (b0 == 255) { - f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000; - } else { - stbtt__buf_skip(&b, -1); - f = (float)(stbtt_int16)stbtt__cff_int(&b); - } - if (sp >= 48) return STBTT__CSERR("push stack overflow"); - s[sp++] = f; - clear_stack = 0; - break; - } - if (clear_stack) sp = 0; - } - return STBTT__CSERR("no endchar"); - -#undef STBTT__CSERR -} - -static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - // runs the charstring twice, once to count and once to output (to avoid realloc) - stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1); - stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0); - if (stbtt__run_charstring(info, glyph_index, &count_ctx)) { - *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata); - output_ctx.pvertices = *pvertices; - if (stbtt__run_charstring(info, glyph_index, &output_ctx)) { - STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices); - return output_ctx.num_vertices; - } - } - *pvertices = NULL; - return 0; -} - -static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1) -{ - stbtt__csctx c = STBTT__CSCTX_INIT(1); - int r = stbtt__run_charstring(info, glyph_index, &c); - if (x0) *x0 = r ? c.min_x : 0; - if (y0) *y0 = r ? c.min_y : 0; - if (x1) *x1 = r ? c.max_x : 0; - if (y1) *y1 = r ? c.max_y : 0; - return r ? c.num_vertices : 0; -} - -STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices) -{ - if (!info->cff.size) - return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices); - else - return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices); -} - -STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing) -{ - stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34); - if (glyph_index < numOfLongHorMetrics) { - if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index); - if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2); - } else { - if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1)); - if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics)); - } -} - -static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) -{ - stbtt_uint8 *data = info->data + info->kern; - stbtt_uint32 needle, straw; - int l, r, m; - - // we only look at the first table. it must be 'horizontal' and format 0. - if (!info->kern) - return 0; - if (ttUSHORT(data+2) < 1) // number of tables, need at least 1 - return 0; - if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format - return 0; - - l = 0; - r = ttUSHORT(data+10) - 1; - needle = glyph1 << 16 | glyph2; - while (l <= r) { - m = (l + r) >> 1; - straw = ttULONG(data+18+(m*6)); // note: unaligned read - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else - return ttSHORT(data+22+(m*6)); - } - return 0; -} - -static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph) -{ - stbtt_uint16 coverageFormat = ttUSHORT(coverageTable); - switch(coverageFormat) { - case 1: { - stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2); - - // Binary search. - stbtt_int32 l=0, r=glyphCount-1, m; - int straw, needle=glyph; - while (l <= r) { - stbtt_uint8 *glyphArray = coverageTable + 4; - stbtt_uint16 glyphID; - m = (l + r) >> 1; - glyphID = ttUSHORT(glyphArray + 2 * m); - straw = glyphID; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - return m; - } - } - } break; - - case 2: { - stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2); - stbtt_uint8 *rangeArray = coverageTable + 4; - - // Binary search. - stbtt_int32 l=0, r=rangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *rangeRecord; - m = (l + r) >> 1; - rangeRecord = rangeArray + 6 * m; - strawStart = ttUSHORT(rangeRecord); - strawEnd = ttUSHORT(rangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else { - stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4); - return startCoverageIndex + glyph - strawStart; - } - } - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } - - return -1; -} - -static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph) -{ - stbtt_uint16 classDefFormat = ttUSHORT(classDefTable); - switch(classDefFormat) - { - case 1: { - stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2); - stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4); - stbtt_uint8 *classDef1ValueArray = classDefTable + 6; - - if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount) - return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID)); - - classDefTable = classDef1ValueArray + 2 * glyphCount; - } break; - - case 2: { - stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2); - stbtt_uint8 *classRangeRecords = classDefTable + 4; - - // Binary search. - stbtt_int32 l=0, r=classRangeCount-1, m; - int strawStart, strawEnd, needle=glyph; - while (l <= r) { - stbtt_uint8 *classRangeRecord; - m = (l + r) >> 1; - classRangeRecord = classRangeRecords + 6 * m; - strawStart = ttUSHORT(classRangeRecord); - strawEnd = ttUSHORT(classRangeRecord + 2); - if (needle < strawStart) - r = m - 1; - else if (needle > strawEnd) - l = m + 1; - else - return (stbtt_int32)ttUSHORT(classRangeRecord + 4); - } - - classDefTable = classRangeRecords + 6 * classRangeCount; - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - } break; - } - - return -1; -} - -// Define to STBTT_assert(x) if you want to break on unimplemented formats. -#define STBTT_GPOS_TODO_assert(x) - -static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2) -{ - stbtt_uint16 lookupListOffset; - stbtt_uint8 *lookupList; - stbtt_uint16 lookupCount; - stbtt_uint8 *data; - stbtt_int32 i; - - if (!info->gpos) return 0; - - data = info->data + info->gpos; - - if (ttUSHORT(data+0) != 1) return 0; // Major version 1 - if (ttUSHORT(data+2) != 0) return 0; // Minor version 0 - - lookupListOffset = ttUSHORT(data+8); - lookupList = data + lookupListOffset; - lookupCount = ttUSHORT(lookupList); - - for (i=0; i<lookupCount; ++i) { - stbtt_uint16 lookupOffset = ttUSHORT(lookupList + 2 + 2 * i); - stbtt_uint8 *lookupTable = lookupList + lookupOffset; - - stbtt_uint16 lookupType = ttUSHORT(lookupTable); - stbtt_uint16 subTableCount = ttUSHORT(lookupTable + 4); - stbtt_uint8 *subTableOffsets = lookupTable + 6; - switch(lookupType) { - case 2: { // Pair Adjustment Positioning Subtable - stbtt_int32 sti; - for (sti=0; sti<subTableCount; sti++) { - stbtt_uint16 subtableOffset = ttUSHORT(subTableOffsets + 2 * sti); - stbtt_uint8 *table = lookupTable + subtableOffset; - stbtt_uint16 posFormat = ttUSHORT(table); - stbtt_uint16 coverageOffset = ttUSHORT(table + 2); - stbtt_int32 coverageIndex = stbtt__GetCoverageIndex(table + coverageOffset, glyph1); - if (coverageIndex == -1) continue; - - switch (posFormat) { - case 1: { - stbtt_int32 l, r, m; - int straw, needle; - stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); - stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); - stbtt_int32 valueRecordPairSizeInBytes = 2; - stbtt_uint16 pairSetCount = ttUSHORT(table + 8); - stbtt_uint16 pairPosOffset = ttUSHORT(table + 10 + 2 * coverageIndex); - stbtt_uint8 *pairValueTable = table + pairPosOffset; - stbtt_uint16 pairValueCount = ttUSHORT(pairValueTable); - stbtt_uint8 *pairValueArray = pairValueTable + 2; - // TODO: Support more formats. - STBTT_GPOS_TODO_assert(valueFormat1 == 4); - if (valueFormat1 != 4) return 0; - STBTT_GPOS_TODO_assert(valueFormat2 == 0); - if (valueFormat2 != 0) return 0; - - STBTT_assert(coverageIndex < pairSetCount); - STBTT__NOTUSED(pairSetCount); - - needle=glyph2; - r=pairValueCount-1; - l=0; - - // Binary search. - while (l <= r) { - stbtt_uint16 secondGlyph; - stbtt_uint8 *pairValue; - m = (l + r) >> 1; - pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m; - secondGlyph = ttUSHORT(pairValue); - straw = secondGlyph; - if (needle < straw) - r = m - 1; - else if (needle > straw) - l = m + 1; - else { - stbtt_int16 xAdvance = ttSHORT(pairValue + 2); - return xAdvance; - } - } - } break; - - case 2: { - stbtt_uint16 valueFormat1 = ttUSHORT(table + 4); - stbtt_uint16 valueFormat2 = ttUSHORT(table + 6); - - stbtt_uint16 classDef1Offset = ttUSHORT(table + 8); - stbtt_uint16 classDef2Offset = ttUSHORT(table + 10); - int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1); - int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2); - - stbtt_uint16 class1Count = ttUSHORT(table + 12); - stbtt_uint16 class2Count = ttUSHORT(table + 14); - STBTT_assert(glyph1class < class1Count); - STBTT_assert(glyph2class < class2Count); - - // TODO: Support more formats. - STBTT_GPOS_TODO_assert(valueFormat1 == 4); - if (valueFormat1 != 4) return 0; - STBTT_GPOS_TODO_assert(valueFormat2 == 0); - if (valueFormat2 != 0) return 0; - - if (glyph1class >= 0 && glyph1class < class1Count && glyph2class >= 0 && glyph2class < class2Count) { - stbtt_uint8 *class1Records = table + 16; - stbtt_uint8 *class2Records = class1Records + 2 * (glyph1class * class2Count); - stbtt_int16 xAdvance = ttSHORT(class2Records + 2 * glyph2class); - return xAdvance; - } - } break; - - default: { - // There are no other cases. - STBTT_assert(0); - break; - }; - } - } - break; - }; - - default: - // TODO: Implement other stuff. - break; - } - } - - return 0; -} - -STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2) -{ - int xAdvance = 0; - - if (info->gpos) - xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2); - - if (info->kern) - xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2); - - return xAdvance; -} - -STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2) -{ - if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs - return 0; - return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2)); -} - -STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing) -{ - stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing); -} - -STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap) -{ - if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4); - if (descent) *descent = ttSHORT(info->data+info->hhea + 6); - if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8); -} - -STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap) -{ - int tab = stbtt__find_table(info->data, info->fontstart, "OS/2"); - if (!tab) - return 0; - if (typoAscent ) *typoAscent = ttSHORT(info->data+tab + 68); - if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70); - if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72); - return 1; -} - -STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1) -{ - *x0 = ttSHORT(info->data + info->head + 36); - *y0 = ttSHORT(info->data + info->head + 38); - *x1 = ttSHORT(info->data + info->head + 40); - *y1 = ttSHORT(info->data + info->head + 42); -} - -STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height) -{ - int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6); - return (float) height / fheight; -} - -STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels) -{ - int unitsPerEm = ttUSHORT(info->data + info->head + 18); - return pixels / unitsPerEm; -} - -STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v) -{ - STBTT_free(v, info->userdata); -} - -////////////////////////////////////////////////////////////////////////////// -// -// antialiasing software rasterizer -// - -STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning - if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) { - // e.g. space character - if (ix0) *ix0 = 0; - if (iy0) *iy0 = 0; - if (ix1) *ix1 = 0; - if (iy1) *iy1 = 0; - } else { - // move to integral bboxes (treating pixels as little squares, what pixels get touched)? - if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x); - if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y); - if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x); - if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y); - } -} - -STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1); -} - -STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1); -} - -STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1) -{ - stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1); -} - -////////////////////////////////////////////////////////////////////////////// -// -// Rasterizer - -typedef struct stbtt__hheap_chunk -{ - struct stbtt__hheap_chunk *next; -} stbtt__hheap_chunk; - -typedef struct stbtt__hheap -{ - struct stbtt__hheap_chunk *head; - void *first_free; - int num_remaining_in_head_chunk; -} stbtt__hheap; - -static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata) -{ - if (hh->first_free) { - void *p = hh->first_free; - hh->first_free = * (void **) p; - return p; - } else { - if (hh->num_remaining_in_head_chunk == 0) { - int count = (size < 32 ? 2000 : size < 128 ? 800 : 100); - stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata); - if (c == NULL) - return NULL; - c->next = hh->head; - hh->head = c; - hh->num_remaining_in_head_chunk = count; - } - --hh->num_remaining_in_head_chunk; - return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk; - } -} - -static void stbtt__hheap_free(stbtt__hheap *hh, void *p) -{ - *(void **) p = hh->first_free; - hh->first_free = p; -} - -static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata) -{ - stbtt__hheap_chunk *c = hh->head; - while (c) { - stbtt__hheap_chunk *n = c->next; - STBTT_free(c, userdata); - c = n; - } -} - -typedef struct stbtt__edge { - float x0,y0, x1,y1; - int invert; -} stbtt__edge; - - -typedef struct stbtt__active_edge -{ - struct stbtt__active_edge *next; - #if STBTT_RASTERIZER_VERSION==1 - int x,dx; - float ey; - int direction; - #elif STBTT_RASTERIZER_VERSION==2 - float fx,fdx,fdy; - float direction; - float sy; - float ey; - #else - #error "Unrecognized value of STBTT_RASTERIZER_VERSION" - #endif -} stbtt__active_edge; - -#if STBTT_RASTERIZER_VERSION == 1 -#define STBTT_FIXSHIFT 10 -#define STBTT_FIX (1 << STBTT_FIXSHIFT) -#define STBTT_FIXMASK (STBTT_FIX-1) - -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) -{ - stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); - STBTT_assert(z != NULL); - if (!z) return z; - - // round dx down to avoid overshooting - if (dxdy < 0) - z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy); - else - z->dx = STBTT_ifloor(STBTT_FIX * dxdy); - - z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount - z->x -= off_x * STBTT_FIX; - - z->ey = e->y1; - z->next = 0; - z->direction = e->invert ? 1 : -1; - return z; -} -#elif STBTT_RASTERIZER_VERSION == 2 -static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata) -{ - stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata); - float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0); - STBTT_assert(z != NULL); - //STBTT_assert(e->y0 <= start_point); - if (!z) return z; - z->fdx = dxdy; - z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f; - z->fx = e->x0 + dxdy * (start_point - e->y0); - z->fx -= off_x; - z->direction = e->invert ? 1.0f : -1.0f; - z->sy = e->y0; - z->ey = e->y1; - z->next = 0; - return z; -} -#else -#error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - -#if STBTT_RASTERIZER_VERSION == 1 -// note: this routine clips fills that extend off the edges... ideally this -// wouldn't happen, but it could happen if the truetype glyph bounding boxes -// are wrong, or if the user supplies a too-small bitmap -static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight) -{ - // non-zero winding fill - int x0=0, w=0; - - while (e) { - if (w == 0) { - // if we're currently at zero, we need to record the edge start point - x0 = e->x; w += e->direction; - } else { - int x1 = e->x; w += e->direction; - // if we went to zero, we need to draw - if (w == 0) { - int i = x0 >> STBTT_FIXSHIFT; - int j = x1 >> STBTT_FIXSHIFT; - - if (i < len && j >= 0) { - if (i == j) { - // x0,x1 are the same pixel, so compute combined coverage - scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT); - } else { - if (i >= 0) // add antialiasing for x0 - scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT); - else - i = -1; // clip - - if (j < len) // add antialiasing for x1 - scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT); - else - j = len; // clip - - for (++i; i < j; ++i) // fill pixels between x0 and x1 - scanline[i] = scanline[i] + (stbtt_uint8) max_weight; - } - } - } - } - - e = e->next; - } -} - -static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) -{ - stbtt__hheap hh = { 0, 0, 0 }; - stbtt__active_edge *active = NULL; - int y,j=0; - int max_weight = (255 / vsubsample); // weight per vertical scanline - int s; // vertical subsample index - unsigned char scanline_data[512], *scanline; - - if (result->w > 512) - scanline = (unsigned char *) STBTT_malloc(result->w, userdata); - else - scanline = scanline_data; - - y = off_y * vsubsample; - e[n].y0 = (off_y + result->h) * (float) vsubsample + 1; - - while (j < result->h) { - STBTT_memset(scanline, 0, result->w); - for (s=0; s < vsubsample; ++s) { - // find center of pixel for this scanline - float scan_y = y + 0.5f; - stbtt__active_edge **step = &active; - - // update all active edges; - // remove all active edges that terminate before the center of this scanline - while (*step) { - stbtt__active_edge * z = *step; - if (z->ey <= scan_y) { - *step = z->next; // delete from list - STBTT_assert(z->direction); - z->direction = 0; - stbtt__hheap_free(&hh, z); - } else { - z->x += z->dx; // advance to position for current scanline - step = &((*step)->next); // advance through list - } - } - - // resort the list if needed - for(;;) { - int changed=0; - step = &active; - while (*step && (*step)->next) { - if ((*step)->x > (*step)->next->x) { - stbtt__active_edge *t = *step; - stbtt__active_edge *q = t->next; - - t->next = q->next; - q->next = t; - *step = q; - changed = 1; - } - step = &(*step)->next; - } - if (!changed) break; - } - - // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline - while (e->y0 <= scan_y) { - if (e->y1 > scan_y) { - stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata); - if (z != NULL) { - // find insertion point - if (active == NULL) - active = z; - else if (z->x < active->x) { - // insert at front - z->next = active; - active = z; - } else { - // find thing to insert AFTER - stbtt__active_edge *p = active; - while (p->next && p->next->x < z->x) - p = p->next; - // at this point, p->next->x is NOT < z->x - z->next = p->next; - p->next = z; - } - } - } - ++e; - } - - // now process all active edges in XOR fashion - if (active) - stbtt__fill_active_edges(scanline, result->w, active, max_weight); - - ++y; - } - STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w); - ++j; - } - - stbtt__hheap_cleanup(&hh, userdata); - - if (scanline != scanline_data) - STBTT_free(scanline, userdata); -} - -#elif STBTT_RASTERIZER_VERSION == 2 - -// the edge passed in here does not cross the vertical line at x or the vertical line at x+1 -// (i.e. it has already been clipped to those) -static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1) -{ - if (y0 == y1) return; - STBTT_assert(y0 < y1); - STBTT_assert(e->sy <= e->ey); - if (y0 > e->ey) return; - if (y1 < e->sy) return; - if (y0 < e->sy) { - x0 += (x1-x0) * (e->sy - y0) / (y1-y0); - y0 = e->sy; - } - if (y1 > e->ey) { - x1 += (x1-x0) * (e->ey - y1) / (y1-y0); - y1 = e->ey; - } - - if (x0 == x) - STBTT_assert(x1 <= x+1); - else if (x0 == x+1) - STBTT_assert(x1 >= x); - else if (x0 <= x) - STBTT_assert(x1 <= x); - else if (x0 >= x+1) - STBTT_assert(x1 >= x+1); - else - STBTT_assert(x1 >= x && x1 <= x+1); - - if (x0 <= x && x1 <= x) - scanline[x] += e->direction * (y1-y0); - else if (x0 >= x+1 && x1 >= x+1) - ; - else { - STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1); - scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position - } -} - -static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top) -{ - float y_bottom = y_top+1; - - while (e) { - // brute force every pixel - - // compute intersection points with top & bottom - STBTT_assert(e->ey >= y_top); - - if (e->fdx == 0) { - float x0 = e->fx; - if (x0 < len) { - if (x0 >= 0) { - stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom); - stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom); - } else { - stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom); - } - } - } else { - float x0 = e->fx; - float dx = e->fdx; - float xb = x0 + dx; - float x_top, x_bottom; - float sy0,sy1; - float dy = e->fdy; - STBTT_assert(e->sy <= y_bottom && e->ey >= y_top); - - // compute endpoints of line segment clipped to this scanline (if the - // line segment starts on this scanline. x0 is the intersection of the - // line with y_top, but that may be off the line segment. - if (e->sy > y_top) { - x_top = x0 + dx * (e->sy - y_top); - sy0 = e->sy; - } else { - x_top = x0; - sy0 = y_top; - } - if (e->ey < y_bottom) { - x_bottom = x0 + dx * (e->ey - y_top); - sy1 = e->ey; - } else { - x_bottom = xb; - sy1 = y_bottom; - } - - if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) { - // from here on, we don't have to range check x values - - if ((int) x_top == (int) x_bottom) { - float height; - // simple case, only spans one pixel - int x = (int) x_top; - height = sy1 - sy0; - STBTT_assert(x >= 0 && x < len); - scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2) * height; - scanline_fill[x] += e->direction * height; // everything right of this pixel is filled - } else { - int x,x1,x2; - float y_crossing, step, sign, area; - // covers 2+ pixels - if (x_top > x_bottom) { - // flip scanline vertically; signed area is the same - float t; - sy0 = y_bottom - (sy0 - y_top); - sy1 = y_bottom - (sy1 - y_top); - t = sy0, sy0 = sy1, sy1 = t; - t = x_bottom, x_bottom = x_top, x_top = t; - dx = -dx; - dy = -dy; - t = x0, x0 = xb, xb = t; - } - - x1 = (int) x_top; - x2 = (int) x_bottom; - // compute intersection with y axis at x1+1 - y_crossing = (x1+1 - x0) * dy + y_top; - - sign = e->direction; - // area of the rectangle covered from y0..y_crossing - area = sign * (y_crossing-sy0); - // area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing) - scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2); - - step = sign * dy; - for (x = x1+1; x < x2; ++x) { - scanline[x] += area + step/2; - area += step; - } - y_crossing += dy * (x2 - (x1+1)); - - STBTT_assert(STBTT_fabs(area) <= 1.01f); - - scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (sy1-y_crossing); - - scanline_fill[x2] += sign * (sy1-sy0); - } - } else { - // if edge goes outside of box we're drawing, we require - // clipping logic. since this does not match the intended use - // of this library, we use a different, very slow brute - // force implementation - int x; - for (x=0; x < len; ++x) { - // cases: - // - // there can be up to two intersections with the pixel. any intersection - // with left or right edges can be handled by splitting into two (or three) - // regions. intersections with top & bottom do not necessitate case-wise logic. - // - // the old way of doing this found the intersections with the left & right edges, - // then used some simple logic to produce up to three segments in sorted order - // from top-to-bottom. however, this had a problem: if an x edge was epsilon - // across the x border, then the corresponding y position might not be distinct - // from the other y segment, and it might ignored as an empty segment. to avoid - // that, we need to explicitly produce segments based on x positions. - - // rename variables to clearly-defined pairs - float y0 = y_top; - float x1 = (float) (x); - float x2 = (float) (x+1); - float x3 = xb; - float y3 = y_bottom; - - // x = e->x + e->dx * (y-y_top) - // (y-y_top) = (x - e->x) / e->dx - // y = (x - e->x) / e->dx + y_top - float y1 = (x - x0) / dx + y_top; - float y2 = (x+1 - x0) / dx + y_top; - - if (x0 < x1 && x3 > x2) { // three segments descending down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else if (x3 < x1 && x0 > x2) { // three segments descending down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1); - stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3); - } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2); - stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3); - } else { // one segment - stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3); - } - } - } - } - e = e->next; - } -} - -// directly AA rasterize edges w/o supersampling -static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata) -{ - stbtt__hheap hh = { 0, 0, 0 }; - stbtt__active_edge *active = NULL; - int y,j=0, i; - float scanline_data[129], *scanline, *scanline2; - - STBTT__NOTUSED(vsubsample); - - if (result->w > 64) - scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata); - else - scanline = scanline_data; - - scanline2 = scanline + result->w; - - y = off_y; - e[n].y0 = (float) (off_y + result->h) + 1; - - while (j < result->h) { - // find center of pixel for this scanline - float scan_y_top = y + 0.0f; - float scan_y_bottom = y + 1.0f; - stbtt__active_edge **step = &active; - - STBTT_memset(scanline , 0, result->w*sizeof(scanline[0])); - STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0])); - - // update all active edges; - // remove all active edges that terminate before the top of this scanline - while (*step) { - stbtt__active_edge * z = *step; - if (z->ey <= scan_y_top) { - *step = z->next; // delete from list - STBTT_assert(z->direction); - z->direction = 0; - stbtt__hheap_free(&hh, z); - } else { - step = &((*step)->next); // advance through list - } - } - - // insert all edges that start before the bottom of this scanline - while (e->y0 <= scan_y_bottom) { - if (e->y0 != e->y1) { - stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata); - if (z != NULL) { - if (j == 0 && off_y != 0) { - if (z->ey < scan_y_top) { - // this can happen due to subpixel positioning and some kind of fp rounding error i think - z->ey = scan_y_top; - } - } - STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds - // insert at front - z->next = active; - active = z; - } - } - ++e; - } - - // now process all active edges - if (active) - stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top); - - { - float sum = 0; - for (i=0; i < result->w; ++i) { - float k; - int m; - sum += scanline2[i]; - k = scanline[i] + sum; - k = (float) STBTT_fabs(k)*255 + 0.5f; - m = (int) k; - if (m > 255) m = 255; - result->pixels[j*result->stride + i] = (unsigned char) m; - } - } - // advance all the edges - step = &active; - while (*step) { - stbtt__active_edge *z = *step; - z->fx += z->fdx; // advance to position for current scanline - step = &((*step)->next); // advance through list - } - - ++y; - ++j; - } - - stbtt__hheap_cleanup(&hh, userdata); - - if (scanline != scanline_data) - STBTT_free(scanline, userdata); -} -#else -#error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - -#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0) - -static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n) -{ - int i,j; - for (i=1; i < n; ++i) { - stbtt__edge t = p[i], *a = &t; - j = i; - while (j > 0) { - stbtt__edge *b = &p[j-1]; - int c = STBTT__COMPARE(a,b); - if (!c) break; - p[j] = p[j-1]; - --j; - } - if (i != j) - p[j] = t; - } -} - -static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n) -{ - /* threshold for transitioning to insertion sort */ - while (n > 12) { - stbtt__edge t; - int c01,c12,c,m,i,j; - - /* compute median of three */ - m = n >> 1; - c01 = STBTT__COMPARE(&p[0],&p[m]); - c12 = STBTT__COMPARE(&p[m],&p[n-1]); - /* if 0 >= mid >= end, or 0 < mid < end, then use mid */ - if (c01 != c12) { - /* otherwise, we'll need to swap something else to middle */ - int z; - c = STBTT__COMPARE(&p[0],&p[n-1]); - /* 0>mid && mid<n: 0>n => n; 0<n => 0 */ - /* 0<mid && mid>n: 0>n => 0; 0<n => n */ - z = (c == c12) ? 0 : n-1; - t = p[z]; - p[z] = p[m]; - p[m] = t; - } - /* now p[m] is the median-of-three */ - /* swap it to the beginning so it won't move around */ - t = p[0]; - p[0] = p[m]; - p[m] = t; - - /* partition loop */ - i=1; - j=n-1; - for(;;) { - /* handling of equality is crucial here */ - /* for sentinels & efficiency with duplicates */ - for (;;++i) { - if (!STBTT__COMPARE(&p[i], &p[0])) break; - } - for (;;--j) { - if (!STBTT__COMPARE(&p[0], &p[j])) break; - } - /* make sure we haven't crossed */ - if (i >= j) break; - t = p[i]; - p[i] = p[j]; - p[j] = t; - - ++i; - --j; - } - /* recurse on smaller side, iterate on larger */ - if (j < (n-i)) { - stbtt__sort_edges_quicksort(p,j); - p = p+i; - n = n-i; - } else { - stbtt__sort_edges_quicksort(p+i, n-i); - n = j; - } - } -} - -static void stbtt__sort_edges(stbtt__edge *p, int n) -{ - stbtt__sort_edges_quicksort(p, n); - stbtt__sort_edges_ins_sort(p, n); -} - -typedef struct -{ - float x,y; -} stbtt__point; - -static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata) -{ - float y_scale_inv = invert ? -scale_y : scale_y; - stbtt__edge *e; - int n,i,j,k,m; -#if STBTT_RASTERIZER_VERSION == 1 - int vsubsample = result->h < 8 ? 15 : 5; -#elif STBTT_RASTERIZER_VERSION == 2 - int vsubsample = 1; -#else - #error "Unrecognized value of STBTT_RASTERIZER_VERSION" -#endif - // vsubsample should divide 255 evenly; otherwise we won't reach full opacity - - // now we have to blow out the windings into explicit edge lists - n = 0; - for (i=0; i < windings; ++i) - n += wcount[i]; - - e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel - if (e == 0) return; - n = 0; - - m=0; - for (i=0; i < windings; ++i) { - stbtt__point *p = pts + m; - m += wcount[i]; - j = wcount[i]-1; - for (k=0; k < wcount[i]; j=k++) { - int a=k,b=j; - // skip the edge if horizontal - if (p[j].y == p[k].y) - continue; - // add edge from j to k to the list - e[n].invert = 0; - if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) { - e[n].invert = 1; - a=j,b=k; - } - e[n].x0 = p[a].x * scale_x + shift_x; - e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample; - e[n].x1 = p[b].x * scale_x + shift_x; - e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample; - ++n; - } - } - - // now sort the edges by their highest point (should snap to integer, and then by x) - //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare); - stbtt__sort_edges(e, n); - - // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule - stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata); - - STBTT_free(e, userdata); -} - -static void stbtt__add_point(stbtt__point *points, int n, float x, float y) -{ - if (!points) return; // during first pass, it's unallocated - points[n].x = x; - points[n].y = y; -} - -// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching -static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n) -{ - // midpoint - float mx = (x0 + 2*x1 + x2)/4; - float my = (y0 + 2*y1 + y2)/4; - // versus directly drawn line - float dx = (x0+x2)/2 - mx; - float dy = (y0+y2)/2 - my; - if (n > 16) // 65536 segments on one curve better be enough! - return 1; - if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA - stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1); - stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1); - } else { - stbtt__add_point(points, *num_points,x2,y2); - *num_points = *num_points+1; - } - return 1; -} - -static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n) -{ - // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough - float dx0 = x1-x0; - float dy0 = y1-y0; - float dx1 = x2-x1; - float dy1 = y2-y1; - float dx2 = x3-x2; - float dy2 = y3-y2; - float dx = x3-x0; - float dy = y3-y0; - float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2)); - float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy); - float flatness_squared = longlen*longlen-shortlen*shortlen; - - if (n > 16) // 65536 segments on one curve better be enough! - return; - - if (flatness_squared > objspace_flatness_squared) { - float x01 = (x0+x1)/2; - float y01 = (y0+y1)/2; - float x12 = (x1+x2)/2; - float y12 = (y1+y2)/2; - float x23 = (x2+x3)/2; - float y23 = (y2+y3)/2; - - float xa = (x01+x12)/2; - float ya = (y01+y12)/2; - float xb = (x12+x23)/2; - float yb = (y12+y23)/2; - - float mx = (xa+xb)/2; - float my = (ya+yb)/2; - - stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1); - stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1); - } else { - stbtt__add_point(points, *num_points,x3,y3); - *num_points = *num_points+1; - } -} - -// returns number of contours -static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata) -{ - stbtt__point *points=0; - int num_points=0; - - float objspace_flatness_squared = objspace_flatness * objspace_flatness; - int i,n=0,start=0, pass; - - // count how many "moves" there are to get the contour count - for (i=0; i < num_verts; ++i) - if (vertices[i].type == STBTT_vmove) - ++n; - - *num_contours = n; - if (n == 0) return 0; - - *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata); - - if (*contour_lengths == 0) { - *num_contours = 0; - return 0; - } - - // make two passes through the points so we don't need to realloc - for (pass=0; pass < 2; ++pass) { - float x=0,y=0; - if (pass == 1) { - points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata); - if (points == NULL) goto error; - } - num_points = 0; - n= -1; - for (i=0; i < num_verts; ++i) { - switch (vertices[i].type) { - case STBTT_vmove: - // start the next contour - if (n >= 0) - (*contour_lengths)[n] = num_points - start; - ++n; - start = num_points; - - x = vertices[i].x, y = vertices[i].y; - stbtt__add_point(points, num_points++, x,y); - break; - case STBTT_vline: - x = vertices[i].x, y = vertices[i].y; - stbtt__add_point(points, num_points++, x, y); - break; - case STBTT_vcurve: - stbtt__tesselate_curve(points, &num_points, x,y, - vertices[i].cx, vertices[i].cy, - vertices[i].x, vertices[i].y, - objspace_flatness_squared, 0); - x = vertices[i].x, y = vertices[i].y; - break; - case STBTT_vcubic: - stbtt__tesselate_cubic(points, &num_points, x,y, - vertices[i].cx, vertices[i].cy, - vertices[i].cx1, vertices[i].cy1, - vertices[i].x, vertices[i].y, - objspace_flatness_squared, 0); - x = vertices[i].x, y = vertices[i].y; - break; - } - } - (*contour_lengths)[n] = num_points - start; - } - - return points; -error: - STBTT_free(points, userdata); - STBTT_free(*contour_lengths, userdata); - *contour_lengths = 0; - *num_contours = 0; - return NULL; -} - -STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata) -{ - float scale = scale_x > scale_y ? scale_y : scale_x; - int winding_count = 0; - int *winding_lengths = NULL; - stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata); - if (windings) { - stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata); - STBTT_free(winding_lengths, userdata); - STBTT_free(windings, userdata); - } -} - -STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata) -{ - STBTT_free(bitmap, userdata); -} - -STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff) -{ - int ix0,iy0,ix1,iy1; - stbtt__bitmap gbm; - stbtt_vertex *vertices; - int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); - - if (scale_x == 0) scale_x = scale_y; - if (scale_y == 0) { - if (scale_x == 0) { - STBTT_free(vertices, info->userdata); - return NULL; - } - scale_y = scale_x; - } - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1); - - // now we get the size - gbm.w = (ix1 - ix0); - gbm.h = (iy1 - iy0); - gbm.pixels = NULL; // in case we error - - if (width ) *width = gbm.w; - if (height) *height = gbm.h; - if (xoff ) *xoff = ix0; - if (yoff ) *yoff = iy0; - - if (gbm.w && gbm.h) { - gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata); - if (gbm.pixels) { - gbm.stride = gbm.w; - - stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata); - } - } - STBTT_free(vertices, info->userdata); - return gbm.pixels; -} - -STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff); -} - -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph) -{ - int ix0,iy0; - stbtt_vertex *vertices; - int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices); - stbtt__bitmap gbm; - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0); - gbm.pixels = output; - gbm.w = out_w; - gbm.h = out_h; - gbm.stride = out_stride; - - if (gbm.w && gbm.h) - stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata); - - STBTT_free(vertices, info->userdata); -} - -STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph) -{ - stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph); -} - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff); -} - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint) -{ - stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint)); -} - -STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint) -{ - stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint)); -} - -STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff); -} - -STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint) -{ - stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint); -} - -////////////////////////////////////////////////////////////////////////////// -// -// bitmap baking -// -// This is SUPER-CRAPPY packing to keep source code small - -static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf) - float pixel_height, // height of font in pixels - unsigned char *pixels, int pw, int ph, // bitmap to be filled in - int first_char, int num_chars, // characters to bake - stbtt_bakedchar *chardata) -{ - float scale; - int x,y,bottom_y, i; - stbtt_fontinfo f; - f.userdata = NULL; - if (!stbtt_InitFont(&f, data, offset)) - return -1; - STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels - x=y=1; - bottom_y = 1; - - scale = stbtt_ScaleForPixelHeight(&f, pixel_height); - - for (i=0; i < num_chars; ++i) { - int advance, lsb, x0,y0,x1,y1,gw,gh; - int g = stbtt_FindGlyphIndex(&f, first_char + i); - stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb); - stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1); - gw = x1-x0; - gh = y1-y0; - if (x + gw + 1 >= pw) - y = bottom_y, x = 1; // advance to next row - if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row - return -i; - STBTT_assert(x+gw < pw); - STBTT_assert(y+gh < ph); - stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g); - chardata[i].x0 = (stbtt_int16) x; - chardata[i].y0 = (stbtt_int16) y; - chardata[i].x1 = (stbtt_int16) (x + gw); - chardata[i].y1 = (stbtt_int16) (y + gh); - chardata[i].xadvance = scale * advance; - chardata[i].xoff = (float) x0; - chardata[i].yoff = (float) y0; - x = x + gw + 1; - if (y+gh+1 > bottom_y) - bottom_y = y+gh+1; - } - return bottom_y; -} - -STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule) -{ - float d3d_bias = opengl_fillrule ? 0 : -0.5f; - float ipw = 1.0f / pw, iph = 1.0f / ph; - const stbtt_bakedchar *b = chardata + char_index; - int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f); - int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f); - - q->x0 = round_x + d3d_bias; - q->y0 = round_y + d3d_bias; - q->x1 = round_x + b->x1 - b->x0 + d3d_bias; - q->y1 = round_y + b->y1 - b->y0 + d3d_bias; - - q->s0 = b->x0 * ipw; - q->t0 = b->y0 * iph; - q->s1 = b->x1 * ipw; - q->t1 = b->y1 * iph; - - *xpos += b->xadvance; -} - -////////////////////////////////////////////////////////////////////////////// -// -// rectangle packing replacement routines if you don't have stb_rect_pack.h -// - -#ifndef STB_RECT_PACK_VERSION - -typedef int stbrp_coord; - -//////////////////////////////////////////////////////////////////////////////////// -// // -// // -// COMPILER WARNING ?!?!? // -// // -// // -// if you get a compile warning due to these symbols being defined more than // -// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" // -// // -//////////////////////////////////////////////////////////////////////////////////// - -typedef struct -{ - int width,height; - int x,y,bottom_y; -} stbrp_context; - -typedef struct -{ - unsigned char x; -} stbrp_node; - -struct stbrp_rect -{ - stbrp_coord x,y; - int id,w,h,was_packed; -}; - -static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes) -{ - con->width = pw; - con->height = ph; - con->x = 0; - con->y = 0; - con->bottom_y = 0; - STBTT__NOTUSED(nodes); - STBTT__NOTUSED(num_nodes); -} - -static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects) -{ - int i; - for (i=0; i < num_rects; ++i) { - if (con->x + rects[i].w > con->width) { - con->x = 0; - con->y = con->bottom_y; - } - if (con->y + rects[i].h > con->height) - break; - rects[i].x = con->x; - rects[i].y = con->y; - rects[i].was_packed = 1; - con->x += rects[i].w; - if (con->y + rects[i].h > con->bottom_y) - con->bottom_y = con->y + rects[i].h; - } - for ( ; i < num_rects; ++i) - rects[i].was_packed = 0; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// bitmap baking -// -// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If -// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy. - -STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context) -{ - stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context); - int num_nodes = pw - padding; - stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context); - - if (context == NULL || nodes == NULL) { - if (context != NULL) STBTT_free(context, alloc_context); - if (nodes != NULL) STBTT_free(nodes , alloc_context); - return 0; - } - - spc->user_allocator_context = alloc_context; - spc->width = pw; - spc->height = ph; - spc->pixels = pixels; - spc->pack_info = context; - spc->nodes = nodes; - spc->padding = padding; - spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw; - spc->h_oversample = 1; - spc->v_oversample = 1; - spc->skip_missing = 0; - - stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes); - - if (pixels) - STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels - - return 1; -} - -STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc) -{ - STBTT_free(spc->nodes , spc->user_allocator_context); - STBTT_free(spc->pack_info, spc->user_allocator_context); -} - -STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample) -{ - STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE); - STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE); - if (h_oversample <= STBTT_MAX_OVERSAMPLE) - spc->h_oversample = h_oversample; - if (v_oversample <= STBTT_MAX_OVERSAMPLE) - spc->v_oversample = v_oversample; -} - -STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip) -{ - spc->skip_missing = skip; -} - -#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1) - -static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) -{ - unsigned char buffer[STBTT_MAX_OVERSAMPLE]; - int safe_w = w - kernel_width; - int j; - STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze - for (j=0; j < h; ++j) { - int i; - unsigned int total; - STBTT_memset(buffer, 0, kernel_width); - - total = 0; - - // make kernel_width a constant in common cases so compiler can optimize out the divide - switch (kernel_width) { - case 2: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 2); - } - break; - case 3: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 3); - } - break; - case 4: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 4); - } - break; - case 5: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / 5); - } - break; - default: - for (i=0; i <= safe_w; ++i) { - total += pixels[i] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i]; - pixels[i] = (unsigned char) (total / kernel_width); - } - break; - } - - for (; i < w; ++i) { - STBTT_assert(pixels[i] == 0); - total -= buffer[i & STBTT__OVER_MASK]; - pixels[i] = (unsigned char) (total / kernel_width); - } - - pixels += stride_in_bytes; - } -} - -static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width) -{ - unsigned char buffer[STBTT_MAX_OVERSAMPLE]; - int safe_h = h - kernel_width; - int j; - STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze - for (j=0; j < w; ++j) { - int i; - unsigned int total; - STBTT_memset(buffer, 0, kernel_width); - - total = 0; - - // make kernel_width a constant in common cases so compiler can optimize out the divide - switch (kernel_width) { - case 2: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 2); - } - break; - case 3: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 3); - } - break; - case 4: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 4); - } - break; - case 5: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / 5); - } - break; - default: - for (i=0; i <= safe_h; ++i) { - total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK]; - buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes]; - pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); - } - break; - } - - for (; i < h; ++i) { - STBTT_assert(pixels[i*stride_in_bytes] == 0); - total -= buffer[i & STBTT__OVER_MASK]; - pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width); - } - - pixels += 1; - } -} - -static float stbtt__oversample_shift(int oversample) -{ - if (!oversample) - return 0.0f; - - // The prefilter is a box filter of width "oversample", - // which shifts phase by (oversample - 1)/2 pixels in - // oversampled space. We want to shift in the opposite - // direction to counter this. - return (float)-(oversample - 1) / (2.0f * (float)oversample); -} - -// rects array must be big enough to accommodate all characters in the given ranges -STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) -{ - int i,j,k; - - k=0; - for (i=0; i < num_ranges; ++i) { - float fh = ranges[i].font_size; - float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); - ranges[i].h_oversample = (unsigned char) spc->h_oversample; - ranges[i].v_oversample = (unsigned char) spc->v_oversample; - for (j=0; j < ranges[i].num_chars; ++j) { - int x0,y0,x1,y1; - int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; - int glyph = stbtt_FindGlyphIndex(info, codepoint); - if (glyph == 0 && spc->skip_missing) { - rects[k].w = rects[k].h = 0; - } else { - stbtt_GetGlyphBitmapBoxSubpixel(info,glyph, - scale * spc->h_oversample, - scale * spc->v_oversample, - 0,0, - &x0,&y0,&x1,&y1); - rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1); - rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1); - } - ++k; - } - } - - return k; -} - -STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph) -{ - stbtt_MakeGlyphBitmapSubpixel(info, - output, - out_w - (prefilter_x - 1), - out_h - (prefilter_y - 1), - out_stride, - scale_x, - scale_y, - shift_x, - shift_y, - glyph); - - if (prefilter_x > 1) - stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x); - - if (prefilter_y > 1) - stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y); - - *sub_x = stbtt__oversample_shift(prefilter_x); - *sub_y = stbtt__oversample_shift(prefilter_y); -} - -// rects array must be big enough to accommodate all characters in the given ranges -STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects) -{ - int i,j,k, return_value = 1; - - // save current values - int old_h_over = spc->h_oversample; - int old_v_over = spc->v_oversample; - - k = 0; - for (i=0; i < num_ranges; ++i) { - float fh = ranges[i].font_size; - float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh); - float recip_h,recip_v,sub_x,sub_y; - spc->h_oversample = ranges[i].h_oversample; - spc->v_oversample = ranges[i].v_oversample; - recip_h = 1.0f / spc->h_oversample; - recip_v = 1.0f / spc->v_oversample; - sub_x = stbtt__oversample_shift(spc->h_oversample); - sub_y = stbtt__oversample_shift(spc->v_oversample); - for (j=0; j < ranges[i].num_chars; ++j) { - stbrp_rect *r = &rects[k]; - if (r->was_packed && r->w != 0 && r->h != 0) { - stbtt_packedchar *bc = &ranges[i].chardata_for_range[j]; - int advance, lsb, x0,y0,x1,y1; - int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j]; - int glyph = stbtt_FindGlyphIndex(info, codepoint); - stbrp_coord pad = (stbrp_coord) spc->padding; - - // pad on left and top - r->x += pad; - r->y += pad; - r->w -= pad; - r->h -= pad; - stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb); - stbtt_GetGlyphBitmapBox(info, glyph, - scale * spc->h_oversample, - scale * spc->v_oversample, - &x0,&y0,&x1,&y1); - stbtt_MakeGlyphBitmapSubpixel(info, - spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w - spc->h_oversample+1, - r->h - spc->v_oversample+1, - spc->stride_in_bytes, - scale * spc->h_oversample, - scale * spc->v_oversample, - 0,0, - glyph); - - if (spc->h_oversample > 1) - stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w, r->h, spc->stride_in_bytes, - spc->h_oversample); - - if (spc->v_oversample > 1) - stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes, - r->w, r->h, spc->stride_in_bytes, - spc->v_oversample); - - bc->x0 = (stbtt_int16) r->x; - bc->y0 = (stbtt_int16) r->y; - bc->x1 = (stbtt_int16) (r->x + r->w); - bc->y1 = (stbtt_int16) (r->y + r->h); - bc->xadvance = scale * advance; - bc->xoff = (float) x0 * recip_h + sub_x; - bc->yoff = (float) y0 * recip_v + sub_y; - bc->xoff2 = (x0 + r->w) * recip_h + sub_x; - bc->yoff2 = (y0 + r->h) * recip_v + sub_y; - } else { - return_value = 0; // if any fail, report failure - } - - ++k; - } - } - - // restore original values - spc->h_oversample = old_h_over; - spc->v_oversample = old_v_over; - - return return_value; -} - -STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects) -{ - stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects); -} - -STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges) -{ - stbtt_fontinfo info; - int i,j,n, return_value = 1; - //stbrp_context *context = (stbrp_context *) spc->pack_info; - stbrp_rect *rects; - - // flag all characters as NOT packed - for (i=0; i < num_ranges; ++i) - for (j=0; j < ranges[i].num_chars; ++j) - ranges[i].chardata_for_range[j].x0 = - ranges[i].chardata_for_range[j].y0 = - ranges[i].chardata_for_range[j].x1 = - ranges[i].chardata_for_range[j].y1 = 0; - - n = 0; - for (i=0; i < num_ranges; ++i) - n += ranges[i].num_chars; - - rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context); - if (rects == NULL) - return 0; - - info.userdata = spc->user_allocator_context; - stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index)); - - n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects); - - stbtt_PackFontRangesPackRects(spc, rects, n); - - return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects); - - STBTT_free(rects, spc->user_allocator_context); - return return_value; -} - -STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size, - int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range) -{ - stbtt_pack_range range; - range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range; - range.array_of_unicode_codepoints = NULL; - range.num_chars = num_chars_in_range; - range.chardata_for_range = chardata_for_range; - range.font_size = font_size; - return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1); -} - -STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap) -{ - int i_ascent, i_descent, i_lineGap; - float scale; - stbtt_fontinfo info; - stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index)); - scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size); - stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap); - *ascent = (float) i_ascent * scale; - *descent = (float) i_descent * scale; - *lineGap = (float) i_lineGap * scale; -} - -STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer) -{ - float ipw = 1.0f / pw, iph = 1.0f / ph; - const stbtt_packedchar *b = chardata + char_index; - - if (align_to_integer) { - float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f); - float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f); - q->x0 = x; - q->y0 = y; - q->x1 = x + b->xoff2 - b->xoff; - q->y1 = y + b->yoff2 - b->yoff; - } else { - q->x0 = *xpos + b->xoff; - q->y0 = *ypos + b->yoff; - q->x1 = *xpos + b->xoff2; - q->y1 = *ypos + b->yoff2; - } - - q->s0 = b->x0 * ipw; - q->t0 = b->y0 * iph; - q->s1 = b->x1 * ipw; - q->t1 = b->y1 * iph; - - *xpos += b->xadvance; -} - -////////////////////////////////////////////////////////////////////////////// -// -// sdf computation -// - -#define STBTT_min(a,b) ((a) < (b) ? (a) : (b)) -#define STBTT_max(a,b) ((a) < (b) ? (b) : (a)) - -static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2]) -{ - float q0perp = q0[1]*ray[0] - q0[0]*ray[1]; - float q1perp = q1[1]*ray[0] - q1[0]*ray[1]; - float q2perp = q2[1]*ray[0] - q2[0]*ray[1]; - float roperp = orig[1]*ray[0] - orig[0]*ray[1]; - - float a = q0perp - 2*q1perp + q2perp; - float b = q1perp - q0perp; - float c = q0perp - roperp; - - float s0 = 0., s1 = 0.; - int num_s = 0; - - if (a != 0.0) { - float discr = b*b - a*c; - if (discr > 0.0) { - float rcpna = -1 / a; - float d = (float) STBTT_sqrt(discr); - s0 = (b+d) * rcpna; - s1 = (b-d) * rcpna; - if (s0 >= 0.0 && s0 <= 1.0) - num_s = 1; - if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) { - if (num_s == 0) s0 = s1; - ++num_s; - } - } - } else { - // 2*b*s + c = 0 - // s = -c / (2*b) - s0 = c / (-2 * b); - if (s0 >= 0.0 && s0 <= 1.0) - num_s = 1; - } - - if (num_s == 0) - return 0; - else { - float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]); - float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2; - - float q0d = q0[0]*rayn_x + q0[1]*rayn_y; - float q1d = q1[0]*rayn_x + q1[1]*rayn_y; - float q2d = q2[0]*rayn_x + q2[1]*rayn_y; - float rod = orig[0]*rayn_x + orig[1]*rayn_y; - - float q10d = q1d - q0d; - float q20d = q2d - q0d; - float q0rd = q0d - rod; - - hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d; - hits[0][1] = a*s0+b; - - if (num_s > 1) { - hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d; - hits[1][1] = a*s1+b; - return 2; - } else { - return 1; - } - } -} - -static int equal(float *a, float *b) -{ - return (a[0] == b[0] && a[1] == b[1]); -} - -static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts) -{ - int i; - float orig[2], ray[2] = { 1, 0 }; - float y_frac; - int winding = 0; - - orig[0] = x; - orig[1] = y; - - // make sure y never passes through a vertex of the shape - y_frac = (float) STBTT_fmod(y, 1.0f); - if (y_frac < 0.01f) - y += 0.01f; - else if (y_frac > 0.99f) - y -= 0.01f; - orig[1] = y; - - // test a ray from (-infinity,y) to (x,y) - for (i=0; i < nverts; ++i) { - if (verts[i].type == STBTT_vline) { - int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y; - int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y; - if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; - if (x_inter < x) - winding += (y0 < y1) ? 1 : -1; - } - } - if (verts[i].type == STBTT_vcurve) { - int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ; - int x1 = (int) verts[i ].cx, y1 = (int) verts[i ].cy; - int x2 = (int) verts[i ].x , y2 = (int) verts[i ].y ; - int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2)); - int by = STBTT_max(y0,STBTT_max(y1,y2)); - if (y > ay && y < by && x > ax) { - float q0[2],q1[2],q2[2]; - float hits[2][2]; - q0[0] = (float)x0; - q0[1] = (float)y0; - q1[0] = (float)x1; - q1[1] = (float)y1; - q2[0] = (float)x2; - q2[1] = (float)y2; - if (equal(q0,q1) || equal(q1,q2)) { - x0 = (int)verts[i-1].x; - y0 = (int)verts[i-1].y; - x1 = (int)verts[i ].x; - y1 = (int)verts[i ].y; - if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) { - float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0; - if (x_inter < x) - winding += (y0 < y1) ? 1 : -1; - } - } else { - int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits); - if (num_hits >= 1) - if (hits[0][0] < 0) - winding += (hits[0][1] < 0 ? -1 : 1); - if (num_hits >= 2) - if (hits[1][0] < 0) - winding += (hits[1][1] < 0 ? -1 : 1); - } - } - } - } - return winding; -} - -static float stbtt__cuberoot( float x ) -{ - if (x<0) - return -(float) STBTT_pow(-x,1.0f/3.0f); - else - return (float) STBTT_pow( x,1.0f/3.0f); -} - -// x^3 + c*x^2 + b*x + a = 0 -static int stbtt__solve_cubic(float a, float b, float c, float* r) -{ - float s = -a / 3; - float p = b - a*a / 3; - float q = a * (2*a*a - 9*b) / 27 + c; - float p3 = p*p*p; - float d = q*q + 4*p3 / 27; - if (d >= 0) { - float z = (float) STBTT_sqrt(d); - float u = (-q + z) / 2; - float v = (-q - z) / 2; - u = stbtt__cuberoot(u); - v = stbtt__cuberoot(v); - r[0] = s + u + v; - return 1; - } else { - float u = (float) STBTT_sqrt(-p/3); - float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative - float m = (float) STBTT_cos(v); - float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f; - r[0] = s + u * 2 * m; - r[1] = s - u * (m + n); - r[2] = s - u * (m - n); - - //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe? - //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f); - //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f); - return 3; - } -} - -STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) -{ - float scale_x = scale, scale_y = scale; - int ix0,iy0,ix1,iy1; - int w,h; - unsigned char *data; - - // if one scale is 0, use same scale for both - if (scale_x == 0) scale_x = scale_y; - if (scale_y == 0) { - if (scale_x == 0) return NULL; // if both scales are 0, return NULL - scale_y = scale_x; - } - - stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1); - - // if empty, return NULL - if (ix0 == ix1 || iy0 == iy1) - return NULL; - - ix0 -= padding; - iy0 -= padding; - ix1 += padding; - iy1 += padding; - - w = (ix1 - ix0); - h = (iy1 - iy0); - - if (width ) *width = w; - if (height) *height = h; - if (xoff ) *xoff = ix0; - if (yoff ) *yoff = iy0; - - // invert for y-downwards bitmaps - scale_y = -scale_y; - - { - int x,y,i,j; - float *precompute; - stbtt_vertex *verts; - int num_verts = stbtt_GetGlyphShape(info, glyph, &verts); - data = (unsigned char *) STBTT_malloc(w * h, info->userdata); - precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata); - - for (i=0,j=num_verts-1; i < num_verts; j=i++) { - if (verts[i].type == STBTT_vline) { - float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y; - float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); - precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist; - } else if (verts[i].type == STBTT_vcurve) { - float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y; - float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y; - float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y; - float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - float len2 = bx*bx + by*by; - if (len2 != 0.0f) - precompute[i] = 1.0f / (bx*bx + by*by); - else - precompute[i] = 0.0f; - } else - precompute[i] = 0.0f; - } - - for (y=iy0; y < iy1; ++y) { - for (x=ix0; x < ix1; ++x) { - float val; - float min_dist = 999999.0f; - float sx = (float) x + 0.5f; - float sy = (float) y + 0.5f; - float x_gspace = (sx / scale_x); - float y_gspace = (sy / scale_y); - - int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path - - for (i=0; i < num_verts; ++i) { - float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y; - - // check against every point here rather than inside line/curve primitives -- @TODO: wrong if multiple 'moves' in a row produce a garbage point, and given culling, probably more efficient to do within line/curve - float dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy); - if (dist2 < min_dist*min_dist) - min_dist = (float) STBTT_sqrt(dist2); - - if (verts[i].type == STBTT_vline) { - float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y; - - // coarse culling against bbox - //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist && - // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist) - float dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i]; - STBTT_assert(i != 0); - if (dist < min_dist) { - // check position along line - // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0) - // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy) - float dx = x1-x0, dy = y1-y0; - float px = x0-sx, py = y0-sy; - // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy - // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve - float t = -(px*dx + py*dy) / (dx*dx + dy*dy); - if (t >= 0.0f && t <= 1.0f) - min_dist = dist; - } - } else if (verts[i].type == STBTT_vcurve) { - float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y; - float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y; - float box_x0 = STBTT_min(STBTT_min(x0,x1),x2); - float box_y0 = STBTT_min(STBTT_min(y0,y1),y2); - float box_x1 = STBTT_max(STBTT_max(x0,x1),x2); - float box_y1 = STBTT_max(STBTT_max(y0,y1),y2); - // coarse culling against bbox to avoid computing cubic unnecessarily - if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) { - int num=0; - float ax = x1-x0, ay = y1-y0; - float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2; - float mx = x0 - sx, my = y0 - sy; - float res[3],px,py,t,it; - float a_inv = precompute[i]; - if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula - float a = 3*(ax*bx + ay*by); - float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by); - float c = mx*ax+my*ay; - if (a == 0.0) { // if a is 0, it's linear - if (b != 0.0) { - res[num++] = -c/b; - } - } else { - float discriminant = b*b - 4*a*c; - if (discriminant < 0) - num = 0; - else { - float root = (float) STBTT_sqrt(discriminant); - res[0] = (-b - root)/(2*a); - res[1] = (-b + root)/(2*a); - num = 2; // don't bother distinguishing 1-solution case, as code below will still work - } - } - } else { - float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point - float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv; - float d = (mx*ax+my*ay) * a_inv; - num = stbtt__solve_cubic(b, c, d, res); - } - if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) { - t = res[0], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) { - t = res[1], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) { - t = res[2], it = 1.0f - t; - px = it*it*x0 + 2*t*it*x1 + t*t*x2; - py = it*it*y0 + 2*t*it*y1 + t*t*y2; - dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy); - if (dist2 < min_dist * min_dist) - min_dist = (float) STBTT_sqrt(dist2); - } - } - } - } - if (winding == 0) - min_dist = -min_dist; // if outside the shape, value is negative - val = onedge_value + pixel_dist_scale * min_dist; - if (val < 0) - val = 0; - else if (val > 255) - val = 255; - data[(y-iy0)*w+(x-ix0)] = (unsigned char) val; - } - } - STBTT_free(precompute, info->userdata); - STBTT_free(verts, info->userdata); - } - return data; -} - -STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff) -{ - return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff); -} - -STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata) -{ - STBTT_free(bitmap, userdata); -} - -////////////////////////////////////////////////////////////////////////////// -// -// font name matching -- recommended not to use this -// - -// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string -static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2) -{ - stbtt_int32 i=0; - - // convert utf16 to utf8 and compare the results while converting - while (len2) { - stbtt_uint16 ch = s2[0]*256 + s2[1]; - if (ch < 0x80) { - if (i >= len1) return -1; - if (s1[i++] != ch) return -1; - } else if (ch < 0x800) { - if (i+1 >= len1) return -1; - if (s1[i++] != 0xc0 + (ch >> 6)) return -1; - if (s1[i++] != 0x80 + (ch & 0x3f)) return -1; - } else if (ch >= 0xd800 && ch < 0xdc00) { - stbtt_uint32 c; - stbtt_uint16 ch2 = s2[2]*256 + s2[3]; - if (i+3 >= len1) return -1; - c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000; - if (s1[i++] != 0xf0 + (c >> 18)) return -1; - if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1; - s2 += 2; // plus another 2 below - len2 -= 2; - } else if (ch >= 0xdc00 && ch < 0xe000) { - return -1; - } else { - if (i+2 >= len1) return -1; - if (s1[i++] != 0xe0 + (ch >> 12)) return -1; - if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1; - if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1; - } - s2 += 2; - len2 -= 2; - } - return i; -} - -static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2) -{ - return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2); -} - -// returns results in whatever encoding you request... but note that 2-byte encodings -// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare -STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID) -{ - stbtt_int32 i,count,stringOffset; - stbtt_uint8 *fc = font->data; - stbtt_uint32 offset = font->fontstart; - stbtt_uint32 nm = stbtt__find_table(fc, offset, "name"); - if (!nm) return NULL; - - count = ttUSHORT(fc+nm+2); - stringOffset = nm + ttUSHORT(fc+nm+4); - for (i=0; i < count; ++i) { - stbtt_uint32 loc = nm + 6 + 12 * i; - if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2) - && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) { - *length = ttUSHORT(fc+loc+8); - return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10)); - } - } - return NULL; -} - -static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id) -{ - stbtt_int32 i; - stbtt_int32 count = ttUSHORT(fc+nm+2); - stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4); - - for (i=0; i < count; ++i) { - stbtt_uint32 loc = nm + 6 + 12 * i; - stbtt_int32 id = ttUSHORT(fc+loc+6); - if (id == target_id) { - // find the encoding - stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4); - - // is this a Unicode encoding? - if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) { - stbtt_int32 slen = ttUSHORT(fc+loc+8); - stbtt_int32 off = ttUSHORT(fc+loc+10); - - // check if there's a prefix match - stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen); - if (matchlen >= 0) { - // check for target_id+1 immediately following, with same encoding & language - if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) { - slen = ttUSHORT(fc+loc+12+8); - off = ttUSHORT(fc+loc+12+10); - if (slen == 0) { - if (matchlen == nlen) - return 1; - } else if (matchlen < nlen && name[matchlen] == ' ') { - ++matchlen; - if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen)) - return 1; - } - } else { - // if nothing immediately following - if (matchlen == nlen) - return 1; - } - } - } - - // @TODO handle other encodings - } - } - return 0; -} - -static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags) -{ - stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name); - stbtt_uint32 nm,hd; - if (!stbtt__isfont(fc+offset)) return 0; - - // check italics/bold/underline flags in macStyle... - if (flags) { - hd = stbtt__find_table(fc, offset, "head"); - if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0; - } - - nm = stbtt__find_table(fc, offset, "name"); - if (!nm) return 0; - - if (flags) { - // if we checked the macStyle flags, then just check the family and ignore the subfamily - if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; - } else { - if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1; - if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1; - } - - return 0; -} - -static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags) -{ - stbtt_int32 i; - for (i=0;;++i) { - stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i); - if (off < 0) return off; - if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags)) - return off; - } -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-qual" -#endif - -STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, - float pixel_height, unsigned char *pixels, int pw, int ph, - int first_char, int num_chars, stbtt_bakedchar *chardata) -{ - return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata); -} - -STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index) -{ - return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index); -} - -STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data) -{ - return stbtt_GetNumberOfFonts_internal((unsigned char *) data); -} - -STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset) -{ - return stbtt_InitFont_internal(info, (unsigned char *) data, offset); -} - -STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags) -{ - return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags); -} - -STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2) -{ - return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2); -} - -#if defined(__GNUC__) || defined(__clang__) -#pragma GCC diagnostic pop -#endif - -#endif // STB_TRUETYPE_IMPLEMENTATION - - -// FULL VERSION HISTORY -// -// 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod -// 1.18 (2018-01-29) add missing function -// 1.17 (2017-07-23) make more arguments const; doc fix -// 1.16 (2017-07-12) SDF support -// 1.15 (2017-03-03) make more arguments const -// 1.14 (2017-01-16) num-fonts-in-TTC function -// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts -// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual -// 1.11 (2016-04-02) fix unused-variable warning -// 1.10 (2016-04-02) allow user-defined fabs() replacement -// fix memory leak if fontsize=0.0 -// fix warning from duplicate typedef -// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges -// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges -// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints; -// allow PackFontRanges to pack and render in separate phases; -// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?); -// fixed an assert() bug in the new rasterizer -// replace assert() with STBTT_assert() in new rasterizer -// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine) -// also more precise AA rasterizer, except if shapes overlap -// remove need for STBTT_sort -// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC -// 1.04 (2015-04-15) typo in example -// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes -// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++ -// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match -// non-oversampled; STBTT_POINT_SIZE for packed case only -// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling -// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg) -// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID -// 0.8b (2014-07-07) fix a warning -// 0.8 (2014-05-25) fix a few more warnings -// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back -// 0.6c (2012-07-24) improve documentation -// 0.6b (2012-07-20) fix a few more warnings -// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels, -// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty -// 0.5 (2011-12-09) bugfixes: -// subpixel glyph renderer computed wrong bounding box -// first vertex of shape can be off-curve (FreeSans) -// 0.4b (2011-12-03) fixed an error in the font baking example -// 0.4 (2011-12-01) kerning, subpixel rendering (tor) -// bugfixes for: -// codepoint-to-glyph conversion using table fmt=12 -// codepoint-to-glyph conversion using table fmt=4 -// stbtt_GetBakedQuad with non-square texture (Zer) -// updated Hello World! sample to use kerning and subpixel -// fixed some warnings -// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM) -// userdata, malloc-from-userdata, non-zero fill (stb) -// 0.2 (2009-03-11) Fix unsigned/signed char warnings -// 0.1 (2009-03-09) First public release -// - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -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. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -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 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. ------------------------------------------------------------------------------- -*/ diff --git a/thirdparty/zstd/common/bitstream.h b/thirdparty/zstd/common/bitstream.h index d955bd677b..7bdb060460 100644 --- a/thirdparty/zstd/common/bitstream.h +++ b/thirdparty/zstd/common/bitstream.h @@ -57,6 +57,8 @@ extern "C" { =========================================*/ #if defined(__BMI__) && defined(__GNUC__) # include <immintrin.h> /* support for bextr (experimental) */ +#elif defined(__ICCARM__) +# include <intrinsics.h> #endif #define STREAM_ACCUMULATOR_MIN_32 25 @@ -163,6 +165,8 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val) return (unsigned) r; # elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */ return 31 - __builtin_clz (val); +# elif defined(__ICCARM__) /* IAR Intrinsic */ + return 31 - __CLZ(val); # else /* Software version */ static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, diff --git a/thirdparty/zstd/common/compiler.h b/thirdparty/zstd/common/compiler.h index 87bf51ae8c..6686b837d6 100644 --- a/thirdparty/zstd/common/compiler.h +++ b/thirdparty/zstd/common/compiler.h @@ -23,7 +23,7 @@ # define INLINE_KEYWORD #endif -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__ICCARM__) # define FORCE_INLINE_ATTR __attribute__((always_inline)) #elif defined(_MSC_VER) # define FORCE_INLINE_ATTR __forceinline @@ -65,7 +65,7 @@ #ifdef _MSC_VER # define FORCE_NOINLINE static __declspec(noinline) #else -# ifdef __GNUC__ +# if defined(__GNUC__) || defined(__ICCARM__) # define FORCE_NOINLINE static __attribute__((__noinline__)) # else # define FORCE_NOINLINE static @@ -76,7 +76,7 @@ #ifndef __has_attribute #define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ #endif -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__ICCARM__) # define TARGET_ATTRIBUTE(target) __attribute__((__target__(target))) #else # define TARGET_ATTRIBUTE(target) diff --git a/thirdparty/zstd/common/mem.h b/thirdparty/zstd/common/mem.h index 5da248756f..c10d7f61e1 100644 --- a/thirdparty/zstd/common/mem.h +++ b/thirdparty/zstd/common/mem.h @@ -102,7 +102,7 @@ MEM_STATIC void MEM_check(void) { MEM_STATIC_ASSERT((sizeof(size_t)==4) || (size #ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */ # if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) # define MEM_FORCE_MEMORY_ACCESS 2 -# elif defined(__INTEL_COMPILER) || defined(__GNUC__) +# elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__) # define MEM_FORCE_MEMORY_ACCESS 1 # endif #endif diff --git a/thirdparty/zstd/common/xxhash.c b/thirdparty/zstd/common/xxhash.c index 30599aaae4..99d2459621 100644 --- a/thirdparty/zstd/common/xxhash.c +++ b/thirdparty/zstd/common/xxhash.c @@ -53,7 +53,8 @@ # if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) # define XXH_FORCE_MEMORY_ACCESS 2 # elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \ - (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) + (defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) || \ + defined(__ICCARM__) # define XXH_FORCE_MEMORY_ACCESS 1 # endif #endif @@ -120,7 +121,7 @@ static void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcp # define INLINE_KEYWORD #endif -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__ICCARM__) # define FORCE_INLINE_ATTR __attribute__((always_inline)) #elif defined(_MSC_VER) # define FORCE_INLINE_ATTR __forceinline @@ -206,7 +207,12 @@ static U64 XXH_read64(const void* memPtr) # define XXH_rotl32(x,r) _rotl(x,r) # define XXH_rotl64(x,r) _rotl64(x,r) #else +#if defined(__ICCARM__) +# include <intrinsics.h> +# define XXH_rotl32(x,r) __ROR(x,(32 - r)) +#else # define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r))) +#endif # define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r))) #endif diff --git a/thirdparty/zstd/common/zstd_internal.h b/thirdparty/zstd/common/zstd_internal.h index 81b16eac2e..585fd6b19e 100644 --- a/thirdparty/zstd/common/zstd_internal.h +++ b/thirdparty/zstd/common/zstd_internal.h @@ -56,9 +56,9 @@ extern "C" { /** * Return the specified error if the condition evaluates to true. * - * In debug modes, prints additional information. In order to do that - * (particularly, printing the conditional that failed), this can't just wrap - * RETURN_ERROR(). + * In debug modes, prints additional information. + * In order to do that (particularly, printing the conditional that failed), + * this can't just wrap RETURN_ERROR(). */ #define RETURN_ERROR_IF(cond, err, ...) \ if (cond) { \ @@ -324,6 +324,8 @@ MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus return (unsigned)r; # elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */ return 31 - __builtin_clz(val); +# elif defined(__ICCARM__) /* IAR Intrinsic */ + return 31 - __CLZ(val); # else /* Software version */ static const U32 DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 }; U32 v = val; diff --git a/thirdparty/zstd/compress/zstd_compress.c b/thirdparty/zstd/compress/zstd_compress.c index 1476512580..cd73db13be 100644 --- a/thirdparty/zstd/compress/zstd_compress.c +++ b/thirdparty/zstd/compress/zstd_compress.c @@ -21,6 +21,8 @@ #define HUF_STATIC_LINKING_ONLY #include "huf.h" #include "zstd_compress_internal.h" +#include "zstd_compress_sequences.h" +#include "zstd_compress_literals.h" #include "zstd_fast.h" #include "zstd_double_fast.h" #include "zstd_lazy.h" @@ -397,18 +399,6 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param) } } -/* ZSTD_cParam_withinBounds: - * @return 1 if value is within cParam bounds, - * 0 otherwise */ -static int ZSTD_cParam_withinBounds(ZSTD_cParameter cParam, int value) -{ - ZSTD_bounds const bounds = ZSTD_cParam_getBounds(cParam); - if (ZSTD_isError(bounds.error)) return 0; - if (value < bounds.lowerBound) return 0; - if (value > bounds.upperBound) return 0; - return 1; -} - /* ZSTD_cParam_clampBounds: * Clamps the value into the bounded range. */ @@ -1903,155 +1893,6 @@ static size_t ZSTD_noCompressBlock (void* dst, size_t dstCapacity, const void* s return ZSTD_blockHeaderSize + srcSize; } -static size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ - BYTE* const ostart = (BYTE* const)dst; - U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); - - RETURN_ERROR_IF(srcSize + flSize > dstCapacity, dstSize_tooSmall); - - switch(flSize) - { - case 1: /* 2 - 1 - 5 */ - ostart[0] = (BYTE)((U32)set_basic + (srcSize<<3)); - break; - case 2: /* 2 - 2 - 12 */ - MEM_writeLE16(ostart, (U16)((U32)set_basic + (1<<2) + (srcSize<<4))); - break; - case 3: /* 2 - 2 - 20 */ - MEM_writeLE32(ostart, (U32)((U32)set_basic + (3<<2) + (srcSize<<4))); - break; - default: /* not necessary : flSize is {1,2,3} */ - assert(0); - } - - memcpy(ostart + flSize, src, srcSize); - return srcSize + flSize; -} - -static size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize) -{ - BYTE* const ostart = (BYTE* const)dst; - U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); - - (void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */ - - switch(flSize) - { - case 1: /* 2 - 1 - 5 */ - ostart[0] = (BYTE)((U32)set_rle + (srcSize<<3)); - break; - case 2: /* 2 - 2 - 12 */ - MEM_writeLE16(ostart, (U16)((U32)set_rle + (1<<2) + (srcSize<<4))); - break; - case 3: /* 2 - 2 - 20 */ - MEM_writeLE32(ostart, (U32)((U32)set_rle + (3<<2) + (srcSize<<4))); - break; - default: /* not necessary : flSize is {1,2,3} */ - assert(0); - } - - ostart[flSize] = *(const BYTE*)src; - return flSize+1; -} - - -/* ZSTD_minGain() : - * minimum compression required - * to generate a compress block or a compressed literals section. - * note : use same formula for both situations */ -static size_t ZSTD_minGain(size_t srcSize, ZSTD_strategy strat) -{ - U32 const minlog = (strat>=ZSTD_btultra) ? (U32)(strat) - 1 : 6; - ZSTD_STATIC_ASSERT(ZSTD_btultra == 8); - assert(ZSTD_cParam_withinBounds(ZSTD_c_strategy, strat)); - return (srcSize >> minlog) + 2; -} - -static size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf, - ZSTD_hufCTables_t* nextHuf, - ZSTD_strategy strategy, int disableLiteralCompression, - void* dst, size_t dstCapacity, - const void* src, size_t srcSize, - void* workspace, size_t wkspSize, - const int bmi2) -{ - size_t const minGain = ZSTD_minGain(srcSize, strategy); - size_t const lhSize = 3 + (srcSize >= 1 KB) + (srcSize >= 16 KB); - BYTE* const ostart = (BYTE*)dst; - U32 singleStream = srcSize < 256; - symbolEncodingType_e hType = set_compressed; - size_t cLitSize; - - DEBUGLOG(5,"ZSTD_compressLiterals (disableLiteralCompression=%i)", - disableLiteralCompression); - - /* Prepare nextEntropy assuming reusing the existing table */ - memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - - if (disableLiteralCompression) - return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); - - /* small ? don't even attempt compression (speed opt) */ -# define COMPRESS_LITERALS_SIZE_MIN 63 - { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN; - if (srcSize <= minLitSize) return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); - } - - RETURN_ERROR_IF(dstCapacity < lhSize+1, dstSize_tooSmall, "not enough space for compression"); - { HUF_repeat repeat = prevHuf->repeatMode; - int const preferRepeat = strategy < ZSTD_lazy ? srcSize <= 1024 : 0; - if (repeat == HUF_repeat_valid && lhSize == 3) singleStream = 1; - cLitSize = singleStream ? HUF_compress1X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, - workspace, wkspSize, (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2) - : HUF_compress4X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, - workspace, wkspSize, (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2); - if (repeat != HUF_repeat_none) { - /* reused the existing table */ - hType = set_repeat; - } - } - - if ((cLitSize==0) | (cLitSize >= srcSize - minGain) | ERR_isError(cLitSize)) { - memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); - } - if (cLitSize==1) { - memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); - return ZSTD_compressRleLiteralsBlock(dst, dstCapacity, src, srcSize); - } - - if (hType == set_compressed) { - /* using a newly constructed table */ - nextHuf->repeatMode = HUF_repeat_check; - } - - /* Build header */ - switch(lhSize) - { - case 3: /* 2 - 2 - 10 - 10 */ - { U32 const lhc = hType + ((!singleStream) << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<14); - MEM_writeLE24(ostart, lhc); - break; - } - case 4: /* 2 - 2 - 14 - 14 */ - { U32 const lhc = hType + (2 << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<18); - MEM_writeLE32(ostart, lhc); - break; - } - case 5: /* 2 - 2 - 18 - 18 */ - { U32 const lhc = hType + (3 << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<22); - MEM_writeLE32(ostart, lhc); - ostart[4] = (BYTE)(cLitSize >> 10); - break; - } - default: /* not possible : lhSize is {3,4,5} */ - assert(0); - } - return lhSize+cLitSize; -} - - void ZSTD_seqToCodes(const seqStore_t* seqStorePtr) { const seqDef* const sequences = seqStorePtr->sequencesStart; @@ -2074,418 +1915,6 @@ void ZSTD_seqToCodes(const seqStore_t* seqStorePtr) mlCodeTable[seqStorePtr->longLengthPos] = MaxML; } - -/** - * -log2(x / 256) lookup table for x in [0, 256). - * If x == 0: Return 0 - * Else: Return floor(-log2(x / 256) * 256) - */ -static unsigned const kInverseProbabilityLog256[256] = { - 0, 2048, 1792, 1642, 1536, 1453, 1386, 1329, 1280, 1236, 1197, 1162, - 1130, 1100, 1073, 1047, 1024, 1001, 980, 960, 941, 923, 906, 889, - 874, 859, 844, 830, 817, 804, 791, 779, 768, 756, 745, 734, - 724, 714, 704, 694, 685, 676, 667, 658, 650, 642, 633, 626, - 618, 610, 603, 595, 588, 581, 574, 567, 561, 554, 548, 542, - 535, 529, 523, 517, 512, 506, 500, 495, 489, 484, 478, 473, - 468, 463, 458, 453, 448, 443, 438, 434, 429, 424, 420, 415, - 411, 407, 402, 398, 394, 390, 386, 382, 377, 373, 370, 366, - 362, 358, 354, 350, 347, 343, 339, 336, 332, 329, 325, 322, - 318, 315, 311, 308, 305, 302, 298, 295, 292, 289, 286, 282, - 279, 276, 273, 270, 267, 264, 261, 258, 256, 253, 250, 247, - 244, 241, 239, 236, 233, 230, 228, 225, 222, 220, 217, 215, - 212, 209, 207, 204, 202, 199, 197, 194, 192, 190, 187, 185, - 182, 180, 178, 175, 173, 171, 168, 166, 164, 162, 159, 157, - 155, 153, 151, 149, 146, 144, 142, 140, 138, 136, 134, 132, - 130, 128, 126, 123, 121, 119, 117, 115, 114, 112, 110, 108, - 106, 104, 102, 100, 98, 96, 94, 93, 91, 89, 87, 85, - 83, 82, 80, 78, 76, 74, 73, 71, 69, 67, 66, 64, - 62, 61, 59, 57, 55, 54, 52, 50, 49, 47, 46, 44, - 42, 41, 39, 37, 36, 34, 33, 31, 30, 28, 26, 25, - 23, 22, 20, 19, 17, 16, 14, 13, 11, 10, 8, 7, - 5, 4, 2, 1, -}; - - -/** - * Returns the cost in bits of encoding the distribution described by count - * using the entropy bound. - */ -static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t const total) -{ - unsigned cost = 0; - unsigned s; - for (s = 0; s <= max; ++s) { - unsigned norm = (unsigned)((256 * count[s]) / total); - if (count[s] != 0 && norm == 0) - norm = 1; - assert(count[s] < total); - cost += count[s] * kInverseProbabilityLog256[norm]; - } - return cost >> 8; -} - - -/** - * Returns the cost in bits of encoding the distribution in count using the - * table described by norm. The max symbol support by norm is assumed >= max. - * norm must be valid for every symbol with non-zero probability in count. - */ -static size_t ZSTD_crossEntropyCost(short const* norm, unsigned accuracyLog, - unsigned const* count, unsigned const max) -{ - unsigned const shift = 8 - accuracyLog; - size_t cost = 0; - unsigned s; - assert(accuracyLog <= 8); - for (s = 0; s <= max; ++s) { - unsigned const normAcc = norm[s] != -1 ? norm[s] : 1; - unsigned const norm256 = normAcc << shift; - assert(norm256 > 0); - assert(norm256 < 256); - cost += count[s] * kInverseProbabilityLog256[norm256]; - } - return cost >> 8; -} - - -static unsigned ZSTD_getFSEMaxSymbolValue(FSE_CTable const* ctable) { - void const* ptr = ctable; - U16 const* u16ptr = (U16 const*)ptr; - U32 const maxSymbolValue = MEM_read16(u16ptr + 1); - return maxSymbolValue; -} - - -/** - * Returns the cost in bits of encoding the distribution in count using ctable. - * Returns an error if ctable cannot represent all the symbols in count. - */ -static size_t ZSTD_fseBitCost( - FSE_CTable const* ctable, - unsigned const* count, - unsigned const max) -{ - unsigned const kAccuracyLog = 8; - size_t cost = 0; - unsigned s; - FSE_CState_t cstate; - FSE_initCState(&cstate, ctable); - RETURN_ERROR_IF(ZSTD_getFSEMaxSymbolValue(ctable) < max, GENERIC, - "Repeat FSE_CTable has maxSymbolValue %u < %u", - ZSTD_getFSEMaxSymbolValue(ctable), max); - for (s = 0; s <= max; ++s) { - unsigned const tableLog = cstate.stateLog; - unsigned const badCost = (tableLog + 1) << kAccuracyLog; - unsigned const bitCost = FSE_bitCost(cstate.symbolTT, tableLog, s, kAccuracyLog); - if (count[s] == 0) - continue; - RETURN_ERROR_IF(bitCost >= badCost, GENERIC, - "Repeat FSE_CTable has Prob[%u] == 0", s); - cost += count[s] * bitCost; - } - return cost >> kAccuracyLog; -} - -/** - * Returns the cost in bytes of encoding the normalized count header. - * Returns an error if any of the helper functions return an error. - */ -static size_t ZSTD_NCountCost(unsigned const* count, unsigned const max, - size_t const nbSeq, unsigned const FSELog) -{ - BYTE wksp[FSE_NCOUNTBOUND]; - S16 norm[MaxSeq + 1]; - const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); - FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq, max)); - return FSE_writeNCount(wksp, sizeof(wksp), norm, max, tableLog); -} - - -typedef enum { - ZSTD_defaultDisallowed = 0, - ZSTD_defaultAllowed = 1 -} ZSTD_defaultPolicy_e; - -MEM_STATIC symbolEncodingType_e -ZSTD_selectEncodingType( - FSE_repeat* repeatMode, unsigned const* count, unsigned const max, - size_t const mostFrequent, size_t nbSeq, unsigned const FSELog, - FSE_CTable const* prevCTable, - short const* defaultNorm, U32 defaultNormLog, - ZSTD_defaultPolicy_e const isDefaultAllowed, - ZSTD_strategy const strategy) -{ - ZSTD_STATIC_ASSERT(ZSTD_defaultDisallowed == 0 && ZSTD_defaultAllowed != 0); - if (mostFrequent == nbSeq) { - *repeatMode = FSE_repeat_none; - if (isDefaultAllowed && nbSeq <= 2) { - /* Prefer set_basic over set_rle when there are 2 or less symbols, - * since RLE uses 1 byte, but set_basic uses 5-6 bits per symbol. - * If basic encoding isn't possible, always choose RLE. - */ - DEBUGLOG(5, "Selected set_basic"); - return set_basic; - } - DEBUGLOG(5, "Selected set_rle"); - return set_rle; - } - if (strategy < ZSTD_lazy) { - if (isDefaultAllowed) { - size_t const staticFse_nbSeq_max = 1000; - size_t const mult = 10 - strategy; - size_t const baseLog = 3; - size_t const dynamicFse_nbSeq_min = (((size_t)1 << defaultNormLog) * mult) >> baseLog; /* 28-36 for offset, 56-72 for lengths */ - assert(defaultNormLog >= 5 && defaultNormLog <= 6); /* xx_DEFAULTNORMLOG */ - assert(mult <= 9 && mult >= 7); - if ( (*repeatMode == FSE_repeat_valid) - && (nbSeq < staticFse_nbSeq_max) ) { - DEBUGLOG(5, "Selected set_repeat"); - return set_repeat; - } - if ( (nbSeq < dynamicFse_nbSeq_min) - || (mostFrequent < (nbSeq >> (defaultNormLog-1))) ) { - DEBUGLOG(5, "Selected set_basic"); - /* The format allows default tables to be repeated, but it isn't useful. - * When using simple heuristics to select encoding type, we don't want - * to confuse these tables with dictionaries. When running more careful - * analysis, we don't need to waste time checking both repeating tables - * and default tables. - */ - *repeatMode = FSE_repeat_none; - return set_basic; - } - } - } else { - size_t const basicCost = isDefaultAllowed ? ZSTD_crossEntropyCost(defaultNorm, defaultNormLog, count, max) : ERROR(GENERIC); - size_t const repeatCost = *repeatMode != FSE_repeat_none ? ZSTD_fseBitCost(prevCTable, count, max) : ERROR(GENERIC); - size_t const NCountCost = ZSTD_NCountCost(count, max, nbSeq, FSELog); - size_t const compressedCost = (NCountCost << 3) + ZSTD_entropyCost(count, max, nbSeq); - - if (isDefaultAllowed) { - assert(!ZSTD_isError(basicCost)); - assert(!(*repeatMode == FSE_repeat_valid && ZSTD_isError(repeatCost))); - } - assert(!ZSTD_isError(NCountCost)); - assert(compressedCost < ERROR(maxCode)); - DEBUGLOG(5, "Estimated bit costs: basic=%u\trepeat=%u\tcompressed=%u", - (unsigned)basicCost, (unsigned)repeatCost, (unsigned)compressedCost); - if (basicCost <= repeatCost && basicCost <= compressedCost) { - DEBUGLOG(5, "Selected set_basic"); - assert(isDefaultAllowed); - *repeatMode = FSE_repeat_none; - return set_basic; - } - if (repeatCost <= compressedCost) { - DEBUGLOG(5, "Selected set_repeat"); - assert(!ZSTD_isError(repeatCost)); - return set_repeat; - } - assert(compressedCost < basicCost && compressedCost < repeatCost); - } - DEBUGLOG(5, "Selected set_compressed"); - *repeatMode = FSE_repeat_check; - return set_compressed; -} - -MEM_STATIC size_t -ZSTD_buildCTable(void* dst, size_t dstCapacity, - FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type, - unsigned* count, U32 max, - const BYTE* codeTable, size_t nbSeq, - const S16* defaultNorm, U32 defaultNormLog, U32 defaultMax, - const FSE_CTable* prevCTable, size_t prevCTableSize, - void* workspace, size_t workspaceSize) -{ - BYTE* op = (BYTE*)dst; - const BYTE* const oend = op + dstCapacity; - DEBUGLOG(6, "ZSTD_buildCTable (dstCapacity=%u)", (unsigned)dstCapacity); - - switch (type) { - case set_rle: - FORWARD_IF_ERROR(FSE_buildCTable_rle(nextCTable, (BYTE)max)); - RETURN_ERROR_IF(dstCapacity==0, dstSize_tooSmall); - *op = codeTable[0]; - return 1; - case set_repeat: - memcpy(nextCTable, prevCTable, prevCTableSize); - return 0; - case set_basic: - FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, defaultNorm, defaultMax, defaultNormLog, workspace, workspaceSize)); /* note : could be pre-calculated */ - return 0; - case set_compressed: { - S16 norm[MaxSeq + 1]; - size_t nbSeq_1 = nbSeq; - const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); - if (count[codeTable[nbSeq-1]] > 1) { - count[codeTable[nbSeq-1]]--; - nbSeq_1--; - } - assert(nbSeq_1 > 1); - FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max)); - { size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */ - FORWARD_IF_ERROR(NCountSize); - FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, norm, max, tableLog, workspace, workspaceSize)); - return NCountSize; - } - } - default: assert(0); RETURN_ERROR(GENERIC); - } -} - -FORCE_INLINE_TEMPLATE size_t -ZSTD_encodeSequences_body( - void* dst, size_t dstCapacity, - FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, - FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, - FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, - seqDef const* sequences, size_t nbSeq, int longOffsets) -{ - BIT_CStream_t blockStream; - FSE_CState_t stateMatchLength; - FSE_CState_t stateOffsetBits; - FSE_CState_t stateLitLength; - - RETURN_ERROR_IF( - ERR_isError(BIT_initCStream(&blockStream, dst, dstCapacity)), - dstSize_tooSmall, "not enough space remaining"); - DEBUGLOG(6, "available space for bitstream : %i (dstCapacity=%u)", - (int)(blockStream.endPtr - blockStream.startPtr), - (unsigned)dstCapacity); - - /* first symbols */ - FSE_initCState2(&stateMatchLength, CTable_MatchLength, mlCodeTable[nbSeq-1]); - FSE_initCState2(&stateOffsetBits, CTable_OffsetBits, ofCodeTable[nbSeq-1]); - FSE_initCState2(&stateLitLength, CTable_LitLength, llCodeTable[nbSeq-1]); - BIT_addBits(&blockStream, sequences[nbSeq-1].litLength, LL_bits[llCodeTable[nbSeq-1]]); - if (MEM_32bits()) BIT_flushBits(&blockStream); - BIT_addBits(&blockStream, sequences[nbSeq-1].matchLength, ML_bits[mlCodeTable[nbSeq-1]]); - if (MEM_32bits()) BIT_flushBits(&blockStream); - if (longOffsets) { - U32 const ofBits = ofCodeTable[nbSeq-1]; - int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1); - if (extraBits) { - BIT_addBits(&blockStream, sequences[nbSeq-1].offset, extraBits); - BIT_flushBits(&blockStream); - } - BIT_addBits(&blockStream, sequences[nbSeq-1].offset >> extraBits, - ofBits - extraBits); - } else { - BIT_addBits(&blockStream, sequences[nbSeq-1].offset, ofCodeTable[nbSeq-1]); - } - BIT_flushBits(&blockStream); - - { size_t n; - for (n=nbSeq-2 ; n<nbSeq ; n--) { /* intentional underflow */ - BYTE const llCode = llCodeTable[n]; - BYTE const ofCode = ofCodeTable[n]; - BYTE const mlCode = mlCodeTable[n]; - U32 const llBits = LL_bits[llCode]; - U32 const ofBits = ofCode; - U32 const mlBits = ML_bits[mlCode]; - DEBUGLOG(6, "encoding: litlen:%2u - matchlen:%2u - offCode:%7u", - (unsigned)sequences[n].litLength, - (unsigned)sequences[n].matchLength + MINMATCH, - (unsigned)sequences[n].offset); - /* 32b*/ /* 64b*/ - /* (7)*/ /* (7)*/ - FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */ - FSE_encodeSymbol(&blockStream, &stateMatchLength, mlCode); /* 24 */ /* 24 */ - if (MEM_32bits()) BIT_flushBits(&blockStream); /* (7)*/ - FSE_encodeSymbol(&blockStream, &stateLitLength, llCode); /* 16 */ /* 33 */ - if (MEM_32bits() || (ofBits+mlBits+llBits >= 64-7-(LLFSELog+MLFSELog+OffFSELog))) - BIT_flushBits(&blockStream); /* (7)*/ - BIT_addBits(&blockStream, sequences[n].litLength, llBits); - if (MEM_32bits() && ((llBits+mlBits)>24)) BIT_flushBits(&blockStream); - BIT_addBits(&blockStream, sequences[n].matchLength, mlBits); - if (MEM_32bits() || (ofBits+mlBits+llBits > 56)) BIT_flushBits(&blockStream); - if (longOffsets) { - int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1); - if (extraBits) { - BIT_addBits(&blockStream, sequences[n].offset, extraBits); - BIT_flushBits(&blockStream); /* (7)*/ - } - BIT_addBits(&blockStream, sequences[n].offset >> extraBits, - ofBits - extraBits); /* 31 */ - } else { - BIT_addBits(&blockStream, sequences[n].offset, ofBits); /* 31 */ - } - BIT_flushBits(&blockStream); /* (7)*/ - DEBUGLOG(7, "remaining space : %i", (int)(blockStream.endPtr - blockStream.ptr)); - } } - - DEBUGLOG(6, "ZSTD_encodeSequences: flushing ML state with %u bits", stateMatchLength.stateLog); - FSE_flushCState(&blockStream, &stateMatchLength); - DEBUGLOG(6, "ZSTD_encodeSequences: flushing Off state with %u bits", stateOffsetBits.stateLog); - FSE_flushCState(&blockStream, &stateOffsetBits); - DEBUGLOG(6, "ZSTD_encodeSequences: flushing LL state with %u bits", stateLitLength.stateLog); - FSE_flushCState(&blockStream, &stateLitLength); - - { size_t const streamSize = BIT_closeCStream(&blockStream); - RETURN_ERROR_IF(streamSize==0, dstSize_tooSmall, "not enough space"); - return streamSize; - } -} - -static size_t -ZSTD_encodeSequences_default( - void* dst, size_t dstCapacity, - FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, - FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, - FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, - seqDef const* sequences, size_t nbSeq, int longOffsets) -{ - return ZSTD_encodeSequences_body(dst, dstCapacity, - CTable_MatchLength, mlCodeTable, - CTable_OffsetBits, ofCodeTable, - CTable_LitLength, llCodeTable, - sequences, nbSeq, longOffsets); -} - - -#if DYNAMIC_BMI2 - -static TARGET_ATTRIBUTE("bmi2") size_t -ZSTD_encodeSequences_bmi2( - void* dst, size_t dstCapacity, - FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, - FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, - FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, - seqDef const* sequences, size_t nbSeq, int longOffsets) -{ - return ZSTD_encodeSequences_body(dst, dstCapacity, - CTable_MatchLength, mlCodeTable, - CTable_OffsetBits, ofCodeTable, - CTable_LitLength, llCodeTable, - sequences, nbSeq, longOffsets); -} - -#endif - -static size_t ZSTD_encodeSequences( - void* dst, size_t dstCapacity, - FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, - FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, - FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, - seqDef const* sequences, size_t nbSeq, int longOffsets, int bmi2) -{ - DEBUGLOG(5, "ZSTD_encodeSequences: dstCapacity = %u", (unsigned)dstCapacity); -#if DYNAMIC_BMI2 - if (bmi2) { - return ZSTD_encodeSequences_bmi2(dst, dstCapacity, - CTable_MatchLength, mlCodeTable, - CTable_OffsetBits, ofCodeTable, - CTable_LitLength, llCodeTable, - sequences, nbSeq, longOffsets); - } -#endif - (void)bmi2; - return ZSTD_encodeSequences_default(dst, dstCapacity, - CTable_MatchLength, mlCodeTable, - CTable_OffsetBits, ofCodeTable, - CTable_LitLength, llCodeTable, - sequences, nbSeq, longOffsets); -} - static int ZSTD_disableLiteralsCompression(const ZSTD_CCtx_params* cctxParams) { switch (cctxParams->literalCompressionMode) { @@ -2526,16 +1955,16 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, BYTE* const ostart = (BYTE*)dst; BYTE* const oend = ostart + dstCapacity; BYTE* op = ostart; - size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart; + size_t const nbSeq = (size_t)(seqStorePtr->sequences - seqStorePtr->sequencesStart); BYTE* seqHead; BYTE* lastNCount = NULL; + DEBUGLOG(5, "ZSTD_compressSequences_internal (nbSeq=%zu)", nbSeq); ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog))); - DEBUGLOG(5, "ZSTD_compressSequences_internal"); /* Compress literals */ { const BYTE* const literals = seqStorePtr->litStart; - size_t const litSize = seqStorePtr->lit - literals; + size_t const litSize = (size_t)(seqStorePtr->lit - literals); size_t const cSize = ZSTD_compressLiterals( &prevEntropy->huf, &nextEntropy->huf, cctxParams->cParams.strategy, @@ -2562,7 +1991,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, if (nbSeq==0) { /* Copy the old tables over as if we repeated them */ memcpy(&nextEntropy->fse, &prevEntropy->fse, sizeof(prevEntropy->fse)); - return op - ostart; + return (size_t)(op - ostart); } /* seqHead : flags for FSE encoding type */ @@ -2583,7 +2012,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, ZSTD_defaultAllowed, strategy); assert(set_basic < set_compressed && set_rle < set_compressed); assert(!(LLtype < set_compressed && nextEntropy->fse.litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype, + { size_t const countSize = ZSTD_buildCTable(op, (size_t)(oend - op), CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype, count, max, llCodeTable, nbSeq, LL_defaultNorm, LL_defaultNormLog, MaxLL, prevEntropy->fse.litlengthCTable, sizeof(prevEntropy->fse.litlengthCTable), workspace, wkspSize); @@ -2606,7 +2035,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, OF_defaultNorm, OF_defaultNormLog, defaultPolicy, strategy); assert(!(Offtype < set_compressed && nextEntropy->fse.offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype, + { size_t const countSize = ZSTD_buildCTable(op, (size_t)(oend - op), CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype, count, max, ofCodeTable, nbSeq, OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff, prevEntropy->fse.offcodeCTable, sizeof(prevEntropy->fse.offcodeCTable), workspace, wkspSize); @@ -2627,7 +2056,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, ML_defaultNorm, ML_defaultNormLog, ZSTD_defaultAllowed, strategy); assert(!(MLtype < set_compressed && nextEntropy->fse.matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */ - { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype, + { size_t const countSize = ZSTD_buildCTable(op, (size_t)(oend - op), CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype, count, max, mlCodeTable, nbSeq, ML_defaultNorm, ML_defaultNormLog, MaxML, prevEntropy->fse.matchlengthCTable, sizeof(prevEntropy->fse.matchlengthCTable), workspace, wkspSize); @@ -2641,7 +2070,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, *seqHead = (BYTE)((LLtype<<6) + (Offtype<<4) + (MLtype<<2)); { size_t const bitstreamSize = ZSTD_encodeSequences( - op, oend - op, + op, (size_t)(oend - op), CTable_MatchLength, mlCodeTable, CTable_OffsetBits, ofCodeTable, CTable_LitLength, llCodeTable, @@ -2668,7 +2097,7 @@ ZSTD_compressSequences_internal(seqStore_t* seqStorePtr, } DEBUGLOG(5, "compressed block size : %u", (unsigned)(op - ostart)); - return op - ostart; + return (size_t)(op - ostart); } MEM_STATIC size_t @@ -2841,7 +2270,8 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc, { size_t cSize; DEBUGLOG(5, "ZSTD_compressBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)", - (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, (unsigned)zc->blockState.matchState.nextToUpdate); + (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, + (unsigned)zc->blockState.matchState.nextToUpdate); { const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize); FORWARD_IF_ERROR(bss); @@ -3109,8 +2539,9 @@ size_t ZSTD_getBlockSize(const ZSTD_CCtx* cctx) size_t ZSTD_compressBlock(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize) { - size_t const blockSizeMax = ZSTD_getBlockSize(cctx); - RETURN_ERROR_IF(srcSize > blockSizeMax, srcSize_wrong); + DEBUGLOG(5, "ZSTD_compressBlock: srcSize = %u", (unsigned)srcSize); + { size_t const blockSizeMax = ZSTD_getBlockSize(cctx); + RETURN_ERROR_IF(srcSize > blockSizeMax, srcSize_wrong); } return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 0 /* frame mode */, 0 /* last chunk */); } @@ -3135,7 +2566,7 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms, if (srcSize <= HASH_READ_SIZE) return 0; while (iend - ip > HASH_READ_SIZE) { - size_t const remaining = iend - ip; + size_t const remaining = (size_t)(iend - ip); size_t const chunk = MIN(remaining, ZSTD_CHUNKSIZE_MAX); const BYTE* const ichunk = ip + chunk; diff --git a/thirdparty/zstd/compress/zstd_compress_internal.h b/thirdparty/zstd/compress/zstd_compress_internal.h index 5495899be3..6d623cc6be 100644 --- a/thirdparty/zstd/compress/zstd_compress_internal.h +++ b/thirdparty/zstd/compress/zstd_compress_internal.h @@ -134,9 +134,15 @@ typedef struct { typedef struct ZSTD_matchState_t ZSTD_matchState_t; struct ZSTD_matchState_t { ZSTD_window_t window; /* State for window round buffer management */ - U32 loadedDictEnd; /* index of end of dictionary, within context's referential. When dict referential is copied into active context (i.e. not attached), effectively same value as dictSize, since referential starts from zero */ + U32 loadedDictEnd; /* index of end of dictionary, within context's referential. + * When loadedDictEnd != 0, a dictionary is in use, and still valid. + * This relies on a mechanism to set loadedDictEnd=0 when dictionary is no longer within distance. + * Such mechanism is provided within ZSTD_window_enforceMaxDist() and ZSTD_checkDictValidity(). + * When dict referential is copied into active context (i.e. not attached), + * loadedDictEnd == dictSize, since referential starts from zero. + */ U32 nextToUpdate; /* index from which to continue table update */ - U32 hashLog3; /* dispatch table : larger == faster, more memory */ + U32 hashLog3; /* dispatch table for matches of len==3 : larger == faster, more memory */ U32* hashTable; U32* hashTable3; U32* chainTable; @@ -307,6 +313,30 @@ MEM_STATIC U32 ZSTD_MLcode(U32 mlBase) return (mlBase > 127) ? ZSTD_highbit32(mlBase) + ML_deltaCode : ML_Code[mlBase]; } +/* ZSTD_cParam_withinBounds: + * @return 1 if value is within cParam bounds, + * 0 otherwise */ +MEM_STATIC int ZSTD_cParam_withinBounds(ZSTD_cParameter cParam, int value) +{ + ZSTD_bounds const bounds = ZSTD_cParam_getBounds(cParam); + if (ZSTD_isError(bounds.error)) return 0; + if (value < bounds.lowerBound) return 0; + if (value > bounds.upperBound) return 0; + return 1; +} + +/* ZSTD_minGain() : + * minimum compression required + * to generate a compress block or a compressed literals section. + * note : use same formula for both situations */ +MEM_STATIC size_t ZSTD_minGain(size_t srcSize, ZSTD_strategy strat) +{ + U32 const minlog = (strat>=ZSTD_btultra) ? (U32)(strat) - 1 : 6; + ZSTD_STATIC_ASSERT(ZSTD_btultra == 8); + assert(ZSTD_cParam_withinBounds(ZSTD_c_strategy, strat)); + return (srcSize >> minlog) + 2; +} + /*! ZSTD_storeSeq() : * Store a sequence (literal length, literals, offset code and match length code) into seqStore_t. * `offsetCode` : distance to match + 3 (values 1-3 are repCodes). @@ -326,7 +356,7 @@ MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const v /* copy Literals */ assert(seqStorePtr->maxNbLit <= 128 KB); assert(seqStorePtr->lit + litLength <= seqStorePtr->litStart + seqStorePtr->maxNbLit); - ZSTD_wildcopy(seqStorePtr->lit, literals, litLength, ZSTD_no_overlap); + ZSTD_wildcopy(seqStorePtr->lit, literals, (ptrdiff_t)litLength, ZSTD_no_overlap); seqStorePtr->lit += litLength; /* literal Length */ @@ -739,24 +769,37 @@ ZSTD_window_enforceMaxDist(ZSTD_window_t* window, /* Similar to ZSTD_window_enforceMaxDist(), * but only invalidates dictionary - * when input progresses beyond window size. */ + * when input progresses beyond window size. + * assumption : loadedDictEndPtr and dictMatchStatePtr are valid (non NULL) + * loadedDictEnd uses same referential as window->base + * maxDist is the window size */ MEM_STATIC void -ZSTD_checkDictValidity(ZSTD_window_t* window, +ZSTD_checkDictValidity(const ZSTD_window_t* window, const void* blockEnd, U32 maxDist, U32* loadedDictEndPtr, const ZSTD_matchState_t** dictMatchStatePtr) { - U32 const blockEndIdx = (U32)((BYTE const*)blockEnd - window->base); - U32 const loadedDictEnd = (loadedDictEndPtr != NULL) ? *loadedDictEndPtr : 0; - DEBUGLOG(5, "ZSTD_checkDictValidity: blockEndIdx=%u, maxDist=%u, loadedDictEnd=%u", - (unsigned)blockEndIdx, (unsigned)maxDist, (unsigned)loadedDictEnd); - - if (loadedDictEnd && (blockEndIdx > maxDist + loadedDictEnd)) { - /* On reaching window size, dictionaries are invalidated */ - if (loadedDictEndPtr) *loadedDictEndPtr = 0; - if (dictMatchStatePtr) *dictMatchStatePtr = NULL; - } + assert(loadedDictEndPtr != NULL); + assert(dictMatchStatePtr != NULL); + { U32 const blockEndIdx = (U32)((BYTE const*)blockEnd - window->base); + U32 const loadedDictEnd = *loadedDictEndPtr; + DEBUGLOG(5, "ZSTD_checkDictValidity: blockEndIdx=%u, maxDist=%u, loadedDictEnd=%u", + (unsigned)blockEndIdx, (unsigned)maxDist, (unsigned)loadedDictEnd); + assert(blockEndIdx >= loadedDictEnd); + + if (blockEndIdx > loadedDictEnd + maxDist) { + /* On reaching window size, dictionaries are invalidated. + * For simplification, if window size is reached anywhere within next block, + * the dictionary is invalidated for the full block. + */ + DEBUGLOG(6, "invalidating dictionary for current block (distance > windowSize)"); + *loadedDictEndPtr = 0; + *dictMatchStatePtr = NULL; + } else { + if (*loadedDictEndPtr != 0) { + DEBUGLOG(6, "dictionary considered valid for current block"); + } } } } /** @@ -798,6 +841,17 @@ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window, return contiguous; } +MEM_STATIC U32 ZSTD_getLowestMatchIndex(const ZSTD_matchState_t* ms, U32 current, unsigned windowLog) +{ + U32 const maxDistance = 1U << windowLog; + U32 const lowestValid = ms->window.lowLimit; + U32 const withinWindow = (current - lowestValid > maxDistance) ? current - maxDistance : lowestValid; + U32 const isDictionary = (ms->loadedDictEnd != 0); + U32 const matchLowest = isDictionary ? lowestValid : withinWindow; + return matchLowest; +} + + /* debug functions */ #if (DEBUGLEVEL>=2) diff --git a/thirdparty/zstd/compress/zstd_compress_literals.c b/thirdparty/zstd/compress/zstd_compress_literals.c new file mode 100644 index 0000000000..eb3e5a44bc --- /dev/null +++ b/thirdparty/zstd/compress/zstd_compress_literals.c @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + + /*-************************************* + * Dependencies + ***************************************/ +#include "zstd_compress_literals.h" + +size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize) +{ + BYTE* const ostart = (BYTE* const)dst; + U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); + + RETURN_ERROR_IF(srcSize + flSize > dstCapacity, dstSize_tooSmall); + + switch(flSize) + { + case 1: /* 2 - 1 - 5 */ + ostart[0] = (BYTE)((U32)set_basic + (srcSize<<3)); + break; + case 2: /* 2 - 2 - 12 */ + MEM_writeLE16(ostart, (U16)((U32)set_basic + (1<<2) + (srcSize<<4))); + break; + case 3: /* 2 - 2 - 20 */ + MEM_writeLE32(ostart, (U32)((U32)set_basic + (3<<2) + (srcSize<<4))); + break; + default: /* not necessary : flSize is {1,2,3} */ + assert(0); + } + + memcpy(ostart + flSize, src, srcSize); + return srcSize + flSize; +} + +size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize) +{ + BYTE* const ostart = (BYTE* const)dst; + U32 const flSize = 1 + (srcSize>31) + (srcSize>4095); + + (void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */ + + switch(flSize) + { + case 1: /* 2 - 1 - 5 */ + ostart[0] = (BYTE)((U32)set_rle + (srcSize<<3)); + break; + case 2: /* 2 - 2 - 12 */ + MEM_writeLE16(ostart, (U16)((U32)set_rle + (1<<2) + (srcSize<<4))); + break; + case 3: /* 2 - 2 - 20 */ + MEM_writeLE32(ostart, (U32)((U32)set_rle + (3<<2) + (srcSize<<4))); + break; + default: /* not necessary : flSize is {1,2,3} */ + assert(0); + } + + ostart[flSize] = *(const BYTE*)src; + return flSize+1; +} + +size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf, + ZSTD_hufCTables_t* nextHuf, + ZSTD_strategy strategy, int disableLiteralCompression, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + void* workspace, size_t wkspSize, + const int bmi2) +{ + size_t const minGain = ZSTD_minGain(srcSize, strategy); + size_t const lhSize = 3 + (srcSize >= 1 KB) + (srcSize >= 16 KB); + BYTE* const ostart = (BYTE*)dst; + U32 singleStream = srcSize < 256; + symbolEncodingType_e hType = set_compressed; + size_t cLitSize; + + DEBUGLOG(5,"ZSTD_compressLiterals (disableLiteralCompression=%i)", + disableLiteralCompression); + + /* Prepare nextEntropy assuming reusing the existing table */ + memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + + if (disableLiteralCompression) + return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); + + /* small ? don't even attempt compression (speed opt) */ +# define COMPRESS_LITERALS_SIZE_MIN 63 + { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN; + if (srcSize <= minLitSize) return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); + } + + RETURN_ERROR_IF(dstCapacity < lhSize+1, dstSize_tooSmall, "not enough space for compression"); + { HUF_repeat repeat = prevHuf->repeatMode; + int const preferRepeat = strategy < ZSTD_lazy ? srcSize <= 1024 : 0; + if (repeat == HUF_repeat_valid && lhSize == 3) singleStream = 1; + cLitSize = singleStream ? HUF_compress1X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, + workspace, wkspSize, (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2) + : HUF_compress4X_repeat(ostart+lhSize, dstCapacity-lhSize, src, srcSize, 255, 11, + workspace, wkspSize, (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2); + if (repeat != HUF_repeat_none) { + /* reused the existing table */ + hType = set_repeat; + } + } + + if ((cLitSize==0) | (cLitSize >= srcSize - minGain) | ERR_isError(cLitSize)) { + memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize); + } + if (cLitSize==1) { + memcpy(nextHuf, prevHuf, sizeof(*prevHuf)); + return ZSTD_compressRleLiteralsBlock(dst, dstCapacity, src, srcSize); + } + + if (hType == set_compressed) { + /* using a newly constructed table */ + nextHuf->repeatMode = HUF_repeat_check; + } + + /* Build header */ + switch(lhSize) + { + case 3: /* 2 - 2 - 10 - 10 */ + { U32 const lhc = hType + ((!singleStream) << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<14); + MEM_writeLE24(ostart, lhc); + break; + } + case 4: /* 2 - 2 - 14 - 14 */ + { U32 const lhc = hType + (2 << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<18); + MEM_writeLE32(ostart, lhc); + break; + } + case 5: /* 2 - 2 - 18 - 18 */ + { U32 const lhc = hType + (3 << 2) + ((U32)srcSize<<4) + ((U32)cLitSize<<22); + MEM_writeLE32(ostart, lhc); + ostart[4] = (BYTE)(cLitSize >> 10); + break; + } + default: /* not possible : lhSize is {3,4,5} */ + assert(0); + } + return lhSize+cLitSize; +} diff --git a/thirdparty/zstd/compress/zstd_compress_literals.h b/thirdparty/zstd/compress/zstd_compress_literals.h new file mode 100644 index 0000000000..7adbecc0be --- /dev/null +++ b/thirdparty/zstd/compress/zstd_compress_literals.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_COMPRESS_LITERALS_H +#define ZSTD_COMPRESS_LITERALS_H + +#include "zstd_compress_internal.h" /* ZSTD_hufCTables_t, ZSTD_minGain() */ + + +size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize); + +size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf, + ZSTD_hufCTables_t* nextHuf, + ZSTD_strategy strategy, int disableLiteralCompression, + void* dst, size_t dstCapacity, + const void* src, size_t srcSize, + void* workspace, size_t wkspSize, + const int bmi2); + +#endif /* ZSTD_COMPRESS_LITERALS_H */ diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.c b/thirdparty/zstd/compress/zstd_compress_sequences.c new file mode 100644 index 0000000000..3c3deae08c --- /dev/null +++ b/thirdparty/zstd/compress/zstd_compress_sequences.c @@ -0,0 +1,415 @@ +/* + * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + + /*-************************************* + * Dependencies + ***************************************/ +#include "zstd_compress_sequences.h" + +/** + * -log2(x / 256) lookup table for x in [0, 256). + * If x == 0: Return 0 + * Else: Return floor(-log2(x / 256) * 256) + */ +static unsigned const kInverseProbabilityLog256[256] = { + 0, 2048, 1792, 1642, 1536, 1453, 1386, 1329, 1280, 1236, 1197, 1162, + 1130, 1100, 1073, 1047, 1024, 1001, 980, 960, 941, 923, 906, 889, + 874, 859, 844, 830, 817, 804, 791, 779, 768, 756, 745, 734, + 724, 714, 704, 694, 685, 676, 667, 658, 650, 642, 633, 626, + 618, 610, 603, 595, 588, 581, 574, 567, 561, 554, 548, 542, + 535, 529, 523, 517, 512, 506, 500, 495, 489, 484, 478, 473, + 468, 463, 458, 453, 448, 443, 438, 434, 429, 424, 420, 415, + 411, 407, 402, 398, 394, 390, 386, 382, 377, 373, 370, 366, + 362, 358, 354, 350, 347, 343, 339, 336, 332, 329, 325, 322, + 318, 315, 311, 308, 305, 302, 298, 295, 292, 289, 286, 282, + 279, 276, 273, 270, 267, 264, 261, 258, 256, 253, 250, 247, + 244, 241, 239, 236, 233, 230, 228, 225, 222, 220, 217, 215, + 212, 209, 207, 204, 202, 199, 197, 194, 192, 190, 187, 185, + 182, 180, 178, 175, 173, 171, 168, 166, 164, 162, 159, 157, + 155, 153, 151, 149, 146, 144, 142, 140, 138, 136, 134, 132, + 130, 128, 126, 123, 121, 119, 117, 115, 114, 112, 110, 108, + 106, 104, 102, 100, 98, 96, 94, 93, 91, 89, 87, 85, + 83, 82, 80, 78, 76, 74, 73, 71, 69, 67, 66, 64, + 62, 61, 59, 57, 55, 54, 52, 50, 49, 47, 46, 44, + 42, 41, 39, 37, 36, 34, 33, 31, 30, 28, 26, 25, + 23, 22, 20, 19, 17, 16, 14, 13, 11, 10, 8, 7, + 5, 4, 2, 1, +}; + +static unsigned ZSTD_getFSEMaxSymbolValue(FSE_CTable const* ctable) { + void const* ptr = ctable; + U16 const* u16ptr = (U16 const*)ptr; + U32 const maxSymbolValue = MEM_read16(u16ptr + 1); + return maxSymbolValue; +} + +/** + * Returns the cost in bytes of encoding the normalized count header. + * Returns an error if any of the helper functions return an error. + */ +static size_t ZSTD_NCountCost(unsigned const* count, unsigned const max, + size_t const nbSeq, unsigned const FSELog) +{ + BYTE wksp[FSE_NCOUNTBOUND]; + S16 norm[MaxSeq + 1]; + const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); + FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq, max)); + return FSE_writeNCount(wksp, sizeof(wksp), norm, max, tableLog); +} + +/** + * Returns the cost in bits of encoding the distribution described by count + * using the entropy bound. + */ +static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t const total) +{ + unsigned cost = 0; + unsigned s; + for (s = 0; s <= max; ++s) { + unsigned norm = (unsigned)((256 * count[s]) / total); + if (count[s] != 0 && norm == 0) + norm = 1; + assert(count[s] < total); + cost += count[s] * kInverseProbabilityLog256[norm]; + } + return cost >> 8; +} + +/** + * Returns the cost in bits of encoding the distribution in count using ctable. + * Returns an error if ctable cannot represent all the symbols in count. + */ +static size_t ZSTD_fseBitCost( + FSE_CTable const* ctable, + unsigned const* count, + unsigned const max) +{ + unsigned const kAccuracyLog = 8; + size_t cost = 0; + unsigned s; + FSE_CState_t cstate; + FSE_initCState(&cstate, ctable); + RETURN_ERROR_IF(ZSTD_getFSEMaxSymbolValue(ctable) < max, GENERIC, + "Repeat FSE_CTable has maxSymbolValue %u < %u", + ZSTD_getFSEMaxSymbolValue(ctable), max); + for (s = 0; s <= max; ++s) { + unsigned const tableLog = cstate.stateLog; + unsigned const badCost = (tableLog + 1) << kAccuracyLog; + unsigned const bitCost = FSE_bitCost(cstate.symbolTT, tableLog, s, kAccuracyLog); + if (count[s] == 0) + continue; + RETURN_ERROR_IF(bitCost >= badCost, GENERIC, + "Repeat FSE_CTable has Prob[%u] == 0", s); + cost += count[s] * bitCost; + } + return cost >> kAccuracyLog; +} + +/** + * Returns the cost in bits of encoding the distribution in count using the + * table described by norm. The max symbol support by norm is assumed >= max. + * norm must be valid for every symbol with non-zero probability in count. + */ +static size_t ZSTD_crossEntropyCost(short const* norm, unsigned accuracyLog, + unsigned const* count, unsigned const max) +{ + unsigned const shift = 8 - accuracyLog; + size_t cost = 0; + unsigned s; + assert(accuracyLog <= 8); + for (s = 0; s <= max; ++s) { + unsigned const normAcc = norm[s] != -1 ? norm[s] : 1; + unsigned const norm256 = normAcc << shift; + assert(norm256 > 0); + assert(norm256 < 256); + cost += count[s] * kInverseProbabilityLog256[norm256]; + } + return cost >> 8; +} + +symbolEncodingType_e +ZSTD_selectEncodingType( + FSE_repeat* repeatMode, unsigned const* count, unsigned const max, + size_t const mostFrequent, size_t nbSeq, unsigned const FSELog, + FSE_CTable const* prevCTable, + short const* defaultNorm, U32 defaultNormLog, + ZSTD_defaultPolicy_e const isDefaultAllowed, + ZSTD_strategy const strategy) +{ + ZSTD_STATIC_ASSERT(ZSTD_defaultDisallowed == 0 && ZSTD_defaultAllowed != 0); + if (mostFrequent == nbSeq) { + *repeatMode = FSE_repeat_none; + if (isDefaultAllowed && nbSeq <= 2) { + /* Prefer set_basic over set_rle when there are 2 or less symbols, + * since RLE uses 1 byte, but set_basic uses 5-6 bits per symbol. + * If basic encoding isn't possible, always choose RLE. + */ + DEBUGLOG(5, "Selected set_basic"); + return set_basic; + } + DEBUGLOG(5, "Selected set_rle"); + return set_rle; + } + if (strategy < ZSTD_lazy) { + if (isDefaultAllowed) { + size_t const staticFse_nbSeq_max = 1000; + size_t const mult = 10 - strategy; + size_t const baseLog = 3; + size_t const dynamicFse_nbSeq_min = (((size_t)1 << defaultNormLog) * mult) >> baseLog; /* 28-36 for offset, 56-72 for lengths */ + assert(defaultNormLog >= 5 && defaultNormLog <= 6); /* xx_DEFAULTNORMLOG */ + assert(mult <= 9 && mult >= 7); + if ( (*repeatMode == FSE_repeat_valid) + && (nbSeq < staticFse_nbSeq_max) ) { + DEBUGLOG(5, "Selected set_repeat"); + return set_repeat; + } + if ( (nbSeq < dynamicFse_nbSeq_min) + || (mostFrequent < (nbSeq >> (defaultNormLog-1))) ) { + DEBUGLOG(5, "Selected set_basic"); + /* The format allows default tables to be repeated, but it isn't useful. + * When using simple heuristics to select encoding type, we don't want + * to confuse these tables with dictionaries. When running more careful + * analysis, we don't need to waste time checking both repeating tables + * and default tables. + */ + *repeatMode = FSE_repeat_none; + return set_basic; + } + } + } else { + size_t const basicCost = isDefaultAllowed ? ZSTD_crossEntropyCost(defaultNorm, defaultNormLog, count, max) : ERROR(GENERIC); + size_t const repeatCost = *repeatMode != FSE_repeat_none ? ZSTD_fseBitCost(prevCTable, count, max) : ERROR(GENERIC); + size_t const NCountCost = ZSTD_NCountCost(count, max, nbSeq, FSELog); + size_t const compressedCost = (NCountCost << 3) + ZSTD_entropyCost(count, max, nbSeq); + + if (isDefaultAllowed) { + assert(!ZSTD_isError(basicCost)); + assert(!(*repeatMode == FSE_repeat_valid && ZSTD_isError(repeatCost))); + } + assert(!ZSTD_isError(NCountCost)); + assert(compressedCost < ERROR(maxCode)); + DEBUGLOG(5, "Estimated bit costs: basic=%u\trepeat=%u\tcompressed=%u", + (unsigned)basicCost, (unsigned)repeatCost, (unsigned)compressedCost); + if (basicCost <= repeatCost && basicCost <= compressedCost) { + DEBUGLOG(5, "Selected set_basic"); + assert(isDefaultAllowed); + *repeatMode = FSE_repeat_none; + return set_basic; + } + if (repeatCost <= compressedCost) { + DEBUGLOG(5, "Selected set_repeat"); + assert(!ZSTD_isError(repeatCost)); + return set_repeat; + } + assert(compressedCost < basicCost && compressedCost < repeatCost); + } + DEBUGLOG(5, "Selected set_compressed"); + *repeatMode = FSE_repeat_check; + return set_compressed; +} + +size_t +ZSTD_buildCTable(void* dst, size_t dstCapacity, + FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type, + unsigned* count, U32 max, + const BYTE* codeTable, size_t nbSeq, + const S16* defaultNorm, U32 defaultNormLog, U32 defaultMax, + const FSE_CTable* prevCTable, size_t prevCTableSize, + void* workspace, size_t workspaceSize) +{ + BYTE* op = (BYTE*)dst; + const BYTE* const oend = op + dstCapacity; + DEBUGLOG(6, "ZSTD_buildCTable (dstCapacity=%u)", (unsigned)dstCapacity); + + switch (type) { + case set_rle: + FORWARD_IF_ERROR(FSE_buildCTable_rle(nextCTable, (BYTE)max)); + RETURN_ERROR_IF(dstCapacity==0, dstSize_tooSmall); + *op = codeTable[0]; + return 1; + case set_repeat: + memcpy(nextCTable, prevCTable, prevCTableSize); + return 0; + case set_basic: + FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, defaultNorm, defaultMax, defaultNormLog, workspace, workspaceSize)); /* note : could be pre-calculated */ + return 0; + case set_compressed: { + S16 norm[MaxSeq + 1]; + size_t nbSeq_1 = nbSeq; + const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max); + if (count[codeTable[nbSeq-1]] > 1) { + count[codeTable[nbSeq-1]]--; + nbSeq_1--; + } + assert(nbSeq_1 > 1); + FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max)); + { size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */ + FORWARD_IF_ERROR(NCountSize); + FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, norm, max, tableLog, workspace, workspaceSize)); + return NCountSize; + } + } + default: assert(0); RETURN_ERROR(GENERIC); + } +} + +FORCE_INLINE_TEMPLATE size_t +ZSTD_encodeSequences_body( + void* dst, size_t dstCapacity, + FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, + FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, + FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, + seqDef const* sequences, size_t nbSeq, int longOffsets) +{ + BIT_CStream_t blockStream; + FSE_CState_t stateMatchLength; + FSE_CState_t stateOffsetBits; + FSE_CState_t stateLitLength; + + RETURN_ERROR_IF( + ERR_isError(BIT_initCStream(&blockStream, dst, dstCapacity)), + dstSize_tooSmall, "not enough space remaining"); + DEBUGLOG(6, "available space for bitstream : %i (dstCapacity=%u)", + (int)(blockStream.endPtr - blockStream.startPtr), + (unsigned)dstCapacity); + + /* first symbols */ + FSE_initCState2(&stateMatchLength, CTable_MatchLength, mlCodeTable[nbSeq-1]); + FSE_initCState2(&stateOffsetBits, CTable_OffsetBits, ofCodeTable[nbSeq-1]); + FSE_initCState2(&stateLitLength, CTable_LitLength, llCodeTable[nbSeq-1]); + BIT_addBits(&blockStream, sequences[nbSeq-1].litLength, LL_bits[llCodeTable[nbSeq-1]]); + if (MEM_32bits()) BIT_flushBits(&blockStream); + BIT_addBits(&blockStream, sequences[nbSeq-1].matchLength, ML_bits[mlCodeTable[nbSeq-1]]); + if (MEM_32bits()) BIT_flushBits(&blockStream); + if (longOffsets) { + U32 const ofBits = ofCodeTable[nbSeq-1]; + int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1); + if (extraBits) { + BIT_addBits(&blockStream, sequences[nbSeq-1].offset, extraBits); + BIT_flushBits(&blockStream); + } + BIT_addBits(&blockStream, sequences[nbSeq-1].offset >> extraBits, + ofBits - extraBits); + } else { + BIT_addBits(&blockStream, sequences[nbSeq-1].offset, ofCodeTable[nbSeq-1]); + } + BIT_flushBits(&blockStream); + + { size_t n; + for (n=nbSeq-2 ; n<nbSeq ; n--) { /* intentional underflow */ + BYTE const llCode = llCodeTable[n]; + BYTE const ofCode = ofCodeTable[n]; + BYTE const mlCode = mlCodeTable[n]; + U32 const llBits = LL_bits[llCode]; + U32 const ofBits = ofCode; + U32 const mlBits = ML_bits[mlCode]; + DEBUGLOG(6, "encoding: litlen:%2u - matchlen:%2u - offCode:%7u", + (unsigned)sequences[n].litLength, + (unsigned)sequences[n].matchLength + MINMATCH, + (unsigned)sequences[n].offset); + /* 32b*/ /* 64b*/ + /* (7)*/ /* (7)*/ + FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */ + FSE_encodeSymbol(&blockStream, &stateMatchLength, mlCode); /* 24 */ /* 24 */ + if (MEM_32bits()) BIT_flushBits(&blockStream); /* (7)*/ + FSE_encodeSymbol(&blockStream, &stateLitLength, llCode); /* 16 */ /* 33 */ + if (MEM_32bits() || (ofBits+mlBits+llBits >= 64-7-(LLFSELog+MLFSELog+OffFSELog))) + BIT_flushBits(&blockStream); /* (7)*/ + BIT_addBits(&blockStream, sequences[n].litLength, llBits); + if (MEM_32bits() && ((llBits+mlBits)>24)) BIT_flushBits(&blockStream); + BIT_addBits(&blockStream, sequences[n].matchLength, mlBits); + if (MEM_32bits() || (ofBits+mlBits+llBits > 56)) BIT_flushBits(&blockStream); + if (longOffsets) { + int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1); + if (extraBits) { + BIT_addBits(&blockStream, sequences[n].offset, extraBits); + BIT_flushBits(&blockStream); /* (7)*/ + } + BIT_addBits(&blockStream, sequences[n].offset >> extraBits, + ofBits - extraBits); /* 31 */ + } else { + BIT_addBits(&blockStream, sequences[n].offset, ofBits); /* 31 */ + } + BIT_flushBits(&blockStream); /* (7)*/ + DEBUGLOG(7, "remaining space : %i", (int)(blockStream.endPtr - blockStream.ptr)); + } } + + DEBUGLOG(6, "ZSTD_encodeSequences: flushing ML state with %u bits", stateMatchLength.stateLog); + FSE_flushCState(&blockStream, &stateMatchLength); + DEBUGLOG(6, "ZSTD_encodeSequences: flushing Off state with %u bits", stateOffsetBits.stateLog); + FSE_flushCState(&blockStream, &stateOffsetBits); + DEBUGLOG(6, "ZSTD_encodeSequences: flushing LL state with %u bits", stateLitLength.stateLog); + FSE_flushCState(&blockStream, &stateLitLength); + + { size_t const streamSize = BIT_closeCStream(&blockStream); + RETURN_ERROR_IF(streamSize==0, dstSize_tooSmall, "not enough space"); + return streamSize; + } +} + +static size_t +ZSTD_encodeSequences_default( + void* dst, size_t dstCapacity, + FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, + FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, + FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, + seqDef const* sequences, size_t nbSeq, int longOffsets) +{ + return ZSTD_encodeSequences_body(dst, dstCapacity, + CTable_MatchLength, mlCodeTable, + CTable_OffsetBits, ofCodeTable, + CTable_LitLength, llCodeTable, + sequences, nbSeq, longOffsets); +} + + +#if DYNAMIC_BMI2 + +static TARGET_ATTRIBUTE("bmi2") size_t +ZSTD_encodeSequences_bmi2( + void* dst, size_t dstCapacity, + FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, + FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, + FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, + seqDef const* sequences, size_t nbSeq, int longOffsets) +{ + return ZSTD_encodeSequences_body(dst, dstCapacity, + CTable_MatchLength, mlCodeTable, + CTable_OffsetBits, ofCodeTable, + CTable_LitLength, llCodeTable, + sequences, nbSeq, longOffsets); +} + +#endif + +size_t ZSTD_encodeSequences( + void* dst, size_t dstCapacity, + FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, + FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, + FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, + seqDef const* sequences, size_t nbSeq, int longOffsets, int bmi2) +{ + DEBUGLOG(5, "ZSTD_encodeSequences: dstCapacity = %u", (unsigned)dstCapacity); +#if DYNAMIC_BMI2 + if (bmi2) { + return ZSTD_encodeSequences_bmi2(dst, dstCapacity, + CTable_MatchLength, mlCodeTable, + CTable_OffsetBits, ofCodeTable, + CTable_LitLength, llCodeTable, + sequences, nbSeq, longOffsets); + } +#endif + (void)bmi2; + return ZSTD_encodeSequences_default(dst, dstCapacity, + CTable_MatchLength, mlCodeTable, + CTable_OffsetBits, ofCodeTable, + CTable_LitLength, llCodeTable, + sequences, nbSeq, longOffsets); +} diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.h b/thirdparty/zstd/compress/zstd_compress_sequences.h new file mode 100644 index 0000000000..f5234d94c8 --- /dev/null +++ b/thirdparty/zstd/compress/zstd_compress_sequences.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + * You may select, at your option, one of the above-listed licenses. + */ + +#ifndef ZSTD_COMPRESS_SEQUENCES_H +#define ZSTD_COMPRESS_SEQUENCES_H + +#include "fse.h" /* FSE_repeat, FSE_CTable */ +#include "zstd_internal.h" /* symbolEncodingType_e, ZSTD_strategy */ + +typedef enum { + ZSTD_defaultDisallowed = 0, + ZSTD_defaultAllowed = 1 +} ZSTD_defaultPolicy_e; + +symbolEncodingType_e +ZSTD_selectEncodingType( + FSE_repeat* repeatMode, unsigned const* count, unsigned const max, + size_t const mostFrequent, size_t nbSeq, unsigned const FSELog, + FSE_CTable const* prevCTable, + short const* defaultNorm, U32 defaultNormLog, + ZSTD_defaultPolicy_e const isDefaultAllowed, + ZSTD_strategy const strategy); + +size_t +ZSTD_buildCTable(void* dst, size_t dstCapacity, + FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type, + unsigned* count, U32 max, + const BYTE* codeTable, size_t nbSeq, + const S16* defaultNorm, U32 defaultNormLog, U32 defaultMax, + const FSE_CTable* prevCTable, size_t prevCTableSize, + void* workspace, size_t workspaceSize); + +size_t ZSTD_encodeSequences( + void* dst, size_t dstCapacity, + FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable, + FSE_CTable const* CTable_OffsetBits, BYTE const* ofCodeTable, + FSE_CTable const* CTable_LitLength, BYTE const* llCodeTable, + seqDef const* sequences, size_t nbSeq, int longOffsets, int bmi2); + +#endif /* ZSTD_COMPRESS_SEQUENCES_H */ diff --git a/thirdparty/zstd/compress/zstd_double_fast.c b/thirdparty/zstd/compress/zstd_double_fast.c index 5957255d90..54467cc31b 100644 --- a/thirdparty/zstd/compress/zstd_double_fast.c +++ b/thirdparty/zstd/compress/zstd_double_fast.c @@ -65,6 +65,7 @@ size_t ZSTD_compressBlock_doubleFast_generic( const U32 endIndex = (U32)((size_t)(istart - base) + srcSize); const U32 lowestValid = ms->window.dictLimit; const U32 maxDistance = 1U << cParams->windowLog; + /* presumes that, if there is a dictionary, it must be using Attach mode */ const U32 prefixLowestIndex = (endIndex - lowestValid > maxDistance) ? endIndex - maxDistance : lowestValid; const BYTE* const prefixLowest = base + prefixLowestIndex; const BYTE* const iend = istart + srcSize; @@ -369,9 +370,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic( const BYTE* const ilimit = iend - 8; const BYTE* const base = ms->window.base; const U32 endIndex = (U32)((size_t)(istart - base) + srcSize); - const U32 maxDistance = 1U << cParams->windowLog; - const U32 lowestValid = ms->window.lowLimit; - const U32 lowLimit = (endIndex - lowestValid > maxDistance) ? endIndex - maxDistance : lowestValid; + const U32 lowLimit = ZSTD_getLowestMatchIndex(ms, endIndex, cParams->windowLog); const U32 dictStartIndex = lowLimit; const U32 dictLimit = ms->window.dictLimit; const U32 prefixStartIndex = (dictLimit > lowLimit) ? dictLimit : lowLimit; diff --git a/thirdparty/zstd/compress/zstd_fast.c b/thirdparty/zstd/compress/zstd_fast.c index a05b8a47f1..59267ffbbc 100644 --- a/thirdparty/zstd/compress/zstd_fast.c +++ b/thirdparty/zstd/compress/zstd_fast.c @@ -71,6 +71,7 @@ size_t ZSTD_compressBlock_fast_generic( U32 offsetSaved = 0; /* init */ + DEBUGLOG(5, "ZSTD_compressBlock_fast_generic"); ip0 += (ip0 == prefixStart); ip1 = ip0 + 1; { @@ -239,6 +240,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic( assert(prefixStartIndex >= (U32)(dictEnd - dictBase)); /* init */ + DEBUGLOG(5, "ZSTD_compressBlock_fast_dictMatchState_generic"); ip += (dictAndPrefixLength == 0); /* dictMatchState repCode checks don't currently handle repCode == 0 * disabling. */ @@ -379,9 +381,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( const BYTE* ip = istart; const BYTE* anchor = istart; const U32 endIndex = (U32)((size_t)(istart - base) + srcSize); - const U32 maxDistance = 1U << cParams->windowLog; - const U32 validLow = ms->window.lowLimit; - const U32 lowLimit = (endIndex - validLow > maxDistance) ? endIndex - maxDistance : validLow; + const U32 lowLimit = ZSTD_getLowestMatchIndex(ms, endIndex, cParams->windowLog); const U32 dictStartIndex = lowLimit; const BYTE* const dictStart = dictBase + dictStartIndex; const U32 dictLimit = ms->window.dictLimit; @@ -392,6 +392,8 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( const BYTE* const ilimit = iend - 8; U32 offset_1=rep[0], offset_2=rep[1]; + DEBUGLOG(5, "ZSTD_compressBlock_fast_extDict_generic"); + /* switch to "regular" variant if extDict is invalidated due to maxDistance */ if (prefixStartIndex == dictStartIndex) return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, mls); @@ -412,8 +414,8 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( if ( (((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > dictStartIndex)) && (MEM_read32(repMatch) == MEM_read32(ip+1)) ) { - const BYTE* repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend; - mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4; + const BYTE* const repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend; + mLength = ZSTD_count_2segments(ip+1 +4, repMatch +4, iend, repMatchEnd, prefixStart) + 4; ip++; ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, 0, mLength-MINMATCH); } else { @@ -423,8 +425,8 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( ip += ((ip-anchor) >> kSearchStrength) + stepSize; continue; } - { const BYTE* matchEnd = matchIndex < prefixStartIndex ? dictEnd : iend; - const BYTE* lowMatchPtr = matchIndex < prefixStartIndex ? dictStart : prefixStart; + { const BYTE* const matchEnd = matchIndex < prefixStartIndex ? dictEnd : iend; + const BYTE* const lowMatchPtr = matchIndex < prefixStartIndex ? dictStart : prefixStart; U32 offset; mLength = ZSTD_count_2segments(ip+4, match+4, iend, matchEnd, prefixStart) + 4; while (((ip>anchor) & (match>lowMatchPtr)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */ @@ -451,7 +453,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic( && (MEM_read32(repMatch2) == MEM_read32(ip)) ) { const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend; size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4; - U32 tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */ + U32 const tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */ ZSTD_storeSeq(seqStore, 0, anchor, 0, repLength2-MINMATCH); hashTable[ZSTD_hashPtr(ip, hlog, mls)] = current2; ip += repLength2; diff --git a/thirdparty/zstd/compress/zstd_lazy.c b/thirdparty/zstd/compress/zstd_lazy.c index 94d906c01f..0af41724c7 100644 --- a/thirdparty/zstd/compress/zstd_lazy.c +++ b/thirdparty/zstd/compress/zstd_lazy.c @@ -242,9 +242,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms, const BYTE* const base = ms->window.base; U32 const current = (U32)(ip-base); - U32 const maxDistance = 1U << cParams->windowLog; - U32 const windowValid = ms->window.lowLimit; - U32 const windowLow = (current - windowValid > maxDistance) ? current - maxDistance : windowValid; + U32 const windowLow = ZSTD_getLowestMatchIndex(ms, current, cParams->windowLog); U32* const bt = ms->chainTable; U32 const btLog = cParams->chainLog - 1; @@ -497,8 +495,10 @@ size_t ZSTD_HcFindBestMatch_generic ( const BYTE* const dictEnd = dictBase + dictLimit; const U32 current = (U32)(ip-base); const U32 maxDistance = 1U << cParams->windowLog; - const U32 lowValid = ms->window.lowLimit; - const U32 lowLimit = (current - lowValid > maxDistance) ? current - maxDistance : lowValid; + const U32 lowestValid = ms->window.lowLimit; + const U32 withinMaxDistance = (current - lowestValid > maxDistance) ? current - maxDistance : lowestValid; + const U32 isDictionary = (ms->loadedDictEnd != 0); + const U32 lowLimit = isDictionary ? lowestValid : withinMaxDistance; const U32 minChain = current > chainSize ? current - chainSize : 0; U32 nbAttempts = 1U << cParams->searchLog; size_t ml=4-1; @@ -619,12 +619,14 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS ( /* ******************************* * Common parser - lazy strategy *********************************/ -FORCE_INLINE_TEMPLATE -size_t ZSTD_compressBlock_lazy_generic( +typedef enum { search_hashChain, search_binaryTree } searchMethod_e; + +FORCE_INLINE_TEMPLATE size_t +ZSTD_compressBlock_lazy_generic( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], const void* src, size_t srcSize, - const U32 searchMethod, const U32 depth, + const searchMethod_e searchMethod, const U32 depth, ZSTD_dictMode_e const dictMode) { const BYTE* const istart = (const BYTE*)src; @@ -640,8 +642,10 @@ size_t ZSTD_compressBlock_lazy_generic( ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr); searchMax_f const searchMax = dictMode == ZSTD_dictMatchState ? - (searchMethod ? ZSTD_BtFindBestMatch_dictMatchState_selectMLS : ZSTD_HcFindBestMatch_dictMatchState_selectMLS) : - (searchMethod ? ZSTD_BtFindBestMatch_selectMLS : ZSTD_HcFindBestMatch_selectMLS); + (searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_dictMatchState_selectMLS + : ZSTD_HcFindBestMatch_dictMatchState_selectMLS) : + (searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_selectMLS + : ZSTD_HcFindBestMatch_selectMLS); U32 offset_1 = rep[0], offset_2 = rep[1], savedOffset=0; const ZSTD_matchState_t* const dms = ms->dictMatchState; @@ -850,7 +854,7 @@ _storeSequence: rep[1] = offset_2 ? offset_2 : savedOffset; /* Return the last literals size */ - return iend - anchor; + return (size_t)(iend - anchor); } @@ -858,56 +862,56 @@ size_t ZSTD_compressBlock_btlazy2( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 1, 2, ZSTD_noDict); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2, ZSTD_noDict); } size_t ZSTD_compressBlock_lazy2( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 2, ZSTD_noDict); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 2, ZSTD_noDict); } size_t ZSTD_compressBlock_lazy( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 1, ZSTD_noDict); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 1, ZSTD_noDict); } size_t ZSTD_compressBlock_greedy( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 0, ZSTD_noDict); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0, ZSTD_noDict); } size_t ZSTD_compressBlock_btlazy2_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 1, 2, ZSTD_dictMatchState); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2, ZSTD_dictMatchState); } size_t ZSTD_compressBlock_lazy2_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 2, ZSTD_dictMatchState); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 2, ZSTD_dictMatchState); } size_t ZSTD_compressBlock_lazy_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 1, ZSTD_dictMatchState); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 1, ZSTD_dictMatchState); } size_t ZSTD_compressBlock_greedy_dictMatchState( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, 0, 0, ZSTD_dictMatchState); + return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0, ZSTD_dictMatchState); } @@ -916,7 +920,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], const void* src, size_t srcSize, - const U32 searchMethod, const U32 depth) + const searchMethod_e searchMethod, const U32 depth) { const BYTE* const istart = (const BYTE*)src; const BYTE* ip = istart; @@ -934,7 +938,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic( typedef size_t (*searchMax_f)( ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr); - searchMax_f searchMax = searchMethod ? ZSTD_BtFindBestMatch_extDict_selectMLS : ZSTD_HcFindBestMatch_extDict_selectMLS; + searchMax_f searchMax = searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_extDict_selectMLS : ZSTD_HcFindBestMatch_extDict_selectMLS; U32 offset_1 = rep[0], offset_2 = rep[1]; @@ -1075,7 +1079,7 @@ _storeSequence: rep[1] = offset_2; /* Return the last literals size */ - return iend - anchor; + return (size_t)(iend - anchor); } @@ -1083,7 +1087,7 @@ size_t ZSTD_compressBlock_greedy_extDict( ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, 0, 0); + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0); } size_t ZSTD_compressBlock_lazy_extDict( @@ -1091,7 +1095,7 @@ size_t ZSTD_compressBlock_lazy_extDict( void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, 0, 1); + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 1); } size_t ZSTD_compressBlock_lazy2_extDict( @@ -1099,7 +1103,7 @@ size_t ZSTD_compressBlock_lazy2_extDict( void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, 0, 2); + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 2); } size_t ZSTD_compressBlock_btlazy2_extDict( @@ -1107,5 +1111,5 @@ size_t ZSTD_compressBlock_btlazy2_extDict( void const* src, size_t srcSize) { - return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, 1, 2); + return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2); } diff --git a/thirdparty/zstd/compress/zstd_opt.c b/thirdparty/zstd/compress/zstd_opt.c index e32e542e02..2da363f93e 100644 --- a/thirdparty/zstd/compress/zstd_opt.c +++ b/thirdparty/zstd/compress/zstd_opt.c @@ -552,7 +552,6 @@ U32 ZSTD_insertBtAndGetAllMatches ( { const ZSTD_compressionParameters* const cParams = &ms->cParams; U32 const sufficient_len = MIN(cParams->targetLength, ZSTD_OPT_NUM -1); - U32 const maxDistance = 1U << cParams->windowLog; const BYTE* const base = ms->window.base; U32 const current = (U32)(ip-base); U32 const hashLog = cParams->hashLog; @@ -569,8 +568,7 @@ U32 ZSTD_insertBtAndGetAllMatches ( const BYTE* const dictEnd = dictBase + dictLimit; const BYTE* const prefixStart = base + dictLimit; U32 const btLow = (btMask >= current) ? 0 : current - btMask; - U32 const windowValid = ms->window.lowLimit; - U32 const windowLow = ((current - windowValid) > maxDistance) ? current - maxDistance : windowValid; + U32 const windowLow = ZSTD_getLowestMatchIndex(ms, current, cParams->windowLog); U32 const matchLow = windowLow ? windowLow : 1; U32* smallerPtr = bt + 2*(current&btMask); U32* largerPtr = bt + 2*(current&btMask) + 1; @@ -674,19 +672,21 @@ U32 ZSTD_insertBtAndGetAllMatches ( while (nbCompares-- && (matchIndex >= matchLow)) { U32* const nextPtr = bt + 2*(matchIndex & btMask); - size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ const BYTE* match; + size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */ assert(current > matchIndex); if ((dictMode == ZSTD_noDict) || (dictMode == ZSTD_dictMatchState) || (matchIndex+matchLength >= dictLimit)) { assert(matchIndex+matchLength >= dictLimit); /* ensure the condition is correct when !extDict */ match = base + matchIndex; + if (matchIndex >= dictLimit) assert(memcmp(match, ip, matchLength) == 0); /* ensure early section of match is equal as expected */ matchLength += ZSTD_count(ip+matchLength, match+matchLength, iLimit); } else { match = dictBase + matchIndex; + assert(memcmp(match, ip, matchLength) == 0); /* ensure early section of match is equal as expected */ matchLength += ZSTD_count_2segments(ip+matchLength, match+matchLength, iLimit, dictEnd, prefixStart); if (matchIndex+matchLength >= dictLimit) - match = base + matchIndex; /* prepare for match[matchLength] */ + match = base + matchIndex; /* prepare for match[matchLength] read */ } if (matchLength > bestLength) { diff --git a/thirdparty/zstd/decompress/zstd_decompress.c b/thirdparty/zstd/decompress/zstd_decompress.c index e42872ad96..751060b2cd 100644 --- a/thirdparty/zstd/decompress/zstd_decompress.c +++ b/thirdparty/zstd/decompress/zstd_decompress.c @@ -574,9 +574,10 @@ void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst) } /** ZSTD_insertBlock() : - insert `src` block into `dctx` history. Useful to track uncompressed blocks. */ + * insert `src` block into `dctx` history. Useful to track uncompressed blocks. */ size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize) { + DEBUGLOG(5, "ZSTD_insertBlock: %u bytes", (unsigned)blockSize); ZSTD_checkContinuity(dctx, blockStart); dctx->previousDstEnd = (const char*)blockStart + blockSize; return blockSize; @@ -909,6 +910,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c { blockProperties_t bp; size_t const cBlockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp); if (ZSTD_isError(cBlockSize)) return cBlockSize; + RETURN_ERROR_IF(cBlockSize > dctx->fParams.blockSizeMax, corruption_detected, "Block Size Exceeds Maximum"); dctx->expected = cBlockSize; dctx->bType = bp.blockType; dctx->rleSize = bp.origSize; @@ -953,6 +955,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c RETURN_ERROR(corruption_detected); } if (ZSTD_isError(rSize)) return rSize; + RETURN_ERROR_IF(rSize > dctx->fParams.blockSizeMax, corruption_detected, "Decompressed Block Size Exceeds Maximum"); DEBUGLOG(5, "ZSTD_decompressContinue: decoded size from block : %u", (unsigned)rSize); dctx->decodedSize += rSize; if (dctx->fParams.checksumFlag) XXH64_update(&dctx->xxhState, dst, rSize); diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.c b/thirdparty/zstd/decompress/zstd_decompress_block.c index 24f4859c56..cbcfc08406 100644 --- a/thirdparty/zstd/decompress/zstd_decompress_block.c +++ b/thirdparty/zstd/decompress/zstd_decompress_block.c @@ -79,6 +79,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, const void* src, size_t srcSize) /* note : srcSize < BLOCKSIZE */ { + DEBUGLOG(5, "ZSTD_decodeLiteralsBlock"); RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected); { const BYTE* const istart = (const BYTE*) src; @@ -87,6 +88,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, switch(litEncType) { case set_repeat: + DEBUGLOG(5, "set_repeat flag : re-using stats from previous compressed literals block"); RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted); /* fall-through */ @@ -116,7 +118,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx, /* 2 - 2 - 18 - 18 */ lhSize = 5; litSize = (lhc >> 4) & 0x3FFFF; - litCSize = (lhc >> 22) + (istart[4] << 10); + litCSize = (lhc >> 22) + ((size_t)istart[4] << 10); break; } RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected); @@ -391,7 +393,8 @@ ZSTD_buildFSETable(ZSTD_seqSymbol* dt, symbolNext[s] = 1; } else { if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0; - symbolNext[s] = normalizedCounter[s]; + assert(normalizedCounter[s]>=0); + symbolNext[s] = (U16)normalizedCounter[s]; } } } memcpy(dt, &DTableH, sizeof(DTableH)); } diff --git a/thirdparty/zstd/zstd.h b/thirdparty/zstd/zstd.h index a1910ee223..f8e95f2283 100644 --- a/thirdparty/zstd/zstd.h +++ b/thirdparty/zstd/zstd.h @@ -71,7 +71,7 @@ extern "C" { /*------ Version ------*/ #define ZSTD_VERSION_MAJOR 1 #define ZSTD_VERSION_MINOR 4 -#define ZSTD_VERSION_RELEASE 1 +#define ZSTD_VERSION_RELEASE 3 #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE) ZSTDLIB_API unsigned ZSTD_versionNumber(void); /**< to check runtime library version */ @@ -1909,7 +1909,7 @@ ZSTDLIB_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx); /*! Block functions produce and decode raw zstd blocks, without frame metadata. Frame metadata cost is typically ~18 bytes, which can be non-negligible for very small blocks (< 100 bytes). - User will have to take in charge required information to regenerate data, such as compressed and content sizes. + But users will have to take in charge needed metadata to regenerate data, such as compressed and content sizes. A few rules to respect : - Compressing and decompressing require a context structure @@ -1920,12 +1920,14 @@ ZSTDLIB_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx); + copyCCtx() and copyDCtx() can be used too - Block size is limited, it must be <= ZSTD_getBlockSize() <= ZSTD_BLOCKSIZE_MAX == 128 KB + If input is larger than a block size, it's necessary to split input data into multiple blocks - + For inputs larger than a single block, really consider using regular ZSTD_compress() instead. - Frame metadata is not that costly, and quickly becomes negligible as source size grows larger. - - When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero. - In which case, nothing is produced into `dst` ! - + User must test for such outcome and deal directly with uncompressed data - + ZSTD_decompressBlock() doesn't accept uncompressed data as input !!! + + For inputs larger than a single block, consider using regular ZSTD_compress() instead. + Frame metadata is not that costly, and quickly becomes negligible as source size grows larger than a block. + - When a block is considered not compressible enough, ZSTD_compressBlock() result will be 0 (zero) ! + ===> In which case, nothing is produced into `dst` ! + + User __must__ test for such outcome and deal directly with uncompressed data + + A block cannot be declared incompressible if ZSTD_compressBlock() return value was != 0. + Doing so would mess up with statistics history, leading to potential data corruption. + + ZSTD_decompressBlock() _doesn't accept uncompressed data as input_ !! + In case of multiple successive blocks, should some of them be uncompressed, decoder must be informed of their existence in order to follow proper history. Use ZSTD_insertBlock() for such a case. diff --git a/version.py b/version.py index 45817ed69f..fee6809551 100644 --- a/version.py +++ b/version.py @@ -2,7 +2,7 @@ short_name = "godot" name = "Godot Engine" major = 3 minor = 2 -status = "alpha" +status = "beta" module_config = "" year = 2019 website = "https://godotengine.org" |