Merge pull request #41235 from akien-mga/3.2-cherrypicks
Cherry-picks for the 3.2 branch (future 3.2.3) - 6th batch
This commit is contained in:
commit
13a615bd9c
29 changed files with 302 additions and 400 deletions
9
.mailmap
9
.mailmap
|
@ -2,10 +2,6 @@ Alexander Holland <alexander.holland@live.de>
|
||||||
Alexander Holland <alexander.holland@live.de> <alexander.holland@haw-hamburg.de>
|
Alexander Holland <alexander.holland@live.de> <alexander.holland@haw-hamburg.de>
|
||||||
Alexander Holland <alexander.holland@live.de> <AlexHolly>
|
Alexander Holland <alexander.holland@live.de> <AlexHolly>
|
||||||
Andrea Catania <info@andreacatania.com>
|
Andrea Catania <info@andreacatania.com>
|
||||||
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>
|
Anish Bhobe <anishbhobe@hotmail.com>
|
||||||
Anutrix <numaanzaheerahmed@yahoo.com>
|
Anutrix <numaanzaheerahmed@yahoo.com>
|
||||||
Aren Villanueva <arenvillanueva@yomogi-soft.com> <aren@displaysweet.com>
|
Aren Villanueva <arenvillanueva@yomogi-soft.com> <aren@displaysweet.com>
|
||||||
|
@ -69,6 +65,11 @@ Kelly Thomas <kelly.thomas@hotmail.com.au>
|
||||||
K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com>
|
K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com>
|
||||||
Leon Krause <lk@leonkrause.com> <eska@eska.me>
|
Leon Krause <lk@leonkrause.com> <eska@eska.me>
|
||||||
Leon Krause <lk@leonkrause.com> <eska014@users.noreply.github.com>
|
Leon Krause <lk@leonkrause.com> <eska014@users.noreply.github.com>
|
||||||
|
Liz Haas <27thLiz@gmail.com>
|
||||||
|
Liz Haas <27thLiz@gmail.com> <liu.gam3@gmail.com>
|
||||||
|
Liz Haas <27thLiz@gmail.com> <hinsbart@gmail.com>
|
||||||
|
Liz Haas <27thLiz@gmail.com> <hinsbart@users.noreply.github.com>
|
||||||
|
Liz Haas <27thLiz@gmail.com> <entenflugstuhl@gmail.com>
|
||||||
Manuel Strey <manuel.strey@gmx.de>
|
Manuel Strey <manuel.strey@gmx.de>
|
||||||
Marcelo Fernandez <marcelofg55@gmail.com>
|
Marcelo Fernandez <marcelofg55@gmail.com>
|
||||||
Marcin Zawiejski <dragmz@gmail.com>
|
Marcin Zawiejski <dragmz@gmail.com>
|
||||||
|
|
|
@ -32,7 +32,6 @@ name is available.
|
||||||
Alexey Khoroshavin (allkhor)
|
Alexey Khoroshavin (allkhor)
|
||||||
Alket Rexhepi (alketii)
|
Alket Rexhepi (alketii)
|
||||||
Andrea Catania (AndreaCatania)
|
Andrea Catania (AndreaCatania)
|
||||||
Andreas Haas (Hinsbart)
|
|
||||||
Andrii Doroshenko (Xrayez)
|
Andrii Doroshenko (Xrayez)
|
||||||
Andy Moss (MillionOstrich)
|
Andy Moss (MillionOstrich)
|
||||||
Anish Bhobe (KidRigger)
|
Anish Bhobe (KidRigger)
|
||||||
|
@ -97,6 +96,7 @@ name is available.
|
||||||
Jakub Grzesik (kubecz3k)
|
Jakub Grzesik (kubecz3k)
|
||||||
James Buck (jbuck3)
|
James Buck (jbuck3)
|
||||||
Jérôme Gully (Nutriz)
|
Jérôme Gully (Nutriz)
|
||||||
|
Jia Jun Chai (SkyLucilfer)
|
||||||
Joan Fons Sanchez (JFonS)
|
Joan Fons Sanchez (JFonS)
|
||||||
Johan Manuel (29jm)
|
Johan Manuel (29jm)
|
||||||
Joshua Grams (JoshuaGrams)
|
Joshua Grams (JoshuaGrams)
|
||||||
|
@ -107,7 +107,8 @@ name is available.
|
||||||
Kostadin Damyanov (Max-Might)
|
Kostadin Damyanov (Max-Might)
|
||||||
K. S. Ernest (iFire) Lee (fire)
|
K. S. Ernest (iFire) Lee (fire)
|
||||||
lawnjelly
|
lawnjelly
|
||||||
Leon Krause (eska014)
|
Leon Krause (leonkrause)
|
||||||
|
Liz Haas (27thLiz)
|
||||||
Lucien Menassol (Kanabenki)
|
Lucien Menassol (Kanabenki)
|
||||||
m4nu3lf
|
m4nu3lf
|
||||||
Maganty Rushyendra (mrushyendra)
|
Maganty Rushyendra (mrushyendra)
|
||||||
|
@ -134,6 +135,7 @@ name is available.
|
||||||
muiroc
|
muiroc
|
||||||
Nathan Warden (NathanWarden)
|
Nathan Warden (NathanWarden)
|
||||||
Nils André-Chang (NilsIrl)
|
Nils André-Chang (NilsIrl)
|
||||||
|
Noah Beard (TwistedTwigleg)
|
||||||
Nuno Donato (nunodonato)
|
Nuno Donato (nunodonato)
|
||||||
Ovnuniarchos
|
Ovnuniarchos
|
||||||
Pascal Richter (ShyRed)
|
Pascal Richter (ShyRed)
|
||||||
|
@ -157,12 +159,15 @@ name is available.
|
||||||
Robin Hübner (profan)
|
Robin Hübner (profan)
|
||||||
romulox-x
|
romulox-x
|
||||||
Ruslan Mustakov (endragor)
|
Ruslan Mustakov (endragor)
|
||||||
|
Ryan Roden-Corrent (rrcore)
|
||||||
Saniko (sanikoyes)
|
Saniko (sanikoyes)
|
||||||
santouits
|
santouits
|
||||||
SaracenOne
|
SaracenOne
|
||||||
|
Sergey Minakov (naithar)
|
||||||
sersoong
|
sersoong
|
||||||
Shiqing (kawa-yoiko)
|
Shiqing (kawa-yoiko)
|
||||||
Simon Wenner (swenner)
|
Simon Wenner (swenner)
|
||||||
|
Stijn Hinlopen (hinlopen)
|
||||||
Swarnim Arun (minraws)
|
Swarnim Arun (minraws)
|
||||||
Thakee Nathees (ThakeeNathees)
|
Thakee Nathees (ThakeeNathees)
|
||||||
Theo Hallenius (TheoXD)
|
Theo Hallenius (TheoXD)
|
||||||
|
|
218
DONORS.md
218
DONORS.md
|
@ -12,26 +12,35 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
|
|
||||||
## Platinum sponsors
|
## Platinum sponsors
|
||||||
|
|
||||||
|
Gamblify <https://www.gamblify.com>
|
||||||
Heroic Labs <https://heroiclabs.com>
|
Heroic Labs <https://heroiclabs.com>
|
||||||
Interblock <http://interblockgaming.com>
|
Interblock <http://interblockgaming.com>
|
||||||
|
|
||||||
## Gold sponsors
|
## Gold sponsors
|
||||||
|
|
||||||
Gamblify <https://www.gamblify.com>
|
None currently, become one! <https://godotengine.org/donate>
|
||||||
|
|
||||||
|
## Silver sponsors
|
||||||
|
|
||||||
Moonwards <https://www.moonwards.com>
|
Moonwards <https://www.moonwards.com>
|
||||||
|
|
||||||
|
## Bronze sponsors
|
||||||
|
|
||||||
|
Brandon Lamb
|
||||||
|
|
||||||
## Mini sponsors
|
## Mini sponsors
|
||||||
|
|
||||||
AD Ford
|
AD Ford
|
||||||
Alan Beauchamp
|
Alan Beauchamp
|
||||||
albinaask
|
albinaask
|
||||||
Alejandro Saucedo
|
Alejandro Saucedo
|
||||||
|
alex brown
|
||||||
Andrew Dunai
|
Andrew Dunai
|
||||||
Brandon Lamb
|
|
||||||
Christian Baune
|
Christian Baune
|
||||||
Christopher Montesano
|
Christopher Montesano
|
||||||
Darkhan Baimyrza
|
Darkhan Baimyrza
|
||||||
Darrin Massena
|
Darrin Massena
|
||||||
|
David Mydlarz
|
||||||
Digital Grows
|
Digital Grows
|
||||||
Dov Zimring
|
Dov Zimring
|
||||||
Edward Flick
|
Edward Flick
|
||||||
|
@ -43,6 +52,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Jasper Brooks
|
Jasper Brooks
|
||||||
Javary Co.
|
Javary Co.
|
||||||
Jeffery Chiu
|
Jeffery Chiu
|
||||||
|
Jonah Stich
|
||||||
Justin Arnold
|
Justin Arnold
|
||||||
Kyle Szklenski
|
Kyle Szklenski
|
||||||
Marcel Kräml
|
Marcel Kräml
|
||||||
|
@ -51,45 +61,39 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Mike King
|
Mike King
|
||||||
Nathan Warden
|
Nathan Warden
|
||||||
Neal Gompa (Conan Kudo)
|
Neal Gompa (Conan Kudo)
|
||||||
|
Patrick Schmidt
|
||||||
Ronnie Cheng
|
Ronnie Cheng
|
||||||
Slobodan Milnovic
|
Slobodan Milnovic
|
||||||
Stephan Lanfermann
|
Stephan Lanfermann
|
||||||
Steve
|
Steve
|
||||||
|
Thomas Krampl
|
||||||
Tristan Pemble
|
Tristan Pemble
|
||||||
VilliHaukka
|
VilliHaukka
|
||||||
|
Violin Iliev
|
||||||
|
蕭惟允
|
||||||
|
|
||||||
## Gold donors
|
## Gold donors
|
||||||
|
|
||||||
Bjarke
|
Andrew Morsillo
|
||||||
David Gehrig
|
|
||||||
David Snopek
|
|
||||||
Ed Morley
|
|
||||||
Florian Rämisch
|
|
||||||
Jakub Grzesik
|
|
||||||
Manuele Finocchiaro
|
|
||||||
Officine Pixel S.n.c.
|
|
||||||
Rami
|
|
||||||
Ronan Zeegers
|
|
||||||
Sofox
|
|
||||||
Spicylewd
|
|
||||||
Taylor Ritenour
|
|
||||||
Zaven Muradyan
|
|
||||||
|
|
||||||
Andreas Schüle
|
|
||||||
Andres Hernandez
|
|
||||||
Asher Glick
|
Asher Glick
|
||||||
Austen McRae
|
Austen McRae
|
||||||
Bernhard Werner
|
Bernhard Werner
|
||||||
beVR
|
beVR
|
||||||
Carlo Cabanilla
|
Carlo Cabanilla
|
||||||
|
Chris Goddard
|
||||||
Christopher Case
|
Christopher Case
|
||||||
Daniel James
|
Daniel James
|
||||||
|
David Gehrig
|
||||||
David Giardi
|
David Giardi
|
||||||
Default Name
|
David Snopek
|
||||||
|
Ed Morley
|
||||||
eggs
|
eggs
|
||||||
|
Ellen Poe
|
||||||
Florian Breisch
|
Florian Breisch
|
||||||
|
Florian Rämisch
|
||||||
Forge
|
Forge
|
||||||
Gamejunkey
|
Gamejunkey
|
||||||
|
Jakub Grzesik
|
||||||
Javier Roman
|
Javier Roman
|
||||||
Jon Woodward
|
Jon Woodward
|
||||||
Karl Werf
|
Karl Werf
|
||||||
|
@ -97,95 +101,89 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Lex Steers
|
Lex Steers
|
||||||
Luke
|
Luke
|
||||||
Maciej Pendolski
|
Maciej Pendolski
|
||||||
|
Manuele Finocchiaro
|
||||||
|
Markus Wiesner
|
||||||
Matthew Hillier
|
Matthew Hillier
|
||||||
Mohamed Ikbel Boulabiar
|
Mohamed Ikbel Boulabiar
|
||||||
Monster Vial
|
Monster Vial
|
||||||
|
Officine Pixel S.n.c.
|
||||||
|
Rami
|
||||||
Rene
|
Rene
|
||||||
|
Rene Tailleur
|
||||||
Retro Village
|
Retro Village
|
||||||
Rob Messick
|
Rob Messick
|
||||||
Roland Fredenhagen
|
Roland Fredenhagen
|
||||||
|
Ronan Zeegers
|
||||||
Ryan Badour
|
Ryan Badour
|
||||||
Sandro Jenny
|
Sandro Jenny
|
||||||
Sarksus
|
Sarksus
|
||||||
Scott Wadden
|
Scott Wadden
|
||||||
Sergey
|
Sergey
|
||||||
thechris
|
Sofox
|
||||||
|
Spicylewd
|
||||||
|
Taylor Ritenour
|
||||||
Tom Langwaldt
|
Tom Langwaldt
|
||||||
Tricky Fat Cat
|
Tricky Fat Cat
|
||||||
tukon
|
tukon
|
||||||
William Wold
|
William Wold
|
||||||
|
xagonist
|
||||||
|
Zaven Muradyan
|
||||||
|
|
||||||
Alex Khayrullin
|
Aaron Winter
|
||||||
alice gambrell
|
|
||||||
Andrew Harris
|
|
||||||
Barugon
|
|
||||||
Chris Goddard
|
|
||||||
Chris Serino
|
|
||||||
Christian Padilla
|
|
||||||
Conrad Curry
|
|
||||||
Craig Smith
|
|
||||||
Darrian Little
|
|
||||||
dragonage13
|
|
||||||
GiulianoB
|
|
||||||
Hoai Nam Tran
|
|
||||||
Horváth Péter
|
|
||||||
Jeff Nyte
|
|
||||||
Joan Fons
|
|
||||||
Joshua Flores
|
|
||||||
Leo Fidel R Liban
|
|
||||||
Michael Dürwald
|
|
||||||
Péter Magyar
|
|
||||||
Petr Malac
|
|
||||||
Rob
|
|
||||||
Robert Willes
|
|
||||||
Ronnie Ashlock
|
|
||||||
SKison
|
|
||||||
Thomas Bjarnelöf
|
|
||||||
Valryia
|
|
||||||
Vincent Henderson
|
|
||||||
Vojtěch
|
|
||||||
Wojciech Chojnacki
|
|
||||||
Xavier PATRICELLI
|
|
||||||
Zoran Kukulj
|
|
||||||
|
|
||||||
Adam Nakonieczny
|
Adam Nakonieczny
|
||||||
Adam Neumann
|
Adam Neumann
|
||||||
Alexander J Maynard
|
Alexander J Maynard
|
||||||
Alexey Dyadchenko
|
Alexey Dyadchenko
|
||||||
|
Alex Khayrullin
|
||||||
|
alice gambrell
|
||||||
Andreas Funke
|
Andreas Funke
|
||||||
André Frélicot
|
André Frélicot
|
||||||
|
Andrew Harris
|
||||||
aoshiwik
|
aoshiwik
|
||||||
Ben Powell
|
Barugon
|
||||||
|
Can Eris
|
||||||
Carlos de Sousa Marques
|
Carlos de Sousa Marques
|
||||||
Charlie Whitfield
|
Charlie Whitfield
|
||||||
Chase Taranto
|
Chase Taranto
|
||||||
Chelsea Hash
|
Chelsea Hash
|
||||||
Chris Petrich
|
Chris Petrich
|
||||||
|
Chris Serino
|
||||||
Christian Alexander Bjørklund Bøhler
|
Christian Alexander Bjørklund Bøhler
|
||||||
Christian Leth Jeppesen
|
Christian Leth Jeppesen
|
||||||
Cody Parker
|
Cody Parker
|
||||||
|
Conrad Curry
|
||||||
Craig Ostrin
|
Craig Ostrin
|
||||||
curtis Kramer
|
Craig Smith
|
||||||
D
|
D
|
||||||
|
Darrian Little
|
||||||
Dev To be curious
|
Dev To be curious
|
||||||
Digital Denizen
|
Digital Denizen
|
||||||
Easypete
|
Easypete
|
||||||
Edgar Sun
|
Edgar Sun
|
||||||
Eugenio Hugo Salgüero Jáñez
|
Eugenio Hugo Salgüero Jáñez
|
||||||
|
Felix Brückner
|
||||||
flesk
|
flesk
|
||||||
F S
|
F S
|
||||||
Gary Hulst
|
Gary Hulst
|
||||||
gavlig
|
gavlig
|
||||||
GGGames.org
|
GGGames.org
|
||||||
|
GiulianoB
|
||||||
Guilherme Felipe de C. G. da Silva
|
Guilherme Felipe de C. G. da Silva
|
||||||
Heath Hayes
|
Heath Hayes
|
||||||
|
Hoai Nam Tran
|
||||||
|
Horváth Péter
|
||||||
Hu Hund
|
Hu Hund
|
||||||
Isaac Clausman
|
Jared
|
||||||
Jared White
|
Jared White
|
||||||
Joe Flood
|
Jeff Nyte
|
||||||
|
Joan Fons
|
||||||
|
Joel Fivat
|
||||||
|
Joel Höglund
|
||||||
John G Gentzel
|
John G Gentzel
|
||||||
Jose Malheiro
|
Jose Malheiro
|
||||||
Joseph Crane
|
Joseph Crane
|
||||||
|
Joshie Sparks
|
||||||
|
Joshua Flores
|
||||||
Joshua Lesperance
|
Joshua Lesperance
|
||||||
Juan Velandia
|
Juan Velandia
|
||||||
Julian Todd
|
Julian Todd
|
||||||
|
@ -194,14 +192,18 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Kelteseth
|
Kelteseth
|
||||||
kickmaniac
|
kickmaniac
|
||||||
kinfox
|
kinfox
|
||||||
|
Lachie
|
||||||
Lain Ballard
|
Lain Ballard
|
||||||
|
Leo Fidel R Liban
|
||||||
luca duran
|
luca duran
|
||||||
|
MadScientistCarl
|
||||||
Marcelo Dornbusch Lopes
|
Marcelo Dornbusch Lopes
|
||||||
Marcelo Henrique Gonçalves
|
Marisa Clardy
|
||||||
Markus Fehr
|
Markus Fehr
|
||||||
Markus Wiesner
|
|
||||||
Martin Eigel
|
Martin Eigel
|
||||||
Matt Eunson
|
Matt Eunson
|
||||||
|
Michael
|
||||||
|
Michael Dürwald
|
||||||
Mikado069
|
Mikado069
|
||||||
m kaersten
|
m kaersten
|
||||||
MuffinManKen
|
MuffinManKen
|
||||||
|
@ -211,40 +213,57 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Patrick Ting
|
Patrick Ting
|
||||||
Paul Hocker
|
Paul Hocker
|
||||||
Paul Von Zimmerman
|
Paul Von Zimmerman
|
||||||
|
Pedro Silva
|
||||||
Pete Goodwin
|
Pete Goodwin
|
||||||
|
Péter Magyar
|
||||||
|
Petr Malac
|
||||||
PhaineOfCatz
|
PhaineOfCatz
|
||||||
pl
|
pl
|
||||||
Ranoller
|
Ranoller
|
||||||
|
Raymond Harris
|
||||||
|
Ricardo Alcantara
|
||||||
|
Rob
|
||||||
|
Robert Willes
|
||||||
Rob McInroy
|
Rob McInroy
|
||||||
Rocknight Studios
|
Rocknight Studios
|
||||||
|
Ronnie Ashlock
|
||||||
Ryan
|
Ryan
|
||||||
|
Ryan Wilson
|
||||||
Samuel Judd
|
Samuel Judd
|
||||||
Scott Pilet
|
Scott Pilet
|
||||||
Scott Ryan-Taylor
|
|
||||||
Sean Morgan
|
Sean Morgan
|
||||||
Sean Robertson
|
Sean Robertson
|
||||||
Sébastien
|
Sébastien
|
||||||
Serban Serafimescu
|
Serban Serafimescu
|
||||||
|
Shishir Tandale
|
||||||
|
SKison
|
||||||
SleepCircle
|
SleepCircle
|
||||||
spilldata
|
spilldata
|
||||||
|
Steven Landow
|
||||||
Stoned Xander
|
Stoned Xander
|
||||||
Tahiti Bos
|
Tahiti Bos
|
||||||
TheLevelOfDetail .
|
TheLevelOfDetail .
|
||||||
|
Thomas Bjarnelöf
|
||||||
Thomas Kurz
|
Thomas Kurz
|
||||||
|
Timothy Pulliam
|
||||||
Tobias Bocanegra
|
Tobias Bocanegra
|
||||||
Trent Fehl
|
Trent Fehl
|
||||||
Urho
|
Valryia
|
||||||
|
VikFro
|
||||||
|
Vincent Henderson
|
||||||
|
Vojtěch
|
||||||
William Foster
|
William Foster
|
||||||
|
Wojciech Chojnacki
|
||||||
|
Xavier PATRICELLI
|
||||||
|
xzibiting
|
||||||
Zhou Tuizhi
|
Zhou Tuizhi
|
||||||
Zie Weaver
|
Zie Weaver
|
||||||
蕭惟允
|
Zoran Kukulj
|
||||||
|
|
||||||
## Silver donors
|
## Silver donors
|
||||||
|
|
||||||
1D_Inc
|
1D_Inc
|
||||||
Aaron
|
Aaron
|
||||||
Aaron Winter
|
|
||||||
Abel Crunk
|
|
||||||
Abraham Haskins
|
Abraham Haskins
|
||||||
Acheron
|
Acheron
|
||||||
Adam
|
Adam
|
||||||
|
@ -252,7 +271,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Adam Carr
|
Adam Carr
|
||||||
Adam Long
|
Adam Long
|
||||||
Adam McCurdy
|
Adam McCurdy
|
||||||
Adam Netzel
|
|
||||||
Adam N Webber
|
Adam N Webber
|
||||||
Adam Smeltzer
|
Adam Smeltzer
|
||||||
Adam Szymański
|
Adam Szymański
|
||||||
|
@ -265,18 +283,22 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
AleMax
|
AleMax
|
||||||
Alessandro Senese
|
Alessandro Senese
|
||||||
Alexander Erlemann
|
Alexander Erlemann
|
||||||
|
Alexandre Beaudoin
|
||||||
alex clavelle
|
alex clavelle
|
||||||
|
Ali Al-Khalifa
|
||||||
Allan Davis
|
Allan Davis
|
||||||
Allen Schade
|
Allen Schade
|
||||||
Andreas Krampitz
|
Andreas Krampitz
|
||||||
André Simões
|
André Simões
|
||||||
andrew james morris
|
andrew james morris
|
||||||
Andrew Mansuetti
|
Andrew Mansuetti
|
||||||
|
Andrew Rosenwinkel
|
||||||
Andrew Thomas
|
Andrew Thomas
|
||||||
Ano Nim
|
Ano Nim
|
||||||
Anthony Avina
|
Anthony Avina
|
||||||
AP Condomines
|
AP Condomines
|
||||||
Arda Erol
|
Arda Erol
|
||||||
|
Arisaka Mayuki
|
||||||
Armin Preiml
|
Armin Preiml
|
||||||
Arseniy M
|
Arseniy M
|
||||||
Arthur S. Muszynski
|
Arthur S. Muszynski
|
||||||
|
@ -285,43 +307,49 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Aubrey Falconer
|
Aubrey Falconer
|
||||||
B A
|
B A
|
||||||
Balázs Batári
|
Balázs Batári
|
||||||
Balázs Hasprai
|
|
||||||
Bartosz Bielecki
|
Bartosz Bielecki
|
||||||
Benedikt
|
Benedikt
|
||||||
Ben Vercammen
|
Ben Vercammen
|
||||||
Bernd Jänichen
|
Bernd Jänichen
|
||||||
Bjarne
|
Bjarne Voigtländer
|
||||||
Black Block
|
Black Block
|
||||||
Blair Allen
|
Blair Allen
|
||||||
Bobby CC Wong
|
Bobby CC Wong
|
||||||
Bram
|
Bram
|
||||||
brian
|
brian
|
||||||
|
Brian mc gowan
|
||||||
|
Brodie Fairhall
|
||||||
Burney Waring
|
Burney Waring
|
||||||
|
Caleb Gartner
|
||||||
Cameron Meyer
|
Cameron Meyer
|
||||||
Carl van der Geest
|
Carl van der Geest
|
||||||
Carwyn Edwards
|
Carwyn Edwards
|
||||||
Cas Brugman
|
Cas Brugman
|
||||||
Cassidy James
|
Cassidy James
|
||||||
|
Chad Steadman
|
||||||
Chris Brown
|
Chris Brown
|
||||||
Chris Chapin
|
Chris Chapin
|
||||||
Christian Winter
|
Christian Winter
|
||||||
|
Christoffer Dahlblom
|
||||||
Christoffer Sundbom
|
Christoffer Sundbom
|
||||||
Christoph Brodmann
|
|
||||||
Christophe Gagnier
|
Christophe Gagnier
|
||||||
Christopher Schmitt
|
Christopher Schmitt
|
||||||
Christoph Woinke
|
Christoph Woinke
|
||||||
Clay Heaton
|
Clay Heaton
|
||||||
Cole Johnson
|
Cole Johnson
|
||||||
Cuauhtemoc Moreno
|
|
||||||
Curt King
|
Curt King
|
||||||
Daniel Kimblad
|
CzechBlueBear
|
||||||
|
Daniel De Macedo
|
||||||
Daniel Johnson
|
Daniel Johnson
|
||||||
DanielMaximiano
|
DanielMaximiano
|
||||||
|
Daniel Szarfman
|
||||||
Daniel Tebbutt
|
Daniel Tebbutt
|
||||||
|
Daren Scot Wilson
|
||||||
Dave Walker
|
Dave Walker
|
||||||
David May
|
David May
|
||||||
David Woodard
|
David Woodard
|
||||||
Dimitri Stanojevic
|
David Zanetti
|
||||||
|
Dmitry Fisher
|
||||||
Dmytro Korchynskyi
|
Dmytro Korchynskyi
|
||||||
Dominik Wetzel
|
Dominik Wetzel
|
||||||
Donn Eddy
|
Donn Eddy
|
||||||
|
@ -341,6 +369,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Eric Ellingson
|
Eric Ellingson
|
||||||
Eric Williams
|
Eric Williams
|
||||||
Erkki Seppälä
|
Erkki Seppälä
|
||||||
|
ET Garcia
|
||||||
Evan Rose
|
Evan Rose
|
||||||
Fain
|
Fain
|
||||||
Faisal Alkubaisi
|
Faisal Alkubaisi
|
||||||
|
@ -378,22 +407,20 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Jaiden Gerig
|
Jaiden Gerig
|
||||||
Jaime Ruiz-Borau Vizárraga
|
Jaime Ruiz-Borau Vizárraga
|
||||||
Jako Danar
|
Jako Danar
|
||||||
|
James
|
||||||
James A F Manley
|
James A F Manley
|
||||||
Jamiee H
|
Jamiee H
|
||||||
Jamie Massey
|
Jamie Massey
|
||||||
Janders
|
Janders
|
||||||
JARKKO PARVIAINEN
|
JARKKO PARVIAINEN
|
||||||
|
Jason Uechi
|
||||||
Jean-Baptiste LEPESME
|
Jean-Baptiste LEPESME
|
||||||
Jeff Hungerford
|
Jeff Hungerford
|
||||||
Jennifer Graves
|
Jennifer Graves
|
||||||
Jesse Dubay
|
Jesse Dubay
|
||||||
Joe Alden
|
Joe Alden
|
||||||
Joel Fivat
|
Joe Klemmer
|
||||||
Joel Höglund
|
|
||||||
Joel Setterberg
|
|
||||||
Johannes Goslar
|
|
||||||
John Gabriel
|
John Gabriel
|
||||||
John Walker
|
|
||||||
Jomei Jackson
|
Jomei Jackson
|
||||||
Jonas
|
Jonas
|
||||||
Jonas Bernemann
|
Jonas Bernemann
|
||||||
|
@ -405,7 +432,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Jon Sully
|
Jon Sully
|
||||||
Jordy Goodridge
|
Jordy Goodridge
|
||||||
Jorge Antunes
|
Jorge Antunes
|
||||||
Jose Aleman
|
|
||||||
Jose C. Rubio
|
Jose C. Rubio
|
||||||
Joseph Catrambone
|
Joseph Catrambone
|
||||||
Josh Mitchell
|
Josh Mitchell
|
||||||
|
@ -422,19 +448,19 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Karel Němec
|
Karel Němec
|
||||||
Kauzig
|
Kauzig
|
||||||
Keedong Park
|
Keedong Park
|
||||||
|
Keinan Powers
|
||||||
Keith Bradner
|
Keith Bradner
|
||||||
Kent Jofur
|
Kent Jofur
|
||||||
Kevin McPhillips
|
Kevin McPhillips
|
||||||
Kevin Velasco
|
|
||||||
Kiri Jolly
|
Kiri Jolly
|
||||||
Kjetil Haugland
|
Kjetil Haugland
|
||||||
Klagsam
|
|
||||||
KsyTek Games
|
KsyTek Games
|
||||||
Kuan Cheang
|
Kuan Cheang
|
||||||
kycho
|
kycho
|
||||||
Kyle Appelgate
|
Kyle Appelgate
|
||||||
Kyuppin
|
Kyuppin
|
||||||
Laurent Tréguier
|
Laurent Tréguier
|
||||||
|
LEMMiNO
|
||||||
Leonardo Dimano
|
Leonardo Dimano
|
||||||
Lin Chear
|
Lin Chear
|
||||||
Linus Lind Lundgren
|
Linus Lind Lundgren
|
||||||
|
@ -447,6 +473,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Marco Lardelli
|
Marco Lardelli
|
||||||
Mark Jad
|
Mark Jad
|
||||||
Mark Krenz
|
Mark Krenz
|
||||||
|
Markus Martin
|
||||||
Markus Michael Egger
|
Markus Michael Egger
|
||||||
Martin FIbik
|
Martin FIbik
|
||||||
Martin Holas
|
Martin Holas
|
||||||
|
@ -456,16 +483,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Marvin
|
Marvin
|
||||||
Mathieu
|
Mathieu
|
||||||
Matt Edwards
|
Matt Edwards
|
||||||
Mauro Pellegrini
|
Matthew Booe
|
||||||
Max Fiedler
|
Max Fiedler
|
||||||
Maxime Blade
|
Maxime Blade
|
||||||
Maxwell
|
Maxwell
|
||||||
Megasploot
|
Megasploot
|
||||||
Melissa Mears
|
Melissa Mears
|
||||||
mewin
|
mewin
|
||||||
|
Michael Cullen
|
||||||
Michael Haney
|
Michael Haney
|
||||||
Michał Skwarek
|
Michał Skwarek
|
||||||
Mikael Olsson
|
|
||||||
Mikayla
|
Mikayla
|
||||||
Mike Birkhead
|
Mike Birkhead
|
||||||
Mike Cunningham
|
Mike Cunningham
|
||||||
|
@ -484,12 +511,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Nick Allen
|
Nick Allen
|
||||||
Nick Macholl
|
Nick Macholl
|
||||||
Niclas Eriksen
|
Niclas Eriksen
|
||||||
|
Nicolas Goll-Perrier
|
||||||
Nicolás Montaña
|
Nicolás Montaña
|
||||||
Nicolas SAN AGUSTIN
|
Nicolas SAN AGUSTIN
|
||||||
NZ
|
NZ
|
||||||
|
'@oddgoo
|
||||||
|
OKV
|
||||||
Oleg Reva
|
Oleg Reva
|
||||||
Olivier
|
Olivier
|
||||||
Omar Delarosa
|
Omar Delarosa
|
||||||
|
Oscar Domingo
|
||||||
Oscar Norlander
|
Oscar Norlander
|
||||||
Pan Ip
|
Pan Ip
|
||||||
Parinya Teerakasemsuk
|
Parinya Teerakasemsuk
|
||||||
|
@ -502,16 +533,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Penguin
|
Penguin
|
||||||
Peter
|
Peter
|
||||||
Philip Cohoe
|
Philip Cohoe
|
||||||
|
Pierre-Nicolas Tollitte
|
||||||
Piotr Góral
|
Piotr Góral
|
||||||
Point08
|
Point08
|
||||||
|
Preethi Vaidyanathan
|
||||||
pwab
|
pwab
|
||||||
Rad Cat
|
Rad Cat
|
||||||
Rafa Laguna
|
Rafa Laguna
|
||||||
Ram
|
|
||||||
Remi Rampin
|
Remi Rampin
|
||||||
Rémi Verschelde
|
Rémi Verschelde
|
||||||
Reneator
|
Reneator
|
||||||
Ricardo Alcantara
|
|
||||||
Richard Diss
|
Richard Diss
|
||||||
Richard Ivánek
|
Richard Ivánek
|
||||||
Robert Farr (Larington)
|
Robert Farr (Larington)
|
||||||
|
@ -522,7 +553,9 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Ronald Ho Hip (CrimsonZA)
|
Ronald Ho Hip (CrimsonZA)
|
||||||
Ronan
|
Ronan
|
||||||
Ronny Mühle
|
Ronny Mühle
|
||||||
|
Ross Squires
|
||||||
Ryan Groom
|
Ryan Groom
|
||||||
|
Sam Caulfield
|
||||||
Sam Edson
|
Sam Edson
|
||||||
Samuele Zolfanelli
|
Samuele Zolfanelli
|
||||||
Scott D. Yelich
|
Scott D. Yelich
|
||||||
|
@ -531,15 +564,16 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Sebastian Michailidis
|
Sebastian Michailidis
|
||||||
Sebastian Vetter
|
Sebastian Vetter
|
||||||
Sergio Mello-Grand
|
Sergio Mello-Grand
|
||||||
|
Shaher
|
||||||
Shane
|
Shane
|
||||||
Shane Sicienski
|
Shane Sicienski
|
||||||
Shane Spoor
|
Shane Spoor
|
||||||
Shiomi '- Duy Kevin Nguyen
|
Shiomi - Duy Kevin Nguyen
|
||||||
Siim Raidma
|
Siim Raidma
|
||||||
Simon Jonas Larsen
|
Simon Jonas Larsen
|
||||||
|
Simon Schoenenberger
|
||||||
Simon Wenner
|
Simon Wenner
|
||||||
Sintinium
|
Sintinium
|
||||||
SK
|
|
||||||
smbe19
|
smbe19
|
||||||
smo1704
|
smo1704
|
||||||
soft circles
|
soft circles
|
||||||
|
@ -547,7 +581,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Stefano Caronia
|
Stefano Caronia
|
||||||
Steve Cloete
|
Steve Cloete
|
||||||
Svenne Krap
|
Svenne Krap
|
||||||
Taylor Fahlman
|
Tannen Helmers
|
||||||
Terry
|
Terry
|
||||||
tezuvholovdr
|
tezuvholovdr
|
||||||
TheVoiceInMyHead
|
TheVoiceInMyHead
|
||||||
|
@ -558,26 +592,30 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Tim Drumheller
|
Tim Drumheller
|
||||||
Tim Erskine
|
Tim Erskine
|
||||||
Timothy B. MacDonald
|
Timothy B. MacDonald
|
||||||
Title Plinsut
|
|
||||||
Tobbun
|
Tobbun
|
||||||
Tobias Bradtke
|
Tobias Bradtke
|
||||||
Tom Glenn
|
|
||||||
Toni Duran
|
Toni Duran
|
||||||
|
Tony Zhao
|
||||||
Torgeir Lilleskog
|
Torgeir Lilleskog
|
||||||
Torsten Crass
|
Torsten Crass
|
||||||
Travis O'Brien
|
Travis O'Brien
|
||||||
Trent Skinner
|
Trent Skinner
|
||||||
|
Triptych
|
||||||
|
Triumph263 .
|
||||||
Troy Bonneau
|
Troy Bonneau
|
||||||
Tryggve Sollid
|
Tryggve Sollid
|
||||||
Turgut Temucin
|
Turgut Temucin
|
||||||
Tyler Compton
|
Tyler Compton
|
||||||
Tyler Stafos
|
Tyler Stafos
|
||||||
UltyX
|
UltyX
|
||||||
|
Uther
|
||||||
Valentí Gàmez
|
Valentí Gàmez
|
||||||
Vaughan Ling
|
Vaughan Ling
|
||||||
Victor
|
Victor
|
||||||
Vigilant Watch
|
Vigilant Watch
|
||||||
|
Viktor Ismagilov
|
||||||
Vincent Cloutier
|
Vincent Cloutier
|
||||||
|
Vitor Balbio
|
||||||
Vladimir Savin
|
Vladimir Savin
|
||||||
waka nya
|
waka nya
|
||||||
Wayne Haak
|
Wayne Haak
|
||||||
|
@ -587,9 +625,9 @@ generous deed immortalized in the next stable release of Godot Engine.
|
||||||
Wyatt Goodin
|
Wyatt Goodin
|
||||||
Yegor Smirnov
|
Yegor Smirnov
|
||||||
YiYin Gu
|
YiYin Gu
|
||||||
Yuri LaPointe
|
|
||||||
Yuri Sizov
|
Yuri Sizov
|
||||||
Zgegnesh Hemomancer
|
Zgegnesh Hemomancer
|
||||||
|
ΒΑΣΙΛΗΣ ΓΕΩΡΓΑΚΟΠΟΥΛΟΣ
|
||||||
郝晨煜
|
郝晨煜
|
||||||
|
|
||||||
## Bronze donors
|
## Bronze donors
|
||||||
|
|
54
README.md
54
README.md
|
@ -1,25 +1,29 @@
|
||||||
[![Godot Engine logo](/logo.png)](https://godotengine.org)
|
# Godot Engine
|
||||||
|
|
||||||
## Godot Engine
|
<p align="center">
|
||||||
|
<a href="https://godotengine.org">
|
||||||
|
<img src="logo.svg" width="400" alt="Godot Engine logo">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
Homepage: https://godotengine.org
|
## 2D and 3D cross-platform game engine
|
||||||
|
|
||||||
#### 2D and 3D cross-platform game engine
|
**[Godot Engine](https://godotengine.org) is a feature-packed, cross-platform
|
||||||
|
game engine to create 2D and 3D games from a unified interface.** It provides a
|
||||||
|
comprehensive set of common tools, so that users can focus on making games
|
||||||
|
without having to reinvent the wheel. Games can be exported in one click to a
|
||||||
|
number of platforms, including the major desktop platforms (Linux, macOS,
|
||||||
|
Windows), mobile platforms (Android, iOS), as well as Web-based platforms
|
||||||
|
(HTML5) and
|
||||||
|
[consoles](https://docs.godotengine.org/en/latest/tutorials/platform/consoles.html).
|
||||||
|
|
||||||
Godot Engine is a feature-packed, cross-platform game engine to create 2D and
|
## Free, open source and community-driven
|
||||||
3D games from a unified interface. It provides a comprehensive set of common
|
|
||||||
tools, so that users can focus on making games without having to reinvent the
|
|
||||||
wheel. Games can be exported in one click to a number of platforms, including
|
|
||||||
the major desktop platforms (Linux, Mac OSX, Windows) as well as mobile
|
|
||||||
(Android, iOS) and web-based (HTML5) platforms.
|
|
||||||
|
|
||||||
#### Free, open source and community-driven
|
|
||||||
|
|
||||||
Godot is completely free and open source under the very permissive MIT license.
|
Godot is completely free and open source under the very permissive MIT license.
|
||||||
No strings attached, no royalties, nothing. The users' games are theirs, down
|
No strings attached, no royalties, nothing. The users' games are theirs, down
|
||||||
to the last line of engine code. Godot's development is fully independent and
|
to the last line of engine code. Godot's development is fully independent and
|
||||||
community-driven, empowering users to help shape their engine to match their
|
community-driven, empowering users to help shape their engine to match their
|
||||||
expectations. It is supported by the Software Freedom Conservancy
|
expectations. It is supported by the [Software Freedom Conservancy](https://sfconservancy.org/)
|
||||||
not-for-profit.
|
not-for-profit.
|
||||||
|
|
||||||
Before being open sourced in February 2014, Godot had been developed by Juan
|
Before being open sourced in February 2014, Godot had been developed by Juan
|
||||||
|
@ -28,43 +32,45 @@ years as an in-house engine, used to publish several work-for-hire titles.
|
||||||
|
|
||||||
![Screenshot of a 3D scene in Godot Engine](https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg)
|
![Screenshot of a 3D scene in Godot Engine](https://raw.githubusercontent.com/godotengine/godot-design/master/screenshots/editor_tps_demo_1920x1080.jpg)
|
||||||
|
|
||||||
### Getting the engine
|
## Getting the engine
|
||||||
|
|
||||||
#### Binary downloads
|
### Binary downloads
|
||||||
|
|
||||||
Official binaries for the Godot editor and the export templates can be found
|
Official binaries for the Godot editor and the export templates can be found
|
||||||
[on the homepage](https://godotengine.org/download).
|
[on the homepage](https://godotengine.org/download).
|
||||||
|
|
||||||
#### Compiling from source
|
### Compiling from source
|
||||||
|
|
||||||
[See the official docs](https://docs.godotengine.org/en/latest/development/compiling/)
|
[See the official docs](https://docs.godotengine.org/en/latest/development/compiling/)
|
||||||
for compilation instructions for every supported platform.
|
for compilation instructions for every supported platform.
|
||||||
|
|
||||||
### Community and contributing
|
## Community and contributing
|
||||||
|
|
||||||
Godot is not only an engine but an ever-growing community of users and engine
|
Godot is not only an engine but an ever-growing community of users and engine
|
||||||
developers. The main community channels are listed [on the homepage](https://godotengine.org/community).
|
developers. The main community channels are listed [on the homepage](https://godotengine.org/community).
|
||||||
|
|
||||||
To get in touch with the developers, the best way is to join the
|
To get in touch with the engine developers, the best way is to join the
|
||||||
[#godotengine IRC channel](https://webchat.freenode.net/?channels=godotengine)
|
[#godotengine-devel IRC channel](https://webchat.freenode.net/?channels=godotengine-devel)
|
||||||
on Freenode.
|
on Freenode.
|
||||||
|
|
||||||
To get started contributing to the project, see the [contributing guide](CONTRIBUTING.md).
|
To get started contributing to the project, see the [contributing guide](CONTRIBUTING.md).
|
||||||
|
|
||||||
### Documentation and demos
|
## Documentation and demos
|
||||||
|
|
||||||
The official documentation is hosted on [ReadTheDocs](https://docs.godotengine.org).
|
The official documentation is hosted on [ReadTheDocs](https://docs.godotengine.org).
|
||||||
It is maintained by the Godot community in its own [GitHub repository](https://github.com/godotengine/godot-docs).
|
It is maintained by the Godot community in its own [GitHub repository](https://github.com/godotengine/godot-docs).
|
||||||
|
|
||||||
The [class reference](https://docs.godotengine.org/en/latest/classes/)
|
The [class reference](https://docs.godotengine.org/en/latest/classes/)
|
||||||
is also accessible from within the engine.
|
is also accessible from the Godot editor.
|
||||||
|
|
||||||
The official demos are maintained in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects)
|
The official demos are maintained in their own [GitHub repository](https://github.com/godotengine/godot-demo-projects)
|
||||||
as well.
|
as well.
|
||||||
|
|
||||||
There are also a number of other learning resources provided by the community,
|
There are also a number of other
|
||||||
such as text and video tutorials, demos, etc. Consult the [community channels](https://godotengine.org/community)
|
[learning resources](https://docs.godotengine.org/en/latest/community/tutorials.html)
|
||||||
for more info.
|
provided by the community, such as text and video tutorials, demos, etc.
|
||||||
|
Consult the [community channels](https://godotengine.org/community)
|
||||||
|
for more information.
|
||||||
|
|
||||||
[![Actions Build Status](https://github.com/godotengine/godot/workflows/Godot/badge.svg?branch=master)](https://github.com/godotengine/godot/actions)
|
[![Actions Build Status](https://github.com/godotengine/godot/workflows/Godot/badge.svg?branch=master)](https://github.com/godotengine/godot/actions)
|
||||||
[![Code Triagers Badge](https://www.codetriage.com/godotengine/godot/badges/users.svg)](https://www.codetriage.com/godotengine/godot)
|
[![Code Triagers Badge](https://www.codetriage.com/godotengine/godot/badges/users.svg)](https://www.codetriage.com/godotengine/godot)
|
||||||
|
|
|
@ -298,9 +298,10 @@ if selected_platform in platform_list:
|
||||||
from SCons import __version__ as scons_raw_version
|
from SCons import __version__ as scons_raw_version
|
||||||
|
|
||||||
scons_ver = env._get_major_minor_revision(scons_raw_version)
|
scons_ver = env._get_major_minor_revision(scons_raw_version)
|
||||||
if scons_ver >= (3, 1, 1):
|
|
||||||
env.Tool("compilation_db", toolpath=["misc/scons"])
|
if scons_ver >= (4, 0, 0):
|
||||||
env.Alias("compiledb", env.CompilationDatabase("compile_commands.json"))
|
env.Tool("compilation_db")
|
||||||
|
env.Alias("compiledb", env.CompilationDatabase())
|
||||||
|
|
||||||
if env["dev"]:
|
if env["dev"]:
|
||||||
env["verbose"] = True
|
env["verbose"] = True
|
||||||
|
|
|
@ -86,10 +86,21 @@ def make_authors_header(target, source, env):
|
||||||
|
|
||||||
|
|
||||||
def make_donors_header(target, source, env):
|
def make_donors_header(target, source, env):
|
||||||
sections = ["Platinum sponsors", "Gold sponsors", "Mini sponsors", "Gold donors", "Silver donors", "Bronze donors"]
|
sections = [
|
||||||
|
"Platinum sponsors",
|
||||||
|
"Gold sponsors",
|
||||||
|
"Silver sponsors",
|
||||||
|
"Bronze sponsors",
|
||||||
|
"Mini sponsors",
|
||||||
|
"Gold donors",
|
||||||
|
"Silver donors",
|
||||||
|
"Bronze donors",
|
||||||
|
]
|
||||||
sections_id = [
|
sections_id = [
|
||||||
"DONORS_SPONSOR_PLAT",
|
"DONORS_SPONSOR_PLATINUM",
|
||||||
"DONORS_SPONSOR_GOLD",
|
"DONORS_SPONSOR_GOLD",
|
||||||
|
"DONORS_SPONSOR_SILVER",
|
||||||
|
"DONORS_SPONSOR_BRONZE",
|
||||||
"DONORS_SPONSOR_MINI",
|
"DONORS_SPONSOR_MINI",
|
||||||
"DONORS_GOLD",
|
"DONORS_GOLD",
|
||||||
"DONORS_SILVER",
|
"DONORS_SILVER",
|
||||||
|
|
|
@ -163,8 +163,10 @@ Array Engine::get_copyright_info() const {
|
||||||
|
|
||||||
Dictionary Engine::get_donor_info() const {
|
Dictionary Engine::get_donor_info() const {
|
||||||
Dictionary donors;
|
Dictionary donors;
|
||||||
donors["platinum_sponsors"] = array_from_info(DONORS_SPONSOR_PLAT);
|
donors["platinum_sponsors"] = array_from_info(DONORS_SPONSOR_PLATINUM);
|
||||||
donors["gold_sponsors"] = array_from_info(DONORS_SPONSOR_GOLD);
|
donors["gold_sponsors"] = array_from_info(DONORS_SPONSOR_GOLD);
|
||||||
|
donors["silver_sponsors"] = array_from_info(DONORS_SPONSOR_SILVER);
|
||||||
|
donors["bronze_sponsors"] = array_from_info(DONORS_SPONSOR_BRONZE);
|
||||||
donors["mini_sponsors"] = array_from_info(DONORS_SPONSOR_MINI);
|
donors["mini_sponsors"] = array_from_info(DONORS_SPONSOR_MINI);
|
||||||
donors["gold_donors"] = array_from_info(DONORS_GOLD);
|
donors["gold_donors"] = array_from_info(DONORS_GOLD);
|
||||||
donors["silver_donors"] = array_from_info(DONORS_SILVER);
|
donors["silver_donors"] = array_from_info(DONORS_SILVER);
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#include "script_language.h"
|
#include "script_language.h"
|
||||||
|
|
||||||
#include "core/core_string_names.h"
|
#include "core/core_string_names.h"
|
||||||
|
#include "core/io/resource_loader.h"
|
||||||
#include "core/os/file_access.h"
|
#include "core/os/file_access.h"
|
||||||
#include "core/project_settings.h"
|
#include "core/project_settings.h"
|
||||||
|
|
||||||
|
@ -167,7 +168,7 @@ void ScriptServer::init_languages() {
|
||||||
|
|
||||||
for (int i = 0; i < script_classes.size(); i++) {
|
for (int i = 0; i < script_classes.size(); i++) {
|
||||||
Dictionary c = script_classes[i];
|
Dictionary c = script_classes[i];
|
||||||
if (!c.has("class") || !c.has("language") || !c.has("path") || !FileAccess::exists(c["path"]) || !c.has("base"))
|
if (!c.has("class") || !c.has("language") || !c.has("path") || !FileAccess::exists(ResourceLoader::path_remap(c["path"])) || !c.has("base"))
|
||||||
continue;
|
continue;
|
||||||
add_global_class(c["class"], c["base"], c["language"], c["path"]);
|
add_global_class(c["class"], c["base"], c["language"], c["path"]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
<return type="Variant">
|
<return type="Variant">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns the last element of the array, or [code]null[/code] if the array is empty.
|
Returns the last element of the array. Throws an error and returns [code]null[/code] if the array is empty.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="bsearch">
|
<method name="bsearch">
|
||||||
|
@ -192,7 +192,7 @@
|
||||||
<return type="Variant">
|
<return type="Variant">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns the first element of the array, or [code]null[/code] if the array is empty.
|
Returns the first element of the array. Throws an error and returns [code]null[/code] if the array is empty.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="has">
|
<method name="has">
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
<argument index="1" name="rect" type="Rect2">
|
<argument index="1" name="rect" type="Rect2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Applies morphological dilation to the bitmap. The first argument is the dilation amount, Rect2 is the area where the dilation will be applied.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="opaque_to_polygons" qualifiers="const">
|
<method name="opaque_to_polygons" qualifiers="const">
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns a Dictionary of Arrays of donor names.
|
Returns a Dictionary of Arrays of donor names.
|
||||||
{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], [code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/code], [code]bronze_donors[/code]}
|
{[code]platinum_sponsors[/code], [code]gold_sponsors[/code], [code]silver_sponsors[/code], [code]bronze_sponsors[/code], [code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/code], [code]bronze_donors[/code]}
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_frames_drawn">
|
<method name="get_frames_drawn">
|
||||||
|
|
|
@ -30,6 +30,28 @@
|
||||||
<description>
|
<description>
|
||||||
Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network.
|
Converts a [Variant] var to JSON text and returns the result. Useful for serializing data to store or send over the network.
|
||||||
[b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a Variant to JSON text will convert all numerical values to [float] types.
|
[b]Note:[/b] The JSON specification does not define integer or float types, but only a [i]number[/i] type. Therefore, converting a Variant to JSON text will convert all numerical values to [float] types.
|
||||||
|
Use [code]indent[/code] parameter to pretty print the output.
|
||||||
|
[b]Example output:[/b]
|
||||||
|
[codeblock]
|
||||||
|
## JSON.print(my_dictionary)
|
||||||
|
{"name":"my_dictionary","version":"1.0.0","entities":[{"name":"entity_0","value":"value_0"},{"name":"entity_1","value":"value_1"}]}
|
||||||
|
|
||||||
|
## JSON.print(my_dictionary, "\t")
|
||||||
|
{
|
||||||
|
"name": "my_dictionary",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"name": "entity_0",
|
||||||
|
"value": "value_0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "entity_1",
|
||||||
|
"value": "value_1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
|
|
|
@ -925,6 +925,9 @@
|
||||||
<constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26">
|
<constant name="NOTIFICATION_INTERNAL_PHYSICS_PROCESS" value="26">
|
||||||
Notification received every frame when the internal physics process flag is set (see [method set_physics_process_internal]).
|
Notification received every frame when the internal physics process flag is set (see [method set_physics_process_internal]).
|
||||||
</constant>
|
</constant>
|
||||||
|
<constant name="NOTIFICATION_POST_ENTER_TREE" value="27">
|
||||||
|
Notification received when the node is ready, just before [constant NOTIFICATION_READY] is received. Unlike the latter, it's sent every time the node enters tree, instead of only once.
|
||||||
|
</constant>
|
||||||
<constant name="NOTIFICATION_WM_MOUSE_ENTER" value="1002">
|
<constant name="NOTIFICATION_WM_MOUSE_ENTER" value="1002">
|
||||||
Notification received from the OS when the mouse enters the game window.
|
Notification received from the OS when the mouse enters the game window.
|
||||||
Implemented on desktop and web platforms.
|
Implemented on desktop and web platforms.
|
||||||
|
|
|
@ -33,7 +33,8 @@
|
||||||
<return type="float">
|
<return type="float">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Returns this vector's angle with respect to the X axis, or [code](1, 0)[/code] vector, in radians.
|
Returns this vector's angle with respect to the positive X axis, or [code](1, 0)[/code] vector, in radians.
|
||||||
|
For example, [code]Vector2.RIGHT.angle()[/code] will return zero, [code]Vector2.DOWN.angle()[/code] will return [code]PI / 2[/code] (a quarter turn, or 90 degrees), and [code]Vector2(1, -1).angle()[/code] will return [code]-PI / 4[/code] (a negative eighth turn, or -45 degrees).
|
||||||
Equivalent to the result of [method @GDScript.atan2] when called with the vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code].
|
Equivalent to the result of [method @GDScript.atan2] when called with the vector's [member y] and [member x] as parameters: [code]atan2(y, x)[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
|
|
@ -347,7 +347,7 @@ Error OS_Unix::execute(const String &p_path, const List<String> &p_arguments, bo
|
||||||
execvp(p_path.utf8().get_data(), &args[0]);
|
execvp(p_path.utf8().get_data(), &args[0]);
|
||||||
// still alive? something failed..
|
// still alive? something failed..
|
||||||
fprintf(stderr, "**ERROR** OS_Unix::execute - Could not create child process while executing: %s\n", p_path.utf8().get_data());
|
fprintf(stderr, "**ERROR** OS_Unix::execute - Could not create child process while executing: %s\n", p_path.utf8().get_data());
|
||||||
abort();
|
raise(SIGKILL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_blocking) {
|
if (p_blocking) {
|
||||||
|
|
|
@ -162,12 +162,15 @@ EditorAbout::EditorAbout() {
|
||||||
List<String> donor_sections;
|
List<String> donor_sections;
|
||||||
donor_sections.push_back(TTR("Platinum Sponsors"));
|
donor_sections.push_back(TTR("Platinum Sponsors"));
|
||||||
donor_sections.push_back(TTR("Gold Sponsors"));
|
donor_sections.push_back(TTR("Gold Sponsors"));
|
||||||
|
donor_sections.push_back(TTR("Silver Sponsors"));
|
||||||
|
donor_sections.push_back(TTR("Bronze Sponsors"));
|
||||||
donor_sections.push_back(TTR("Mini Sponsors"));
|
donor_sections.push_back(TTR("Mini Sponsors"));
|
||||||
donor_sections.push_back(TTR("Gold Donors"));
|
donor_sections.push_back(TTR("Gold Donors"));
|
||||||
donor_sections.push_back(TTR("Silver Donors"));
|
donor_sections.push_back(TTR("Silver Donors"));
|
||||||
donor_sections.push_back(TTR("Bronze Donors"));
|
donor_sections.push_back(TTR("Bronze Donors"));
|
||||||
const char *const *donor_src[] = { DONORS_SPONSOR_PLAT, DONORS_SPONSOR_GOLD,
|
const char *const *donor_src[] = { DONORS_SPONSOR_PLATINUM, DONORS_SPONSOR_GOLD,
|
||||||
DONORS_SPONSOR_MINI, DONORS_GOLD, DONORS_SILVER, DONORS_BRONZE };
|
DONORS_SPONSOR_SILVER, DONORS_SPONSOR_BRONZE, DONORS_SPONSOR_MINI,
|
||||||
|
DONORS_GOLD, DONORS_SILVER, DONORS_BRONZE };
|
||||||
tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src, 3));
|
tc->add_child(_populate_list(TTR("Donors"), donor_sections, donor_src, 3));
|
||||||
|
|
||||||
// License
|
// License
|
||||||
|
|
|
@ -1885,6 +1885,10 @@ EditorPropertyTransform::EditorPropertyTransform() {
|
||||||
////////////// COLOR PICKER //////////////////////
|
////////////// COLOR PICKER //////////////////////
|
||||||
|
|
||||||
void EditorPropertyColor::_color_changed(const Color &p_color) {
|
void EditorPropertyColor::_color_changed(const Color &p_color) {
|
||||||
|
// Cancel the color change if the current color is identical to the new one.
|
||||||
|
if (get_edited_object()->get(get_edited_property()) == p_color) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
emit_changed(get_edited_property(), p_color, "", true);
|
emit_changed(get_edited_property(), p_color, "", true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1892,15 +1892,19 @@ void ScriptEditor::_update_script_names() {
|
||||||
Vector<String> disambiguated_script_names;
|
Vector<String> disambiguated_script_names;
|
||||||
Vector<String> full_script_paths;
|
Vector<String> full_script_paths;
|
||||||
for (int j = 0; j < sedata.size(); j++) {
|
for (int j = 0; j < sedata.size(); j++) {
|
||||||
disambiguated_script_names.push_back(sedata[j].name);
|
disambiguated_script_names.push_back(sedata[j].name.replace("(*)", ""));
|
||||||
full_script_paths.push_back(sedata[j].tooltip);
|
full_script_paths.push_back(sedata[j].tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorNode::disambiguate_filenames(full_script_paths, disambiguated_script_names);
|
EditorNode::disambiguate_filenames(full_script_paths, disambiguated_script_names);
|
||||||
|
|
||||||
for (int j = 0; j < sedata.size(); j++) {
|
for (int j = 0; j < sedata.size(); j++) {
|
||||||
|
if (sedata[j].name.ends_with("(*)")) {
|
||||||
|
sedata.write[j].name = disambiguated_script_names[j] + "(*)";
|
||||||
|
} else {
|
||||||
sedata.write[j].name = disambiguated_script_names[j];
|
sedata.write[j].name = disambiguated_script_names[j];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EditorHelp *eh = Object::cast_to<EditorHelp>(tab_container->get_child(i));
|
EditorHelp *eh = Object::cast_to<EditorHelp>(tab_container->get_child(i));
|
||||||
if (eh) {
|
if (eh) {
|
||||||
|
|
|
@ -895,17 +895,17 @@ void TileMapEditor::_draw_cell(Control *p_viewport, int p_cell, const Point2i &p
|
||||||
rect.position += tile_ofs;
|
rect.position += tile_ofs;
|
||||||
}
|
}
|
||||||
|
|
||||||
rect.position = p_xform.xform(rect.position);
|
|
||||||
rect.size *= sc;
|
|
||||||
|
|
||||||
Color modulate = node->get_tileset()->tile_get_modulate(p_cell);
|
Color modulate = node->get_tileset()->tile_get_modulate(p_cell);
|
||||||
modulate.a = 0.5;
|
modulate.a = 0.5;
|
||||||
|
|
||||||
|
Transform2D old_transform = p_viewport->get_viewport_transform();
|
||||||
|
p_viewport->draw_set_transform_matrix(p_xform); // Take into account TileMap transformation when displaying cell
|
||||||
if (r.has_no_area()) {
|
if (r.has_no_area()) {
|
||||||
p_viewport->draw_texture_rect(t, rect, false, modulate, p_transpose);
|
p_viewport->draw_texture_rect(t, rect, false, modulate, p_transpose);
|
||||||
} else {
|
} else {
|
||||||
p_viewport->draw_texture_rect_region(t, rect, r, modulate, p_transpose);
|
p_viewport->draw_texture_rect_region(t, rect, r, modulate, p_transpose);
|
||||||
}
|
}
|
||||||
|
p_viewport->draw_set_transform_matrix(old_transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) {
|
void TileMapEditor::_draw_fill_preview(Control *p_viewport, int p_cell, const Point2i &p_point, bool p_flip_h, bool p_flip_v, bool p_transpose, const Point2i &p_autotile_coord, const Transform2D &p_xform) {
|
||||||
|
|
2
misc/dist/linux/x-godot-project.xml
vendored
2
misc/dist/linux/x-godot-project.xml
vendored
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
|
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
|
||||||
<mime-type type="application/x-godot-project">
|
<mime-type type="application/x-godot-project">
|
||||||
<comment>Godot Engine project</comment>
|
<comment>Godot Engine project</comment>
|
||||||
<icon name="godot" />
|
<icon name="godot" />
|
||||||
|
|
|
@ -1,177 +0,0 @@
|
||||||
# Copyright 2015 MongoDB Inc.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
import json
|
|
||||||
import SCons
|
|
||||||
import itertools
|
|
||||||
|
|
||||||
# Implements the ability for SCons to emit a compilation database for the MongoDB project. See
|
|
||||||
# http://clang.llvm.org/docs/JSONCompilationDatabase.html for details on what a compilation
|
|
||||||
# database is, and why you might want one. The only user visible entry point here is
|
|
||||||
# 'env.CompilationDatabase'. This method takes an optional 'target' to name the file that
|
|
||||||
# should hold the compilation database, otherwise, the file defaults to compile_commands.json,
|
|
||||||
# which is the name that most clang tools search for by default.
|
|
||||||
|
|
||||||
# TODO: Is there a better way to do this than this global? Right now this exists so that the
|
|
||||||
# emitter we add can record all of the things it emits, so that the scanner for the top level
|
|
||||||
# compilation database can access the complete list, and also so that the writer has easy
|
|
||||||
# access to write all of the files. But it seems clunky. How can the emitter and the scanner
|
|
||||||
# communicate more gracefully?
|
|
||||||
__COMPILATION_DB_ENTRIES = []
|
|
||||||
|
|
||||||
# We make no effort to avoid rebuilding the entries. Someday, perhaps we could and even
|
|
||||||
# integrate with the cache, but there doesn't seem to be much call for it.
|
|
||||||
class __CompilationDbNode(SCons.Node.Python.Value):
|
|
||||||
def __init__(self, value):
|
|
||||||
SCons.Node.Python.Value.__init__(self, value)
|
|
||||||
self.Decider(changed_since_last_build_node)
|
|
||||||
|
|
||||||
|
|
||||||
def changed_since_last_build_node(child, target, prev_ni, node):
|
|
||||||
""" Dummy decider to force always building"""
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def makeEmitCompilationDbEntry(comstr):
|
|
||||||
"""
|
|
||||||
Effectively this creates a lambda function to capture:
|
|
||||||
* command line
|
|
||||||
* source
|
|
||||||
* target
|
|
||||||
:param comstr: unevaluated command line
|
|
||||||
:return: an emitter which has captured the above
|
|
||||||
"""
|
|
||||||
user_action = SCons.Action.Action(comstr)
|
|
||||||
|
|
||||||
def EmitCompilationDbEntry(target, source, env):
|
|
||||||
"""
|
|
||||||
This emitter will be added to each c/c++ object build to capture the info needed
|
|
||||||
for clang tools
|
|
||||||
:param target: target node(s)
|
|
||||||
:param source: source node(s)
|
|
||||||
:param env: Environment for use building this node
|
|
||||||
:return: target(s), source(s)
|
|
||||||
"""
|
|
||||||
|
|
||||||
dbtarget = __CompilationDbNode(source)
|
|
||||||
|
|
||||||
entry = env.__COMPILATIONDB_Entry(
|
|
||||||
target=dbtarget,
|
|
||||||
source=[],
|
|
||||||
__COMPILATIONDB_UTARGET=target,
|
|
||||||
__COMPILATIONDB_USOURCE=source,
|
|
||||||
__COMPILATIONDB_UACTION=user_action,
|
|
||||||
__COMPILATIONDB_ENV=env,
|
|
||||||
)
|
|
||||||
|
|
||||||
# TODO: Technically, these next two lines should not be required: it should be fine to
|
|
||||||
# cache the entries. However, they don't seem to update properly. Since they are quick
|
|
||||||
# to re-generate disable caching and sidestep this problem.
|
|
||||||
env.AlwaysBuild(entry)
|
|
||||||
env.NoCache(entry)
|
|
||||||
|
|
||||||
__COMPILATION_DB_ENTRIES.append(dbtarget)
|
|
||||||
|
|
||||||
return target, source
|
|
||||||
|
|
||||||
return EmitCompilationDbEntry
|
|
||||||
|
|
||||||
|
|
||||||
def CompilationDbEntryAction(target, source, env, **kw):
|
|
||||||
"""
|
|
||||||
Create a dictionary with evaluated command line, target, source
|
|
||||||
and store that info as an attribute on the target
|
|
||||||
(Which has been stored in __COMPILATION_DB_ENTRIES array
|
|
||||||
:param target: target node(s)
|
|
||||||
:param source: source node(s)
|
|
||||||
:param env: Environment for use building this node
|
|
||||||
:param kw:
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
|
|
||||||
command = env["__COMPILATIONDB_UACTION"].strfunction(
|
|
||||||
target=env["__COMPILATIONDB_UTARGET"], source=env["__COMPILATIONDB_USOURCE"], env=env["__COMPILATIONDB_ENV"],
|
|
||||||
)
|
|
||||||
|
|
||||||
entry = {
|
|
||||||
"directory": env.Dir("#").abspath,
|
|
||||||
"command": command,
|
|
||||||
"file": str(env["__COMPILATIONDB_USOURCE"][0]),
|
|
||||||
}
|
|
||||||
|
|
||||||
target[0].write(entry)
|
|
||||||
|
|
||||||
|
|
||||||
def WriteCompilationDb(target, source, env):
|
|
||||||
entries = []
|
|
||||||
|
|
||||||
for s in __COMPILATION_DB_ENTRIES:
|
|
||||||
entries.append(s.read())
|
|
||||||
|
|
||||||
with open(str(target[0]), "w") as target_file:
|
|
||||||
json.dump(entries, target_file, sort_keys=True, indent=4, separators=(",", ": "))
|
|
||||||
|
|
||||||
|
|
||||||
def ScanCompilationDb(node, env, path):
|
|
||||||
return __COMPILATION_DB_ENTRIES
|
|
||||||
|
|
||||||
|
|
||||||
def generate(env, **kwargs):
|
|
||||||
|
|
||||||
static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
|
|
||||||
|
|
||||||
env["COMPILATIONDB_COMSTR"] = kwargs.get("COMPILATIONDB_COMSTR", "Building compilation database $TARGET")
|
|
||||||
|
|
||||||
components_by_suffix = itertools.chain(
|
|
||||||
itertools.product(
|
|
||||||
env["CPPSUFFIXES"],
|
|
||||||
[
|
|
||||||
(static_obj, SCons.Defaults.StaticObjectEmitter, "$CXXCOM"),
|
|
||||||
(shared_obj, SCons.Defaults.SharedObjectEmitter, "$SHCXXCOM"),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
for entry in components_by_suffix:
|
|
||||||
suffix = entry[0]
|
|
||||||
builder, base_emitter, command = entry[1]
|
|
||||||
|
|
||||||
# Ensure we have a valid entry
|
|
||||||
# used to auto ignore header files
|
|
||||||
if suffix in builder.emitter:
|
|
||||||
emitter = builder.emitter[suffix]
|
|
||||||
builder.emitter[suffix] = SCons.Builder.ListEmitter([emitter, makeEmitCompilationDbEntry(command),])
|
|
||||||
|
|
||||||
env["BUILDERS"]["__COMPILATIONDB_Entry"] = SCons.Builder.Builder(
|
|
||||||
action=SCons.Action.Action(CompilationDbEntryAction, None),
|
|
||||||
)
|
|
||||||
|
|
||||||
env["BUILDERS"]["__COMPILATIONDB_Database"] = SCons.Builder.Builder(
|
|
||||||
action=SCons.Action.Action(WriteCompilationDb, "$COMPILATIONDB_COMSTR"),
|
|
||||||
target_scanner=SCons.Scanner.Scanner(function=ScanCompilationDb, node_class=None),
|
|
||||||
)
|
|
||||||
|
|
||||||
def CompilationDatabase(env, target):
|
|
||||||
result = env.__COMPILATIONDB_Database(target=target, source=[])
|
|
||||||
|
|
||||||
env.AlwaysBuild(result)
|
|
||||||
env.NoCache(result)
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
env.AddMethod(CompilationDatabase, "CompilationDatabase")
|
|
||||||
|
|
||||||
|
|
||||||
def exists(env):
|
|
||||||
return True
|
|
|
@ -53,6 +53,8 @@ import android.content.SharedPreferences.Editor;
|
||||||
import android.content.pm.ConfigurationInfo;
|
import android.content.pm.ConfigurationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
|
import android.graphics.Point;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.hardware.Sensor;
|
import android.hardware.Sensor;
|
||||||
import android.hardware.SensorEvent;
|
import android.hardware.SensorEvent;
|
||||||
import android.hardware.SensorEventListener;
|
import android.hardware.SensorEventListener;
|
||||||
|
@ -73,6 +75,7 @@ import android.view.Surface;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewGroup.LayoutParams;
|
import android.view.ViewGroup.LayoutParams;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
@ -245,8 +248,6 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe
|
||||||
public GodotView mView;
|
public GodotView mView;
|
||||||
private boolean godot_initialized = false;
|
private boolean godot_initialized = false;
|
||||||
|
|
||||||
private GodotEditText mEditText;
|
|
||||||
|
|
||||||
private SensorManager mSensorManager;
|
private SensorManager mSensorManager;
|
||||||
private Sensor mAccelerometer;
|
private Sensor mAccelerometer;
|
||||||
private Sensor mGravity;
|
private Sensor mGravity;
|
||||||
|
@ -315,11 +316,29 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe
|
||||||
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||||
setContentView(layout);
|
setContentView(layout);
|
||||||
|
|
||||||
|
// GodotEditText layout
|
||||||
|
GodotEditText edittext = new GodotEditText(this);
|
||||||
|
edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
|
||||||
|
// ...add to FrameLayout
|
||||||
|
layout.addView(edittext);
|
||||||
|
|
||||||
mView = new GodotView(this, xrMode, use_gl3, use_32_bits, use_debug_opengl);
|
mView = new GodotView(this, xrMode, use_gl3, use_32_bits, use_debug_opengl);
|
||||||
layout.addView(mView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
layout.addView(mView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
||||||
|
edittext.setView(mView);
|
||||||
|
io.setEdit(edittext);
|
||||||
|
|
||||||
mEditText = new GodotEditText(this, mView);
|
mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
io.setEdit(mEditText);
|
@Override
|
||||||
|
public void onGlobalLayout() {
|
||||||
|
Point fullSize = new Point();
|
||||||
|
getWindowManager().getDefaultDisplay().getSize(fullSize);
|
||||||
|
Rect gameSize = new Rect();
|
||||||
|
mView.getWindowVisibleDisplayFrame(gameSize);
|
||||||
|
|
||||||
|
final int keyboardHeight = fullSize.y - gameSize.bottom;
|
||||||
|
GodotLib.setVirtualKeyboardHeight(keyboardHeight);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
final String[] current_command_line = command_line;
|
final String[] current_command_line = command_line;
|
||||||
mView.queueEvent(new Runnable() {
|
mView.queueEvent(new Runnable() {
|
||||||
|
@ -552,7 +571,6 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe
|
||||||
super.onCreate(icicle);
|
super.onCreate(icicle);
|
||||||
Window window = getWindow();
|
Window window = getWindow();
|
||||||
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
|
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
|
||||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
|
|
||||||
mClipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
|
mClipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
pluginRegistry = GodotPluginRegistry.initializePluginRegistry(this);
|
pluginRegistry = GodotPluginRegistry.initializePluginRegistry(this);
|
||||||
|
|
||||||
|
@ -691,21 +709,8 @@ public abstract class Godot extends FragmentActivity implements SensorEventListe
|
||||||
initializeGodot();
|
initializeGodot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
mView.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
mEditText.onInitView();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
mEditText.onDestroyView();
|
|
||||||
|
|
||||||
for (int i = 0; i < singleton_count; i++) {
|
for (int i = 0; i < singleton_count; i++) {
|
||||||
singletons[i].onMainDestroy();
|
singletons[i].onMainDestroy();
|
||||||
|
|
|
@ -32,27 +32,16 @@ package org.godotengine.godot.input;
|
||||||
|
|
||||||
import org.godotengine.godot.*;
|
import org.godotengine.godot.*;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Point;
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.text.InputFilter;
|
import android.text.InputFilter;
|
||||||
import android.text.InputType;
|
import android.text.InputType;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.Gravity;
|
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.view.ViewGroup.LayoutParams;
|
|
||||||
import android.view.ViewTreeObserver;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.PopupWindow;
|
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
|
@ -67,8 +56,6 @@ public class GodotEditText extends EditText {
|
||||||
// Fields
|
// Fields
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
private GodotView mView;
|
private GodotView mView;
|
||||||
private View mKeyboardView;
|
|
||||||
private PopupWindow mKeyboardWindow;
|
|
||||||
private GodotTextInputWrapper mInputWrapper;
|
private GodotTextInputWrapper mInputWrapper;
|
||||||
private EditHandler sHandler = new EditHandler(this);
|
private EditHandler sHandler = new EditHandler(this);
|
||||||
private String mOriginText;
|
private String mOriginText;
|
||||||
|
@ -93,52 +80,24 @@ public class GodotEditText extends EditText {
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
// Constructors
|
// Constructors
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
public GodotEditText(final Context context, final GodotView view) {
|
public GodotEditText(final Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
this.initView();
|
||||||
setPadding(0, 0, 0, 0);
|
|
||||||
setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_DONE);
|
|
||||||
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
|
|
||||||
|
|
||||||
mView = view;
|
|
||||||
mInputWrapper = new GodotTextInputWrapper(mView, this);
|
|
||||||
setOnEditorActionListener(mInputWrapper);
|
|
||||||
view.requestFocus();
|
|
||||||
|
|
||||||
// Create a popup window with an invisible layout for the virtual keyboard,
|
|
||||||
// so the view can be resized to get the vk height without resizing the main godot view.
|
|
||||||
final FrameLayout keyboardLayout = new FrameLayout(context);
|
|
||||||
keyboardLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
|
||||||
keyboardLayout.setVisibility(View.INVISIBLE);
|
|
||||||
keyboardLayout.addView(this);
|
|
||||||
mKeyboardView = keyboardLayout;
|
|
||||||
|
|
||||||
mKeyboardWindow = new PopupWindow(keyboardLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
|
|
||||||
mKeyboardWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
|
||||||
mKeyboardWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
|
|
||||||
mKeyboardWindow.setFocusable(true); // for the text edit to work
|
|
||||||
mKeyboardWindow.setTouchable(false); // inputs need to go through
|
|
||||||
|
|
||||||
keyboardLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
|
||||||
@Override
|
|
||||||
public void onGlobalLayout() {
|
|
||||||
Point fullSize = new Point();
|
|
||||||
((Activity)mView.getContext()).getWindowManager().getDefaultDisplay().getSize(fullSize);
|
|
||||||
Rect gameSize = new Rect();
|
|
||||||
mKeyboardWindow.getContentView().getWindowVisibleDisplayFrame(gameSize);
|
|
||||||
|
|
||||||
final int keyboardHeight = fullSize.y - gameSize.bottom;
|
|
||||||
GodotLib.setVirtualKeyboardHeight(keyboardHeight);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onInitView() {
|
public GodotEditText(final Context context, final AttributeSet attrs) {
|
||||||
mKeyboardWindow.showAtLocation(mView, Gravity.NO_GRAVITY, 0, 0);
|
super(context, attrs);
|
||||||
|
this.initView();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDestroyView() {
|
public GodotEditText(final Context context, final AttributeSet attrs, final int defStyle) {
|
||||||
mKeyboardWindow.dismiss();
|
super(context, attrs, defStyle);
|
||||||
|
this.initView();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initView() {
|
||||||
|
this.setPadding(0, 0, 0, 0);
|
||||||
|
this.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isMultiline() {
|
public boolean isMultiline() {
|
||||||
|
@ -170,7 +129,7 @@ public class GodotEditText extends EditText {
|
||||||
|
|
||||||
edit.mInputWrapper.setOriginText(text);
|
edit.mInputWrapper.setOriginText(text);
|
||||||
edit.addTextChangedListener(edit.mInputWrapper);
|
edit.addTextChangedListener(edit.mInputWrapper);
|
||||||
final InputMethodManager imm = (InputMethodManager)mKeyboardView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
imm.showSoftInput(edit, 0);
|
imm.showSoftInput(edit, 0);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
@ -179,7 +138,7 @@ public class GodotEditText extends EditText {
|
||||||
GodotEditText edit = (GodotEditText)msg.obj;
|
GodotEditText edit = (GodotEditText)msg.obj;
|
||||||
|
|
||||||
edit.removeTextChangedListener(mInputWrapper);
|
edit.removeTextChangedListener(mInputWrapper);
|
||||||
final InputMethodManager imm = (InputMethodManager)mKeyboardView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
|
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
|
||||||
edit.mView.requestFocus();
|
edit.mView.requestFocus();
|
||||||
} break;
|
} break;
|
||||||
|
@ -192,6 +151,17 @@ public class GodotEditText extends EditText {
|
||||||
p_edit_text.setFilters(filters);
|
p_edit_text.setFilters(filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ===========================================================
|
||||||
|
// Getter & Setter
|
||||||
|
// ===========================================================
|
||||||
|
public void setView(final GodotView view) {
|
||||||
|
this.mView = view;
|
||||||
|
if (mInputWrapper == null)
|
||||||
|
mInputWrapper = new GodotTextInputWrapper(mView, this);
|
||||||
|
this.setOnEditorActionListener(mInputWrapper);
|
||||||
|
view.requestFocus();
|
||||||
|
}
|
||||||
|
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
// Methods for/from SuperClass/Interfaces
|
// Methods for/from SuperClass/Interfaces
|
||||||
// ===========================================================
|
// ===========================================================
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 951 B |
Binary file not shown.
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 7 KiB |
|
@ -153,8 +153,8 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) {
|
||||||
if (have_device(instance->guidInstance) || num == -1)
|
if (have_device(instance->guidInstance) || num == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
d_joypads[joypad_count] = dinput_gamepad();
|
d_joypads[num] = dinput_gamepad();
|
||||||
dinput_gamepad *joy = &d_joypads[joypad_count];
|
dinput_gamepad *joy = &d_joypads[num];
|
||||||
|
|
||||||
const DWORD devtype = (instance->dwDevType & 0xFF);
|
const DWORD devtype = (instance->dwDevType & 0xFF);
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ bool JoypadWindows::setup_dinput_joypad(const DIDEVICEINSTANCE *instance) {
|
||||||
WORD version = 0;
|
WORD version = 0;
|
||||||
sprintf_s(uid, "%04x%04x%04x%04x%04x%04x%04x%04x", type, 0, vendor, 0, product, 0, version, 0);
|
sprintf_s(uid, "%04x%04x%04x%04x%04x%04x%04x%04x", type, 0, vendor, 0, product, 0, version, 0);
|
||||||
|
|
||||||
id_to_change = joypad_count;
|
id_to_change = num;
|
||||||
slider_count = 0;
|
slider_count = 0;
|
||||||
|
|
||||||
joy->di_joy->SetDataFormat(&c_dfDIJoystick2);
|
joy->di_joy->SetDataFormat(&c_dfDIJoystick2);
|
||||||
|
|
|
@ -188,7 +188,7 @@ int RichTextLabel::_process_line(ItemFrame *p_frame, const Vector2 &p_ofs, int &
|
||||||
if (p_mode != PROCESS_CACHE && align != ALIGN_FILL)
|
if (p_mode != PROCESS_CACHE && align != ALIGN_FILL)
|
||||||
wofs += line_ofs;
|
wofs += line_ofs;
|
||||||
|
|
||||||
int begin = wofs;
|
int begin = margin;
|
||||||
|
|
||||||
Ref<Font> cfont = _find_font(it);
|
Ref<Font> cfont = _find_font(it);
|
||||||
if (cfont.is_null())
|
if (cfont.is_null())
|
||||||
|
|
|
@ -2873,6 +2873,7 @@ void Node::_bind_methods() {
|
||||||
BIND_CONSTANT(NOTIFICATION_PATH_CHANGED);
|
BIND_CONSTANT(NOTIFICATION_PATH_CHANGED);
|
||||||
BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS);
|
BIND_CONSTANT(NOTIFICATION_INTERNAL_PROCESS);
|
||||||
BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS);
|
BIND_CONSTANT(NOTIFICATION_INTERNAL_PHYSICS_PROCESS);
|
||||||
|
BIND_CONSTANT(NOTIFICATION_POST_ENTER_TREE);
|
||||||
|
|
||||||
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
|
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
|
||||||
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_EXIT);
|
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_EXIT);
|
||||||
|
|
Loading…
Reference in a new issue