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
|
TARGET: release_debug
|
||||||
ARCH: amd64
|
ARCH: amd64
|
||||||
|
|
||||||
|
init:
|
||||||
|
- ps: if ($env:APPVEYOR_REPO_BRANCH -ne "master") { $env:APPVEYOR_CACHE_SKIP_SAVE = "true" }
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
- "%SCONS_CACHE_ROOT%"
|
- "%SCONS_CACHE_ROOT%"
|
||||||
|
|
||||||
|
@ -26,7 +29,7 @@ before_build:
|
||||||
- python --version
|
- python --version
|
||||||
- scons --version
|
- scons --version
|
||||||
- cl.exe
|
- cl.exe
|
||||||
- SET "SCONS_CACHE=%SCONS_CACHE_ROOT%\master"
|
- set "SCONS_CACHE=%SCONS_CACHE_ROOT%\%APPVEYOR_REPO_BRANCH%"
|
||||||
|
|
||||||
build_script:
|
build_script:
|
||||||
- scons platform=%GD_PLATFORM% target=%TARGET% tools=%TOOLS% debug_symbols=no verbose=yes progress=no gdnative_wrapper=yes
|
- 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 progress indicator
|
||||||
.scons_node_count
|
.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@gmail.com>
|
||||||
Andreas Haas <liu.gam3@gmail.com> <hinsbart@users.noreply.github.com>
|
Andreas Haas <liu.gam3@gmail.com> <hinsbart@users.noreply.github.com>
|
||||||
Andreas Haas <liu.gam3@gmail.com> <entenflugstuhl@gmail.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>
|
||||||
Ariel Manzur <ariel@godotengine.org> <punto@godotengine.org>
|
Ariel Manzur <ariel@godotengine.org> <punto@godotengine.org>
|
||||||
Ariel Manzur <ariel@godotengine.org> <ariel@okamstudio.com>
|
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.local>
|
||||||
Ariel Manzur <ariel@godotengine.org> <punto@Ariels-Mac-mini-2.local>
|
Ariel Manzur <ariel@godotengine.org> <punto@Ariels-Mac-mini-2.local>
|
||||||
Bastiaan Olij <mux213@gmail.com>
|
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.de>
|
||||||
Bernhard Liebl <Bernhard.Liebl@gmx.org> <poke1024@gmx.org>
|
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>
|
Chris Bradfield <chris@kidscancode.org> <cb@scribe.net>
|
||||||
Clay John <claynjohn@gmail.com>
|
Clay John <claynjohn@gmail.com>
|
||||||
Clay John <claynjohn@gmail.com> <clayjohn@shaw.ca>
|
Clay John <claynjohn@gmail.com> <clayjohn@shaw.ca>
|
||||||
Dana Olson <dana@shineuponthee.com> <adolson@gmail.com>
|
Dana Olson <dana@shineuponthee.com> <adolson@gmail.com>
|
||||||
|
dankan1890 <mewuidev2@gmail.com>
|
||||||
Daniel J. Ramirez <djrmuv@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>
|
||||||
Ferenc Arn <tagcup@yahoo.com> <tagcup@users.noreply.github.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>
|
Geequlim <geequlim@gmail.com>
|
||||||
Gilles Roudiere <gilles.roudiere@gmail.com>
|
Gilles Roudiere <gilles.roudiere@gmail.com>
|
||||||
Gilles Roudiere <gilles.roudiere@gmail.com> <gilles.roudiere@laas.fr>
|
Gilles Roudiere <gilles.roudiere@gmail.com> <gilles.roudiere@laas.fr>
|
||||||
|
Gordon MacPherson <gordon@gordonite.tech>
|
||||||
Guilherme Felipe <guilhermefelipecgs@gmail.com>
|
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> <hugo.l@openmailbox.org>
|
||||||
Hugo Locurcio <hugo.locurcio@hugo.pro> <Calinou@users.noreply.github.com>
|
Hugo Locurcio <hugo.locurcio@hugo.pro> <Calinou@users.noreply.github.com>
|
||||||
Hugo Locurcio <hugo.locurcio@hugo.pro> Calinou <calinou@opmbx.org>
|
Hugo Locurcio <hugo.locurcio@hugo.pro> Calinou <calinou@opmbx.org>
|
||||||
Ian Bishop <ianb96@gmail.com>
|
Ian Bishop <ianb96@gmail.com>
|
||||||
Ignacio Etcheverry <ignalfonsore@gmail.com>
|
Ignacio Etcheverry <ignalfonsore@gmail.com>
|
||||||
Ignacio Etcheverry <ignalfonsore@gmail.com> <neikeq@users.noreply.github.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>
|
Indah Sylvia <ISylvox@yahoo.com>
|
||||||
J08nY <johny@neuromancer.sk> <jancar.jj@gmail.com>
|
J08nY <johny@neuromancer.sk> <jancar.jj@gmail.com>
|
||||||
J08nY <johny@neuromancer.sk> <J08nY@users.noreply.github.com>
|
J08nY <johny@neuromancer.sk> <J08nY@users.noreply.github.com>
|
||||||
Jakub Grzesik <kubecz3k@gmail.com>
|
Jakub Grzesik <kubecz3k@gmail.com>
|
||||||
Jérôme Gully <jerome.gully0@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 Linietsky <reduzio@gmail.com> <juan@godotengine.org>
|
Juan Linietsky <reduzio@gmail.com> <juan@godotengine.org>
|
||||||
Juan Linietsky <reduzio@gmail.com> <juan@okamstudio.com>
|
Juan Linietsky <reduzio@gmail.com> <juan@okamstudio.com>
|
||||||
Juan Linietsky <reduzio@gmail.com> <reduz@Juans-MBP.fibertel.com.ar>
|
Juan Linietsky <reduzio@gmail.com> <reduz@Juans-MBP.fibertel.com.ar>
|
||||||
Juan Linietsky <reduzio@gmail.com> <red@kyoko>
|
Juan Linietsky <reduzio@gmail.com> <red@kyoko>
|
||||||
Julian Murgia <the.straton@gmail.com>
|
Julian Murgia <the.straton@gmail.com>
|
||||||
|
Kanabenki <lucien.menassol@gmail.com> <18357657+Kanabenki@users.noreply.github.com>
|
||||||
Kelly Thomas <kelly.thomas@hotmail.com.au>
|
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> <eska@eska.me>
|
||||||
Leon Krause <lk@leonkrause.com> <eska014@users.noreply.github.com>
|
Leon Krause <lk@leonkrause.com> <eska014@users.noreply.github.com>
|
||||||
|
Manuel Strey <manuel.strey@gmx.de>
|
||||||
Marcelo Fernandez <marcelofg55@gmail.com>
|
Marcelo Fernandez <marcelofg55@gmail.com>
|
||||||
Marcin Zawiejski <dragmz@gmail.com>
|
Marcin Zawiejski <dragmz@gmail.com>
|
||||||
Mariano Javier Suligoy <marianognu.easyrpg@gmail.com>
|
Mariano Javier Suligoy <marianognu.easyrpg@gmail.com>
|
||||||
Mario Schlack <m4r10.5ch14ck@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>
|
||||||
Max Hilbrunner <m.hilbrunner@gmail.com> <mhilbrunner@users.noreply.github.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>
|
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>
|
Nuno Donato <nunodonato@gmail.com> <n.donato@estrelasustentavel.pt>
|
||||||
Pedro J. Estébanez <pedrojrulez@gmail.com> <RandomShaper@users.noreply.github.com>
|
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>
|
||||||
Paul Batty <p_batty@hotmail.co.uk> <Paulb23@users.noreply.github.com>
|
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>
|
||||||
Pieter-Jan Briers <pieterjan.briers+git@gmail.com> <pieterjan.briers@gmail.com>
|
Pieter-Jan Briers <pieterjan.briers+git@gmail.com> <pieterjan.briers@gmail.com>
|
||||||
Poommetee Ketson <poommetee@protonmail.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>
|
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>
|
Ruslan Mustakov <r.mustakov@gmail.com> <ruslan.mustakov@xored.com>
|
||||||
Saracen <SaracenOne@gmail.com>
|
Saracen <SaracenOne@gmail.com>
|
||||||
|
sheepandshepherd <sheepandshepherd@hotmail.com> <sheepandshepherd@users.noreply.github.com>
|
||||||
|
Swarnim Arun <swarnimarun11@gmail.com>
|
||||||
Theo Hallenius <redsymbzone@hotmail.com>
|
Theo Hallenius <redsymbzone@hotmail.com>
|
||||||
Thomas Herzog <therzog@mail.de>
|
Thomas Herzog <therzog@mail.de>
|
||||||
Thomas Herzog <therzog@mail.de> <thomas.herzog@mail.com>
|
Thomas Herzog <therzog@mail.de> <thomas.herzog@mail.com>
|
||||||
Thomas Herzog <therzog@mail.de> <thomas.herzog@simedis.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>
|
Zher Huei Lee <lee.zh.92@gmail.com>
|
||||||
|
|
10
.travis.yml
10
.travis.yml
|
@ -6,7 +6,7 @@ sudo: false
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- SCONS_CACHE=$HOME/.scons_cache
|
- SCONS_CACHE=$HOME/.scons_cache/$TRAVIS_BRANCH
|
||||||
- SCONS_CACHE_LIMIT=1024
|
- SCONS_CACHE_LIMIT=1024
|
||||||
- OPTIONS="debug_symbols=no verbose=yes progress=no"
|
- OPTIONS="debug_symbols=no verbose=yes progress=no"
|
||||||
- secure: "uch9QszCgsl1qVbuzY41P7S2hWL2IiNFV4SbAYRCdi0oJ9MIu+pVyrQdpf3+jG4rH6j4Rffl+sN17Zz4dIDDioFL1JwqyCqyCyswR8uACC0Rr8gr4Mi3+HIRbv+2s2P4cIQq41JM8FJe84k9jLEMGCGh69w+ibCWoWs74CokYVA="
|
- secure: "uch9QszCgsl1qVbuzY41P7S2hWL2IiNFV4SbAYRCdi0oJ9MIu+pVyrQdpf3+jG4rH6j4Rffl+sN17Zz4dIDDioFL1JwqyCqyCyswR8uACC0Rr8gr4Mi3+HIRbv+2s2P4cIQq41JM8FJe84k9jLEMGCGh69w+ibCWoWs74CokYVA="
|
||||||
|
@ -27,7 +27,7 @@ matrix:
|
||||||
packages:
|
packages:
|
||||||
- clang-format-6.0
|
- 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
|
os: linux
|
||||||
compiler: gcc-8
|
compiler: gcc-8
|
||||||
addons:
|
addons:
|
||||||
|
@ -49,7 +49,7 @@ matrix:
|
||||||
build_command: "scons p=x11 -j2 $OPTIONS"
|
build_command: "scons p=x11 -j2 $OPTIONS"
|
||||||
branch_pattern: coverity_scan
|
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
|
os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
addons:
|
addons:
|
||||||
|
@ -57,7 +57,7 @@ matrix:
|
||||||
packages:
|
packages:
|
||||||
- *linux_deps
|
- *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
|
os: linux
|
||||||
compiler: clang
|
compiler: clang
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ matrix:
|
||||||
os: osx
|
os: osx
|
||||||
compiler: clang
|
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
|
os: linux
|
||||||
compiler: gcc-8
|
compiler: gcc-8
|
||||||
addons:
|
addons:
|
||||||
|
|
44
AUTHORS.md
44
AUTHORS.md
|
@ -29,6 +29,7 @@ name is available.
|
||||||
|
|
||||||
Aaron Franke (aaronfranke)
|
Aaron Franke (aaronfranke)
|
||||||
Alexander Holland (AlexHolly)
|
Alexander Holland (AlexHolly)
|
||||||
|
Alexey Khoroshavin (allkhor)
|
||||||
Alket Rexhepi (alketii)
|
Alket Rexhepi (alketii)
|
||||||
Andrea Catania (AndreaCatania)
|
Andrea Catania (AndreaCatania)
|
||||||
Andreas Haas (Hinsbart)
|
Andreas Haas (Hinsbart)
|
||||||
|
@ -36,37 +37,52 @@ name is available.
|
||||||
Andy Moss (MillionOstrich)
|
Andy Moss (MillionOstrich)
|
||||||
Anish Bhobe (KidRigger)
|
Anish Bhobe (KidRigger)
|
||||||
Anton Yabchinskiy (a12n)
|
Anton Yabchinskiy (a12n)
|
||||||
|
Anutrix
|
||||||
Aren Villanueva (kurikaesu)
|
Aren Villanueva (kurikaesu)
|
||||||
Ariel Manzur (punto-)
|
Ariel Manzur (punto-)
|
||||||
Bastiaan Olij (BastiaanOlij)
|
Bastiaan Olij (BastiaanOlij)
|
||||||
Ben Brookshire (sheepandshepherd)
|
Ben Brookshire (sheepandshepherd)
|
||||||
Benjamin (Nallebeorn)
|
Benjamin Larsson (Nallebeorn)
|
||||||
Bernard Liebl (poke1024)
|
Bernard Liebl (poke1024)
|
||||||
Błażej Szczygieł (zaps166)
|
Błażej Szczygieł (zaps166)
|
||||||
Bojidar Marinov (bojidar-bg)
|
Bojidar Marinov (bojidar-bg)
|
||||||
|
Bruno Lourenço (MadEqua)
|
||||||
bruvzg
|
bruvzg
|
||||||
|
Cameron Reikes (creikey)
|
||||||
|
Camille Mohr-Daurat (pouleyKetchoupp)
|
||||||
Carl Olsson (not-surt)
|
Carl Olsson (not-surt)
|
||||||
Carter Anderson (cart)
|
Carter Anderson (cart)
|
||||||
Chris Bradfield (cbscribe)
|
Chris Bradfield (cbscribe)
|
||||||
Clay John (clayjohn)
|
Clay John (clayjohn)
|
||||||
Dana Olson (adolson)
|
Dana Olson (adolson)
|
||||||
Daniel J. Ramirez (djrm)
|
Daniel J. Ramirez (djrm)
|
||||||
|
Daniel Rakos (aqnuep)
|
||||||
|
dankan1890
|
||||||
|
David Sichma (DavidSichma)
|
||||||
Dharkael (lupoDharkael)
|
Dharkael (lupoDharkael)
|
||||||
Dmitry Koteroff (Krakean)
|
Dmitry Koteroff (Krakean)
|
||||||
DualMatrix
|
DualMatrix
|
||||||
|
Emmanuel Barroga (codecustard)
|
||||||
Emmanuel Leblond (touilleMan)
|
Emmanuel Leblond (touilleMan)
|
||||||
|
Eoin O'Neill (Eoin-ONeill-Yokai)
|
||||||
Eric Lasota (elasota)
|
Eric Lasota (elasota)
|
||||||
|
Eric Rybicki (ericrybick)
|
||||||
|
Erik Selecký (rxlecky)
|
||||||
est31
|
est31
|
||||||
Fabian Mathews (supagu)
|
Fabian Mathews (supagu)
|
||||||
Fabio Alessandrelli (Faless)
|
Fabio Alessandrelli (Faless)
|
||||||
Ferenc Arn (tagcup)
|
Ferenc Arn (tagcup)
|
||||||
Franklin Sobrinho (TheHX)
|
Franklin Sobrinho (TheHX)
|
||||||
|
Fredia Huya-Kouadio (m4gr3d)
|
||||||
Geequlim
|
Geequlim
|
||||||
George Marques (vnen)
|
George Marques (vnen)
|
||||||
Gerrit Großkopf (Grosskopf)
|
Gerrit Großkopf (Grosskopf)
|
||||||
Gilles Roudiere (groud)
|
Gilles Roudiere (groud)
|
||||||
|
Gordon MacPherson (RevoluPowered)
|
||||||
Guilherme Felipe de C. G. da Silva (guilhermefelipecgs)
|
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)
|
Hiroshi Ogawa (hi-ogawa)
|
||||||
homer666
|
homer666
|
||||||
Hubert Jarosz (Marqin)
|
Hubert Jarosz (Marqin)
|
||||||
|
@ -74,6 +90,7 @@ name is available.
|
||||||
Ian Bishop (ianb96)
|
Ian Bishop (ianb96)
|
||||||
Ibrahn Sahir (ibrahn)
|
Ibrahn Sahir (ibrahn)
|
||||||
Ignacio Etcheverry (neikeq)
|
Ignacio Etcheverry (neikeq)
|
||||||
|
Ilaria Cislaghi (QbieShay)
|
||||||
Indah Sylvia (ISylvox)
|
Indah Sylvia (ISylvox)
|
||||||
J08nY
|
J08nY
|
||||||
Jakub Grzesik (kubecz3k)
|
Jakub Grzesik (kubecz3k)
|
||||||
|
@ -88,7 +105,9 @@ name is available.
|
||||||
Kostadin Damyanov (Max-Might)
|
Kostadin Damyanov (Max-Might)
|
||||||
K. S. Ernest (iFire) Lee (fire)
|
K. S. Ernest (iFire) Lee (fire)
|
||||||
Leon Krause (eska014)
|
Leon Krause (eska014)
|
||||||
|
Lucien Menassol (Kanabenki)
|
||||||
m4nu3lf
|
m4nu3lf
|
||||||
|
Marcel Admiraal (madmiraal)
|
||||||
Marcelo Fernandez (marcelofg55)
|
Marcelo Fernandez (marcelofg55)
|
||||||
Marc Gilleron (Zylann)
|
Marc Gilleron (Zylann)
|
||||||
Marcin Zawiejski (dragmz)
|
Marcin Zawiejski (dragmz)
|
||||||
|
@ -101,36 +120,49 @@ name is available.
|
||||||
Masoud BH (masoudbh3)
|
Masoud BH (masoudbh3)
|
||||||
Matthias Hölzl (hoelzl)
|
Matthias Hölzl (hoelzl)
|
||||||
Max Hilbrunner (mhilbrunner)
|
Max Hilbrunner (mhilbrunner)
|
||||||
Michael Alexsander Silva Dias (YeldhamDev)
|
merumelu
|
||||||
|
Michael Alexsander (YeldhamDev)
|
||||||
|
MichiRecRoom (LikeLakers2)
|
||||||
mrezai
|
mrezai
|
||||||
|
muiroc
|
||||||
Nathan Warden (NathanWarden)
|
Nathan Warden (NathanWarden)
|
||||||
|
Nils André-Chang (NilsIrl)
|
||||||
Nuno Donato (nunodonato)
|
Nuno Donato (nunodonato)
|
||||||
Ovnuniarchos
|
Ovnuniarchos
|
||||||
Pascal Richter (ShyRed)
|
Pascal Richter (ShyRed)
|
||||||
Patrick (firefly2442)
|
Patrick (firefly2442)
|
||||||
Paul Batty (Paulb23)
|
Paul Batty (Paulb23)
|
||||||
Paul Joannon (paulloz)
|
Paul Joannon (paulloz)
|
||||||
|
Paul Trojahn (ptrojahn)
|
||||||
Pawel Kowal (pkowal1982)
|
Pawel Kowal (pkowal1982)
|
||||||
Pedro J. Estébanez (RandomShaper)
|
Pedro J. Estébanez (RandomShaper)
|
||||||
Pieter-Jan Briers (PJB3005)
|
Pieter-Jan Briers (PJB3005)
|
||||||
Poommetee Ketson (Noshyaar)
|
Poommetee Ketson (Noshyaar)
|
||||||
Przemysław Gołąb (n-pigeon)
|
Przemysław Gołąb (n-pigeon)
|
||||||
|
Rafał Mikrut (qarmin)
|
||||||
Ralf Hölzemer (rollenrolm)
|
Ralf Hölzemer (rollenrolm)
|
||||||
Ramesh Ravone (RameshRavone)
|
Ramesh Ravone (RameshRavone)
|
||||||
|
raphael10241024
|
||||||
Ray Koopa (RayKoopa)
|
Ray Koopa (RayKoopa)
|
||||||
Rémi Verschelde (akien-mga)
|
Rémi Verschelde (akien-mga)
|
||||||
Rhody Lugo (rraallvv)
|
Rhody Lugo (rraallvv)
|
||||||
Roberto F. Arroyo (robfram)
|
Roberto F. Arroyo (robfram)
|
||||||
|
Robin Hübner (profan)
|
||||||
romulox-x
|
romulox-x
|
||||||
Ruslan Mustakov (endragor)
|
Ruslan Mustakov (endragor)
|
||||||
Saniko (sanikoyes)
|
Saniko (sanikoyes)
|
||||||
|
santouits
|
||||||
SaracenOne
|
SaracenOne
|
||||||
sersoong
|
sersoong
|
||||||
|
Shiqing (kawa-yoiko)
|
||||||
Simon Wenner (swenner)
|
Simon Wenner (swenner)
|
||||||
|
Swarnim Arun (minraws)
|
||||||
Theo Hallenius (TheoXD)
|
Theo Hallenius (TheoXD)
|
||||||
Thomas Herzog (karroffel)
|
Thomas Herzog (karroffel)
|
||||||
Timo (toger5)
|
|
||||||
Timo Schwarzer (timoschwarzer)
|
Timo Schwarzer (timoschwarzer)
|
||||||
|
Timo (toger5)
|
||||||
|
Tomasz Chabora (KoBeWi)
|
||||||
|
Twarit Waikar (IronicallySerious)
|
||||||
Vinzenz Feenstra (vinzenz)
|
Vinzenz Feenstra (vinzenz)
|
||||||
박한얼 (volzhs)
|
박한얼 (volzhs)
|
||||||
V. Vamsi Krishna (vkbsb)
|
V. Vamsi Krishna (vkbsb)
|
||||||
|
@ -139,7 +171,7 @@ name is available.
|
||||||
Wilson E. Alvarez (Rubonnek)
|
Wilson E. Alvarez (Rubonnek)
|
||||||
Xavier Cho (mysticfall)
|
Xavier Cho (mysticfall)
|
||||||
yg2f (SuperUserNameMan)
|
yg2f (SuperUserNameMan)
|
||||||
Yuri Roubinski (Chaosus)
|
Yuri Roubinsky (Chaosus)
|
||||||
|
Zak Stam (zaksnet)
|
||||||
Zher Huei Lee (leezh)
|
Zher Huei Lee (leezh)
|
||||||
ZuBsPaCe
|
ZuBsPaCe
|
||||||
Дмитрий Сальников (DmitriySalnikov)
|
|
||||||
|
|
600
COPYRIGHT.txt
600
COPYRIGHT.txt
|
@ -53,7 +53,7 @@ Files: ./icon.png
|
||||||
./logo.svg
|
./logo.svg
|
||||||
Comment: Godot Engine logo
|
Comment: Godot Engine logo
|
||||||
Copyright: 2017, Andrea Calabró
|
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
|
Files: ./platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl
|
||||||
./platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml
|
./platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml
|
||||||
|
@ -165,7 +165,7 @@ License: FTL
|
||||||
|
|
||||||
Files: ./thirdparty/glad/
|
Files: ./thirdparty/glad/
|
||||||
Comment: glad
|
Comment: glad
|
||||||
Copyright: 2013-2018, David Herberth
|
Copyright: 2013-2019, David Herberth
|
||||||
License: Expat
|
License: Expat
|
||||||
|
|
||||||
Files: ./thirdparty/jpeg_compressor/
|
Files: ./thirdparty/jpeg_compressor/
|
||||||
|
@ -180,8 +180,8 @@ License: BSD-3-clause
|
||||||
|
|
||||||
Files: ./thirdparty/libpng/
|
Files: ./thirdparty/libpng/
|
||||||
Comment: libpng
|
Comment: libpng
|
||||||
Copyright: 1995-2018, The PNG Reference Library Authors.
|
Copyright: 1995-2019, The PNG Reference Library Authors.
|
||||||
2018, Cosmin Truta.
|
2018-2019, Cosmin Truta.
|
||||||
2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
|
2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
|
||||||
1996-1997, Andreas Dilger.
|
1996-1997, Andreas Dilger.
|
||||||
1995-1996, Guy Eric Schalnat, Group 42, Inc.
|
1995-1996, Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
@ -265,12 +265,6 @@ Comment: Clipper
|
||||||
Copyright: 2010-2017, Angus Johnson
|
Copyright: 2010-2017, Angus Johnson
|
||||||
License: BSL-1.0
|
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
|
Files: ./thirdparty/misc/easing_equations.cpp
|
||||||
Comment: Robert Penner's Easing Functions
|
Comment: Robert Penner's Easing Functions
|
||||||
Copyright: 2001, Robert Penner
|
Copyright: 2001, Robert Penner
|
||||||
|
@ -321,7 +315,7 @@ License: BSD-3-clause
|
||||||
Files: ./thirdparty/misc/stb_truetype.h
|
Files: ./thirdparty/misc/stb_truetype.h
|
||||||
./thirdparty/misc/stb_vorbis.c
|
./thirdparty/misc/stb_vorbis.c
|
||||||
Comment: stb libraries
|
Comment: stb libraries
|
||||||
Copyright: 2007-2017, Sean Barrett
|
Copyright: 2007-2019, Sean Barrett
|
||||||
License: public-domain
|
License: public-domain
|
||||||
|
|
||||||
Files: ./thirdparty/misc/triangulator.cpp
|
Files: ./thirdparty/misc/triangulator.cpp
|
||||||
|
@ -350,8 +344,8 @@ License: BSD-3-clause
|
||||||
|
|
||||||
Files: ./thirdparty/pcre2/
|
Files: ./thirdparty/pcre2/
|
||||||
Comment: PCRE2
|
Comment: PCRE2
|
||||||
Copyright: 1997-2018, University of Cambridge,
|
Copyright: 1997-2019, University of Cambridge,
|
||||||
2009-2018, Zoltan Herczeg
|
2009-2019, Zoltan Herczeg
|
||||||
License: BSD-3-clause
|
License: BSD-3-clause
|
||||||
|
|
||||||
Files: ./thirdparty/pvrtccompressor/
|
Files: ./thirdparty/pvrtccompressor/
|
||||||
|
@ -369,17 +363,19 @@ Comment: libSquish
|
||||||
Copyright: 2006, Simon Brown
|
Copyright: 2006, Simon Brown
|
||||||
License: Expat
|
License: Expat
|
||||||
|
|
||||||
Files: ./thirdparty/thekla_atlas/
|
|
||||||
Comment: Thekla Atlas
|
|
||||||
Copyright: 2013, Thekla, Inc
|
|
||||||
License: Expat
|
|
||||||
|
|
||||||
Files: ./thirdparty/tinyexr/
|
Files: ./thirdparty/tinyexr/
|
||||||
Comment: TinyEXR
|
Comment: TinyEXR
|
||||||
Copyright: 2014-2018, Syoyo Fujita
|
Copyright: 2014-2019, Syoyo Fujita
|
||||||
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||||
License: BSD-3-clause
|
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/
|
Files: ./thirdparty/zlib/
|
||||||
Comment: zlib
|
Comment: zlib
|
||||||
Copyright: 1995-2017, Jean-loup Gailly and Mark Adler
|
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
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
DEALINGS IN THE SOFTWARE.
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
License: CC-BY-3.0
|
License: CC-BY-4.0
|
||||||
Creative Commons Attribution 3.0 Unported
|
Creative Commons Attribution 4.0 International Public License
|
||||||
.
|
.
|
||||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
|
Attribution 4.0 International Public License ("Public
|
||||||
ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
|
License"). To the extent this Public License may be interpreted as a
|
||||||
INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
contract, You are granted the Licensed Rights in consideration of Your
|
||||||
ITS USE.
|
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
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
|
Rights that is derived from or based upon the Licensed Material
|
||||||
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
|
and in which the Licensed Material is translated, altered,
|
||||||
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
|
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
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
|
accordance with the terms and conditions of this Public License.
|
||||||
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
|
|
||||||
CONDITIONS.
|
|
||||||
.
|
.
|
||||||
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
|
d. Effective Technological Measures means those measures that, in the
|
||||||
other pre-existing works, such as a translation, adaptation, derivative
|
absence of proper authority, may not be circumvented under laws
|
||||||
work, arrangement of music or other alterations of a literary or
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
artistic work, or phonogram or performance and includes cinematographic
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
adaptations or any other form in which the Work may be recast,
|
agreements.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
b. "Collection" means a collection of literary or artistic works, such
|
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
as encyclopedias and anthologies, or performances, phonograms or
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
broadcasts, or other works or subject matter other than works listed in
|
that applies to Your use of the Licensed Material.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
c. "Distribute" means to make available to the public the original and
|
f. Licensed Material means the artistic or literary work, database,
|
||||||
copies of the Work or Adaptation, as appropriate, through sale or other
|
or other material to which the Licensor applied this Public
|
||||||
transfer of ownership.
|
License.
|
||||||
.
|
.
|
||||||
d. "Licensor" means the individual, individuals, entity or entities that
|
g. Licensed Rights means the rights granted to You subject to the
|
||||||
offer(s) the Work under the terms of this License.
|
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,
|
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
the individual, individuals, entity or entities who created the Work or
|
under this Public License.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
f. "Work" means the literary and/or artistic work offered under the
|
i. Share means to provide material to the public by any means or
|
||||||
terms of this License including without limitation any production in the
|
process that requires permission under the Licensed Rights, such
|
||||||
literary, scientific and artistic domain, whatever may be the mode or
|
as reproduction, public display, public performance, distribution,
|
||||||
form of its expression including digital form, such as a book, pamphlet
|
dissemination, communication, or importation, and to make material
|
||||||
and other writing; a lecture, address, sermon or other work of the same
|
available to the public including in ways that members of the
|
||||||
nature; a dramatic or dramatico-musical work; a choreographic work or
|
public may access the material from a place and at a time
|
||||||
entertainment in dumb show; a musical composition with or without words;
|
individually chosen by them.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
g. "You" means an individual or entity exercising rights under this
|
j. Sui Generis Database Rights means rights other than copyright
|
||||||
License who has not previously violated the terms of this License with
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
respect to the Work, or who has received express permission from the
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
Licensor to exercise rights under this License despite a previous
|
as amended and/or succeeded, as well as other essentially
|
||||||
violation.
|
equivalent rights anywhere in the world.
|
||||||
.
|
.
|
||||||
h. "Publicly Perform" means to perform public recitations of the Work
|
k. You means the individual or entity exercising the Licensed Rights
|
||||||
and to communicate to the public those public recitations, by any means
|
under this Public License. Your has a corresponding meaning.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
i. "Reproduce" means to make copies of the Work by any means including
|
Section 2 -- Scope.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
|
a. License grant.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
3. License Grant. Subject to the terms and conditions of this License,
|
1. Subject to the terms and conditions of this Public License,
|
||||||
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
perpetual (for the duration of the applicable copyright) license to
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
exercise the rights in the Work as stated below:
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
.
|
.
|
||||||
a. to Reproduce the Work, to incorporate the Work into one or more
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
Collections, and to Reproduce the Work as incorporated in the
|
in part; and
|
||||||
Collections;
|
|
||||||
.
|
.
|
||||||
b. to create and Reproduce Adaptations provided that any such
|
b. produce, reproduce, and Share Adapted Material.
|
||||||
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.";
|
|
||||||
.
|
.
|
||||||
c. to Distribute and Publicly Perform the Work including as incorporated
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
in Collections; and,
|
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
|
5. Downstream recipients.
|
||||||
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;
|
|
||||||
.
|
.
|
||||||
ii. Waivable Compulsory License Schemes. In those jurisdictions in which
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
the right to collect royalties through any statutory or compulsory
|
recipient of the Licensed Material automatically
|
||||||
licensing scheme can be waived, the Licensor waives the exclusive right
|
receives an offer from the Licensor to exercise the
|
||||||
to collect such royalties for any exercise by You of the rights granted
|
Licensed Rights under the terms and conditions of this
|
||||||
under this License; and,
|
Public License.
|
||||||
.
|
.
|
||||||
iii. Voluntary License Schemes. The Licensor waives the right to collect
|
b. No downstream restrictions. You may not offer or impose
|
||||||
royalties, whether individually or, in the event that the Licensor is a
|
any additional or different terms or conditions on, or
|
||||||
member of a collecting society that administers voluntary licensing
|
apply any Effective Technological Measures to, the
|
||||||
schemes, via that society, from any exercise by You of the rights
|
Licensed Material if doing so restricts exercise of the
|
||||||
granted under this License.
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
.
|
.
|
||||||
The above rights may be exercised in all media and formats whether now
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
known or hereafter devised. The above rights include the right to make
|
may be construed as permission to assert or imply that You
|
||||||
such modifications as are technically necessary to exercise the rights
|
are, or that Your use of the Licensed Material is, connected
|
||||||
in other media and formats. Subject to Section 8(f), all rights not
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
expressly granted by Licensor are hereby reserved.
|
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
|
b. Other rights.
|
||||||
made subject to and limited by the following restrictions:
|
|
||||||
.
|
.
|
||||||
a. You may Distribute or Publicly Perform the Work only under the terms
|
1. Moral rights, such as the right of integrity, are not
|
||||||
of this License. You must include a copy of, or the Uniform Resource
|
licensed under this Public License, nor are publicity,
|
||||||
Identifier (URI) for, this License with every copy of the Work You
|
privacy, and/or other similar personality rights; however, to
|
||||||
Distribute or Publicly Perform. You may not offer or impose any terms on
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
the Work that restrict the terms of this License or the ability of the
|
assert any such rights held by the Licensor to the limited
|
||||||
recipient of the Work to exercise the rights granted to that recipient
|
extent necessary to allow You to exercise the Licensed
|
||||||
under the terms of the License. You may not sublicense the Work. You
|
Rights, but not otherwise.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
b. If You Distribute, or Publicly Perform the Work or any Adaptations or
|
2. Patent and trademark rights are not licensed under this
|
||||||
Collections, You must, unless a request has been made pursuant to
|
Public License.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
c. Except as otherwise agreed in writing by the Licensor or as may be
|
3. To the extent possible, the Licensor waives any right to
|
||||||
otherwise permitted by applicable law, if You Reproduce, Distribute or
|
collect royalties from You for the exercise of the Licensed
|
||||||
Publicly Perform the Work either by itself or as part of any Adaptations
|
Rights, whether directly or through a collecting society
|
||||||
or Collections, You must not distort, mutilate, modify or take other
|
under any voluntary or waivable statutory or compulsory
|
||||||
derogatory action in relation to the Work which would be prejudicial to
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
the Original Author's honor or reputation. Licensor agrees that in those
|
reserves any right to collect such royalties.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
5. Representations, Warranties and Disclaimer
|
Section 3 -- License Conditions.
|
||||||
.
|
.
|
||||||
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
|
following conditions.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
|
a. Attribution.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
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
|
a. retain the following if it is supplied by the Licensor
|
||||||
automatically upon any breach by You of the terms of this License.
|
with the Licensed Material:
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
b. Subject to the above terms and conditions, the license granted here
|
i. identification of the creator(s) of the Licensed
|
||||||
is perpetual (for the duration of the applicable copyright in the Work).
|
Material and any others designated to receive
|
||||||
Notwithstanding the above, Licensor reserves the right to release the
|
attribution, in any reasonable manner requested by
|
||||||
Work under different license terms or to stop distributing the Work at
|
the Licensor (including by pseudonym if
|
||||||
any time; provided, however that any such election will not serve to
|
designated);
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
8. Miscellaneous
|
ii. a copyright notice;
|
||||||
.
|
.
|
||||||
a. Each time You Distribute or Publicly Perform the Work or a
|
iii. a notice that refers to this Public License;
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
|
iv. a notice that refers to the disclaimer of
|
||||||
offers to the recipient a license to the original Work on the same terms
|
warranties;
|
||||||
and conditions as the license granted to You under this License.
|
|
||||||
.
|
.
|
||||||
c. If any provision of this License is invalid or unenforceable under
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
applicable law, it shall not affect the validity or enforceability of
|
extent reasonably practicable;
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
d. No term or provision of this License shall be deemed waived and no
|
b. indicate if You modified the Licensed Material and
|
||||||
breach consented to unless such waiver or consent shall be in writing
|
retain an indication of any previous modifications; and
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
e. This License may not be modified without the mutual written agreement
|
c. indicate the Licensed Material is licensed under this
|
||||||
of the Licensor and You.
|
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
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
License were drafted utilizing the terminology of the Berne Convention
|
reasonable manner based on the medium, means, and context in
|
||||||
for the Protection of Literary and Artistic Works (as amended on
|
which You Share the Licensed Material. For example, it may be
|
||||||
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
|
hyperlink to a resource that includes the required
|
||||||
the Universal Copyright Convention (as revised on July 24, 1971). These
|
information.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
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
|
4. If You Share Adapted Material You produce, the Adapter's
|
||||||
whatsoever in connection with the Work. Creative Commons will not be
|
License You apply must not prevent recipients of the Adapted
|
||||||
liable to You or any party on any legal theory for any damages
|
Material from complying with this Public License.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
Except for the limited purpose of indicating to the public that the Work
|
Section 4 -- Sui Generis Database Rights.
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
Creative Commons may be contacted at http://creativecommons.org/.
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
License: curl
|
|
||||||
All rights reserved.
|
|
||||||
.
|
.
|
||||||
Permission to use, copy, modify, and distribute this software for any purpose
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
with or without fee is hereby granted, provided that the above copyright
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
notice and this permission notice appear in all copies.
|
portion of the contents of the database;
|
||||||
.
|
.
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
b. if You include all or a substantial portion of the database
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
contents in a database in which You have Sui Generis Database
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
|
Rights, then the database in which You have Sui Generis Database
|
||||||
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
Rights (but not its individual contents) is Adapted Material; and
|
||||||
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.
|
|
||||||
.
|
.
|
||||||
Except as contained in this notice, the name of a copyright holder shall not
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
all or a substantial portion of the contents of the database.
|
||||||
in this Software without prior written authorization of the copyright holder.
|
.
|
||||||
|
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
|
License: Expat
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
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
|
## Platinum sponsors
|
||||||
|
|
||||||
Enjin Coin <https://enjincoin.io>
|
Heroic Labs <https://heroiclabs.com>
|
||||||
|
Interblock <http://interblockgaming.com>
|
||||||
|
|
||||||
## Gold sponsors
|
## Gold sponsors
|
||||||
|
|
||||||
Gamblify <https://www.gamblify.com>
|
Gamblify <https://www.gamblify.com>
|
||||||
Image Campus <https://www.imagecampus.edu.ar>
|
Moonwards <https://www.moonwards.com>
|
||||||
Yakaz.com <https://yakaz.com>
|
|
||||||
|
|
||||||
## Mini sponsors
|
## Mini sponsors
|
||||||
|
|
||||||
|
AD Ford
|
||||||
Alan Beauchamp
|
Alan Beauchamp
|
||||||
Anandarup Mallik
|
Anand Mallik
|
||||||
|
Andres Hernandez
|
||||||
Andrew Dunai
|
Andrew Dunai
|
||||||
Arda Erol
|
|
||||||
Brandon Lamb
|
Brandon Lamb
|
||||||
Christian Uldall Pedersen
|
Christian Baune
|
||||||
Christoph Woinke
|
Christopher Montesano
|
||||||
|
Darkhan Baimyrza
|
||||||
|
Darrin Massena
|
||||||
|
Dov Zimring
|
||||||
Edward Flick
|
Edward Flick
|
||||||
|
Gamechuck
|
||||||
GameDev.net
|
GameDev.net
|
||||||
GameDev.tv
|
GameDev.tv
|
||||||
|
Grady
|
||||||
Hein-Pieter van Braam
|
Hein-Pieter van Braam
|
||||||
Jamal Alyafei
|
Jacob McKenney
|
||||||
Javary Games
|
Javary Co.
|
||||||
Jay Sistar
|
Jeffery Chiu
|
||||||
Justin Arnold
|
Justin Arnold
|
||||||
|
Justo Delgado Baudí
|
||||||
Kyle Szklenski
|
Kyle Szklenski
|
||||||
Leonard Meagher
|
|
||||||
Ludosity AB
|
|
||||||
Matthieu Huvé
|
Matthieu Huvé
|
||||||
Maxim Karsten
|
Maxim Karsten
|
||||||
Mike King
|
Mike King
|
||||||
Nathan Warden
|
Nathan Warden
|
||||||
Neal Gompa (Conan Kudo)
|
Neal Gompa (Conan Kudo)
|
||||||
Patrick Aarstad
|
Péter Magyar
|
||||||
"Rainway "
|
|
||||||
Ruslan Mustakov
|
|
||||||
Slobodan Milnovic
|
Slobodan Milnovic
|
||||||
StarFlare Software
|
|
||||||
Stephan Lanfermann
|
Stephan Lanfermann
|
||||||
Stoney Meyerhoeffer
|
Steve
|
||||||
thechris
|
Tristan Pemble
|
||||||
VilliHaukka
|
VilliHaukka
|
||||||
Zashi
|
|
||||||
|
|
||||||
## Gold donors
|
## Gold donors
|
||||||
|
|
||||||
Asdf
|
Andrei
|
||||||
Brandon Waite
|
Dave
|
||||||
cheese65536
|
|
||||||
David Gehrig
|
David Gehrig
|
||||||
|
David Snopek
|
||||||
|
Ed Morley
|
||||||
Florian Krick
|
Florian Krick
|
||||||
|
Florian Rämisch
|
||||||
Jakub Grzesik
|
Jakub Grzesik
|
||||||
K9Kraken
|
|
||||||
Manuele Finocchiaro
|
Manuele Finocchiaro
|
||||||
Nathanael Beisiegel
|
|
||||||
Officine Pixel S.n.c.
|
Officine Pixel S.n.c.
|
||||||
Retro Village
|
Retro Village
|
||||||
|
Ronan Zeegers
|
||||||
|
Sofox
|
||||||
|
Taylor Ritenour
|
||||||
Zaven Muradyan
|
Zaven Muradyan
|
||||||
|
|
||||||
Allen Schade
|
|
||||||
Andreas Schüle
|
|
||||||
Asher Glick
|
Asher Glick
|
||||||
Austen McRae
|
Austen McRae
|
||||||
|
Bernhard Werner
|
||||||
|
beVR
|
||||||
|
Carlo Cabanilla
|
||||||
Daniel James
|
Daniel James
|
||||||
Daniel Lynn
|
|
||||||
David Giardi
|
David Giardi
|
||||||
Edward E
|
Default Name
|
||||||
|
eggs
|
||||||
|
Felix Bohmann
|
||||||
Florian Breisch
|
Florian Breisch
|
||||||
Gary Oberbrunner
|
Gamejunkey
|
||||||
Gero
|
Javier Roman
|
||||||
Jay Horton
|
Jay Horton
|
||||||
Jon Smith
|
|
||||||
Jon Woodward
|
Jon Woodward
|
||||||
Jorge Bernal
|
Karl Werf
|
||||||
Joshua Lesperance
|
Keinan Powers
|
||||||
Justo Delgado Baudí
|
Klavdij Voncina
|
||||||
Krzysztof Dluzniewski
|
Lex Steers
|
||||||
Moonwards
|
Luke
|
||||||
Mored1984
|
Maciej Pendolski
|
||||||
Not Invader Zim
|
Matthew Hillier
|
||||||
paul gruenbacher
|
Mohamed Ikbel Boulabiar
|
||||||
Paul LaMotte
|
Mored4u
|
||||||
Rob Messick
|
Rob Messick
|
||||||
|
Ryan Badour
|
||||||
|
Sandro Jenny
|
||||||
Scott Wadden
|
Scott Wadden
|
||||||
Sergey
|
Sergey
|
||||||
Svenne Krap
|
thechris
|
||||||
Tom Langwaldt
|
Tom Langwaldt
|
||||||
|
tukon
|
||||||
William Wold
|
William Wold
|
||||||
Wyatt Goodin
|
|
||||||
Xananax
|
|
||||||
|
|
||||||
BanjoNode2D
|
Alex Khayrullin
|
||||||
Beliar
|
Chris Goddard
|
||||||
Chris Serino
|
Chris Serino
|
||||||
Christian Padilla
|
Christian Padilla
|
||||||
Conrad Curry
|
Conrad Curry
|
||||||
Craig Smith
|
Craig Smith
|
||||||
Daniel Egger
|
Darrian Little
|
||||||
Dean Harmon
|
Horváth Péter
|
||||||
Ivan Trombley
|
Ivan Trombley
|
||||||
|
Jakub Dering
|
||||||
Joan Fons
|
Joan Fons
|
||||||
|
Joshua Flores
|
||||||
Krzysztof Jankowski
|
Krzysztof Jankowski
|
||||||
Lord Bloodhound
|
Lord Bloodhound
|
||||||
Lucas Ferreira Franca
|
|
||||||
Nathan Lundquist
|
|
||||||
Pascal Grüter
|
Pascal Grüter
|
||||||
Petr Malac
|
Petr Malac
|
||||||
Rami
|
Rami
|
||||||
|
Reneator
|
||||||
|
Rob
|
||||||
Robert Willes
|
Robert Willes
|
||||||
Robin Arys
|
|
||||||
Ronnie Ashlock
|
Ronnie Ashlock
|
||||||
ScottMakesGames
|
SKison
|
||||||
Thomas Bjarnelöf
|
Thomas Bjarnelöf
|
||||||
|
Unseen Domains
|
||||||
|
Valryia
|
||||||
|
Vincent Henderson
|
||||||
Wojciech Chojnacki
|
Wojciech Chojnacki
|
||||||
Xavier PATRICELLI
|
Xavier PATRICELLI
|
||||||
|
|
||||||
Alessandra Pereyra
|
Adam Nakonieczny
|
||||||
|
Adam Neumann
|
||||||
|
Alexander J Maynard
|
||||||
Alexey Dyadchenko
|
Alexey Dyadchenko
|
||||||
Andrew Bowen
|
Alex Z
|
||||||
Benjamin W Flint
|
Andreas Funke
|
||||||
Chau Siu Hung
|
André Frélicot
|
||||||
Chris Goddard
|
aoshiwik
|
||||||
|
Ben Powell
|
||||||
|
Carlos de Sousa Marques
|
||||||
|
Charlie Whitfield
|
||||||
|
Chase Taranto
|
||||||
Chris Petrich
|
Chris Petrich
|
||||||
Christian Leth Jeppesen
|
Christian Leth Jeppesen
|
||||||
|
Christoph Schröder
|
||||||
Cody Parker
|
Cody Parker
|
||||||
ComicSads
|
Coldragon
|
||||||
|
Craig Ostrin
|
||||||
D
|
D
|
||||||
Deadly Lampshade
|
Daniel Eichler
|
||||||
E.G.
|
David White
|
||||||
Eric
|
Denis Janßen
|
||||||
|
Easypete
|
||||||
Eric Monson
|
Eric Monson
|
||||||
Ethan Bennis
|
ethan ball
|
||||||
Eugenio Hugo Salgüero Jáñez
|
Eugenio Hugo Salgüero Jáñez
|
||||||
|
Fain
|
||||||
flesk
|
flesk
|
||||||
|
Gary Hulst
|
||||||
gavlig
|
gavlig
|
||||||
GGGames.org
|
GGGames.org
|
||||||
Giles Montgomery
|
Green Fox
|
||||||
Giovanni Solimeno
|
|
||||||
Guilherme Felipe de C. G. da Silva
|
Guilherme Felipe de C. G. da Silva
|
||||||
|
Halom Vered
|
||||||
Heath Hayes
|
Heath Hayes
|
||||||
Hysteria
|
Idzard Kwadijk
|
||||||
Jalal Chaabane
|
Isaac Clausman
|
||||||
Jeppe Zapp
|
Jared White
|
||||||
|
Jeff Nyte
|
||||||
|
Jeremy Sims
|
||||||
|
Jerry Ling
|
||||||
|
Joe Flood
|
||||||
|
John G Gentzel
|
||||||
|
Jon Hermansen
|
||||||
Jose Malheiro
|
Jose Malheiro
|
||||||
Juan T Chen
|
Joshua Lesperance
|
||||||
|
Juan Velandia
|
||||||
Juraj Móza
|
Juraj Móza
|
||||||
Kasper Jeppesen
|
kinfox
|
||||||
Klavdij Voncina
|
Marcelo Dornbusch Lopes
|
||||||
Leandro Voltolino
|
Markus Fehr
|
||||||
Lukáš Rendvanský
|
|
||||||
Marius Kamm
|
|
||||||
Markus Wiesner
|
Markus Wiesner
|
||||||
Martin Eigel
|
Martin Eigel
|
||||||
Marvin
|
|
||||||
Matt Eunson
|
Matt Eunson
|
||||||
Max R.R. Collada
|
Max Bulai
|
||||||
|
MuffinManKen
|
||||||
Nick Nikitin
|
Nick Nikitin
|
||||||
Oliver Dick
|
Oliver Dick
|
||||||
oziatek
|
Patrick Ting
|
||||||
Paul Hocker
|
Paul Hocker
|
||||||
Paul Von Zimmerman
|
Paul Von Zimmerman
|
||||||
Pete Goodwin
|
Pete Goodwin
|
||||||
|
pl
|
||||||
Ranoller
|
Ranoller
|
||||||
ray-tracer
|
Robert Larnach
|
||||||
Ruben Soares Luis
|
Rocknight Studios
|
||||||
|
Romildo Franco
|
||||||
Samuel Judd
|
Samuel Judd
|
||||||
Sofox
|
Scott Pilet
|
||||||
|
Sean Morgan
|
||||||
|
SleepCircle
|
||||||
spilldata
|
spilldata
|
||||||
|
Steve Hyatt
|
||||||
Stoned Xander
|
Stoned Xander
|
||||||
|
TheLevelOfDetail .
|
||||||
|
Thomas Krampl
|
||||||
|
Thomas Kurz
|
||||||
Tobias Bocanegra
|
Tobias Bocanegra
|
||||||
WytRabbit
|
Tricky Fat Cat
|
||||||
Xavier Fumado Beltran
|
Urho
|
||||||
|
William Foster
|
||||||
|
Zhou Tuizhi
|
||||||
|
Zie Weaver
|
||||||
|
蕭惟允
|
||||||
|
|
||||||
## Silver donors
|
## Silver donors
|
||||||
|
|
||||||
1D_Inc
|
1D_Inc
|
||||||
|
Abraham Haskins
|
||||||
|
Adam
|
||||||
Adam Brunnmeier
|
Adam Brunnmeier
|
||||||
Adam Carr
|
Adam Carr
|
||||||
Adam Nakonieczny
|
Adam Long
|
||||||
|
Adam McCurdy
|
||||||
|
Adam N Webber
|
||||||
Adam Smeltzer
|
Adam Smeltzer
|
||||||
|
Adam Szymański
|
||||||
Adisibio
|
Adisibio
|
||||||
|
Adrian Demetrescu
|
||||||
|
Agustinus Arya
|
||||||
|
Aidan O'Flannagain
|
||||||
|
Aki Mimoto
|
||||||
|
Alan Mervitz
|
||||||
|
Alan Stice
|
||||||
|
Albin Jonasson Svärdsby
|
||||||
Alder Stefano
|
Alder Stefano
|
||||||
Alessandro Senese
|
Alessandro Senese
|
||||||
Alexander Gillberg
|
Alexander Erlemann
|
||||||
Alexander Koppe
|
alex clavelle
|
||||||
Alice Robinson
|
Allan Davis
|
||||||
|
Allen Schade
|
||||||
|
Andreas Evers
|
||||||
Andreas Krampitz
|
Andreas Krampitz
|
||||||
Anthony Bongiovanni
|
André Simões
|
||||||
Arbor Interactive
|
Andrew Thomas
|
||||||
|
Anthony Staunton
|
||||||
|
AP Condomines
|
||||||
|
Arda Erol
|
||||||
|
Armin Preiml
|
||||||
|
Arseniy M
|
||||||
Arthur S. Muszynski
|
Arthur S. Muszynski
|
||||||
|
Asger
|
||||||
Aubrey Falconer
|
Aubrey Falconer
|
||||||
Avencherus
|
Avencherus
|
||||||
Bailey
|
B A
|
||||||
Balázs Batári
|
Balázs Batári
|
||||||
Bastian Böhm
|
|
||||||
Benedikt
|
Benedikt
|
||||||
|
Ben G
|
||||||
|
Ben Phelan
|
||||||
Ben Vercammen
|
Ben Vercammen
|
||||||
Bernd Jänichen
|
Bernd Jänichen
|
||||||
|
Black Block
|
||||||
Blair Allen
|
Blair Allen
|
||||||
Brandon
|
Bobby CC Wong
|
||||||
Brandon Schaffer
|
brian
|
||||||
Bryan Stevenson
|
bugcaptor
|
||||||
Carl Winder
|
Burney Waring
|
||||||
|
Cameron Meyer
|
||||||
|
Carl van der Geest
|
||||||
Carwyn Edwards
|
Carwyn Edwards
|
||||||
|
Cassidy James
|
||||||
Chris Brown
|
Chris Brown
|
||||||
Chris Chapin
|
Chris Chapin
|
||||||
Christian Baune
|
|
||||||
Christian Winter
|
Christian Winter
|
||||||
Christoffer Sundbom
|
Christoffer Sundbom
|
||||||
Chris Wilson
|
Christoph Brodmann
|
||||||
Collin Shooltz
|
Christopher Schmitt
|
||||||
Connor Hill
|
Christoph Woinke
|
||||||
|
Clay Heaton
|
||||||
|
Curt King
|
||||||
|
Dancin Liao
|
||||||
Daniel Johnson
|
Daniel Johnson
|
||||||
DanielMaximiano
|
Daniel Kimblad
|
||||||
Daniel Reed
|
Daniel Pontillo
|
||||||
David Cravens
|
|
||||||
David May
|
David May
|
||||||
|
David Woodard
|
||||||
|
DiCola Jamn
|
||||||
|
Dominic Cooney
|
||||||
Dominik Wetzel
|
Dominik Wetzel
|
||||||
|
Donn Eddy
|
||||||
|
Donovan Hutcheon
|
||||||
|
Dragontrapper
|
||||||
|
Dr Ewan Murray
|
||||||
Duobix
|
Duobix
|
||||||
|
Duodecimal
|
||||||
|
Dylan Todd
|
||||||
|
Eduardo Teixeira
|
||||||
Edward Herbert
|
Edward Herbert
|
||||||
|
Edward Moulsdale
|
||||||
|
Edward Swartz
|
||||||
Egon Elbre
|
Egon Elbre
|
||||||
|
Elias Nykrem
|
||||||
Elmeri '- Duy Kevin Nguyen
|
Elmeri '- Duy Kevin Nguyen
|
||||||
Emanuel Kotzayan
|
Ephemeral
|
||||||
Eric Martini
|
Eric Ellingson
|
||||||
Eric McCarthy
|
Eric Rogers
|
||||||
Eric Williams
|
Eric Williams
|
||||||
Fabian Becker
|
Erkki Seppälä
|
||||||
fengjiongmax
|
Evan Rose
|
||||||
Foomf
|
Fancy Ants Studios
|
||||||
G3Dev sàrl
|
Fekinox
|
||||||
Gerrit Großkopf
|
Felix Kollmann
|
||||||
Grant Clarke
|
Flaredown
|
||||||
|
Forty Doubleu
|
||||||
|
FuDiggity
|
||||||
|
Gadzhi Kharkharov
|
||||||
|
gamedev by Celio
|
||||||
|
Gary Thomas
|
||||||
|
George Marques
|
||||||
|
GiulianoB
|
||||||
|
Gordian Arragon
|
||||||
Greg Olson
|
Greg Olson
|
||||||
|
GREGORY C FEIN
|
||||||
|
Greg P
|
||||||
|
Greyson Richey
|
||||||
|
Grid
|
||||||
Guldoman
|
Guldoman
|
||||||
Haley Aycock
|
Hal A
|
||||||
Heribert Hirth
|
Heribert Hirth
|
||||||
Hiroshi Naruo
|
Hudson Thorpe-Doubble
|
||||||
Hunter Jones
|
Hunter Jones
|
||||||
ialex32x
|
Hylpher
|
||||||
Igor Buzatovic
|
Ichiro Dohi
|
||||||
|
Iiari
|
||||||
|
iKlem
|
||||||
|
IndustrialRobot
|
||||||
|
Jaiden Gerig
|
||||||
Jaime Ruiz-Borau Vizárraga
|
Jaime Ruiz-Borau Vizárraga
|
||||||
Jako Danar
|
Jako Danar
|
||||||
James A F Manley
|
James A F Manley
|
||||||
|
Janders
|
||||||
|
Jannik Gröger
|
||||||
|
JARKKO PARVIAINEN
|
||||||
|
Jarrod Davis
|
||||||
Jeff Hungerford
|
Jeff Hungerford
|
||||||
|
Jennifer Graves
|
||||||
Jeremy Kahn
|
Jeremy Kahn
|
||||||
Jesse Dubay
|
Jesse Dubay
|
||||||
Joel Fivat
|
Joel Fivat
|
||||||
|
Joel Höglund
|
||||||
|
Joel Setterberg
|
||||||
Johannes Wuensch
|
Johannes Wuensch
|
||||||
|
John Gabriel
|
||||||
|
Jomei Jackson
|
||||||
Jonas Rudlang
|
Jonas Rudlang
|
||||||
Jonas Yamazaki
|
Jonas Yamazaki
|
||||||
Jonathan G
|
Jonathan G
|
||||||
Jonathan Nieto
|
|
||||||
Jonathon
|
Jonathon
|
||||||
Jon Bonazza
|
Jon Bonazza
|
||||||
Jon Sully
|
Jon Sully
|
||||||
Josh 'Cheeseness' Bush
|
Jorge Caballero
|
||||||
|
Jose Aleman
|
||||||
|
Jose C. Rubio
|
||||||
|
Joseph Catrambone
|
||||||
Juanfran
|
Juanfran
|
||||||
Juan Negrier
|
|
||||||
Judd
|
Judd
|
||||||
Julian Murgia
|
Julian Murgia
|
||||||
Kajornthep Piyanun
|
JungleRobba
|
||||||
KC Chan
|
Justin Spedding
|
||||||
Kevin Boyer
|
KaDokta
|
||||||
|
Kauzig
|
||||||
|
Keedong Park
|
||||||
|
Keith Bradner
|
||||||
|
Kevin McPhillips
|
||||||
|
kickmaniac
|
||||||
Kiyohiro Kawamura (kyorohiro)
|
Kiyohiro Kawamura (kyorohiro)
|
||||||
|
Kjetil Haugland
|
||||||
Klagsam
|
Klagsam
|
||||||
KR McGinley
|
KR McGinley
|
||||||
KsyTek Games
|
KsyTek Games
|
||||||
Kuan Cheang
|
Kuan Cheang
|
||||||
kycho
|
kycho
|
||||||
|
Kyle Appelgate
|
||||||
|
Laurent Tréguier
|
||||||
|
Leonardo Dimano
|
||||||
Levi Lindsey
|
Levi Lindsey
|
||||||
Linus Lind Lundgren
|
Linus Lind Lundgren
|
||||||
Luis Moraes
|
Lionel Gaillard
|
||||||
Macil
|
Luigi Renna
|
||||||
magodev
|
LunaticInAHat
|
||||||
|
Lurkars
|
||||||
Major Haul
|
Major Haul
|
||||||
Malcolm
|
Malcolm
|
||||||
|
Malik Ahmed
|
||||||
|
Malik Nejer
|
||||||
Markus Michael Egger
|
Markus Michael Egger
|
||||||
Matthias Grandis
|
Martin Holas
|
||||||
Matt Welke
|
Martin Liška
|
||||||
|
Marvin
|
||||||
|
Mathieu Rimelen
|
||||||
|
Matt Edwards
|
||||||
|
Matthew Little
|
||||||
|
Matti Pohjanvirta
|
||||||
|
Maxime Blade
|
||||||
Maxwell
|
Maxwell
|
||||||
medecau
|
medecau
|
||||||
Mertcan Mermerkaya
|
Megasploot
|
||||||
|
Melissa Mears
|
||||||
|
mewin
|
||||||
mhilbrunner
|
mhilbrunner
|
||||||
Michael Dürwald
|
Michael Haney
|
||||||
Michael Gringauz
|
|
||||||
Michael Labbe
|
Michael Labbe
|
||||||
Mikael Olsson
|
Mikael Olsson
|
||||||
Mikayla Hutchinson
|
Mikayla
|
||||||
|
Mike Birkhead
|
||||||
|
Mike Cunningham
|
||||||
|
Mitchell J. Wagner
|
||||||
MoM
|
MoM
|
||||||
Moritz Laass
|
Nathan Fish
|
||||||
Moritz Weissenberger
|
|
||||||
Natrim
|
Natrim
|
||||||
nee
|
nee
|
||||||
Neil Blakey-Milner
|
Neil Blakey-Milner
|
||||||
|
Neil Wang
|
||||||
Nerdforge
|
Nerdforge
|
||||||
Nick Pavlica
|
Nicholas
|
||||||
Niclas Eriksen
|
Nicholas Girga
|
||||||
|
Nick Macholl
|
||||||
Nicolás Montaña
|
Nicolás Montaña
|
||||||
Nicolas SAN AGUSTIN
|
Nicolas SAN AGUSTIN
|
||||||
|
Nima Farid
|
||||||
|
NZ
|
||||||
|
Oleg Reva
|
||||||
|
Olivier
|
||||||
|
Omar Delarosa
|
||||||
Oscar Norlander
|
Oscar Norlander
|
||||||
Pan Ip
|
Pan Ip
|
||||||
Patrick Nafarrete
|
Patrick Nafarrete
|
||||||
Paul Gieske
|
Paul Gieske
|
||||||
Paul Mason
|
Paul Mason
|
||||||
Paweł Kowal
|
Paweł Kowal
|
||||||
Phillip Ryals
|
Pedro Assuncao
|
||||||
Pierre-Igor Berthet
|
Penguin
|
||||||
Pietro Vertechi
|
Petrus Prinsloo
|
||||||
Piotr Kaczmarski
|
Philip Cohoe
|
||||||
Prokhorenko Leonid
|
Point08
|
||||||
Psyagnostic
|
Rad Cat
|
||||||
Rafael
|
Rafa Laguna
|
||||||
|
rainerLinux
|
||||||
|
Raphael Leroux
|
||||||
|
Remi Rampin
|
||||||
Rémi Verschelde
|
Rémi Verschelde
|
||||||
Ricardo Alcantara
|
Ricardo Alcantara
|
||||||
Richman Stewart
|
Richard Diss
|
||||||
|
Richard Ivánek
|
||||||
Robert Farr (Larington)
|
Robert Farr (Larington)
|
||||||
Roger Burgess
|
Robert Hernandez
|
||||||
|
Roberto Sánchez
|
||||||
Roger Smith
|
Roger Smith
|
||||||
Roland Rząsa
|
Roland Rząsa
|
||||||
Roman Tinkov
|
Roman Tinkov
|
||||||
Ryan Cheung
|
Ronald Ho Hip (CrimsonZA)
|
||||||
|
Ronan
|
||||||
|
Ryan Groom
|
||||||
Ryan Hentz
|
Ryan Hentz
|
||||||
|
Sam.C
|
||||||
|
Sam Edson
|
||||||
|
Samuele Zolfanelli
|
||||||
Sasori Olkof
|
Sasori Olkof
|
||||||
|
Scott D. Yelich
|
||||||
|
Scott Longley
|
||||||
Sebastian Michailidis
|
Sebastian Michailidis
|
||||||
|
Sergio Mello-Grand
|
||||||
|
sgnsajgon
|
||||||
|
Shane
|
||||||
|
Shane Sicienski
|
||||||
Shane Spoor
|
Shane Spoor
|
||||||
|
Siim Raidma
|
||||||
Simon Wenner
|
Simon Wenner
|
||||||
Sootstone
|
SK
|
||||||
Theo Cranmore
|
smbe19
|
||||||
Thibault Barbaroux
|
smo1704
|
||||||
Thomas Bell
|
Svenne Krap
|
||||||
Thomas Holmes
|
Terry
|
||||||
|
tezuvholovdr
|
||||||
|
thomas
|
||||||
|
Thomas Bechtold
|
||||||
|
Thomas Detoy
|
||||||
Thomas Kelly
|
Thomas Kelly
|
||||||
Thomas Kurz
|
|
||||||
tiansheng li
|
|
||||||
Tim
|
|
||||||
Tim Drumheller
|
Tim Drumheller
|
||||||
Tom Larrow
|
Timothy B. MacDonald
|
||||||
|
Tobbun
|
||||||
|
Torgeir Lilleskog
|
||||||
Torsten Crass
|
Torsten Crass
|
||||||
|
Travis O'Brien
|
||||||
|
Trent Skinner
|
||||||
|
Troy Bonneau
|
||||||
Tryggve Sollid
|
Tryggve Sollid
|
||||||
|
Turgut Temucin
|
||||||
|
Tyler Compton
|
||||||
Tyler Stafos
|
Tyler Stafos
|
||||||
UltyX
|
UltyX
|
||||||
Vaiktorg
|
Vaughan Ling
|
||||||
Victor
|
Victor
|
||||||
Viktor Ferenczi
|
Vigilant Watch
|
||||||
|
Vincent Cloutier
|
||||||
waka nya
|
waka nya
|
||||||
Wayne Haak
|
Wayne Haak
|
||||||
werner mendizabal
|
werner mendizabal
|
||||||
William Gervasio
|
Wiley Thompson
|
||||||
|
Will
|
||||||
William Hogben
|
William Hogben
|
||||||
Wout Standaert
|
Wyatt Goodin
|
||||||
|
Yegor
|
||||||
|
Yuri Sizov
|
||||||
|
|
||||||
## Bronze donors
|
## Bronze donors
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
Godot Logo (C) Andrea Calabró
|
Godot Engine Logo
|
||||||
Distributed under the terms of the Creative Commons Attribution License
|
Copyright (c) 2017 Andrea Calabró
|
||||||
version 3.0 (CC-BY 3.0) <https://creativecommons.org/licenses/by/3.0/legalcode>.
|
|
||||||
|
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
|
# System
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import string
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Local
|
# Local
|
||||||
|
@ -83,8 +82,6 @@ env_base.android_permission_chunk = ""
|
||||||
env_base.android_appattributes_chunk = ""
|
env_base.android_appattributes_chunk = ""
|
||||||
env_base.disabled_modules = []
|
env_base.disabled_modules = []
|
||||||
env_base.use_ptrcall = False
|
env_base.use_ptrcall = False
|
||||||
env_base.split_drivers = False
|
|
||||||
env_base.split_modules = False
|
|
||||||
env_base.module_version_string = ""
|
env_base.module_version_string = ""
|
||||||
env_base.msvc = False
|
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('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(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(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_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('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))
|
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_pcre2', "Use the built-in PCRE2 library)", True))
|
||||||
opts.Add(BoolVariable('builtin_recast', "Use the built-in Recast 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_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_xatlas', "Use the built-in xatlas library", True))
|
||||||
opts.Add(BoolVariable('builtin_zlib', "Use the built-in zlib 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))
|
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 = []
|
shadow_local_warning = []
|
||||||
all_plus_warnings = ['-Wwrite-strings']
|
all_plus_warnings = ['-Wwrite-strings']
|
||||||
|
|
||||||
if methods.use_gcc(env):
|
if methods.using_gcc(env):
|
||||||
version = methods.get_compiler_version(env)
|
version = methods.get_compiler_version(env)
|
||||||
if version != None and version[0] >= '7':
|
if version != None and version[0] >= '7':
|
||||||
shadow_local_warning = ['-Wshadow-local']
|
shadow_local_warning = ['-Wshadow-local']
|
||||||
|
|
||||||
if (env["warnings"] == 'extra'):
|
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'):
|
elif (env["warnings"] == 'all'):
|
||||||
env.Append(CCFLAGS=['-Wall'] + shadow_local_warning)
|
env.Append(CCFLAGS=['-Wall'] + shadow_local_warning)
|
||||||
elif (env["warnings"] == 'moderate'):
|
elif (env["warnings"] == 'moderate'):
|
||||||
|
|
|
@ -121,6 +121,8 @@ if env['builtin_zstd']:
|
||||||
"compress/zstd_ldm.c",
|
"compress/zstd_ldm.c",
|
||||||
"compress/zstd_opt.c",
|
"compress/zstd_opt.c",
|
||||||
"compress/zstdmt_compress.c",
|
"compress/zstdmt_compress.c",
|
||||||
|
"compress/zstd_compress_literals.c",
|
||||||
|
"compress/zstd_compress_sequences.c",
|
||||||
"decompress/huf_decompress.c",
|
"decompress/huf_decompress.c",
|
||||||
"decompress/zstd_ddict.c",
|
"decompress/zstd_ddict.c",
|
||||||
"decompress/zstd_decompress_block.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;
|
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];
|
dayno -= MONTH_DAYS_TABLE[LEAPYEAR(year)][imonth];
|
||||||
imonth++;
|
imonth++;
|
||||||
}
|
}
|
||||||
|
@ -1908,18 +1908,18 @@ bool _File::file_exists(const String &p_name) const {
|
||||||
return FileAccess::exists(p_name);
|
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);
|
ERR_FAIL_COND(!f);
|
||||||
int len;
|
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);
|
ERR_FAIL_COND(err != OK);
|
||||||
|
|
||||||
PoolVector<uint8_t> buff;
|
PoolVector<uint8_t> buff;
|
||||||
buff.resize(len);
|
buff.resize(len);
|
||||||
PoolVector<uint8_t>::Write w = buff.write();
|
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);
|
ERR_FAIL_COND(err != OK);
|
||||||
w = PoolVector<uint8_t>::Write();
|
w = PoolVector<uint8_t>::Write();
|
||||||
|
|
||||||
|
@ -1927,7 +1927,7 @@ void _File::store_var(const Variant &p_var) {
|
||||||
store_buffer(buff);
|
store_buffer(buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant _File::get_var() const {
|
Variant _File::get_var(bool p_allow_objects) const {
|
||||||
|
|
||||||
ERR_FAIL_COND_V(!f, Variant());
|
ERR_FAIL_COND_V(!f, Variant());
|
||||||
uint32_t len = get_32();
|
uint32_t len = get_32();
|
||||||
|
@ -1937,7 +1937,7 @@ Variant _File::get_var() const {
|
||||||
PoolVector<uint8_t>::Read r = buff.read();
|
PoolVector<uint8_t>::Read r = buff.read();
|
||||||
|
|
||||||
Variant v;
|
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());
|
ERR_FAIL_COND_V(err != OK, Variant());
|
||||||
|
|
||||||
return v;
|
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("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("set_endian_swap", "enable"), &_File::set_endian_swap);
|
||||||
ClassDB::bind_method(D_METHOD("get_error"), &_File::get_error);
|
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_8", "value"), &_File::store_8);
|
||||||
ClassDB::bind_method(D_METHOD("store_16", "value"), &_File::store_16);
|
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_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_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_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("store_pascal_string", "string"), &_File::store_pascal_string);
|
||||||
ClassDB::bind_method(D_METHOD("get_pascal_string"), &_File::get_pascal_string);
|
ClassDB::bind_method(D_METHOD("get_pascal_string"), &_File::get_pascal_string);
|
||||||
|
@ -2223,17 +2223,17 @@ _Marshalls *_Marshalls::get_singleton() {
|
||||||
return 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;
|
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, "");
|
ERR_FAIL_COND_V(err != OK, "");
|
||||||
|
|
||||||
PoolVector<uint8_t> buff;
|
PoolVector<uint8_t> buff;
|
||||||
buff.resize(len);
|
buff.resize(len);
|
||||||
PoolVector<uint8_t>::Write w = buff.write();
|
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, "");
|
ERR_FAIL_COND_V(err != OK, "");
|
||||||
|
|
||||||
int b64len = len / 3 * 4 + 4 + 1;
|
int b64len = len / 3 * 4 + 4 + 1;
|
||||||
|
@ -2249,7 +2249,7 @@ String _Marshalls::variant_to_base64(const Variant &p_var) {
|
||||||
return ret;
|
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();
|
int strlen = p_str.length();
|
||||||
CharString cstr = p_str.ascii();
|
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);
|
int len = base64_decode((char *)(&w[0]), (char *)cstr.get_data(), strlen);
|
||||||
|
|
||||||
Variant v;
|
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());
|
ERR_FAIL_COND_V(err != OK, Variant());
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
|
@ -2340,8 +2340,8 @@ String _Marshalls::base64_to_utf8(const String &p_str) {
|
||||||
|
|
||||||
void _Marshalls::_bind_methods() {
|
void _Marshalls::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("variant_to_base64", "variant"), &_Marshalls::variant_to_base64);
|
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"), &_Marshalls::base64_to_variant);
|
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("raw_to_base64", "array"), &_Marshalls::raw_to_base64);
|
||||||
ClassDB::bind_method(D_METHOD("base64_to_raw", "base64_str"), &_Marshalls::base64_to_raw);
|
ClassDB::bind_method(D_METHOD("base64_to_raw", "base64_str"), &_Marshalls::base64_to_raw);
|
||||||
|
|
|
@ -463,7 +463,7 @@ public:
|
||||||
double get_double() const;
|
double get_double() const;
|
||||||
real_t get_real() 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
|
PoolVector<uint8_t> get_buffer(int p_length) const; ///< get an array of bytes
|
||||||
String get_line() const;
|
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_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
|
bool file_exists(const String &p_name) const; ///< return true if a file exists
|
||||||
|
|
||||||
|
@ -569,8 +569,8 @@ protected:
|
||||||
public:
|
public:
|
||||||
static _Marshalls *get_singleton();
|
static _Marshalls *get_singleton();
|
||||||
|
|
||||||
String variant_to_base64(const Variant &p_var);
|
String variant_to_base64(const Variant &p_var, bool p_full_objects = false);
|
||||||
Variant base64_to_variant(const String &p_str);
|
Variant base64_to_variant(const String &p_str, bool p_allow_objects = false);
|
||||||
|
|
||||||
String raw_to_base64(const PoolVector<uint8_t> &p_arr);
|
String raw_to_base64(const PoolVector<uint8_t> &p_arr);
|
||||||
PoolVector<uint8_t> base64_to_raw(const String &p_str);
|
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;
|
current_api = p_api;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ClassDB::APIType ClassDB::get_current_api() {
|
||||||
|
|
||||||
|
return current_api;
|
||||||
|
}
|
||||||
|
|
||||||
HashMap<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
HashMap<StringName, ClassDB::ClassInfo> ClassDB::classes;
|
||||||
HashMap<StringName, StringName> ClassDB::resource_base_extensions;
|
HashMap<StringName, StringName> ClassDB::resource_base_extensions;
|
||||||
HashMap<StringName, StringName> ClassDB::compat_classes;
|
HashMap<StringName, StringName> ClassDB::compat_classes;
|
||||||
|
|
|
@ -371,6 +371,7 @@ public:
|
||||||
static void init();
|
static void init();
|
||||||
|
|
||||||
static void set_current_api(APIType p_api);
|
static void set_current_api(APIType p_api);
|
||||||
|
static APIType get_current_api();
|
||||||
static void cleanup();
|
static void cleanup();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum Error {
|
enum Error {
|
||||||
OK,
|
OK, // (0)
|
||||||
FAILED, ///< Generic fail error
|
FAILED, ///< Generic fail error
|
||||||
ERR_UNAVAILABLE, ///< What is requested is unsupported/unavailable
|
ERR_UNAVAILABLE, ///< What is requested is unsupported/unavailable
|
||||||
ERR_UNCONFIGURED, ///< The object being used hasn't been properly set up yet
|
ERR_UNCONFIGURED, ///< The object being used hasn't been properly set up yet
|
||||||
|
@ -69,12 +69,12 @@ enum Error {
|
||||||
ERR_CONNECTION_ERROR,
|
ERR_CONNECTION_ERROR,
|
||||||
ERR_CANT_ACQUIRE_RESOURCE,
|
ERR_CANT_ACQUIRE_RESOURCE,
|
||||||
ERR_CANT_FORK,
|
ERR_CANT_FORK,
|
||||||
ERR_INVALID_DATA, ///< Data passed is invalid (30)
|
ERR_INVALID_DATA, ///< Data passed is invalid (30)
|
||||||
ERR_INVALID_PARAMETER, ///< Parameter passed is invalid
|
ERR_INVALID_PARAMETER, ///< Parameter passed is invalid
|
||||||
ERR_ALREADY_EXISTS, ///< When adding, item already exists
|
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_READ, ///< database is full
|
||||||
ERR_DATABASE_CANT_WRITE, ///< database is full (35)
|
ERR_DATABASE_CANT_WRITE, ///< database is full (35)
|
||||||
ERR_COMPILATION_FAILED,
|
ERR_COMPILATION_FAILED,
|
||||||
ERR_METHOD_NOT_FOUND,
|
ERR_METHOD_NOT_FOUND,
|
||||||
ERR_LINK_FAILED,
|
ERR_LINK_FAILED,
|
||||||
|
|
|
@ -470,47 +470,55 @@ void register_global_constants() {
|
||||||
|
|
||||||
// error list
|
// error list
|
||||||
|
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(OK);
|
BIND_GLOBAL_ENUM_CONSTANT(OK); // (0)
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(FAILED); ///< Generic fail error
|
BIND_GLOBAL_ENUM_CONSTANT(FAILED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAVAILABLE); ///< What is requested is unsupported/unavailable
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAVAILABLE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNCONFIGURED); ///< The object being used hasn't been properly set up yet
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNCONFIGURED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAUTHORIZED); ///< Missing credentials for requested resource
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_UNAUTHORIZED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARAMETER_RANGE_ERROR); ///< Parameter given out of range
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARAMETER_RANGE_ERROR); // (5)
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_OUT_OF_MEMORY); ///< Out of memory
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_OUT_OF_MEMORY);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_NOT_FOUND);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_NOT_FOUND);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_BAD_DRIVE);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_BAD_DRIVE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_BAD_PATH);
|
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_ALREADY_IN_USE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_OPEN);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_OPEN);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_WRITE);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_WRITE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_CANT_READ);
|
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_CORRUPT);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_MISSING_DEPENDENCIES);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_MISSING_DEPENDENCIES);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_FILE_EOF);
|
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_OPEN);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_CREATE);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_CREATE); // (20)
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_PARSE_ERROR);
|
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_QUERY_FAILED);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_QUERY_FAILED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_IN_USE);
|
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_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_CANT_ACQUIRE_RESOURCE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DATA); ///< Data passed is invalid
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_CANT_FORK);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_PARAMETER); ///< Parameter passed is invalid
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_DATA); // (30)
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_EXISTS); ///< When adding ), item already exists
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_INVALID_PARAMETER);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DOES_NOT_EXIST); ///< When retrieving/erasing ), it item does not exist
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_ALREADY_EXISTS);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_READ); ///< database is full
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_DOES_NOT_EXIST);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_DATABASE_CANT_WRITE); ///< database is full
|
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_COMPILATION_FAILED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_METHOD_NOT_FOUND);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_METHOD_NOT_FOUND);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_LINK_FAILED);
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_LINK_FAILED);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_SCRIPT_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_BUSY);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(ERR_HELP); ///< user requested help!!
|
BIND_GLOBAL_ENUM_CONSTANT(ERR_SKIP); // (45)
|
||||||
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_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_NONE);
|
||||||
BIND_GLOBAL_ENUM_CONSTANT(PROPERTY_HINT_RANGE);
|
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;
|
} break;
|
||||||
case MODE_ZSTD: {
|
case MODE_ZSTD: {
|
||||||
ZSTD_DCtx *dctx = ZSTD_createDCtx();
|
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);
|
int ret = ZSTD_decompressDCtx(dctx, p_dst, p_dst_max_size, p_src, p_src_size);
|
||||||
ZSTD_freeDCtx(dctx);
|
ZSTD_freeDCtx(dctx);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -189,4 +191,4 @@ int Compression::zlib_level = Z_DEFAULT_COMPRESSION;
|
||||||
int Compression::gzip_level = Z_DEFAULT_COMPRESSION;
|
int Compression::gzip_level = Z_DEFAULT_COMPRESSION;
|
||||||
int Compression::zstd_level = 3;
|
int Compression::zstd_level = 3;
|
||||||
bool Compression::zstd_long_distance_matching = false;
|
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) {
|
if (p_position == read_total) {
|
||||||
at_end = true;
|
at_end = true;
|
||||||
} else {
|
} else {
|
||||||
|
at_end = false;
|
||||||
|
read_eof = false;
|
||||||
int block_idx = p_position / block_size;
|
int block_idx = p_position / block_size;
|
||||||
if (block_idx != read_block) {
|
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();
|
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()) {
|
if (!filename.empty()) {
|
||||||
cd->files.insert(filename);
|
cd->files.insert(filename);
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ int FileAccessPack::get_buffer(uint8_t *p_dst, int p_length) const {
|
||||||
if (eof)
|
if (eof)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int64_t to_read = p_length;
|
uint64_t to_read = p_length;
|
||||||
if (to_read + pos > pf.size) {
|
if (to_read + pos > pf.size) {
|
||||||
eof = true;
|
eof = true;
|
||||||
to_read = int64_t(pf.size) - int64_t(pos);
|
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) {
|
bool DirAccessPack::file_exists(String p_file) {
|
||||||
|
|
||||||
|
p_file = fix_path(p_file);
|
||||||
|
|
||||||
return current->files.has(p_file);
|
return current->files.has(p_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirAccessPack::dir_exists(String p_dir) {
|
bool DirAccessPack::dir_exists(String p_dir) {
|
||||||
|
|
||||||
|
p_dir = fix_path(p_dir);
|
||||||
|
|
||||||
return current->subdirs.has(p_dir);
|
return current->subdirs.has(p_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -346,6 +346,12 @@ Error HTTPClient::poll() {
|
||||||
} else {
|
} else {
|
||||||
// We are already handshaking, which means we can use your already active SSL connection
|
// We are already handshaking, which means we can use your already active SSL connection
|
||||||
ssl = static_cast<Ref<StreamPeerSSL> >(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
|
ssl->poll(); // Try to finish the handshake
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,13 +37,11 @@
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdio.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() {
|
void EncodedObjectAsID::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_object_id", "id"), &EncodedObjectAsID::set_object_id);
|
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);
|
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) {
|
void EncodedObjectAsID::set_object_id(ObjectID p_id) {
|
||||||
|
@ -59,6 +57,10 @@ EncodedObjectAsID::EncodedObjectAsID() :
|
||||||
id(0) {
|
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_MASK 0xFF
|
||||||
#define ENCODE_FLAG_64 1 << 16
|
#define ENCODE_FLAG_64 1 << 16
|
||||||
#define ENCODE_FLAG_OBJECT_AS_ID 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;
|
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;
|
} break;
|
||||||
case Variant::OBJECT: {
|
case Variant::OBJECT: {
|
||||||
if (p_object_as_id) {
|
if (!p_full_objects) {
|
||||||
flags |= ENCODE_FLAG_OBJECT_AS_ID;
|
flags |= ENCODE_FLAG_OBJECT_AS_ID;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
@ -1086,22 +1088,8 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||||
} break;
|
} break;
|
||||||
case Variant::OBJECT: {
|
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;
|
Object *obj = p_variant;
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
if (buf) {
|
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);
|
_encode_string(E->get().name, buf, r_len);
|
||||||
|
|
||||||
int 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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
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;
|
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;
|
} break;
|
||||||
|
@ -1180,14 +1181,14 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||||
r_len++; //pad
|
r_len++; //pad
|
||||||
*/
|
*/
|
||||||
int len;
|
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);
|
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||||
r_len += len;
|
r_len += len;
|
||||||
if (buf)
|
if (buf)
|
||||||
buf += len;
|
buf += len;
|
||||||
Variant *v = d.getptr(E->get());
|
Variant *v = d.getptr(E->get());
|
||||||
ERR_FAIL_COND_V(!v, ERR_BUG);
|
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);
|
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||||
r_len += len;
|
r_len += len;
|
||||||
if (buf)
|
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++) {
|
for (int i = 0; i < v.size(); i++) {
|
||||||
|
|
||||||
int len;
|
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);
|
ERR_FAIL_COND_V(len % 4, ERR_BUG);
|
||||||
r_len += len;
|
r_len += len;
|
||||||
if (buf)
|
if (buf)
|
||||||
|
@ -1229,11 +1230,15 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
|
||||||
buf += 4;
|
buf += 4;
|
||||||
PoolVector<uint8_t>::Read r = data.read();
|
PoolVector<uint8_t>::Read r = data.read();
|
||||||
copymem(buf, &r[0], datalen * datasize);
|
copymem(buf, &r[0], datalen * datasize);
|
||||||
|
buf += datalen * datasize;
|
||||||
}
|
}
|
||||||
|
|
||||||
r_len += 4 + datalen * datasize;
|
r_len += 4 + datalen * datasize;
|
||||||
while (r_len % 4)
|
while (r_len % 4) {
|
||||||
r_len++;
|
r_len++;
|
||||||
|
if (buf)
|
||||||
|
*(buf++) = 0;
|
||||||
|
}
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case Variant::POOL_INT_ARRAY: {
|
case Variant::POOL_INT_ARRAY: {
|
||||||
|
|
|
@ -199,7 +199,7 @@ public:
|
||||||
EncodedObjectAsID();
|
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 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_object_as_id = false);
|
Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bool p_full_objects = false);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -46,7 +46,8 @@ _FORCE_INLINE_ bool _should_call_local(MultiplayerAPI::RPCMode mode, bool is_mas
|
||||||
case MultiplayerAPI::RPC_MODE_MASTERSYNC: {
|
case MultiplayerAPI::RPC_MODE_MASTERSYNC: {
|
||||||
if (is_master)
|
if (is_master)
|
||||||
r_skip_rpc = true; // I am the master, so skip remote call.
|
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_REMOTESYNC:
|
||||||
case MultiplayerAPI::RPC_MODE_PUPPETSYNC: {
|
case MultiplayerAPI::RPC_MODE_PUPPETSYNC: {
|
||||||
// Call it, sync always results in a local call.
|
// 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);
|
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()) + ".");
|
bool can_call = _can_call_mode(p_node, rpc_mode, p_from);
|
||||||
ERR_FAIL_COND(!_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];
|
int argc = p_packet[p_offset];
|
||||||
Vector<Variant> args;
|
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);
|
ERR_FAIL_COND(p_offset >= p_packet_len);
|
||||||
|
|
||||||
int vlen;
|
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_EXPLAIN("Invalid packet received. Unable to decode RPC argument.");
|
||||||
ERR_FAIL_COND(err != OK);
|
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);
|
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()) + ".");
|
bool can_call = _can_call_mode(p_node, rset_mode, p_from);
|
||||||
ERR_FAIL_COND(!_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;
|
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_EXPLAIN("Invalid packet received. Unable to decode RSET value.");
|
||||||
ERR_FAIL_COND(err != OK);
|
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) {
|
if (p_set) {
|
||||||
// Set argument.
|
// 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_EXPLAIN("Unable to encode RSET value. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||||
ERR_FAIL_COND(err != OK);
|
ERR_FAIL_COND(err != OK);
|
||||||
MAKE_ROOM(ofs + len);
|
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;
|
ofs += len;
|
||||||
|
|
||||||
} else {
|
} 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;
|
packet_cache.write[ofs] = p_argcount;
|
||||||
ofs += 1;
|
ofs += 1;
|
||||||
for (int i = 0; i < p_argcount; i++) {
|
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_EXPLAIN("Unable to encode RPC argument. THIS IS LIKELY A BUG IN THE ENGINE!");
|
||||||
ERR_FAIL_COND(err != OK);
|
ERR_FAIL_COND(err != OK);
|
||||||
MAKE_ROOM(ofs + len);
|
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;
|
ofs += len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -818,6 +821,16 @@ Vector<int> MultiplayerAPI::get_network_connected_peers() const {
|
||||||
return ret;
|
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() {
|
void MultiplayerAPI::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_root_node", "node"), &MultiplayerAPI::set_root_node);
|
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));
|
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("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("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("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::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");
|
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);
|
BIND_ENUM_CONSTANT(RPC_MODE_PUPPETSYNC);
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiplayerAPI::MultiplayerAPI() {
|
MultiplayerAPI::MultiplayerAPI() :
|
||||||
|
allow_object_decoding(false) {
|
||||||
rpc_sender_id = 0;
|
rpc_sender_id = 0;
|
||||||
root_node = NULL;
|
root_node = NULL;
|
||||||
clear();
|
clear();
|
||||||
|
|
|
@ -63,6 +63,7 @@ private:
|
||||||
int last_send_cache_id;
|
int last_send_cache_id;
|
||||||
Vector<uint8_t> packet_cache;
|
Vector<uint8_t> packet_cache;
|
||||||
Node *root_node;
|
Node *root_node;
|
||||||
|
bool allow_object_decoding;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
@ -126,6 +127,9 @@ public:
|
||||||
void set_refuse_new_network_connections(bool p_refuse);
|
void set_refuse_new_network_connections(bool p_refuse);
|
||||||
bool is_refusing_new_network_connections() const;
|
bool is_refusing_new_network_connections() const;
|
||||||
|
|
||||||
|
void set_allow_object_decoding(bool p_enable);
|
||||||
|
bool is_object_decoding_allowed() const;
|
||||||
|
|
||||||
MultiplayerAPI();
|
MultiplayerAPI();
|
||||||
~MultiplayerAPI();
|
~MultiplayerAPI();
|
||||||
};
|
};
|
||||||
|
|
|
@ -79,7 +79,7 @@ Error PacketPeer::put_packet_buffer(const PoolVector<uint8_t> &p_buffer) {
|
||||||
return put_packet(&r[0], len);
|
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;
|
const uint8_t *buffer;
|
||||||
int buffer_size;
|
int buffer_size;
|
||||||
|
@ -87,13 +87,13 @@ Error PacketPeer::get_var(Variant &r_variant) {
|
||||||
if (err)
|
if (err)
|
||||||
return 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;
|
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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@ -102,15 +102,15 @@ Error PacketPeer::put_var(const Variant &p_packet) {
|
||||||
|
|
||||||
uint8_t *buf = (uint8_t *)alloca(len);
|
uint8_t *buf = (uint8_t *)alloca(len);
|
||||||
ERR_FAIL_COND_V(!buf, ERR_OUT_OF_MEMORY);
|
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);
|
ERR_FAIL_COND_V(err, err);
|
||||||
|
|
||||||
return put_packet(buf, len);
|
return put_packet(buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant PacketPeer::_bnd_get_var() {
|
Variant PacketPeer::_bnd_get_var(bool p_allow_objects) {
|
||||||
Variant var;
|
Variant var;
|
||||||
get_var(var);
|
get_var(var, p_allow_objects);
|
||||||
|
|
||||||
return var;
|
return var;
|
||||||
};
|
};
|
||||||
|
@ -132,8 +132,8 @@ Error PacketPeer::_get_packet_error() const {
|
||||||
|
|
||||||
void PacketPeer::_bind_methods() {
|
void PacketPeer::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_var"), &PacketPeer::_bnd_get_var);
|
ClassDB::bind_method(D_METHOD("get_var", "allow_objects"), &PacketPeer::_bnd_get_var, DEFVAL(false));
|
||||||
ClassDB::bind_method(D_METHOD("put_var", "var"), &PacketPeer::put_var);
|
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("get_packet"), &PacketPeer::_get_packet);
|
||||||
ClassDB::bind_method(D_METHOD("put_packet", "buffer"), &PacketPeer::_put_packet);
|
ClassDB::bind_method(D_METHOD("put_packet", "buffer"), &PacketPeer::_put_packet);
|
||||||
ClassDB::bind_method(D_METHOD("get_packet_error"), &PacketPeer::_get_packet_error);
|
ClassDB::bind_method(D_METHOD("get_packet_error"), &PacketPeer::_get_packet_error);
|
||||||
|
|
|
@ -39,8 +39,7 @@ class PacketPeer : public Reference {
|
||||||
|
|
||||||
GDCLASS(PacketPeer, Reference);
|
GDCLASS(PacketPeer, Reference);
|
||||||
|
|
||||||
Variant _bnd_get_var();
|
Variant _bnd_get_var(bool p_allow_objects = false);
|
||||||
void _bnd_put_var(const Variant &p_var);
|
|
||||||
|
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
|
@ -64,8 +63,8 @@ public:
|
||||||
virtual Error get_packet_buffer(PoolVector<uint8_t> &r_buffer);
|
virtual Error get_packet_buffer(PoolVector<uint8_t> &r_buffer);
|
||||||
virtual Error put_packet_buffer(const PoolVector<uint8_t> &p_buffer);
|
virtual Error put_packet_buffer(const PoolVector<uint8_t> &p_buffer);
|
||||||
|
|
||||||
virtual Error get_var(Variant &r_variant);
|
virtual Error get_var(Variant &r_variant, bool p_allow_objects = false);
|
||||||
virtual Error put_var(const Variant &p_packet);
|
virtual Error put_var(const Variant &p_packet, bool p_full_objects = false);
|
||||||
|
|
||||||
void set_allow_object_decoding(bool p_enable);
|
void set_allow_object_decoding(bool p_enable);
|
||||||
bool is_object_decoding_allowed() const;
|
bool is_object_decoding_allowed() const;
|
||||||
|
|
|
@ -163,7 +163,7 @@ Error PCKPacker::flush(bool p_verbose) {
|
||||||
src->close();
|
src->close();
|
||||||
memdelete(src);
|
memdelete(src);
|
||||||
count += 1;
|
count += 1;
|
||||||
if (p_verbose) {
|
if (p_verbose && files.size() > 0) {
|
||||||
if (count % 100 == 0) {
|
if (count % 100 == 0) {
|
||||||
printf("%i/%i (%.2f)\r", count, files.size(), float(count) / files.size() * 100);
|
printf("%i/%i (%.2f)\r", count, files.size(), float(count) / files.size() * 100);
|
||||||
fflush(stdout);
|
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) {
|
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||||
f->close();
|
f->close();
|
||||||
|
memdelete(f);
|
||||||
return ERR_CANT_CREATE;
|
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) {
|
if (f->get_error() != OK && f->get_error() != ERR_FILE_EOF) {
|
||||||
f->close();
|
f->close();
|
||||||
|
memdelete(f);
|
||||||
return ERR_CANT_CREATE;
|
return ERR_CANT_CREATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
f->close();
|
f->close();
|
||||||
|
memdelete(f);
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,14 +221,14 @@ void StreamPeer::put_utf8_string(const String &p_string) {
|
||||||
put_u32(cs.length());
|
put_u32(cs.length());
|
||||||
put_data((const uint8_t *)cs.get_data(), 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;
|
int len = 0;
|
||||||
Vector<uint8_t> buf;
|
Vector<uint8_t> buf;
|
||||||
encode_variant(p_variant, NULL, len);
|
encode_variant(p_variant, NULL, len, p_full_objects);
|
||||||
buf.resize(len);
|
buf.resize(len);
|
||||||
put_32(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());
|
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());
|
ret.parse_utf8((const char *)buf.ptr(), buf.size());
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
Variant StreamPeer::get_var() {
|
Variant StreamPeer::get_var(bool p_allow_objects) {
|
||||||
|
|
||||||
int len = get_32();
|
int len = get_32();
|
||||||
Vector<uint8_t> var;
|
Vector<uint8_t> var;
|
||||||
|
@ -369,7 +369,7 @@ Variant StreamPeer::get_var() {
|
||||||
ERR_FAIL_COND_V(err != OK, Variant());
|
ERR_FAIL_COND_V(err != OK, Variant());
|
||||||
|
|
||||||
Variant ret;
|
Variant ret;
|
||||||
decode_variant(ret, var.ptr(), len);
|
decode_variant(ret, var.ptr(), len, NULL, p_allow_objects);
|
||||||
return ret;
|
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_double", "value"), &StreamPeer::put_double);
|
||||||
ClassDB::bind_method(D_METHOD("put_string", "value"), &StreamPeer::put_string);
|
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_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_8"), &StreamPeer::get_8);
|
||||||
ClassDB::bind_method(D_METHOD("get_u8"), &StreamPeer::get_u8);
|
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_double"), &StreamPeer::get_double);
|
||||||
ClassDB::bind_method(D_METHOD("get_string", "bytes"), &StreamPeer::get_string, DEFVAL(-1));
|
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_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");
|
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_double(double p_val);
|
||||||
void put_string(const String &p_string);
|
void put_string(const String &p_string);
|
||||||
void put_utf8_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();
|
uint8_t get_u8();
|
||||||
int8_t get_8();
|
int8_t get_8();
|
||||||
|
@ -87,7 +87,7 @@ public:
|
||||||
double get_double();
|
double get_double();
|
||||||
String get_string(int p_bytes = -1);
|
String get_string(int p_bytes = -1);
|
||||||
String get_utf8_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; }
|
StreamPeer() { big_endian = false; }
|
||||||
};
|
};
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// based on the very nice implementation of rb-trees by:
|
// 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>
|
template <class K, class V, class C = Comparator<K>, class A = DefaultAllocator>
|
||||||
class Map {
|
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->weight_scale = p_weight_scale;
|
||||||
pt->prev_point = NULL;
|
pt->prev_point = NULL;
|
||||||
pt->last_pass = 0;
|
pt->last_pass = 0;
|
||||||
|
pt->enabled = true;
|
||||||
points[p_id] = pt;
|
points[p_id] = pt;
|
||||||
} else {
|
} else {
|
||||||
points[p_id]->pos = p_pos;
|
points[p_id]->pos = p_pos;
|
||||||
|
@ -242,6 +243,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
||||||
|
|
||||||
pass++;
|
pass++;
|
||||||
|
|
||||||
|
if (!end_point->enabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
SelfList<Point>::List open_list;
|
SelfList<Point>::List open_list;
|
||||||
|
|
||||||
bool found_route = false;
|
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()) {
|
for (Set<Point *>::Element *E = begin_point->neighbours.front(); E; E = E->next()) {
|
||||||
|
|
||||||
Point *n = E->get();
|
Point *n = E->get();
|
||||||
|
|
||||||
|
if (!n->enabled)
|
||||||
|
continue;
|
||||||
|
|
||||||
n->prev_point = begin_point;
|
n->prev_point = begin_point;
|
||||||
n->distance = _compute_cost(begin_point->id, n->id) * n->weight_scale;
|
n->distance = _compute_cost(begin_point->id, n->id) * n->weight_scale;
|
||||||
n->last_pass = pass;
|
n->last_pass = pass;
|
||||||
|
@ -290,6 +298,9 @@ bool AStar::_solve(Point *begin_point, Point *end_point) {
|
||||||
|
|
||||||
Point *e = E->get();
|
Point *e = E->get();
|
||||||
|
|
||||||
|
if (!e->enabled)
|
||||||
|
continue;
|
||||||
|
|
||||||
real_t distance = _compute_cost(p->id, e->id) * e->weight_scale + p->distance;
|
real_t distance = _compute_cost(p->id, e->id) * e->weight_scale + p->distance;
|
||||||
|
|
||||||
if (e->last_pass == pass) {
|
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;
|
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() {
|
void AStar::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_available_point_id"), &AStar::get_available_point_id);
|
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("has_point", "id"), &AStar::has_point);
|
||||||
ClassDB::bind_method(D_METHOD("get_points"), &AStar::get_points);
|
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("get_point_connections", "id"), &AStar::get_point_connections);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar::connect_points, DEFVAL(true));
|
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;
|
Vector3 pos;
|
||||||
real_t weight_scale;
|
real_t weight_scale;
|
||||||
uint64_t last_pass;
|
uint64_t last_pass;
|
||||||
|
bool enabled;
|
||||||
|
|
||||||
Set<Point *> neighbours;
|
Set<Point *> neighbours;
|
||||||
|
|
||||||
|
@ -114,6 +115,9 @@ public:
|
||||||
PoolVector<int> get_point_connections(int p_id);
|
PoolVector<int> get_point_connections(int p_id);
|
||||||
Array get_points();
|
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 connect_points(int p_id, int p_with_id, bool bidirectional = true);
|
||||||
void disconnect_points(int p_id, int p_with_id);
|
void disconnect_points(int p_id, int p_with_id);
|
||||||
bool are_points_connected(int p_id, int p_with_id) const;
|
bool are_points_connected(int p_id, int p_with_id) const;
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#ifndef AUDIOFRAME_H
|
#ifndef AUDIOFRAME_H
|
||||||
#define AUDIOFRAME_H
|
#define AUDIOFRAME_H
|
||||||
|
|
||||||
|
#include "core/math/vector2.h"
|
||||||
#include "core/typedefs.h"
|
#include "core/typedefs.h"
|
||||||
|
|
||||||
static inline float undenormalise(volatile float f) {
|
static inline float undenormalise(volatile float f) {
|
||||||
|
@ -122,6 +123,20 @@ struct AudioFrame {
|
||||||
r = p_frame.r;
|
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() {}
|
_ALWAYS_INLINE_ AudioFrame() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -557,11 +557,23 @@ void Basis::set_euler_yxz(const Vector3 &p_euler) {
|
||||||
*this = ymat * xmat * zmat;
|
*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 i = 0; i < 3; i++) {
|
||||||
for (int j = 0; j < 3; j++) {
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,12 +617,14 @@ Basis::operator String() const {
|
||||||
|
|
||||||
Quat Basis::get_quat() 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 */
|
/* Allow getting a quaternion from an unnormalized transform */
|
||||||
Basis m = *this;
|
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 trace = m.elements[0][0] + m.elements[1][1] + m.elements[2][2];
|
||||||
real_t temp[4];
|
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];
|
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;
|
||||||
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.
|
/** Fast Plane Extraction from combined modelview/projection matrices.
|
||||||
* References:
|
* References:
|
||||||
* http://www.markmorley.com/opengl/frustumculling.html
|
* https://web.archive.org/web/20011221205252/http://www.markmorley.com/opengl/frustumculling.html
|
||||||
* http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf
|
* https://web.archive.org/web/20061020020112/http://www2.ravensoft.com/users/ggribb/plane%20extraction.pdf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Vector<Plane> planes;
|
Vector<Plane> planes;
|
||||||
|
|
|
@ -68,6 +68,7 @@ const char *Expression::func_name[Expression::FUNC_MAX] = {
|
||||||
"lerp",
|
"lerp",
|
||||||
"inverse_lerp",
|
"inverse_lerp",
|
||||||
"range_lerp",
|
"range_lerp",
|
||||||
|
"smoothstep",
|
||||||
"dectime",
|
"dectime",
|
||||||
"randomize",
|
"randomize",
|
||||||
"randi",
|
"randi",
|
||||||
|
@ -164,10 +165,10 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
||||||
case TEXT_PRINTRAW:
|
case TEXT_PRINTRAW:
|
||||||
case VAR_TO_STR:
|
case VAR_TO_STR:
|
||||||
case STR_TO_VAR:
|
case STR_TO_VAR:
|
||||||
case VAR_TO_BYTES:
|
|
||||||
case BYTES_TO_VAR:
|
|
||||||
case TYPE_EXISTS:
|
case TYPE_EXISTS:
|
||||||
return 1;
|
return 1;
|
||||||
|
case VAR_TO_BYTES:
|
||||||
|
case BYTES_TO_VAR:
|
||||||
case MATH_ATAN2:
|
case MATH_ATAN2:
|
||||||
case MATH_FMOD:
|
case MATH_FMOD:
|
||||||
case MATH_FPOSMOD:
|
case MATH_FPOSMOD:
|
||||||
|
@ -185,6 +186,7 @@ int Expression::get_func_argument_count(BuiltinFunc p_func) {
|
||||||
return 2;
|
return 2;
|
||||||
case MATH_LERP:
|
case MATH_LERP:
|
||||||
case MATH_INVERSE_LERP:
|
case MATH_INVERSE_LERP:
|
||||||
|
case MATH_SMOOTHSTEP:
|
||||||
case MATH_DECTIME:
|
case MATH_DECTIME:
|
||||||
case MATH_WRAP:
|
case MATH_WRAP:
|
||||||
case MATH_WRAPF:
|
case MATH_WRAPF:
|
||||||
|
@ -392,6 +394,12 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||||
VALIDATE_ARG_NUM(4);
|
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]);
|
*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;
|
} 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: {
|
case MATH_DECTIME: {
|
||||||
|
|
||||||
VALIDATE_ARG_NUM(0);
|
VALIDATE_ARG_NUM(0);
|
||||||
|
@ -696,8 +704,9 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||||
case VAR_TO_BYTES: {
|
case VAR_TO_BYTES: {
|
||||||
|
|
||||||
PoolByteArray barr;
|
PoolByteArray barr;
|
||||||
|
bool full_objects = *p_inputs[1];
|
||||||
int len;
|
int len;
|
||||||
Error err = encode_variant(*p_inputs[0], NULL, len);
|
Error err = encode_variant(*p_inputs[0], NULL, len, full_objects);
|
||||||
if (err) {
|
if (err) {
|
||||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||||
r_error.argument = 0;
|
r_error.argument = 0;
|
||||||
|
@ -709,7 +718,7 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||||
barr.resize(len);
|
barr.resize(len);
|
||||||
{
|
{
|
||||||
PoolByteArray::Write w = barr.write();
|
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;
|
*r_return = barr;
|
||||||
} break;
|
} break;
|
||||||
|
@ -724,10 +733,11 @@ void Expression::exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant
|
||||||
}
|
}
|
||||||
|
|
||||||
PoolByteArray varr = *p_inputs[0];
|
PoolByteArray varr = *p_inputs[0];
|
||||||
|
bool allow_objects = *p_inputs[1];
|
||||||
Variant ret;
|
Variant ret;
|
||||||
{
|
{
|
||||||
PoolByteArray::Read r = varr.read();
|
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) {
|
if (err != OK) {
|
||||||
r_error_str = RTR("Not enough bytes for decoding bytes, or invalid format.");
|
r_error_str = RTR("Not enough bytes for decoding bytes, or invalid format.");
|
||||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
r_error.error = Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||||
|
|
|
@ -66,6 +66,7 @@ public:
|
||||||
MATH_LERP,
|
MATH_LERP,
|
||||||
MATH_INVERSE_LERP,
|
MATH_INVERSE_LERP,
|
||||||
MATH_RANGE_LERP,
|
MATH_RANGE_LERP,
|
||||||
|
MATH_SMOOTHSTEP,
|
||||||
MATH_DECTIME,
|
MATH_DECTIME,
|
||||||
MATH_RANDOMIZE,
|
MATH_RANDOMIZE,
|
||||||
MATH_RAND,
|
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);
|
s = CLAMP(numer / denom, 0.f, 1.f);
|
||||||
t = 1 - s;
|
t = 1 - s;
|
||||||
} else {
|
} else {
|
||||||
s = CLAMP(-e / c, 0.f, 1.f);
|
s = CLAMP(-d / a, 0.f, 1.f);
|
||||||
t = 0.f;
|
t = 0.f;
|
||||||
}
|
}
|
||||||
} else {
|
} 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 */
|
/* 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);
|
sqrtterm = Math::sqrt(sqrtterm);
|
||||||
real_t res1 = (-b - sqrtterm) / (2 * a);
|
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) {
|
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_ 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_ 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_ 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; }
|
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 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 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
|
// 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
|
// helps compare approximate numbers that may be very big or very small
|
||||||
real_t diff = abs(a - b);
|
real_t diff = abs(a - b);
|
||||||
if (diff == 0.0) {
|
if (diff == 0.0 || diff < min_epsilon) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
real_t avg_size = (abs(a) + abs(b)) / 2.0;
|
real_t avg_size = (abs(a) + abs(b)) / 2.0;
|
||||||
|
|
|
@ -131,6 +131,14 @@ public:
|
||||||
w(q.w) {
|
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
|
Quat(const Vector3 &v0, const Vector3 &v1) // shortest arc
|
||||||
{
|
{
|
||||||
Vector3 c = v0.cross(v1);
|
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("randi"), &RandomNumberGenerator::randi);
|
||||||
ClassDB::bind_method(D_METHOD("randf"), &RandomNumberGenerator::randf);
|
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("randf_range", "from", "to"), &RandomNumberGenerator::randf_range);
|
||||||
ClassDB::bind_method(D_METHOD("randi_range", "from", "to"), &RandomNumberGenerator::randi_range);
|
ClassDB::bind_method(D_METHOD("randi_range", "from", "to"), &RandomNumberGenerator::randi_range);
|
||||||
ClassDB::bind_method(D_METHOD("randomize"), &RandomNumberGenerator::randomize);
|
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 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) {
|
_FORCE_INLINE_ int randi_range(int from, int to) {
|
||||||
unsigned int ret = randbase.rand();
|
unsigned int ret = randbase.rand();
|
||||||
return ret % (to - from + 1) + from;
|
return ret % (to - from + 1) + from;
|
||||||
|
|
|
@ -31,6 +31,8 @@
|
||||||
#ifndef RANDOM_PCG_H
|
#ifndef RANDOM_PCG_H
|
||||||
#define RANDOM_PCG_H
|
#define RANDOM_PCG_H
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
#include "core/math/math_defs.h"
|
#include "core/math/math_defs.h"
|
||||||
|
|
||||||
#include "thirdparty/misc/pcg.h"
|
#include "thirdparty/misc/pcg.h"
|
||||||
|
@ -61,6 +63,13 @@ public:
|
||||||
_FORCE_INLINE_ double randd() { return (double)rand() / (double)RANDOM_MAX; }
|
_FORCE_INLINE_ double randd() { return (double)rand() / (double)RANDOM_MAX; }
|
||||||
_FORCE_INLINE_ float randf() { return (float)rand() / (float)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);
|
double random(double p_from, double p_to);
|
||||||
float random(float p_from, float 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); }
|
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 distance_squared_to(const Vector2 &p_vector2) const;
|
||||||
real_t angle_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;
|
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 dot(const Vector2 &p_other) const;
|
||||||
real_t cross(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);
|
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 Vector2::linear_interpolate(const Vector2 &p_a, const Vector2 &p_b, real_t p_t) {
|
||||||
|
|
||||||
Vector2 res = p_a;
|
Vector2 res = p_a;
|
||||||
|
|
|
@ -112,6 +112,7 @@ struct Vector3 {
|
||||||
_FORCE_INLINE_ Vector3 project(const Vector3 &p_b) const;
|
_FORCE_INLINE_ Vector3 project(const Vector3 &p_b) const;
|
||||||
|
|
||||||
_FORCE_INLINE_ real_t angle_to(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 slide(const Vector3 &p_normal) const;
|
||||||
_FORCE_INLINE_ Vector3 bounce(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 {
|
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);
|
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 {
|
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));
|
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 */
|
/* Operators */
|
||||||
|
|
||||||
Vector3 &Vector3::operator+=(const Vector3 &p_v) {
|
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);
|
_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;
|
} break;
|
||||||
case TYPE_NOTIFICATION: {
|
case TYPE_NOTIFICATION: {
|
||||||
|
|
||||||
|
@ -319,11 +315,17 @@ void MessageQueue::flush() {
|
||||||
// messages don't expect a return value
|
// messages don't expect a return value
|
||||||
target->set(message->target, *arg);
|
target->set(message->target, *arg);
|
||||||
|
|
||||||
arg->~Variant();
|
|
||||||
} break;
|
} 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();
|
message->~Message();
|
||||||
|
|
||||||
_THREAD_SAFE_LOCK_
|
_THREAD_SAFE_LOCK_
|
||||||
|
|
|
@ -608,18 +608,16 @@ Variant Object::get_indexed(const Vector<StringName> &p_names, bool *r_valid) co
|
||||||
}
|
}
|
||||||
bool valid = false;
|
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++) {
|
for (int i = 1; i < p_names.size(); i++) {
|
||||||
current_value = current_value.get_named(p_names[i], &valid);
|
current_value = current_value.get_named(p_names[i], &valid);
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid)
|
||||||
if (r_valid)
|
break;
|
||||||
*r_valid = false;
|
|
||||||
return Variant();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (r_valid)
|
if (r_valid)
|
||||||
*r_valid = true;
|
*r_valid = valid;
|
||||||
|
|
||||||
return current_value;
|
return current_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1366,7 +1364,10 @@ Array Object::_get_incoming_connections() const {
|
||||||
void Object::get_signal_list(List<MethodInfo> *p_signals) const {
|
void Object::get_signal_list(List<MethodInfo> *p_signals) const {
|
||||||
|
|
||||||
if (!script.is_null()) {
|
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);
|
ClassDB::get_signal_list(get_class_name(), p_signals);
|
||||||
|
@ -1673,7 +1674,7 @@ void Object::clear_internal_resource_paths() {
|
||||||
void Object::_bind_methods() {
|
void Object::_bind_methods() {
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("get_class"), &Object::get_class);
|
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("set", "property", "value"), &Object::_set_bind);
|
||||||
ClassDB::bind_method(D_METHOD("get", "property"), &Object::_get_bind);
|
ClassDB::bind_method(D_METHOD("get", "property"), &Object::_get_bind);
|
||||||
ClassDB::bind_method(D_METHOD("set_indexed", "property", "value"), &Object::_set_indexed_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("has_meta", "name"), &Object::has_meta);
|
||||||
ClassDB::bind_method(D_METHOD("get_meta_list"), &Object::_get_meta_list_bind);
|
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("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("has_user_signal", "signal"), &Object::_has_user_signal);
|
||||||
//ClassDB::bind_method(D_METHOD("emit_signal","signal","arguments"),&Object::_emit_signal,DEFVAL(Array()));
|
|
||||||
|
|
||||||
{
|
{
|
||||||
MethodInfo mi;
|
MethodInfo mi;
|
||||||
|
|
|
@ -779,8 +779,13 @@ public:
|
||||||
static int get_object_count();
|
static int get_object_count();
|
||||||
|
|
||||||
_FORCE_INLINE_ static bool instance_validate(Object *p_ptr) {
|
_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("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("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("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_gravity"), &Input::get_gravity);
|
||||||
ClassDB::bind_method(D_METHOD("get_accelerometer"), &Input::get_accelerometer);
|
ClassDB::bind_method(D_METHOD("get_accelerometer"), &Input::get_accelerometer);
|
||||||
ClassDB::bind_method(D_METHOD("get_magnetometer"), &Input::get_magnetometer);
|
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_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("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("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("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("parse_input_event", "event"), &Input::parse_input_event);
|
||||||
ClassDB::bind_method(D_METHOD("set_use_accumulated_input", "enable"), &Input::set_use_accumulated_input);
|
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 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 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 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_mouse_position() const = 0;
|
||||||
virtual Point2 get_last_mouse_speed() 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_touch_from_mouse() const = 0;
|
||||||
virtual bool is_emulating_mouse_from_touch() 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 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_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_button_string(int p_button) = 0;
|
||||||
virtual String get_joy_axis_string(int p_axis) = 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;
|
bool pressed = same_direction ? Math::abs(jm->get_axis_value()) >= p_deadzone : false;
|
||||||
if (p_pressed != NULL)
|
if (p_pressed != NULL)
|
||||||
*p_pressed = pressed;
|
*p_pressed = pressed;
|
||||||
if (p_strength != NULL)
|
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 (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;
|
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_event", PropertyInfo(Variant::OBJECT, "event", PROPERTY_HINT_RESOURCE_TYPE, "InputEvent")));
|
||||||
BIND_VMETHOD(MethodInfo("_input_text", PropertyInfo(Variant::STRING, "text")));
|
BIND_VMETHOD(MethodInfo("_input_text", PropertyInfo(Variant::STRING, "text")));
|
||||||
BIND_VMETHOD(MethodInfo("_initialize"));
|
BIND_VMETHOD(MethodInfo("_initialize"));
|
||||||
BIND_VMETHOD(MethodInfo("_iteration", PropertyInfo(Variant::REAL, "delta")));
|
BIND_VMETHOD(MethodInfo(Variant::BOOL, "_iteration", PropertyInfo(Variant::REAL, "delta")));
|
||||||
BIND_VMETHOD(MethodInfo("_idle", 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, "screen")));
|
BIND_VMETHOD(MethodInfo("_drop_files", PropertyInfo(Variant::POOL_STRING_ARRAY, "files"), PropertyInfo(Variant::INT, "from_screen")));
|
||||||
BIND_VMETHOD(MethodInfo("_finalize"));
|
BIND_VMETHOD(MethodInfo("_finalize"));
|
||||||
|
|
||||||
BIND_CONSTANT(NOTIFICATION_WM_MOUSE_ENTER);
|
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) {
|
if (length >= 3) {
|
||||||
event->set_pitch(data[1]);
|
event->set_pitch(data[1]);
|
||||||
event->set_velocity(data[2]);
|
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;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -157,6 +157,11 @@ int OS::get_process_id() const {
|
||||||
return -1;
|
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 {
|
bool OS::is_stdout_verbose() const {
|
||||||
|
|
||||||
return _verbose_stdout;
|
return _verbose_stdout;
|
||||||
|
@ -220,6 +225,16 @@ int OS::get_virtual_keyboard_height() const {
|
||||||
return 0;
|
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) {
|
void OS::print_all_resources(String p_to_file) {
|
||||||
|
|
||||||
ERR_FAIL_COND(p_to_file != "" && _OSPRF);
|
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 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 Error kill(const ProcessID &p_pid) = 0;
|
||||||
virtual int get_process_id() const;
|
virtual int get_process_id() const;
|
||||||
|
virtual void vibrate_handheld(int p_duration_ms = 500);
|
||||||
|
|
||||||
virtual Error shell_open(String p_uri);
|
virtual Error shell_open(String p_uri);
|
||||||
virtual Error set_cwd(const String &p_cwd);
|
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)
|
// returns height of the currently shown virtual keyboard (0 if keyboard is hidden)
|
||||||
virtual int get_virtual_keyboard_height() const;
|
virtual int get_virtual_keyboard_height() const;
|
||||||
|
|
||||||
virtual void set_cursor_shape(CursorShape p_shape) = 0;
|
virtual void set_cursor_shape(CursorShape p_shape);
|
||||||
virtual void set_custom_mouse_cursor(const RES &p_cursor, CursorShape p_shape, const Vector2 &p_hotspot) = 0;
|
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 bool get_swap_ok_cancel() { return false; }
|
||||||
virtual void dump_memory_to_file(const char *p_file);
|
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 {
|
} else {
|
||||||
|
|
||||||
Variant v;
|
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) {
|
if (rerr != OK) {
|
||||||
|
|
||||||
|
@ -224,7 +224,8 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
||||||
|
|
||||||
string_cache[s] = tmpdata.size();
|
string_cache[s] = tmpdata.size();
|
||||||
|
|
||||||
}; //fallthrough
|
FALLTHROUGH;
|
||||||
|
};
|
||||||
case Variant::NIL:
|
case Variant::NIL:
|
||||||
case Variant::BOOL:
|
case Variant::BOOL:
|
||||||
case Variant::INT:
|
case Variant::INT:
|
||||||
|
@ -249,9 +250,9 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
|
||||||
|
|
||||||
uint32_t pos = tmpdata.size();
|
uint32_t pos = tmpdata.size();
|
||||||
int len;
|
int len;
|
||||||
encode_variant(p_data, NULL, len);
|
encode_variant(p_data, NULL, len, false);
|
||||||
tmpdata.resize(tmpdata.size() + len);
|
tmpdata.resize(tmpdata.size() + len);
|
||||||
encode_variant(p_data, &tmpdata.write[pos], len);
|
encode_variant(p_data, &tmpdata.write[pos], len, false);
|
||||||
return pos;
|
return pos;
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
|
@ -501,7 +501,7 @@ Error ProjectSettings::_load_settings_binary(const String p_path) {
|
||||||
d.resize(vlen);
|
d.resize(vlen);
|
||||||
f->get_buffer(d.ptrw(), vlen);
|
f->get_buffer(d.ptrw(), vlen);
|
||||||
Variant value;
|
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_EXPLAIN("Error decoding property: " + key);
|
||||||
ERR_CONTINUE(err != OK);
|
ERR_CONTINUE(err != OK);
|
||||||
set(key, value);
|
set(key, value);
|
||||||
|
@ -656,7 +656,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||||
file->store_string(key);
|
file->store_string(key);
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
err = encode_variant(p_custom_features, NULL, len);
|
err = encode_variant(p_custom_features, NULL, len, false);
|
||||||
if (err != OK) {
|
if (err != OK) {
|
||||||
memdelete(file);
|
memdelete(file);
|
||||||
ERR_FAIL_V(err);
|
ERR_FAIL_V(err);
|
||||||
|
@ -665,7 +665,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||||
Vector<uint8_t> buff;
|
Vector<uint8_t> buff;
|
||||||
buff.resize(len);
|
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) {
|
if (err != OK) {
|
||||||
memdelete(file);
|
memdelete(file);
|
||||||
ERR_FAIL_V(err);
|
ERR_FAIL_V(err);
|
||||||
|
@ -694,7 +694,7 @@ Error ProjectSettings::_save_settings_binary(const String &p_file, const Map<Str
|
||||||
file->store_string(key);
|
file->store_string(key);
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
err = encode_variant(value, NULL, len);
|
err = encode_variant(value, NULL, len, true);
|
||||||
if (err != OK)
|
if (err != OK)
|
||||||
memdelete(file);
|
memdelete(file);
|
||||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
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;
|
Vector<uint8_t> buff;
|
||||||
buff.resize(len);
|
buff.resize(len);
|
||||||
|
|
||||||
err = encode_variant(value, buff.ptrw(), len);
|
err = encode_variant(value, buff.ptrw(), len, true);
|
||||||
if (err != OK)
|
if (err != OK)
|
||||||
memdelete(file);
|
memdelete(file);
|
||||||
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
ERR_FAIL_COND_V(err != OK, ERR_INVALID_DATA);
|
||||||
|
|
|
@ -205,6 +205,8 @@ public:
|
||||||
static ScriptCodeCompletionCache *get_singleton() { return singleton; }
|
static ScriptCodeCompletionCache *get_singleton() { return singleton; }
|
||||||
|
|
||||||
ScriptCodeCompletionCache();
|
ScriptCodeCompletionCache();
|
||||||
|
|
||||||
|
virtual ~ScriptCodeCompletionCache() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ScriptLanguage {
|
class ScriptLanguage {
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// based on the very nice implementation of rb-trees by:
|
// 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>
|
template <class T, class C = Comparator<T>, class A = DefaultAllocator>
|
||||||
class Set {
|
class Set {
|
||||||
|
|
|
@ -179,6 +179,7 @@ static const char *locale_list[] = {
|
||||||
"ff_SN", // Fulah (Senegal)
|
"ff_SN", // Fulah (Senegal)
|
||||||
"fi", // Finnish
|
"fi", // Finnish
|
||||||
"fi_FI", // Finnish (Finland)
|
"fi_FI", // Finnish (Finland)
|
||||||
|
"fil", // Filipino
|
||||||
"fil_PH", // Filipino (Philippines)
|
"fil_PH", // Filipino (Philippines)
|
||||||
"fo_FO", // Faroese (Faroe Islands)
|
"fo_FO", // Faroese (Faroe Islands)
|
||||||
"fr", // French
|
"fr", // French
|
||||||
|
@ -227,6 +228,7 @@ static const char *locale_list[] = {
|
||||||
"ja", // Japanese
|
"ja", // Japanese
|
||||||
"ja_JP", // Japanese (Japan)
|
"ja_JP", // Japanese (Japan)
|
||||||
"kab_DZ", // Kabyle (Algeria)
|
"kab_DZ", // Kabyle (Algeria)
|
||||||
|
"ka", // Georgian
|
||||||
"ka_GE", // Georgian (Georgia)
|
"ka_GE", // Georgian (Georgia)
|
||||||
"kk_KZ", // Kazakh (Kazakhstan)
|
"kk_KZ", // Kazakh (Kazakhstan)
|
||||||
"kl_GL", // Kalaallisut (Greenland)
|
"kl_GL", // Kalaallisut (Greenland)
|
||||||
|
@ -257,10 +259,12 @@ static const char *locale_list[] = {
|
||||||
"mg_MG", // Malagasy (Madagascar)
|
"mg_MG", // Malagasy (Madagascar)
|
||||||
"mh_MH", // Marshallese (Marshall Islands)
|
"mh_MH", // Marshallese (Marshall Islands)
|
||||||
"mhr_RU", // Eastern Mari (Russia)
|
"mhr_RU", // Eastern Mari (Russia)
|
||||||
"mi_NZ", // Maori (New Zealand)
|
"mi", // Māori
|
||||||
|
"mi_NZ", // Māori (New Zealand)
|
||||||
"miq_NI", // Mískito (Nicaragua)
|
"miq_NI", // Mískito (Nicaragua)
|
||||||
"mk", // Macedonian
|
"mk", // Macedonian
|
||||||
"mk_MK", // Macedonian (Macedonia)
|
"mk_MK", // Macedonian (Macedonia)
|
||||||
|
"ml", // Malayalam
|
||||||
"ml_IN", // Malayalam (India)
|
"ml_IN", // Malayalam (India)
|
||||||
"mni_IN", // Manipuri (India)
|
"mni_IN", // Manipuri (India)
|
||||||
"mn_MN", // Mongolian (Mongolia)
|
"mn_MN", // Mongolian (Mongolia)
|
||||||
|
@ -326,6 +330,7 @@ static const char *locale_list[] = {
|
||||||
"sgs_LT", // Samogitian (Lithuania)
|
"sgs_LT", // Samogitian (Lithuania)
|
||||||
"shs_CA", // Shuswap (Canada)
|
"shs_CA", // Shuswap (Canada)
|
||||||
"sid_ET", // Sidamo (Ethiopia)
|
"sid_ET", // Sidamo (Ethiopia)
|
||||||
|
"si", // Sinhala
|
||||||
"si_LK", // Sinhala (Sri Lanka)
|
"si_LK", // Sinhala (Sri Lanka)
|
||||||
"sk", // Slovak
|
"sk", // Slovak
|
||||||
"sk_SK", // Slovak (Slovakia)
|
"sk_SK", // Slovak (Slovakia)
|
||||||
|
@ -343,6 +348,7 @@ static const char *locale_list[] = {
|
||||||
"sq_MK", // Albanian (Macedonia)
|
"sq_MK", // Albanian (Macedonia)
|
||||||
"sr", // Serbian
|
"sr", // Serbian
|
||||||
"sr_Cyrl", // Serbian (Cyrillic)
|
"sr_Cyrl", // Serbian (Cyrillic)
|
||||||
|
"sr_Latn", // Serbian (Latin)
|
||||||
"sr_ME", // Serbian (Montenegro)
|
"sr_ME", // Serbian (Montenegro)
|
||||||
"sr_RS", // Serbian (Serbia)
|
"sr_RS", // Serbian (Serbia)
|
||||||
"ss_ZA", // Swati (South Africa)
|
"ss_ZA", // Swati (South Africa)
|
||||||
|
@ -357,6 +363,7 @@ static const char *locale_list[] = {
|
||||||
"ta_IN", // Tamil (India)
|
"ta_IN", // Tamil (India)
|
||||||
"ta_LK", // Tamil (Sri Lanka)
|
"ta_LK", // Tamil (Sri Lanka)
|
||||||
"tcy_IN", // Tulu (India)
|
"tcy_IN", // Tulu (India)
|
||||||
|
"te", // Telugu
|
||||||
"te_IN", // Telugu (India)
|
"te_IN", // Telugu (India)
|
||||||
"tg_TJ", // Tajik (Tajikistan)
|
"tg_TJ", // Tajik (Tajikistan)
|
||||||
"the_NP", // Chitwania Tharu (Nepal)
|
"the_NP", // Chitwania Tharu (Nepal)
|
||||||
|
@ -540,6 +547,7 @@ static const char *locale_names[] = {
|
||||||
"Fulah (Senegal)",
|
"Fulah (Senegal)",
|
||||||
"Finnish",
|
"Finnish",
|
||||||
"Finnish (Finland)",
|
"Finnish (Finland)",
|
||||||
|
"Filipino",
|
||||||
"Filipino (Philippines)",
|
"Filipino (Philippines)",
|
||||||
"Faroese (Faroe Islands)",
|
"Faroese (Faroe Islands)",
|
||||||
"French",
|
"French",
|
||||||
|
@ -588,6 +596,7 @@ static const char *locale_names[] = {
|
||||||
"Japanese",
|
"Japanese",
|
||||||
"Japanese (Japan)",
|
"Japanese (Japan)",
|
||||||
"Kabyle (Algeria)",
|
"Kabyle (Algeria)",
|
||||||
|
"Georgian",
|
||||||
"Georgian (Georgia)",
|
"Georgian (Georgia)",
|
||||||
"Kazakh (Kazakhstan)",
|
"Kazakh (Kazakhstan)",
|
||||||
"Kalaallisut (Greenland)",
|
"Kalaallisut (Greenland)",
|
||||||
|
@ -618,10 +627,12 @@ static const char *locale_names[] = {
|
||||||
"Malagasy (Madagascar)",
|
"Malagasy (Madagascar)",
|
||||||
"Marshallese (Marshall Islands)",
|
"Marshallese (Marshall Islands)",
|
||||||
"Eastern Mari (Russia)",
|
"Eastern Mari (Russia)",
|
||||||
"Maori (New Zealand)",
|
"Māori",
|
||||||
|
"Māori (New Zealand)",
|
||||||
"Mískito (Nicaragua)",
|
"Mískito (Nicaragua)",
|
||||||
"Macedonian",
|
"Macedonian",
|
||||||
"Macedonian (Macedonia)",
|
"Macedonian (Macedonia)",
|
||||||
|
"Malayalam",
|
||||||
"Malayalam (India)",
|
"Malayalam (India)",
|
||||||
"Manipuri (India)",
|
"Manipuri (India)",
|
||||||
"Mongolian (Mongolia)",
|
"Mongolian (Mongolia)",
|
||||||
|
@ -687,6 +698,7 @@ static const char *locale_names[] = {
|
||||||
"Samogitian (Lithuania)",
|
"Samogitian (Lithuania)",
|
||||||
"Shuswap (Canada)",
|
"Shuswap (Canada)",
|
||||||
"Sidamo (Ethiopia)",
|
"Sidamo (Ethiopia)",
|
||||||
|
"Sinhala",
|
||||||
"Sinhala (Sri Lanka)",
|
"Sinhala (Sri Lanka)",
|
||||||
"Slovak",
|
"Slovak",
|
||||||
"Slovak (Slovakia)",
|
"Slovak (Slovakia)",
|
||||||
|
@ -704,6 +716,7 @@ static const char *locale_names[] = {
|
||||||
"Albanian (Macedonia)",
|
"Albanian (Macedonia)",
|
||||||
"Serbian",
|
"Serbian",
|
||||||
"Serbian (Cyrillic)",
|
"Serbian (Cyrillic)",
|
||||||
|
"Serbian (Latin)",
|
||||||
"Serbian (Montenegro)",
|
"Serbian (Montenegro)",
|
||||||
"Serbian (Serbia)",
|
"Serbian (Serbia)",
|
||||||
"Swati (South Africa)",
|
"Swati (South Africa)",
|
||||||
|
@ -718,6 +731,7 @@ static const char *locale_names[] = {
|
||||||
"Tamil (India)",
|
"Tamil (India)",
|
||||||
"Tamil (Sri Lanka)",
|
"Tamil (Sri Lanka)",
|
||||||
"Tulu (India)",
|
"Tulu (India)",
|
||||||
|
"Telugu",
|
||||||
"Telugu (India)",
|
"Telugu (India)",
|
||||||
"Tajik (Tajikistan)",
|
"Tajik (Tajikistan)",
|
||||||
"Chitwania Tharu (Nepal)",
|
"Chitwania Tharu (Nepal)",
|
||||||
|
@ -968,6 +982,19 @@ String TranslationServer::get_locale_name(const String &p_locale) const {
|
||||||
return locale_name_map[p_locale];
|
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> TranslationServer::get_all_locales() {
|
||||||
|
|
||||||
Vector<String> locales;
|
Vector<String> locales;
|
||||||
|
@ -1017,6 +1044,13 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
return p_message;
|
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;
|
StringName res;
|
||||||
bool near_match = false;
|
bool near_match = false;
|
||||||
const CharType *lptr = &locale[0];
|
const CharType *lptr = &locale[0];
|
||||||
|
@ -1026,13 +1060,11 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
||||||
const Ref<Translation> &t = E->get();
|
const Ref<Translation> &t = E->get();
|
||||||
String l = t->get_locale();
|
String l = t->get_locale();
|
||||||
if (lptr[0] != l[0] || lptr[1] != l[1])
|
if (lptr[0] != l[0] || lptr[1] != l[1])
|
||||||
continue; // locale not match
|
continue; // Language code does not match.
|
||||||
|
|
||||||
//near match
|
bool exact_match = (l == locale);
|
||||||
bool match = (l != locale);
|
if (!exact_match && near_match)
|
||||||
|
continue; // Only near-match once, but keep looking for exact matches.
|
||||||
if (near_match && !match)
|
|
||||||
continue; //only near-match once
|
|
||||||
|
|
||||||
StringName r = t->get_message(p_message);
|
StringName r = t->get_message(p_message);
|
||||||
|
|
||||||
|
@ -1041,43 +1073,38 @@ StringName TranslationServer::translate(const StringName &p_message) const {
|
||||||
|
|
||||||
res = r;
|
res = r;
|
||||||
|
|
||||||
if (match)
|
if (exact_match)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
near_match = true;
|
near_match = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!res) {
|
if (!res && fallback.length() >= 2) {
|
||||||
//try again with fallback
|
// Try again with the fallback locale.
|
||||||
if (fallback.length() >= 2) {
|
const CharType *fptr = &fallback[0];
|
||||||
|
near_match = false;
|
||||||
|
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
||||||
|
|
||||||
const CharType *fptr = &fallback[0];
|
const Ref<Translation> &t = E->get();
|
||||||
near_match = false;
|
String l = t->get_locale();
|
||||||
for (const Set<Ref<Translation> >::Element *E = translations.front(); E; E = E->next()) {
|
if (fptr[0] != l[0] || fptr[1] != l[1])
|
||||||
|
continue; // Language code does not match.
|
||||||
|
|
||||||
const Ref<Translation> &t = E->get();
|
bool exact_match = (l == fallback);
|
||||||
String l = t->get_locale();
|
if (!exact_match && near_match)
|
||||||
if (fptr[0] != l[0] || fptr[1] != l[1])
|
continue; // Only near-match once, but keep looking for exact matches.
|
||||||
continue; // locale not match
|
|
||||||
|
|
||||||
//near match
|
StringName r = t->get_message(p_message);
|
||||||
bool match = (l != fallback);
|
|
||||||
|
|
||||||
if (near_match && !match)
|
if (!r)
|
||||||
continue; //only near-match once
|
continue;
|
||||||
|
|
||||||
StringName r = t->get_message(p_message);
|
res = r;
|
||||||
|
|
||||||
if (!r)
|
if (exact_match)
|
||||||
continue;
|
break;
|
||||||
|
else
|
||||||
res = r;
|
near_match = true;
|
||||||
|
|
||||||
if (match)
|
|
||||||
break;
|
|
||||||
else
|
|
||||||
near_match = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1168,6 +1195,8 @@ void TranslationServer::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("remove_translation", "translation"), &TranslationServer::remove_translation);
|
ClassDB::bind_method(D_METHOD("remove_translation", "translation"), &TranslationServer::remove_translation);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("clear"), &TranslationServer::clear);
|
ClassDB::bind_method(D_METHOD("clear"), &TranslationServer::clear);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("get_loaded_locales"), &TranslationServer::get_loaded_locales);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TranslationServer::load_translations() {
|
void TranslationServer::load_translations() {
|
||||||
|
|
|
@ -94,6 +94,8 @@ public:
|
||||||
|
|
||||||
String get_locale_name(const String &p_locale) const;
|
String get_locale_name(const String &p_locale) const;
|
||||||
|
|
||||||
|
Array get_loaded_locales() const;
|
||||||
|
|
||||||
void add_translation(const Ref<Translation> &p_translation);
|
void add_translation(const Ref<Translation> &p_translation);
|
||||||
void remove_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
|
#define _PRINTF_FORMAT_ATTRIBUTE_2_3
|
||||||
#endif
|
#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
|
#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')) {
|
if ((ord1 >= '0' && ord1 <= '9') || (ord1 >= 'A' && ord1 <= 'Z')) {
|
||||||
CharType ord2 = ord_at(i + 2);
|
CharType ord2 = ord_at(i + 2);
|
||||||
if ((ord2 >= '0' && ord2 <= '9') || (ord2 >= 'A' && ord2 <= 'Z')) {
|
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);
|
res += (char)strtol(bytes, NULL, 16);
|
||||||
i += 2;
|
i += 2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,10 @@ public:
|
||||||
|
|
||||||
_FORCE_INLINE_ CharString() {}
|
_FORCE_INLINE_ CharString() {}
|
||||||
_FORCE_INLINE_ CharString(const CharString &p_str) { _cowdata._ref(p_str._cowdata); }
|
_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;
|
bool operator<(const CharString &p_right) const;
|
||||||
CharString &operator+=(char p_char);
|
CharString &operator+=(char p_char);
|
||||||
|
@ -339,6 +343,10 @@ public:
|
||||||
|
|
||||||
_FORCE_INLINE_ String() {}
|
_FORCE_INLINE_ String() {}
|
||||||
_FORCE_INLINE_ String(const String &p_str) { _cowdata._ref(p_str._cowdata); }
|
_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 char *p_str);
|
||||||
String(const CharType *p_str, int p_clip_to_len = -1);
|
String(const CharType *p_str, int p_clip_to_len = -1);
|
||||||
|
|
|
@ -341,6 +341,7 @@ struct _VariantCall {
|
||||||
VCALL_LOCALMEM1R(Vector2, project);
|
VCALL_LOCALMEM1R(Vector2, project);
|
||||||
VCALL_LOCALMEM1R(Vector2, angle_to);
|
VCALL_LOCALMEM1R(Vector2, angle_to);
|
||||||
VCALL_LOCALMEM1R(Vector2, angle_to_point);
|
VCALL_LOCALMEM1R(Vector2, angle_to_point);
|
||||||
|
VCALL_LOCALMEM1R(Vector2, direction_to);
|
||||||
VCALL_LOCALMEM2R(Vector2, linear_interpolate);
|
VCALL_LOCALMEM2R(Vector2, linear_interpolate);
|
||||||
VCALL_LOCALMEM2R(Vector2, slerp);
|
VCALL_LOCALMEM2R(Vector2, slerp);
|
||||||
VCALL_LOCALMEM4R(Vector2, cubic_interpolate);
|
VCALL_LOCALMEM4R(Vector2, cubic_interpolate);
|
||||||
|
@ -397,6 +398,7 @@ struct _VariantCall {
|
||||||
VCALL_LOCALMEM1R(Vector3, distance_squared_to);
|
VCALL_LOCALMEM1R(Vector3, distance_squared_to);
|
||||||
VCALL_LOCALMEM1R(Vector3, project);
|
VCALL_LOCALMEM1R(Vector3, project);
|
||||||
VCALL_LOCALMEM1R(Vector3, angle_to);
|
VCALL_LOCALMEM1R(Vector3, angle_to);
|
||||||
|
VCALL_LOCALMEM1R(Vector3, direction_to);
|
||||||
VCALL_LOCALMEM1R(Vector3, slide);
|
VCALL_LOCALMEM1R(Vector3, slide);
|
||||||
VCALL_LOCALMEM1R(Vector3, bounce);
|
VCALL_LOCALMEM1R(Vector3, bounce);
|
||||||
VCALL_LOCALMEM1R(Vector3, reflect);
|
VCALL_LOCALMEM1R(Vector3, reflect);
|
||||||
|
@ -773,6 +775,8 @@ struct _VariantCall {
|
||||||
VCALL_PTR0R(Basis, get_orthogonal_index);
|
VCALL_PTR0R(Basis, get_orthogonal_index);
|
||||||
VCALL_PTR0R(Basis, orthonormalized);
|
VCALL_PTR0R(Basis, orthonormalized);
|
||||||
VCALL_PTR2R(Basis, slerp);
|
VCALL_PTR2R(Basis, slerp);
|
||||||
|
VCALL_PTR2R(Basis, is_equal_approx);
|
||||||
|
VCALL_PTR0R(Basis, get_rotation_quat);
|
||||||
|
|
||||||
VCALL_PTR0R(Transform, inverse);
|
VCALL_PTR0R(Transform, inverse);
|
||||||
VCALL_PTR0R(Transform, affine_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, replacen, STRING, "what", STRING, "forwhat", varray());
|
||||||
ADDFUNC2R(STRING, STRING, String, insert, INT, "position", STRING, "what", varray());
|
ADDFUNC2R(STRING, STRING, String, insert, INT, "position", STRING, "what", varray());
|
||||||
ADDFUNC0R(STRING, STRING, String, capitalize, 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, split, STRING, "delimiter", 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));
|
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, "divisor", BOOL, "allow_empty", varray(true));
|
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_upper, varray());
|
||||||
ADDFUNC0R(STRING, STRING, String, to_lower, 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, angle, varray());
|
||||||
ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray());
|
ADDFUNC0R(VECTOR2, REAL, Vector2, length_squared, varray());
|
||||||
ADDFUNC0R(VECTOR2, BOOL, Vector2, is_normalized, 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_to, VECTOR2, "to", varray());
|
||||||
ADDFUNC1R(VECTOR2, REAL, Vector2, distance_squared_to, VECTOR2, "to", varray());
|
ADDFUNC1R(VECTOR2, REAL, Vector2, distance_squared_to, VECTOR2, "to", varray());
|
||||||
ADDFUNC1R(VECTOR2, VECTOR2, Vector2, project, VECTOR2, "b", 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, linear_interpolate, VECTOR3, "b", REAL, "t", varray());
|
||||||
ADDFUNC2R(VECTOR3, VECTOR3, Vector3, slerp, 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());
|
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, REAL, Vector3, dot, VECTOR3, "b", varray());
|
||||||
ADDFUNC1R(VECTOR3, VECTOR3, Vector3, cross, VECTOR3, "b", varray());
|
ADDFUNC1R(VECTOR3, VECTOR3, Vector3, cross, VECTOR3, "b", varray());
|
||||||
ADDFUNC1R(VECTOR3, BASIS, Vector3, outer, 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());
|
ADDFUNC1R(BASIS, VECTOR3, Basis, xform_inv, VECTOR3, "v", varray());
|
||||||
ADDFUNC0R(BASIS, INT, Basis, get_orthogonal_index, varray());
|
ADDFUNC0R(BASIS, INT, Basis, get_orthogonal_index, varray());
|
||||||
ADDFUNC2R(BASIS, BASIS, Basis, slerp, BASIS, "b", REAL, "t", 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, inverse, varray());
|
||||||
ADDFUNC0R(TRANSFORM, TRANSFORM, Transform, affine_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);
|
_VariantCall::add_variant_constant(Variant::TRANSFORM, "IDENTITY", identity_transform);
|
||||||
transform_x.set(-1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0);
|
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);
|
_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);
|
_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::TRANSFORM, "FLIP_Z", transform_z);
|
||||||
|
|
||||||
_VariantCall::add_variant_constant(Variant::PLANE, "PLANE_YZ", Plane(Vector3(1, 0, 0), 0));
|
_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 != '=') {
|
} else if (c != '=') {
|
||||||
what += String::chr(c);
|
what += String::chr(c);
|
||||||
} else {
|
} else {
|
||||||
|
if (p_stream->is_utf8()) {
|
||||||
|
what.parse_utf8(what.ascii(true).get_data());
|
||||||
|
}
|
||||||
r_assign = what;
|
r_assign = what;
|
||||||
Token token;
|
Token token;
|
||||||
get_token(p_stream, token, line, r_err_str);
|
get_token(p_stream, token, line, r_err_str);
|
||||||
|
|
|
@ -65,7 +65,7 @@ private:
|
||||||
const Pair *a = _cowdata.ptr();
|
const Pair *a = _cowdata.ptr();
|
||||||
int middle = 0;
|
int middle = 0;
|
||||||
|
|
||||||
#if DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
if (low > high)
|
if (low > high)
|
||||||
ERR_PRINT("low > high, this may be a bug");
|
ERR_PRINT("low > high, this may be a bug");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,7 +50,7 @@ class VSet {
|
||||||
const T *a = &_data[0];
|
const T *a = &_data[0];
|
||||||
int middle = 0;
|
int middle = 0;
|
||||||
|
|
||||||
#if DEBUG_ENABLED
|
#ifdef DEBUG_ENABLED
|
||||||
if (low > high)
|
if (low > high)
|
||||||
ERR_PRINT("low > high, this may be a bug");
|
ERR_PRINT("low > high, this may be a bug");
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Global scope constants and variables.
|
Global scope constants and variables.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -9,8 +9,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
|
@ -640,7 +638,7 @@
|
||||||
_ key
|
_ key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_QUOTELEFT" value="96" enum="KeyList">
|
<constant name="KEY_QUOTELEFT" value="96" enum="KeyList">
|
||||||
Left Quote Key
|
` key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_BRACELEFT" value="123" enum="KeyList">
|
<constant name="KEY_BRACELEFT" value="123" enum="KeyList">
|
||||||
{ key
|
{ key
|
||||||
|
@ -664,9 +662,10 @@
|
||||||
<constant name="KEY_STERLING" value="163" enum="KeyList">
|
<constant name="KEY_STERLING" value="163" enum="KeyList">
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_CURRENCY" value="164" enum="KeyList">
|
<constant name="KEY_CURRENCY" value="164" enum="KeyList">
|
||||||
|
¤ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_YEN" value="165" enum="KeyList">
|
<constant name="KEY_YEN" value="165" enum="KeyList">
|
||||||
Yen Key
|
¥ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_BROKENBAR" value="166" enum="KeyList">
|
<constant name="KEY_BROKENBAR" value="166" enum="KeyList">
|
||||||
¦ key
|
¦ key
|
||||||
|
@ -681,21 +680,22 @@
|
||||||
© key
|
© key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ORDFEMININE" value="170" enum="KeyList">
|
<constant name="KEY_ORDFEMININE" value="170" enum="KeyList">
|
||||||
|
ª key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_GUILLEMOTLEFT" value="171" enum="KeyList">
|
<constant name="KEY_GUILLEMOTLEFT" value="171" enum="KeyList">
|
||||||
« key
|
« key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_NOTSIGN" value="172" enum="KeyList">
|
<constant name="KEY_NOTSIGN" value="172" enum="KeyList">
|
||||||
» key
|
¬ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_HYPHEN" value="173" enum="KeyList">
|
<constant name="KEY_HYPHEN" value="173" enum="KeyList">
|
||||||
‐ key
|
Soft hyphen key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_REGISTERED" value="174" enum="KeyList">
|
<constant name="KEY_REGISTERED" value="174" enum="KeyList">
|
||||||
® key
|
® key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_MACRON" value="175" enum="KeyList">
|
<constant name="KEY_MACRON" value="175" enum="KeyList">
|
||||||
Macron Key
|
¯ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_DEGREE" value="176" enum="KeyList">
|
<constant name="KEY_DEGREE" value="176" enum="KeyList">
|
||||||
° key
|
° key
|
||||||
|
@ -716,19 +716,19 @@
|
||||||
µ key
|
µ key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_PARAGRAPH" value="182" enum="KeyList">
|
<constant name="KEY_PARAGRAPH" value="182" enum="KeyList">
|
||||||
Paragraph Key
|
¶ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_PERIODCENTERED" value="183" enum="KeyList">
|
<constant name="KEY_PERIODCENTERED" value="183" enum="KeyList">
|
||||||
· key
|
· key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_CEDILLA" value="184" enum="KeyList">
|
<constant name="KEY_CEDILLA" value="184" enum="KeyList">
|
||||||
¬ key
|
¸ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ONESUPERIOR" value="185" enum="KeyList">
|
<constant name="KEY_ONESUPERIOR" value="185" enum="KeyList">
|
||||||
¹ key
|
¹ key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_MASCULINE" value="186" enum="KeyList">
|
<constant name="KEY_MASCULINE" value="186" enum="KeyList">
|
||||||
♂ key
|
º key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_GUILLEMOTRIGHT" value="187" enum="KeyList">
|
<constant name="KEY_GUILLEMOTRIGHT" value="187" enum="KeyList">
|
||||||
» key
|
» key
|
||||||
|
@ -746,97 +746,97 @@
|
||||||
¿ key
|
¿ key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_AGRAVE" value="192" enum="KeyList">
|
<constant name="KEY_AGRAVE" value="192" enum="KeyList">
|
||||||
à key
|
À key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_AACUTE" value="193" enum="KeyList">
|
<constant name="KEY_AACUTE" value="193" enum="KeyList">
|
||||||
á key
|
Á key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ACIRCUMFLEX" value="194" enum="KeyList">
|
<constant name="KEY_ACIRCUMFLEX" value="194" enum="KeyList">
|
||||||
â key
|
 key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ATILDE" value="195" enum="KeyList">
|
<constant name="KEY_ATILDE" value="195" enum="KeyList">
|
||||||
ã key
|
à key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ADIAERESIS" value="196" enum="KeyList">
|
<constant name="KEY_ADIAERESIS" value="196" enum="KeyList">
|
||||||
ä key
|
Ä key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ARING" value="197" enum="KeyList">
|
<constant name="KEY_ARING" value="197" enum="KeyList">
|
||||||
å key
|
Å key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_AE" value="198" enum="KeyList">
|
<constant name="KEY_AE" value="198" enum="KeyList">
|
||||||
æ key
|
Æ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_CCEDILLA" value="199" enum="KeyList">
|
<constant name="KEY_CCEDILLA" value="199" enum="KeyList">
|
||||||
ç key
|
Ç key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_EGRAVE" value="200" enum="KeyList">
|
<constant name="KEY_EGRAVE" value="200" enum="KeyList">
|
||||||
è key
|
È key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_EACUTE" value="201" enum="KeyList">
|
<constant name="KEY_EACUTE" value="201" enum="KeyList">
|
||||||
é key
|
É key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ECIRCUMFLEX" value="202" enum="KeyList">
|
<constant name="KEY_ECIRCUMFLEX" value="202" enum="KeyList">
|
||||||
ê key
|
Ê key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_EDIAERESIS" value="203" enum="KeyList">
|
<constant name="KEY_EDIAERESIS" value="203" enum="KeyList">
|
||||||
ë key
|
Ë key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_IGRAVE" value="204" enum="KeyList">
|
<constant name="KEY_IGRAVE" value="204" enum="KeyList">
|
||||||
ì key
|
Ì key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_IACUTE" value="205" enum="KeyList">
|
<constant name="KEY_IACUTE" value="205" enum="KeyList">
|
||||||
í key
|
Í key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ICIRCUMFLEX" value="206" enum="KeyList">
|
<constant name="KEY_ICIRCUMFLEX" value="206" enum="KeyList">
|
||||||
î key
|
Î key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_IDIAERESIS" value="207" enum="KeyList">
|
<constant name="KEY_IDIAERESIS" value="207" enum="KeyList">
|
||||||
ë key
|
Ï key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ETH" value="208" enum="KeyList">
|
<constant name="KEY_ETH" value="208" enum="KeyList">
|
||||||
ð key
|
Ð key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_NTILDE" value="209" enum="KeyList">
|
<constant name="KEY_NTILDE" value="209" enum="KeyList">
|
||||||
ñ key
|
Ñ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_OGRAVE" value="210" enum="KeyList">
|
<constant name="KEY_OGRAVE" value="210" enum="KeyList">
|
||||||
ò key
|
Ò key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_OACUTE" value="211" enum="KeyList">
|
<constant name="KEY_OACUTE" value="211" enum="KeyList">
|
||||||
ó key
|
Ó key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_OCIRCUMFLEX" value="212" enum="KeyList">
|
<constant name="KEY_OCIRCUMFLEX" value="212" enum="KeyList">
|
||||||
ô key
|
Ô key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_OTILDE" value="213" enum="KeyList">
|
<constant name="KEY_OTILDE" value="213" enum="KeyList">
|
||||||
õ key
|
Õ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_ODIAERESIS" value="214" enum="KeyList">
|
<constant name="KEY_ODIAERESIS" value="214" enum="KeyList">
|
||||||
ö key
|
Ö key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_MULTIPLY" value="215" enum="KeyList">
|
<constant name="KEY_MULTIPLY" value="215" enum="KeyList">
|
||||||
× key
|
× key
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_OOBLIQUE" value="216" enum="KeyList">
|
<constant name="KEY_OOBLIQUE" value="216" enum="KeyList">
|
||||||
ø key
|
Ø key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_UGRAVE" value="217" enum="KeyList">
|
<constant name="KEY_UGRAVE" value="217" enum="KeyList">
|
||||||
ù key
|
Ù key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_UACUTE" value="218" enum="KeyList">
|
<constant name="KEY_UACUTE" value="218" enum="KeyList">
|
||||||
ú key
|
Ú key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_UCIRCUMFLEX" value="219" enum="KeyList">
|
<constant name="KEY_UCIRCUMFLEX" value="219" enum="KeyList">
|
||||||
û key
|
Û key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_UDIAERESIS" value="220" enum="KeyList">
|
<constant name="KEY_UDIAERESIS" value="220" enum="KeyList">
|
||||||
ü key
|
Ü key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_YACUTE" value="221" enum="KeyList">
|
<constant name="KEY_YACUTE" value="221" enum="KeyList">
|
||||||
ý key
|
Ý key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_THORN" value="222" enum="KeyList">
|
<constant name="KEY_THORN" value="222" enum="KeyList">
|
||||||
þ key
|
Þ key.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="KEY_SSHARP" value="223" enum="KeyList">
|
<constant name="KEY_SSHARP" value="223" enum="KeyList">
|
||||||
ß key
|
ß key
|
||||||
|
@ -965,7 +965,7 @@
|
||||||
Joypad Button 15
|
Joypad Button 15
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_BUTTON_MAX" value="16" enum="JoystickList">
|
<constant name="JOY_BUTTON_MAX" value="16" enum="JoystickList">
|
||||||
Joypad Button 16
|
Represents the maximum number of joystick buttons supported.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList">
|
<constant name="JOY_SONY_CIRCLE" value="1" enum="JoystickList">
|
||||||
DUALSHOCK circle button
|
DUALSHOCK circle button
|
||||||
|
@ -992,16 +992,16 @@
|
||||||
XBOX controller Y button
|
XBOX controller Y button
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_DS_A" value="1" enum="JoystickList">
|
<constant name="JOY_DS_A" value="1" enum="JoystickList">
|
||||||
DualShock controller A button
|
Nintendo controller A button.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_DS_B" value="0" enum="JoystickList">
|
<constant name="JOY_DS_B" value="0" enum="JoystickList">
|
||||||
DualShock controller B button
|
Nintendo controller B button.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_DS_X" value="3" enum="JoystickList">
|
<constant name="JOY_DS_X" value="3" enum="JoystickList">
|
||||||
DualShock controller X button
|
Nintendo controller X button.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_DS_Y" value="2" enum="JoystickList">
|
<constant name="JOY_DS_Y" value="2" enum="JoystickList">
|
||||||
DualShock controller Y button
|
Nintendo controller Y button.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_SELECT" value="10" enum="JoystickList">
|
<constant name="JOY_SELECT" value="10" enum="JoystickList">
|
||||||
Joypad Button Select
|
Joypad Button Select
|
||||||
|
@ -1052,8 +1052,10 @@
|
||||||
Joypad Right Stick Vertical Axis
|
Joypad Right Stick Vertical Axis
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_4" value="4" enum="JoystickList">
|
<constant name="JOY_AXIS_4" value="4" enum="JoystickList">
|
||||||
|
Generic gamepad axis 4.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_5" value="5" enum="JoystickList">
|
<constant name="JOY_AXIS_5" value="5" enum="JoystickList">
|
||||||
|
Generic gamepad axis 5.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_6" value="6" enum="JoystickList">
|
<constant name="JOY_AXIS_6" value="6" enum="JoystickList">
|
||||||
Joypad Left Trigger Analog Axis
|
Joypad Left Trigger Analog Axis
|
||||||
|
@ -1062,10 +1064,13 @@
|
||||||
Joypad Right Trigger Analog Axis
|
Joypad Right Trigger Analog Axis
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_8" value="8" enum="JoystickList">
|
<constant name="JOY_AXIS_8" value="8" enum="JoystickList">
|
||||||
|
Generic gamepad axis 8.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_9" value="9" enum="JoystickList">
|
<constant name="JOY_AXIS_9" value="9" enum="JoystickList">
|
||||||
|
Generic gamepad axis 9.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_AXIS_MAX" value="10" enum="JoystickList">
|
<constant name="JOY_AXIS_MAX" value="10" enum="JoystickList">
|
||||||
|
Represents the maximum number of joystick axes supported.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="JOY_ANALOG_LX" value="0" enum="JoystickList">
|
<constant name="JOY_ANALOG_LX" value="0" enum="JoystickList">
|
||||||
Joypad Left Stick Horizontal Axis
|
Joypad Left Stick Horizontal Axis
|
||||||
|
@ -1086,228 +1091,292 @@
|
||||||
Joypad Right Analog Trigger
|
Joypad Right Analog Trigger
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_NOTE_OFF" value="8" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_NOTE_OFF" value="8" enum="MidiMessageList">
|
||||||
|
MIDI note OFF message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_NOTE_ON" value="9" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_NOTE_ON" value="9" enum="MidiMessageList">
|
||||||
|
MIDI note ON message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_AFTERTOUCH" value="10" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_AFTERTOUCH" value="10" enum="MidiMessageList">
|
||||||
|
MIDI aftertouch message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_CONTROL_CHANGE" value="11" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_CONTROL_CHANGE" value="11" enum="MidiMessageList">
|
||||||
|
MIDI control change message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_PROGRAM_CHANGE" value="12" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_PROGRAM_CHANGE" value="12" enum="MidiMessageList">
|
||||||
|
MIDI program change message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_CHANNEL_PRESSURE" value="13" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_CHANNEL_PRESSURE" value="13" enum="MidiMessageList">
|
||||||
|
MIDI channel pressure message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="MIDI_MESSAGE_PITCH_BEND" value="14" enum="MidiMessageList">
|
<constant name="MIDI_MESSAGE_PITCH_BEND" value="14" enum="MidiMessageList">
|
||||||
|
MIDI pitch bend message.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OK" value="0" enum="Error">
|
<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>
|
||||||
<constant name="FAILED" value="1" enum="Error">
|
<constant name="FAILED" value="1" enum="Error">
|
||||||
Generic error.
|
Generic error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_UNAVAILABLE" value="2" enum="Error">
|
<constant name="ERR_UNAVAILABLE" value="2" enum="Error">
|
||||||
Unavailable error
|
Unavailable error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_UNCONFIGURED" value="3" enum="Error">
|
<constant name="ERR_UNCONFIGURED" value="3" enum="Error">
|
||||||
Unconfigured error
|
Unconfigured error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_UNAUTHORIZED" value="4" enum="Error">
|
<constant name="ERR_UNAUTHORIZED" value="4" enum="Error">
|
||||||
Unauthorized error
|
Unauthorized error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_PARAMETER_RANGE_ERROR" value="5" enum="Error">
|
<constant name="ERR_PARAMETER_RANGE_ERROR" value="5" enum="Error">
|
||||||
Parameter range error
|
Parameter range error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_OUT_OF_MEMORY" value="6" enum="Error">
|
<constant name="ERR_OUT_OF_MEMORY" value="6" enum="Error">
|
||||||
Out of memory (OOM) error
|
Out of memory (OOM) error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_NOT_FOUND" value="7" enum="Error">
|
<constant name="ERR_FILE_NOT_FOUND" value="7" enum="Error">
|
||||||
File: Not found error
|
File: Not found error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_BAD_DRIVE" value="8" enum="Error">
|
<constant name="ERR_FILE_BAD_DRIVE" value="8" enum="Error">
|
||||||
File: Bad drive error
|
File: Bad drive error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_BAD_PATH" value="9" enum="Error">
|
<constant name="ERR_FILE_BAD_PATH" value="9" enum="Error">
|
||||||
File: Bad path error
|
File: Bad path error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_NO_PERMISSION" value="10" enum="Error">
|
<constant name="ERR_FILE_NO_PERMISSION" value="10" enum="Error">
|
||||||
File: No permission error
|
File: No permission error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_ALREADY_IN_USE" value="11" enum="Error">
|
<constant name="ERR_FILE_ALREADY_IN_USE" value="11" enum="Error">
|
||||||
File: Already in use error
|
File: Already in use error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_CANT_OPEN" value="12" enum="Error">
|
<constant name="ERR_FILE_CANT_OPEN" value="12" enum="Error">
|
||||||
File: Can't open error
|
File: Can't open error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_CANT_WRITE" value="13" enum="Error">
|
<constant name="ERR_FILE_CANT_WRITE" value="13" enum="Error">
|
||||||
File: Can't write error
|
File: Can't write error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_CANT_READ" value="14" enum="Error">
|
<constant name="ERR_FILE_CANT_READ" value="14" enum="Error">
|
||||||
File: Can't read error
|
File: Can't read error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_UNRECOGNIZED" value="15" enum="Error">
|
<constant name="ERR_FILE_UNRECOGNIZED" value="15" enum="Error">
|
||||||
File: Unrecognized error
|
File: Unrecognized error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_CORRUPT" value="16" enum="Error">
|
<constant name="ERR_FILE_CORRUPT" value="16" enum="Error">
|
||||||
File: Corrupt error
|
File: Corrupt error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_MISSING_DEPENDENCIES" value="17" enum="Error">
|
<constant name="ERR_FILE_MISSING_DEPENDENCIES" value="17" enum="Error">
|
||||||
File: Missing dependencies error
|
File: Missing dependencies error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_FILE_EOF" value="18" enum="Error">
|
<constant name="ERR_FILE_EOF" value="18" enum="Error">
|
||||||
File: End of file (EOF) error
|
File: End of file (EOF) error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_CANT_OPEN" value="19" enum="Error">
|
<constant name="ERR_CANT_OPEN" value="19" enum="Error">
|
||||||
Can't open error
|
Can't open error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_CANT_CREATE" value="20" enum="Error">
|
<constant name="ERR_CANT_CREATE" value="20" enum="Error">
|
||||||
Can't create error
|
Can't create error.
|
||||||
</constant>
|
|
||||||
<constant name="ERR_PARSE_ERROR" value="43" enum="Error">
|
|
||||||
Parse error
|
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_QUERY_FAILED" value="21" enum="Error">
|
<constant name="ERR_QUERY_FAILED" value="21" enum="Error">
|
||||||
Query failed error
|
Query failed error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_ALREADY_IN_USE" value="22" enum="Error">
|
<constant name="ERR_ALREADY_IN_USE" value="22" enum="Error">
|
||||||
Already in use error
|
Already in use error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_LOCKED" value="23" enum="Error">
|
<constant name="ERR_LOCKED" value="23" enum="Error">
|
||||||
Locked error
|
Locked error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_TIMEOUT" value="24" enum="Error">
|
<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>
|
||||||
<constant name="ERR_CANT_ACQUIRE_RESOURCE" value="28" enum="Error">
|
<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>
|
||||||
<constant name="ERR_INVALID_DATA" value="30" enum="Error">
|
<constant name="ERR_INVALID_DATA" value="30" enum="Error">
|
||||||
Invalid data error
|
Invalid data error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_INVALID_PARAMETER" value="31" enum="Error">
|
<constant name="ERR_INVALID_PARAMETER" value="31" enum="Error">
|
||||||
Invalid parameter error
|
Invalid parameter error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_ALREADY_EXISTS" value="32" enum="Error">
|
<constant name="ERR_ALREADY_EXISTS" value="32" enum="Error">
|
||||||
Already exists error
|
Already exists error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_DOES_NOT_EXIST" value="33" enum="Error">
|
<constant name="ERR_DOES_NOT_EXIST" value="33" enum="Error">
|
||||||
Does not exist error
|
Does not exist error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_DATABASE_CANT_READ" value="34" enum="Error">
|
<constant name="ERR_DATABASE_CANT_READ" value="34" enum="Error">
|
||||||
Database: Read error
|
Database: Read error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_DATABASE_CANT_WRITE" value="35" enum="Error">
|
<constant name="ERR_DATABASE_CANT_WRITE" value="35" enum="Error">
|
||||||
Database: Write error
|
Database: Write error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_COMPILATION_FAILED" value="36" enum="Error">
|
<constant name="ERR_COMPILATION_FAILED" value="36" enum="Error">
|
||||||
Compilation failed error
|
Compilation failed error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_METHOD_NOT_FOUND" value="37" enum="Error">
|
<constant name="ERR_METHOD_NOT_FOUND" value="37" enum="Error">
|
||||||
Method not found error
|
Method not found error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_LINK_FAILED" value="38" enum="Error">
|
<constant name="ERR_LINK_FAILED" value="38" enum="Error">
|
||||||
Linking failed error
|
Linking failed error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_SCRIPT_FAILED" value="39" enum="Error">
|
<constant name="ERR_SCRIPT_FAILED" value="39" enum="Error">
|
||||||
Script failed error
|
Script failed error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_CYCLIC_LINK" value="40" enum="Error">
|
<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>
|
||||||
<constant name="ERR_BUSY" value="44" enum="Error">
|
<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>
|
||||||
<constant name="ERR_HELP" value="46" enum="Error">
|
<constant name="ERR_HELP" value="46" enum="Error">
|
||||||
Help error
|
Help error.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="ERR_BUG" value="47" enum="Error">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_NONE" value="0" enum="PropertyHint">
|
<constant name="PROPERTY_HINT_NONE" value="0" enum="PropertyHint">
|
||||||
No hint for edited property.
|
No hint for edited property.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_EXP_RANGE" value="2" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_ENUM" value="3" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_EXP_EASING" value="4" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_LENGTH" value="5" enum="PropertyHint">
|
<constant name="PROPERTY_HINT_LENGTH" value="5" enum="PropertyHint">
|
||||||
|
Deprecated hint, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_HINT_KEY_ACCEL" value="7" enum="PropertyHint">
|
<constant name="PROPERTY_HINT_KEY_ACCEL" value="7" enum="PropertyHint">
|
||||||
|
Deprecated hint, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_HINT_FLAGS" value="8" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_LAYERS_2D_RENDER" value="9" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_LAYERS_2D_PHYSICS" value="10" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_LAYERS_3D_RENDER" value="11" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_LAYERS_3D_PHYSICS" value="12" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_FILE" value="13" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_DIR" value="14" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_GLOBAL_FILE" value="15" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_GLOBAL_DIR" value="16" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_RESOURCE_TYPE" value="17" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_MULTILINE_TEXT" value="18" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="19" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="20" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="21" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="22" enum="PropertyHint">
|
<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>
|
||||||
<constant name="PROPERTY_USAGE_STORAGE" value="1" enum="PropertyUsageFlags">
|
<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>
|
||||||
<constant name="PROPERTY_USAGE_EDITOR" value="2" enum="PropertyUsageFlags">
|
<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>
|
||||||
<constant name="PROPERTY_USAGE_NETWORK" value="4" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_NETWORK" value="4" enum="PropertyUsageFlags">
|
||||||
|
Deprecated usage flag, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_EDITOR_HELPER" value="8" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_EDITOR_HELPER" value="8" enum="PropertyUsageFlags">
|
||||||
|
Deprecated usage flag, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_CHECKABLE" value="16" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_CHECKABLE" value="16" enum="PropertyUsageFlags">
|
||||||
|
The property can be checked in the editor inspector.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_CHECKED" value="32" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_CHECKED" value="32" enum="PropertyUsageFlags">
|
||||||
|
The property is checked in the editor inspector.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_INTERNATIONALIZED" value="64" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_INTERNATIONALIZED" value="64" enum="PropertyUsageFlags">
|
||||||
|
The property is a translatable string.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_GROUP" value="128" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_GROUP" value="128" enum="PropertyUsageFlags">
|
||||||
|
Used to group properties together in the editor.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_CATEGORY" value="256" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_CATEGORY" value="256" enum="PropertyUsageFlags">
|
||||||
|
Used to categorize properties together in the editor.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_NO_INSTANCE_STATE" value="2048" enum="PropertyUsageFlags">
|
||||||
|
The property does not save its state in [PackedScene].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_RESTART_IF_CHANGED" value="4096" enum="PropertyUsageFlags">
|
||||||
|
Editing the property prompts the user for restarting the editor.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_SCRIPT_VARIABLE" value="8192" enum="PropertyUsageFlags">
|
<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>
|
||||||
<constant name="PROPERTY_USAGE_DEFAULT" value="7" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_DEFAULT" value="7" enum="PropertyUsageFlags">
|
||||||
Default usage (storage and editor).
|
Default usage (storage, editor and network).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_DEFAULT_INTL" value="71" enum="PropertyUsageFlags">
|
||||||
|
Default usage for translatable strings (storage, editor, network and internationalized).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="PROPERTY_USAGE_NOEDITOR" value="5" enum="PropertyUsageFlags">
|
<constant name="PROPERTY_USAGE_NOEDITOR" value="5" enum="PropertyUsageFlags">
|
||||||
|
Default usage but without showing the property in the editor (storage, network).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags">
|
<constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags">
|
||||||
Flag for normal method
|
Flag for normal method
|
||||||
|
@ -1316,23 +1385,25 @@
|
||||||
Flag for editor method
|
Flag for editor method
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_NOSCRIPT" value="4" enum="MethodFlags">
|
<constant name="METHOD_FLAG_NOSCRIPT" value="4" enum="MethodFlags">
|
||||||
|
Deprecated method flag, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_CONST" value="8" enum="MethodFlags">
|
<constant name="METHOD_FLAG_CONST" value="8" enum="MethodFlags">
|
||||||
Flag for constant method
|
Flag for constant method
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_REVERSE" value="16" enum="MethodFlags">
|
<constant name="METHOD_FLAG_REVERSE" value="16" enum="MethodFlags">
|
||||||
|
Deprecated method flag, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_VIRTUAL" value="32" enum="MethodFlags">
|
<constant name="METHOD_FLAG_VIRTUAL" value="32" enum="MethodFlags">
|
||||||
Flag for virtual method
|
Flag for virtual method
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAG_FROM_SCRIPT" value="64" enum="MethodFlags">
|
<constant name="METHOD_FLAG_FROM_SCRIPT" value="64" enum="MethodFlags">
|
||||||
Flag for method from script
|
Deprecated method flag, unused.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="METHOD_FLAGS_DEFAULT" value="1" enum="MethodFlags">
|
<constant name="METHOD_FLAGS_DEFAULT" value="1" enum="MethodFlags">
|
||||||
Default method flags
|
Default method flags
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_NIL" value="0" enum="Variant.Type">
|
<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>
|
||||||
<constant name="TYPE_BOOL" value="1" enum="Variant.Type">
|
<constant name="TYPE_BOOL" value="1" enum="Variant.Type">
|
||||||
Variable is of type [bool].
|
Variable is of type [bool].
|
||||||
|
@ -1341,7 +1412,7 @@
|
||||||
Variable is of type [int].
|
Variable is of type [int].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_REAL" value="3" enum="Variant.Type">
|
<constant name="TYPE_REAL" value="3" enum="Variant.Type">
|
||||||
Variable is of type [float]/real.
|
Variable is of type [float] (real).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_STRING" value="4" enum="Variant.Type">
|
<constant name="TYPE_STRING" value="4" enum="Variant.Type">
|
||||||
Variable is of type [String].
|
Variable is of type [String].
|
||||||
|
@ -1413,59 +1484,85 @@
|
||||||
Variable is of type [PoolColorArray].
|
Variable is of type [PoolColorArray].
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="TYPE_MAX" value="27" enum="Variant.Type">
|
<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>
|
||||||
<constant name="OP_EQUAL" value="0" enum="Variant.Operator">
|
<constant name="OP_EQUAL" value="0" enum="Variant.Operator">
|
||||||
|
Equality operator ([code]==[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_NOT_EQUAL" value="1" enum="Variant.Operator">
|
<constant name="OP_NOT_EQUAL" value="1" enum="Variant.Operator">
|
||||||
|
Inequality operator ([code]!=[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_LESS" value="2" enum="Variant.Operator">
|
<constant name="OP_LESS" value="2" enum="Variant.Operator">
|
||||||
|
Less than operator ([code]<[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_LESS_EQUAL" value="3" enum="Variant.Operator">
|
<constant name="OP_LESS_EQUAL" value="3" enum="Variant.Operator">
|
||||||
|
Less than or equal operator ([code]<=[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_GREATER" value="4" enum="Variant.Operator">
|
<constant name="OP_GREATER" value="4" enum="Variant.Operator">
|
||||||
|
Greater than operator ([code]>[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_GREATER_EQUAL" value="5" enum="Variant.Operator">
|
<constant name="OP_GREATER_EQUAL" value="5" enum="Variant.Operator">
|
||||||
|
Greater than or equal operator ([code]>=[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_ADD" value="6" enum="Variant.Operator">
|
<constant name="OP_ADD" value="6" enum="Variant.Operator">
|
||||||
|
Addition operator ([code]+[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_SUBTRACT" value="7" enum="Variant.Operator">
|
<constant name="OP_SUBTRACT" value="7" enum="Variant.Operator">
|
||||||
|
Subtraction operator ([code]-[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_MULTIPLY" value="8" enum="Variant.Operator">
|
<constant name="OP_MULTIPLY" value="8" enum="Variant.Operator">
|
||||||
|
Multiplication operator ([code]*[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_DIVIDE" value="9" enum="Variant.Operator">
|
<constant name="OP_DIVIDE" value="9" enum="Variant.Operator">
|
||||||
|
Division operator ([code]/[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_NEGATE" value="10" enum="Variant.Operator">
|
<constant name="OP_NEGATE" value="10" enum="Variant.Operator">
|
||||||
|
Unary negation operator ([code]-[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_POSITIVE" value="11" enum="Variant.Operator">
|
<constant name="OP_POSITIVE" value="11" enum="Variant.Operator">
|
||||||
|
Unary plus operator ([code]+[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_MODULE" value="12" enum="Variant.Operator">
|
<constant name="OP_MODULE" value="12" enum="Variant.Operator">
|
||||||
|
Remainder/modulo operator ([code]%[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_STRING_CONCAT" value="13" enum="Variant.Operator">
|
<constant name="OP_STRING_CONCAT" value="13" enum="Variant.Operator">
|
||||||
|
String concatenation operator ([code]+[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_SHIFT_LEFT" value="14" enum="Variant.Operator">
|
<constant name="OP_SHIFT_LEFT" value="14" enum="Variant.Operator">
|
||||||
|
Left shift operator ([code]<<[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_SHIFT_RIGHT" value="15" enum="Variant.Operator">
|
<constant name="OP_SHIFT_RIGHT" value="15" enum="Variant.Operator">
|
||||||
|
Right shift operator ([code]>>[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_BIT_AND" value="16" enum="Variant.Operator">
|
<constant name="OP_BIT_AND" value="16" enum="Variant.Operator">
|
||||||
|
Bitwise AND operator ([code]&[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_BIT_OR" value="17" enum="Variant.Operator">
|
<constant name="OP_BIT_OR" value="17" enum="Variant.Operator">
|
||||||
|
Bitwise OR operator ([code]|[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_BIT_XOR" value="18" enum="Variant.Operator">
|
<constant name="OP_BIT_XOR" value="18" enum="Variant.Operator">
|
||||||
|
Bitwise XOR operator ([code]^[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_BIT_NEGATE" value="19" enum="Variant.Operator">
|
<constant name="OP_BIT_NEGATE" value="19" enum="Variant.Operator">
|
||||||
|
Bitwise NOT operator ([code]~[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_AND" value="20" enum="Variant.Operator">
|
<constant name="OP_AND" value="20" enum="Variant.Operator">
|
||||||
|
Logical AND operator ([code]and[/code] or [code]&&[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_OR" value="21" enum="Variant.Operator">
|
<constant name="OP_OR" value="21" enum="Variant.Operator">
|
||||||
|
Logical OR operator ([code]or[/code] or [code]||[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_XOR" value="22" enum="Variant.Operator">
|
<constant name="OP_XOR" value="22" enum="Variant.Operator">
|
||||||
|
Logical XOR operator (not implemented in GDScript).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_NOT" value="23" enum="Variant.Operator">
|
<constant name="OP_NOT" value="23" enum="Variant.Operator">
|
||||||
|
Logical NOT operator ([code]not[/code] or [code]![/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_IN" value="24" enum="Variant.Operator">
|
<constant name="OP_IN" value="24" enum="Variant.Operator">
|
||||||
|
Logical IN operator ([code]in[/code]).
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="OP_MAX" value="25" enum="Variant.Operator">
|
<constant name="OP_MAX" value="25" enum="Variant.Operator">
|
||||||
|
Represents the size of the [enum Variant.Operator] enum.
|
||||||
</constant>
|
</constant>
|
||||||
</constants>
|
</constants>
|
||||||
</class>
|
</class>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Axis-Aligned Bounding Box.
|
Axis-Aligned Bounding Box.
|
||||||
</brief_description>
|
</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.
|
AABB consists of a position, a size, and several utility functions. It is typically used for fast overlap tests.
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<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>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="AABB">
|
<method name="AABB">
|
||||||
<return type="AABB">
|
<return type="AABB">
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Anchor point in AR Space.
|
Anchor point in AR Space.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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.
|
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.
|
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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_anchor_name" qualifiers="const">
|
<method name="get_anchor_name" qualifiers="const">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
|
@ -24,7 +22,7 @@
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_plane" qualifiers="const">
|
<method name="get_plane" qualifiers="const">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
A camera node with a few overrules for AR/VR applied, such as location tracking.
|
A camera node with a few overrules for AR/VR applied, such as location tracking.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -9,8 +9,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
A spatial node representing a spatially tracked controller.
|
A spatial node representing a spatially tracked controller.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -10,8 +10,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_controller_name" qualifiers="const">
|
<method name="get_controller_name" qualifiers="const">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Base class for ARVR interface implementation.
|
Base class for ARVR interface implementation.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -9,8 +9,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_capabilities" qualifiers="const">
|
<method name="get_capabilities" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
|
@ -55,7 +53,7 @@
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="uninitialize">
|
<method name="uninitialize">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Our origin point in AR/VR.
|
Our origin point in AR/VR.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -11,8 +11,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
A tracked object
|
A tracked object
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -10,8 +10,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_hand" qualifiers="const">
|
<method name="get_hand" qualifiers="const">
|
||||||
<return type="int" enum="ARVRPositionalTracker.TrackerHand">
|
<return type="int" enum="ARVRPositionalTracker.TrackerHand">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
This is our AR/VR Server.
|
This is our AR/VR Server.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -8,8 +8,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="center_on_hmd">
|
<method name="center_on_hmd">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
@ -56,7 +54,7 @@
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_interfaces" qualifiers="const">
|
<method name="get_interfaces" qualifiers="const">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
AStar class representation that uses vectors as edges.
|
AStar class representation that uses vectors as edges.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -9,8 +9,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="_compute_cost" qualifiers="virtual">
|
<method name="_compute_cost" qualifiers="virtual">
|
||||||
<return type="float">
|
<return type="float">
|
||||||
|
@ -46,8 +44,8 @@
|
||||||
<description>
|
<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.
|
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]
|
[codeblock]
|
||||||
var as = AStar.new()
|
var astar = AStar.new()
|
||||||
as.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with weight_scale 4 and id 1
|
astar.add_point(1, Vector3(1, 0, 0), 4) # Adds the point (1, 0, 0) with weight_scale 4 and id 1
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
If there already exists a point for the given id, its position and weight scale are updated to the given values.
|
If there already exists a point for the given id, its position and weight scale are updated to the given values.
|
||||||
</description>
|
</description>
|
||||||
|
@ -82,10 +80,10 @@
|
||||||
<description>
|
<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.
|
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]
|
[codeblock]
|
||||||
var as = AStar.new()
|
var astar = AStar.new()
|
||||||
as.add_point(1, Vector3(1, 1, 0))
|
astar.add_point(1, Vector3(1, 1, 0))
|
||||||
as.add_point(2, Vector3(0, 5, 0))
|
astar.add_point(2, Vector3(0, 5, 0))
|
||||||
as.connect_points(1, 2, false)
|
astar.connect_points(1, 2, false)
|
||||||
[/codeblock]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -124,11 +122,11 @@
|
||||||
<description>
|
<description>
|
||||||
Returns the closest position to [code]to_position[/code] that resides inside a segment between two connected points.
|
Returns the closest position to [code]to_position[/code] that resides inside a segment between two connected points.
|
||||||
[codeblock]
|
[codeblock]
|
||||||
var as = AStar.new()
|
var astar = AStar.new()
|
||||||
as.add_point(1, Vector3(0, 0, 0))
|
astar.add_point(1, Vector3(0, 0, 0))
|
||||||
as.add_point(2, Vector3(0, 5, 0))
|
astar.add_point(2, Vector3(0, 5, 0))
|
||||||
as.connect_points(1, 2)
|
astar.connect_points(1, 2)
|
||||||
var res = as.get_closest_position_in_segment(Vector3(3, 3, 0)) # returns (0, 3, 0)
|
var res = astar.get_closest_position_in_segment(Vector3(3, 3, 0)) # Returns (0, 3, 0)
|
||||||
[/codeblock]
|
[/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.
|
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>
|
</description>
|
||||||
|
@ -143,19 +141,18 @@
|
||||||
<description>
|
<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.
|
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]
|
[codeblock]
|
||||||
var as = AStar.new()
|
var astar = AStar.new()
|
||||||
as.add_point(1, Vector3(0, 0, 0))
|
astar.add_point(1, Vector3(0, 0, 0))
|
||||||
as.add_point(2, Vector3(0, 1, 0), 1) # default weight is 1
|
astar.add_point(2, Vector3(0, 1, 0), 1) # Default weight is 1
|
||||||
as.add_point(3, Vector3(1, 1, 0))
|
astar.add_point(3, Vector3(1, 1, 0))
|
||||||
as.add_point(4, Vector3(2, 0, 0))
|
astar.add_point(4, Vector3(2, 0, 0))
|
||||||
|
|
||||||
as.connect_points(1, 2, false)
|
astar.connect_points(1, 2, false)
|
||||||
as.connect_points(2, 3, false)
|
astar.connect_points(2, 3, false)
|
||||||
as.connect_points(4, 3, false)
|
astar.connect_points(4, 3, false)
|
||||||
as.connect_points(1, 4, false)
|
astar.connect_points(1, 4, false)
|
||||||
as.connect_points(5, 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]
|
[/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.
|
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>
|
</description>
|
||||||
|
@ -168,16 +165,16 @@
|
||||||
<description>
|
<description>
|
||||||
Returns an array with the ids of the points that form the connect with the given point.
|
Returns an array with the ids of the points that form the connect with the given point.
|
||||||
[codeblock]
|
[codeblock]
|
||||||
var as = AStar.new()
|
var astar = AStar.new()
|
||||||
as.add_point(1, Vector3(0, 0, 0))
|
astar.add_point(1, Vector3(0, 0, 0))
|
||||||
as.add_point(2, Vector3(0, 1, 0))
|
astar.add_point(2, Vector3(0, 1, 0))
|
||||||
as.add_point(3, Vector3(1, 1, 0))
|
astar.add_point(3, Vector3(1, 1, 0))
|
||||||
as.add_point(4, Vector3(2, 0, 0))
|
astar.add_point(4, Vector3(2, 0, 0))
|
||||||
|
|
||||||
as.connect_points(1, 2, true)
|
astar.connect_points(1, 2, true)
|
||||||
as.connect_points(1, 3, 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]
|
[/codeblock]
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
@ -226,6 +223,15 @@
|
||||||
Returns whether a point associated with the given id exists.
|
Returns whether a point associated with the given id exists.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</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">
|
<method name="remove_point">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
|
@ -235,6 +241,17 @@
|
||||||
Removes the point associated with the given id from the points pool.
|
Removes the point associated with the given id from the points pool.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</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">
|
<method name="set_point_position">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Base dialog for user notification.
|
Base dialog for user notification.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -8,8 +8,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_button">
|
<method name="add_button">
|
||||||
<return type="Button">
|
<return type="Button">
|
||||||
|
@ -38,14 +36,14 @@
|
||||||
<return type="Label">
|
<return type="Label">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Return the label used for built-in text.
|
Returns the label used for built-in text.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_ok">
|
<method name="get_ok">
|
||||||
<return type="Button">
|
<return type="Button">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Return the OK Button.
|
Returns the OK Button.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="register_text_enter">
|
<method name="register_text_enter">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Sprite node that can use multiple textures for animation.
|
Sprite node that can use multiple textures for animation.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -8,14 +8,12 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="is_playing" qualifiers="const">
|
<method name="is_playing" qualifiers="const">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Return true if an animation if currently being played.
|
Returns [code]true[/code] if an animation if currently being played.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="play">
|
<method name="play">
|
||||||
|
@ -23,8 +21,10 @@
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="anim" type="String" default="""">
|
<argument index="0" name="anim" type="String" default="""">
|
||||||
</argument>
|
</argument>
|
||||||
|
<argument index="1" name="backwards" type="bool" default="false">
|
||||||
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="stop">
|
<method name="stop">
|
||||||
|
@ -61,6 +61,7 @@
|
||||||
If [code]true[/code], the [member animation] is currently playing.
|
If [code]true[/code], the [member animation] is currently playing.
|
||||||
</member>
|
</member>
|
||||||
<member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale">
|
<member name="speed_scale" type="float" setter="set_speed_scale" getter="get_speed_scale">
|
||||||
|
The animation speed is multiplied by this value.
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<signals>
|
<signals>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
2D sprite node in 3D world, that can use multiple 2D textures for animation.
|
2D sprite node in 3D world, that can use multiple 2D textures for animation.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -8,14 +8,12 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="is_playing" qualifiers="const">
|
<method name="is_playing" qualifiers="const">
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Return true if an animation if currently being played.
|
Returns [code]true[/code] if an animation if currently being played.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="play">
|
<method name="play">
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Proxy texture for simple frame-based animations.
|
Proxy texture for simple frame-based animations.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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.
|
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.
|
[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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_frame_delay" qualifiers="const">
|
<method name="get_frame_delay" qualifiers="const">
|
||||||
<return type="float">
|
<return type="float">
|
||||||
|
@ -19,7 +17,7 @@
|
||||||
<argument index="0" name="frame" type="int">
|
<argument index="0" name="frame" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Retrieves the delayed assigned to the given [code]frame[/code] ID.
|
Returns the given frame's delay value.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_frame_texture" qualifiers="const">
|
<method name="get_frame_texture" qualifiers="const">
|
||||||
|
@ -28,7 +26,7 @@
|
||||||
<argument index="0" name="frame" type="int">
|
<argument index="0" name="frame" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Retrieves the [Texture] assigned to the given [code]frame[/code] ID.
|
Returns the given frame's [Texture].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_frame_delay">
|
<method name="set_frame_delay">
|
||||||
|
@ -39,7 +37,7 @@
|
||||||
<argument index="1" name="delay" type="float">
|
<argument index="1" name="delay" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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:
|
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]
|
[codeblock]
|
||||||
Frame 0: 0.5 s (1 / fps)
|
Frame 0: 0.5 s (1 / fps)
|
||||||
|
@ -57,15 +55,15 @@
|
||||||
<argument index="1" name="texture" type="Texture">
|
<argument index="1" name="texture" type="Texture">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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).
|
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 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.
|
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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="fps" type="float" setter="set_fps" getter="get_fps">
|
<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.
|
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 over 4 seconds, with one frame each 0.5 seconds.
|
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>
|
||||||
<member name="frames" type="int" setter="set_frames" getter="get_frames">
|
<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.
|
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" ?>
|
<?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>
|
<brief_description>
|
||||||
Contains data used to animate everything in the engine.
|
Contains data used to animate everything in the engine.
|
||||||
</brief_description>
|
</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.
|
Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] or [AnimationTreePlayer] to be played back.
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<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>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_track">
|
<method name="add_track">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
|
@ -265,14 +263,14 @@
|
||||||
<argument index="0" name="path" type="NodePath">
|
<argument index="0" name="path" type="NodePath">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_track_count" qualifiers="const">
|
<method name="get_track_count" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
Return the amount of tracks in the animation.
|
Returns the amount of tracks in the animation.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="method_track_get_key_indices" qualifiers="const">
|
<method name="method_track_get_key_indices" qualifiers="const">
|
||||||
|
@ -285,7 +283,7 @@
|
||||||
<argument index="2" name="delta" type="float">
|
<argument index="2" name="delta" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="method_track_get_name" qualifiers="const">
|
<method name="method_track_get_name" qualifiers="const">
|
||||||
|
@ -296,7 +294,7 @@
|
||||||
<argument index="1" name="key_idx" type="int">
|
<argument index="1" name="key_idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return the method name of a method track.
|
Returns the method name of a method track.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="method_track_get_params" qualifiers="const">
|
<method name="method_track_get_params" qualifiers="const">
|
||||||
|
@ -307,7 +305,7 @@
|
||||||
<argument index="1" name="key_idx" type="int">
|
<argument index="1" name="key_idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_track">
|
<method name="remove_track">
|
||||||
|
@ -347,7 +345,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_get_key_count" qualifiers="const">
|
<method name="track_get_key_count" qualifiers="const">
|
||||||
|
@ -356,7 +354,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return the amount of keys in a given track.
|
Returns the amount of keys in a given track.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_get_key_time" qualifiers="const">
|
<method name="track_get_key_time" qualifiers="const">
|
||||||
|
@ -367,7 +365,7 @@
|
||||||
<argument index="1" name="key_idx" type="int">
|
<argument index="1" name="key_idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return the time at which the key is located.
|
Returns the time at which the key is located.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_get_key_transition" qualifiers="const">
|
<method name="track_get_key_transition" qualifiers="const">
|
||||||
|
@ -378,7 +376,7 @@
|
||||||
<argument index="1" name="key_idx" type="int">
|
<argument index="1" name="key_idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_get_key_value" qualifiers="const">
|
<method name="track_get_key_value" qualifiers="const">
|
||||||
|
@ -389,7 +387,7 @@
|
||||||
<argument index="1" name="key_idx" type="int">
|
<argument index="1" name="key_idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return the value of a given key in a given track.
|
Returns the value of a given key in a given track.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_get_path" qualifiers="const">
|
<method name="track_get_path" qualifiers="const">
|
||||||
|
@ -440,7 +438,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="track_move_down">
|
<method name="track_move_down">
|
||||||
|
@ -600,7 +598,7 @@
|
||||||
<argument index="1" name="time_sec" type="float">
|
<argument index="1" name="time_sec" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="value_track_get_key_indices" qualifiers="const">
|
<method name="value_track_get_key_indices" qualifiers="const">
|
||||||
|
@ -613,7 +611,7 @@
|
||||||
<argument index="2" name="delta" type="float">
|
<argument index="2" name="delta" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="value_track_get_update_mode" qualifiers="const">
|
<method name="value_track_get_update_mode" qualifiers="const">
|
||||||
|
@ -622,7 +620,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return the update mode of a value track.
|
Returns the update mode of a value track.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="value_track_set_update_mode">
|
<method name="value_track_set_update_mode">
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
Base resource for [AnimationTree] nodes.
|
Base resource for [AnimationTree] nodes.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
|
@ -9,8 +9,6 @@
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_input">
|
<method name="add_input">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
@ -54,7 +52,7 @@
|
||||||
<argument index="5" name="optimize" type="bool" default="true">
|
<argument index="5" name="optimize" type="bool" default="true">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="blend_node">
|
<method name="blend_node">
|
||||||
|
@ -146,7 +144,7 @@
|
||||||
<return type="String">
|
<return type="String">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="is_path_filtered" qualifiers="const">
|
<method name="is_path_filtered" qualifiers="const">
|
||||||
|
@ -155,7 +153,7 @@
|
||||||
<argument index="0" name="path" type="NodePath">
|
<argument index="0" name="path" type="NodePath">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
Return true wether a given path is filtered.
|
Returns [code]true[/code] whether a given path is filtered.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="process" qualifiers="virtual">
|
<method name="process" qualifiers="virtual">
|
||||||
|
@ -166,7 +164,7 @@
|
||||||
<argument index="1" name="seek" type="bool">
|
<argument index="1" name="seek" type="bool">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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.
|
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.
|
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).
|
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>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="filter_enabled" type="bool" setter="set_filter_enabled" getter="is_filter_enabled">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<signals>
|
<signals>
|
||||||
|
@ -217,6 +215,7 @@
|
||||||
</signal>
|
</signal>
|
||||||
<signal name="tree_changed">
|
<signal name="tree_changed">
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</signal>
|
</signal>
|
||||||
</signals>
|
</signals>
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends two animations additively inside of an [AnimationNodeBlendTree].
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,17 +1,22 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends two of three animations additively inside of an [AnimationNodeBlendTree].
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Input animation to use in an [AnimationNodeBlendTree].
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="animation" type="String" setter="set_animation" getter="get_animation">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends two animations linearly inside of an [AnimationNodeBlendTree].
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,17 +1,22 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends two of three animations linearly inside of an [AnimationNodeBlendTree].
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync">
|
<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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends linearly between two of any number of [AnimationNode] of any type placed on a virtual axis.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_blend_point">
|
<method name="add_blend_point">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
@ -19,12 +22,14 @@
|
||||||
<argument index="2" name="at_index" type="int" default="-1">
|
<argument index="2" name="at_index" type="int" default="-1">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_count" qualifiers="const">
|
<method name="get_blend_point_count" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the number of points on the blend axis.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_node" qualifiers="const">
|
<method name="get_blend_point_node" qualifiers="const">
|
||||||
|
@ -33,6 +38,7 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the [code]AnimationNode[/code] referenced by the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_position" qualifiers="const">
|
<method name="get_blend_point_position" qualifiers="const">
|
||||||
|
@ -41,6 +47,7 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the position of the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_blend_point">
|
<method name="remove_blend_point">
|
||||||
|
@ -49,6 +56,7 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Removes the point at index [code]point[/code] from the blend axis.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_blend_point_node">
|
<method name="set_blend_point_node">
|
||||||
|
@ -59,6 +67,7 @@
|
||||||
<argument index="1" name="node" type="AnimationRootNode">
|
<argument index="1" name="node" type="AnimationRootNode">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Changes the AnimationNode referenced by the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_blend_point_position">
|
<method name="set_blend_point_position">
|
||||||
|
@ -69,17 +78,22 @@
|
||||||
<argument index="1" name="pos" type="float">
|
<argument index="1" name="pos" type="float">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Updates the position of the point at index [code]point[/code] on the blend axis.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="max_space" type="float" setter="set_max_space" getter="get_max_space">
|
<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>
|
||||||
<member name="min_space" type="float" setter="set_min_space" getter="get_min_space">
|
<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>
|
||||||
<member name="snap" type="float" setter="set_snap" getter="get_snap">
|
<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>
|
||||||
<member name="value_label" type="String" setter="set_value_label" getter="get_value_label">
|
<member name="value_label" type="String" setter="set_value_label" getter="get_value_label">
|
||||||
|
Label of the virtual axis of the blend space.
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Blends linearly between three [AnimationNode] of any type placed in a 2d space.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_blend_point">
|
<method name="add_blend_point">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
@ -19,6 +21,7 @@
|
||||||
<argument index="2" name="at_index" type="int" default="-1">
|
<argument index="2" name="at_index" type="int" default="-1">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_triangle">
|
<method name="add_triangle">
|
||||||
|
@ -33,12 +36,14 @@
|
||||||
<argument index="3" name="at_index" type="int" default="-1">
|
<argument index="3" name="at_index" type="int" default="-1">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<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>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_count" qualifiers="const">
|
<method name="get_blend_point_count" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the number of points in the blend space.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_node" qualifiers="const">
|
<method name="get_blend_point_node" qualifiers="const">
|
||||||
|
@ -47,6 +52,7 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the [code]AnimationRootNode[/code] referenced by the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_blend_point_position" qualifiers="const">
|
<method name="get_blend_point_position" qualifiers="const">
|
||||||
|
@ -55,12 +61,14 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the position of the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_triangle_count" qualifiers="const">
|
<method name="get_triangle_count" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the number of triangles in the blend space.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_triangle_point">
|
<method name="get_triangle_point">
|
||||||
|
@ -71,6 +79,7 @@
|
||||||
<argument index="1" name="point" type="int">
|
<argument index="1" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the position of the point at index [code]point[/code] in the triangle of index [code]triangle[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_blend_point">
|
<method name="remove_blend_point">
|
||||||
|
@ -79,6 +88,7 @@
|
||||||
<argument index="0" name="point" type="int">
|
<argument index="0" name="point" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Removes the point at index [code]point[/code] from the blend space.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_triangle">
|
<method name="remove_triangle">
|
||||||
|
@ -87,6 +97,7 @@
|
||||||
<argument index="0" name="triangle" type="int">
|
<argument index="0" name="triangle" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Removes the triangle at index [code]triangle[/code] from the blend space.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_blend_point_node">
|
<method name="set_blend_point_node">
|
||||||
|
@ -97,6 +108,7 @@
|
||||||
<argument index="1" name="node" type="AnimationRootNode">
|
<argument index="1" name="node" type="AnimationRootNode">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Changes the AnimationNode referenced by the point at index [code]point[/code].
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_blend_point_position">
|
<method name="set_blend_point_position">
|
||||||
|
@ -107,37 +119,49 @@
|
||||||
<argument index="1" name="pos" type="Vector2">
|
<argument index="1" name="pos" type="Vector2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Updates the position of the point at index [code]point[/code] on the blend axis.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
<members>
|
<members>
|
||||||
<member name="auto_triangles" type="bool" setter="set_auto_triangles" getter="get_auto_triangles">
|
<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>
|
||||||
<member name="blend_mode" type="int" setter="set_blend_mode" getter="get_blend_mode" enum="AnimationNodeBlendSpace2D.BlendMode">
|
<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>
|
||||||
<member name="max_space" type="Vector2" setter="set_max_space" getter="get_max_space">
|
<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>
|
||||||
<member name="min_space" type="Vector2" setter="set_min_space" getter="get_min_space">
|
<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>
|
||||||
<member name="snap" type="Vector2" setter="set_snap" getter="get_snap">
|
<member name="snap" type="Vector2" setter="set_snap" getter="get_snap">
|
||||||
|
Position increment to snap to when moving a point.
|
||||||
</member>
|
</member>
|
||||||
<member name="x_label" type="String" setter="set_x_label" getter="get_x_label">
|
<member name="x_label" type="String" setter="set_x_label" getter="get_x_label">
|
||||||
|
Name of the blend space's X axis.
|
||||||
</member>
|
</member>
|
||||||
<member name="y_label" type="String" setter="set_y_label" getter="get_y_label">
|
<member name="y_label" type="String" setter="set_y_label" getter="get_y_label">
|
||||||
|
Name of the blend space's Y axis.
|
||||||
</member>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<signals>
|
<signals>
|
||||||
<signal name="triangles_updated">
|
<signal name="triangles_updated">
|
||||||
<description>
|
<description>
|
||||||
|
Emitted every time the blend space's triangles are created, removed, or when one of their vertices changes position.
|
||||||
</description>
|
</description>
|
||||||
</signal>
|
</signal>
|
||||||
</signals>
|
</signals>
|
||||||
<constants>
|
<constants>
|
||||||
<constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode">
|
<constant name="BLEND_MODE_INTERPOLATED" value="0" enum="BlendMode">
|
||||||
|
The interpolation between animations is linear.
|
||||||
</constant>
|
</constant>
|
||||||
<constant name="BLEND_MODE_DISCRETE" value="1" enum="BlendMode">
|
<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>
|
||||||
<constant name="BLEND_MODE_DISCRETE_CARRY" value="2" enum="BlendMode">
|
<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>
|
</constant>
|
||||||
</constants>
|
</constants>
|
||||||
</class>
|
</class>
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_node">
|
<method name="add_node">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_mix_mode" qualifiers="const">
|
<method name="get_mix_mode" qualifiers="const">
|
||||||
<return type="int" enum="AnimationNodeOneShot.MixMode">
|
<return type="int" enum="AnimationNodeOneShot.MixMode">
|
||||||
|
|
|
@ -1,13 +1,11 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<description>
|
<description>
|
||||||
</description>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
</methods>
|
</methods>
|
||||||
<constants>
|
<constants>
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
State machine for control of animations.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="add_node">
|
<method name="add_node">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
|
@ -19,6 +23,7 @@
|
||||||
<argument index="2" name="position" type="Vector2" default="Vector2( 0, 0 )">
|
<argument index="2" name="position" type="Vector2" default="Vector2( 0, 0 )">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Adds a new node to the graph. The [code]position[/code] is used for display in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="add_transition">
|
<method name="add_transition">
|
||||||
|
@ -31,18 +36,21 @@
|
||||||
<argument index="2" name="transition" type="AnimationNodeStateMachineTransition">
|
<argument index="2" name="transition" type="AnimationNodeStateMachineTransition">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Adds a transition between the given nodes.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_end_node" qualifiers="const">
|
<method name="get_end_node" qualifiers="const">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the graph's end node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_graph_offset" qualifiers="const">
|
<method name="get_graph_offset" qualifiers="const">
|
||||||
<return type="Vector2">
|
<return type="Vector2">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the draw offset of the graph. Used for display in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_node" qualifiers="const">
|
<method name="get_node" qualifiers="const">
|
||||||
|
@ -51,6 +59,7 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the animation node with the given name.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_node_name" qualifiers="const">
|
<method name="get_node_name" qualifiers="const">
|
||||||
|
@ -59,6 +68,7 @@
|
||||||
<argument index="0" name="node" type="AnimationNode">
|
<argument index="0" name="node" type="AnimationNode">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the given animation node's name.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_node_position" qualifiers="const">
|
<method name="get_node_position" qualifiers="const">
|
||||||
|
@ -67,12 +77,14 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the given node's coordinates. Used for display in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_start_node" qualifiers="const">
|
<method name="get_start_node" qualifiers="const">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the graph's end node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_transition" qualifiers="const">
|
<method name="get_transition" qualifiers="const">
|
||||||
|
@ -81,12 +93,14 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the given transition.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_transition_count" qualifiers="const">
|
<method name="get_transition_count" qualifiers="const">
|
||||||
<return type="int">
|
<return type="int">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the number of connections in the graph.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_transition_from" qualifiers="const">
|
<method name="get_transition_from" qualifiers="const">
|
||||||
|
@ -95,6 +109,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the given transition's start node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_transition_to" qualifiers="const">
|
<method name="get_transition_to" qualifiers="const">
|
||||||
|
@ -103,6 +118,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the given transition's end node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="has_node" qualifiers="const">
|
<method name="has_node" qualifiers="const">
|
||||||
|
@ -111,6 +127,7 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns [code]true[/code] if the graph contains the given node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="has_transition" qualifiers="const">
|
<method name="has_transition" qualifiers="const">
|
||||||
|
@ -121,6 +138,7 @@
|
||||||
<argument index="1" name="to" type="String">
|
<argument index="1" name="to" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Returns [code]true[/code] if there is a transition between the given nodes.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_node">
|
<method name="remove_node">
|
||||||
|
@ -129,6 +147,7 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Deletes the given node from the graph.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_transition">
|
<method name="remove_transition">
|
||||||
|
@ -139,6 +158,7 @@
|
||||||
<argument index="1" name="to" type="String">
|
<argument index="1" name="to" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Deletes the given transition.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="remove_transition_by_index">
|
<method name="remove_transition_by_index">
|
||||||
|
@ -147,6 +167,7 @@
|
||||||
<argument index="0" name="idx" type="int">
|
<argument index="0" name="idx" type="int">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Deletes the given transition.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="rename_node">
|
<method name="rename_node">
|
||||||
|
@ -157,6 +178,7 @@
|
||||||
<argument index="1" name="new_name" type="String">
|
<argument index="1" name="new_name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Renames the given node.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_end_node">
|
<method name="set_end_node">
|
||||||
|
@ -165,14 +187,16 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Sets the given node as the graph end point.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_graph_offset">
|
<method name="set_graph_offset">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<argument index="0" name="name" type="Vector2">
|
<argument index="0" name="offset" type="Vector2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Sets the draw offset of the graph. Used for display in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_node_position">
|
<method name="set_node_position">
|
||||||
|
@ -183,6 +207,7 @@
|
||||||
<argument index="1" name="position" type="Vector2">
|
<argument index="1" name="position" type="Vector2">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Sets the node's coordinates. Used for display in the editor.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="set_start_node">
|
<method name="set_start_node">
|
||||||
|
@ -191,6 +216,7 @@
|
||||||
<argument index="0" name="name" type="String">
|
<argument index="0" name="name" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Sets the given node as the graph start point.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
|
|
|
@ -1,18 +1,23 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?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>
|
<brief_description>
|
||||||
|
Playback control for AnimationNodeStateMachine.
|
||||||
</brief_description>
|
</brief_description>
|
||||||
<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>
|
</description>
|
||||||
<tutorials>
|
<tutorials>
|
||||||
</tutorials>
|
</tutorials>
|
||||||
<demos>
|
|
||||||
</demos>
|
|
||||||
<methods>
|
<methods>
|
||||||
<method name="get_current_node" qualifiers="const">
|
<method name="get_current_node" qualifiers="const">
|
||||||
<return type="String">
|
<return type="String">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns the currently playing animation state.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_travel_path" qualifiers="const">
|
<method name="get_travel_path" qualifiers="const">
|
||||||
|
@ -25,6 +30,7 @@
|
||||||
<return type="bool">
|
<return type="bool">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Returns [code]true[/code] if an animation is playing.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="start">
|
<method name="start">
|
||||||
|
@ -33,12 +39,14 @@
|
||||||
<argument index="0" name="node" type="String">
|
<argument index="0" name="node" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Starts playing the given animation.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="stop">
|
<method name="stop">
|
||||||
<return type="void">
|
<return type="void">
|
||||||
</return>
|
</return>
|
||||||
<description>
|
<description>
|
||||||
|
Stops the currently playing animation.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="travel">
|
<method name="travel">
|
||||||
|
@ -47,6 +55,7 @@
|
||||||
<argument index="0" name="to_node" type="String">
|
<argument index="0" name="to_node" type="String">
|
||||||
</argument>
|
</argument>
|
||||||
<description>
|
<description>
|
||||||
|
Transitions from the current state to another one, following the shortest path.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
</methods>
|
</methods>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue