Compare commits
650 Commits
Author | SHA1 | Date |
---|---|---|
Rémi Verschelde | 22eeafc735 | |
Rémi Verschelde | f73113fae8 | |
Fabio Alessandrelli | 1b7ada718c | |
Rémi Verschelde | 95cdcc40ca | |
Fabio Alessandrelli | 0c612bc0c6 | |
Fabio Alessandrelli | 47be89199f | |
Rémi Verschelde | 47cdad91a2 | |
volzhs | e6402d8730 | |
Rémi Verschelde | 1e83420e75 | |
Rémi Verschelde | e16f264a7e | |
Jairo | f18a8d3ffc | |
Rémi Verschelde | ebc76d6c0f | |
Rémi Verschelde | 8e50c00a13 | |
Rémi Verschelde | ecbaa6e8a0 | |
Rémi Verschelde | cd205bfe69 | |
Rémi Verschelde | 0f1a729aa8 | |
Rémi Verschelde | 83049909fa | |
Rémi Verschelde | e09dd4dce4 | |
Rémi Verschelde | 85904dfc75 | |
Rémi Verschelde | fa2fabce6d | |
Rémi Verschelde | 40a0abea8d | |
Rémi Verschelde | 1e9c726231 | |
Rémi Verschelde | 9b8f66a825 | |
bruvzg | 279ada89ab | |
Rémi Verschelde | 8e7315d2fe | |
Rémi Verschelde | 879fc0b581 | |
Jóhannes Gunnar Þorsteinsson | 6322c783a3 | |
Relintai | 58c58ec212 | |
Fabio Alessandrelli | 72395ca846 | |
D00T24 | 273927273d | |
Rémi Verschelde | 5361dbf4f9 | |
Rémi Verschelde | 227a81c119 | |
Rémi Verschelde | 513bfe496c | |
qarmin | 6de4c53d26 | |
Relintai | 0587df4aa5 | |
Rémi Verschelde | 89f26c9479 | |
Rémi Verschelde | ec02a81f47 | |
Rémi Verschelde | eabf4bbd67 | |
Rémi Verschelde | 6184ccca46 | |
bruvzg | 56f5502402 | |
stoofin | 577b6d1196 | |
Rémi Verschelde | 8a13eac43d | |
Ignacio Etcheverry | 1d952f8d69 | |
Rémi Verschelde | bf204bdc7c | |
Hugo Locurcio | 3b82f52f7d | |
willnationsdev | 4aeb7b41cb | |
Tomasz Chabora | f161f7aa0b | |
Zak | 7c67b1c9a2 | |
JFonS | 3436955c2e | |
Rémi Verschelde | 4b855aa88e | |
Rémi Verschelde | bfd993b0ca | |
Rémi Verschelde | 261b9d12b9 | |
Rémi Verschelde | 7f6e2c5037 | |
Rémi Verschelde | 473e3665ff | |
Marcel Admiraal | 7e56ef1484 | |
Yuri Roubinsky | c1cabb0bf5 | |
Ignacio Etcheverry | 8b4eea3d6d | |
Rémi Verschelde | c3aefbd1d2 | |
fogine | 6a4653f41c | |
Hugo Locurcio | 41d0e46f2d | |
Cameron Reikes | dd83296155 | |
iwek7 | 9bf2e54ca5 | |
Yuri Roubinski | b5d8154d17 | |
santouits | 7ebfb73a4a | |
clayjohn | 0e76f2cc95 | |
Bojidar Marinov | 794bfe8aaa | |
SonerSound | 20822ee87d | |
Shiqing | c9422b9c23 | |
Bojidar Marinov | e17a57d88a | |
zwostein | 0f0016bb75 | |
santouits | 1c8984c433 | |
Tomasz Chabora | 0fc4c3a308 | |
Marcus Brummer | aa08c7c418 | |
Gwyneth Lowe | 7a9eb587fd | |
Rémi Verschelde | e7e7d17f6b | |
Rémi Verschelde | 229892c40b | |
Rémi Verschelde | cfd9121fa6 | |
Paulb23 | 8148732bd1 | |
Hein-Pieter van Braam-Stewart | 7592b3b9ee | |
Leonardo Giovanni Scur | 19f132b368 | |
bruvzg | 9e2f76f17d | |
Rémi Verschelde | e23bde4358 | |
Toshiwo | 656f23fde9 | |
Toshiwo | b56fa43090 | |
qarmin | 1d2aaa447e | |
SamSindt | df2a809aae | |
qarmin | 03a1570a74 | |
qarmin | 1f5f2d3ce8 | |
qarmin | 8423d98e1c | |
Hugo Locurcio | d871ac670d | |
bruvzg | dce7311aa5 | |
qarmin | cb394082ef | |
Michael Alexsander Silva Dias | 1804a726b4 | |
Hein-Pieter van Braam-Stewart | ef6d414e6e | |
Michael Alexsander Silva Dias | 02ccd4d78c | |
Bojidar Marinov | 22abeff592 | |
Rémi Verschelde | 4d6517fad3 | |
Tomasz Chabora | e66122e0bf | |
Rémi Verschelde | f11588e5a5 | |
Rémi Verschelde | 9591e2950a | |
Rémi Verschelde | 88cccfb796 | |
Nils ANDRÉ-CHANG | 6afcc72465 | |
Geequlim | 6c71289432 | |
WiggleWizard | 4444bd1fcb | |
Tomasz Chabora | 7431d3c3c0 | |
Pedro J. Estébanez | aacefcb7dc | |
Pedro J. Estébanez | 340f542e49 | |
Pedro J. Estébanez | f040f7c283 | |
thomas.herzog | 2514594a45 | |
Michael Alexsander Silva Dias | b01ef197a6 | |
Rémi Verschelde | 8dce0ce022 | |
Martin Dahlgren | bfcb9dfa01 | |
Swarnim Arun | 949e1da462 | |
Hugo Locurcio | 665c00eb58 | |
Guilherme Felipe | 14587802f9 | |
Lukas Zanner | 7022e02d4d | |
Ibrahn Sahir | 6d57ebed1a | |
RameshRavone | ffab947e1c | |
Jason | 2da174c9b4 | |
Paulb23 | 909a1cced8 | |
Fabio Alessandrelli | 390dbbbcbd | |
Frank Secilia | 8ee5dc5850 | |
Gilles Roudière | dcc9c1cc2a | |
Fabio Alessandrelli | 53eb140cf1 | |
Bojidar Marinov | d79be7ec33 | |
JFonS | 49613428f1 | |
Bojidar Marinov | dc90131d8c | |
Fabio Alessandrelli | 5c9694bc0d | |
Guilherme Felipe | 4a933a6409 | |
Bojidar Marinov | 2b9c754d1d | |
Rémi Verschelde | 3afd8a374d | |
homer666 | 027e2e90fd | |
homer666 | 918e120da3 | |
Michele Valente | 4f09d433d8 | |
Ignacio Etcheverry | c78c38d817 | |
James Buck | 7577dd804a | |
Guilherme Felipe | 8ef5052967 | |
mashumafi | 717c492eb6 | |
lupoDharkael | ad1e8069d3 | |
Jared | 66c1b8adc4 | |
Aaron Winter | 794341e0b5 | |
Christoph Schroeder | 0f1704c9e8 | |
will | 7d84035e13 | |
Vixelz | 39e76014d4 | |
Rémi Verschelde | a5f4f15510 | |
Rémi Verschelde | 24465c5e25 | |
Rémi Verschelde | 908c8862ab | |
Rémi Verschelde | 6b972f178a | |
Rémi Verschelde | 1b7a2e7284 | |
Rémi Verschelde | 699b087296 | |
Rémi Verschelde | 716f7c3d32 | |
PouleyKetchoupp | 9360b23544 | |
Jonathan Mannancheril | 8851026e8a | |
volzhs | b94f728699 | |
Rémi Verschelde | 76db2b4dcb | |
Jonathan Mannancheril | bc31b11fdd | |
unknown | c563839355 | |
Rémi Verschelde | b9b2e80add | |
Rémi Verschelde | 2e98ecd95f | |
Rémi Verschelde | 8067207257 | |
Jonathan Mannancheril | b021671681 | |
Rémi Verschelde | 82773cc7aa | |
Rémi Verschelde | 0d2cb78f3e | |
Rémi Verschelde | cfa50d67d2 | |
Fabio Alessandrelli | eb29bd988c | |
PouleyKetchoupp | 8901ff5e58 | |
Rémi Verschelde | 0b399e0373 | |
Rémi Verschelde | 5672e5db24 | |
Tomasz Chabora | 55ec64a77a | |
clayjohn | cf9560fdab | |
Kaligule | 050c4dab00 | |
George Marques | 82b15ab469 | |
Guilherme Felipe | 71a0722035 | |
Michael Alexsander Silva Dias | e384d77194 | |
nobuyuki_nyuu | 00883e8fdc | |
Rémi Verschelde | 4133ee5e85 | |
Rémi Verschelde | f1fc6feca4 | |
clayjohn | 4492f6d193 | |
clayjohn | bd9cff1b20 | |
Hugo Locurcio | ac09460cd1 | |
Cameron Reikes | 15be90bbf3 | |
Ignacio Etcheverry | b6bcd09d7c | |
Emmanuel Barroga | 53b44aacad | |
shaderbeast | a07d53b262 | |
TGRCDev | ebece65936 | |
PouleyKetchoupp | bbec80ca8a | |
Rémi Verschelde | b45ec12c8c | |
Cameron Reikes | a5547ac3c7 | |
Cameron Reikes | 781006e25a | |
Cameron Reikes | 204f21909b | |
PouleyKetchoupp | e83754b6ed | |
RaphaelHunter | 22c31016c8 | |
PouleyKetchoupp | 1649848a81 | |
Carl Drougge | cd538d23cc | |
PouleyKetchoupp | cdd63b8d12 | |
Bojidar Marinov | 8112025573 | |
RaphaelHunter | 5e8edf9c5d | |
George Marques | c9a5ca7ca5 | |
Marcel Admiraal | 37f7dcf3bc | |
Bojidar Marinov | fe90b69e0f | |
Michael Alexsander Silva Dias | b7e644bd26 | |
Xenoamor | 90abe89662 | |
Max Hunt | 9e96e1f1c0 | |
Bastiaan Olij | ea3a42c500 | |
Ignacio Etcheverry | ef92c9740f | |
ternvein | 82f65f5b92 | |
Michael Alexsander Silva Dias | 5d1697b78f | |
ternvein | 605dbffe93 | |
Michael Alexsander Silva Dias | f915d69e05 | |
Rémi Verschelde | b70788b4ad | |
Fabio Alessandrelli | 53c2e2da50 | |
Tomasz Chabora | 37794ea4c3 | |
Rémi Verschelde | dbcf3318e1 | |
Hugo Locurcio | 1ef9a47ede | |
fhuya | 0d401e11b1 | |
Fabio Alessandrelli | cd0ba31533 | |
Rémi Verschelde | 6d0421d2ae | |
Yuri Roubinski | e224c72dd8 | |
fjordyo | 5cdcf06ec1 | |
qarmin | 7823552d9e | |
clayjohn | e821477102 | |
clayjohn | 99adaef47c | |
Robin Hübner | 80752cca50 | |
Max | ee4d1e49ca | |
clayjohn | b7c3fd0711 | |
Hugo Locurcio | 1f772917d2 | |
volzhs | e168f04bc3 | |
Ignacio Etcheverry | aa8386c593 | |
Rémi Verschelde | 02c4c7a693 | |
Harley Laue | 6befb0836e | |
Rémi Verschelde | 5f314c54ff | |
sheepandshepherd | e46f2be4d7 | |
Rémi Verschelde | 5967c6347d | |
Kanabenki | 7ef78e87c1 | |
Hugo Locurcio | 0c0c911ae8 | |
Rémi Verschelde | 5cdd17194e | |
ktksgit | eedf4b27a1 | |
Joshlee0915 | d51bce47de | |
Rémi Verschelde | 34d4c2ed81 | |
bruvzg | 8033270852 | |
Yeongho Kim | d2fbe4db07 | |
Rémi Verschelde | 4b6e405f1d | |
Hugo Locurcio | 22147bb9dc | |
Rémi Verschelde | 5fddee909c | |
Rémi Verschelde | 8f3fea2058 | |
clayjohn | 5acb21dd7b | |
clayjohn | 61ef8e98ba | |
clayjohn | 3689ac6c6b | |
Colin Redman | abf19bdab2 | |
Anish | c70a3671b0 | |
Michael Alexsander Silva Dias | cd1bb5d3db | |
Bojidar Marinov | 33b2d65f98 | |
Hugo Locurcio | 759b488b22 | |
Maxime Leroy | 123dc78f2b | |
MJacred | f1fdaf32f3 | |
XiaoLongHan | d585b1a5b1 | |
AnthonyYoManz | 41f6a800bd | |
Andrii Doroshenko (Xrayez) | 9114357bc5 | |
Andrii Doroshenko (Xrayez) | f8dce7ade9 | |
Andrii Doroshenko (Xrayez) | 5dd3d3dadf | |
Shinryuuji | c6ee986f53 | |
xDGameStudios | 6b07e4b535 | |
Anish Bhobe | fdb94e3409 | |
Rémi Verschelde | 9bd5501a22 | |
Rémi Verschelde | 1018079219 | |
Rémi Verschelde | 471daf4773 | |
Rémi Verschelde | 300838dad2 | |
Fabio Alessandrelli | 138aeeabb9 | |
Vasiliy Makarov | d3422f8cf7 | |
Michael Alexsander Silva Dias | e40293942d | |
Michael Alexsander Silva Dias | 7ff607290a | |
Ken Paulson | f0039bd18b | |
Chaosus | 9953b2ab43 | |
Rémi Verschelde | 6cd6d3aa16 | |
qarmin | 49bbec08e2 | |
Carsten Klein | 693f3c9d62 | |
Andrii Doroshenko (Xrayez) | f6c0078264 | |
Michael Alexsander Silva Dias | 660acc3913 | |
Michael Alexsander Silva Dias | 8e7f5c8628 | |
Kenneth Lee | aa36c0c56c | |
KLee1248 | 2e5fa9f043 | |
Vasiliy Makarov | 3cb47c9b66 | |
Matheus Lima Cunha | 1e5709265c | |
Hugo Locurcio | 614dbe74e2 | |
Anders Stenberg | e18f18dbec | |
Jean Dao | b6ab75504b | |
ShyRed | a849625813 | |
hbina085 | 8c2e10c393 | |
Rémi Verschelde | fc18d637a8 | |
qarmin | 3b703d6707 | |
Theis Egeberg | a2cf479f07 | |
Theis Egeberg | 330c7a2fb4 | |
Guilherme Felipe | 21d3ad2e52 | |
Tomasz Chabora | 25074c734d | |
Paul Trojahn | f5def1329e | |
Paul Trojahn | af3b157517 | |
Ibrahn Sahir | 78a7f945e4 | |
Michael Alexsander Silva Dias | 28d48a0886 | |
Bojidar Marinov | ef6807b34c | |
Guilherme Felipe | 6319d662af | |
Guilherme Felipe | be47e0546d | |
UziMonkey | cb0e500d27 | |
Mateus Felipe C. C. Pinto | 8946ac9616 | |
mellondill | 3078f723a8 | |
Emmanuel Barroga | 45e4f467e7 | |
Rémi Verschelde | b7e2266dc5 | |
Fabio Alessandrelli | 2a837d525f | |
Rémi Verschelde | 8acaac10b6 | |
Rémi Verschelde | 0db32ced78 | |
volzhs | 3178dee53c | |
Enzo Ferrari | a5a413c7e9 | |
Rémi Verschelde | 2c63c27ef1 | |
volzhs | 081751172a | |
Rémi Verschelde | bac75bf0c2 | |
Aaron Franke | 3a7aa3a0e4 | |
Aaron Franke | 329817edad | |
Rémi Verschelde | 76776d181f | |
Rémi Verschelde | d84e9f2948 | |
Rémi Verschelde | a5082c010a | |
Chris Bradfield | 2a9c2d95f5 | |
Michael Alexsander Silva Dias | eef5dc98fa | |
FlamyAT | 5a8fad0f4e | |
Hugo Locurcio | 61eb6b5180 | |
unknown | dbbbf7a7f4 | |
FlamyAT | 4e07bab968 | |
Meriipu | 81ac9c9afb | |
Nathan Warden | 0d4f6463f9 | |
Hugo Locurcio | 1f8470eaf2 | |
hbina085 | f45b8c36fd | |
lmp | f011721a6e | |
Remi Rampin | 417f223e63 | |
Tomasz Chabora | 6891c942a1 | |
Marco Costa | e9f4886253 | |
Hugo Locurcio | d81ca21a6c | |
Rémi Verschelde | 0cccb6b4fa | |
unknown | 7dd98f3de7 | |
tree786 | 37e9ec842c | |
Zak | 3e8b2d2063 | |
Zak | baebe22ab0 | |
Tomasz Chabora | e7899b9e35 | |
Rémi Verschelde | 383c678a1e | |
Rémi Verschelde | 7a97fd99c7 | |
Rémi Verschelde | 755896b036 | |
tree786 | 128eaa2718 | |
Rémi Verschelde | 055f9f075f | |
Rémi Verschelde | ef5b885492 | |
Rémi Verschelde | 558e268edd | |
Marc Gilleron | 021347e178 | |
Rémi Verschelde | b8d29b5c66 | |
Chaosus | 67efb30f2a | |
austinried | 2f30fb9fec | |
Randall Fulton | f8ee310b69 | |
Zak | 6f637b2bf3 | |
Randall Fulton | 1137ccb050 | |
Hugo Locurcio | a08141120e | |
Zak | 02a8c1d9fe | |
unknown | 29fbb408ec | |
Rémi Verschelde | 0893bb9a02 | |
Zak | b279f225c0 | |
Nathan Lovato | 040e1dd411 | |
Zak | 7cd696f1b5 | |
Ertain | 0e21648419 | |
tree786 | ffab827683 | |
Nathan Lovato | a9d7f2ed9b | |
Maxime Leroy | a6316d8a56 | |
Maxime Leroy | 8947e9f438 | |
Ken Paulson | d05f673669 | |
Aspin | 26e25a8c1b | |
Chaosus | cd662249f5 | |
Hugo Locurcio | c8944e380a | |
StraToN | 6175fe2511 | |
Nathan Lovato | 8d69f1651c | |
Andrii Doroshenko (Xrayez) | d83e80e039 | |
Chris Bradfield | 8f8bae9ba5 | |
clayjohn | 2e58e3dbe8 | |
Zak | efee888a6e | |
Maxime Leroy | 5dd0ed81a1 | |
Rémi Verschelde | 24f17f2208 | |
Nathan Lovato | d54733eba3 | |
Cheeseness | 2bfd81d49d | |
follower | 1e5c7d0a23 | |
Hugo Locurcio | 78a24be155 | |
Tomasz Chabora | 320b361e16 | |
Michael Alexsander Silva Dias | e2e5e4c44e | |
Sean Heffernan | d846a0aaa3 | |
Chris Bradfield | ce786bd100 | |
Rémi Verschelde | eae0ef9a80 | |
Ryan Roden-Corrent | 99f15173c1 | |
volzhs | 086895604a | |
Michael Alexsander Silva Dias | 044f0abbd9 | |
Hugo Locurcio | 8b8a9049b7 | |
Guilherme Felipe | 2dd7121841 | |
Ken Paulson | 00c00ab083 | |
clayjohn | a7c76e8bb1 | |
Rémi Verschelde | ba8cf0431d | |
Stanislav | 6521d64c46 | |
Hugo Locurcio | 728d1eee4f | |
Tomasz Chabora | dea5dafea5 | |
follower | fa2f739ee0 | |
kbake | e14226ebd4 | |
qarmin | e766b16e95 | |
clayjohn | 480d87e7c8 | |
clayjohn | 39f3a575d6 | |
Marcus Brummer | 055004c589 | |
Marcus Brummer | c441a2921d | |
Daniel Rakos | a670c66457 | |
clayjohn | c3fd38027e | |
Guilherme Souza | f8f66e5b7a | |
clayjohn | ebaa06b2be | |
Daniel Rakos | 618290ba46 | |
lawnjelly | 3433017354 | |
Guilherme Souza | bb9a8a8132 | |
Rémi Verschelde | df6a6a2004 | |
Fabio Alessandrelli | a24e681e1c | |
Ibrahn Sahir | 465056b6eb | |
James Buck | 2854864130 | |
Hein-Pieter van Braam-Stewart | d4704234b3 | |
KLee1248 | e3b1f3c1ad | |
Bojidar Marinov | 2bbf5a31ec | |
Juan Linietsky | c7293e9b30 | |
Juan Linietsky | 89402e38c7 | |
bruvzg | c6e49cc0d9 | |
hbina085 | 8cee39fe21 | |
lopho | d963a32213 | |
Thomas Karcher | 31ba78e4bd | |
lopho | 4c6327e426 | |
Jiří Procházka | 3086084ace | |
Rémi Verschelde | c31dba28e1 | |
Rémi Verschelde | 06123fac30 | |
hilfazer | c7551515e3 | |
Rémi Verschelde | e50eb830af | |
Rémi Verschelde | 031fc3ed83 | |
Aaron Franke | a51257e2b7 | |
Rémi Verschelde | 7358e115c7 | |
Rémi Verschelde | 5f683f7c17 | |
Fabio Alessandrelli | 0e6a49a5bc | |
Fabio Alessandrelli | 20a37529f5 | |
Rémi Verschelde | 98cf8a4476 | |
Rémi Verschelde | c0e5875907 | |
Rémi Verschelde | bc5fc03c95 | |
Rémi Verschelde | 8cfd371822 | |
Rémi Verschelde | f156b2e1cd | |
Rémi Verschelde | bf7585530b | |
Rémi Verschelde | 239a11fe19 | |
Rémi Verschelde | 7b38442173 | |
Ryan Stein | a31bbb4bd9 | |
Fabio Alessandrelli | bc577dc0c7 | |
Bastiaan Olij | b2b112d703 | |
Hein-Pieter van Braam-Stewart | e802da4e81 | |
Hein-Pieter van Braam-Stewart | 66baa3b633 | |
Hein-Pieter van Braam-Stewart | e4816a8b1c | |
homer666 | 5b6ad923f0 | |
Ignacio Etcheverry | 1c77481d3e | |
Rémi Verschelde | a24899ee25 | |
Rémi Verschelde | f7d5bee636 | |
Rémi Verschelde | 23cf9f3b6f | |
Rémi Verschelde | 348270df38 | |
Rémi Verschelde | a485d862f1 | |
Juan Linietsky | fcbe50befa | |
Juan Linietsky | 08113feb5f | |
Rémi Verschelde | 4764e17970 | |
Ignacio Etcheverry | 39f1a110a1 | |
Rémi Verschelde | cab4921477 | |
Hein-Pieter van Braam-Stewart | 4aa7760c74 | |
Hein-Pieter van Braam-Stewart | 4fefc0896d | |
Juan Linietsky | d8cae6e7f6 | |
Juan Linietsky | a7f0bfb7db | |
Juan Linietsky | 5cc03473e0 | |
Juan Linietsky | 6fac922bff | |
Juan Linietsky | 0064d26517 | |
Juan Linietsky | c76c33fb50 | |
Juan Linietsky | 5e02d6d98a | |
Chaosus | 71753edeae | |
Martin Wallin | ff3987598e | |
Bastiaan Olij | 49df4b7a7a | |
Chaosus | 6ab01490f5 | |
Chaosus | 340bf6e80c | |
Chaosus | 9535a6079e | |
ShyRed | bb8f015595 | |
Michael Alexsander Silva Dias | 94f6c3a810 | |
muiroc | 42fa261563 | |
Fabio Alessandrelli | e0fe795433 | |
Fabio Alessandrelli | a1ad05df86 | |
Fabio Alessandrelli | ffc47d6fbe | |
Ignacio Etcheverry | 9b65bd18bc | |
Ignacio Etcheverry | 4c10a322d1 | |
Mariam Naiga | 7851d828a2 | |
Ignacio Etcheverry | 17cb8878c7 | |
ForLoveOfCats | 24ac1439e8 | |
Rémi Verschelde | 1353c98279 | |
Nuno Cardoso | fce901ce40 | |
Tomasz Chabora | a758b329d0 | |
Ignacio Etcheverry | c7e5b371be | |
Bastiaan Olij | edba82b940 | |
volzhs | 9e2cf9ef0b | |
lupoDharkael | 904bfa6a72 | |
Chaosus | aa78461ebd | |
Tomasz Chabora | ab8ccee1da | |
George Marques | 42514bfd80 | |
Bojidar Marinov | 667dc0b336 | |
Guilherme Felipe | 40c2a5ff57 | |
Chaosus | d0bebee560 | |
bruvzg | d9aa43e793 | |
piyushdagar | a329f6fa0b | |
Chaosus | 4f3fc559bc | |
Chaosus | 759c1fb0b8 | |
LATRio | ae6d45b0f2 | |
LATRio | 2213a21ab3 | |
Martin Wallin | b887d3f8e8 | |
marxin | c33a924c28 | |
groud | 4be1343f3c | |
Rémi Verschelde | 34c2679506 | |
Hein-Pieter van Braam-Stewart | 650c8512cd | |
Ignacio Etcheverry | 852997e446 | |
Rémi Verschelde | 01b39be9e6 | |
Rémi Verschelde | 4298db56cf | |
volzhs | 3c635b4bdf | |
James Buck | 7b8e7d6514 | |
CatThingy | 4da40c39f1 | |
Michael Alexsander Silva Dias | 7ddd4f7232 | |
clayjohn | 965b13d62a | |
volzhs | 20ffda695a | |
PouleyKetchoupp | 367b371fdd | |
PouleyKetchoupp | d0c5dc77f3 | |
Andrea Catania | 3d74b1e2ef | |
Rémi Verschelde | 320105ff05 | |
Bastiaan Olij | 2020f43261 | |
Rémi Verschelde | 95766f5a6a | |
Fabio Alessandrelli | 7434760380 | |
PouleyKetchoupp | a028160522 | |
JFonS | 792beb4b83 | |
Daniel Kulas | c6fa282fbb | |
Hendrikto | 456eb53439 | |
Rémi Verschelde | 782a6dcdde | |
Hugo Locurcio | a1388dff7e | |
Ignacio Etcheverry | 3445984901 | |
Hugo Locurcio | bd2e707e2f | |
Michael Alexsander Silva Dias | 72b4844d42 | |
Robear Selwans | 96222dedb5 | |
Guilherme Felipe | aedea36d0c | |
Anish Bhobe | 16097dd174 | |
Hugo Locurcio | afe6d654d5 | |
Vivatchai Kaveeta | 59b2f02ac7 | |
qarmin | 8f537cfa19 | |
Daniel Rakos | b439515d73 | |
Timo Schwarzer | e31d6367ea | |
Will Nations | 0e7de28b8d | |
qarmin | 0f51f138b5 | |
toasteater | 511fb03e20 | |
Andrii Doroshenko (Xrayez) | 4574894e43 | |
James Buck | f673bc1e3d | |
Tomasz Chabora | 7a94bac34e | |
Rémi Verschelde | 781b8a6c0f | |
Rémi Verschelde | a29700e034 | |
Rémi Verschelde | def0820385 | |
Rémi Verschelde | 53d73f59eb | |
Soham Kar | aa0d4ffe51 | |
Rémi Verschelde | af12b2d18b | |
Siddharth | d99a0a5fba | |
Michael Alexsander Silva Dias | f12848f9e1 | |
Tomasz Chabora | 28f547a021 | |
Ryan Roden-Corrent | fd4a65df7b | |
toasteater | 8d87f624eb | |
Rémi Verschelde | a033640276 | |
Hasan Yusuf Ahmed | 0eeb1a7d0d | |
Rémi Verschelde | b5d9099626 | |
Rémi Verschelde | 6137387ede | |
Rémi Verschelde | 4243f8b32a | |
Rémi Verschelde | 2fbc4219db | |
Bastiaan Olij | 6226be9595 | |
Ignacio Etcheverry | b836420fd8 | |
ForLoveOfCats | 37e62939e0 | |
ForLoveOfCats | 276cd771f9 | |
Marc Gilleron | c94e80a0a3 | |
Andrii Doroshenko (Xrayez) | 948562261d | |
Hugo Locurcio | 67dc8cf252 | |
Hugo Locurcio | 93875a79bb | |
ShyRed | d538fb8d6c | |
qarmin | 4ba90b9dda | |
qarmin | b5bd8e5f1b | |
shartte | a4610ca61e | |
PouleyKetchoupp | e8e57c49de | |
Rémi Verschelde | 40ec89d24d | |
Rémi Verschelde | fd3845cdad | |
Rémi Verschelde | 2ad86122ac | |
Fabio Alessandrelli | 24b049ec9e | |
Rémi Verschelde | c4ff65207d | |
Rémi Verschelde | b502152195 | |
marxin | 4889c65922 | |
Paulb23 | 4eefd2d581 | |
clayjohn | 2b3f2ee372 | |
Leonard | 929e3595c8 | |
Daniel Rakos | dc928e6174 | |
Allan Davis | 38e5f94e19 | |
ShyRed | dc259b95d8 | |
Kanabenki | d59b97cca7 | |
Marcelo Fernandez | 37c97d09e6 | |
Chaosus | 1dd72dca45 | |
qarmin | 29a6e7d306 | |
marxin | e3ae29e666 | |
Daniel Spaniol | 044ec35f62 | |
Will Nations | 8b1b8181b3 | |
Juan Linietsky | 5ec63c62a1 | |
Michael Alexsander Silva Dias | 3ccb859711 | |
Rémi Verschelde | 7f691e8bb9 | |
Anish | f4578e1008 | |
Magnus Specht | 1d05568aed | |
Ignacio Etcheverry | e3e33daeb9 | |
thomas.herzog | 3e0fc6906e | |
thomas.herzog | cf8bd34941 | |
Sebastian Hartte | 08f3562fd1 | |
Sebastian Hartte | c7c8c0700f | |
Daeil Kim | 364aea1eff | |
Kanabenki | 72433a35b1 | |
piyushdagar | 683c95ebdb | |
karroffel | 03d00ca36b | |
Vivatchai Kaveeta | dffc754a0a | |
Paulb23 | 9ca440b763 | |
Guilherme Felipe | 2f8362a2ab | |
Rémi Verschelde | 2e9cf9829c | |
Michael Alexsander Silva Dias | 1f9809032d | |
Fabio Alessandrelli | b2d13ba7b7 | |
janglee123 | 9bd25ce7d2 | |
K. S. Ernest (iFire) Lee | 804b68c981 | |
Michael Alexsander Silva Dias | 373e6aa17a | |
Windy Darian | 695f1a9185 | |
qarmin | 5650c1ecde | |
bruvzg | 754e1b073a | |
qarmin | ae3047d758 | |
Pedro Ciambra | f7f80b009b | |
Robear Selwans | 4fda05e15f | |
Michael Alexsander Silva Dias | 3d0dc81e9e | |
Paul Trojahn | 0c3c4d61f7 | |
Bojidar Marinov | 08b685ab61 | |
Bojidar Marinov | 848bd54dae | |
Rémi Verschelde | d362e3eb11 | |
Juan Linietsky | d26c3fca0c | |
Angeloss | 589c5698a0 | |
Jared | d02ee1ff0e | |
Chris Bradfield | 4740489a97 | |
Tomasz Chabora | e9796044ed | |
homer666 | f7ff3ec749 | |
Sam Green | dbf2f0c31e | |
Bojidar Marinov | 0d8492cf9e | |
Chris Bradfield | a51b2b8a82 | |
Sebastian Hartte | d060cd4fef | |
Andrettin | 4023d52399 | |
clayjohn | 77c26d3260 | |
Ignacio Etcheverry | 57f19fd8ee | |
Rémi Verschelde | 51e04c588b |
|
@ -12,6 +12,9 @@ environment:
|
|||
TARGET: release_debug
|
||||
ARCH: amd64
|
||||
|
||||
init:
|
||||
- ps: if ($env:APPVEYOR_REPO_BRANCH -ne "master") { $env:APPVEYOR_CACHE_SKIP_SAVE = "true" }
|
||||
|
||||
cache:
|
||||
- "%SCONS_CACHE_ROOT%"
|
||||
|
||||
|
@ -26,7 +29,7 @@ before_build:
|
|||
- python --version
|
||||
- scons --version
|
||||
- cl.exe
|
||||
- SET "SCONS_CACHE=%SCONS_CACHE_ROOT%\master"
|
||||
- set "SCONS_CACHE=%SCONS_CACHE_ROOT%\%APPVEYOR_REPO_BRANCH%"
|
||||
|
||||
build_script:
|
||||
- scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% debug_symbols=no verbose=yes progress=no gdnative_wrapper=yes
|
||||
|
|
|
@ -316,3 +316,10 @@ platform/windows/godot_res.res
|
|||
|
||||
# Scons progress indicator
|
||||
.scons_node_count
|
||||
|
||||
# ccls cache (https://github.com/MaskRay/ccls)
|
||||
.ccls-cache/
|
||||
|
||||
# compile commands (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||
compile_commands.json
|
||||
|
||||
|
|
51
.mailmap
51
.mailmap
|
@ -6,64 +6,115 @@ 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>
|
||||
Bruno Lourenço <madequa@users.noreply.github.com> <bmlourenco@gmail.com>
|
||||
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>
|
||||
dankan1890 <mewuidev2@gmail.com>
|
||||
Daniel J. Ramirez <djrmuv@gmail.com>
|
||||
Emmanuel Barroga <emmanuelbarroga@gmail.com>
|
||||
Erik Selecký <35656626+rxlecky@users.noreply.github.com>
|
||||
Erik Selecký <35656626+rxlecky@users.noreply.github.com> <35656626+SeleckyErik@users.noreply.github.com>
|
||||
Fabian <supagu@gmail.com>
|
||||
Ferenc Arn <tagcup@yahoo.com>
|
||||
Ferenc Arn <tagcup@yahoo.com> <tagcup@users.noreply.github.com>
|
||||
Fredia Huya-Kouadio <fhuyakou@gmail.com>
|
||||
Fredia Huya-Kouadio <fhuyakou@gmail.com> <fhuya@google.com>
|
||||
Geequlim <geequlim@gmail.com>
|
||||
Gilles Roudiere <gilles.roudiere@gmail.com>
|
||||
Gilles Roudiere <gilles.roudiere@gmail.com> <gilles.roudiere@laas.fr>
|
||||
Gordon MacPherson <gordon@gordonite.tech>
|
||||
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>
|
||||
Ian Bishop <ianb96@gmail.com>
|
||||
Ignacio Etcheverry <ignalfonsore@gmail.com>
|
||||
Ignacio Etcheverry <ignalfonsore@gmail.com> <neikeq@users.noreply.github.com>
|
||||
Ilaria Cislaghi <cislaghi.ilaria@gmail.com>
|
||||
Ilaria Cislaghi <cislaghi.ilaria@gmail.com> <ilaria.cislaghi@simedis.com>
|
||||
Indah Sylvia <ISylvox@yahoo.com>
|
||||
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>
|
||||
Manuel Strey <manuel.strey@gmx.de>
|
||||
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 <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>
|
||||
Rafał Mikrut <mikrutrafal54@gmail.com>
|
||||
Ralf Hölzemer <r.hoelzemer@posteo.de> <rollenrolm@posteo.de>
|
||||
Ralf Hölzemer <r.hoelzemer@posteo.de> <rollenrolm@users.noreply.github.com>
|
||||
Ramesh Ravone <ramesh.maran443@gmail.com>
|
||||
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>
|
||||
Zak Stam <zakscomputers@hotmail.com>
|
||||
Zher Huei Lee <lee.zh.92@gmail.com>
|
||||
|
|
10
.travis.yml
10
.travis.yml
|
@ -6,7 +6,7 @@ sudo: false
|
|||
|
||||
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"
|
||||
- secure: "uch9QszCgsl1qVbuzY41P7S2hWL2IiNFV4SbAYRCdi0oJ9MIu+pVyrQdpf3+jG4rH6j4Rffl+sN17Zz4dIDDioFL1JwqyCqyCyswR8uACC0Rr8gr4Mi3+HIRbv+2s2P4cIQq41JM8FJe84k9jLEMGCGh69w+ibCWoWs74CokYVA="
|
||||
|
@ -27,7 +27,7 @@ matrix:
|
|||
packages:
|
||||
- clang-format-6.0
|
||||
|
||||
- env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="module_mono_enabled=yes mono_glue=no werror=yes"
|
||||
- env: PLATFORM=x11 TOOLS=yes TARGET=debug CACHE_NAME=${PLATFORM}-tools-mono-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="module_mono_enabled=yes mono_glue=no warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: gcc-8
|
||||
addons:
|
||||
|
@ -49,7 +49,7 @@ matrix:
|
|||
build_command: "scons p=x11 -j2 $OPTIONS"
|
||||
branch_pattern: coverity_scan
|
||||
|
||||
- env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=x11 TOOLS=no TARGET=release CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: clang
|
||||
addons:
|
||||
|
@ -57,7 +57,7 @@ matrix:
|
|||
packages:
|
||||
- *linux_deps
|
||||
|
||||
- env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=android TOOLS=no TARGET=release_debug CACHE_NAME=${PLATFORM}-clang EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: clang
|
||||
|
||||
|
@ -69,7 +69,7 @@ matrix:
|
|||
os: osx
|
||||
compiler: clang
|
||||
|
||||
- env: PLATFORM=server TOOLS=yes TARGET=release_debug CACHE_NAME=${PLATFORM}-tools-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="werror=yes"
|
||||
- env: PLATFORM=server TOOLS=yes TARGET=release_debug CACHE_NAME=${PLATFORM}-tools-gcc-8 MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" EXTRA_ARGS="warnings=extra werror=yes"
|
||||
os: linux
|
||||
compiler: gcc-8
|
||||
addons:
|
||||
|
|
44
AUTHORS.md
44
AUTHORS.md
|
@ -29,6 +29,7 @@ name is available.
|
|||
|
||||
Aaron Franke (aaronfranke)
|
||||
Alexander Holland (AlexHolly)
|
||||
Alexey Khoroshavin (allkhor)
|
||||
Alket Rexhepi (alketii)
|
||||
Andrea Catania (AndreaCatania)
|
||||
Andreas Haas (Hinsbart)
|
||||
|
@ -36,37 +37,52 @@ name is available.
|
|||
Andy Moss (MillionOstrich)
|
||||
Anish Bhobe (KidRigger)
|
||||
Anton Yabchinskiy (a12n)
|
||||
Anutrix
|
||||
Aren Villanueva (kurikaesu)
|
||||
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)
|
||||
Bruno Lourenço (MadEqua)
|
||||
bruvzg
|
||||
Cameron Reikes (creikey)
|
||||
Camille Mohr-Daurat (pouleyKetchoupp)
|
||||
Carl Olsson (not-surt)
|
||||
Carter Anderson (cart)
|
||||
Chris Bradfield (cbscribe)
|
||||
Clay John (clayjohn)
|
||||
Dana Olson (adolson)
|
||||
Daniel J. Ramirez (djrm)
|
||||
Daniel Rakos (aqnuep)
|
||||
dankan1890
|
||||
David Sichma (DavidSichma)
|
||||
Dharkael (lupoDharkael)
|
||||
Dmitry Koteroff (Krakean)
|
||||
DualMatrix
|
||||
Emmanuel Barroga (codecustard)
|
||||
Emmanuel Leblond (touilleMan)
|
||||
Eoin O'Neill (Eoin-ONeill-Yokai)
|
||||
Eric Lasota (elasota)
|
||||
Eric Rybicki (ericrybick)
|
||||
Erik Selecký (rxlecky)
|
||||
est31
|
||||
Fabian Mathews (supagu)
|
||||
Fabio Alessandrelli (Faless)
|
||||
Ferenc Arn (tagcup)
|
||||
Franklin Sobrinho (TheHX)
|
||||
Fredia Huya-Kouadio (m4gr3d)
|
||||
Geequlim
|
||||
George Marques (vnen)
|
||||
Gerrit Großkopf (Grosskopf)
|
||||
Gilles Roudiere (groud)
|
||||
Gordon MacPherson (RevoluPowered)
|
||||
Guilherme Felipe de C. G. da Silva (guilhermefelipecgs)
|
||||
Hein-Pieter van Braam (hpvb)
|
||||
Hanif Bin Ariffin (hbina)
|
||||
Haoyu Qiu (timothyqiu)
|
||||
Hein-Pieter van Braam-Stewart (hpvb)
|
||||
Hiroshi Ogawa (hi-ogawa)
|
||||
homer666
|
||||
Hubert Jarosz (Marqin)
|
||||
|
@ -74,6 +90,7 @@ name is available.
|
|||
Ian Bishop (ianb96)
|
||||
Ibrahn Sahir (ibrahn)
|
||||
Ignacio Etcheverry (neikeq)
|
||||
Ilaria Cislaghi (QbieShay)
|
||||
Indah Sylvia (ISylvox)
|
||||
J08nY
|
||||
Jakub Grzesik (kubecz3k)
|
||||
|
@ -88,7 +105,9 @@ name is available.
|
|||
Kostadin Damyanov (Max-Might)
|
||||
K. S. Ernest (iFire) Lee (fire)
|
||||
Leon Krause (eska014)
|
||||
Lucien Menassol (Kanabenki)
|
||||
m4nu3lf
|
||||
Marcel Admiraal (madmiraal)
|
||||
Marcelo Fernandez (marcelofg55)
|
||||
Marc Gilleron (Zylann)
|
||||
Marcin Zawiejski (dragmz)
|
||||
|
@ -101,36 +120,49 @@ name is available.
|
|||
Masoud BH (masoudbh3)
|
||||
Matthias Hölzl (hoelzl)
|
||||
Max Hilbrunner (mhilbrunner)
|
||||
Michael Alexsander Silva Dias (YeldhamDev)
|
||||
merumelu
|
||||
Michael Alexsander (YeldhamDev)
|
||||
MichiRecRoom (LikeLakers2)
|
||||
mrezai
|
||||
muiroc
|
||||
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)
|
||||
Poommetee Ketson (Noshyaar)
|
||||
Przemysław Gołąb (n-pigeon)
|
||||
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)
|
||||
santouits
|
||||
SaracenOne
|
||||
sersoong
|
||||
Shiqing (kawa-yoiko)
|
||||
Simon Wenner (swenner)
|
||||
Swarnim Arun (minraws)
|
||||
Theo Hallenius (TheoXD)
|
||||
Thomas Herzog (karroffel)
|
||||
Timo (toger5)
|
||||
Timo Schwarzer (timoschwarzer)
|
||||
Timo (toger5)
|
||||
Tomasz Chabora (KoBeWi)
|
||||
Twarit Waikar (IronicallySerious)
|
||||
Vinzenz Feenstra (vinzenz)
|
||||
박한얼 (volzhs)
|
||||
V. Vamsi Krishna (vkbsb)
|
||||
|
@ -139,7 +171,7 @@ name is available.
|
|||
Wilson E. Alvarez (Rubonnek)
|
||||
Xavier Cho (mysticfall)
|
||||
yg2f (SuperUserNameMan)
|
||||
Yuri Roubinski (Chaosus)
|
||||
Yuri Roubinsky (Chaosus)
|
||||
Zak Stam (zaksnet)
|
||||
Zher Huei Lee (leezh)
|
||||
ZuBsPaCe
|
||||
Дмитрий Сальников (DmitriySalnikov)
|
||||
|
|
600
COPYRIGHT.txt
600
COPYRIGHT.txt
|
@ -53,7 +53,7 @@ Files: ./icon.png
|
|||
./logo.svg
|
||||
Comment: Godot Engine logo
|
||||
Copyright: 2017, Andrea Calabró
|
||||
License: CC-BY-3.0
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: ./platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl
|
||||
./platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml
|
||||
|
@ -165,7 +165,7 @@ License: FTL
|
|||
|
||||
Files: ./thirdparty/glad/
|
||||
Comment: glad
|
||||
Copyright: 2013-2018, David Herberth
|
||||
Copyright: 2013-2019, David Herberth
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/jpeg_compressor/
|
||||
|
@ -180,8 +180,8 @@ License: BSD-3-clause
|
|||
|
||||
Files: ./thirdparty/libpng/
|
||||
Comment: libpng
|
||||
Copyright: 1995-2018, The PNG Reference Library Authors.
|
||||
2018, Cosmin Truta.
|
||||
Copyright: 1995-2019, The PNG Reference Library Authors.
|
||||
2018-2019, Cosmin Truta.
|
||||
2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
|
||||
1996-1997, Andreas Dilger.
|
||||
1995-1996, Guy Eric Schalnat, Group 42, Inc.
|
||||
|
@ -265,12 +265,6 @@ Comment: Clipper
|
|||
Copyright: 2010-2017, Angus Johnson
|
||||
License: BSL-1.0
|
||||
|
||||
Files: ./thirdparty/misc/curl_hostcheck.c
|
||||
./thirdparty/misc/curl_hostcheck.h
|
||||
Comment: curl
|
||||
Copyright: 1998-2012, Daniel Stenberg et al.
|
||||
License: curl
|
||||
|
||||
Files: ./thirdparty/misc/easing_equations.cpp
|
||||
Comment: Robert Penner's Easing Functions
|
||||
Copyright: 2001, Robert Penner
|
||||
|
@ -321,7 +315,7 @@ License: BSD-3-clause
|
|||
Files: ./thirdparty/misc/stb_truetype.h
|
||||
./thirdparty/misc/stb_vorbis.c
|
||||
Comment: stb libraries
|
||||
Copyright: 2007-2017, Sean Barrett
|
||||
Copyright: 2007-2019, Sean Barrett
|
||||
License: public-domain
|
||||
|
||||
Files: ./thirdparty/misc/triangulator.cpp
|
||||
|
@ -350,8 +344,8 @@ License: BSD-3-clause
|
|||
|
||||
Files: ./thirdparty/pcre2/
|
||||
Comment: PCRE2
|
||||
Copyright: 1997-2018, University of Cambridge,
|
||||
2009-2018, Zoltan Herczeg
|
||||
Copyright: 1997-2019, University of Cambridge,
|
||||
2009-2019, Zoltan Herczeg
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: ./thirdparty/pvrtccompressor/
|
||||
|
@ -369,17 +363,19 @@ Comment: libSquish
|
|||
Copyright: 2006, Simon Brown
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/thekla_atlas/
|
||||
Comment: Thekla Atlas
|
||||
Copyright: 2013, Thekla, Inc
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/tinyexr/
|
||||
Comment: TinyEXR
|
||||
Copyright: 2014-2018, Syoyo Fujita
|
||||
Copyright: 2014-2019, Syoyo Fujita
|
||||
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: ./thirdparty/xatlas/
|
||||
Comment: xatlas
|
||||
Copyright: 2018, Jonathan Young
|
||||
2013, Thekla, Inc
|
||||
2006, NVIDIA Corporation, Ignacio Castano
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/zlib/
|
||||
Comment: zlib
|
||||
Copyright: 1995-2017, Jean-loup Gailly and Mark Adler
|
||||
|
@ -522,359 +518,317 @@ License: BSL-1.0
|
|||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
License: CC-BY-3.0
|
||||
Creative Commons Attribution 3.0 Unported
|
||||
License: CC-BY-4.0
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
.
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
|
||||
ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
|
||||
INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
ITS USE.
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
.
|
||||
License
|
||||
Section 1 -- Definitions.
|
||||
.
|
||||
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
|
||||
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
|
||||
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
|
||||
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
.
|
||||
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
|
||||
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
|
||||
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
|
||||
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
|
||||
CONDITIONS.
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
.
|
||||
1. Definitions
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
.
|
||||
a. "Adaptation" means a work based upon the Work, or upon the Work and
|
||||
other pre-existing works, such as a translation, adaptation, derivative
|
||||
work, arrangement of music or other alterations of a literary or
|
||||
artistic work, or phonogram or performance and includes cinematographic
|
||||
adaptations or any other form in which the Work may be recast,
|
||||
transformed, or adapted including in any form recognizably derived from
|
||||
the original, except that a work that constitutes a Collection will not
|
||||
be considered an Adaptation for the purpose of this License. For the
|
||||
avoidance of doubt, where the Work is a musical work, performance or
|
||||
phonogram, the synchronization of the Work in timed-relation with a
|
||||
moving image ("synching") will be considered an Adaptation for the
|
||||
purpose of this License.
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
.
|
||||
b. "Collection" means a collection of literary or artistic works, such
|
||||
as encyclopedias and anthologies, or performances, phonograms or
|
||||
broadcasts, or other works or subject matter other than works listed in
|
||||
Section 1(f) below, which, by reason of the selection and arrangement of
|
||||
their contents, constitute intellectual creations, in which the Work is
|
||||
included in its entirety in unmodified form along with one or more other
|
||||
contributions, each constituting separate and independent works in
|
||||
themselves, which together are assembled into a collective whole. A work
|
||||
that constitutes a Collection will not be considered an Adaptation (as
|
||||
defined above) for the purposes of this License.
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
.
|
||||
c. "Distribute" means to make available to the public the original and
|
||||
copies of the Work or Adaptation, as appropriate, through sale or other
|
||||
transfer of ownership.
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
.
|
||||
d. "Licensor" means the individual, individuals, entity or entities that
|
||||
offer(s) the Work under the terms of this License.
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
.
|
||||
e. "Original Author" means, in the case of a literary or artistic work,
|
||||
the individual, individuals, entity or entities who created the Work or
|
||||
if no individual or entity can be identified, the publisher; and in
|
||||
addition (i) in the case of a performance the actors, singers,
|
||||
musicians, dancers, and other persons who act, sing, deliver, declaim,
|
||||
play in, interpret or otherwise perform literary or artistic works or
|
||||
expressions of folklore; (ii) in the case of a phonogram the producer
|
||||
being the person or legal entity who first fixes the sounds of a
|
||||
performance or other sounds; and, (iii) in the case of broadcasts, the
|
||||
organization that transmits the broadcast.
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
.
|
||||
f. "Work" means the literary and/or artistic work offered under the
|
||||
terms of this License including without limitation any production in the
|
||||
literary, scientific and artistic domain, whatever may be the mode or
|
||||
form of its expression including digital form, such as a book, pamphlet
|
||||
and other writing; a lecture, address, sermon or other work of the same
|
||||
nature; a dramatic or dramatico-musical work; a choreographic work or
|
||||
entertainment in dumb show; a musical composition with or without words;
|
||||
a cinematographic work to which are assimilated works expressed by a
|
||||
process analogous to cinematography; a work of drawing, painting,
|
||||
architecture, sculpture, engraving or lithography; a photographic work
|
||||
to which are assimilated works expressed by a process analogous to
|
||||
photography; a work of applied art; an illustration, map, plan, sketch
|
||||
or three-dimensional work relative to geography, topography,
|
||||
architecture or science; a performance; a broadcast; a phonogram; a
|
||||
compilation of data to the extent it is protected as a copyrightable
|
||||
work; or a work performed by a variety or circus performer to the extent
|
||||
it is not otherwise considered a literary or artistic work.
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
.
|
||||
g. "You" means an individual or entity exercising rights under this
|
||||
License who has not previously violated the terms of this License with
|
||||
respect to the Work, or who has received express permission from the
|
||||
Licensor to exercise rights under this License despite a previous
|
||||
violation.
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
.
|
||||
h. "Publicly Perform" means to perform public recitations of the Work
|
||||
and to communicate to the public those public recitations, by any means
|
||||
or process, including by wire or wireless means or public digital
|
||||
performances; to make available to the public Works in such a way that
|
||||
members of the public may access these Works from a place and at a place
|
||||
individually chosen by them; to perform the Work to the public by any
|
||||
means or process and the communication to the public of the performances
|
||||
of the Work, including by public digital performance; to broadcast and
|
||||
rebroadcast the Work by any means including signs, sounds or images.
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
.
|
||||
i. "Reproduce" means to make copies of the Work by any means including
|
||||
without limitation by sound or visual recordings and the right of
|
||||
fixation and reproducing fixations of the Work, including storage of a
|
||||
protected performance or phonogram in digital form or other electronic
|
||||
medium.
|
||||
Section 2 -- Scope.
|
||||
.
|
||||
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
|
||||
limit, or restrict any uses free from copyright or rights arising from
|
||||
limitations or exceptions that are provided for in connection with the
|
||||
copyright protection under copyright law or other applicable laws.
|
||||
a. License grant.
|
||||
.
|
||||
3. License Grant. Subject to the terms and conditions of this License,
|
||||
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
|
||||
perpetual (for the duration of the applicable copyright) license to
|
||||
exercise the rights in the Work as stated below:
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
.
|
||||
a. to Reproduce the Work, to incorporate the Work into one or more
|
||||
Collections, and to Reproduce the Work as incorporated in the
|
||||
Collections;
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
.
|
||||
b. to create and Reproduce Adaptations provided that any such
|
||||
Adaptation, including any translation in any medium, takes reasonable
|
||||
steps to clearly label, demarcate or otherwise identify that changes
|
||||
were made to the original Work. For example, a translation could be
|
||||
marked "The original work was translated from English to Spanish," or a
|
||||
modification could indicate "The original work has been modified.";
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
.
|
||||
c. to Distribute and Publicly Perform the Work including as incorporated
|
||||
in Collections; and,
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
.
|
||||
d. to Distribute and Publicly Perform Adaptations.
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
.
|
||||
e. For the avoidance of doubt:
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
.
|
||||
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
|
||||
which the right to collect royalties through any statutory or compulsory
|
||||
licensing scheme cannot be waived, the Licensor reserves the exclusive
|
||||
right to collect such royalties for any exercise by You of the rights
|
||||
granted under this License;
|
||||
5. Downstream recipients.
|
||||
.
|
||||
ii. Waivable Compulsory License Schemes. In those jurisdictions in which
|
||||
the right to collect royalties through any statutory or compulsory
|
||||
licensing scheme can be waived, the Licensor waives the exclusive right
|
||||
to collect such royalties for any exercise by You of the rights granted
|
||||
under this License; and,
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
.
|
||||
iii. Voluntary License Schemes. The Licensor waives the right to collect
|
||||
royalties, whether individually or, in the event that the Licensor is a
|
||||
member of a collecting society that administers voluntary licensing
|
||||
schemes, via that society, from any exercise by You of the rights
|
||||
granted under this License.
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
.
|
||||
The above rights may be exercised in all media and formats whether now
|
||||
known or hereafter devised. The above rights include the right to make
|
||||
such modifications as are technically necessary to exercise the rights
|
||||
in other media and formats. Subject to Section 8(f), all rights not
|
||||
expressly granted by Licensor are hereby reserved.
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
.
|
||||
4. Restrictions. The license granted in Section 3 above is expressly
|
||||
made subject to and limited by the following restrictions:
|
||||
b. Other rights.
|
||||
.
|
||||
a. You may Distribute or Publicly Perform the Work only under the terms
|
||||
of this License. You must include a copy of, or the Uniform Resource
|
||||
Identifier (URI) for, this License with every copy of the Work You
|
||||
Distribute or Publicly Perform. You may not offer or impose any terms on
|
||||
the Work that restrict the terms of this License or the ability of the
|
||||
recipient of the Work to exercise the rights granted to that recipient
|
||||
under the terms of the License. You may not sublicense the Work. You
|
||||
must keep intact all notices that refer to this License and to the
|
||||
disclaimer of warranties with every copy of the Work You Distribute or
|
||||
Publicly Perform. When You Distribute or Publicly Perform the Work, You
|
||||
may not impose any effective technological measures on the Work that
|
||||
restrict the ability of a recipient of the Work from You to exercise the
|
||||
rights granted to that recipient under the terms of the License. This
|
||||
Section 4(a) applies to the Work as incorporated in a Collection, but
|
||||
this does not require the Collection apart from the Work itself to be
|
||||
made subject to the terms of this License. If You create a Collection,
|
||||
upon notice from any Licensor You must, to the extent practicable,
|
||||
remove from the Collection any credit as required by Section 4(b), as
|
||||
requested. If You create an Adaptation, upon notice from any Licensor
|
||||
You must, to the extent practicable, remove from the Adaptation any
|
||||
credit as required by Section 4(b), as requested.
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
.
|
||||
b. If You Distribute, or Publicly Perform the Work or any Adaptations or
|
||||
Collections, You must, unless a request has been made pursuant to
|
||||
Section 4(a), keep intact all copyright notices for the Work and
|
||||
provide, reasonable to the medium or means You are utilizing: (i) the
|
||||
name of the Original Author (or pseudonym, if applicable) if supplied,
|
||||
and/or if the Original Author and/or Licensor designate another party or
|
||||
parties (e.g., a sponsor institute, publishing entity, journal) for
|
||||
attribution ("Attribution Parties") in Licensor's copyright notice,
|
||||
terms of service or by other reasonable means, the name of such party or
|
||||
parties; (ii) the title of the Work if supplied; (iii) to the extent
|
||||
reasonably practicable, the URI, if any, that Licensor specifies to be
|
||||
associated with the Work, unless such URI does not refer to the
|
||||
copyright notice or licensing information for the Work; and (iv) ,
|
||||
consistent with Section 3(b), in the case of an Adaptation, a credit
|
||||
identifying the use of the Work in the Adaptation (e.g., "French
|
||||
translation of the Work by Original Author," or "Screenplay based on
|
||||
original Work by Original Author"). The credit required by this Section
|
||||
4 (b) may be implemented in any reasonable manner; provided, however,
|
||||
that in the case of a Adaptation or Collection, at a minimum such credit
|
||||
will appear, if a credit for all contributing authors of the Adaptation
|
||||
or Collection appears, then as part of these credits and in a manner at
|
||||
least as prominent as the credits for the other contributing authors.
|
||||
For the avoidance of doubt, You may only use the credit required by this
|
||||
Section for the purpose of attribution in the manner set out above and,
|
||||
by exercising Your rights under this License, You may not implicitly or
|
||||
explicitly assert or imply any connection with, sponsorship or
|
||||
endorsement by the Original Author, Licensor and/or Attribution Parties,
|
||||
as appropriate, of You or Your use of the Work, without the separate,
|
||||
express prior written permission of the Original Author, Licensor and/or
|
||||
Attribution Parties.
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
.
|
||||
c. Except as otherwise agreed in writing by the Licensor or as may be
|
||||
otherwise permitted by applicable law, if You Reproduce, Distribute or
|
||||
Publicly Perform the Work either by itself or as part of any Adaptations
|
||||
or Collections, You must not distort, mutilate, modify or take other
|
||||
derogatory action in relation to the Work which would be prejudicial to
|
||||
the Original Author's honor or reputation. Licensor agrees that in those
|
||||
jurisdictions (e.g. Japan), in which any exercise of the right granted
|
||||
in Section 3(b) of this License (the right to make Adaptations) would be
|
||||
deemed to be a distortion, mutilation, modification or other derogatory
|
||||
action prejudicial to the Original Author's honor and reputation, the
|
||||
Licensor will waive or not assert, as appropriate, this Section, to the
|
||||
fullest extent permitted by the applicable national law, to enable You
|
||||
to reasonably exercise Your right under Section 3(b) of this License
|
||||
(right to make Adaptations) but not otherwise.
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
.
|
||||
5. Representations, Warranties and Disclaimer
|
||||
Section 3 -- License Conditions.
|
||||
.
|
||||
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
|
||||
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
|
||||
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
|
||||
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
|
||||
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
|
||||
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
|
||||
EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
.
|
||||
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
|
||||
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
|
||||
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
|
||||
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
|
||||
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
a. Attribution.
|
||||
.
|
||||
7. Termination
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
.
|
||||
a. This License and the rights granted hereunder will terminate
|
||||
automatically upon any breach by You of the terms of this License.
|
||||
Individuals or entities who have received Adaptations or Collections
|
||||
from You under this License, however, will not have their licenses
|
||||
terminated provided such individuals or entities remain in full
|
||||
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
|
||||
survive any termination of this License.
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
.
|
||||
b. Subject to the above terms and conditions, the license granted here
|
||||
is perpetual (for the duration of the applicable copyright in the Work).
|
||||
Notwithstanding the above, Licensor reserves the right to release the
|
||||
Work under different license terms or to stop distributing the Work at
|
||||
any time; provided, however that any such election will not serve to
|
||||
withdraw this License (or any other license that has been, or is
|
||||
required to be, granted under the terms of this License), and this
|
||||
License will continue in full force and effect unless terminated as
|
||||
stated above.
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
.
|
||||
8. Miscellaneous
|
||||
ii. a copyright notice;
|
||||
.
|
||||
a. Each time You Distribute or Publicly Perform the Work or a
|
||||
Collection, the Licensor offers to the recipient a license to the Work
|
||||
on the same terms and conditions as the license granted to You under
|
||||
this License.
|
||||
iii. a notice that refers to this Public License;
|
||||
.
|
||||
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
|
||||
offers to the recipient a license to the original Work on the same terms
|
||||
and conditions as the license granted to You under this License.
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
.
|
||||
c. If any provision of this License is invalid or unenforceable under
|
||||
applicable law, it shall not affect the validity or enforceability of
|
||||
the remainder of the terms of this License, and without further action
|
||||
by the parties to this agreement, such provision shall be reformed to
|
||||
the minimum extent necessary to make such provision valid and
|
||||
enforceable.
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
.
|
||||
d. No term or provision of this License shall be deemed waived and no
|
||||
breach consented to unless such waiver or consent shall be in writing
|
||||
and signed by the party to be charged with such waiver or consent. This
|
||||
License constitutes the entire agreement between the parties with
|
||||
respect to the Work licensed here. There are no understandings,
|
||||
agreements or representations with respect to the Work not specified
|
||||
here. Licensor shall not be bound by any additional provisions that may
|
||||
appear in any communication from You.
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
.
|
||||
e. This License may not be modified without the mutual written agreement
|
||||
of the Licensor and You.
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
.
|
||||
f. The rights granted under, and the subject matter referenced, in this
|
||||
License were drafted utilizing the terminology of the Berne Convention
|
||||
for the Protection of Literary and Artistic Works (as amended on
|
||||
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
|
||||
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
|
||||
the Universal Copyright Convention (as revised on July 24, 1971). These
|
||||
rights and subject matter take effect in the relevant jurisdiction in
|
||||
which the License terms are sought to be enforced according to the
|
||||
corresponding provisions of the implementation of those treaty
|
||||
provisions in the applicable national law. If the standard suite of
|
||||
rights granted under applicable copyright law includes additional rights
|
||||
not granted under this License, such additional rights are deemed to be
|
||||
included in the License; this License is not intended to restrict the
|
||||
license of any rights under applicable law.
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
.
|
||||
Creative Commons Notice
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
.
|
||||
Creative Commons is not a party to this License, and makes no warranty
|
||||
whatsoever in connection with the Work. Creative Commons will not be
|
||||
liable to You or any party on any legal theory for any damages
|
||||
whatsoever, including without limitation any general, special,
|
||||
incidental or consequential damages arising in connection to this
|
||||
license. Notwithstanding the foregoing two (2) sentences, if Creative
|
||||
Commons has expressly identified itself as the Licensor hereunder, it
|
||||
shall have all rights and obligations of Licensor.
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
.
|
||||
Except for the limited purpose of indicating to the public that the Work
|
||||
is licensed under the CCPL, Creative Commons does not authorize the use
|
||||
by either party of the trademark "Creative Commons" or any related
|
||||
trademark or logo of Creative Commons without the prior written consent
|
||||
of Creative Commons. Any permitted use will be in compliance with
|
||||
Creative Commons' then-current trademark usage guidelines, as may be
|
||||
published on its website or otherwise made available upon request from
|
||||
time to time. For the avoidance of doubt, this trademark restriction
|
||||
does not form part of this License.
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
.
|
||||
Creative Commons may be contacted at http://creativecommons.org/.
|
||||
|
||||
License: curl
|
||||
All rights reserved.
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
.
|
||||
Permission to use, copy, modify, and distribute this software for any purpose
|
||||
with or without fee is hereby granted, provided that the above copyright
|
||||
notice and this permission notice appear in all copies.
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
.
|
||||
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 OF THIRD PARTY RIGHTS. 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.
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
.
|
||||
Except as contained in this notice, the name of a copyright holder shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization of the copyright holder.
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
.
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
.
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
.
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
.
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
.
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
.
|
||||
Section 6 -- Term and Termination.
|
||||
.
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
.
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
.
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
.
|
||||
2. upon express reinstatement by the Licensor.
|
||||
.
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
.
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
.
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
.
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
.
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
.
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
.
|
||||
Section 8 -- Interpretation.
|
||||
.
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
.
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
.
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
.
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
License: Expat
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
|
|
468
DONORS.md
468
DONORS.md
|
@ -12,356 +12,516 @@ 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>
|
||||
Yakaz.com <https://yakaz.com>
|
||||
Moonwards <https://www.moonwards.com>
|
||||
|
||||
## Mini sponsors
|
||||
|
||||
AD Ford
|
||||
Alan Beauchamp
|
||||
Anandarup Mallik
|
||||
Anand Mallik
|
||||
Andres Hernandez
|
||||
Andrew Dunai
|
||||
Arda Erol
|
||||
Brandon Lamb
|
||||
Christian Uldall Pedersen
|
||||
Christoph Woinke
|
||||
Christian Baune
|
||||
Christopher Montesano
|
||||
Darkhan Baimyrza
|
||||
Darrin Massena
|
||||
Dov Zimring
|
||||
Edward Flick
|
||||
Gamechuck
|
||||
GameDev.net
|
||||
GameDev.tv
|
||||
Grady
|
||||
Hein-Pieter van Braam
|
||||
Jamal Alyafei
|
||||
Javary Games
|
||||
Jay Sistar
|
||||
Jacob McKenney
|
||||
Javary Co.
|
||||
Jeffery Chiu
|
||||
Justin Arnold
|
||||
Justo Delgado Baudí
|
||||
Kyle Szklenski
|
||||
Leonard Meagher
|
||||
Ludosity AB
|
||||
Matthieu Huvé
|
||||
Maxim Karsten
|
||||
Mike King
|
||||
Nathan Warden
|
||||
Neal Gompa (Conan Kudo)
|
||||
Patrick Aarstad
|
||||
"Rainway "
|
||||
Ruslan Mustakov
|
||||
Péter Magyar
|
||||
Slobodan Milnovic
|
||||
StarFlare Software
|
||||
Stephan Lanfermann
|
||||
Stoney Meyerhoeffer
|
||||
thechris
|
||||
Steve
|
||||
Tristan Pemble
|
||||
VilliHaukka
|
||||
Zashi
|
||||
|
||||
## Gold donors
|
||||
|
||||
Asdf
|
||||
Brandon Waite
|
||||
cheese65536
|
||||
Andrei
|
||||
Dave
|
||||
David Gehrig
|
||||
David Snopek
|
||||
Ed Morley
|
||||
Florian Krick
|
||||
Florian Rämisch
|
||||
Jakub Grzesik
|
||||
K9Kraken
|
||||
Manuele Finocchiaro
|
||||
Nathanael Beisiegel
|
||||
Officine Pixel S.n.c.
|
||||
Retro Village
|
||||
Ronan Zeegers
|
||||
Sofox
|
||||
Taylor Ritenour
|
||||
Zaven Muradyan
|
||||
|
||||
Allen Schade
|
||||
Andreas Schüle
|
||||
Asher Glick
|
||||
Austen McRae
|
||||
Bernhard Werner
|
||||
beVR
|
||||
Carlo Cabanilla
|
||||
Daniel James
|
||||
Daniel Lynn
|
||||
David Giardi
|
||||
Edward E
|
||||
Default Name
|
||||
eggs
|
||||
Felix Bohmann
|
||||
Florian Breisch
|
||||
Gary Oberbrunner
|
||||
Gero
|
||||
Gamejunkey
|
||||
Javier Roman
|
||||
Jay Horton
|
||||
Jon Smith
|
||||
Jon Woodward
|
||||
Jorge Bernal
|
||||
Joshua Lesperance
|
||||
Justo Delgado Baudí
|
||||
Krzysztof Dluzniewski
|
||||
Moonwards
|
||||
Mored1984
|
||||
Not Invader Zim
|
||||
paul gruenbacher
|
||||
Paul LaMotte
|
||||
Karl Werf
|
||||
Keinan Powers
|
||||
Klavdij Voncina
|
||||
Lex Steers
|
||||
Luke
|
||||
Maciej Pendolski
|
||||
Matthew Hillier
|
||||
Mohamed Ikbel Boulabiar
|
||||
Mored4u
|
||||
Rob Messick
|
||||
Ryan Badour
|
||||
Sandro Jenny
|
||||
Scott Wadden
|
||||
Sergey
|
||||
Svenne Krap
|
||||
thechris
|
||||
Tom Langwaldt
|
||||
tukon
|
||||
William Wold
|
||||
Wyatt Goodin
|
||||
Xananax
|
||||
|
||||
BanjoNode2D
|
||||
Beliar
|
||||
Alex Khayrullin
|
||||
Chris Goddard
|
||||
Chris Serino
|
||||
Christian Padilla
|
||||
Conrad Curry
|
||||
Craig Smith
|
||||
Daniel Egger
|
||||
Dean Harmon
|
||||
Darrian Little
|
||||
Horváth Péter
|
||||
Ivan Trombley
|
||||
Jakub Dering
|
||||
Joan Fons
|
||||
Joshua Flores
|
||||
Krzysztof Jankowski
|
||||
Lord Bloodhound
|
||||
Lucas Ferreira Franca
|
||||
Nathan Lundquist
|
||||
Pascal Grüter
|
||||
Petr Malac
|
||||
Rami
|
||||
Reneator
|
||||
Rob
|
||||
Robert Willes
|
||||
Robin Arys
|
||||
Ronnie Ashlock
|
||||
ScottMakesGames
|
||||
SKison
|
||||
Thomas Bjarnelöf
|
||||
Unseen Domains
|
||||
Valryia
|
||||
Vincent Henderson
|
||||
Wojciech Chojnacki
|
||||
Xavier PATRICELLI
|
||||
|
||||
Alessandra Pereyra
|
||||
Adam Nakonieczny
|
||||
Adam Neumann
|
||||
Alexander J Maynard
|
||||
Alexey Dyadchenko
|
||||
Andrew Bowen
|
||||
Benjamin W Flint
|
||||
Chau Siu Hung
|
||||
Chris Goddard
|
||||
Alex Z
|
||||
Andreas Funke
|
||||
André Frélicot
|
||||
aoshiwik
|
||||
Ben Powell
|
||||
Carlos de Sousa Marques
|
||||
Charlie Whitfield
|
||||
Chase Taranto
|
||||
Chris Petrich
|
||||
Christian Leth Jeppesen
|
||||
Christoph Schröder
|
||||
Cody Parker
|
||||
ComicSads
|
||||
Coldragon
|
||||
Craig Ostrin
|
||||
D
|
||||
Deadly Lampshade
|
||||
E.G.
|
||||
Eric
|
||||
Daniel Eichler
|
||||
David White
|
||||
Denis Janßen
|
||||
Easypete
|
||||
Eric Monson
|
||||
Ethan Bennis
|
||||
ethan ball
|
||||
Eugenio Hugo Salgüero Jáñez
|
||||
Fain
|
||||
flesk
|
||||
Gary Hulst
|
||||
gavlig
|
||||
GGGames.org
|
||||
Giles Montgomery
|
||||
Giovanni Solimeno
|
||||
Green Fox
|
||||
Guilherme Felipe de C. G. da Silva
|
||||
Halom Vered
|
||||
Heath Hayes
|
||||
Hysteria
|
||||
Jalal Chaabane
|
||||
Jeppe Zapp
|
||||
Idzard Kwadijk
|
||||
Isaac Clausman
|
||||
Jared White
|
||||
Jeff Nyte
|
||||
Jeremy Sims
|
||||
Jerry Ling
|
||||
Joe Flood
|
||||
John G Gentzel
|
||||
Jon Hermansen
|
||||
Jose Malheiro
|
||||
Juan T Chen
|
||||
Joshua Lesperance
|
||||
Juan Velandia
|
||||
Juraj Móza
|
||||
Kasper Jeppesen
|
||||
Klavdij Voncina
|
||||
Leandro Voltolino
|
||||
Lukáš Rendvanský
|
||||
Marius Kamm
|
||||
kinfox
|
||||
Marcelo Dornbusch Lopes
|
||||
Markus Fehr
|
||||
Markus Wiesner
|
||||
Martin Eigel
|
||||
Marvin
|
||||
Matt Eunson
|
||||
Max R.R. Collada
|
||||
Max Bulai
|
||||
MuffinManKen
|
||||
Nick Nikitin
|
||||
Oliver Dick
|
||||
oziatek
|
||||
Patrick Ting
|
||||
Paul Hocker
|
||||
Paul Von Zimmerman
|
||||
Pete Goodwin
|
||||
pl
|
||||
Ranoller
|
||||
ray-tracer
|
||||
Ruben Soares Luis
|
||||
Robert Larnach
|
||||
Rocknight Studios
|
||||
Romildo Franco
|
||||
Samuel Judd
|
||||
Sofox
|
||||
Scott Pilet
|
||||
Sean Morgan
|
||||
SleepCircle
|
||||
spilldata
|
||||
Steve Hyatt
|
||||
Stoned Xander
|
||||
TheLevelOfDetail .
|
||||
Thomas Krampl
|
||||
Thomas Kurz
|
||||
Tobias Bocanegra
|
||||
WytRabbit
|
||||
Xavier Fumado Beltran
|
||||
Tricky Fat Cat
|
||||
Urho
|
||||
William Foster
|
||||
Zhou Tuizhi
|
||||
Zie Weaver
|
||||
蕭惟允
|
||||
|
||||
## Silver donors
|
||||
|
||||
1D_Inc
|
||||
Abraham Haskins
|
||||
Adam
|
||||
Adam Brunnmeier
|
||||
Adam Carr
|
||||
Adam Nakonieczny
|
||||
Adam Long
|
||||
Adam McCurdy
|
||||
Adam N Webber
|
||||
Adam Smeltzer
|
||||
Adam Szymański
|
||||
Adisibio
|
||||
Adrian Demetrescu
|
||||
Agustinus Arya
|
||||
Aidan O'Flannagain
|
||||
Aki Mimoto
|
||||
Alan Mervitz
|
||||
Alan Stice
|
||||
Albin Jonasson Svärdsby
|
||||
Alder Stefano
|
||||
Alessandro Senese
|
||||
Alexander Gillberg
|
||||
Alexander Koppe
|
||||
Alice Robinson
|
||||
Alexander Erlemann
|
||||
alex clavelle
|
||||
Allan Davis
|
||||
Allen Schade
|
||||
Andreas Evers
|
||||
Andreas Krampitz
|
||||
Anthony Bongiovanni
|
||||
Arbor Interactive
|
||||
André Simões
|
||||
Andrew Thomas
|
||||
Anthony Staunton
|
||||
AP Condomines
|
||||
Arda Erol
|
||||
Armin Preiml
|
||||
Arseniy M
|
||||
Arthur S. Muszynski
|
||||
Asger
|
||||
Aubrey Falconer
|
||||
Avencherus
|
||||
Bailey
|
||||
B A
|
||||
Balázs Batári
|
||||
Bastian Böhm
|
||||
Benedikt
|
||||
Ben G
|
||||
Ben Phelan
|
||||
Ben Vercammen
|
||||
Bernd Jänichen
|
||||
Black Block
|
||||
Blair Allen
|
||||
Brandon
|
||||
Brandon Schaffer
|
||||
Bryan Stevenson
|
||||
Carl Winder
|
||||
Bobby CC Wong
|
||||
brian
|
||||
bugcaptor
|
||||
Burney Waring
|
||||
Cameron Meyer
|
||||
Carl van der Geest
|
||||
Carwyn Edwards
|
||||
Cassidy James
|
||||
Chris Brown
|
||||
Chris Chapin
|
||||
Christian Baune
|
||||
Christian Winter
|
||||
Christoffer Sundbom
|
||||
Chris Wilson
|
||||
Collin Shooltz
|
||||
Connor Hill
|
||||
Christoph Brodmann
|
||||
Christopher Schmitt
|
||||
Christoph Woinke
|
||||
Clay Heaton
|
||||
Curt King
|
||||
Dancin Liao
|
||||
Daniel Johnson
|
||||
DanielMaximiano
|
||||
Daniel Reed
|
||||
David Cravens
|
||||
Daniel Kimblad
|
||||
Daniel Pontillo
|
||||
David May
|
||||
David Woodard
|
||||
DiCola Jamn
|
||||
Dominic Cooney
|
||||
Dominik Wetzel
|
||||
Donn Eddy
|
||||
Donovan Hutcheon
|
||||
Dragontrapper
|
||||
Dr Ewan Murray
|
||||
Duobix
|
||||
Duodecimal
|
||||
Dylan Todd
|
||||
Eduardo Teixeira
|
||||
Edward Herbert
|
||||
Edward Moulsdale
|
||||
Edward Swartz
|
||||
Egon Elbre
|
||||
Elias Nykrem
|
||||
Elmeri '- Duy Kevin Nguyen
|
||||
Emanuel Kotzayan
|
||||
Eric Martini
|
||||
Eric McCarthy
|
||||
Ephemeral
|
||||
Eric Ellingson
|
||||
Eric Rogers
|
||||
Eric Williams
|
||||
Fabian Becker
|
||||
fengjiongmax
|
||||
Foomf
|
||||
G3Dev sàrl
|
||||
Gerrit Großkopf
|
||||
Grant Clarke
|
||||
Erkki Seppälä
|
||||
Evan Rose
|
||||
Fancy Ants Studios
|
||||
Fekinox
|
||||
Felix Kollmann
|
||||
Flaredown
|
||||
Forty Doubleu
|
||||
FuDiggity
|
||||
Gadzhi Kharkharov
|
||||
gamedev by Celio
|
||||
Gary Thomas
|
||||
George Marques
|
||||
GiulianoB
|
||||
Gordian Arragon
|
||||
Greg Olson
|
||||
GREGORY C FEIN
|
||||
Greg P
|
||||
Greyson Richey
|
||||
Grid
|
||||
Guldoman
|
||||
Haley Aycock
|
||||
Hal A
|
||||
Heribert Hirth
|
||||
Hiroshi Naruo
|
||||
Hudson Thorpe-Doubble
|
||||
Hunter Jones
|
||||
ialex32x
|
||||
Igor Buzatovic
|
||||
Hylpher
|
||||
Ichiro Dohi
|
||||
Iiari
|
||||
iKlem
|
||||
IndustrialRobot
|
||||
Jaiden Gerig
|
||||
Jaime Ruiz-Borau Vizárraga
|
||||
Jako Danar
|
||||
James A F Manley
|
||||
Janders
|
||||
Jannik Gröger
|
||||
JARKKO PARVIAINEN
|
||||
Jarrod Davis
|
||||
Jeff Hungerford
|
||||
Jennifer Graves
|
||||
Jeremy Kahn
|
||||
Jesse Dubay
|
||||
Joel Fivat
|
||||
Joel Höglund
|
||||
Joel Setterberg
|
||||
Johannes Wuensch
|
||||
John Gabriel
|
||||
Jomei Jackson
|
||||
Jonas Rudlang
|
||||
Jonas Yamazaki
|
||||
Jonathan G
|
||||
Jonathan Nieto
|
||||
Jonathon
|
||||
Jon Bonazza
|
||||
Jon Sully
|
||||
Josh 'Cheeseness' Bush
|
||||
Jorge Caballero
|
||||
Jose Aleman
|
||||
Jose C. Rubio
|
||||
Joseph Catrambone
|
||||
Juanfran
|
||||
Juan Negrier
|
||||
Judd
|
||||
Julian Murgia
|
||||
Kajornthep Piyanun
|
||||
KC Chan
|
||||
Kevin Boyer
|
||||
JungleRobba
|
||||
Justin Spedding
|
||||
KaDokta
|
||||
Kauzig
|
||||
Keedong Park
|
||||
Keith Bradner
|
||||
Kevin McPhillips
|
||||
kickmaniac
|
||||
Kiyohiro Kawamura (kyorohiro)
|
||||
Kjetil Haugland
|
||||
Klagsam
|
||||
KR McGinley
|
||||
KsyTek Games
|
||||
Kuan Cheang
|
||||
kycho
|
||||
Kyle Appelgate
|
||||
Laurent Tréguier
|
||||
Leonardo Dimano
|
||||
Levi Lindsey
|
||||
Linus Lind Lundgren
|
||||
Luis Moraes
|
||||
Macil
|
||||
magodev
|
||||
Lionel Gaillard
|
||||
Luigi Renna
|
||||
LunaticInAHat
|
||||
Lurkars
|
||||
Major Haul
|
||||
Malcolm
|
||||
Malik Ahmed
|
||||
Malik Nejer
|
||||
Markus Michael Egger
|
||||
Matthias Grandis
|
||||
Matt Welke
|
||||
Martin Holas
|
||||
Martin Liška
|
||||
Marvin
|
||||
Mathieu Rimelen
|
||||
Matt Edwards
|
||||
Matthew Little
|
||||
Matti Pohjanvirta
|
||||
Maxime Blade
|
||||
Maxwell
|
||||
medecau
|
||||
Mertcan Mermerkaya
|
||||
Megasploot
|
||||
Melissa Mears
|
||||
mewin
|
||||
mhilbrunner
|
||||
Michael Dürwald
|
||||
Michael Gringauz
|
||||
Michael Haney
|
||||
Michael Labbe
|
||||
Mikael Olsson
|
||||
Mikayla Hutchinson
|
||||
Mikayla
|
||||
Mike Birkhead
|
||||
Mike Cunningham
|
||||
Mitchell J. Wagner
|
||||
MoM
|
||||
Moritz Laass
|
||||
Moritz Weissenberger
|
||||
Nathan Fish
|
||||
Natrim
|
||||
nee
|
||||
Neil Blakey-Milner
|
||||
Neil Wang
|
||||
Nerdforge
|
||||
Nick Pavlica
|
||||
Niclas Eriksen
|
||||
Nicholas
|
||||
Nicholas Girga
|
||||
Nick Macholl
|
||||
Nicolás Montaña
|
||||
Nicolas SAN AGUSTIN
|
||||
Nima Farid
|
||||
NZ
|
||||
Oleg Reva
|
||||
Olivier
|
||||
Omar Delarosa
|
||||
Oscar Norlander
|
||||
Pan Ip
|
||||
Patrick Nafarrete
|
||||
Paul Gieske
|
||||
Paul Mason
|
||||
Paweł Kowal
|
||||
Phillip Ryals
|
||||
Pierre-Igor Berthet
|
||||
Pietro Vertechi
|
||||
Piotr Kaczmarski
|
||||
Prokhorenko Leonid
|
||||
Psyagnostic
|
||||
Rafael
|
||||
Pedro Assuncao
|
||||
Penguin
|
||||
Petrus Prinsloo
|
||||
Philip Cohoe
|
||||
Point08
|
||||
Rad Cat
|
||||
Rafa Laguna
|
||||
rainerLinux
|
||||
Raphael Leroux
|
||||
Remi Rampin
|
||||
Rémi Verschelde
|
||||
Ricardo Alcantara
|
||||
Richman Stewart
|
||||
Richard Diss
|
||||
Richard Ivánek
|
||||
Robert Farr (Larington)
|
||||
Roger Burgess
|
||||
Robert Hernandez
|
||||
Roberto Sánchez
|
||||
Roger Smith
|
||||
Roland Rząsa
|
||||
Roman Tinkov
|
||||
Ryan Cheung
|
||||
Ronald Ho Hip (CrimsonZA)
|
||||
Ronan
|
||||
Ryan Groom
|
||||
Ryan Hentz
|
||||
Sam.C
|
||||
Sam Edson
|
||||
Samuele Zolfanelli
|
||||
Sasori Olkof
|
||||
Scott D. Yelich
|
||||
Scott Longley
|
||||
Sebastian Michailidis
|
||||
Sergio Mello-Grand
|
||||
sgnsajgon
|
||||
Shane
|
||||
Shane Sicienski
|
||||
Shane Spoor
|
||||
Siim Raidma
|
||||
Simon Wenner
|
||||
Sootstone
|
||||
Theo Cranmore
|
||||
Thibault Barbaroux
|
||||
Thomas Bell
|
||||
Thomas Holmes
|
||||
SK
|
||||
smbe19
|
||||
smo1704
|
||||
Svenne Krap
|
||||
Terry
|
||||
tezuvholovdr
|
||||
thomas
|
||||
Thomas Bechtold
|
||||
Thomas Detoy
|
||||
Thomas Kelly
|
||||
Thomas Kurz
|
||||
tiansheng li
|
||||
Tim
|
||||
Tim Drumheller
|
||||
Tom Larrow
|
||||
Timothy B. MacDonald
|
||||
Tobbun
|
||||
Torgeir Lilleskog
|
||||
Torsten Crass
|
||||
Travis O'Brien
|
||||
Trent Skinner
|
||||
Troy Bonneau
|
||||
Tryggve Sollid
|
||||
Turgut Temucin
|
||||
Tyler Compton
|
||||
Tyler Stafos
|
||||
UltyX
|
||||
Vaiktorg
|
||||
Vaughan Ling
|
||||
Victor
|
||||
Viktor Ferenczi
|
||||
Vigilant Watch
|
||||
Vincent Cloutier
|
||||
waka nya
|
||||
Wayne Haak
|
||||
werner mendizabal
|
||||
William Gervasio
|
||||
Wiley Thompson
|
||||
Will
|
||||
William Hogben
|
||||
Wout Standaert
|
||||
Wyatt Goodin
|
||||
Yegor
|
||||
Yuri Sizov
|
||||
|
||||
## Bronze donors
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
Godot Logo (C) Andrea Calabró
|
||||
Distributed under the terms of the Creative Commons Attribution License
|
||||
version 3.0 (CC-BY 3.0) <https://creativecommons.org/licenses/by/3.0/legalcode>.
|
||||
Godot Engine Logo
|
||||
Copyright (c) 2017 Andrea Calabró
|
||||
|
||||
This work is licensed under a Creative Commons Attribution 4.0 International
|
||||
License (CC-BY-4.0 International) <https://creativecommons.org/licenses/by/4.0/>.
|
||||
|
|
15
SConstruct
15
SConstruct
|
@ -5,7 +5,6 @@ EnsureSConsVersion(0, 98, 1)
|
|||
# System
|
||||
import glob
|
||||
import os
|
||||
import string
|
||||
import sys
|
||||
|
||||
# Local
|
||||
|
@ -83,8 +82,6 @@ env_base.android_permission_chunk = ""
|
|||
env_base.android_appattributes_chunk = ""
|
||||
env_base.disabled_modules = []
|
||||
env_base.use_ptrcall = False
|
||||
env_base.split_drivers = False
|
||||
env_base.split_modules = False
|
||||
env_base.module_version_string = ""
|
||||
env_base.msvc = False
|
||||
|
||||
|
@ -158,6 +155,7 @@ opts.Add(BoolVariable('dev', "If yes, alias for verbose=yes warnings=all", False
|
|||
opts.Add('extra_suffix', "Custom extra suffix added to the base filename of all generated binary files", '')
|
||||
opts.Add(BoolVariable('vsproj', "Generate a Visual Studio solution", False))
|
||||
opts.Add(EnumVariable('macports_clang', "Build using Clang from MacPorts", 'no', ('no', '5.0', 'devel')))
|
||||
opts.Add(BoolVariable('split_libmodules', "Split intermediate libmodules.a in smaller chunks to prevent exceeding linker command line size (forced to True when using MinGW)", False))
|
||||
opts.Add(BoolVariable('disable_3d', "Disable 3D nodes for a smaller executable", False))
|
||||
opts.Add(BoolVariable('disable_advanced_gui', "Disable advanced GUI nodes and behaviors", False))
|
||||
opts.Add(BoolVariable('no_editor_splash', "Don't use the custom splash screen for the editor", False))
|
||||
|
@ -181,7 +179,6 @@ opts.Add(BoolVariable('builtin_opus', "Use the built-in Opus library", True))
|
|||
opts.Add(BoolVariable('builtin_pcre2', "Use the built-in PCRE2 library)", True))
|
||||
opts.Add(BoolVariable('builtin_recast', "Use the built-in Recast library", True))
|
||||
opts.Add(BoolVariable('builtin_squish', "Use the built-in squish library", True))
|
||||
opts.Add(BoolVariable('builtin_thekla_atlas', "Use the built-in thekla_altas library", True))
|
||||
opts.Add(BoolVariable('builtin_xatlas', "Use the built-in xatlas library", True))
|
||||
opts.Add(BoolVariable('builtin_zlib', "Use the built-in zlib library", True))
|
||||
opts.Add(BoolVariable('builtin_zstd', "Use the built-in Zstd library", True))
|
||||
|
@ -342,12 +339,18 @@ if selected_platform in platform_list:
|
|||
shadow_local_warning = []
|
||||
all_plus_warnings = ['-Wwrite-strings']
|
||||
|
||||
if methods.use_gcc(env):
|
||||
if methods.using_gcc(env):
|
||||
version = methods.get_compiler_version(env)
|
||||
if version != None and version[0] >= '7':
|
||||
shadow_local_warning = ['-Wshadow-local']
|
||||
|
||||
if (env["warnings"] == 'extra'):
|
||||
env.Append(CCFLAGS=['-Wall', '-Wextra'] + all_plus_warnings + shadow_local_warning)
|
||||
# FIXME: enable -Wclobbered once #26351 is fixed
|
||||
# Note: enable -Wimplicit-fallthrough for Clang (already part of -Wextra for GCC)
|
||||
# once we switch to C++11 or later (necessary for our FALLTHROUGH macro).
|
||||
env.Append(CCFLAGS=['-Wall', '-Wextra', '-Wno-unused-parameter'] + all_plus_warnings + shadow_local_warning)
|
||||
if methods.using_gcc(env):
|
||||
env['CCFLAGS'] += ['-Wno-clobbered']
|
||||
elif (env["warnings"] == 'all'):
|
||||
env.Append(CCFLAGS=['-Wall'] + shadow_local_warning)
|
||||
elif (env["warnings"] == 'moderate'):
|
||||
|
|
|
@ -121,6 +121,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",
|
||||
|
|
|
@ -792,7 +792,7 @@ Dictionary _OS::get_datetime_from_unix_time(int64_t unix_time_val) const {
|
|||
|
||||
size_t imonth = 0;
|
||||
|
||||
while (dayno >= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth]) {
|
||||
while ((unsigned long)dayno >= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth]) {
|
||||
dayno -= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth];
|
||||
imonth++;
|
||||
}
|
||||
|
@ -1908,18 +1908,18 @@ bool _File::file_exists(const String &p_name) const {
|
|||
return FileAccess::exists(p_name);
|
||||
}
|
||||
|
||||
void _File::store_var(const Variant &p_var) {
|
||||
void _File::store_var(const Variant &p_var, bool p_full_objects) {
|
||||
|
||||
ERR_FAIL_COND(!f);
|
||||
int len;
|
||||
Error err = encode_variant(p_var, NULL, len);
|
||||
Error err = encode_variant(p_var, NULL, len, p_full_objects);
|
||||
ERR_FAIL_COND(err != OK);
|
||||
|
||||
PoolVector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
PoolVector<uint8_t>::Write w = buff.write();
|
||||
|
||||
err = encode_variant(p_var, &w[0], len);
|
||||
err = encode_variant(p_var, &w[0], len, p_full_objects);
|
||||
ERR_FAIL_COND(err != OK);
|
||||
w = PoolVector<uint8_t>::Write();
|
||||
|
||||
|
@ -1927,7 +1927,7 @@ void _File::store_var(const Variant &p_var) {
|
|||
store_buffer(buff);
|
||||
}
|
||||
|
||||
Variant _File::get_var() const {
|
||||
Variant _File::get_var(bool p_allow_objects) const {
|
||||
|
||||
ERR_FAIL_COND_V(!f, Variant());
|
||||
uint32_t len = get_32();
|
||||
|
@ -1937,7 +1937,7 @@ Variant _File::get_var() const {
|
|||
PoolVector<uint8_t>::Read r = buff.read();
|
||||
|
||||
Variant v;
|
||||
Error err = decode_variant(v, &r[0], len);
|
||||
Error err = decode_variant(v, &r[0], len, NULL, p_allow_objects);
|
||||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
return v;
|
||||
|
@ -1980,7 +1980,7 @@ void _File::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_endian_swap"), &_File::get_endian_swap);
|
||||
ClassDB::bind_method(D_METHOD("set_endian_swap", "enable"), &_File::set_endian_swap);
|
||||
ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error);
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &_File::get_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &_File::get_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("store_8", "value"), &_File::store_8);
|
||||
ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16);
|
||||
|
@ -1993,7 +1993,7 @@ void _File::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("store_line", "line"), &_File::store_line);
|
||||
ClassDB::bind_method(D_METHOD("store_csv_line", "values", "delim"), &_File::store_csv_line, DEFVAL(","));
|
||||
ClassDB::bind_method(D_METHOD("store_string", "string"), &_File::store_string);
|
||||
ClassDB::bind_method(D_METHOD("store_var", "value"), &_File::store_var);
|
||||
ClassDB::bind_method(D_METHOD("store_var", "value", "full_objects"), &_File::store_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("store_pascal_string", "string"), &_File::store_pascal_string);
|
||||
ClassDB::bind_method(D_METHOD("get_pascal_string"), &_File::get_pascal_string);
|
||||
|
@ -2223,17 +2223,17 @@ _Marshalls *_Marshalls::get_singleton() {
|
|||
return singleton;
|
||||
}
|
||||
|
||||
String _Marshalls::variant_to_base64(const Variant &p_var) {
|
||||
String _Marshalls::variant_to_base64(const Variant &p_var, bool p_full_objects) {
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(p_var, NULL, len);
|
||||
Error err = encode_variant(p_var, NULL, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(err != OK, "");
|
||||
|
||||
PoolVector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
PoolVector<uint8_t>::Write w = buff.write();
|
||||
|
||||
err = encode_variant(p_var, &w[0], len);
|
||||
err = encode_variant(p_var, &w[0], len, p_full_objects);
|
||||
ERR_FAIL_COND_V(err != OK, "");
|
||||
|
||||
int b64len = len / 3 * 4 + 4 + 1;
|
||||
|
@ -2249,7 +2249,7 @@ String _Marshalls::variant_to_base64(const Variant &p_var) {
|
|||
return ret;
|
||||
};
|
||||
|
||||
Variant _Marshalls::base64_to_variant(const String &p_str) {
|
||||
Variant _Marshalls::base64_to_variant(const String &p_str, bool p_allow_objects) {
|
||||
|
||||
int strlen = p_str.length();
|
||||
CharString cstr = p_str.ascii();
|
||||
|
@ -2261,7 +2261,7 @@ Variant _Marshalls::base64_to_variant(const String &p_str) {
|
|||
int len = base64_decode((char *)(&w[0]), (char *)cstr.get_data(), strlen);
|
||||
|
||||
Variant v;
|
||||
Error err = decode_variant(v, &w[0], len);
|
||||
Error err = decode_variant(v, &w[0], len, NULL, p_allow_objects);
|
||||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
return v;
|
||||
|
@ -2340,8 +2340,8 @@ String _Marshalls::base64_to_utf8(const String &p_str) {
|
|||
|
||||
void _Marshalls::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("variant_to_base64", "variant"), &_Marshalls::variant_to_base64);
|
||||
ClassDB::bind_method(D_METHOD("base64_to_variant", "base64_str"), &_Marshalls::base64_to_variant);
|
||||
ClassDB::bind_method(D_METHOD("variant_to_base64", "variant", "full_objects"), &_Marshalls::variant_to_base64, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("base64_to_variant", "base64_str", "allow_objects"), &_Marshalls::base64_to_variant, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("raw_to_base64", "array"), &_Marshalls::raw_to_base64);
|
||||
ClassDB::bind_method(D_METHOD("base64_to_raw", "base64_str"), &_Marshalls::base64_to_raw);
|
||||
|
|
|
@ -463,7 +463,7 @@ public:
|
|||
double get_double() const;
|
||||
real_t get_real() const;
|
||||
|
||||
Variant get_var() const;
|
||||
Variant get_var(bool p_allow_objects = false) const;
|
||||
|
||||
PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes
|
||||
String get_line() const;
|
||||
|
@ -500,7 +500,7 @@ public:
|
|||
|
||||
void store_buffer(const PoolVector<uint8_t> &p_buffer); ///< store an array of bytes
|
||||
|
||||
void store_var(const Variant &p_var);
|
||||
void store_var(const Variant &p_var, bool p_full_objects = false);
|
||||
|
||||
bool file_exists(const String &p_name) const; ///< return true if a file exists
|
||||
|
||||
|
@ -569,8 +569,8 @@ protected:
|
|||
public:
|
||||
static _Marshalls *get_singleton();
|
||||
|
||||
String variant_to_base64(const Variant &p_var);
|
||||
Variant base64_to_variant(const String &p_str);
|
||||
String variant_to_base64(const Variant &p_var, bool p_full_objects = false);
|
||||
Variant base64_to_variant(const String &p_str, bool p_allow_objects = false);
|
||||
|
||||
String raw_to_base64(const PoolVector<uint8_t> &p_arr);
|
||||
PoolVector<uint8_t> base64_to_raw(const String &p_str);
|
||||
|
|
|
@ -249,6 +249,11 @@ void ClassDB::set_current_api(APIType p_api) {
|
|||
current_api = p_api;
|
||||
}
|
||||
|
||||
ClassDB::APIType ClassDB::get_current_api() {
|
||||
|
||||
return current_api;
|
||||
}
|
||||
|
||||
HashMap<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
||||
HashMap<StringName, StringName> ClassDB::resource_base_extensions;
|
||||
HashMap<StringName, StringName> ClassDB::compat_classes;
|
||||
|
|
|
@ -371,6 +371,7 @@ public:
|
|||
static void init();
|
||||
|
||||
static void set_current_api(APIType p_api);
|
||||
static APIType get_current_api();
|
||||
static void cleanup();
|
||||
};
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
*/
|
||||
|
||||
enum Error {
|
||||
OK,
|
||||
OK, // (0)
|
||||
FAILED, ///< Generic fail error
|
||||
ERR_UNAVAILABLE, ///< What is requested is unsupported/unavailable
|
||||
ERR_UNCONFIGURED, ///< The object being used hasn't been properly set up yet
|
||||
|
@ -72,7 +72,7 @@ enum Error {
|
|||
ERR_INVALID_DATA, ///< Data passed is invalid (30)
|
||||
ERR_INVALID_PARAMETER, ///< Parameter passed is invalid
|
||||
ERR_ALREADY_EXISTS, ///< When adding, item already exists
|
||||
ERR_DOES_NOT_EXIST, ///< When retrieving/erasing, it item does not exist
|
||||
ERR_DOES_NOT_EXIST, ///< When retrieving/erasing, if item does not exist
|
||||
ERR_DATABASE_CANT_READ, ///< database is full
|
||||
ERR_DATABASE_CANT_WRITE, ///< database is full (35)
|
||||
ERR_COMPILATION_FAILED,
|
||||
|
|
|
@ -470,47 +470,55 @@ void register_global_constants() {
|
|||
|
||||
// error list
|
||||
|
||||
BIND_GLOBAL_ENUM_CONSTANT(OK);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(FAILED); ///< Generic fail error
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAVAILABLE); ///< What is requested is unsupported/unavailable
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNCONFIGURED); ///< The object being used hasn't been properly set up yet
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAUTHORIZED); ///< Missing credentials for requested resource
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARAMETER_RANGE_ERROR); ///< Parameter given out of range
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_OUT_OF_MEMORY); ///< Out of memory
|
||||
BIND_GLOBAL_ENUM_CONSTANT(OK); // (0)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(FAILED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAVAILABLE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNCONFIGURED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAUTHORIZED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARAMETER_RANGE_ERROR); // (5)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_OUT_OF_MEMORY);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_NOT_FOUND);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_BAD_DRIVE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_BAD_PATH);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_NO_PERMISSION);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_NO_PERMISSION); // (10)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_ALREADY_IN_USE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_OPEN);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_WRITE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_READ);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_UNRECOGNIZED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_UNRECOGNIZED); // (15)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CORRUPT);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_MISSING_DEPENDENCIES);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_EOF);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_OPEN); ///< Can't open a resource/socket/file
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_CREATE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARSE_ERROR);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_OPEN);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_CREATE); // (20)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_QUERY_FAILED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_IN_USE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_LOCKED); ///< resource is locked
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_LOCKED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_TIMEOUT);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_CONNECT); // (25)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_RESOLVE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CONNECTION_ERROR);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_ACQUIRE_RESOURCE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DATA); ///< Data passed is invalid
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_PARAMETER); ///< Parameter passed is invalid
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_EXISTS); ///< When adding ), item already exists
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DOES_NOT_EXIST); ///< When retrieving/erasing ), it item does not exist
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_READ); ///< database is full
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_WRITE); ///< database is full
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_FORK);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DATA); // (30)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_PARAMETER);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_EXISTS);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DOES_NOT_EXIST);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_READ);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_WRITE); // (35)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_COMPILATION_FAILED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_METHOD_NOT_FOUND);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_LINK_FAILED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_SCRIPT_FAILED);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CYCLIC_LINK);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CYCLIC_LINK); // (40)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DECLARATION);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DUPLICATE_SYMBOL);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARSE_ERROR);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_BUSY);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_HELP); ///< user requested help!!
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_BUG); ///< a bug in the software certainly happened ), due to a double check failing or unexpected behavior.
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_SKIP); // (45)
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_HELP);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_BUG);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PRINTER_ON_FIRE);
|
||||
|
||||
BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_HINT_NONE);
|
||||
BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_HINT_RANGE);
|
||||
|
|
|
@ -175,7 +175,9 @@ int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p
|
|||
} break;
|
||||
case MODE_ZSTD: {
|
||||
ZSTD_DCtx *dctx = ZSTD_createDCtx();
|
||||
if (zstd_long_distance_matching) ZSTD_DCtx_setMaxWindowSize(dctx, (size_t)1 << zstd_window_log_size);
|
||||
if (zstd_long_distance_matching) {
|
||||
ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, zstd_window_log_size);
|
||||
}
|
||||
int ret = ZSTD_decompressDCtx(dctx, p_dst, p_dst_max_size, p_src, p_src_size);
|
||||
ZSTD_freeDCtx(dctx);
|
||||
return ret;
|
||||
|
@ -189,4 +191,4 @@ int Compression::zlib_level = Z_DEFAULT_COMPRESSION;
|
|||
int Compression::gzip_level = Z_DEFAULT_COMPRESSION;
|
||||
int Compression::zstd_level = 3;
|
||||
bool Compression::zstd_long_distance_matching = false;
|
||||
int Compression::zstd_window_log_size = 27;
|
||||
int Compression::zstd_window_log_size = 27; // ZSTD_WINDOWLOG_LIMIT_DEFAULT
|
||||
|
|
|
@ -208,7 +208,8 @@ void FileAccessCompressed::seek(size_t p_position) {
|
|||
if (p_position == read_total) {
|
||||
at_end = true;
|
||||
} else {
|
||||
|
||||
at_end = false;
|
||||
read_eof = false;
|
||||
int block_idx = p_position / block_size;
|
||||
if (block_idx != read_block) {
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ void PackedData::add_path(const String &pkg_path, const String &path, uint64_t o
|
|||
}
|
||||
}
|
||||
String filename = path.get_file();
|
||||
// Don't add as a file if the path points to a directoryy
|
||||
// Don't add as a file if the path points to a directory
|
||||
if (!filename.empty()) {
|
||||
cd->files.insert(filename);
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ int FileAccessPack::get_buffer(uint8_t *p_dst, int p_length) const {
|
|||
if (eof)
|
||||
return 0;
|
||||
|
||||
int64_t to_read = p_length;
|
||||
uint64_t to_read = p_length;
|
||||
if (to_read + pos > pf.size) {
|
||||
eof = true;
|
||||
to_read = int64_t(pf.size) - int64_t(pos);
|
||||
|
@ -463,11 +463,15 @@ String DirAccessPack::get_current_dir() {
|
|||
|
||||
bool DirAccessPack::file_exists(String p_file) {
|
||||
|
||||
p_file = fix_path(p_file);
|
||||
|
||||
return current->files.has(p_file);
|
||||
}
|
||||
|
||||
bool DirAccessPack::dir_exists(String p_dir) {
|
||||
|
||||
p_dir = fix_path(p_dir);
|
||||
|
||||
return current->subdirs.has(p_dir);
|
||||
}
|
||||
|
||||
|
|
|
@ -346,6 +346,12 @@ Error HTTPClient::poll() {
|
|||
} else {
|
||||
// We are already handshaking, which means we can use your already active SSL connection
|
||||
ssl = static_cast<Ref<StreamPeerSSL> >(connection);
|
||||
if (ssl.is_null()) {
|
||||
close();
|
||||
status = STATUS_SSL_HANDSHAKE_ERROR;
|
||||
return ERR_CANT_CONNECT;
|
||||
}
|
||||
|
||||
ssl->poll(); // Try to finish the handshake
|
||||
}
|
||||
|
||||
|
|
|
@ -37,13 +37,11 @@
|
|||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define _S(a) ((int32_t)a)
|
||||
#define ERR_FAIL_ADD_OF(a, b, err) ERR_FAIL_COND_V(_S(b) < 0 || _S(a) < 0 || _S(a) > INT_MAX - _S(b), err)
|
||||
#define ERR_FAIL_MUL_OF(a, b, err) ERR_FAIL_COND_V(_S(a) < 0 || _S(b) <= 0 || _S(a) > INT_MAX / _S(b), err)
|
||||
|
||||
void EncodedObjectAsID::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_object_id", "id"), &EncodedObjectAsID::set_object_id);
|
||||
ClassDB::bind_method(D_METHOD("get_object_id"), &EncodedObjectAsID::get_object_id);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "object_id"), "set_object_id", "get_object_id");
|
||||
}
|
||||
|
||||
void EncodedObjectAsID::set_object_id(ObjectID p_id) {
|
||||
|
@ -59,6 +57,10 @@ EncodedObjectAsID::EncodedObjectAsID() :
|
|||
id(0) {
|
||||
}
|
||||
|
||||
#define _S(a) ((int32_t)a)
|
||||
#define ERR_FAIL_ADD_OF(a, b, err) ERR_FAIL_COND_V(_S(b) < 0 || _S(a) < 0 || _S(a) > INT_MAX - _S(b), err)
|
||||
#define ERR_FAIL_MUL_OF(a, b, err) ERR_FAIL_COND_V(_S(a) < 0 || _S(b) <= 0 || _S(a) > INT_MAX / _S(b), err)
|
||||
|
||||
#define ENCODE_MASK 0xFF
|
||||
#define ENCODE_FLAG_64 1 << 16
|
||||
#define ENCODE_FLAG_OBJECT_AS_ID 1 << 16
|
||||
|
@ -794,7 +796,7 @@ static void _encode_string(const String &p_string, uint8_t *&buf, int &r_len) {
|
|||
}
|
||||
}
|
||||
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_object_as_id) {
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects) {
|
||||
|
||||
uint8_t *buf = r_buffer;
|
||||
|
||||
|
@ -819,7 +821,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
}
|
||||
} break;
|
||||
case Variant::OBJECT: {
|
||||
if (p_object_as_id) {
|
||||
if (!p_full_objects) {
|
||||
flags |= ENCODE_FLAG_OBJECT_AS_ID;
|
||||
}
|
||||
} break;
|
||||
|
@ -1086,22 +1088,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
} break;
|
||||
case Variant::OBJECT: {
|
||||
|
||||
if (p_object_as_id) {
|
||||
if (p_full_objects) {
|
||||
|
||||
if (buf) {
|
||||
|
||||
Object *obj = p_variant;
|
||||
ObjectID id = 0;
|
||||
if (obj && ObjectDB::instance_validate(obj)) {
|
||||
id = obj->get_instance_id();
|
||||
}
|
||||
|
||||
encode_uint64(id, buf);
|
||||
}
|
||||
|
||||
r_len += 8;
|
||||
|
||||
} else {
|
||||
Object *obj = p_variant;
|
||||
if (!obj) {
|
||||
if (buf) {
|
||||
|
@ -1139,7 +1127,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
_encode_string(E->get().name, buf, r_len);
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(obj->get(E->get().name), buf, len, p_object_as_id);
|
||||
Error err = encode_variant(obj->get(E->get().name), buf, len, p_full_objects);
|
||||
if (err)
|
||||
return err;
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
|
@ -1148,6 +1136,19 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
buf += len;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (buf) {
|
||||
|
||||
Object *obj = p_variant;
|
||||
ObjectID id = 0;
|
||||
if (obj && ObjectDB::instance_validate(obj)) {
|
||||
id = obj->get_instance_id();
|
||||
}
|
||||
|
||||
encode_uint64(id, buf);
|
||||
}
|
||||
|
||||
r_len += 8;
|
||||
}
|
||||
|
||||
} break;
|
||||
|
@ -1180,14 +1181,14 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
r_len++; //pad
|
||||
*/
|
||||
int len;
|
||||
encode_variant(E->get(), buf, len, p_object_as_id);
|
||||
encode_variant(E->get(), buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
buf += len;
|
||||
Variant *v = d.getptr(E->get());
|
||||
ERR_FAIL_COND_V(!v, ERR_BUG);
|
||||
encode_variant(*v, buf, len, p_object_as_id);
|
||||
encode_variant(*v, buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
|
@ -1209,7 +1210,7 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
for (int i = 0; i < v.size(); i++) {
|
||||
|
||||
int len;
|
||||
encode_variant(v.get(i), buf, len, p_object_as_id);
|
||||
encode_variant(v.get(i), buf, len, p_full_objects);
|
||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||
r_len += len;
|
||||
if (buf)
|
||||
|
@ -1229,11 +1230,15 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
|||
buf += 4;
|
||||
PoolVector<uint8_t>::Read r = data.read();
|
||||
copymem(buf, &r[0], datalen * datasize);
|
||||
buf += datalen * datasize;
|
||||
}
|
||||
|
||||
r_len += 4 + datalen * datasize;
|
||||
while (r_len % 4)
|
||||
while (r_len % 4) {
|
||||
r_len++;
|
||||
if (buf)
|
||||
*(buf++) = 0;
|
||||
}
|
||||
|
||||
} break;
|
||||
case Variant::POOL_INT_ARRAY: {
|
||||
|
|
|
@ -199,7 +199,7 @@ public:
|
|||
EncodedObjectAsID();
|
||||
};
|
||||
|
||||
Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len = NULL, bool p_allow_objects = true);
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_object_as_id = false);
|
||||
Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len = NULL, bool p_allow_objects = false);
|
||||
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects = false);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -46,7 +46,8 @@ _FORCE_INLINE_ bool _should_call_local(MultiplayerAPI::RPCMode mode, bool is_mas
|
|||
case MultiplayerAPI::RPC_MODE_MASTERSYNC: {
|
||||
if (is_master)
|
||||
r_skip_rpc = true; // I am the master, so skip remote call.
|
||||
} // Do not break, fall over to other sync.
|
||||
FALLTHROUGH;
|
||||
}
|
||||
case MultiplayerAPI::RPC_MODE_REMOTESYNC:
|
||||
case MultiplayerAPI::RPC_MODE_PUPPETSYNC: {
|
||||
// Call it, sync always results in a local call.
|
||||
|
@ -282,8 +283,9 @@ void MultiplayerAPI::_process_rpc(Node *p_node, const StringName &p_name, int p_
|
|||
rpc_mode = p_node->get_script_instance()->get_rpc_mode(p_name);
|
||||
}
|
||||
|
||||
ERR_EXPLAIN("RPC '" + String(p_name) + "' is not allowed from: " + itos(p_from) + ". Mode is " + itos((int)rpc_mode) + ", master is " + itos(p_node->get_network_master()) + ".");
|
||||
ERR_FAIL_COND(!_can_call_mode(p_node, rpc_mode, p_from));
|
||||
bool can_call = _can_call_mode(p_node, rpc_mode, p_from);
|
||||
ERR_EXPLAIN("RPC '" + String(p_name) + "' is not allowed on node " + p_node->get_path() + " from: " + itos(p_from) + ". Mode is " + itos((int)rpc_mode) + ", master is " + itos(p_node->get_network_master()) + ".");
|
||||
ERR_FAIL_COND(!can_call);
|
||||
|
||||
int argc = p_packet[p_offset];
|
||||
Vector<Variant> args;
|
||||
|
@ -299,7 +301,7 @@ void MultiplayerAPI::_process_rpc(Node *p_node, const StringName &p_name, int p_
|
|||
ERR_FAIL_COND(p_offset >= p_packet_len);
|
||||
|
||||
int vlen;
|
||||
Error err = decode_variant(args.write[i], &p_packet[p_offset], p_packet_len - p_offset, &vlen);
|
||||
Error err = decode_variant(args.write[i], &p_packet[p_offset], p_packet_len - p_offset, &vlen, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Invalid packet received. Unable to decode RPC argument.");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
|
||||
|
@ -331,11 +333,12 @@ void MultiplayerAPI::_process_rset(Node *p_node, const StringName &p_name, int p
|
|||
rset_mode = p_node->get_script_instance()->get_rset_mode(p_name);
|
||||
}
|
||||
|
||||
ERR_EXPLAIN("RSET '" + String(p_name) + "' is not allowed from: " + itos(p_from) + ". Mode is " + itos((int)rset_mode) + ", master is " + itos(p_node->get_network_master()) + ".");
|
||||
ERR_FAIL_COND(!_can_call_mode(p_node, rset_mode, p_from));
|
||||
bool can_call = _can_call_mode(p_node, rset_mode, p_from);
|
||||
ERR_EXPLAIN("RSET '" + String(p_name) + "' is not allowed on node " + p_node->get_path() + " from: " + itos(p_from) + ". Mode is " + itos((int)rset_mode) + ", master is " + itos(p_node->get_network_master()) + ".");
|
||||
ERR_FAIL_COND(!can_call);
|
||||
|
||||
Variant value;
|
||||
Error err = decode_variant(value, &p_packet[p_offset], p_packet_len - p_offset);
|
||||
Error err = decode_variant(value, &p_packet[p_offset], p_packet_len - p_offset, NULL, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
|
||||
ERR_EXPLAIN("Invalid packet received. Unable to decode RSET value.");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
|
@ -526,11 +529,11 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
|||
|
||||
if (p_set) {
|
||||
// Set argument.
|
||||
Error err = encode_variant(*p_arg[0], NULL, len);
|
||||
Error err = encode_variant(*p_arg[0], NULL, len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Unable to encode RSET value. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
MAKE_ROOM(ofs + len);
|
||||
encode_variant(*p_arg[0], &(packet_cache.write[ofs]), len);
|
||||
encode_variant(*p_arg[0], &(packet_cache.write[ofs]), len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ofs += len;
|
||||
|
||||
} else {
|
||||
|
@ -539,11 +542,11 @@ void MultiplayerAPI::_send_rpc(Node *p_from, int p_to, bool p_unreliable, bool p
|
|||
packet_cache.write[ofs] = p_argcount;
|
||||
ofs += 1;
|
||||
for (int i = 0; i < p_argcount; i++) {
|
||||
Error err = encode_variant(*p_arg[i], NULL, len);
|
||||
Error err = encode_variant(*p_arg[i], NULL, len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ERR_EXPLAIN("Unable to encode RPC argument. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||
ERR_FAIL_COND(err != OK);
|
||||
MAKE_ROOM(ofs + len);
|
||||
encode_variant(*p_arg[i], &(packet_cache.write[ofs]), len);
|
||||
encode_variant(*p_arg[i], &(packet_cache.write[ofs]), len, allow_object_decoding || network_peer->is_object_decoding_allowed());
|
||||
ofs += len;
|
||||
}
|
||||
}
|
||||
|
@ -818,6 +821,16 @@ Vector<int> MultiplayerAPI::get_network_connected_peers() const {
|
|||
return ret;
|
||||
}
|
||||
|
||||
void MultiplayerAPI::set_allow_object_decoding(bool p_enable) {
|
||||
|
||||
allow_object_decoding = p_enable;
|
||||
}
|
||||
|
||||
bool MultiplayerAPI::is_object_decoding_allowed() const {
|
||||
|
||||
return allow_object_decoding;
|
||||
}
|
||||
|
||||
void MultiplayerAPI::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_root_node", "node"), &MultiplayerAPI::set_root_node);
|
||||
ClassDB::bind_method(D_METHOD("send_bytes", "bytes", "id", "mode"), &MultiplayerAPI::send_bytes, DEFVAL(NetworkedMultiplayerPeer::TARGET_PEER_BROADCAST), DEFVAL(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE));
|
||||
|
@ -838,6 +851,10 @@ void MultiplayerAPI::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_network_connected_peers"), &MultiplayerAPI::get_network_connected_peers);
|
||||
ClassDB::bind_method(D_METHOD("set_refuse_new_network_connections", "refuse"), &MultiplayerAPI::set_refuse_new_network_connections);
|
||||
ClassDB::bind_method(D_METHOD("is_refusing_new_network_connections"), &MultiplayerAPI::is_refusing_new_network_connections);
|
||||
ClassDB::bind_method(D_METHOD("set_allow_object_decoding", "enable"), &MultiplayerAPI::set_allow_object_decoding);
|
||||
ClassDB::bind_method(D_METHOD("is_object_decoding_allowed"), &MultiplayerAPI::is_object_decoding_allowed);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_object_decoding"), "set_allow_object_decoding", "is_object_decoding_allowed");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "refuse_new_network_connections"), "set_refuse_new_network_connections", "is_refusing_new_network_connections");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "network_peer", PROPERTY_HINT_RESOURCE_TYPE, "NetworkedMultiplayerPeer", 0), "set_network_peer", "get_network_peer");
|
||||
|
||||
|
@ -859,7 +876,8 @@ void MultiplayerAPI::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(RPC_MODE_PUPPETSYNC);
|
||||
}
|
||||
|
||||
MultiplayerAPI::MultiplayerAPI() {
|
||||
MultiplayerAPI::MultiplayerAPI() :
|
||||
allow_object_decoding(false) {
|
||||
rpc_sender_id = 0;
|
||||
root_node = NULL;
|
||||
clear();
|
||||
|
|
|
@ -63,6 +63,7 @@ private:
|
|||
int last_send_cache_id;
|
||||
Vector<uint8_t> packet_cache;
|
||||
Node *root_node;
|
||||
bool allow_object_decoding;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
@ -126,6 +127,9 @@ public:
|
|||
void set_refuse_new_network_connections(bool p_refuse);
|
||||
bool is_refusing_new_network_connections() const;
|
||||
|
||||
void set_allow_object_decoding(bool p_enable);
|
||||
bool is_object_decoding_allowed() const;
|
||||
|
||||
MultiplayerAPI();
|
||||
~MultiplayerAPI();
|
||||
};
|
||||
|
|
|
@ -79,7 +79,7 @@ Error PacketPeer::put_packet_buffer(const PoolVector<uint8_t> &p_buffer) {
|
|||
return put_packet(&r[0], len);
|
||||
}
|
||||
|
||||
Error PacketPeer::get_var(Variant &r_variant) {
|
||||
Error PacketPeer::get_var(Variant &r_variant, bool p_allow_objects) {
|
||||
|
||||
const uint8_t *buffer;
|
||||
int buffer_size;
|
||||
|
@ -87,13 +87,13 @@ Error PacketPeer::get_var(Variant &r_variant) {
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
return decode_variant(r_variant, buffer, buffer_size, NULL, allow_object_decoding);
|
||||
return decode_variant(r_variant, buffer, buffer_size, NULL, p_allow_objects || allow_object_decoding);
|
||||
}
|
||||
|
||||
Error PacketPeer::put_var(const Variant &p_packet) {
|
||||
Error PacketPeer::put_var(const Variant &p_packet, bool p_full_objects) {
|
||||
|
||||
int len;
|
||||
Error err = encode_variant(p_packet, NULL, len, !allow_object_decoding); // compute len first
|
||||
Error err = encode_variant(p_packet, NULL, len, p_full_objects || allow_object_decoding); // compute len first
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
@ -102,15 +102,15 @@ Error PacketPeer::put_var(const Variant &p_packet) {
|
|||
|
||||
uint8_t *buf = (uint8_t *)alloca(len);
|
||||
ERR_FAIL_COND_V(!buf, ERR_OUT_OF_MEMORY);
|
||||
err = encode_variant(p_packet, buf, len, !allow_object_decoding);
|
||||
err = encode_variant(p_packet, buf, len, p_full_objects || allow_object_decoding);
|
||||
ERR_FAIL_COND_V(err, err);
|
||||
|
||||
return put_packet(buf, len);
|
||||
}
|
||||
|
||||
Variant PacketPeer::_bnd_get_var() {
|
||||
Variant PacketPeer::_bnd_get_var(bool p_allow_objects) {
|
||||
Variant var;
|
||||
get_var(var);
|
||||
get_var(var, p_allow_objects);
|
||||
|
||||
return var;
|
||||
};
|
||||
|
@ -132,8 +132,8 @@ Error PacketPeer::_get_packet_error() const {
|
|||
|
||||
void PacketPeer::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &PacketPeer::_bnd_get_var);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "var"), &PacketPeer::put_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &PacketPeer::_bnd_get_var, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("put_var", "var", "full_objects"), &PacketPeer::put_var, DEFVAL(false));
|
||||
ClassDB::bind_method(D_METHOD("get_packet"), &PacketPeer::_get_packet);
|
||||
ClassDB::bind_method(D_METHOD("put_packet", "buffer"), &PacketPeer::_put_packet);
|
||||
ClassDB::bind_method(D_METHOD("get_packet_error"), &PacketPeer::_get_packet_error);
|
||||
|
|
|
@ -39,8 +39,7 @@ class PacketPeer : public Reference {
|
|||
|
||||
GDCLASS(PacketPeer, Reference);
|
||||
|
||||
Variant _bnd_get_var();
|
||||
void _bnd_put_var(const Variant &p_var);
|
||||
Variant _bnd_get_var(bool p_allow_objects = false);
|
||||
|
||||
static void _bind_methods();
|
||||
|
||||
|
@ -64,8 +63,8 @@ public:
|
|||
virtual Error get_packet_buffer(PoolVector<uint8_t> &r_buffer);
|
||||
virtual Error put_packet_buffer(const PoolVector<uint8_t> &p_buffer);
|
||||
|
||||
virtual Error get_var(Variant &r_variant);
|
||||
virtual Error put_var(const Variant &p_packet);
|
||||
virtual Error get_var(Variant &r_variant, bool p_allow_objects = false);
|
||||
virtual Error put_var(const Variant &p_packet, bool p_full_objects = false);
|
||||
|
||||
void set_allow_object_decoding(bool p_enable);
|
||||
bool is_object_decoding_allowed() const;
|
||||
|
|
|
@ -163,7 +163,7 @@ Error PCKPacker::flush(bool p_verbose) {
|
|||
src->close();
|
||||
memdelete(src);
|
||||
count += 1;
|
||||
if (p_verbose) {
|
||||
if (p_verbose && files.size() > 0) {
|
||||
if (count % 100 == 0) {
|
||||
printf("%i/%i (%.2f)\r", count, files.size(), float(count) / files.size() * 100);
|
||||
fflush(stdout);
|
||||
|
|
|
@ -1801,6 +1801,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
|
|||
|
||||
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||
f->close();
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
|
@ -1953,10 +1954,12 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const RES &p
|
|||
|
||||
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||
f->close();
|
||||
memdelete(f);
|
||||
return ERR_CANT_CREATE;
|
||||
}
|
||||
|
||||
f->close();
|
||||
memdelete(f);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
|
|
@ -221,14 +221,14 @@ void StreamPeer::put_utf8_string(const String &p_string) {
|
|||
put_u32(cs.length());
|
||||
put_data((const uint8_t *)cs.get_data(), cs.length());
|
||||
}
|
||||
void StreamPeer::put_var(const Variant &p_variant) {
|
||||
void StreamPeer::put_var(const Variant &p_variant, bool p_full_objects) {
|
||||
|
||||
int len = 0;
|
||||
Vector<uint8_t> buf;
|
||||
encode_variant(p_variant, NULL, len);
|
||||
encode_variant(p_variant, NULL, len, p_full_objects);
|
||||
buf.resize(len);
|
||||
put_32(len);
|
||||
encode_variant(p_variant, buf.ptrw(), len);
|
||||
encode_variant(p_variant, buf.ptrw(), len, p_full_objects);
|
||||
put_data(buf.ptr(), buf.size());
|
||||
}
|
||||
|
||||
|
@ -359,7 +359,7 @@ String StreamPeer::get_utf8_string(int p_bytes) {
|
|||
ret.parse_utf8((const char *)buf.ptr(), buf.size());
|
||||
return ret;
|
||||
}
|
||||
Variant StreamPeer::get_var() {
|
||||
Variant StreamPeer::get_var(bool p_allow_objects) {
|
||||
|
||||
int len = get_32();
|
||||
Vector<uint8_t> var;
|
||||
|
@ -369,7 +369,7 @@ Variant StreamPeer::get_var() {
|
|||
ERR_FAIL_COND_V(err != OK, Variant());
|
||||
|
||||
Variant ret;
|
||||
decode_variant(ret, var.ptr(), len);
|
||||
decode_variant(ret, var.ptr(), len, NULL, p_allow_objects);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -398,7 +398,7 @@ void StreamPeer::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("put_double", "value"), &StreamPeer::put_double);
|
||||
ClassDB::bind_method(D_METHOD("put_string", "value"), &StreamPeer::put_string);
|
||||
ClassDB::bind_method(D_METHOD("put_utf8_string", "value"), &StreamPeer::put_utf8_string);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "value"), &StreamPeer::put_var);
|
||||
ClassDB::bind_method(D_METHOD("put_var", "value", "full_objects"), &StreamPeer::put_var, DEFVAL(false));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_8"), &StreamPeer::get_8);
|
||||
ClassDB::bind_method(D_METHOD("get_u8"), &StreamPeer::get_u8);
|
||||
|
@ -412,7 +412,7 @@ void StreamPeer::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_double"), &StreamPeer::get_double);
|
||||
ClassDB::bind_method(D_METHOD("get_string", "bytes"), &StreamPeer::get_string, DEFVAL(-1));
|
||||
ClassDB::bind_method(D_METHOD("get_utf8_string", "bytes"), &StreamPeer::get_utf8_string, DEFVAL(-1));
|
||||
ClassDB::bind_method(D_METHOD("get_var"), &StreamPeer::get_var);
|
||||
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &StreamPeer::get_var, DEFVAL(false));
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "big_endian"), "set_big_endian", "is_big_endian_enabled");
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ public:
|
|||
void put_double(double p_val);
|
||||
void put_string(const String &p_string);
|
||||
void put_utf8_string(const String &p_string);
|
||||
void put_var(const Variant &p_variant);
|
||||
void put_var(const Variant &p_variant, bool p_full_objects = false);
|
||||
|
||||
uint8_t get_u8();
|
||||
int8_t get_8();
|
||||
|
@ -87,7 +87,7 @@ public:
|
|||
double get_double();
|
||||
String get_string(int p_bytes = -1);
|
||||
String get_utf8_string(int p_bytes = -1);
|
||||
Variant get_var();
|
||||
Variant get_var(bool p_allow_objects = false);
|
||||
|
||||
StreamPeer() { big_endian = false; }
|
||||
};
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
*/
|
||||
|
||||
// based on the very nice implementation of rb-trees by:
|
||||
// http://web.mit.edu/~emin/www/source_code/red_black_tree/index.html
|
||||
// https://web.archive.org/web/20120507164830/http://web.mit.edu/~emin/www/source_code/red_black_tree/index.html
|
||||
|
||||
template <class K, class V, class C = Comparator<K>, class A = DefaultAllocator>
|
||||
class Map {
|
||||
|
|
|
@ -55,6 +55,7 @@ void AStar::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) {
|
|||
pt->weight_scale = p_weight_scale;
|
||||
pt->prev_point = NULL;
|
||||
pt->last_pass = 0;
|
||||
pt->enabled = true;
|
||||
points[p_id] = pt;
|
||||
} else {
|
||||
points[p_id]->pos = p_pos;
|
||||
|
@ -242,6 +243,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
|||
|
||||
pass++;
|
||||
|
||||
if (!end_point->enabled)
|
||||
return false;
|
||||
|
||||
SelfList<Point>::List open_list;
|
||||
|
||||
bool found_route = false;
|
||||
|
@ -249,6 +253,10 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
|||
for (Set<Point *>::Element *E = begin_point->neighbours.front(); E; E = E->next()) {
|
||||
|
||||
Point *n = E->get();
|
||||
|
||||
if (!n->enabled)
|
||||
continue;
|
||||
|
||||
n->prev_point = begin_point;
|
||||
n->distance = _compute_cost(begin_point->id, n->id) * n->weight_scale;
|
||||
n->last_pass = pass;
|
||||
|
@ -290,6 +298,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
|||
|
||||
Point *e = E->get();
|
||||
|
||||
if (!e->enabled)
|
||||
continue;
|
||||
|
||||
real_t distance = _compute_cost(p->id, e->id) * e->weight_scale + p->distance;
|
||||
|
||||
if (e->last_pass == pass) {
|
||||
|
@ -438,6 +449,14 @@ PoolVector<int> AStar::get_id_path(int p_from_id, int p_to_id) {
|
|||
return path;
|
||||
}
|
||||
|
||||
void AStar::set_point_disabled(int p_id, bool p_disabled) {
|
||||
points[p_id]->enabled = !p_disabled;
|
||||
}
|
||||
|
||||
bool AStar::is_point_disabled(int p_id) const {
|
||||
return !points[p_id]->enabled;
|
||||
}
|
||||
|
||||
void AStar::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_available_point_id"), &AStar::get_available_point_id);
|
||||
|
@ -450,6 +469,9 @@ void AStar::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("has_point", "id"), &AStar::has_point);
|
||||
ClassDB::bind_method(D_METHOD("get_points"), &AStar::get_points);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_point_disabled", "id", "disabled"), &AStar::set_point_disabled, DEFVAL(true));
|
||||
ClassDB::bind_method(D_METHOD("is_point_disabled", "id"), &AStar::is_point_disabled);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_point_connections", "id"), &AStar::get_point_connections);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar::connect_points, DEFVAL(true));
|
||||
|
|
|
@ -54,6 +54,7 @@ class AStar : public Reference {
|
|||
Vector3 pos;
|
||||
real_t weight_scale;
|
||||
uint64_t last_pass;
|
||||
bool enabled;
|
||||
|
||||
Set<Point *> neighbours;
|
||||
|
||||
|
@ -114,6 +115,9 @@ public:
|
|||
PoolVector<int> get_point_connections(int p_id);
|
||||
Array get_points();
|
||||
|
||||
void set_point_disabled(int p_id, bool p_disabled = true);
|
||||
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;
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#ifndef AUDIOFRAME_H
|
||||
#define AUDIOFRAME_H
|
||||
|
||||
#include "core/math/vector2.h"
|
||||
#include "core/typedefs.h"
|
||||
|
||||
static inline float undenormalise(volatile float f) {
|
||||
|
@ -122,6 +123,20 @@ struct AudioFrame {
|
|||
r = p_frame.r;
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ AudioFrame operator=(const AudioFrame &p_frame) {
|
||||
l = p_frame.l;
|
||||
r = p_frame.r;
|
||||
return *this;
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ operator Vector2() const {
|
||||
return Vector2(l, r);
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ AudioFrame(const Vector2 &p_v2) {
|
||||
l = p_v2.x;
|
||||
r = p_v2.y;
|
||||
}
|
||||
_ALWAYS_INLINE_ AudioFrame() {}
|
||||
};
|
||||
|
||||
|
|
|
@ -557,11 +557,23 @@ void Basis::set_euler_yxz(const Vector3 &p_euler) {
|
|||
*this = ymat * xmat * zmat;
|
||||
}
|
||||
|
||||
bool Basis::is_equal_approx(const Basis &a, const Basis &b) const {
|
||||
bool Basis::is_equal_approx(const Basis &a, const Basis &b,real_t p_epsilon) const {
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (!Math::is_equal_approx_ratio(a.elements[i][j], b.elements[i][j], UNIT_EPSILON))
|
||||
if (!Math::is_equal_approx(a.elements[i][j], b.elements[i][j], p_epsilon))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Basis::is_equal_approx_ratio(const Basis &a, const Basis &b,real_t p_epsilon) const {
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
if (!Math::is_equal_approx_ratio(a.elements[i][j], b.elements[i][j], p_epsilon))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -605,12 +617,14 @@ Basis::operator String() const {
|
|||
|
||||
Quat Basis::get_quat() const {
|
||||
|
||||
#ifdef MATH_CHECKS
|
||||
if (!is_rotation()) {
|
||||
ERR_EXPLAIN("Basis must be normalized in order to be casted to a Quaternion. Use get_rotation_quat() or call orthonormalized() instead.");
|
||||
ERR_FAIL_V(Quat());
|
||||
}
|
||||
#endif
|
||||
/* Allow getting a quaternion from an unnormalized transform */
|
||||
Basis m = *this;
|
||||
m.elements[0].normalize();
|
||||
m.elements[1].normalize();
|
||||
m.elements[2].normalize();
|
||||
|
||||
real_t trace = m.elements[0][0] + m.elements[1][1] + m.elements[2][2];
|
||||
real_t temp[4];
|
||||
|
||||
|
|
|
@ -133,7 +133,8 @@ 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) const;
|
||||
bool is_equal_approx(const Basis &a, const Basis &b, real_t p_epsilon=CMP_EPSILON) const;
|
||||
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;
|
||||
bool operator!=(const Basis &p_matrix) const;
|
||||
|
|
|
@ -294,8 +294,8 @@ Vector<Plane> CameraMatrix::get_projection_planes(const Transform &p_transform)
|
|||
|
||||
/** Fast Plane Extraction from combined modelview/projection matrices.
|
||||
* References:
|
||||
* http://www.markmorley.com/opengl/frustumculling.html
|
||||
* http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf
|
||||
* https://web.archive.org/web/20011221205252/http://www.markmorley.com/opengl/frustumculling.html
|
||||
* https://web.archive.org/web/20061020020112/http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf
|
||||
*/
|
||||
|
||||
Vector<Plane> planes;
|
||||
|
|
|
@ -68,6 +68,7 @@ const char *Expression::func_name[Expression::FUNC_MAX] = {
|
|||
"lerp",
|
||||
"inverse_lerp",
|
||||
"range_lerp",
|
||||
"smoothstep",
|
||||
"dectime",
|
||||
"randomize",
|
||||
"randi",
|
||||
|
@ -164,10 +165,10 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
|||
case TEXT_PRINTRAW:
|
||||
case VAR_TO_STR:
|
||||
case STR_TO_VAR:
|
||||
case VAR_TO_BYTES:
|
||||
case BYTES_TO_VAR:
|
||||
case TYPE_EXISTS:
|
||||
return 1;
|
||||
case VAR_TO_BYTES:
|
||||
case BYTES_TO_VAR:
|
||||
case MATH_ATAN2:
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD:
|
||||
|
@ -185,6 +186,7 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
|||
return 2;
|
||||
case MATH_LERP:
|
||||
case MATH_INVERSE_LERP:
|
||||
case MATH_SMOOTHSTEP:
|
||||
case MATH_DECTIME:
|
||||
case MATH_WRAP:
|
||||
case MATH_WRAPF:
|
||||
|
@ -392,6 +394,12 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
|||
VALIDATE_ARG_NUM(4);
|
||||
*r_return = Math::range_lerp((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2], (double)*p_inputs[3], (double)*p_inputs[4]);
|
||||
} break;
|
||||
case MATH_SMOOTHSTEP: {
|
||||
VALIDATE_ARG_NUM(0);
|
||||
VALIDATE_ARG_NUM(1);
|
||||
VALIDATE_ARG_NUM(2);
|
||||
*r_return = Math::smoothstep((double)*p_inputs[0], (double)*p_inputs[1], (double)*p_inputs[2]);
|
||||
} break;
|
||||
case MATH_DECTIME: {
|
||||
|
||||
VALIDATE_ARG_NUM(0);
|
||||
|
@ -696,8 +704,9 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
|||
case VAR_TO_BYTES: {
|
||||
|
||||
PoolByteArray barr;
|
||||
bool full_objects = *p_inputs[1];
|
||||
int len;
|
||||
Error err = encode_variant(*p_inputs[0], NULL, len);
|
||||
Error err = encode_variant(*p_inputs[0], NULL, len, full_objects);
|
||||
if (err) {
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.argument = 0;
|
||||
|
@ -709,7 +718,7 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
|||
barr.resize(len);
|
||||
{
|
||||
PoolByteArray::Write w = barr.write();
|
||||
encode_variant(*p_inputs[0], w.ptr(), len);
|
||||
encode_variant(*p_inputs[0], w.ptr(), len, full_objects);
|
||||
}
|
||||
*r_return = barr;
|
||||
} break;
|
||||
|
@ -724,10 +733,11 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
|||
}
|
||||
|
||||
PoolByteArray varr = *p_inputs[0];
|
||||
bool allow_objects = *p_inputs[1];
|
||||
Variant ret;
|
||||
{
|
||||
PoolByteArray::Read r = varr.read();
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL);
|
||||
Error err = decode_variant(ret, r.ptr(), varr.size(), NULL, allow_objects);
|
||||
if (err != OK) {
|
||||
r_error_str = RTR("Not enough bytes for decoding bytes, or invalid format.");
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
|
|
|
@ -66,6 +66,7 @@ public:
|
|||
MATH_LERP,
|
||||
MATH_INVERSE_LERP,
|
||||
MATH_RANGE_LERP,
|
||||
MATH_SMOOTHSTEP,
|
||||
MATH_DECTIME,
|
||||
MATH_RANDOMIZE,
|
||||
MATH_RAND,
|
||||
|
|
|
@ -393,7 +393,7 @@ Vector3 Face3::get_closest_point_to(const Vector3 &p_point) const {
|
|||
s = CLAMP(numer / denom, 0.f, 1.f);
|
||||
t = 1 - s;
|
||||
} else {
|
||||
s = CLAMP(-e / c, 0.f, 1.f);
|
||||
s = CLAMP(-d / a, 0.f, 1.f);
|
||||
t = 0.f;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -702,9 +702,11 @@ public:
|
|||
/* if we can assume that the line segment starts outside the circle (e.g. for continuous time collision detection) then the following can be skipped and we can just return the equivalent of res1 */
|
||||
sqrtterm = Math::sqrt(sqrtterm);
|
||||
real_t res1 = (-b - sqrtterm) / (2 * a);
|
||||
//real_t res2 = ( -b + sqrtterm ) / (2 * a);
|
||||
real_t res2 = (-b + sqrtterm) / (2 * a);
|
||||
|
||||
return (res1 >= 0 && res1 <= 1) ? res1 : -1;
|
||||
if (res1 >= 0 && res1 <= 1) return res1;
|
||||
if (res2 >= 0 && res2 <= 1) return res2;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static inline Vector<Vector3> clip_polygon(const Vector<Vector3> &polygon, const Plane &p_plane) {
|
||||
|
|
|
@ -208,6 +208,17 @@ public:
|
|||
static _ALWAYS_INLINE_ double range_lerp(double p_value, double p_istart, double p_istop, double p_ostart, double p_ostop) { return Math::lerp(p_ostart, p_ostop, Math::inverse_lerp(p_istart, p_istop, p_value)); }
|
||||
static _ALWAYS_INLINE_ float range_lerp(float p_value, float p_istart, float p_istop, float p_ostart, float p_ostop) { return Math::lerp(p_ostart, p_ostop, Math::inverse_lerp(p_istart, p_istop, p_value)); }
|
||||
|
||||
static _ALWAYS_INLINE_ double smoothstep(double p_from, double p_to, double p_weight) {
|
||||
if (is_equal_approx(p_from, p_to)) return p_from;
|
||||
double x = CLAMP((p_weight - p_from) / (p_to - p_from), 0.0, 1.0);
|
||||
return x * x * (3.0 - 2.0 * x);
|
||||
}
|
||||
static _ALWAYS_INLINE_ float smoothstep(float p_from, float p_to, float p_weight) {
|
||||
if (is_equal_approx(p_from, p_to)) return p_from;
|
||||
float x = CLAMP((p_weight - p_from) / (p_to - p_from), 0.0f, 1.0f);
|
||||
return x * x * (3.0f - 2.0f * x);
|
||||
}
|
||||
|
||||
static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
|
||||
static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
|
||||
|
||||
|
@ -249,11 +260,11 @@ public:
|
|||
static float random(float from, float to);
|
||||
static real_t random(int from, int to) { return (real_t)random((real_t)from, (real_t)to); }
|
||||
|
||||
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON) {
|
||||
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON, real_t min_epsilon = CMP_EPSILON) {
|
||||
// this is an approximate way to check that numbers are close, as a ratio of their average size
|
||||
// helps compare approximate numbers that may be very big or very small
|
||||
real_t diff = abs(a - b);
|
||||
if (diff == 0.0) {
|
||||
if (diff == 0.0 || diff < min_epsilon) {
|
||||
return true;
|
||||
}
|
||||
real_t avg_size = (abs(a) + abs(b)) / 2.0;
|
||||
|
|
|
@ -131,6 +131,14 @@ public:
|
|||
w(q.w) {
|
||||
}
|
||||
|
||||
Quat operator=(const Quat &q) {
|
||||
x = q.x;
|
||||
y = q.y;
|
||||
z = q.z;
|
||||
w = q.w;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Quat(const Vector3 &v0, const Vector3 &v1) // shortest arc
|
||||
{
|
||||
Vector3 c = v0.cross(v1);
|
||||
|
|
|
@ -40,6 +40,7 @@ void RandomNumberGenerator::_bind_methods() {
|
|||
|
||||
ClassDB::bind_method(D_METHOD("randi"), &RandomNumberGenerator::randi);
|
||||
ClassDB::bind_method(D_METHOD("randf"), &RandomNumberGenerator::randf);
|
||||
ClassDB::bind_method(D_METHOD("randfn", "mean", "deviation"), &RandomNumberGenerator::randfn, DEFVAL(0.0), DEFVAL(1.0));
|
||||
ClassDB::bind_method(D_METHOD("randf_range", "from", "to"), &RandomNumberGenerator::randf_range);
|
||||
ClassDB::bind_method(D_METHOD("randi_range", "from", "to"), &RandomNumberGenerator::randi_range);
|
||||
ClassDB::bind_method(D_METHOD("randomize"), &RandomNumberGenerator::randomize);
|
||||
|
|
|
@ -55,6 +55,8 @@ public:
|
|||
|
||||
_FORCE_INLINE_ real_t randf_range(real_t from, real_t to) { return randbase.random(from, to); }
|
||||
|
||||
_FORCE_INLINE_ real_t randfn(real_t mean = 0.0, real_t deviation = 1.0) { return randbase.randfn(mean, deviation); }
|
||||
|
||||
_FORCE_INLINE_ int randi_range(int from, int to) {
|
||||
unsigned int ret = randbase.rand();
|
||||
return ret % (to - from + 1) + from;
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#ifndef RANDOM_PCG_H
|
||||
#define RANDOM_PCG_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#include "core/math/math_defs.h"
|
||||
|
||||
#include "thirdparty/misc/pcg.h"
|
||||
|
@ -61,6 +63,13 @@ public:
|
|||
_FORCE_INLINE_ double randd() { return (double)rand() / (double)RANDOM_MAX; }
|
||||
_FORCE_INLINE_ float randf() { return (float)rand() / (float)RANDOM_MAX; }
|
||||
|
||||
_FORCE_INLINE_ double randfn(double p_mean, double p_deviation) {
|
||||
return p_mean + p_deviation * (cos(Math_TAU * randd()) * sqrt(-2.0 * log(randd()))); // Box-Muller transform
|
||||
}
|
||||
_FORCE_INLINE_ float randfn(float p_mean, float p_deviation) {
|
||||
return p_mean + p_deviation * (cos(Math_TAU * randf()) * sqrt(-2.0 * log(randf()))); // Box-Muller transform
|
||||
}
|
||||
|
||||
double random(double p_from, double p_to);
|
||||
float random(float p_from, float p_to);
|
||||
real_t random(int p_from, int p_to) { return (real_t)random((real_t)p_from, (real_t)p_to); }
|
||||
|
|
|
@ -65,6 +65,7 @@ struct Vector2 {
|
|||
real_t distance_squared_to(const Vector2 &p_vector2) const;
|
||||
real_t angle_to(const Vector2 &p_vector2) const;
|
||||
real_t angle_to_point(const Vector2 &p_vector2) const;
|
||||
_FORCE_INLINE_ Vector2 direction_to(const Vector2 &p_b) const;
|
||||
|
||||
real_t dot(const Vector2 &p_other) const;
|
||||
real_t cross(const Vector2 &p_other) const;
|
||||
|
@ -236,6 +237,12 @@ Vector2 Vector2::slerp(const Vector2 &p_b, real_t p_t) const {
|
|||
return rotated(theta * p_t);
|
||||
}
|
||||
|
||||
Vector2 Vector2::direction_to(const Vector2 &p_b) const {
|
||||
Vector2 ret(p_b.x - x, p_b.y - y);
|
||||
ret.normalize();
|
||||
return ret;
|
||||
}
|
||||
|
||||
Vector2 Vector2::linear_interpolate(const Vector2 &p_a, const Vector2 &p_b, real_t p_t) {
|
||||
|
||||
Vector2 res = p_a;
|
||||
|
|
|
@ -112,6 +112,7 @@ struct Vector3 {
|
|||
_FORCE_INLINE_ Vector3 project(const Vector3 &p_b) const;
|
||||
|
||||
_FORCE_INLINE_ real_t angle_to(const Vector3 &p_b) const;
|
||||
_FORCE_INLINE_ Vector3 direction_to(const Vector3 &p_b) const;
|
||||
|
||||
_FORCE_INLINE_ Vector3 slide(const Vector3 &p_normal) const;
|
||||
_FORCE_INLINE_ Vector3 bounce(const Vector3 &p_normal) const;
|
||||
|
@ -217,12 +218,8 @@ Vector3 Vector3::linear_interpolate(const Vector3 &p_b, real_t p_t) const {
|
|||
}
|
||||
|
||||
Vector3 Vector3::slerp(const Vector3 &p_b, real_t p_t) const {
|
||||
#ifdef MATH_CHECKS
|
||||
ERR_FAIL_COND_V(!is_normalized(), Vector3());
|
||||
#endif
|
||||
|
||||
real_t theta = angle_to(p_b);
|
||||
return rotated(cross(p_b), theta * p_t);
|
||||
return rotated(cross(p_b).normalized(), theta * p_t);
|
||||
}
|
||||
|
||||
real_t Vector3::distance_to(const Vector3 &p_b) const {
|
||||
|
@ -244,6 +241,12 @@ real_t Vector3::angle_to(const Vector3 &p_b) const {
|
|||
return Math::atan2(cross(p_b).length(), dot(p_b));
|
||||
}
|
||||
|
||||
Vector3 Vector3::direction_to(const Vector3 &p_b) const {
|
||||
Vector3 ret(p_b.x - x, p_b.y - y, p_b.z - z);
|
||||
ret.normalize();
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Operators */
|
||||
|
||||
Vector3 &Vector3::operator+=(const Vector3 &p_v) {
|
||||
|
|
|
@ -302,10 +302,6 @@ void MessageQueue::flush() {
|
|||
|
||||
_call_function(target, message->target, args, message->args, message->type & FLAG_SHOW_ERROR);
|
||||
|
||||
for (int i = 0; i < message->args; i++) {
|
||||
args[i].~Variant();
|
||||
}
|
||||
|
||||
} break;
|
||||
case TYPE_NOTIFICATION: {
|
||||
|
||||
|
@ -319,11 +315,17 @@ void MessageQueue::flush() {
|
|||
// messages don't expect a return value
|
||||
target->set(message->target, *arg);
|
||||
|
||||
arg->~Variant();
|
||||
} break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((message->type & FLAG_MASK) != TYPE_NOTIFICATION) {
|
||||
Variant *args = (Variant *)(message + 1);
|
||||
for (int i = 0; i < message->args; i++) {
|
||||
args[i].~Variant();
|
||||
}
|
||||
}
|
||||
|
||||
message->~Message();
|
||||
|
||||
_THREAD_SAFE_LOCK_
|
||||
|
|
|
@ -608,18 +608,16 @@ Variant Object::get_indexed(const Vector<StringName> &p_names, bool *r_valid) co
|
|||
}
|
||||
bool valid = false;
|
||||
|
||||
Variant current_value = get(p_names[0]);
|
||||
Variant current_value = get(p_names[0], &valid);
|
||||
for (int i = 1; i < p_names.size(); i++) {
|
||||
current_value = current_value.get_named(p_names[i], &valid);
|
||||
|
||||
if (!valid) {
|
||||
if (r_valid)
|
||||
*r_valid = false;
|
||||
return Variant();
|
||||
}
|
||||
if (!valid)
|
||||
break;
|
||||
}
|
||||
if (r_valid)
|
||||
*r_valid = true;
|
||||
*r_valid = valid;
|
||||
|
||||
return current_value;
|
||||
}
|
||||
|
||||
|
@ -1366,7 +1364,10 @@ Array Object::_get_incoming_connections() const {
|
|||
void Object::get_signal_list(List<MethodInfo> *p_signals) const {
|
||||
|
||||
if (!script.is_null()) {
|
||||
Ref<Script>(script)->get_script_signal_list(p_signals);
|
||||
Ref<Script> scr = script;
|
||||
if (scr.is_valid()) {
|
||||
scr->get_script_signal_list(p_signals);
|
||||
}
|
||||
}
|
||||
|
||||
ClassDB::get_signal_list(get_class_name(), p_signals);
|
||||
|
@ -1673,7 +1674,7 @@ void Object::clear_internal_resource_paths() {
|
|||
void Object::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_class"), &Object::get_class);
|
||||
ClassDB::bind_method(D_METHOD("is_class", "type"), &Object::is_class);
|
||||
ClassDB::bind_method(D_METHOD("is_class", "class"), &Object::is_class);
|
||||
ClassDB::bind_method(D_METHOD("set", "property", "value"), &Object::_set_bind);
|
||||
ClassDB::bind_method(D_METHOD("get", "property"), &Object::_get_bind);
|
||||
ClassDB::bind_method(D_METHOD("set_indexed", "property", "value"), &Object::_set_indexed_bind);
|
||||
|
@ -1691,14 +1692,8 @@ void Object::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("has_meta", "name"), &Object::has_meta);
|
||||
ClassDB::bind_method(D_METHOD("get_meta_list"), &Object::_get_meta_list_bind);
|
||||
|
||||
//todo reimplement this per language so all 5 arguments can be called
|
||||
|
||||
//ClassDB::bind_method(D_METHOD("call","method","arg1","arg2","arg3","arg4"),&Object::_call_bind,DEFVAL(Variant()),DEFVAL(Variant()),DEFVAL(Variant()),DEFVAL(Variant()));
|
||||
//ClassDB::bind_method(D_METHOD("call_deferred","method","arg1","arg2","arg3","arg4"),&Object::_call_deferred_bind,DEFVAL(Variant()),DEFVAL(Variant()),DEFVAL(Variant()),DEFVAL(Variant()));
|
||||
|
||||
ClassDB::bind_method(D_METHOD("add_user_signal", "signal", "arguments"), &Object::_add_user_signal, DEFVAL(Array()));
|
||||
ClassDB::bind_method(D_METHOD("has_user_signal", "signal"), &Object::_has_user_signal);
|
||||
//ClassDB::bind_method(D_METHOD("emit_signal","signal","arguments"),&Object::_emit_signal,DEFVAL(Array()));
|
||||
|
||||
{
|
||||
MethodInfo mi;
|
||||
|
|
|
@ -779,8 +779,13 @@ public:
|
|||
static int get_object_count();
|
||||
|
||||
_FORCE_INLINE_ static bool instance_validate(Object *p_ptr) {
|
||||
rw_lock->read_lock();
|
||||
|
||||
return instance_checks.has(p_ptr);
|
||||
bool exists = instance_checks.has(p_ptr);
|
||||
|
||||
rw_lock->read_unlock();
|
||||
|
||||
return exists;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -76,6 +76,7 @@ void Input::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("get_joy_axis_index_from_string", "axis"), &Input::get_joy_axis_index_from_string);
|
||||
ClassDB::bind_method(D_METHOD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration, DEFVAL(0));
|
||||
ClassDB::bind_method(D_METHOD("stop_joy_vibration", "device"), &Input::stop_joy_vibration);
|
||||
ClassDB::bind_method(D_METHOD("vibrate_handheld", "duration_ms"), &Input::vibrate_handheld, DEFVAL(500));
|
||||
ClassDB::bind_method(D_METHOD("get_gravity"), &Input::get_gravity);
|
||||
ClassDB::bind_method(D_METHOD("get_accelerometer"), &Input::get_accelerometer);
|
||||
ClassDB::bind_method(D_METHOD("get_magnetometer"), &Input::get_magnetometer);
|
||||
|
@ -89,6 +90,7 @@ void Input::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("action_press", "action", "strength"), &Input::action_press, DEFVAL(1.f));
|
||||
ClassDB::bind_method(D_METHOD("action_release", "action"), &Input::action_release);
|
||||
ClassDB::bind_method(D_METHOD("set_default_cursor_shape", "shape"), &Input::set_default_cursor_shape, DEFVAL(CURSOR_ARROW));
|
||||
ClassDB::bind_method(D_METHOD("get_current_cursor_shape"), &Input::get_current_cursor_shape);
|
||||
ClassDB::bind_method(D_METHOD("set_custom_mouse_cursor", "image", "shape", "hotspot"), &Input::set_custom_mouse_cursor, DEFVAL(CURSOR_ARROW), DEFVAL(Vector2()));
|
||||
ClassDB::bind_method(D_METHOD("parse_input_event", "event"), &Input::parse_input_event);
|
||||
ClassDB::bind_method(D_METHOD("set_use_accumulated_input", "enable"), &Input::set_use_accumulated_input);
|
||||
|
|
|
@ -100,6 +100,7 @@ public:
|
|||
virtual uint64_t get_joy_vibration_timestamp(int p_device) = 0;
|
||||
virtual void start_joy_vibration(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration = 0) = 0;
|
||||
virtual void stop_joy_vibration(int p_device) = 0;
|
||||
virtual void vibrate_handheld(int p_duration_ms = 500) = 0;
|
||||
|
||||
virtual Point2 get_mouse_position() const = 0;
|
||||
virtual Point2 get_last_mouse_speed() const = 0;
|
||||
|
@ -121,10 +122,10 @@ public:
|
|||
virtual bool is_emulating_touch_from_mouse() const = 0;
|
||||
virtual bool is_emulating_mouse_from_touch() const = 0;
|
||||
|
||||
virtual CursorShape get_default_cursor_shape() = 0;
|
||||
virtual CursorShape get_default_cursor_shape() const = 0;
|
||||
virtual void set_default_cursor_shape(CursorShape p_shape) = 0;
|
||||
virtual CursorShape get_current_cursor_shape() const = 0;
|
||||
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape = CURSOR_ARROW, const Vector2 &p_hotspot = Vector2()) = 0;
|
||||
virtual void set_mouse_in_window(bool p_in_window) = 0;
|
||||
|
||||
virtual String get_joy_button_string(int p_button) = 0;
|
||||
virtual String get_joy_axis_string(int p_axis) = 0;
|
||||
|
|
|
@ -717,8 +717,17 @@ bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool *
|
|||
bool pressed = same_direction ? Math::abs(jm->get_axis_value()) >= p_deadzone : false;
|
||||
if (p_pressed != NULL)
|
||||
*p_pressed = pressed;
|
||||
if (p_strength != NULL)
|
||||
*p_strength = pressed ? CLAMP(Math::inverse_lerp(p_deadzone, 1.0f, Math::abs(jm->get_axis_value())), 0.0f, 1.0f) : 0.0f;
|
||||
if (p_strength != NULL) {
|
||||
if (pressed) {
|
||||
if (p_deadzone == 1.0f) {
|
||||
*p_strength = 1.0f;
|
||||
} else {
|
||||
*p_strength = CLAMP(Math::inverse_lerp(p_deadzone, 1.0f, Math::abs(jm->get_axis_value())), 0.0f, 1.0f);
|
||||
}
|
||||
} else {
|
||||
*p_strength = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
return match;
|
||||
}
|
||||
|
|
|
@ -44,9 +44,9 @@ void MainLoop::_bind_methods() {
|
|||
BIND_VMETHOD(MethodInfo("_input_event", PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent")));
|
||||
BIND_VMETHOD(MethodInfo("_input_text", PropertyInfo(Variant::STRING, "text")));
|
||||
BIND_VMETHOD(MethodInfo("_initialize"));
|
||||
BIND_VMETHOD(MethodInfo("_iteration", PropertyInfo(Variant::REAL, "delta")));
|
||||
BIND_VMETHOD(MethodInfo("_idle", PropertyInfo(Variant::REAL, "delta")));
|
||||
BIND_VMETHOD(MethodInfo("_drop_files", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::INT, "screen")));
|
||||
BIND_VMETHOD(MethodInfo(Variant::BOOL, "_iteration", PropertyInfo(Variant::REAL, "delta")));
|
||||
BIND_VMETHOD(MethodInfo(Variant::BOOL, "_idle", PropertyInfo(Variant::REAL, "delta")));
|
||||
BIND_VMETHOD(MethodInfo("_drop_files", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::INT, "from_screen")));
|
||||
BIND_VMETHOD(MethodInfo("_finalize"));
|
||||
|
||||
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
|
||||
|
|
|
@ -75,6 +75,11 @@ void MIDIDriver::receive_input_packet(uint64_t timestamp, uint8_t *data, uint32_
|
|||
if (length >= 3) {
|
||||
event->set_pitch(data[1]);
|
||||
event->set_velocity(data[2]);
|
||||
|
||||
if (event->get_message() == MIDI_MESSAGE_NOTE_ON && event->get_velocity() == 0) {
|
||||
// https://www.midi.org/forum/228-writing-midi-software-send-note-off,-or-zero-velocity-note-on
|
||||
event->set_message(MIDI_MESSAGE_NOTE_OFF);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -157,6 +157,11 @@ int OS::get_process_id() const {
|
|||
return -1;
|
||||
};
|
||||
|
||||
void OS::vibrate_handheld(int p_duration_ms) {
|
||||
|
||||
WARN_PRINTS("vibrate_handheld() only works with Android and iOS");
|
||||
}
|
||||
|
||||
bool OS::is_stdout_verbose() const {
|
||||
|
||||
return _verbose_stdout;
|
||||
|
@ -220,6 +225,16 @@ int OS::get_virtual_keyboard_height() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void OS::set_cursor_shape(CursorShape p_shape) {
|
||||
}
|
||||
|
||||
OS::CursorShape OS::get_cursor_shape() const {
|
||||
return CURSOR_ARROW;
|
||||
}
|
||||
|
||||
void OS::set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) {
|
||||
}
|
||||
|
||||
void OS::print_all_resources(String p_to_file) {
|
||||
|
||||
ERR_FAIL_COND(p_to_file != "" && _OSPRF);
|
||||
|
|
|
@ -263,6 +263,7 @@ public:
|
|||
virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false) = 0;
|
||||
virtual Error kill(const ProcessID &p_pid) = 0;
|
||||
virtual int get_process_id() const;
|
||||
virtual void vibrate_handheld(int p_duration_ms = 500);
|
||||
|
||||
virtual Error shell_open(String p_uri);
|
||||
virtual Error set_cwd(const String &p_cwd);
|
||||
|
@ -377,8 +378,9 @@ public:
|
|||
// returns height of the currently shown virtual keyboard (0 if keyboard is hidden)
|
||||
virtual int get_virtual_keyboard_height() const;
|
||||
|
||||
virtual void set_cursor_shape(CursorShape p_shape) = 0;
|
||||
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) = 0;
|
||||
virtual void set_cursor_shape(CursorShape p_shape);
|
||||
virtual CursorShape get_cursor_shape() const;
|
||||
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot);
|
||||
|
||||
virtual bool get_swap_ok_cancel() { return false; }
|
||||
virtual void dump_memory_to_file(const char *p_file);
|
||||
|
|
|
@ -114,7 +114,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b
|
|||
} else {
|
||||
|
||||
Variant v;
|
||||
Error rerr = decode_variant(v, p_buf + p_ofs, datalen - p_ofs, NULL);
|
||||
Error rerr = decode_variant(v, p_buf + p_ofs, datalen - p_ofs, NULL, false);
|
||||
|
||||
if (rerr != OK) {
|
||||
|
||||
|
@ -224,7 +224,8 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
|||
|
||||
string_cache[s] = tmpdata.size();
|
||||
|
||||
}; //fallthrough
|
||||
FALLTHROUGH;
|
||||
};
|
||||
case Variant::NIL:
|
||||
case Variant::BOOL:
|
||||
case Variant::INT:
|
||||
|
@ -249,9 +250,9 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
|||
|
||||
uint32_t pos = tmpdata.size();
|
||||
int len;
|
||||
encode_variant(p_data, NULL, len);
|
||||
encode_variant(p_data, NULL, len, false);
|
||||
tmpdata.resize(tmpdata.size() + len);
|
||||
encode_variant(p_data, &tmpdata.write[pos], len);
|
||||
encode_variant(p_data, &tmpdata.write[pos], len, false);
|
||||
return pos;
|
||||
|
||||
} break;
|
||||
|
|
|
@ -501,7 +501,7 @@ Error ProjectSettings::_load_settings_binary(const String p_path) {
|
|||
d.resize(vlen);
|
||||
f->get_buffer(d.ptrw(), vlen);
|
||||
Variant value;
|
||||
err = decode_variant(value, d.ptr(), d.size());
|
||||
err = decode_variant(value, d.ptr(), d.size(), NULL, true);
|
||||
ERR_EXPLAIN("Error decoding property: " + key);
|
||||
ERR_CONTINUE(err != OK);
|
||||
set(key, value);
|
||||
|
@ -656,7 +656,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
|||
file->store_string(key);
|
||||
|
||||
int len;
|
||||
err = encode_variant(p_custom_features, NULL, len);
|
||||
err = encode_variant(p_custom_features, NULL, len, false);
|
||||
if (err != OK) {
|
||||
memdelete(file);
|
||||
ERR_FAIL_V(err);
|
||||
|
@ -665,7 +665,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
|||
Vector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
|
||||
err = encode_variant(p_custom_features, buff.ptrw(), len);
|
||||
err = encode_variant(p_custom_features, buff.ptrw(), len, false);
|
||||
if (err != OK) {
|
||||
memdelete(file);
|
||||
ERR_FAIL_V(err);
|
||||
|
@ -694,7 +694,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
|||
file->store_string(key);
|
||||
|
||||
int len;
|
||||
err = encode_variant(value, NULL, len);
|
||||
err = encode_variant(value, NULL, len, true);
|
||||
if (err != OK)
|
||||
memdelete(file);
|
||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
||||
|
@ -702,7 +702,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
|||
Vector<uint8_t> buff;
|
||||
buff.resize(len);
|
||||
|
||||
err = encode_variant(value, buff.ptrw(), len);
|
||||
err = encode_variant(value, buff.ptrw(), len, true);
|
||||
if (err != OK)
|
||||
memdelete(file);
|
||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
||||
|
|
|
@ -205,6 +205,8 @@ public:
|
|||
static ScriptCodeCompletionCache *get_singleton() { return singleton; }
|
||||
|
||||
ScriptCodeCompletionCache();
|
||||
|
||||
virtual ~ScriptCodeCompletionCache() {}
|
||||
};
|
||||
|
||||
class ScriptLanguage {
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
*/
|
||||
|
||||
// based on the very nice implementation of rb-trees by:
|
||||
// http://web.mit.edu/~emin/www/source_code/red_black_tree/index.html
|
||||
// https://web.archive.org/web/20120507164830/http://web.mit.edu/~emin/www/source_code/red_black_tree/index.html
|
||||
|
||||
template <class T, class C = Comparator<T>, class A = DefaultAllocator>
|
||||
class Set {
|
||||
|
|
|
@ -179,6 +179,7 @@ static const char *locale_list[] = {
|
|||
"ff_SN", // Fulah (Senegal)
|
||||
"fi", // Finnish
|
||||
"fi_FI", // Finnish (Finland)
|
||||
"fil", // Filipino
|
||||
"fil_PH", // Filipino (Philippines)
|
||||
"fo_FO", // Faroese (Faroe Islands)
|
||||
"fr", // French
|
||||
|
@ -227,6 +228,7 @@ static const char *locale_list[] = {
|
|||
"ja", // Japanese
|
||||
"ja_JP", // Japanese (Japan)
|
||||
"kab_DZ", // Kabyle (Algeria)
|
||||
"ka", // Georgian
|
||||
"ka_GE", // Georgian (Georgia)
|
||||
"kk_KZ", // Kazakh (Kazakhstan)
|
||||
"kl_GL", // Kalaallisut (Greenland)
|
||||
|
@ -257,10 +259,12 @@ static const char *locale_list[] = {
|
|||
"mg_MG", // Malagasy (Madagascar)
|
||||
"mh_MH", // Marshallese (Marshall Islands)
|
||||
"mhr_RU", // Eastern Mari (Russia)
|
||||
"mi_NZ", // Maori (New Zealand)
|
||||
"mi", // Māori
|
||||
"mi_NZ", // Māori (New Zealand)
|
||||
"miq_NI", // Mískito (Nicaragua)
|
||||
"mk", // Macedonian
|
||||
"mk_MK", // Macedonian (Macedonia)
|
||||
"ml", // Malayalam
|
||||
"ml_IN", // Malayalam (India)
|
||||
"mni_IN", // Manipuri (India)
|
||||
"mn_MN", // Mongolian (Mongolia)
|
||||
|
@ -326,6 +330,7 @@ static const char *locale_list[] = {
|
|||
"sgs_LT", // Samogitian (Lithuania)
|
||||
"shs_CA", // Shuswap (Canada)
|
||||
"sid_ET", // Sidamo (Ethiopia)
|
||||
"si", // Sinhala
|
||||
"si_LK", // Sinhala (Sri Lanka)
|
||||
"sk", // Slovak
|
||||
"sk_SK", // Slovak (Slovakia)
|
||||
|
@ -343,6 +348,7 @@ static const char *locale_list[] = {
|
|||
"sq_MK", // Albanian (Macedonia)
|
||||
"sr", // Serbian
|
||||
"sr_Cyrl", // Serbian (Cyrillic)
|
||||
"sr_Latn", // Serbian (Latin)
|
||||
"sr_ME", // Serbian (Montenegro)
|
||||
"sr_RS", // Serbian (Serbia)
|
||||
"ss_ZA", // Swati (South Africa)
|
||||
|
@ -357,6 +363,7 @@ static const char *locale_list[] = {
|
|||
"ta_IN", // Tamil (India)
|
||||
"ta_LK", // Tamil (Sri Lanka)
|
||||
"tcy_IN", // Tulu (India)
|
||||
"te", // Telugu
|
||||
"te_IN", // Telugu (India)
|
||||
"tg_TJ", // Tajik (Tajikistan)
|
||||
"the_NP", // Chitwania Tharu (Nepal)
|
||||
|
@ -540,6 +547,7 @@ static const char *locale_names[] = {
|
|||
"Fulah (Senegal)",
|
||||
"Finnish",
|
||||
"Finnish (Finland)",
|
||||
"Filipino",
|
||||
"Filipino (Philippines)",
|
||||
"Faroese (Faroe Islands)",
|
||||
"French",
|
||||
|
@ -588,6 +596,7 @@ static const char *locale_names[] = {
|
|||
"Japanese",
|
||||
"Japanese (Japan)",
|
||||
"Kabyle (Algeria)",
|
||||
"Georgian",
|
||||
"Georgian (Georgia)",
|
||||
"Kazakh (Kazakhstan)",
|
||||
"Kalaallisut (Greenland)",
|
||||
|
@ -618,10 +627,12 @@ static const char *locale_names[] = {
|
|||
"Malagasy (Madagascar)",
|
||||
"Marshallese (Marshall Islands)",
|
||||
"Eastern Mari (Russia)",
|
||||
"Maori (New Zealand)",
|
||||
"Māori",
|
||||
"Māori (New Zealand)",
|
||||
"Mískito (Nicaragua)",
|
||||
"Macedonian",
|
||||
"Macedonian (Macedonia)",
|
||||
"Malayalam",
|
||||
"Malayalam (India)",
|
||||
"Manipuri (India)",
|
||||
"Mongolian (Mongolia)",
|
||||
|
@ -687,6 +698,7 @@ static const char *locale_names[] = {
|
|||
"Samogitian (Lithuania)",
|
||||
"Shuswap (Canada)",
|
||||
"Sidamo (Ethiopia)",
|
||||
"Sinhala",
|
||||
"Sinhala (Sri Lanka)",
|
||||
"Slovak",
|
||||
"Slovak (Slovakia)",
|
||||
|
@ -704,6 +716,7 @@ static const char *locale_names[] = {
|
|||
"Albanian (Macedonia)",
|
||||
"Serbian",
|
||||
"Serbian (Cyrillic)",
|
||||
"Serbian (Latin)",
|
||||
"Serbian (Montenegro)",
|
||||
"Serbian (Serbia)",
|
||||
"Swati (South Africa)",
|
||||
|
@ -718,6 +731,7 @@ static const char *locale_names[] = {
|
|||
"Tamil (India)",
|
||||
"Tamil (Sri Lanka)",
|
||||
"Tulu (India)",
|
||||
"Telugu",
|
||||
"Telugu (India)",
|
||||
"Tajik (Tajikistan)",
|
||||
"Chitwania Tharu (Nepal)",
|
||||
|
@ -968,6 +982,19 @@ String TranslationServer::get_locale_name(const String &p_locale) const {
|
|||
return locale_name_map[p_locale];
|
||||
}
|
||||
|
||||
Array TranslationServer::get_loaded_locales() const {
|
||||
Array locales;
|
||||
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
||||
|
||||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
|
||||
locales.push_back(l);
|
||||
}
|
||||
|
||||
return locales;
|
||||
}
|
||||
|
||||
Vector<String> TranslationServer::get_all_locales() {
|
||||
|
||||
Vector<String> locales;
|
||||
|
@ -1017,6 +1044,13 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
if (!enabled)
|
||||
return p_message;
|
||||
|
||||
// Locale can be of the form 'll_CC', i.e. language code and regional code,
|
||||
// e.g. 'en_US', 'en_GB', etc. It might also be simply 'll', e.g. 'en'.
|
||||
// To find the relevant translation, we look for those with locale starting
|
||||
// with the language code, and then if any is an exact match for the long
|
||||
// form. If not found, we fall back to a near match (another locale with
|
||||
// same language code).
|
||||
|
||||
StringName res;
|
||||
bool near_match = false;
|
||||
const CharType *lptr = &locale[0];
|
||||
|
@ -1026,13 +1060,11 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
if (lptr[0] != l[0] || lptr[1] != l[1])
|
||||
continue; // locale not match
|
||||
continue; // Language code does not match.
|
||||
|
||||
//near match
|
||||
bool match = (l != locale);
|
||||
|
||||
if (near_match && !match)
|
||||
continue; //only near-match once
|
||||
bool exact_match = (l == locale);
|
||||
if (!exact_match && near_match)
|
||||
continue; // Only near-match once, but keep looking for exact matches.
|
||||
|
||||
StringName r = t->get_message(p_message);
|
||||
|
||||
|
@ -1041,16 +1073,14 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
|
||||
res = r;
|
||||
|
||||
if (match)
|
||||
if (exact_match)
|
||||
break;
|
||||
else
|
||||
near_match = true;
|
||||
}
|
||||
|
||||
if (!res) {
|
||||
//try again with fallback
|
||||
if (fallback.length() >= 2) {
|
||||
|
||||
if (!res && fallback.length() >= 2) {
|
||||
// Try again with the fallback locale.
|
||||
const CharType *fptr = &fallback[0];
|
||||
near_match = false;
|
||||
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
||||
|
@ -1058,13 +1088,11 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
const Ref<Translation> &t = E->get();
|
||||
String l = t->get_locale();
|
||||
if (fptr[0] != l[0] || fptr[1] != l[1])
|
||||
continue; // locale not match
|
||||
continue; // Language code does not match.
|
||||
|
||||
//near match
|
||||
bool match = (l != fallback);
|
||||
|
||||
if (near_match && !match)
|
||||
continue; //only near-match once
|
||||
bool exact_match = (l == fallback);
|
||||
if (!exact_match && near_match)
|
||||
continue; // Only near-match once, but keep looking for exact matches.
|
||||
|
||||
StringName r = t->get_message(p_message);
|
||||
|
||||
|
@ -1073,13 +1101,12 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
|||
|
||||
res = r;
|
||||
|
||||
if (match)
|
||||
if (exact_match)
|
||||
break;
|
||||
else
|
||||
near_match = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!res)
|
||||
return p_message;
|
||||
|
@ -1168,6 +1195,8 @@ void TranslationServer::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("remove_translation", "translation"), &TranslationServer::remove_translation);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("clear"), &TranslationServer::clear);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_loaded_locales"), &TranslationServer::get_loaded_locales);
|
||||
}
|
||||
|
||||
void TranslationServer::load_translations() {
|
||||
|
|
|
@ -94,6 +94,8 @@ public:
|
|||
|
||||
String get_locale_name(const String &p_locale) const;
|
||||
|
||||
Array get_loaded_locales() const;
|
||||
|
||||
void add_translation(const Ref<Translation> &p_translation);
|
||||
void remove_translation(const Ref<Translation> &p_translation);
|
||||
|
||||
|
|
|
@ -328,4 +328,31 @@ struct _GlobalLock {
|
|||
#define _PRINTF_FORMAT_ATTRIBUTE_2_3
|
||||
#endif
|
||||
|
||||
/** This is needed due to a strange OpenGL API that expects a pointer
|
||||
* type for an argument that is actually an offset.
|
||||
*/
|
||||
#define CAST_INT_TO_UCHAR_PTR(ptr) ((uint8_t *)(uintptr_t)(ptr))
|
||||
|
||||
/** Hint for compilers that this fallthrough in a switch is intentional.
|
||||
* Can be replaced by [[fallthrough]] annotation if we move to C++17.
|
||||
* Including conditional support for it for people who set -std=c++17
|
||||
* themselves.
|
||||
* Requires a trailing semicolon when used.
|
||||
*/
|
||||
#if __cplusplus >= 201703L
|
||||
#define FALLTHROUGH [[fallthrough]]
|
||||
#elif defined(__GNUC__) && __GNUC__ >= 7
|
||||
#define FALLTHROUGH __attribute__((fallthrough))
|
||||
#elif defined(__llvm__) && __cplusplus >= 201103L && defined(__has_feature)
|
||||
#if __has_feature(cxx_attributes) && defined(__has_warning)
|
||||
#if __has_warning("-Wimplicit-fallthrough")
|
||||
#define FALLTHROUGH [[clang::fallthrough]]
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef FALLTHROUGH
|
||||
#define FALLTHROUGH
|
||||
#endif
|
||||
|
||||
#endif // TYPEDEFS_H
|
||||
|
|
1332
core/ucaps.h
1332
core/ucaps.h
File diff suppressed because it is too large
Load Diff
|
@ -3297,7 +3297,7 @@ String String::http_unescape() const {
|
|||
if ((ord1 >= '0' && ord1 <= '9') || (ord1 >= 'A' && ord1 <= 'Z')) {
|
||||
CharType ord2 = ord_at(i + 2);
|
||||
if ((ord2 >= '0' && ord2 <= '9') || (ord2 >= 'A' && ord2 <= 'Z')) {
|
||||
char bytes[2] = { (char)ord1, (char)ord2 };
|
||||
char bytes[3] = { (char)ord1, (char)ord2, 0 };
|
||||
res += (char)strtol(bytes, NULL, 16);
|
||||
i += 2;
|
||||
}
|
||||
|
|
|
@ -97,6 +97,10 @@ public:
|
|||
|
||||
_FORCE_INLINE_ CharString() {}
|
||||
_FORCE_INLINE_ CharString(const CharString &p_str) { _cowdata._ref(p_str._cowdata); }
|
||||
_FORCE_INLINE_ CharString operator=(const CharString &p_str) {
|
||||
_cowdata._ref(p_str._cowdata);
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator<(const CharString &p_right) const;
|
||||
CharString &operator+=(char p_char);
|
||||
|
@ -339,6 +343,10 @@ public:
|
|||
|
||||
_FORCE_INLINE_ String() {}
|
||||
_FORCE_INLINE_ String(const String &p_str) { _cowdata._ref(p_str._cowdata); }
|
||||
String operator=(const String &p_str) {
|
||||
_cowdata._ref(p_str._cowdata);
|
||||
return *this;
|
||||
}
|
||||
|
||||
String(const char *p_str);
|
||||
String(const CharType *p_str, int p_clip_to_len = -1);
|
||||
|
|
|
@ -341,6 +341,7 @@ struct _VariantCall {
|
|||
VCALL_LOCALMEM1R(Vector2, project);
|
||||
VCALL_LOCALMEM1R(Vector2, angle_to);
|
||||
VCALL_LOCALMEM1R(Vector2, angle_to_point);
|
||||
VCALL_LOCALMEM1R(Vector2, direction_to);
|
||||
VCALL_LOCALMEM2R(Vector2, linear_interpolate);
|
||||
VCALL_LOCALMEM2R(Vector2, slerp);
|
||||
VCALL_LOCALMEM4R(Vector2, cubic_interpolate);
|
||||
|
@ -397,6 +398,7 @@ struct _VariantCall {
|
|||
VCALL_LOCALMEM1R(Vector3, distance_squared_to);
|
||||
VCALL_LOCALMEM1R(Vector3, project);
|
||||
VCALL_LOCALMEM1R(Vector3, angle_to);
|
||||
VCALL_LOCALMEM1R(Vector3, direction_to);
|
||||
VCALL_LOCALMEM1R(Vector3, slide);
|
||||
VCALL_LOCALMEM1R(Vector3, bounce);
|
||||
VCALL_LOCALMEM1R(Vector3, reflect);
|
||||
|
@ -773,6 +775,8 @@ struct _VariantCall {
|
|||
VCALL_PTR0R(Basis, get_orthogonal_index);
|
||||
VCALL_PTR0R(Basis, orthonormalized);
|
||||
VCALL_PTR2R(Basis, slerp);
|
||||
VCALL_PTR2R(Basis, is_equal_approx);
|
||||
VCALL_PTR0R(Basis, get_rotation_quat);
|
||||
|
||||
VCALL_PTR0R(Transform, inverse);
|
||||
VCALL_PTR0R(Transform, affine_inverse);
|
||||
|
@ -1497,9 +1501,9 @@ void register_variant_methods() {
|
|||
ADDFUNC2R(STRING, STRING, String, replacen, STRING, "what", STRING, "forwhat", 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, "divisor", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0));
|
||||
ADDFUNC3R(STRING, POOL_STRING_ARRAY, String, rsplit, STRING, "divisor", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0));
|
||||
ADDFUNC2R(STRING, POOL_REAL_ARRAY, String, split_floats, STRING, "divisor", BOOL, "allow_empty", varray(true));
|
||||
ADDFUNC3R(STRING, POOL_STRING_ARRAY, String, split, STRING, "delimiter", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0));
|
||||
ADDFUNC3R(STRING, POOL_STRING_ARRAY, String, rsplit, STRING, "delimiter", BOOL, "allow_empty", INT, "maxsplit", varray(true, 0));
|
||||
ADDFUNC2R(STRING, POOL_REAL_ARRAY, String, split_floats, STRING, "delimiter", BOOL, "allow_empty", varray(true));
|
||||
|
||||
ADDFUNC0R(STRING, STRING, String, to_upper, varray());
|
||||
ADDFUNC0R(STRING, STRING, String, to_lower, varray());
|
||||
|
@ -1554,6 +1558,7 @@ void register_variant_methods() {
|
|||
ADDFUNC0R(VECTOR2, REAL, Vector2, angle, varray());
|
||||
ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray());
|
||||
ADDFUNC0R(VECTOR2, BOOL, Vector2, is_normalized, 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());
|
||||
ADDFUNC1R(VECTOR2, VECTOR2, Vector2, project, VECTOR2, "b", varray());
|
||||
|
@ -1602,6 +1607,7 @@ void register_variant_methods() {
|
|||
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());
|
||||
ADDFUNC1R(VECTOR3, REAL, Vector3, dot, VECTOR3, "b", varray());
|
||||
ADDFUNC1R(VECTOR3, VECTOR3, Vector3, cross, VECTOR3, "b", varray());
|
||||
ADDFUNC1R(VECTOR3, BASIS, Vector3, outer, VECTOR3, "b", varray());
|
||||
|
@ -1842,6 +1848,8 @@ 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));
|
||||
ADDFUNC0R(BASIS, QUAT, Basis, get_rotation_quat, varray());
|
||||
|
||||
ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, inverse, varray());
|
||||
ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, affine_inverse, varray());
|
||||
|
@ -1923,9 +1931,9 @@ void register_variant_methods() {
|
|||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "IDENTITY", identity_transform);
|
||||
transform_x.set(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_X", transform_x);
|
||||
transform_x.set(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0);
|
||||
transform_y.set(1, 0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_Y", transform_y);
|
||||
transform_x.set(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0);
|
||||
transform_z.set(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0);
|
||||
_VariantCall::add_variant_constant(Variant::TRANSFORM, "FLIP_Z", transform_z);
|
||||
|
||||
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_YZ", Plane(Vector3(1, 0, 0), 0));
|
||||
|
|
|
@ -1542,6 +1542,9 @@ Error VariantParser::parse_tag_assign_eof(Stream *p_stream, int &line, String &r
|
|||
} else if (c != '=') {
|
||||
what += String::chr(c);
|
||||
} else {
|
||||
if (p_stream->is_utf8()) {
|
||||
what.parse_utf8(what.ascii(true).get_data());
|
||||
}
|
||||
r_assign = what;
|
||||
Token token;
|
||||
get_token(p_stream, token, line, r_err_str);
|
||||
|
|
|
@ -65,7 +65,7 @@ private:
|
|||
const Pair *a = _cowdata.ptr();
|
||||
int middle = 0;
|
||||
|
||||
#if DEBUG_ENABLED
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (low > high)
|
||||
ERR_PRINT("low > high, this may be a bug");
|
||||
#endif
|
||||
|
|
|
@ -50,7 +50,7 @@ class VSet {
|
|||
const T *a = &_data[0];
|
||||
int middle = 0;
|
||||
|
||||
#if DEBUG_ENABLED
|
||||
#ifdef DEBUG_ENABLED
|
||||
if (low > high)
|
||||
ERR_PRINT("low > high, this may be a bug");
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="@GlobalScope" category="Core" version="3.1">
|
||||
<class name="@GlobalScope" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Global scope constants and variables.
|
||||
</brief_description>
|
||||
|
@ -9,8 +9,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
@ -640,7 +638,7 @@
|
|||
_ key
|
||||
</constant>
|
||||
<constant name="KEY_QUOTELEFT" value="96" enum="KeyList">
|
||||
Left Quote Key
|
||||
` key.
|
||||
</constant>
|
||||
<constant name="KEY_BRACELEFT" value="123" enum="KeyList">
|
||||
{ key
|
||||
|
@ -664,9 +662,10 @@
|
|||
<constant name="KEY_STERLING" value="163" enum="KeyList">
|
||||
</constant>
|
||||
<constant name="KEY_CURRENCY" value="164" enum="KeyList">
|
||||
¤ key.
|
||||
</constant>
|
||||
<constant name="KEY_YEN" value="165" enum="KeyList">
|
||||
Yen Key
|
||||
¥ key.
|
||||
</constant>
|
||||
<constant name="KEY_BROKENBAR" value="166" enum="KeyList">
|
||||
¦ key
|
||||
|
@ -681,21 +680,22 @@
|
|||
© key
|
||||
</constant>
|
||||
<constant name="KEY_ORDFEMININE" value="170" enum="KeyList">
|
||||
ª key.
|
||||
</constant>
|
||||
<constant name="KEY_GUILLEMOTLEFT" value="171" enum="KeyList">
|
||||
« key
|
||||
</constant>
|
||||
<constant name="KEY_NOTSIGN" value="172" enum="KeyList">
|
||||
» key
|
||||
¬ key.
|
||||
</constant>
|
||||
<constant name="KEY_HYPHEN" value="173" enum="KeyList">
|
||||
‐ key
|
||||
Soft hyphen key.
|
||||
</constant>
|
||||
<constant name="KEY_REGISTERED" value="174" enum="KeyList">
|
||||
® key
|
||||
</constant>
|
||||
<constant name="KEY_MACRON" value="175" enum="KeyList">
|
||||
Macron Key
|
||||
¯ key.
|
||||
</constant>
|
||||
<constant name="KEY_DEGREE" value="176" enum="KeyList">
|
||||
° key
|
||||
|
@ -716,19 +716,19 @@
|
|||
µ key
|
||||
</constant>
|
||||
<constant name="KEY_PARAGRAPH" value="182" enum="KeyList">
|
||||
Paragraph Key
|
||||
¶ key.
|
||||
</constant>
|
||||
<constant name="KEY_PERIODCENTERED" value="183" enum="KeyList">
|
||||
· key
|
||||
</constant>
|
||||
<constant name="KEY_CEDILLA" value="184" enum="KeyList">
|
||||
¬ key
|
||||
¸ key.
|
||||
</constant>
|
||||
<constant name="KEY_ONESUPERIOR" value="185" enum="KeyList">
|
||||
¹ key
|
||||
</constant>
|
||||
<constant name="KEY_MASCULINE" value="186" enum="KeyList">
|
||||
♂ key
|
||||
º key.
|
||||
</constant>
|
||||
<constant name="KEY_GUILLEMOTRIGHT" value="187" enum="KeyList">
|
||||
» key
|
||||
|
@ -746,97 +746,97 @@
|
|||
¿ key
|
||||
</constant>
|
||||
<constant name="KEY_AGRAVE" value="192" enum="KeyList">
|
||||
à key
|
||||
À key.
|
||||
</constant>
|
||||
<constant name="KEY_AACUTE" value="193" enum="KeyList">
|
||||
á key
|
||||
Á key.
|
||||
</constant>
|
||||
<constant name="KEY_ACIRCUMFLEX" value="194" enum="KeyList">
|
||||
â key
|
||||
 key.
|
||||
</constant>
|
||||
<constant name="KEY_ATILDE" value="195" enum="KeyList">
|
||||
ã key
|
||||
à key.
|
||||
</constant>
|
||||
<constant name="KEY_ADIAERESIS" value="196" enum="KeyList">
|
||||
ä key
|
||||
Ä key.
|
||||
</constant>
|
||||
<constant name="KEY_ARING" value="197" enum="KeyList">
|
||||
å key
|
||||
Å key.
|
||||
</constant>
|
||||
<constant name="KEY_AE" value="198" enum="KeyList">
|
||||
æ key
|
||||
Æ key.
|
||||
</constant>
|
||||
<constant name="KEY_CCEDILLA" value="199" enum="KeyList">
|
||||
ç key
|
||||
Ç key.
|
||||
</constant>
|
||||
<constant name="KEY_EGRAVE" value="200" enum="KeyList">
|
||||
è key
|
||||
È key.
|
||||
</constant>
|
||||
<constant name="KEY_EACUTE" value="201" enum="KeyList">
|
||||
é key
|
||||
É key.
|
||||
</constant>
|
||||
<constant name="KEY_ECIRCUMFLEX" value="202" enum="KeyList">
|
||||
ê key
|
||||
Ê key.
|
||||
</constant>
|
||||
<constant name="KEY_EDIAERESIS" value="203" enum="KeyList">
|
||||
ë key
|
||||
Ë key.
|
||||
</constant>
|
||||
<constant name="KEY_IGRAVE" value="204" enum="KeyList">
|
||||
ì key
|
||||
Ì key.
|
||||
</constant>
|
||||
<constant name="KEY_IACUTE" value="205" enum="KeyList">
|
||||
í key
|
||||
Í key.
|
||||
</constant>
|
||||
<constant name="KEY_ICIRCUMFLEX" value="206" enum="KeyList">
|
||||
î key
|
||||
Î key.
|
||||
</constant>
|
||||
<constant name="KEY_IDIAERESIS" value="207" enum="KeyList">
|
||||
ë key
|
||||
Ï key.
|
||||
</constant>
|
||||
<constant name="KEY_ETH" value="208" enum="KeyList">
|
||||
ð key
|
||||
Ð key.
|
||||
</constant>
|
||||
<constant name="KEY_NTILDE" value="209" enum="KeyList">
|
||||
ñ key
|
||||
Ñ key.
|
||||
</constant>
|
||||
<constant name="KEY_OGRAVE" value="210" enum="KeyList">
|
||||
ò key
|
||||
Ò key.
|
||||
</constant>
|
||||
<constant name="KEY_OACUTE" value="211" enum="KeyList">
|
||||
ó key
|
||||
Ó key.
|
||||
</constant>
|
||||
<constant name="KEY_OCIRCUMFLEX" value="212" enum="KeyList">
|
||||
ô key
|
||||
Ô key.
|
||||
</constant>
|
||||
<constant name="KEY_OTILDE" value="213" enum="KeyList">
|
||||
õ key
|
||||
Õ key.
|
||||
</constant>
|
||||
<constant name="KEY_ODIAERESIS" value="214" enum="KeyList">
|
||||
ö key
|
||||
Ö key.
|
||||
</constant>
|
||||
<constant name="KEY_MULTIPLY" value="215" enum="KeyList">
|
||||
× key
|
||||
</constant>
|
||||
<constant name="KEY_OOBLIQUE" value="216" enum="KeyList">
|
||||
ø key
|
||||
Ø key.
|
||||
</constant>
|
||||
<constant name="KEY_UGRAVE" value="217" enum="KeyList">
|
||||
ù key
|
||||
Ù key.
|
||||
</constant>
|
||||
<constant name="KEY_UACUTE" value="218" enum="KeyList">
|
||||
ú key
|
||||
Ú key.
|
||||
</constant>
|
||||
<constant name="KEY_UCIRCUMFLEX" value="219" enum="KeyList">
|
||||
û key
|
||||
Û key.
|
||||
</constant>
|
||||
<constant name="KEY_UDIAERESIS" value="220" enum="KeyList">
|
||||
ü key
|
||||
Ü key.
|
||||
</constant>
|
||||
<constant name="KEY_YACUTE" value="221" enum="KeyList">
|
||||
ý key
|
||||
Ý key.
|
||||
</constant>
|
||||
<constant name="KEY_THORN" value="222" enum="KeyList">
|
||||
þ key
|
||||
Þ key.
|
||||
</constant>
|
||||
<constant name="KEY_SSHARP" value="223" enum="KeyList">
|
||||
ß key
|
||||
|
@ -965,7 +965,7 @@
|
|||
Joypad Button 15
|
||||
</constant>
|
||||
<constant name="JOY_BUTTON_MAX" value="16" enum="JoystickList">
|
||||
Joypad Button 16
|
||||
Represents the maximum number of joystick buttons supported.
|
||||
</constant>
|
||||
<constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList">
|
||||
DUALSHOCK circle button
|
||||
|
@ -992,16 +992,16 @@
|
|||
XBOX controller Y button
|
||||
</constant>
|
||||
<constant name="JOY_DS_A" value="1" enum="JoystickList">
|
||||
DualShock controller A button
|
||||
Nintendo controller A button.
|
||||
</constant>
|
||||
<constant name="JOY_DS_B" value="0" enum="JoystickList">
|
||||
DualShock controller B button
|
||||
Nintendo controller B button.
|
||||
</constant>
|
||||
<constant name="JOY_DS_X" value="3" enum="JoystickList">
|
||||
DualShock controller X button
|
||||
Nintendo controller X button.
|
||||
</constant>
|
||||
<constant name="JOY_DS_Y" value="2" enum="JoystickList">
|
||||
DualShock controller Y button
|
||||
Nintendo controller Y button.
|
||||
</constant>
|
||||
<constant name="JOY_SELECT" value="10" enum="JoystickList">
|
||||
Joypad Button Select
|
||||
|
@ -1052,8 +1052,10 @@
|
|||
Joypad Right Stick Vertical Axis
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_4" value="4" enum="JoystickList">
|
||||
Generic gamepad axis 4.
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_5" value="5" enum="JoystickList">
|
||||
Generic gamepad axis 5.
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_6" value="6" enum="JoystickList">
|
||||
Joypad Left Trigger Analog Axis
|
||||
|
@ -1062,10 +1064,13 @@
|
|||
Joypad Right Trigger Analog Axis
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_8" value="8" enum="JoystickList">
|
||||
Generic gamepad axis 8.
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_9" value="9" enum="JoystickList">
|
||||
Generic gamepad axis 9.
|
||||
</constant>
|
||||
<constant name="JOY_AXIS_MAX" value="10" enum="JoystickList">
|
||||
Represents the maximum number of joystick axes supported.
|
||||
</constant>
|
||||
<constant name="JOY_ANALOG_LX" value="0" enum="JoystickList">
|
||||
Joypad Left Stick Horizontal Axis
|
||||
|
@ -1086,228 +1091,292 @@
|
|||
Joypad Right Analog Trigger
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_NOTE_OFF" value="8" enum="MidiMessageList">
|
||||
MIDI note OFF message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_NOTE_ON" value="9" enum="MidiMessageList">
|
||||
MIDI note ON message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_AFTERTOUCH" value="10" enum="MidiMessageList">
|
||||
MIDI aftertouch message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_CONTROL_CHANGE" value="11" enum="MidiMessageList">
|
||||
MIDI control change message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_PROGRAM_CHANGE" value="12" enum="MidiMessageList">
|
||||
MIDI program change message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_CHANNEL_PRESSURE" value="13" enum="MidiMessageList">
|
||||
MIDI channel pressure message.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_PITCH_BEND" value="14" enum="MidiMessageList">
|
||||
MIDI pitch bend message.
|
||||
</constant>
|
||||
<constant name="OK" value="0" enum="Error">
|
||||
Functions that return Error return OK when no error occurred. Most functions don't return errors and/or just print errors to STDOUT.
|
||||
Methods that return [enum Error] return [constant OK] when no error occurred. Note that many functions don't return an error code but will print error messages to stdout.
|
||||
Since [constant OK] has value 0, and all other failure codes are positive integers, it can also be used in boolean checks, e.g.:
|
||||
[codeblock]
|
||||
var err = method_that_returns_error()
|
||||
if (err != OK):
|
||||
print("Failure!)
|
||||
# Or, equivalent:
|
||||
if (err):
|
||||
print("Still failing!)
|
||||
[/codeblock]
|
||||
</constant>
|
||||
<constant name="FAILED" value="1" enum="Error">
|
||||
Generic error.
|
||||
</constant>
|
||||
<constant name="ERR_UNAVAILABLE" value="2" enum="Error">
|
||||
Unavailable error
|
||||
Unavailable error.
|
||||
</constant>
|
||||
<constant name="ERR_UNCONFIGURED" value="3" enum="Error">
|
||||
Unconfigured error
|
||||
Unconfigured error.
|
||||
</constant>
|
||||
<constant name="ERR_UNAUTHORIZED" value="4" enum="Error">
|
||||
Unauthorized error
|
||||
Unauthorized error.
|
||||
</constant>
|
||||
<constant name="ERR_PARAMETER_RANGE_ERROR" value="5" enum="Error">
|
||||
Parameter range error
|
||||
Parameter range error.
|
||||
</constant>
|
||||
<constant name="ERR_OUT_OF_MEMORY" value="6" enum="Error">
|
||||
Out of memory (OOM) error
|
||||
Out of memory (OOM) error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_NOT_FOUND" value="7" enum="Error">
|
||||
File: Not found error
|
||||
File: Not found error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_BAD_DRIVE" value="8" enum="Error">
|
||||
File: Bad drive error
|
||||
File: Bad drive error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_BAD_PATH" value="9" enum="Error">
|
||||
File: Bad path error
|
||||
File: Bad path error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_NO_PERMISSION" value="10" enum="Error">
|
||||
File: No permission error
|
||||
File: No permission error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_ALREADY_IN_USE" value="11" enum="Error">
|
||||
File: Already in use error
|
||||
File: Already in use error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_CANT_OPEN" value="12" enum="Error">
|
||||
File: Can't open error
|
||||
File: Can't open error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_CANT_WRITE" value="13" enum="Error">
|
||||
File: Can't write error
|
||||
File: Can't write error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_CANT_READ" value="14" enum="Error">
|
||||
File: Can't read error
|
||||
File: Can't read error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_UNRECOGNIZED" value="15" enum="Error">
|
||||
File: Unrecognized error
|
||||
File: Unrecognized error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_CORRUPT" value="16" enum="Error">
|
||||
File: Corrupt error
|
||||
File: Corrupt error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_MISSING_DEPENDENCIES" value="17" enum="Error">
|
||||
File: Missing dependencies error
|
||||
File: Missing dependencies error.
|
||||
</constant>
|
||||
<constant name="ERR_FILE_EOF" value="18" enum="Error">
|
||||
File: End of file (EOF) error
|
||||
File: End of file (EOF) error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_OPEN" value="19" enum="Error">
|
||||
Can't open error
|
||||
Can't open error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_CREATE" value="20" enum="Error">
|
||||
Can't create error
|
||||
</constant>
|
||||
<constant name="ERR_PARSE_ERROR" value="43" enum="Error">
|
||||
Parse error
|
||||
Can't create error.
|
||||
</constant>
|
||||
<constant name="ERR_QUERY_FAILED" value="21" enum="Error">
|
||||
Query failed error
|
||||
Query failed error.
|
||||
</constant>
|
||||
<constant name="ERR_ALREADY_IN_USE" value="22" enum="Error">
|
||||
Already in use error
|
||||
Already in use error.
|
||||
</constant>
|
||||
<constant name="ERR_LOCKED" value="23" enum="Error">
|
||||
Locked error
|
||||
Locked error.
|
||||
</constant>
|
||||
<constant name="ERR_TIMEOUT" value="24" enum="Error">
|
||||
Timeout error
|
||||
Timeout error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_CONNECT" value="25" enum="Error">
|
||||
Can't connect error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_RESOLVE" value="26" enum="Error">
|
||||
Can't resolve error.
|
||||
</constant>
|
||||
<constant name="ERR_CONNECTION_ERROR" value="27" enum="Error">
|
||||
Connection error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_ACQUIRE_RESOURCE" value="28" enum="Error">
|
||||
Can't acquire resource error
|
||||
Can't acquire resource error.
|
||||
</constant>
|
||||
<constant name="ERR_CANT_FORK" value="29" enum="Error">
|
||||
Can't fork process error.
|
||||
</constant>
|
||||
<constant name="ERR_INVALID_DATA" value="30" enum="Error">
|
||||
Invalid data error
|
||||
Invalid data error.
|
||||
</constant>
|
||||
<constant name="ERR_INVALID_PARAMETER" value="31" enum="Error">
|
||||
Invalid parameter error
|
||||
Invalid parameter error.
|
||||
</constant>
|
||||
<constant name="ERR_ALREADY_EXISTS" value="32" enum="Error">
|
||||
Already exists error
|
||||
Already exists error.
|
||||
</constant>
|
||||
<constant name="ERR_DOES_NOT_EXIST" value="33" enum="Error">
|
||||
Does not exist error
|
||||
Does not exist error.
|
||||
</constant>
|
||||
<constant name="ERR_DATABASE_CANT_READ" value="34" enum="Error">
|
||||
Database: Read error
|
||||
Database: Read error.
|
||||
</constant>
|
||||
<constant name="ERR_DATABASE_CANT_WRITE" value="35" enum="Error">
|
||||
Database: Write error
|
||||
Database: Write error.
|
||||
</constant>
|
||||
<constant name="ERR_COMPILATION_FAILED" value="36" enum="Error">
|
||||
Compilation failed error
|
||||
Compilation failed error.
|
||||
</constant>
|
||||
<constant name="ERR_METHOD_NOT_FOUND" value="37" enum="Error">
|
||||
Method not found error
|
||||
Method not found error.
|
||||
</constant>
|
||||
<constant name="ERR_LINK_FAILED" value="38" enum="Error">
|
||||
Linking failed error
|
||||
Linking failed error.
|
||||
</constant>
|
||||
<constant name="ERR_SCRIPT_FAILED" value="39" enum="Error">
|
||||
Script failed error
|
||||
Script failed error.
|
||||
</constant>
|
||||
<constant name="ERR_CYCLIC_LINK" value="40" enum="Error">
|
||||
Cycling link (import cycle) error
|
||||
Cycling link (import cycle) error.
|
||||
</constant>
|
||||
<constant name="ERR_INVALID_DECLARATION" value="41" enum="Error">
|
||||
Invalid declaration error.
|
||||
</constant>
|
||||
<constant name="ERR_DUPLICATE_SYMBOL" value="42" enum="Error">
|
||||
Duplicate symbol error.
|
||||
</constant>
|
||||
<constant name="ERR_PARSE_ERROR" value="43" enum="Error">
|
||||
Parse error.
|
||||
</constant>
|
||||
<constant name="ERR_BUSY" value="44" enum="Error">
|
||||
Busy error
|
||||
Busy error.
|
||||
</constant>
|
||||
<constant name="ERR_SKIP" value="45" enum="Error">
|
||||
Skip error.
|
||||
</constant>
|
||||
<constant name="ERR_HELP" value="46" enum="Error">
|
||||
Help error
|
||||
Help error.
|
||||
</constant>
|
||||
<constant name="ERR_BUG" value="47" enum="Error">
|
||||
Bug error
|
||||
Bug error.
|
||||
</constant>
|
||||
<constant name="ERR_PRINTER_ON_FIRE" value="48" enum="Error">
|
||||
Printer on fire error. (This is an easter egg, no engine methods return this error code.)
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_NONE" value="0" enum="PropertyHint">
|
||||
No hint for edited property.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint">
|
||||
Hints that the string is a range, defined as "min,max" or "min,max,step". This is valid for integers and floats.
|
||||
Hints that an integer or float property should be within a range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"or_greater"[/code] and/or [code]"or_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"-360,360,1,or_greater,or_lesser"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_EXP_RANGE" value="2" enum="PropertyHint">
|
||||
Hints that the string is an exponential range, defined as "min,max" or "min,max,step". This is valid for integers and floats.
|
||||
Hints that an integer or float property should be within an exponential range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"or_greater"[/code] and/or [code]"or_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"0.01,100,0.01,or_greater"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_ENUM" value="3" enum="PropertyHint">
|
||||
Property hint for an enumerated value, like "Hello,Something,Else". This is valid for integer, float and string properties.
|
||||
Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string such as [code]"Hello,Something,Else"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_EXP_EASING" value="4" enum="PropertyHint">
|
||||
Hints that a float property should be edited via an exponential easing function. The hint string can include [code]"attenuation"[/code] to flip the curve horizontally and/or [code]"inout"[/code] to also include in/out easing.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_LENGTH" value="5" enum="PropertyHint">
|
||||
Deprecated hint, unused.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_KEY_ACCEL" value="7" enum="PropertyHint">
|
||||
Deprecated hint, unused.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_FLAGS" value="8" enum="PropertyHint">
|
||||
Property hint for a bitmask description, for bits 0,1,2,3 and 5 the hint would be like "Bit0,Bit1,Bit2,Bit3,,Bit5". Valid only for integers.
|
||||
Hints that an integer property is a bitmask with named bit flags. For example, to allow toggling bits 0, 1, 2 and 4, the hint could be something like [code]"Bit0,Bit1,Bit2,,Bit4"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="9" enum="PropertyHint">
|
||||
Hints that an integer property is a bitmask using the optionally named 2D render layers.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="10" enum="PropertyHint">
|
||||
Hints that an integer property is a bitmask using the optionally named 2D physics layers.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="11" enum="PropertyHint">
|
||||
Hints that an integer property is a bitmask using the optionally named 3D render layers.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="12" enum="PropertyHint">
|
||||
Hints that an integer property is a bitmask using the optionally named 3D physics layers.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_FILE" value="13" enum="PropertyHint">
|
||||
String property is a file (so pop up a file dialog when edited). Hint string can be a set of wildcards like "*.doc".
|
||||
Hints that a string property is a path to a file. Editing it will show a file dialog for picking the path. The hint string can be a set of filters with wildcards like [code]"*.png,*.jpg"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_DIR" value="14" enum="PropertyHint">
|
||||
String property is a directory (so pop up a file dialog when edited).
|
||||
Hints that a string property is a path to a directory. Editing it will show a file dialog for picking the path.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_GLOBAL_FILE" value="15" enum="PropertyHint">
|
||||
Hints that a string property is an absolute path to a file outside the project folder. Editing it will show a file dialog for picking the path. The hint string can be a set of filters with wildcards like [code]"*.png,*.jpg"[/code].
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_GLOBAL_DIR" value="16" enum="PropertyHint">
|
||||
Hints that a string property is an absolute path to a directory outside the project folder. Editing it will show a file dialog for picking the path.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_RESOURCE_TYPE" value="17" enum="PropertyHint">
|
||||
String property is a resource, so open the resource popup menu when edited.
|
||||
Hints that a property is an instance of a [Resource]-derived type, optionally specified via the hint string (e.g. [code]"Texture"[/code]). Editing it will show a popup menu of valid resource types to instantiate.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_MULTILINE_TEXT" value="18" enum="PropertyHint">
|
||||
Hints that a string property is text with line breaks. Editing it will show a text input field where line breaks can be typed.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="19" enum="PropertyHint">
|
||||
Hints that a string property should have a placeholder text visible on its input field, whenever the property is empty. The hint string is the placeholder text to use.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="20" enum="PropertyHint">
|
||||
Hints that a color property should be edited without changing its alpha component, i.e. only R, G and B channels are edited.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="21" enum="PropertyHint">
|
||||
Hints that the image is compressed using lossy compression.
|
||||
Hints that an image is compressed using lossy compression.
|
||||
</constant>
|
||||
<constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="22" enum="PropertyHint">
|
||||
Hints that the image is compressed using lossless compression.
|
||||
Hints that an image is compressed using lossless compression.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_STORAGE" value="1" enum="PropertyUsageFlags">
|
||||
Property will be used as storage (default).
|
||||
The property is serialized and saved in the scene file (default).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_EDITOR" value="2" enum="PropertyUsageFlags">
|
||||
Property will be visible in editor (default).
|
||||
The property is shown in the editor inspector (default).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_NETWORK" value="4" enum="PropertyUsageFlags">
|
||||
Deprecated usage flag, unused.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_EDITOR_HELPER" value="8" enum="PropertyUsageFlags">
|
||||
Deprecated usage flag, unused.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_CHECKABLE" value="16" enum="PropertyUsageFlags">
|
||||
The property can be checked in the editor inspector.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_CHECKED" value="32" enum="PropertyUsageFlags">
|
||||
The property is checked in the editor inspector.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_INTERNATIONALIZED" value="64" enum="PropertyUsageFlags">
|
||||
The property is a translatable string.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_GROUP" value="128" enum="PropertyUsageFlags">
|
||||
Used to group properties together in the editor.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_CATEGORY" value="256" enum="PropertyUsageFlags">
|
||||
Used to categorize properties together in the editor.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048" enum="PropertyUsageFlags">
|
||||
The property does not save its state in [PackedScene].
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096" enum="PropertyUsageFlags">
|
||||
Editing the property prompts the user for restarting the editor.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_SCRIPT_VARIABLE" value="8192" enum="PropertyUsageFlags">
|
||||
The property is a script variable which should be serialized and saved in the scene file.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_DEFAULT" value="7" enum="PropertyUsageFlags">
|
||||
Default usage (storage and editor).
|
||||
Default usage (storage, editor and network).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71" enum="PropertyUsageFlags">
|
||||
Default usage for translatable strings (storage, editor, network and internationalized).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_NOEDITOR" value="5" enum="PropertyUsageFlags">
|
||||
Default usage but without showing the property in the editor (storage, network).
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags">
|
||||
Flag for normal method
|
||||
|
@ -1316,23 +1385,25 @@
|
|||
Flag for editor method
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_NOSCRIPT" value="4" enum="MethodFlags">
|
||||
Deprecated method flag, unused.
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_CONST" value="8" enum="MethodFlags">
|
||||
Flag for constant method
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_REVERSE" value="16" enum="MethodFlags">
|
||||
Deprecated method flag, unused.
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_VIRTUAL" value="32" enum="MethodFlags">
|
||||
Flag for virtual method
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_FROM_SCRIPT" value="64" enum="MethodFlags">
|
||||
Flag for method from script
|
||||
Deprecated method flag, unused.
|
||||
</constant>
|
||||
<constant name="METHOD_FLAGS_DEFAULT" value="1" enum="MethodFlags">
|
||||
Default method flags
|
||||
</constant>
|
||||
<constant name="TYPE_NIL" value="0" enum="Variant.Type">
|
||||
Variable is of type nil (only applied for null).
|
||||
Variable is of type [Nil] (only applied for [code]null[/code]).
|
||||
</constant>
|
||||
<constant name="TYPE_BOOL" value="1" enum="Variant.Type">
|
||||
Variable is of type [bool].
|
||||
|
@ -1341,7 +1412,7 @@
|
|||
Variable is of type [int].
|
||||
</constant>
|
||||
<constant name="TYPE_REAL" value="3" enum="Variant.Type">
|
||||
Variable is of type [float]/real.
|
||||
Variable is of type [float] (real).
|
||||
</constant>
|
||||
<constant name="TYPE_STRING" value="4" enum="Variant.Type">
|
||||
Variable is of type [String].
|
||||
|
@ -1413,59 +1484,85 @@
|
|||
Variable is of type [PoolColorArray].
|
||||
</constant>
|
||||
<constant name="TYPE_MAX" value="27" enum="Variant.Type">
|
||||
Marker for end of type constants.
|
||||
Represents the size of the [enum Variant.Type] enum.
|
||||
</constant>
|
||||
<constant name="OP_EQUAL" value="0" enum="Variant.Operator">
|
||||
Equality operator ([code]==[/code]).
|
||||
</constant>
|
||||
<constant name="OP_NOT_EQUAL" value="1" enum="Variant.Operator">
|
||||
Inequality operator ([code]!=[/code]).
|
||||
</constant>
|
||||
<constant name="OP_LESS" value="2" enum="Variant.Operator">
|
||||
Less than operator ([code]<[/code]).
|
||||
</constant>
|
||||
<constant name="OP_LESS_EQUAL" value="3" enum="Variant.Operator">
|
||||
Less than or equal operator ([code]<=[/code]).
|
||||
</constant>
|
||||
<constant name="OP_GREATER" value="4" enum="Variant.Operator">
|
||||
Greater than operator ([code]>[/code]).
|
||||
</constant>
|
||||
<constant name="OP_GREATER_EQUAL" value="5" enum="Variant.Operator">
|
||||
Greater than or equal operator ([code]>=[/code]).
|
||||
</constant>
|
||||
<constant name="OP_ADD" value="6" enum="Variant.Operator">
|
||||
Addition operator ([code]+[/code]).
|
||||
</constant>
|
||||
<constant name="OP_SUBTRACT" value="7" enum="Variant.Operator">
|
||||
Subtraction operator ([code]-[/code]).
|
||||
</constant>
|
||||
<constant name="OP_MULTIPLY" value="8" enum="Variant.Operator">
|
||||
Multiplication operator ([code]*[/code]).
|
||||
</constant>
|
||||
<constant name="OP_DIVIDE" value="9" enum="Variant.Operator">
|
||||
Division operator ([code]/[/code]).
|
||||
</constant>
|
||||
<constant name="OP_NEGATE" value="10" enum="Variant.Operator">
|
||||
Unary negation operator ([code]-[/code]).
|
||||
</constant>
|
||||
<constant name="OP_POSITIVE" value="11" enum="Variant.Operator">
|
||||
Unary plus operator ([code]+[/code]).
|
||||
</constant>
|
||||
<constant name="OP_MODULE" value="12" enum="Variant.Operator">
|
||||
Remainder/modulo operator ([code]%[/code]).
|
||||
</constant>
|
||||
<constant name="OP_STRING_CONCAT" value="13" enum="Variant.Operator">
|
||||
String concatenation operator ([code]+[/code]).
|
||||
</constant>
|
||||
<constant name="OP_SHIFT_LEFT" value="14" enum="Variant.Operator">
|
||||
Left shift operator ([code]<<[/code]).
|
||||
</constant>
|
||||
<constant name="OP_SHIFT_RIGHT" value="15" enum="Variant.Operator">
|
||||
Right shift operator ([code]>>[/code]).
|
||||
</constant>
|
||||
<constant name="OP_BIT_AND" value="16" enum="Variant.Operator">
|
||||
Bitwise AND operator ([code]&[/code]).
|
||||
</constant>
|
||||
<constant name="OP_BIT_OR" value="17" enum="Variant.Operator">
|
||||
Bitwise OR operator ([code]|[/code]).
|
||||
</constant>
|
||||
<constant name="OP_BIT_XOR" value="18" enum="Variant.Operator">
|
||||
Bitwise XOR operator ([code]^[/code]).
|
||||
</constant>
|
||||
<constant name="OP_BIT_NEGATE" value="19" enum="Variant.Operator">
|
||||
Bitwise NOT operator ([code]~[/code]).
|
||||
</constant>
|
||||
<constant name="OP_AND" value="20" enum="Variant.Operator">
|
||||
Logical AND operator ([code]and[/code] or [code]&&[/code]).
|
||||
</constant>
|
||||
<constant name="OP_OR" value="21" enum="Variant.Operator">
|
||||
Logical OR operator ([code]or[/code] or [code]||[/code]).
|
||||
</constant>
|
||||
<constant name="OP_XOR" value="22" enum="Variant.Operator">
|
||||
Logical XOR operator (not implemented in GDScript).
|
||||
</constant>
|
||||
<constant name="OP_NOT" value="23" enum="Variant.Operator">
|
||||
Logical NOT operator ([code]not[/code] or [code]![/code]).
|
||||
</constant>
|
||||
<constant name="OP_IN" value="24" enum="Variant.Operator">
|
||||
Logical IN operator ([code]in[/code]).
|
||||
</constant>
|
||||
<constant name="OP_MAX" value="25" enum="Variant.Operator">
|
||||
Represents the size of the [enum Variant.Operator] enum.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AABB" category="Built-In Types" version="3.1">
|
||||
<class name="AABB" category="Built-In Types" version="3.1.2">
|
||||
<brief_description>
|
||||
Axis-Aligned Bounding Box.
|
||||
</brief_description>
|
||||
|
@ -7,10 +7,8 @@
|
|||
AABB consists of a position, a size, and several utility functions. It is typically used for fast overlap tests.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
|
||||
<link>https://docs.godotengine.org/en/3.1/tutorials/math/index.html</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="AABB">
|
||||
<return type="AABB">
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVRAnchor" inherits="Spatial" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Anchor point in AR Space.
|
||||
</brief_description>
|
||||
<description>
|
||||
The ARVR Anchor point is a spatial node that maps a real world location identified by the AR platform to a position within the game world. For example, as long as plane detection in ARKit is on, ARKit will identify and update the position of planes (tables, floors, etc) and create anchors for them.
|
||||
This node is mapped to one of the anchors through its unique id. When you receive a signal that a new anchor is available, you should add this node to your scene for that anchor. You can predefine nodes and set the id and the nodes will simply remain on 0,0,0 until a plane is recognised.
|
||||
This node is mapped to one of the anchors through its unique id. When you receive a signal that a new anchor is available, you should add this node to your scene for that anchor. You can predefine nodes and set the id and the nodes will simply remain on 0,0,0 until a plane is recognized.
|
||||
Keep in mind that, as long as plane detection is enabled, the size, placing and orientation of an anchor will be updated as the detection logic learns more about the real world out there especially if only part of the surface is in view.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_anchor_name" qualifiers="const">
|
||||
<return type="String">
|
||||
|
@ -24,7 +22,7 @@
|
|||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Returns true if the anchor is being tracked and false if no anchor with this id is currently known.
|
||||
Returns [code]true[/code] if the anchor is being tracked and [code]false[/code] if no anchor with this id is currently known.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_plane" qualifiers="const">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRCamera" inherits="Camera" category="Core" version="3.1">
|
||||
<class name="ARVRCamera" inherits="Camera" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
A camera node with a few overrules for AR/VR applied, such as location tracking.
|
||||
</brief_description>
|
||||
|
@ -9,8 +9,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRController" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVRController" inherits="Spatial" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
A spatial node representing a spatially tracked controller.
|
||||
</brief_description>
|
||||
|
@ -10,8 +10,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_controller_name" qualifiers="const">
|
||||
<return type="String">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRInterface" inherits="Reference" category="Core" version="3.1">
|
||||
<class name="ARVRInterface" inherits="Reference" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Base class for ARVR interface implementation.
|
||||
</brief_description>
|
||||
|
@ -9,8 +9,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_capabilities" qualifiers="const">
|
||||
<return type="int">
|
||||
|
@ -55,7 +53,7 @@
|
|||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Returns true if the current output of this interface is in stereo.
|
||||
Returns [code]true[/code] if the current output of this interface is in stereo.
|
||||
</description>
|
||||
</method>
|
||||
<method name="uninitialize">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.1">
|
||||
<class name="ARVROrigin" inherits="Spatial" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Our origin point in AR/VR.
|
||||
</brief_description>
|
||||
|
@ -11,8 +11,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.1">
|
||||
<class name="ARVRPositionalTracker" inherits="Object" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
A tracked object
|
||||
</brief_description>
|
||||
|
@ -10,8 +10,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_hand" qualifiers="const">
|
||||
<return type="int" enum="ARVRPositionalTracker.TrackerHand">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="ARVRServer" inherits="Object" category="Core" version="3.1">
|
||||
<class name="ARVRServer" inherits="Object" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
This is our AR/VR Server.
|
||||
</brief_description>
|
||||
|
@ -8,8 +8,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="center_on_hmd">
|
||||
<return type="void">
|
||||
|
@ -56,7 +54,7 @@
|
|||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Get the number of interfaces currently registered with the AR/VR server. If your game supports multiple AR/VR platforms, you can look through the available interface, and either present the user with a selection or simply try an initialize each interface and use the first one that returns true.
|
||||
Get the number of interfaces currently registered with the AR/VR server. If your game supports multiple AR/VR platforms, you can look through the available interface, and either present the user with a selection or simply try an initialize each interface and use the first one that returns [code]true[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_interfaces" qualifiers="const">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AStar" inherits="Reference" category="Core" version="3.1">
|
||||
<class name="AStar" inherits="Reference" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
AStar class representation that uses vectors as edges.
|
||||
</brief_description>
|
||||
|
@ -9,8 +9,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="_compute_cost" qualifiers="virtual">
|
||||
<return type="float">
|
||||
|
@ -46,8 +44,8 @@
|
|||
<description>
|
||||
Adds a new point at the given position with the given identifier. The algorithm prefers points with lower [code]weight_scale[/code] to form a path. The [code]id[/code] must be 0 or larger, and the [code]weight_scale[/code] must be 1 or larger.
|
||||
[codeblock]
|
||||
var as = AStar.new()
|
||||
as.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with weight_scale 4 and id 1
|
||||
var astar = AStar.new()
|
||||
astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with weight_scale 4 and id 1
|
||||
[/codeblock]
|
||||
If there already exists a point for the given id, its position and weight scale are updated to the given values.
|
||||
</description>
|
||||
|
@ -82,10 +80,10 @@
|
|||
<description>
|
||||
Creates a 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 allowed, not the reverse direction.
|
||||
[codeblock]
|
||||
var as = AStar.new()
|
||||
as.add_point(1, Vector3(1, 1, 0))
|
||||
as.add_point(2, Vector3(0, 5, 0))
|
||||
as.connect_points(1, 2, false)
|
||||
var astar = AStar.new()
|
||||
astar.add_point(1, Vector3(1, 1, 0))
|
||||
astar.add_point(2, Vector3(0, 5, 0))
|
||||
astar.connect_points(1, 2, false)
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -124,11 +122,11 @@
|
|||
<description>
|
||||
Returns the closest position to [code]to_position[/code] that resides inside a segment between two connected points.
|
||||
[codeblock]
|
||||
var as = AStar.new()
|
||||
as.add_point(1, Vector3(0, 0, 0))
|
||||
as.add_point(2, Vector3(0, 5, 0))
|
||||
as.connect_points(1, 2)
|
||||
var res = as.get_closest_position_in_segment(Vector3(3, 3, 0)) # returns (0, 3, 0)
|
||||
var astar = AStar.new()
|
||||
astar.add_point(1, Vector3(0, 0, 0))
|
||||
astar.add_point(2, Vector3(0, 5, 0))
|
||||
astar.connect_points(1, 2)
|
||||
var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns (0, 3, 0)
|
||||
[/codeblock]
|
||||
The result is in the segment that goes from [code]y = 0[/code] to [code]y = 5[/code]. It's the closest position in the segment to the given point.
|
||||
</description>
|
||||
|
@ -143,19 +141,18 @@
|
|||
<description>
|
||||
Returns an array with the ids of the points that form the path found by AStar between the given points. The array is ordered from the starting point to the ending point of the path.
|
||||
[codeblock]
|
||||
var as = AStar.new()
|
||||
as.add_point(1, Vector3(0, 0, 0))
|
||||
as.add_point(2, Vector3(0, 1, 0), 1) # default weight is 1
|
||||
as.add_point(3, Vector3(1, 1, 0))
|
||||
as.add_point(4, Vector3(2, 0, 0))
|
||||
var astar = AStar.new()
|
||||
astar.add_point(1, Vector3(0, 0, 0))
|
||||
astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1
|
||||
astar.add_point(3, Vector3(1, 1, 0))
|
||||
astar.add_point(4, Vector3(2, 0, 0))
|
||||
|
||||
as.connect_points(1, 2, false)
|
||||
as.connect_points(2, 3, false)
|
||||
as.connect_points(4, 3, false)
|
||||
as.connect_points(1, 4, false)
|
||||
as.connect_points(5, 4, false)
|
||||
astar.connect_points(1, 2, false)
|
||||
astar.connect_points(2, 3, false)
|
||||
astar.connect_points(4, 3, false)
|
||||
astar.connect_points(1, 4, false)
|
||||
|
||||
var res = as.get_id_path(1, 3) # returns [1, 2, 3]
|
||||
var res = astar.get_id_path(1, 3) # Returns [1, 2, 3]
|
||||
[/codeblock]
|
||||
If you change the 2nd point's weight to 3, then the result will be [code][1, 4, 3][/code] instead, because now even though the distance is longer, it's "easier" to get through point 4 than through point 2.
|
||||
</description>
|
||||
|
@ -168,16 +165,16 @@
|
|||
<description>
|
||||
Returns an array with the ids of the points that form the connect with the given point.
|
||||
[codeblock]
|
||||
var as = AStar.new()
|
||||
as.add_point(1, Vector3(0, 0, 0))
|
||||
as.add_point(2, Vector3(0, 1, 0))
|
||||
as.add_point(3, Vector3(1, 1, 0))
|
||||
as.add_point(4, Vector3(2, 0, 0))
|
||||
var astar = AStar.new()
|
||||
astar.add_point(1, Vector3(0, 0, 0))
|
||||
astar.add_point(2, Vector3(0, 1, 0))
|
||||
astar.add_point(3, Vector3(1, 1, 0))
|
||||
astar.add_point(4, Vector3(2, 0, 0))
|
||||
|
||||
as.connect_points(1, 2, true)
|
||||
as.connect_points(1, 3, true)
|
||||
astar.connect_points(1, 2, true)
|
||||
astar.connect_points(1, 3, true)
|
||||
|
||||
var neighbors = as.get_point_connections(1) # returns [2, 3]
|
||||
var neighbors = astar.get_point_connections(1) # Returns [2, 3]
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -226,6 +223,15 @@
|
|||
Returns whether a point associated with the given id exists.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_point_disabled" qualifiers="const">
|
||||
<return type="bool">
|
||||
</return>
|
||||
<argument index="0" name="id" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns whether a point is disabled or not for pathfinding. By default, all points are enabled.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_point">
|
||||
<return type="void">
|
||||
</return>
|
||||
|
@ -235,6 +241,17 @@
|
|||
Removes the point associated with the given id from the points pool.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_point_disabled">
|
||||
<return type="void">
|
||||
</return>
|
||||
<argument index="0" name="id" type="int">
|
||||
</argument>
|
||||
<argument index="1" name="disabled" type="bool" default="true">
|
||||
</argument>
|
||||
<description>
|
||||
Disables or enables the specified point for pathfinding. Useful for making a temporary obstacle.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_point_position">
|
||||
<return type="void">
|
||||
</return>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.1">
|
||||
<class name="AcceptDialog" inherits="WindowDialog" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Base dialog for user notification.
|
||||
</brief_description>
|
||||
|
@ -8,8 +8,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_button">
|
||||
<return type="Button">
|
||||
|
@ -38,14 +36,14 @@
|
|||
<return type="Label">
|
||||
</return>
|
||||
<description>
|
||||
Return the label used for built-in text.
|
||||
Returns the label used for built-in text.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_ok">
|
||||
<return type="Button">
|
||||
</return>
|
||||
<description>
|
||||
Return the OK Button.
|
||||
Returns the OK Button.
|
||||
</description>
|
||||
</method>
|
||||
<method name="register_text_enter">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.1">
|
||||
<class name="AnimatedSprite" inherits="Node2D" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Sprite node that can use multiple textures for animation.
|
||||
</brief_description>
|
||||
|
@ -8,14 +8,12 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="is_playing" qualifiers="const">
|
||||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Return true if an animation if currently being played.
|
||||
Returns [code]true[/code] if an animation if currently being played.
|
||||
</description>
|
||||
</method>
|
||||
<method name="play">
|
||||
|
@ -23,8 +21,10 @@
|
|||
</return>
|
||||
<argument index="0" name="anim" type="String" default="""">
|
||||
</argument>
|
||||
<argument index="1" name="backwards" type="bool" default="false">
|
||||
</argument>
|
||||
<description>
|
||||
Play the animation set in parameter. If no parameter is provided, the current animation is played.
|
||||
Play the animation set in parameter. If no parameter is provided, the current animation is played. Property [code]backwards[/code] plays the animation in reverse if set to [code]true[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="stop">
|
||||
|
@ -61,6 +61,7 @@
|
|||
If [code]true[/code], the [member animation] is currently playing.
|
||||
</member>
|
||||
<member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale">
|
||||
The animation speed is multiplied by this value.
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.1">
|
||||
<class name="AnimatedSprite3D" inherits="SpriteBase3D" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
2D sprite node in 3D world, that can use multiple 2D textures for animation.
|
||||
</brief_description>
|
||||
|
@ -8,14 +8,12 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="is_playing" qualifiers="const">
|
||||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Return true if an animation if currently being played.
|
||||
Returns [code]true[/code] if an animation if currently being played.
|
||||
</description>
|
||||
</method>
|
||||
<method name="play">
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatedTexture" inherits="Texture" category="Core" version="3.1">
|
||||
<class name="AnimatedTexture" inherits="Texture" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Proxy texture for simple frame-based animations.
|
||||
</brief_description>
|
||||
<description>
|
||||
[code]AnimatedTexture[/code] is a resource format for simple frame-based animations, where multiple frames textures can be chained automatically with a predefined delay for each frame. It's not a [Node], contrarily to [AnimationPlayer] or [AnimatedSprite], but has the advantage of being usable at any place where a [Texture] resource can be used, e.g. in a [TileSet].
|
||||
[code]AnimatedTexture[/code] 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.
|
||||
[code]AnimatedTexture[/code] currently requires all frame textures to have the same size, otherwise the bigger ones will be cropped to match the smallest one.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_frame_delay" qualifiers="const">
|
||||
<return type="float">
|
||||
|
@ -19,7 +17,7 @@
|
|||
<argument index="0" name="frame" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Retrieves the delayed assigned to the given [code]frame[/code] ID.
|
||||
Returns the given frame's delay value.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_frame_texture" qualifiers="const">
|
||||
|
@ -28,7 +26,7 @@
|
|||
<argument index="0" name="frame" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Retrieves the [Texture] assigned to the given [code]frame[/code] ID.
|
||||
Returns the given frame's [Texture].
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_frame_delay">
|
||||
|
@ -39,7 +37,7 @@
|
|||
<argument index="1" name="delay" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Defines an additional delay (in seconds) between this frame and the next one, that will be added to the time interval defined by [member fps]. By default, frames have no delay defined. If a delay value is defined, the final time interval between this frame and the next will be [code]1.0 / fps + delay[/code].
|
||||
Sets an additional delay (in seconds) between this frame and the next one, that will be added to the time interval defined by [member fps]. By default, frames have no delay defined. If a delay value is defined, the final time interval between this frame and the next will be [code]1.0 / fps + delay[/code].
|
||||
For example, for an animation with 3 frames, 2 FPS and a frame delay on the second frame of 1.2, the resulting playback will be:
|
||||
[codeblock]
|
||||
Frame 0: 0.5 s (1 / fps)
|
||||
|
@ -57,15 +55,15 @@
|
|||
<argument index="1" name="texture" type="Texture">
|
||||
</argument>
|
||||
<description>
|
||||
Assigns a [Texture] to the given [code]frame[/code] ID. IDs start at 0 (so the first frame has ID 0, and the last frame of the animation has ID [member frames] - 1).
|
||||
You can define any frame texture up to [constant MAX_FRAMES], but keep in mind that only frames from 0 to [member frames] - 1 will be part of the animation.
|
||||
Assigns a [Texture] to the given frame. Frame IDs start at 0, so the first frame has ID 0, and the last frame of the animation has ID [member frames] - 1.
|
||||
You can define any number of textures up to [constant MAX_FRAMES], but keep in mind that only frames from 0 to [member frames] - 1 will be part of the animation.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="fps" type="float" setter="set_fps" getter="get_fps">
|
||||
Number of 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]). Default value: 4.
|
||||
For example, an animation with 8 frames, no frame delay and a [code]fps[/code] value of 2 will run over 4 seconds, with one frame each 0.5 seconds.
|
||||
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]). Default value: 4.
|
||||
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.
|
||||
</member>
|
||||
<member name="frames" type="int" setter="set_frames" getter="get_frames">
|
||||
Number of frames to use in the animation. While you can create the frames independently with [method set_frame_texture], you need to set this value for the animation to take new frames into account. The maximum number of frames is [constant MAX_FRAMES]. Default value: 1.
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Animation" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="Animation" inherits="Resource" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Contains data used to animate everything in the engine.
|
||||
</brief_description>
|
||||
|
@ -17,10 +17,8 @@
|
|||
Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] or [AnimationTreePlayer] to be played back.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link>https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
|
||||
<link>https://docs.godotengine.org/en/3.1/tutorials/animation/index.html</link>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_track">
|
||||
<return type="int">
|
||||
|
@ -265,14 +263,14 @@
|
|||
<argument index="0" name="path" type="NodePath">
|
||||
</argument>
|
||||
<description>
|
||||
Return the index of the specified track. If the track is not found, return -1.
|
||||
Returns the index of the specified track. If the track is not found, return -1.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_track_count" qualifiers="const">
|
||||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Return the amount of tracks in the animation.
|
||||
Returns the amount of tracks in the animation.
|
||||
</description>
|
||||
</method>
|
||||
<method name="method_track_get_key_indices" qualifiers="const">
|
||||
|
@ -285,7 +283,7 @@
|
|||
<argument index="2" name="delta" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Return all the key indices of a method track, given a position and delta time.
|
||||
Returns all the key indices of a method track, given a position and delta time.
|
||||
</description>
|
||||
</method>
|
||||
<method name="method_track_get_name" qualifiers="const">
|
||||
|
@ -296,7 +294,7 @@
|
|||
<argument index="1" name="key_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the method name of a method track.
|
||||
Returns the method name of a method track.
|
||||
</description>
|
||||
</method>
|
||||
<method name="method_track_get_params" qualifiers="const">
|
||||
|
@ -307,7 +305,7 @@
|
|||
<argument index="1" name="key_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the arguments values to be called on a method track for a given key in a given track.
|
||||
Returns the arguments values to be called on a method track for a given key in a given track.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_track">
|
||||
|
@ -347,7 +345,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the interpolation type of a given track, from the INTERPOLATION_* enum.
|
||||
Returns the interpolation type of a given track, from the INTERPOLATION_* enum.
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_get_key_count" qualifiers="const">
|
||||
|
@ -356,7 +354,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the amount of keys in a given track.
|
||||
Returns the amount of keys in a given track.
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_get_key_time" qualifiers="const">
|
||||
|
@ -367,7 +365,7 @@
|
|||
<argument index="1" name="key_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the time at which the key is located.
|
||||
Returns the time at which the key is located.
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_get_key_transition" qualifiers="const">
|
||||
|
@ -378,7 +376,7 @@
|
|||
<argument index="1" name="key_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the transition curve (easing) for a specific key (see built-in math function "ease").
|
||||
Returns the transition curve (easing) for a specific key (see built-in math function "ease").
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_get_key_value" qualifiers="const">
|
||||
|
@ -389,7 +387,7 @@
|
|||
<argument index="1" name="key_idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the value of a given key in a given track.
|
||||
Returns the value of a given key in a given track.
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_get_path" qualifiers="const">
|
||||
|
@ -440,7 +438,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return true if the given track is imported. Else, return false.
|
||||
Returns [code]true[/code] if the given track is imported. Else, return [code]false[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="track_move_down">
|
||||
|
@ -600,7 +598,7 @@
|
|||
<argument index="1" name="time_sec" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Return the interpolated value of a transform track at a given time (in seconds). An array consisting of 3 elements: position ([Vector3]), rotation ([Quat]) and scale ([Vector3]).
|
||||
Returns the interpolated value of a transform track at a given time (in seconds). An array consisting of 3 elements: position ([Vector3]), rotation ([Quat]) and scale ([Vector3]).
|
||||
</description>
|
||||
</method>
|
||||
<method name="value_track_get_key_indices" qualifiers="const">
|
||||
|
@ -613,7 +611,7 @@
|
|||
<argument index="2" name="delta" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Return all the key indices of a value track, given a position and delta time.
|
||||
Returns all the key indices of a value track, given a position and delta time.
|
||||
</description>
|
||||
</method>
|
||||
<method name="value_track_get_update_mode" qualifiers="const">
|
||||
|
@ -622,7 +620,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Return the update mode of a value track.
|
||||
Returns the update mode of a value track.
|
||||
</description>
|
||||
</method>
|
||||
<method name="value_track_set_update_mode">
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNode" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AnimationNode" inherits="Resource" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Base resource for [AnimationTree] nodes.
|
||||
</brief_description>
|
||||
|
@ -9,8 +9,6 @@
|
|||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_input">
|
||||
<return type="void">
|
||||
|
@ -54,7 +52,7 @@
|
|||
<argument index="5" name="optimize" type="bool" default="true">
|
||||
</argument>
|
||||
<description>
|
||||
Blend an input. This is only useful for nodes created for an [AnimationNodeBlendTree]. Time is a delta, unless "seek" is true, in which case it is absolute. A filter mode may be optionally passed.
|
||||
Blend an input. This is only useful for nodes created for an [AnimationNodeBlendTree]. Time is a delta, unless "seek" is [code]true[/code], in which case it is absolute. A filter mode may be optionally passed.
|
||||
</description>
|
||||
</method>
|
||||
<method name="blend_node">
|
||||
|
@ -146,7 +144,7 @@
|
|||
<return type="String">
|
||||
</return>
|
||||
<description>
|
||||
Return true whether you want the blend tree editor to display filter editing on this node.
|
||||
Returns [code]true[/code] whether you want the blend tree editor to display filter editing on this node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_path_filtered" qualifiers="const">
|
||||
|
@ -155,7 +153,7 @@
|
|||
<argument index="0" name="path" type="NodePath">
|
||||
</argument>
|
||||
<description>
|
||||
Return true wether a given path is filtered.
|
||||
Returns [code]true[/code] whether a given path is filtered.
|
||||
</description>
|
||||
</method>
|
||||
<method name="process" qualifiers="virtual">
|
||||
|
@ -166,7 +164,7 @@
|
|||
<argument index="1" name="seek" type="bool">
|
||||
</argument>
|
||||
<description>
|
||||
Called when a custom node is processed. The argument "time" is relative, unless "seek" is true (in which case it is absolute).
|
||||
Called when a custom node is processed. The argument "time" is relative, unless "seek" is [code]true[/code] (in which case it is absolute).
|
||||
Here, call the [method blend_input], [method blend_node] or [method blend_animation] functions.
|
||||
You can also use [method get_parameter] and [method set_parameter] to modify local memory.
|
||||
This function returns the time left for the current animation to finish (if unsure, just pass the value from the main blend being called).
|
||||
|
@ -206,7 +204,7 @@
|
|||
</methods>
|
||||
<members>
|
||||
<member name="filter_enabled" type="bool" setter="set_filter_enabled" getter="is_filter_enabled">
|
||||
Return whether filtering is enabled.
|
||||
Returns whether filtering is enabled.
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
|
@ -217,6 +215,7 @@
|
|||
</signal>
|
||||
<signal name="tree_changed">
|
||||
<description>
|
||||
Emitted by nodes that inherit from this class and that have an internal tree when one of their nodes changes. The nodes that emit this signal are [AnimationNodeBlendSpace1D], [AnimationNodeBlendSpace2D], [AnimationNodeStateMachine], and [AnimationNodeBlendTree].
|
||||
</description>
|
||||
</signal>
|
||||
</signals>
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAdd2" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAdd2" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends two animations additively inside of an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations additively based on an amount value in the [code][0.0, 1.0][/code] range.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
||||
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAdd3" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAdd3" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends two of three animations additively inside of an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations together additively out of three based on a value in the [code][-1.0, 1.0][/code] range.
|
||||
This node has three inputs:
|
||||
- The base animation to add to
|
||||
- A -add animation to blend with when the blend amount is in the [code][-1.0, 0.0][/code] range.
|
||||
- A +add animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
||||
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAnimation" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeAnimation" inherits="AnimationRootNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Input animation to use in an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Only features one output set using the [member animation] property. Use it as an input for [AnimationNode] that blend animations together.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="animation" type="String" setter="set_animation" getter="get_animation">
|
||||
Animation to use as an output. It is one of the animations provided by [member AnimationTree.anim_player].
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlend2" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlend2" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends two animations linearly inside of an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations linearly based on an amount value in the [code][0.0, 1.0][/code] range.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
||||
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlend3" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlend3" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends two of three animations linearly inside of an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations together linearly out of three based on a value in the [code][-1.0, 1.0][/code] range.
|
||||
This node has three inputs:
|
||||
- The base animation
|
||||
- A -blend animation to blend with when the blend amount is in the [code][-1.0, 0.0][/code] range.
|
||||
- A +blend animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
||||
If [code]true[/code], sets the [code]optimization[/code] to [code]false[/code] when calling [method AnimationNode.blend_input], forcing the blended animations to update every frame.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace1D" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendSpace1D" inherits="AnimationRootNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends linearly between two of any number of [AnimationNode] of any type placed on a virtual axis.
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree].
|
||||
This is a virtual axis on which you can add any type of [AnimationNode] using [method add_blend_point].
|
||||
Outputs the linear blend of the two [code]AnimationNode[/code] closest to the node's current [code]value[/code].
|
||||
You can set the extents of the axis using the [member min_space] and [member max_space].
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_blend_point">
|
||||
<return type="void">
|
||||
|
@ -19,12 +22,14 @@
|
|||
<argument index="2" name="at_index" type="int" default="-1">
|
||||
</argument>
|
||||
<description>
|
||||
Add a new point that represents a [code]node[/code] on the virtual axis at a given position set by [code]pos[/code]. You can insert it at a specific index using the [code]at_index[/code] argument. If you use the default value for [code]at_index[/code] , the point is inserted at the end of the blend points array.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_count" qualifiers="const">
|
||||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Returns the number of points on the blend axis.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_node" qualifiers="const">
|
||||
|
@ -33,6 +38,7 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the [code]AnimationNode[/code] referenced by the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_position" qualifiers="const">
|
||||
|
@ -41,6 +47,7 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the position of the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_blend_point">
|
||||
|
@ -49,6 +56,7 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Removes the point at index [code]point[/code] from the blend axis.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_blend_point_node">
|
||||
|
@ -59,6 +67,7 @@
|
|||
<argument index="1" name="node" type="AnimationRootNode">
|
||||
</argument>
|
||||
<description>
|
||||
Changes the AnimationNode referenced by the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_blend_point_position">
|
||||
|
@ -69,17 +78,22 @@
|
|||
<argument index="1" name="pos" type="float">
|
||||
</argument>
|
||||
<description>
|
||||
Updates the position of the point at index [code]point[/code] on the blend axis.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="max_space" type="float" setter="set_max_space" getter="get_max_space">
|
||||
The blend space's axis's upper limit for the points' position. See [method add_blend_point].
|
||||
</member>
|
||||
<member name="min_space" type="float" setter="set_min_space" getter="get_min_space">
|
||||
The blend space's axis's lower limit for the points' position. See [method add_blend_point].
|
||||
</member>
|
||||
<member name="snap" type="float" setter="set_snap" getter="get_snap">
|
||||
Position increment to snap to when moving a point on the axis.
|
||||
</member>
|
||||
<member name="value_label" type="String" setter="set_value_label" getter="get_value_label">
|
||||
Label of the virtual axis of the blend space.
|
||||
</member>
|
||||
</members>
|
||||
<constants>
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Blends linearly between three [AnimationNode] of any type placed in a 2d space.
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree].
|
||||
This node allows you to blend linearly between three animations using a [Vector2] weight.
|
||||
You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to create up the blend space by hand.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_blend_point">
|
||||
<return type="void">
|
||||
|
@ -19,6 +21,7 @@
|
|||
<argument index="2" name="at_index" type="int" default="-1">
|
||||
</argument>
|
||||
<description>
|
||||
Add a new point that represents a [code]node[/code] at the position set by [code]pos[/code]. You can insert it at a specific index using the [code]at_index[/code] argument. If you use the default value for [code]at_index[/code] , the point is inserted at the end of the blend points array.
|
||||
</description>
|
||||
</method>
|
||||
<method name="add_triangle">
|
||||
|
@ -33,12 +36,14 @@
|
|||
<argument index="3" name="at_index" type="int" default="-1">
|
||||
</argument>
|
||||
<description>
|
||||
Creates a new triangle using three points [code]x[/code], [code]y[/code], and [code]z[/code]. Triangles can overlap. You can insert the triangle at a specific index using the [code]at_index[/code] argument. If you use the default value for [code]at_index[/code] , the point is inserted at the end of the blend points array.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_count" qualifiers="const">
|
||||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Returns the number of points in the blend space.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_node" qualifiers="const">
|
||||
|
@ -47,6 +52,7 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the [code]AnimationRootNode[/code] referenced by the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_blend_point_position" qualifiers="const">
|
||||
|
@ -55,12 +61,14 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the position of the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_triangle_count" qualifiers="const">
|
||||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Returns the number of triangles in the blend space.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_triangle_point">
|
||||
|
@ -71,6 +79,7 @@
|
|||
<argument index="1" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the position of the point at index [code]point[/code] in the triangle of index [code]triangle[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_blend_point">
|
||||
|
@ -79,6 +88,7 @@
|
|||
<argument index="0" name="point" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Removes the point at index [code]point[/code] from the blend space.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_triangle">
|
||||
|
@ -87,6 +97,7 @@
|
|||
<argument index="0" name="triangle" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Removes the triangle at index [code]triangle[/code] from the blend space.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_blend_point_node">
|
||||
|
@ -97,6 +108,7 @@
|
|||
<argument index="1" name="node" type="AnimationRootNode">
|
||||
</argument>
|
||||
<description>
|
||||
Changes the AnimationNode referenced by the point at index [code]point[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_blend_point_position">
|
||||
|
@ -107,37 +119,49 @@
|
|||
<argument index="1" name="pos" type="Vector2">
|
||||
</argument>
|
||||
<description>
|
||||
Updates the position of the point at index [code]point[/code] on the blend axis.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
<members>
|
||||
<member name="auto_triangles" type="bool" setter="set_auto_triangles" getter="get_auto_triangles">
|
||||
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].
|
||||
</member>
|
||||
<member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="AnimationNodeBlendSpace2D.BlendMode">
|
||||
Controls the interpolation between animations. See [enum BlendMode] constants.
|
||||
</member>
|
||||
<member name="max_space" type="Vector2" setter="set_max_space" getter="get_max_space">
|
||||
The blend space's X and Y axes' upper limit for the points' position. See [method add_blend_point].
|
||||
</member>
|
||||
<member name="min_space" type="Vector2" setter="set_min_space" getter="get_min_space">
|
||||
The blend space's X and Y axes' lower limit for the points' position. See [method add_blend_point].
|
||||
</member>
|
||||
<member name="snap" type="Vector2" setter="set_snap" getter="get_snap">
|
||||
Position increment to snap to when moving a point.
|
||||
</member>
|
||||
<member name="x_label" type="String" setter="set_x_label" getter="get_x_label">
|
||||
Name of the blend space's X axis.
|
||||
</member>
|
||||
<member name="y_label" type="String" setter="set_y_label" getter="get_y_label">
|
||||
Name of the blend space's Y axis.
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
<signal name="triangles_updated">
|
||||
<description>
|
||||
Emitted every time the blend space's triangles are created, removed, or when one of their vertices changes position.
|
||||
</description>
|
||||
</signal>
|
||||
</signals>
|
||||
<constants>
|
||||
<constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode">
|
||||
The interpolation between animations is linear.
|
||||
</constant>
|
||||
<constant name="BLEND_MODE_DISCRETE" value="1" enum="BlendMode">
|
||||
The blend space plays the animation of the node the blending position is closest to. Useful for frame-by-frame 2D animations.
|
||||
</constant>
|
||||
<constant name="BLEND_MODE_DISCRETE_CARRY" value="2" enum="BlendMode">
|
||||
Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at the last animation's playback position.
|
||||
</constant>
|
||||
</constants>
|
||||
</class>
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendTree" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeBlendTree" inherits="AnimationRootNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
<return type="void">
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOneShot" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeOneShot" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_mix_mode" qualifiers="const">
|
||||
<return type="int" enum="AnimationNodeOneShot.MixMode">
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOutput" inherits="AnimationNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeOutput" inherits="AnimationNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
</brief_description>
|
||||
<description>
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
</methods>
|
||||
<constants>
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachine" inherits="AnimationRootNode" category="Core" version="3.1">
|
||||
<class name="AnimationNodeStateMachine" inherits="AnimationRootNode" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
State machine for control of animations.
|
||||
</brief_description>
|
||||
<description>
|
||||
Contains multiple nodes representing animation states, connected in a graph. Nodes transitions can be configured to happen automatically or via code, using a shortest-path algorithm. Retrieve the AnimationNodeStateMachinePlayback object from the [code]AnimationTree[/code] node to control it programatically. Example:
|
||||
[codeblock]
|
||||
var state_machine = $AnimationTree.get("parameters/playback")
|
||||
state_machine.travel("some_state")
|
||||
[/codeblock]
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
<return type="void">
|
||||
|
@ -19,6 +23,7 @@
|
|||
<argument index="2" name="position" type="Vector2" default="Vector2( 0, 0 )">
|
||||
</argument>
|
||||
<description>
|
||||
Adds a new node to the graph. The [code]position[/code] is used for display in the editor.
|
||||
</description>
|
||||
</method>
|
||||
<method name="add_transition">
|
||||
|
@ -31,18 +36,21 @@
|
|||
<argument index="2" name="transition" type="AnimationNodeStateMachineTransition">
|
||||
</argument>
|
||||
<description>
|
||||
Adds a transition between the given nodes.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_end_node" qualifiers="const">
|
||||
<return type="String">
|
||||
</return>
|
||||
<description>
|
||||
Returns the graph's end node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_graph_offset" qualifiers="const">
|
||||
<return type="Vector2">
|
||||
</return>
|
||||
<description>
|
||||
Returns the draw offset of the graph. Used for display in the editor.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_node" qualifiers="const">
|
||||
|
@ -51,6 +59,7 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the animation node with the given name.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_node_name" qualifiers="const">
|
||||
|
@ -59,6 +68,7 @@
|
|||
<argument index="0" name="node" type="AnimationNode">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the given animation node's name.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_node_position" qualifiers="const">
|
||||
|
@ -67,12 +77,14 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the given node's coordinates. Used for display in the editor.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_start_node" qualifiers="const">
|
||||
<return type="String">
|
||||
</return>
|
||||
<description>
|
||||
Returns the graph's end node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_transition" qualifiers="const">
|
||||
|
@ -81,12 +93,14 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the given transition.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_transition_count" qualifiers="const">
|
||||
<return type="int">
|
||||
</return>
|
||||
<description>
|
||||
Returns the number of connections in the graph.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_transition_from" qualifiers="const">
|
||||
|
@ -95,6 +109,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the given transition's start node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_transition_to" qualifiers="const">
|
||||
|
@ -103,6 +118,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Returns the given transition's end node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="has_node" qualifiers="const">
|
||||
|
@ -111,6 +127,7 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Returns [code]true[/code] if the graph contains the given node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="has_transition" qualifiers="const">
|
||||
|
@ -121,6 +138,7 @@
|
|||
<argument index="1" name="to" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Returns [code]true[/code] if there is a transition between the given nodes.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_node">
|
||||
|
@ -129,6 +147,7 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Deletes the given node from the graph.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_transition">
|
||||
|
@ -139,6 +158,7 @@
|
|||
<argument index="1" name="to" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Deletes the given transition.
|
||||
</description>
|
||||
</method>
|
||||
<method name="remove_transition_by_index">
|
||||
|
@ -147,6 +167,7 @@
|
|||
<argument index="0" name="idx" type="int">
|
||||
</argument>
|
||||
<description>
|
||||
Deletes the given transition.
|
||||
</description>
|
||||
</method>
|
||||
<method name="rename_node">
|
||||
|
@ -157,6 +178,7 @@
|
|||
<argument index="1" name="new_name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Renames the given node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_end_node">
|
||||
|
@ -165,14 +187,16 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Sets the given node as the graph end point.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_graph_offset">
|
||||
<return type="void">
|
||||
</return>
|
||||
<argument index="0" name="name" type="Vector2">
|
||||
<argument index="0" name="offset" type="Vector2">
|
||||
</argument>
|
||||
<description>
|
||||
Sets the draw offset of the graph. Used for display in the editor.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_node_position">
|
||||
|
@ -183,6 +207,7 @@
|
|||
<argument index="1" name="position" type="Vector2">
|
||||
</argument>
|
||||
<description>
|
||||
Sets the node's coordinates. Used for display in the editor.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_start_node">
|
||||
|
@ -191,6 +216,7 @@
|
|||
<argument index="0" name="name" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Sets the given node as the graph start point.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachinePlayback" inherits="Resource" category="Core" version="3.1">
|
||||
<class name="AnimationNodeStateMachinePlayback" inherits="Resource" category="Core" version="3.1.2">
|
||||
<brief_description>
|
||||
Playback control for AnimationNodeStateMachine.
|
||||
</brief_description>
|
||||
<description>
|
||||
Allows control of [AnimationTree] state machines created with [AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree.get("parameters/playback")[/code]. Example:
|
||||
[codeblock]
|
||||
var state_machine = $AnimationTree.get("parameters/playback")
|
||||
state_machine.travel("some_state")
|
||||
[/codeblock]
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
<demos>
|
||||
</demos>
|
||||
<methods>
|
||||
<method name="get_current_node" qualifiers="const">
|
||||
<return type="String">
|
||||
</return>
|
||||
<description>
|
||||
Returns the currently playing animation state.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_travel_path" qualifiers="const">
|
||||
|
@ -25,6 +30,7 @@
|
|||
<return type="bool">
|
||||
</return>
|
||||
<description>
|
||||
Returns [code]true[/code] if an animation is playing.
|
||||
</description>
|
||||
</method>
|
||||
<method name="start">
|
||||
|
@ -33,12 +39,14 @@
|
|||
<argument index="0" name="node" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Starts playing the given animation.
|
||||
</description>
|
||||
</method>
|
||||
<method name="stop">
|
||||
<return type="void">
|
||||
</return>
|
||||
<description>
|
||||
Stops the currently playing animation.
|
||||
</description>
|
||||
</method>
|
||||
<method name="travel">
|
||||
|
@ -47,6 +55,7 @@
|
|||
<argument index="0" name="to_node" type="String">
|
||||
</argument>
|
||||
<description>
|
||||
Transitions from the current state to another one, following the shortest path.
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue