Compare commits
674 Commits
Author | SHA1 | Date |
---|---|---|
Rémi Verschelde | 6c99b77a81 | |
Rémi Verschelde | a0bf366068 | |
Gilles Roudière | 3196113206 | |
Rémi Verschelde | 3d94d7436a | |
A Thousand Ships | 1d979a9e95 | |
Pedro J. Estébanez | 7d966c9f5e | |
AlexOtsuka | cd118f80c6 | |
MrBBBaiXue | 60867e63be | |
bruvzg | 7b55630c90 | |
Rémi Verschelde | 1088dd5c33 | |
Rémi Verschelde | dc0e9a7779 | |
A Thousand Ships | 6a7e8fe367 | |
Rémi Verschelde | 455aa77d6e | |
sk757a | 59bd0ea48e | |
Yuri Sizov | fc0b241c9b | |
Yuri Sizov | e6a21778de | |
Rémi Verschelde | 1fe01a7741 | |
Yuri Sizov | a0a5cbad57 | |
Yuri Sizov | cfedb0a7a6 | |
Yuri Sizov | c945ec71d3 | |
Fabio Alessandrelli | 2120fcee1c | |
Fabio Alessandrelli | 96a480feac | |
NiskashY | 07ec20b8fa | |
Amir-Rasteg | 82ea4b4718 | |
Haoyu Qiu | b3c74b4874 | |
Ninni Pipping | de57ac9227 | |
Haoyu Qiu | e862643007 | |
kobewi | 7a59ef60ee | |
jpcerrone | dd2907f9b7 | |
MewPurPur | 52f583fdee | |
Phil Hudson | 23c1eae8b6 | |
kobewi | 627ddd412e | |
Haoyu Qiu | 22d3fa7292 | |
Yuri Sizov | f9a0ac507c | |
kobewi | 5a82eadd2d | |
RedworkDE | 31e582b970 | |
kobewi | 39f9c8cd29 | |
pattlebass | fa8e3b200e | |
Devan OBoyle | 0f23679699 | |
Raffaele Picca | 7f8de2df4c | |
Ninni Pipping | 131ce4acf6 | |
Ninni Pipping | c683fa9971 | |
bruvzg | 33618f25fd | |
kobewi | 9acd4cfdfc | |
Lyuma | ca65d85d6e | |
Lyuma | 96eb16a365 | |
Lyuma | a18fe83298 | |
Aaron Franke | 1fcf58d72e | |
Fredia Huya-Kouadio | db7406e6a7 | |
Clement C | 2dfb108a6a | |
Rémi Verschelde | 31b1f98bba | |
Rémi Verschelde | 4a747edb6f | |
Rémi Verschelde | c8e0bd50c5 | |
Yuri Sizov | 0164b293f0 | |
RedworkDE | a3292d6891 | |
Rémi Verschelde | b11499edce | |
kobewi | d6e0170e94 | |
MJacred | d8caf0a726 | |
MJacred | 101adc3853 | |
MJacred | 78773b74f0 | |
Jason Yundt | 07c4a32a84 | |
RedworkDE | f05e3712d6 | |
Rakka Rage | 980d95a3ad | |
ajreckof | a3951382cd | |
hlutor | 8129d83ee9 | |
Felipe Augusto Marques | e7f7fcd145 | |
Ninni Pipping | cbdad97829 | |
Fredia Huya-Kouadio | bbfd9914c7 | |
Fredia Huya-Kouadio | d4dc9e4bda | |
Haoyu Qiu | 740d387a09 | |
VolTer | 5fbf1c230f | |
bruvzg | bfd15886de | |
Haoyu Qiu | b63db1e6fc | |
detomon | bf8f9e28c8 | |
Artyom Lunchenkov | 0649c05756 | |
Arman Elgudzhyan | 05eeb8783c | |
Arman Elgudzhyan | 88475cfba9 | |
Ninni Pipping | fcafb674af | |
kobewi | 13a030de06 | |
kobewi | e4986ad4aa | |
Fredia Huya-Kouadio | d86aa32f8c | |
Riteo | 531b22339a | |
Fredia Huya-Kouadio | f7ee97d6d7 | |
kleonc | 9cae00fae8 | |
kleonc | bfc679b862 | |
Rakka Rage | bcb6154a3b | |
sakrel | b7d741977c | |
Hugo Locurcio | d56e19b012 | |
RedworkDE | 5366970863 | |
Bastiaan Olij | c41ad0f74c | |
Bastiaan Olij | 7ac0f406aa | |
Fredia Huya-Kouadio | 2900425eeb | |
kobewi | 73650d0fea | |
Hiroki Taira | f2738cbd41 | |
Pedro J. Estébanez | 2d49b669bb | |
ajreckof | 431bcf4880 | |
Jackson Thomas Browne | 3a4551450c | |
Rindbee | 5ef5ff00a4 | |
ocean (they/them) | e75e104e2d | |
bruvzg | 0b8fee56e2 | |
Danil Alexeev | 4edc22ee6e | |
Lyuma | f745ef03a3 | |
Alex Drozd | 52c8c8c174 | |
kobewi | 14f1141abe | |
Rémi Verschelde | 34b4cce2ff | |
RedworkDE | 03ce3f5027 | |
Rémi Verschelde | 98a47218a4 | |
Rémi Verschelde | 5fdd5fa19d | |
Rémi Verschelde | bce04919f4 | |
Rémi Verschelde | 4eefe8a40e | |
Ninni Pipping | e22a71aa3c | |
Adam Scott | 09dc11bff5 | |
Isard Botha | 314c729d2c | |
Lyuma | 9307d851a9 | |
David Turner | 4cf3aff7cc | |
Hakim | 3f98539361 | |
Hakim | b650ba820b | |
Haoyu Qiu | c58bc21dba | |
Paul Joannon | 506734cae1 | |
dearthdev | 67698b155f | |
Evan Todd | 156862bddb | |
jpcerrone | dcf6f2b29f | |
Rindbee | ce116e4708 | |
jpcerrone | 566ad9813e | |
Danil Alexeev | 2054141848 | |
kleonc | a26dd53faf | |
RedworkDE | 4cabfc1756 | |
kleonc | 3af3e88d81 | |
Yuri Rubinsky | 2bcad4c55b | |
FranckRJ | ac1885925c | |
tefusion | acd975a45a | |
RedworkDE | 72d561c89f | |
Danil Alexeev | d00eb58381 | |
Hugo Locurcio | e46b14fd30 | |
Hugo Locurcio | 30f079ecb5 | |
DeeJayLSP | d6d232a881 | |
Rémi Verschelde | 142e648000 | |
Rémi Verschelde | e027c44fe6 | |
Rémi Verschelde | 84b9202d87 | |
Rémi Verschelde | d5d02b9a85 | |
Rémi Verschelde | b686a30a2c | |
Rémi Verschelde | 5f60f4cdbf | |
bitsawer | b845bf8adc | |
Rémi Verschelde | 3e2c9077dc | |
Lyuma | e9ee7bdc9b | |
Hugo Locurcio | 3d61653e45 | |
Michael Alexsander | 227de95dbb | |
Eranot | bb7e88e52a | |
Ninni Pipping | 2337d825c1 | |
Peter Anderson | 23dc7047ad | |
unknown | a07cfcc09e | |
Hugo Locurcio | d7e50811bc | |
Hugo Locurcio | 53cb88554a | |
Raul Santos | c99f67105f | |
Violet Johnson | 4c34531499 | |
rainlizard | 8df97cf368 | |
Max Hilbrunner | 1a1095f986 | |
TechnicalSoup | 62d7797cbf | |
Ninni Pipping | 0e697e102b | |
mara | a44409bf54 | |
Hugo Locurcio | 484a39c34d | |
PoolloverNathan | e72e24b3cc | |
archsolar | 3c2e30b319 | |
Devin | 412d947dc3 | |
VolTer | b118d89eed | |
VolTer | 2792b520a7 | |
Rindbee | fd08e35cd3 | |
Ninni Pipping | 465f363c77 | |
Haoyu Qiu | 605b6e568f | |
Silc Lizard (Tokage) Renew | c5c27e64ea | |
VolTer | a4e8ba9b5d | |
Yuri Sizov | 0934545d23 | |
Dipal Zambare | 3aea815a05 | |
Ninni Pipping | 41b10f1222 | |
skyace65 | a7ba5e9939 | |
FranckRJ | d6e73cabad | |
jess3jane | 3fbf460a9f | |
Ninni Pipping | dce1b9ce14 | |
Rémi Verschelde | 4ba4ed6528 | |
RedworkDE | 6a4bf0a9ad | |
Rémi Verschelde | 11df2a8f22 | |
Rémi Verschelde | 290db4a0b6 | |
Rémi Verschelde | da3f725206 | |
Yuri Sizov | fd5dc25240 | |
RedworkDE | ebc3ac0934 | |
Rémi Verschelde | 70fa4d26d7 | |
Danil Alexeev | 74ac827ac7 | |
Max Hilbrunner | 75e5bf789d | |
Rémi Verschelde | d0c0d44cb5 | |
Rémi Verschelde | 97631f8aa9 | |
Rémi Verschelde | 5222a99f5d | |
Rémi Verschelde | acc82a1d05 | |
Rémi Verschelde | 138882742a | |
Yuri Sizov | 5fe254e8f6 | |
Yuri Sizov | eced93a3f5 | |
Ninni Pipping | 589306a9d8 | |
Fabio Alessandrelli | 238b8357a3 | |
kobewi | 7d5d5b7bd1 | |
voidshine | 9a88b47cb1 | |
Max Hilbrunner | 7f0d8bcade | |
Alex Drozd | 3e8f0b4b75 | |
kleonc | 945d669da0 | |
Ninni Pipping | 1f7a5f6144 | |
VolTer | c37259b181 | |
Samuele Panzeri | 912b3afb96 | |
Yuri Sizov | fd8f38c240 | |
Yuri Sizov | 60e8a06d4e | |
Rémi Verschelde | 2a5d5ef1f9 | |
smix8 | 5296b91592 | |
Rémi Verschelde | 2ac4e3bb30 | |
Rémi Verschelde | fa8b32cbd4 | |
Rémi Verschelde | 9cd9a07c27 | |
Rémi Verschelde | 576ca44762 | |
kobewi | ab2c3712e2 | |
Martin Boué | fe126359f0 | |
Nong Van Tinh | aa23e6fc5e | |
Rémi Verschelde | 4d7336e70f | |
Rémi Verschelde | 9deaac5c60 | |
Rémi Verschelde | 47b3f95874 | |
Ninni Pipping | f93a4287cf | |
Alex Drozd | 09c5a8fe49 | |
Hugo Locurcio | 7d0af7d10f | |
Manik Sharma | f6ed43b7d3 | |
Rémi Verschelde | 52c314501c | |
Rémi Verschelde | 30b1c7fc1f | |
Rémi Verschelde | a227de0898 | |
Rémi Verschelde | dfba9ad739 | |
Aaron Franke | 161f389f93 | |
Martin Capitanio | 9e11b78d1c | |
Bram Stolk | ce0c61b6e3 | |
lawnjelly | efbb28d09a | |
Rindbee | b91b8fce43 | |
kobewi | 1146172b30 | |
David Snopek | 2a8501e1a2 | |
Samuele Panzeri | 07128ccb9d | |
Patrick | 9d9b7511a0 | |
ChibiDenDen | bb785cfcc0 | |
Samuele Panzeri | cf0bd389cc | |
Alex Drozd | a37f79124f | |
Manik Sharma | 31a37495f3 | |
smix8 | 3be6a1b38e | |
ajreckof | a42f427465 | |
stmSi | 25ab61f82a | |
Александр Черник | b2364048d2 | |
Hugo Locurcio | 35fa05fa51 | |
Lyuma | dcca6485d0 | |
Hugo Locurcio | 2d7228251d | |
Ninni Pipping | 9a5af8e793 | |
Christopher Foo | 28012c40fb | |
Omar Shehata | bab96e71d2 | |
Fredia Huya-Kouadio | 07af84689f | |
Pedro J. Estébanez | d07d4d90d0 | |
kleonc | 4b11fc65f1 | |
Michael Alexsander | b7206e25bf | |
Ninni Pipping | 5d93de88a8 | |
Pedro J. Estébanez | 813fc0940d | |
kobewi | 64b15c8ec1 | |
Bastiaan Olij | 3a90fa677b | |
jmb462 | f3b608d331 | |
Jean-Michel Bernard | 53df7c18e0 | |
Aaron Franke | f49c69a1e7 | |
VolTer | 78c190f4f5 | |
VolTer | e530168fb8 | |
UltraBIF | 4b63ce83d2 | |
David Turner | 0566ac68de | |
mashumafi | 0cb1fd3a61 | |
kobewi | d56c4f960c | |
kobewi | 19b998396c | |
Bastiaan Olij | a5cb7a5eb5 | |
kobewi | 0277f57b6f | |
Pedro J. Estébanez | 907b10fb96 | |
clayjohn | 2435c9426d | |
Tetane | e68e2fad25 | |
HolonProduction | a07ad181ab | |
VolTer | 70f7fcd208 | |
Tefatika | b532dd7626 | |
Tefatika | e58001bd0d | |
clayjohn | 9d257f10c0 | |
Lyuma | 2a0597d0cb | |
bruvzg | ebaf3cc9ab | |
Justin Wash | 268b60ddd6 | |
K. S. Ernest (iFire) Lee | 0c312c7a08 | |
kobewi | c8d64e8580 | |
kobewi | fdf66b3472 | |
Rémi Verschelde | 2d74ee0e5b | |
George Marques | 21bb5b9c0e | |
George Marques | aff0340486 | |
Pedro J. Estébanez | 908325c29e | |
Pedro J. Estébanez | a5779ff281 | |
kobewi | 37c89f78ac | |
bitsawer | a0a95c7bc7 | |
George Marques | ee9a268fd7 | |
Devin | 1b74572377 | |
Rémi Verschelde | ba004ea1c3 | |
Yuri Sizov | e7f4af0913 | |
VolTer | 7f09c3d2fc | |
Yuri Sizov | 56110a354c | |
Winston | b9e75e50dc | |
Ninni Pipping | 08ec4a82bd | |
Fredia Huya-Kouadio | d327bb7a45 | |
Eoin O'Neill | 5120afc236 | |
Rindbee | 4b4556179e | |
Roman Vasilyev | b711b45870 | |
VolTer | 7b59361637 | |
sodaJar | 0132c29953 | |
Haoyu Qiu | 389045c691 | |
Pedro J. Estébanez | 4c8946c080 | |
Yuri Sizov | 289d551fbb | |
Rindbee | 112677c39e | |
VolTer | 75a33fd647 | |
Adam Scott | e03ee06d74 | |
Samuele Panzeri | 12969aadbd | |
Haoyu Qiu | 7f1b1e1c1b | |
Haoyu Qiu | 9336866de0 | |
Fredia Huya-Kouadio | 01014a7475 | |
Fredia Huya-Kouadio | bceb910f3a | |
Fredia Huya-Kouadio | eae3d61d7f | |
kobewi | 82aab2b0ea | |
clayjohn | c8ed59ba41 | |
Hugo Locurcio | f5721ca61a | |
Paweł | c4655010d0 | |
MistMage | 4d38529284 | |
Rémi Verschelde | c893968b33 | |
Rémi Verschelde | 82a17d028d | |
Rémi Verschelde | f241b17804 | |
kleonc | fcdd7eda26 | |
Rémi Verschelde | 878367b3ac | |
Samuele Panzeri | a27dd86755 | |
bruvzg | 46e7f334fb | |
kobewi | cce2ffda1b | |
smix8 | f1505fe98b | |
bruvzg | 10547deb3d | |
bruvzg | 357e2ec05d | |
HolonProduction | 769daf79e2 | |
Hugo Locurcio | 39c0392a64 | |
kleonc | 6ac70ff5da | |
Rémi Verschelde | d78691d44f | |
Yuri Sizov | b5bd99d9e6 | |
Adam Scott | e6478f5be3 | |
Haoyu Qiu | 2eb29d0684 | |
Paweł | 32dc3b66ab | |
David Giardi | 75f3ce618e | |
kobewi | f39f354313 | |
Michael Alexsander | af0dd6591b | |
Ninni Pipping | 13f368067f | |
VolTer | 10d8a67267 | |
Hugo Locurcio | 83c3963235 | |
kleonc | 13cfbe6a25 | |
angel-721 | d936cc8b9e | |
Yuri Sizov | 4a140b61f1 | |
Evgeniy Vasilyev | d46cb8e65c | |
Haoyu Qiu | c6297f46fe | |
Rattle22 | 12da78cf30 | |
Tae Hong Ahn | a27b427b1f | |
bruvzg | 9c1ea28092 | |
bruvzg | 3a1af9393f | |
clayjohn | 2c773e12b8 | |
Danil Alexeev | d31002cfbe | |
Pedro J. Estébanez | 3a5bc7455e | |
Ninni Pipping | 3fcaffc96b | |
kleonc | ebcc7b4b98 | |
Hakim | 756d809ef1 | |
Paweł | ad5d7c2030 | |
João Pedro Braz | 1a85f6398f | |
clayjohn | ad582cf0b1 | |
Erik Johnson | 410b503aac | |
Ninni Pipping | 3445fa7dbc | |
Ninni Pipping | ccc761dd93 | |
Martin Capitanio | 2992a99629 | |
Jason Knight | f3907e2fe0 | |
clayjohn | 27df8b93aa | |
clayjohn | 95f5027453 | |
bruvzg | e071fb2263 | |
clayjohn | d4c9ca3975 | |
Haoyu Qiu | df80e2ae43 | |
cody | c1ec270b44 | |
clayjohn | aeca8f07fa | |
Hugo Locurcio | 8a349e4fa9 | |
smix8 | 25518aad27 | |
Hugo Locurcio | 9253f415b3 | |
Riteo Siuga | 214ad50498 | |
Mallardbro | e801fe83d1 | |
Johan Mattsson | 5bcff18c76 | |
Rémi Verschelde | effefe9feb | |
Koyper | 7e482f420d | |
Ricardo Subtil | b5ff677381 | |
Haoyu Qiu | e7f7de0044 | |
mara | a6e15e2f15 | |
kobewi | 51fdbf6ac7 | |
Ninni Pipping | 9902d07966 | |
Dimitri A | ce7fd66896 | |
Yuri Sizov | df5df11916 | |
kobewi | 8c372f4109 | |
Haoyu Qiu | d0c50d820b | |
Ricardo Buring | deb22e2381 | |
Juan Linietsky | 4616de0c5d | |
fuzzy@notepc | 08b825396f | |
Pedro J. Estébanez | a37eb88c5b | |
Rémi Verschelde | 90b4ca2e50 | |
Rémi Verschelde | 16a6bdd423 | |
kobewi | 177be9bd37 | |
Yuri Sizov | 967ad04928 | |
mightygoat | 66633d19a1 | |
smix8 | 675547845e | |
Ziya Erkoc | 210879d284 | |
Hugo Locurcio | 66a8ddf61c | |
smix8 | c62f8f9319 | |
bruvzg | ba5335f3fb | |
Malcolm Nixon | 7c62d1106e | |
bruvzg | 05fa6e314a | |
Martin Capitanio | 233bd4abaa | |
umarcor | a99b046412 | |
Rémi Verschelde | 2805f7b36d | |
Fredia Huya-Kouadio | 589c32ec55 | |
HK-SHAO | 9598eb9638 | |
Lyuma | ba9f2981f1 | |
Bartłomiej T. Listwon | 1f51ceddf3 | |
yedpodtrzitko | eab0386934 | |
Johan Aires Rastén | 585f4ed737 | |
Yuri Sizov | cacc6c5ed5 | |
Marius Hanl | 817da41d55 | |
Andrés Botero | 02d0f090c0 | |
Rindbee | 2b0acb61be | |
kobewi | 88d446f6c6 | |
kobewi | 87a9d2c87e | |
kobewi | 03827485d7 | |
clayjohn | 99beeb3992 | |
smix8 | cc6ce6977d | |
Hendrik Brucker | e656a53ed0 | |
James Buck | 861399fbe5 | |
Jean-Michel Bernard | 1aa5fce321 | |
kleonc | 7ef4e519f7 | |
Ron B. Yeh | bcf991d3ec | |
ajreckof | 62dbd512cc | |
RedworkDE | 4cc8a689ba | |
kobewi | f8517e1c4b | |
bruvzg | 2c80ded6ce | |
kleonc | a5572ba5a3 | |
RedMser | f645bbaffb | |
Hakim | b17f0f593e | |
Rémi Verschelde | 4762303f18 | |
Rémi Verschelde | 7a0977ce2c | |
Rémi Verschelde | 9099ac39cf | |
Rémi Verschelde | bd016c8c4d | |
Yuri Sizov | 0a8fdde924 | |
Araraura | d0e906327d | |
kobewi | ed1eb1e18f | |
kobewi | 1c66b24325 | |
kleonc | 103d23539f | |
bruvzg | 0c24ee363f | |
skyace65 | c114a7bab4 | |
smix8 | 1deda0f003 | |
kobewi | 87929d9ab0 | |
Brennen Shaughnessy | 040b432a12 | |
Paragoumba | b912905d23 | |
smix8 | e243dfa9f6 | |
bruvzg | 50f26811b0 | |
Rémi Verschelde | c9ee508089 | |
Rémi Verschelde | b8b29c8566 | |
Chris Hutchinson | 4323c8b78b | |
Ninni Pipping | 1e94881484 | |
Haoyu Qiu | d6b36e800d | |
Haoyu Qiu | ae0a98ef9b | |
Redwarx008 | 493e39860d | |
Rémi Verschelde | fe71d33033 | |
Mai Lavelle | 9f20659c62 | |
Sabrehull | 1056996200 | |
kobewi | 74a35c9ca2 | |
Bastiaan Olij | b39cbe71b4 | |
Danil Alexeev | 07beae98f0 | |
kleonc | 47c4044d03 | |
Brian Long | 838a82f885 | |
Fredia Huya-Kouadio | dc100cbebb | |
lewiji | 5f9990e25d | |
Fredia Huya-Kouadio | ff15e2384a | |
fabriceci | bafc6372b2 | |
Yuri Sizov | 19501f8eb1 | |
VolTer | 843f5adbc5 | |
Hugo Locurcio | 6fedc728f6 | |
Haoyu Qiu | 4750b77d2d | |
Haoyu Qiu | 2ea8dd7232 | |
Haoyu Qiu | 5e9e95c34c | |
Haoyu Qiu | 50ea0951fe | |
Ninni Pipping | 7de181f524 | |
Unai Martinez-Corral | a08bee8d10 | |
kobewi | 65c52087c2 | |
Hugo Locurcio | b85cead4b9 | |
Ninni Pipping | 38595b8470 | |
RedworkDE | adc7edd907 | |
Ricardo Buring | 9573574788 | |
Ricardo Buring | 58d8368481 | |
Ninni Pipping | 2a52307936 | |
Ninni Pipping | 9a4a0d042c | |
nikitalita | 7a827f979e | |
kleonc | b3f121d108 | |
Ninni Pipping | fa9f92112c | |
ator-dev | 9a3b52dc2d | |
Rindbee | ce4ab71957 | |
bruvzg | 989d556f8e | |
Fredia Huya-Kouadio | 9ac978190e | |
kobewi | 94e90b0593 | |
Hugo Locurcio | 9559bbcb18 | |
Mikael Hermansson | 30a9b5fe9b | |
Mikael Hermansson | 465be40e10 | |
Dipal Zambare | 47c3f44c0a | |
kleonc | 8575010e88 | |
Patrick | 9278da6f9b | |
Ninni Pipping | b43f847808 | |
smix8 | ac1b26c7c5 | |
Bastiaan Olij | f089782411 | |
smix8 | dd94380b11 | |
smix8 | 22b5f0f608 | |
Fahad Shihab | e99b184b6c | |
Ninni Pipping | 7fe9c48e2b | |
Zac Luzader | fcedf5dfdf | |
RedworkDE | c0c5bdc510 | |
Rémi Verschelde | 516323f4ab | |
Omar Polo | 597b83aedf | |
Ninni Pipping | 4da5fc9203 | |
Yuri Sizov | 636d7905b0 | |
Nong Van Tinh | e1de9f9fc4 | |
Ron B. Yeh | b54ff430aa | |
Marius Hanl | 6e85d4efea | |
Hakim | 60ceecb1ab | |
bruvzg | de08766656 | |
kobewi | d91a3985ae | |
Ricardo Buring | 68e6234595 | |
stmSi | 0dab32f317 | |
necrashter | 865a0b4507 | |
bitsawer | 6782cd7291 | |
RedworkDE | bb5a6e29ab | |
Raul Santos | c4618bcc1b | |
Yuri Rubinsky | a397474bd0 | |
VolTer | 2e37c05fe6 | |
Pedro J. Estébanez | 46d475b067 | |
Bastiaan Olij | a94a2062af | |
bruvzg | 7a3f8a83da | |
bruvzg | 559d09c140 | |
LandoUWB | ff125a638a | |
RandomCatDude | 149f16b2fa | |
Michael Alexsander | bf8ab62ca3 | |
myaaaaaaaaa | 6ed9e03449 | |
bruvzg | db3fadc560 | |
bruvzg | 24c4b5e8ad | |
Markus Sauermann | 3cae980c17 | |
LandoUWB | 34a087cc2c | |
Eric M | 74b5a0ca4f | |
Paweł | ca0ba83f03 | |
clayjohn | 5262fe21de | |
Ricardo Buring | d8f0c2bdca | |
Rémi Verschelde | cacf49999e | |
Rémi Verschelde | c5aa3bd7d7 | |
Yuri Sizov | ac8f97048e | |
Rémi Verschelde | 6970257cff | |
lawnjelly | c0e5879b41 | |
smix8 | 8e8ecf52cf | |
smix8 | bea2da94da | |
Haoyu Qiu | c6a704af2c | |
Haoyu Qiu | ef06e5d786 | |
clayjohn | ec5f503289 | |
Hugo Locurcio | ab12edb6c6 | |
kobewi | 5faebb712e | |
Brett Chalupa | 1507bea80c | |
David Snopek | 1c7bd972e4 | |
Marius Hanl | 3bb89a0911 | |
Danil Alexeev | 5acc7a77fe | |
bruvzg | 577afedc40 | |
Rémi Verschelde | d23922ffeb | |
Yuri Sizov | fc7adaab7b | |
the-sink | 38c0ad7c6c | |
pcamp | 0cf5de8f19 | |
Marius Hanl | 3176016528 | |
Yuri Sizov | c59c68cdec | |
clayjohn | 5f6a534569 | |
justchen1369 | 59a78ecf5a | |
Dmitrii Maganov | 23f2c1234c | |
yedpodtrzitko | 5824967f2f | |
Mikael Hermansson | 7ac80569b3 | |
Haoyu Qiu | 38ad9c52b2 | |
Rémi Verschelde | 9e5e6568b7 | |
Hayden Leete | 26ab941507 | |
Hugo Locurcio | 10424abb29 | |
Chris Weber | 006410ae46 | |
Hugo Locurcio | e79477a4b5 | |
bruvzg | 0c1abbd79e | |
VolTer | 5ae484c138 | |
RedworkDE | f9bb1d3174 | |
Haoyu Qiu | b4a1bfd6d5 | |
Johan Aires Rastén | 4ff705b37e | |
Ryan Roden-Corrent | 47dc4bc307 | |
clayjohn | 08845dc3f0 | |
SlugFiller | d508d0a642 | |
SlugFiller | 18bf2663f9 | |
Johan Aires Rastén | d229ca2f27 | |
Ryan Roden-Corrent | 89a40d317d | |
Rindbee | 323c3f80c5 | |
Jakub Mateusz Marcowski | 5a7624e50f | |
Rémi Verschelde | 7e74568709 | |
clayjohn | 278fc7538d | |
Yuri Sizov | 258ea41ffa | |
Yuri Sizov | 84e9a79ace | |
clayjohn | a41a813af4 | |
juliuse98 | e3e117cac5 | |
bruvzg | 494449f212 | |
smix8 | 069c48bfdc | |
Ninni Pipping | 75e078d885 | |
Thomas Lobig | a755ac856a | |
bruvzg | 34c909b41e | |
Rémi Verschelde | b1c8a40853 | |
Hakim | 90dbf3bd38 | |
bruvzg | 4cce358241 | |
bruvzg | ef3f1d426d | |
clayjohn | bc6743c96d | |
Haoyu Qiu | 050ec70ea4 | |
RedworkDE | 20eeb7c66d | |
Raul Santos | ad6fa1cd25 | |
Dmitrii Maganov | 079c8ea719 | |
Aleks Rutins | 782e1fe84e | |
Fabio Iotti | 01324f025a | |
Rémi Verschelde | c6f7675b1f | |
Bastiaan Olij | c8f64c68a5 | |
kobewi | 4e90cc55ec | |
clayjohn | 925381201b | |
bruvzg | 48a639f4a5 | |
bruvzg | 57dc060879 | |
Arman Elgudzhyan | 7e6bc72f7c | |
clayjohn | 13b37a50ae | |
Ryan Roden-Corrent | 81f4996683 | |
Ryan Roden-Corrent | 06e2c6ace2 | |
Marius Hanl | 9fff0fcbb5 | |
Ninni Pipping | f6709a1fda | |
Marcus Elg | 6041ad5c70 | |
Ryan Roden-Corrent | 6cd227a35c | |
Ryan Roden-Corrent | 1421838ba7 | |
Yuri Sizov | 30e81fcc26 | |
Ninni Pipping | 857cd853de | |
Raul Santos | 1640b1a150 | |
Haoyu Qiu | 093d237138 | |
bruvzg | 764fe8ac51 | |
SaracenOne | d929784491 | |
Niels Drost | 94db7f866b | |
Danil Alexeev | f4ea9df0f4 | |
Isaac Clerencia | acdb1bdbd7 | |
Aaron Franke | 9e6f0ee9c7 | |
BrunoSXS | 3aa3fb8771 | |
kobewi | 9997250051 | |
themancalledjakob | e043484d36 | |
Andreas Raddau | a026669cc5 | |
kobewi | 4bd16e6493 | |
JustKoi | ed139593bf | |
George Marques | b880bde10f | |
Haoyu Qiu | 80cde341d4 | |
titus125 | 8732a8af47 | |
Ninni Pipping | 8dca093d97 | |
Malcolm Nixon | 5180116c07 | |
RedworkDE | 0112862e70 | |
Yuri Sizov | 234c601a61 | |
Yuri Sizov | 3c2e952889 | |
bruvzg | d83245f2f9 | |
Yuri Sizov | 048c252602 | |
Hayden Leete | 7490f89238 | |
Paweł Fertyk | 41f4068a6e | |
Yuri Sizov | 755a86f502 | |
Haoyu Qiu | 2d0d07f51b | |
clayjohn | 5662542526 | |
bruvzg | 1d21652f80 | |
Nicholas Huelin | f55c61d601 | |
bruvzg | 466d226a4a | |
Abdulrahman Al Zeidi | e290448fe3 | |
Yuri Sizov | eb503fb461 | |
Yuri Sizov | 671f8eb790 | |
Haoyu Qiu | 17a130cbd1 | |
Rémi Verschelde | 47114a77f8 | |
Rémi Verschelde | 284a1b6a6e |
|
@ -5,18 +5,19 @@ body:
|
|||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
- Read our [CONTRIBUTING.md guide](https://github.com/godotengine/godot/blob/master/CONTRIBUTING.md#reporting-bugs) on reporting bugs.
|
||||
- When reporting bugs, you'll make our life simpler (and the fix will come sooner) if you follow the guidelines in this template.
|
||||
- Write a descriptive issue title above.
|
||||
- Search [open](https://github.com/godotengine/godot/issues) and [closed](https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported.
|
||||
- The golden rule is to **always open *one* issue for *one* bug**. If you notice several bugs and want to report them, make sure to create one new issue for each of them.
|
||||
- Search [open](https://github.com/godotengine/godot/issues) and [closed](https://github.com/godotengine/godot/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported. If you don't find a relevant match or if you're unsure, don't hesitate to **open a new issue**. The bugsquad will handle it from there if it's a duplicate.
|
||||
- Verify that you are using a [supported Godot version](https://docs.godotengine.org/en/stable/about/release_policy.html).
|
||||
|
||||
- type: input
|
||||
attributes:
|
||||
label: Godot version
|
||||
description: >
|
||||
Specify the Git commit hash if using a development or non-official build.
|
||||
Specify the Godot version, including the Git commit hash if using a development or non-official build.
|
||||
If you use a custom build, please test if your issue is reproducible in official builds too.
|
||||
placeholder: 3.3.stable, 4.0.dev (3041becc6)
|
||||
placeholder: 3.5.stable, 4.0.dev (3041becc6)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
@ -24,9 +25,12 @@ body:
|
|||
attributes:
|
||||
label: System information
|
||||
description: |
|
||||
Specify the OS version, and when relevant hardware information.
|
||||
For graphics-related issues, specify the GPU model, driver version, and the rendering backend (GLES2, GLES3, Vulkan).
|
||||
placeholder: Windows 10, GLES3, Intel HD Graphics 620 (27.20.100.9616)
|
||||
- Specify the OS version, and when relevant hardware information.
|
||||
- For issues that are likely OS-specific and/or graphics-related, please specify the CPU model and architecture.
|
||||
- For graphics-related issues, specify the GPU model, driver version, and the rendering backend (GLES2, GLES3, Vulkan).
|
||||
- **Bug reports not including the required information may be closed at the maintainers' discretion.** If in doubt, always include all the requested information; it's better to include too much information than not enough information.
|
||||
- **Starting from Godot 4.1, you can copy this information to your clipboard by using *Help > Copy System Info* at the top of the editor window.**
|
||||
placeholder: Windows 10 - Godot v4.0.3.stable - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 970 (nvidia, 510.85.02) - Intel Core i7-10700KF CPU @ 3.80GHz (16 Threads)
|
||||
validations:
|
||||
required: true
|
||||
|
||||
|
@ -52,8 +56,10 @@ body:
|
|||
attributes:
|
||||
label: Minimal reproduction project
|
||||
description: |
|
||||
A small Godot project which reproduces the issue, with no unnecessary files included. Be sure to not include the `.godot` folder in the archive (but keep `project.godot`).
|
||||
Required, unless the reproduction steps are trivial and don't require any project files to be followed. In this case, write "N/A" in the field.
|
||||
Drag and drop a ZIP archive to upload it. **Do not select another field until the project is done uploading.**
|
||||
- A small Godot project which reproduces the issue, with no unnecessary files included. Be sure to not include the `.godot` folder in the archive (but keep `project.godot`).
|
||||
- Required, unless the reproduction steps are trivial and don't require any project files to be followed. In this case, write "N/A" in the field.
|
||||
- Drag and drop a ZIP archive to upload it. **Do not select another field until the project is done uploading.**
|
||||
- **Note for C# users:** If your issue is *not* Mono-specific, please upload a minimal reproduction project written in GDScript or VisualScript. This will make it easier for contributors to reproduce the issue locally as not everyone has a Mono setup available.
|
||||
- **If you've been asked by a maintainer to upload a minimal reproduction project, you *must* do so within 7 days.** Otherwise, your bug report will be closed as it'll be considered too difficult to diagnose.
|
||||
validations:
|
||||
required: true
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
name: Download Godot artifact
|
||||
description: Download the Godot artifact.
|
||||
inputs:
|
||||
name:
|
||||
description: The artifact name.
|
||||
default: "${{ github.job }}"
|
||||
path:
|
||||
description: The path to download and extract to.
|
||||
required: true
|
||||
default: "./"
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Download Godot Artifact
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: ${{ inputs.name }}
|
||||
path: ${{ inputs.path }}
|
|
@ -0,0 +1,24 @@
|
|||
name: Dump Godot API
|
||||
description: Dump Godot API for GDExtension
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
# Dump GDExtension interface and API
|
||||
- name: Dump GDExtension interface and API for godot-cpp build
|
||||
shell: sh
|
||||
run: |
|
||||
${{ inputs.bin }} --headless --dump-gdextension-interface --dump-extension-api
|
||||
mkdir godot-api
|
||||
cp -f gdextension_interface.h godot-api/
|
||||
cp -f extension_api.json godot-api/
|
||||
|
||||
- name: Upload API dump
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: 'godot-api-dump'
|
||||
path: './godot-api/*'
|
||||
|
|
@ -16,7 +16,20 @@ runs:
|
|||
with:
|
||||
path: ${{inputs.scons-cache}}
|
||||
key: ${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
|
||||
|
||||
# We try to match an existing cache to restore from it. Each potential key is checked against
|
||||
# all existing caches as a prefix. E.g. 'linux-template-minimal' would match any cache that
|
||||
# starts with "linux-template-minimal", such as "linux-template-minimal-master-refs/heads/master-6588a4a29af1621086feac0117d5d4d37af957fd".
|
||||
#
|
||||
# We check these prefixes in this order:
|
||||
#
|
||||
# 1. The exact match, including the base branch, the commit reference, and the SHA hash of the commit.
|
||||
# 2. A partial match for the same base branch and the same commit reference.
|
||||
# 3. A partial match for the same base branch and the base branch commit reference.
|
||||
# 4. A partial match for the same base branch only (not ideal, matches any PR with the same base branch).
|
||||
|
||||
restore-keys: |
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}-${{github.sha}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-${{github.ref}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}-refs/heads/${{env.GODOT_BASE_BRANCH}}
|
||||
${{inputs.cache-name}}-${{env.GODOT_BASE_BRANCH}}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
name: Test Godot project converter
|
||||
description: Test the Godot project converter.
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Test 3-to-4 conversion
|
||||
shell: sh
|
||||
run: |
|
||||
mkdir converter_test
|
||||
cd converter_test
|
||||
touch project.godot
|
||||
../${{ inputs.bin }} --headless --validate-conversion-3to4
|
||||
cd ..
|
||||
rm converter_test -rf
|
|
@ -23,5 +23,5 @@ runs:
|
|||
shell: bash
|
||||
run: |
|
||||
python -c "import sys; print(sys.version)"
|
||||
python -m pip install scons
|
||||
python -m pip install scons==4.4.0
|
||||
scons --version
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
name: Test Godot project
|
||||
description: Run the test Godot project.
|
||||
inputs:
|
||||
bin:
|
||||
description: The path to the Godot executable
|
||||
required: true
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
# Download and extract zip archive with project, folder is renamed to be able to easy change used project
|
||||
- name: Download test project
|
||||
shell: sh
|
||||
run: |
|
||||
wget https://github.com/godotengine/regression-test-project/archive/4.0.zip
|
||||
unzip 4.0.zip
|
||||
mv "regression-test-project-4.0" "test_project"
|
||||
|
||||
# Editor is quite complicated piece of software, so it is easy to introduce bug here.
|
||||
|
||||
- name: Open and close editor (Vulkan)
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} --audio-driver Dummy --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
- name: Open and close editor (GLES3)
|
||||
shell: sh
|
||||
run: |
|
||||
DRI_PRIME=0 xvfb-run ${{ inputs.bin }} --audio-driver Dummy --rendering-driver opengl3 --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
# Run test project
|
||||
- name: Run project
|
||||
shell: sh
|
||||
run: |
|
||||
xvfb-run ${{ inputs.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
|
@ -1,10 +1,11 @@
|
|||
name: 🤖 Android Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
name: 🪲 Godot CPP
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Used for the cache key, and godot-cpp checkout. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-cpp-tests
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
godot-cpp-tests:
|
||||
runs-on: "ubuntu-20.04"
|
||||
name: "Build and test Godot CPP"
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup python and scons
|
||||
uses: ./.github/actions/godot-deps
|
||||
|
||||
# Checkout godot-cpp
|
||||
- name: Checkout godot-cpp
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: godotengine/godot-cpp
|
||||
ref: ${{ env.GODOT_BASE_BRANCH }}
|
||||
submodules: 'recursive'
|
||||
path: 'godot-cpp'
|
||||
|
||||
# Download generated API dump
|
||||
- name: Download GDExtension interface and API dump
|
||||
uses: ./.github/actions/download-artifact
|
||||
with:
|
||||
name: 'godot-api-dump'
|
||||
path: './godot-api'
|
||||
|
||||
# Extract and override existing files with generated files
|
||||
- name: Extract GDExtension interface and API dump
|
||||
run: |
|
||||
cp -f godot-api/gdextension_interface.h godot-cpp/gdextension/
|
||||
cp -f godot-api/extension_api.json godot-cpp/gdextension/
|
||||
|
||||
# TODO: Add caching to the scons build and store it for CI via the godot-cache
|
||||
# action.
|
||||
|
||||
# Build godot-cpp test extension
|
||||
- name: Build godot-cpp test extension
|
||||
run: |
|
||||
cd godot-cpp/test
|
||||
scons target=template_debug dev_build=yes
|
||||
cd ../..
|
|
@ -1,10 +1,11 @@
|
|||
name: 🍏 iOS Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
name: 🐧 Linux Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
DOTNET_NOLOGO: true
|
||||
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||
|
@ -24,52 +25,51 @@ jobs:
|
|||
- name: Editor w/ Mono (target=editor)
|
||||
cache-name: linux-editor-mono
|
||||
target: editor
|
||||
tests: false # Disabled due freeze caused by mix Mono build and CI
|
||||
sconsflags: module_mono_enabled=yes
|
||||
doc-test: true
|
||||
bin: "./bin/godot.linuxbsd.editor.x86_64.mono"
|
||||
build-mono: true
|
||||
tests: false # Disabled due freeze caused by mix Mono build and CI
|
||||
doc-test: true
|
||||
proj-conv: true
|
||||
artifact: true
|
||||
|
||||
- name: Editor with doubles and GCC sanitizers (target=editor, tests=yes, dev_build=yes, precision=double, use_asan=yes, use_ubsan=yes, linker=gold)
|
||||
cache-name: linux-editor-double-sanitizers
|
||||
target: editor
|
||||
tests: true
|
||||
# Debug symbols disabled as they're huge on this build and we hit the 14 GB limit for runners.
|
||||
sconsflags: dev_build=yes debug_symbols=no precision=double use_asan=yes use_ubsan=yes linker=gold
|
||||
proj-test: true
|
||||
# Can be turned off for PRs that intentionally break compat with godot-cpp,
|
||||
# until both the upstream PR and the matching godot-cpp changes are merged.
|
||||
godot-cpp-test: true
|
||||
bin: "./bin/godot.linuxbsd.editor.dev.double.x86_64.san"
|
||||
build-mono: false
|
||||
tests: true
|
||||
proj-test: true
|
||||
# Generate an API dump for godot-cpp tests.
|
||||
api-dump: true
|
||||
# Skip 2GiB artifact speeding up action.
|
||||
artifact: false
|
||||
|
||||
- name: Editor with clang sanitizers (target=editor, tests=yes, dev_build=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes, linker=lld)
|
||||
cache-name: linux-editor-llvm-sanitizers
|
||||
target: editor
|
||||
tests: true
|
||||
sconsflags: dev_build=yes use_asan=yes use_ubsan=yes use_llvm=yes linker=lld
|
||||
bin: "./bin/godot.linuxbsd.editor.dev.x86_64.llvm.san"
|
||||
build-mono: false
|
||||
tests: true
|
||||
# Skip 2GiB artifact speeding up action.
|
||||
artifact: false
|
||||
|
||||
- name: Template w/ Mono (target=template_release)
|
||||
cache-name: linux-template-mono
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: module_mono_enabled=yes
|
||||
build-mono: false
|
||||
tests: false
|
||||
artifact: true
|
||||
|
||||
- name: Minimal template (target=template_release, everything disabled)
|
||||
cache-name: linux-template-minimal
|
||||
target: template_release
|
||||
tests: false
|
||||
sconsflags: modules_enabled_by_default=no disable_3d=yes disable_advanced_gui=yes deprecated=no minizip=no
|
||||
tests: false
|
||||
artifact: true
|
||||
|
||||
steps:
|
||||
|
@ -83,6 +83,12 @@ jobs:
|
|||
sudo add-apt-repository ppa:kisak/kisak-mesa
|
||||
sudo apt-get install -qq mesa-vulkan-drivers
|
||||
|
||||
- name: Free disk space on runner
|
||||
run: |
|
||||
echo "Disk usage before:" && df -h
|
||||
sudo rm -rf /usr/local/lib/android
|
||||
echo "Disk usage after:" && df -h
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
with:
|
||||
|
@ -119,6 +125,24 @@ jobs:
|
|||
run: |
|
||||
./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd
|
||||
|
||||
- name: Prepare artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
run: |
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
- name: Dump Godot API
|
||||
uses: ./.github/actions/godot-api-dump
|
||||
if: ${{ matrix.api-dump }}
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
|
@ -136,78 +160,16 @@ jobs:
|
|||
${{ matrix.bin }} --doctool --headless 2>&1 > /dev/null || true
|
||||
git diff --color --exit-code && ! git ls-files --others --exclude-standard | sed -e 's/^/New doc file missing in PR: /' | grep 'xml$'
|
||||
|
||||
# Test 3.x -> 4.x project converter
|
||||
# Download and run the test project
|
||||
- name: Test Godot project
|
||||
uses: ./.github/actions/godot-project-test
|
||||
if: ${{ matrix.proj-test }}
|
||||
with:
|
||||
bin: ${{ matrix.bin }}
|
||||
|
||||
# Test the project converter
|
||||
- name: Test project converter
|
||||
uses: ./.github/actions/godot-converter-test
|
||||
if: ${{ matrix.proj-conv }}
|
||||
run: |
|
||||
mkdir converter_test
|
||||
cd converter_test
|
||||
touch project.godot
|
||||
../${{ matrix.bin }} --headless --validate-conversion-3to4
|
||||
cd ..
|
||||
rm converter_test -rf
|
||||
|
||||
# Download and extract zip archive with project, folder is renamed to be able to easy change used project
|
||||
- name: Download test project
|
||||
if: ${{ matrix.proj-test }}
|
||||
run: |
|
||||
wget https://github.com/godotengine/regression-test-project/archive/4.0.zip
|
||||
unzip 4.0.zip
|
||||
mv "regression-test-project-4.0" "test_project"
|
||||
|
||||
# Editor is quite complicated piece of software, so it is easy to introduce bug here
|
||||
- name: Open and close editor (Vulkan)
|
||||
if: ${{ matrix.proj-test }}
|
||||
run: |
|
||||
xvfb-run ${{ matrix.bin }} --audio-driver Dummy --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
- name: Open and close editor (GLES3)
|
||||
if: ${{ matrix.proj-test }}
|
||||
run: |
|
||||
DRI_PRIME=0 xvfb-run ${{ matrix.bin }} --audio-driver Dummy --rendering-driver opengl3 --editor --quit --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
# Run test project
|
||||
- name: Run project
|
||||
if: ${{ matrix.proj-test }}
|
||||
run: |
|
||||
xvfb-run ${{ matrix.bin }} 40 --audio-driver Dummy --path test_project 2>&1 | tee sanitizers_log.txt || true
|
||||
misc/scripts/check_ci_log.py sanitizers_log.txt
|
||||
|
||||
# Checkout godot-cpp
|
||||
- name: Checkout godot-cpp
|
||||
if: ${{ matrix.godot-cpp-test }}
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: godotengine/godot-cpp
|
||||
submodules: 'recursive'
|
||||
path: 'godot-cpp'
|
||||
|
||||
# Dump GDExtension interface and API
|
||||
- name: Dump GDExtension interface and API for godot-cpp build
|
||||
if: ${{ matrix.godot-cpp-test }}
|
||||
run: |
|
||||
${{ matrix.bin }} --headless --dump-gdextension-interface --dump-extension-api
|
||||
cp -f gdextension_interface.h godot-cpp/gdextension/
|
||||
cp -f extension_api.json godot-cpp/gdextension/
|
||||
|
||||
# Build godot-cpp test extension
|
||||
- name: Build godot-cpp test extension
|
||||
if: ${{ matrix.godot-cpp-test }}
|
||||
run: |
|
||||
cd godot-cpp/test
|
||||
scons target=template_debug dev_build=yes
|
||||
cd ../..
|
||||
|
||||
- name: Prepare artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
run: |
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
if: ${{ matrix.artifact }}
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
bin: ${{ matrix.bin }}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
name: 🍎 macOS Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
|
||||
concurrency:
|
||||
|
@ -23,7 +24,7 @@ jobs:
|
|||
cache-name: macos-editor
|
||||
target: editor
|
||||
tests: true
|
||||
bin: "./bin/godot.macos.editor.x86_64"
|
||||
bin: "./bin/godot.macos.editor.universal"
|
||||
|
||||
- name: Template (target=template_release)
|
||||
cache-name: macos-template
|
||||
|
@ -34,6 +35,11 @@ jobs:
|
|||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Xcode
|
||||
uses: maxim-lobanov/setup-xcode@v1
|
||||
with:
|
||||
xcode-version: '15.3'
|
||||
|
||||
- name: Setup Godot build cache
|
||||
uses: ./.github/actions/godot-cache
|
||||
with:
|
||||
|
@ -47,14 +53,34 @@ jobs:
|
|||
run: |
|
||||
sh misc/scripts/install_vulkan_sdk_macos.sh
|
||||
|
||||
- name: Compilation
|
||||
- name: Compilation (x86_64)
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
sconsflags: ${{ env.SCONSFLAGS }}
|
||||
sconsflags: ${{ env.SCONSFLAGS }} arch=x86_64
|
||||
platform: macos
|
||||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Compilation (arm64)
|
||||
uses: ./.github/actions/godot-build
|
||||
with:
|
||||
sconsflags: ${{ env.SCONSFLAGS }} arch=arm64
|
||||
platform: macos
|
||||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
- name: Prepare artifact
|
||||
run: |
|
||||
lipo -create ./bin/godot.macos.${{ matrix.target }}.x86_64 ./bin/godot.macos.${{ matrix.target }}.arm64 -output ./bin/godot.macos.${{ matrix.target }}.universal
|
||||
rm ./bin/godot.macos.${{ matrix.target }}.x86_64 ./bin/godot.macos.${{ matrix.target }}.arm64
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
|
@ -62,13 +88,3 @@ jobs:
|
|||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --test
|
||||
|
||||
- name: Prepare artifact
|
||||
run: |
|
||||
strip bin/godot.*
|
||||
chmod +x bin/godot.*
|
||||
|
||||
- name: Upload artifact
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
name: 🔗 GHA
|
||||
on: [push, pull_request]
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-runner
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
# First stage: Only static checks, fast and prevent expensive builds from running.
|
||||
|
||||
static-checks:
|
||||
name: 📊 Static checks
|
||||
uses: ./.github/workflows/static_checks.yml
|
||||
|
||||
# Second stage: Run all the builds and some of the tests.
|
||||
|
||||
android-build:
|
||||
name: 🤖 Android
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/android_builds.yml
|
||||
|
||||
ios-build:
|
||||
name: 🍏 iOS
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/ios_builds.yml
|
||||
|
||||
linux-build:
|
||||
name: 🐧 Linux
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/linux_builds.yml
|
||||
|
||||
macos-build:
|
||||
name: 🍎 macOS
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/macos_builds.yml
|
||||
|
||||
windows-build:
|
||||
name: 🏁 Windows
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/windows_builds.yml
|
||||
|
||||
web-build:
|
||||
name: 🌐 Web
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/web_builds.yml
|
||||
|
||||
# Third stage: Run auxiliary tests using build artifacts from previous jobs.
|
||||
|
||||
# Can be turned off for PRs that intentionally break compat with godot-cpp,
|
||||
# until both the upstream PR and the matching godot-cpp changes are merged.
|
||||
godot-cpp-test:
|
||||
name: 🪲 Godot CPP
|
||||
# This can be changed to depend on another platform, if we decide to use it for
|
||||
# godot-cpp instead. Make sure to move the .github/actions/godot-api-dump step
|
||||
# appropriately.
|
||||
needs: linux-build
|
||||
uses: ./.github/workflows/godot_cpp_test.yml
|
|
@ -1,5 +1,6 @@
|
|||
name: 📊 Static Checks
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
concurrency:
|
||||
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-static
|
||||
|
@ -7,37 +8,62 @@ concurrency:
|
|||
|
||||
jobs:
|
||||
static-checks:
|
||||
name: Static Checks (clang-format, black format, file format, documentation checks)
|
||||
runs-on: ubuntu-20.04
|
||||
name: Code style, file formatting, and docs
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Install dependencies
|
||||
- name: Install APT dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@latest
|
||||
with:
|
||||
packages: dos2unix libxml2-utils moreutils
|
||||
|
||||
- name: Install Python dependencies and general setup
|
||||
run: |
|
||||
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
|
||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
||||
sudo apt-add-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-15 main"
|
||||
sudo apt-get install -qq dos2unix clang-format-15 libxml2-utils python3-pip moreutils
|
||||
sudo update-alternatives --remove-all clang-format || true
|
||||
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-15 100
|
||||
sudo pip3 install black==22.3.0 pygments pytest==7.1.2 mypy==0.971
|
||||
pip3 install black==22.3.0 pytest==7.1.2 mypy==0.971
|
||||
git config diff.wsErrorHighlight all
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
||||
files=$(gh pr diff ${{ github.event.pull_request.number }} --name-only)
|
||||
elif [ "${{ github.event_name }}" == "push" -a "${{ github.event.forced }}" == "false" -a "${{ github.event.created }}" == "false" ]; then
|
||||
files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.before }}..${{ github.event.after }} 2> /dev/null || true)
|
||||
fi
|
||||
echo "$files" >> changed.txt
|
||||
cat changed.txt
|
||||
files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "./{}"' | tr '\n' ' ')
|
||||
echo "CHANGED_FILES=$files" >> $GITHUB_ENV
|
||||
|
||||
- name: File formatting checks (file_format.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/file_format.sh
|
||||
bash ./misc/scripts/file_format.sh changed.txt
|
||||
|
||||
- name: Header guards formatting checks (header_guards.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/header_guards.sh
|
||||
bash ./misc/scripts/header_guards.sh changed.txt
|
||||
|
||||
- name: Python style checks via black (black_format.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/black_format.sh
|
||||
if grep -qE '\.py$|SConstruct|SCsub' changed.txt || [ -z "$(cat changed.txt)" ]; then
|
||||
bash ./misc/scripts/black_format.sh
|
||||
else
|
||||
echo "Skipping Python formatting as no Python files were changed."
|
||||
fi
|
||||
|
||||
- name: Python scripts static analysis (mypy_check.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/mypy_check.sh
|
||||
if grep -qE '\.py$|SConstruct|SCsub' changed.txt || [ -z "$(cat changed.txt)" ]; then
|
||||
bash ./misc/scripts/mypy_check.sh
|
||||
else
|
||||
echo "Skipping Python static analysis as no Python files were changed."
|
||||
fi
|
||||
|
||||
- name: Python builders checks via pytest (pytest_builders.sh)
|
||||
run: |
|
||||
|
@ -45,10 +71,14 @@ jobs:
|
|||
|
||||
- name: JavaScript style and documentation checks via ESLint and JSDoc
|
||||
run: |
|
||||
cd platform/web
|
||||
npm ci
|
||||
npm run lint
|
||||
npm run docs -- -d dry-run
|
||||
if grep -q "platform/web" changed.txt || [ -z "$(cat changed.txt)" ]; then
|
||||
cd platform/web
|
||||
npm ci
|
||||
npm run lint
|
||||
npm run docs -- -d dry-run
|
||||
else
|
||||
echo "Skipping JavaScript formatting as no Web/JS files were changed."
|
||||
fi
|
||||
|
||||
- name: Class reference schema checks
|
||||
run: |
|
||||
|
@ -60,16 +90,21 @@ jobs:
|
|||
|
||||
- name: Style checks via clang-format (clang_format.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/clang_format.sh
|
||||
clang-format --version
|
||||
bash ./misc/scripts/clang_format.sh changed.txt
|
||||
|
||||
- name: Style checks via dotnet format (dotnet_format.sh)
|
||||
run: |
|
||||
bash ./misc/scripts/dotnet_format.sh
|
||||
if grep -q "modules/mono" changed.txt || [ -z "$(cat changed.txt)" ]; then
|
||||
bash ./misc/scripts/dotnet_format.sh
|
||||
else
|
||||
echo "Skipping dotnet format as no C# files were changed."
|
||||
fi
|
||||
|
||||
- name: Spell checks via codespell
|
||||
uses: codespell-project/actions-codespell@v1
|
||||
if: github.event_name == 'pull_request' && env.CHANGED_FILES != ''
|
||||
uses: codespell-project/actions-codespell@v2
|
||||
with:
|
||||
skip: ./.*,./**/.*,./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json
|
||||
check_hidden: false
|
||||
ignore_words_list: curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,nd,numer,ot,te
|
||||
only_warn: true
|
||||
skip: "./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json"
|
||||
ignore_words_list: "curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,mis,nd,numer,ot,te,vai"
|
||||
path: ${{ env.CHANGED_FILES }}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
name: 🌐 Web Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes debug_symbols=no
|
||||
EM_VERSION: 3.1.18
|
||||
EM_CACHE_FOLDER: "emsdk-cache"
|
||||
|
@ -22,7 +23,7 @@ jobs:
|
|||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Emscripten latest
|
||||
uses: mymindstorm/setup-emsdk@v11
|
||||
uses: mymindstorm/setup-emsdk@v12
|
||||
with:
|
||||
version: ${{env.EM_VERSION}}
|
||||
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
name: 🏁 Windows Builds
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
# Global Settings
|
||||
# SCONS_CACHE for windows must be set in the build environment
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used for the cache key. Add version suffix to force clean build.
|
||||
GODOT_BASE_BRANCH: '4.0'
|
||||
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes
|
||||
SCONS_CACHE_MSVC_CONFIG: true
|
||||
|
||||
|
@ -27,10 +28,10 @@ jobs:
|
|||
target: editor
|
||||
tests: true
|
||||
# Skip debug symbols, they're way too big with MSVC.
|
||||
sconsflags: debug_symbols=no vsproj=yes
|
||||
sconsflags: debug_symbols=no vsproj=yes windows_subsystem=console
|
||||
bin: "./bin/godot.windows.editor.x86_64.exe"
|
||||
|
||||
- name: Template (target=template_release, tools=no)
|
||||
- name: Template (target=template_release)
|
||||
cache-name: windows-template
|
||||
target: template_release
|
||||
tests: false
|
||||
|
@ -59,14 +60,6 @@ jobs:
|
|||
target: ${{ matrix.target }}
|
||||
tests: ${{ matrix.tests }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --test
|
||||
|
||||
- name: Prepare artifact
|
||||
run: |
|
||||
Remove-Item bin/* -Include *.exp,*.lib,*.pdb -Force
|
||||
|
@ -75,3 +68,11 @@ jobs:
|
|||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
name: ${{ matrix.cache-name }}
|
||||
|
||||
# Execute unit tests for the editor
|
||||
- name: Unit tests
|
||||
if: ${{ matrix.tests }}
|
||||
run: |
|
||||
${{ matrix.bin }} --version
|
||||
${{ matrix.bin }} --help
|
||||
${{ matrix.bin }} --test
|
||||
|
|
|
@ -63,6 +63,10 @@ tests/data/*.translation
|
|||
# Binutils tmp linker output of the form "stXXXXXX" where "X" is alphanumeric
|
||||
st[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]
|
||||
|
||||
# Python development
|
||||
.venv
|
||||
venv
|
||||
|
||||
# Python generated
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
extraction:
|
||||
cpp:
|
||||
after_prepare:
|
||||
- pip3 install scons
|
||||
- PATH="/opt/work/.local/bin:$PATH"
|
||||
index:
|
||||
build_command: scons -j2
|
2
.mailmap
2
.mailmap
|
@ -1,4 +1,5 @@
|
|||
Aaron Record <aaronjrecord@gmail.com>
|
||||
ajreckof <66184050+ajreckof@users.noreply.github.com> <tbonhoure@ymail.com>
|
||||
Alexander Holland <alexander.holland@live.de>
|
||||
Alexander Holland <alexander.holland@live.de> <alexander.holland@haw-hamburg.de>
|
||||
Alexander Holland <alexander.holland@live.de> <AlexHolly>
|
||||
|
@ -105,6 +106,7 @@ marynate <mary.w.nate@gmail.com> <marynate@github.com>
|
|||
Mateo Kuruk Miccino <mateomiccino@gmail.com>
|
||||
Max Hilbrunner <m.hilbrunner@gmail.com>
|
||||
Max Hilbrunner <m.hilbrunner@gmail.com> <mhilbrunner@users.noreply.github.com>
|
||||
MewPurPur <mew.pur.pur@abv.bg>
|
||||
Michael Alexsander <michaelalexsander@protonmail.com>
|
||||
Micky <micheledevita2@gmail.com> <66727710+Mickeon@users.noreply.github.com>
|
||||
Nathan Franke <natfra@pm.me> <nathanwfranke@gmail.com>
|
||||
|
|
|
@ -45,12 +45,14 @@ name is available.
|
|||
Anutrix
|
||||
Aren Villanueva (kurikaesu)
|
||||
Ariel Manzur (punto-)
|
||||
AThousandShips
|
||||
Bartłomiej T. Listwon (Listwon)
|
||||
Bastiaan Olij (BastiaanOlij)
|
||||
Ben Brookshire (sheepandshepherd)
|
||||
Benjamin Larsson (Nallebeorn)
|
||||
Bernhard Liebl (poke1024)
|
||||
Bhuvan Vemula (Bhu1-V)
|
||||
bitsawer
|
||||
Błażej Szczygieł (zaps166)
|
||||
Bojidar Marinov (bojidar-bg)
|
||||
Brian Semrau (briansemrau)
|
||||
|
@ -104,6 +106,7 @@ name is available.
|
|||
Gilles Roudiere (groud)
|
||||
Gordon MacPherson (RevoluPowered)
|
||||
Guilherme Felipe de C. G. da Silva (guilhermefelipecgs)
|
||||
Hakim Rouatbi (hakro)
|
||||
Hanif Bin Ariffin (hbina)
|
||||
Haoyu Qiu (timothyqiu)
|
||||
Hein-Pieter van Braam-Stewart (hpvb)
|
||||
|
@ -181,6 +184,7 @@ name is available.
|
|||
Michał Iwańczuk (iwek7)
|
||||
MichiRecRoom (LikeLakers2)
|
||||
Micky (Mickeon)
|
||||
Mikael Hermansson (mihe)
|
||||
MinusKube
|
||||
Morris "Tabor" Arroad (mortarroad)
|
||||
mrezai
|
||||
|
@ -193,6 +197,7 @@ name is available.
|
|||
Nikita Lita (nikitalita)
|
||||
Nils André-Chang (NilsIrl)
|
||||
Noah Beard (TwistedTwigleg)
|
||||
Nông Văn Tình (nongvantinh)
|
||||
Nuno Donato (nunodonato)
|
||||
ocean (they/them) (anvilfolk)
|
||||
Omar El Sheikh (The-O-King)
|
||||
|
@ -248,6 +253,7 @@ name is available.
|
|||
thebestnom
|
||||
Theo Hallenius (TheoXD)
|
||||
Timo Schwarzer (timoschwarzer)
|
||||
Timothé Bonhoure (ajreckof)
|
||||
Timo (toger5)
|
||||
Tomasz Chabora (KoBeWi)
|
||||
trollodel
|
||||
|
|
876
CHANGELOG.md
876
CHANGELOG.md
|
@ -4,6 +4,872 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## [4.0.4] - 2023-08-02
|
||||
|
||||
See the [release announcement](https://godotengine.org/article/maintenance-release-godot-4-0-4) for details.
|
||||
|
||||
### Added
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Add version defines to help users deal with breaking changes ([GH-78270](https://github.com/godotengine/godot/pull/78270)).
|
||||
|
||||
#### Documentation
|
||||
|
||||
- Document GI techniques ignoring VisualInstance3D and Camera3D layers ([GH-74688](https://github.com/godotengine/godot/pull/74688)).
|
||||
- Document how to use the global animation library in GDScript ([GH-74894](https://github.com/godotengine/godot/pull/74894)).
|
||||
- Add more info on the nature of NAN ([GH-75614](https://github.com/godotengine/godot/pull/75614)).
|
||||
- Add Stretch Mode description to ProjectSettings.xml ([GH-76272](https://github.com/godotengine/godot/pull/76272)).
|
||||
- Document seamless caveats on small textures in NoiseTexture2D and NoiseTexture3D ([GH-77017](https://github.com/godotengine/godot/pull/77017)).
|
||||
- Document the database for `Input.get_joy_name()` and `Input.get_joy_guid()` ([GH-77768](https://github.com/godotengine/godot/pull/77768)).
|
||||
- Document the InitialAction enum in RenderingDevice ([GH-77882](https://github.com/godotengine/godot/pull/77882)).
|
||||
- Document ShaderInclude ([GH-78562](https://github.com/godotengine/godot/pull/78562)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Add an editor option to copy system info to clipboard ([GH-65902](https://github.com/godotengine/godot/pull/65902)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Add support for DPAD Center key of Android TV remote controller ([GH-77115](https://github.com/godotengine/godot/pull/77115)).
|
||||
|
||||
### Changed
|
||||
|
||||
#### 2D
|
||||
|
||||
- Make tile atlas merge dialog use filter nearest on both sides ([GH-77385](https://github.com/godotengine/godot/pull/77385)).
|
||||
- Don't create bones from empty scene ([GH-77473](https://github.com/godotengine/godot/pull/77473)).
|
||||
- Don't disable `Material` and `PlaceholderMaterial` when `disable_3d=yes` ([GH-77654](https://github.com/godotengine/godot/pull/77654)).
|
||||
- Draw materials in tile atlas view ([GH-77909](https://github.com/godotengine/godot/pull/77909)).
|
||||
|
||||
#### Animation
|
||||
|
||||
- Hide Animation Frames section when there are no animations ([GH-77221](https://github.com/godotengine/godot/pull/77221)).
|
||||
- Improve `Skeleton3D::find_bone()` performance ([GH-77307](https://github.com/godotengine/godot/pull/77307)).
|
||||
- Avoid mutating the same Skin multiple times ([GH-77505](https://github.com/godotengine/godot/pull/77505)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Always decode `dotnet` output as UTF-8 ([GH-74065](https://github.com/godotengine/godot/pull/74065)).
|
||||
- Link the right build property to REAL_T_IS_DOUBLE ([GH-77198](https://github.com/godotengine/godot/pull/77198)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Use nearest with mipmaps texture filter in SpriteFrames editor plugin ([GH-74341](https://github.com/godotengine/godot/pull/74341)).
|
||||
- Make sure script cache is created after reimport ([GH-75798](https://github.com/godotengine/godot/pull/75798)).
|
||||
- Make SpriteFrames editor toolbar a `FlowContainer` ([GH-77034](https://github.com/godotengine/godot/pull/77034)).
|
||||
- Prevent selecting unselectable `EditorProperty` with RMB ([GH-77148](https://github.com/godotengine/godot/pull/77148)).
|
||||
- Do not translate node name when assigned to an exported field ([GH-77217](https://github.com/godotengine/godot/pull/77217)).
|
||||
- Allow up to INT32_MAX max size in Array/Dictionary editor ([GH-77225](https://github.com/godotengine/godot/pull/77225)).
|
||||
- Avoid error spam on first opening of a not yet imported project ([GH-77276](https://github.com/godotengine/godot/pull/77276)).
|
||||
- Ensure quotes are escaped when converting built-in scripts ([GH-77399](https://github.com/godotengine/godot/pull/77399)).
|
||||
- Ignore the `project_settings_override` file when in editor ([GH-77459](https://github.com/godotengine/godot/pull/77459)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Treat `BitField<Enum>` as `int` (not `Enum`) ([GH-77579](https://github.com/godotengine/godot/pull/77579)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Stop dragging when `Slider` changes editability ([GH-77242](https://github.com/godotengine/godot/pull/77242)).
|
||||
- Use defined key mapping for closing popups and dialogs ([GH-77297](https://github.com/godotengine/godot/pull/77297)).
|
||||
- TextServer: Prevent duplicate line breaks on virtual spaces when line width is significantly smaller than character width ([GH-77514](https://github.com/godotengine/godot/pull/77514)).
|
||||
- Cancel tooltip when mouse leaves viewport ([GH-77933](https://github.com/godotengine/godot/pull/77933)).
|
||||
- Preserve selection when focusing SpinBox ([GH-78092](https://github.com/godotengine/godot/pull/78092)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Improve touchpad and mouse support for the Android editor ([GH-77498](https://github.com/godotengine/godot/pull/77498)).
|
||||
- Skip error messages for buttons that don't exist ([GH-77748](https://github.com/godotengine/godot/pull/77748)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Disable AMD switchable graphics on Windows with Vulkan to fix driver issue ([GH-73450](https://github.com/godotengine/godot/pull/73450)).
|
||||
- Take 3D resolution scaling into account for mesh LOD ([GH-77294](https://github.com/godotengine/godot/pull/77294)).
|
||||
|
||||
#### Thirdparty
|
||||
|
||||
- brotli updated to version ed1995b6b.
|
||||
- msdfgen updated to version 1.10.
|
||||
- recast updated to version 1.6.0.
|
||||
- tinyexr updated to version 1.0.5.
|
||||
- wslay updated to version 0e7d106ff.
|
||||
- zstd updated to version 1.5.5.
|
||||
- CA root certificates updated to 2023-06-02 bundle from Mozilla.
|
||||
|
||||
### Fixed
|
||||
|
||||
#### 2D
|
||||
|
||||
- Fix crash when opening a TileSet with invalid tiles ([GH-78165](https://github.com/godotengine/godot/pull/78165)).
|
||||
- Fix crash with failed compatibility tiles ([GH-78796](https://github.com/godotengine/godot/pull/78796)).
|
||||
|
||||
#### 3D
|
||||
|
||||
- Fix CSGPolygon3D in path mode disappearing at runtime ([GH-77118](https://github.com/godotengine/godot/pull/77118)).
|
||||
|
||||
#### Animation
|
||||
|
||||
- Fix type check in AnimationTrackKeyEdit for methods ([GH-74948](https://github.com/godotengine/godot/pull/74948)).
|
||||
- Fix `AnimatedSprite3D` autoplay warning ([GH-77028](https://github.com/godotengine/godot/pull/77028)).
|
||||
- Adjust BoneAttachment3D children/meshes during rest fixer ([GH-77123](https://github.com/godotengine/godot/pull/77123)).
|
||||
- Fix for SkeletonIK3D interpolation and bone roll ([GH-77469](https://github.com/godotengine/godot/pull/77469)).
|
||||
- Fix AnimationPlayer cumulative `speed_scale` ([GH-77500](https://github.com/godotengine/godot/pull/77500)).
|
||||
- Fix adding bones with the same name after calling `Skeleton3D.clear_bones()` ([GH-77874](https://github.com/godotengine/godot/pull/77874)).
|
||||
|
||||
#### Audio
|
||||
|
||||
- Fix trim when importing WAV ([GH-75261](https://github.com/godotengine/godot/pull/75261)).
|
||||
- Fix 2D audio in multiple viewports ([GH-76713](https://github.com/godotengine/godot/pull/76713)).
|
||||
- Fix crash in AudioStream preview ([GH-77664](https://github.com/godotengine/godot/pull/77664)).
|
||||
- Fix issue causing the Android editor to crash when creating a new AudioStreamMicrophone ([GH-77686](https://github.com/godotengine/godot/pull/77686)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- CI: Fix running the unit tests on windows ([GH-76887](https://github.com/godotengine/godot/pull/76887)).
|
||||
- Linux: Fix udev fallback logic with `use_sowrap=no` ([GH-79111](https://github.com/godotengine/godot/pull/79111)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Fix C# glue generation for enums with negative values ([GH-77018](https://github.com/godotengine/godot/pull/77018)).
|
||||
- Fix `SendToScriptDebugger` crash ([GH-77377](https://github.com/godotengine/godot/pull/77377)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Fix `StringName` comparison ([GH-77197](https://github.com/godotengine/godot/pull/77197)).
|
||||
- Fix calling `TextureStorage::texture_3d_update()` could cause a crash ([GH-77266](https://github.com/godotengine/godot/pull/77266)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Fix theme of editor VCS dialogs ([GH-75983](https://github.com/godotengine/godot/pull/75983)).
|
||||
- Fix calculation bug with `TextEdit::get_line_height()` ([GH-76605](https://github.com/godotengine/godot/pull/76605)).
|
||||
- Fix Input Map key assignments missing after project conversion ([GH-77134](https://github.com/godotengine/godot/pull/77134)).
|
||||
- Fix `Window` derived nodes being unselectable for `ViewportTexture` `NodePath` ([GH-77312](https://github.com/godotengine/godot/pull/77312)).
|
||||
- Fix crash when using tile atlas merge with recreated alt tile ([GH-77382](https://github.com/godotengine/godot/pull/77382)).
|
||||
- Fix filesystem cache split error ([GH-78324](https://github.com/godotengine/godot/pull/78324)).
|
||||
- Fix saving size in `CreateDialog` ([GH-78403](https://github.com/godotengine/godot/pull/78403)).
|
||||
- Shaders: Exclude incorrect completion options for `render_mode` in shaders ([GH-77086](https://github.com/godotengine/godot/pull/77086)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Add missing `script_type` `nullptr` check ([GH-75943](https://github.com/godotengine/godot/pull/75943)).
|
||||
- Fix warning ignoring for member variables ([GH-76203](https://github.com/godotengine/godot/pull/76203)).
|
||||
- Fix `validate_call_arg()` for unresolved datatype ([GH-77091](https://github.com/godotengine/godot/pull/77091)).
|
||||
- Fix extraction of chained `tr()` calls ([GH-77538](https://github.com/godotengine/godot/pull/77538)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Fix `Range`-derived nodes not redrawing after `set_value_no_signal` ([GH-70834](https://github.com/godotengine/godot/pull/70834)).
|
||||
- Fix adding colors to swatches not updating in previous ColorPickers ([GH-76751](https://github.com/godotengine/godot/pull/76751)).
|
||||
- Fix crash when changing node type from PopupMenu to ItemList ([GH-76854](https://github.com/godotengine/godot/pull/76854)).
|
||||
- Fix `ItemList` item text positions in RTL mode ([GH-77166](https://github.com/godotengine/godot/pull/77166)).
|
||||
- Fix crash when selecting lines in text edit ([GH-77667](https://github.com/godotengine/godot/pull/77667)).
|
||||
- Fix SVG font rendering after ThorVG update ([GH-77942](https://github.com/godotengine/godot/pull/77942)).
|
||||
- Fix disabled slider highlighting ([GH-78776](https://github.com/godotengine/godot/pull/78776)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Fix errors that appear while reordering input map entries ([GH-77009](https://github.com/godotengine/godot/pull/77009)).
|
||||
- Fix spatial viewport multitouch detection support ([GH-78083](https://github.com/godotengine/godot/pull/78083)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Fix agent avoidance position not updated when entering SceneTree ([GH-77110](https://github.com/godotengine/godot/pull/77110)).
|
||||
|
||||
#### Networking
|
||||
|
||||
- Fix HTTPClient `_request` using wrong size ([GH-75867](https://github.com/godotengine/godot/pull/75867)).
|
||||
- ENet: Better handle truncated socket messages ([GH-79699](https://github.com/godotengine/godot/pull/79699)).
|
||||
|
||||
#### Particles
|
||||
|
||||
- Correctly reset particle size and rotation in ParticlesProcessMaterial ([GH-78021](https://github.com/godotengine/godot/pull/78021)).
|
||||
- Avoid error spam when (un)pausing GPUParticles out of tree ([GH-78143](https://github.com/godotengine/godot/pull/78143)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Fix width and center position of `CapsuleShape2D::get_rect` ([GH-77065](https://github.com/godotengine/godot/pull/77065)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Set pending intent flag to stop insta-crash ([GH-78175](https://github.com/godotengine/godot/pull/78175)).
|
||||
- Windows: Fix for Win+M crashing the editor ([GH-78235](https://github.com/godotengine/godot/pull/78235)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Fix typo in FinalAction `switch` statement in RenderingDevice ([GH-75945](https://github.com/godotengine/godot/pull/75945)).
|
||||
- Fix modulation propagation for Y-sorted CanvasItems ([GH-77079](https://github.com/godotengine/godot/pull/77079)).
|
||||
- Fix LightmapGI dynamic object lighting ([GH-77089](https://github.com/godotengine/godot/pull/77089)).
|
||||
- Fix calculation of skinned AABB for unused bones ([GH-77265](https://github.com/godotengine/godot/pull/77265)).
|
||||
- Fix uninitialized Y-sort modulate for CanvasItems ([GH-78134](https://github.com/godotengine/godot/pull/78134)).
|
||||
|
||||
|
||||
## [4.0.3] - 2023-05-19
|
||||
|
||||
See the [release announcement](https://godotengine.org/article/maintenance-release-godot-4-0-3) for details.
|
||||
|
||||
### Added
|
||||
|
||||
#### 2D
|
||||
|
||||
- Add info label to TileMap editor ([GH-68800](https://github.com/godotengine/godot/pull/68800)).
|
||||
|
||||
#### Documentation
|
||||
|
||||
- Create an "Editor-only" section in the online class reference ([GH-76410](https://github.com/godotengine/godot/pull/76410)).
|
||||
- Improve RenderingServer, RenderingDevice, ShaderGlobalsOverride documentation ([GH-76008](https://github.com/godotengine/godot/pull/76008)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Properly remember snapping options per-project ([GH-74682](https://github.com/godotengine/godot/pull/74682)).
|
||||
- Remember directory when installing templates file ([GH-74735](https://github.com/godotengine/godot/pull/74735)).
|
||||
- Improve editor state initialization ([GH-75563](https://github.com/godotengine/godot/pull/75563)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Allow entering named colors in ColorPicker's hex field ([GH-75905](https://github.com/godotengine/godot/pull/75905)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Expose NavigationAgent path postprocessing and pathfinding algorithm options ([GH-75326](https://github.com/godotengine/godot/pull/75326)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Warn when a concave polygon is assigned to ConvexPolygonShape2D ([GH-56671](https://github.com/godotengine/godot/pull/56671)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Expose viewports render target RID ([GH-75517](https://github.com/godotengine/godot/pull/75517)).
|
||||
- Allow creation of rendering buffers at any time ([GH-75937](https://github.com/godotengine/godot/pull/75937)).
|
||||
|
||||
### Changed
|
||||
|
||||
#### 3D
|
||||
|
||||
- Use physical shortcuts for freelook navigation in the editor ([GH-73651](https://github.com/godotengine/godot/pull/73651)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- Err when trying to build the editor without its required modules ([GH-74980](https://github.com/godotengine/godot/pull/74980)).
|
||||
- Enable shadow warnings and fix raised errors ([GH-76946](https://github.com/godotengine/godot/pull/76946)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Truncate instead of round in Vector2/3/4 to Vector2I/3I/4I conversion ([GH-75477](https://github.com/godotengine/godot/pull/75477)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Lift restriction that resource load thread requester has to be the initiator ([GH-73862](https://github.com/godotengine/godot/pull/73862)).
|
||||
- Rename internal root canvas group to start with underscore ([GH-76149](https://github.com/godotengine/godot/pull/76149)).
|
||||
- Make acos and asin safe ([GH-76906](https://github.com/godotengine/godot/pull/76906)).
|
||||
|
||||
#### Documentation
|
||||
|
||||
- Exclude overridden properties from Property Descriptions section ([GH-77027](https://github.com/godotengine/godot/pull/77027)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Prevent off-screen controls in editor ([GH-73646](https://github.com/godotengine/godot/pull/73646)).
|
||||
- Re-enable script editor File menu shortcuts when the menu is hidden ([GH-74319](https://github.com/godotengine/godot/pull/74319)).
|
||||
- Prevent color conversion of the big Godot logo ([GH-75653](https://github.com/godotengine/godot/pull/75653)).
|
||||
- Set font sizes for various styles in editor output panel ([GH-75780](https://github.com/godotengine/godot/pull/75780)).
|
||||
- Adjust size of some dialogs ([GH-75895](https://github.com/godotengine/godot/pull/75895)).
|
||||
- Change cursor consistently when panning in the 2D Editor ([GH-75997](https://github.com/godotengine/godot/pull/75997)).
|
||||
- Validate renderer selection in project manager and expose default renderer setting as an enum ([GH-76331](https://github.com/godotengine/godot/pull/76331)).
|
||||
- Close built-in shaders when closing scene ([GH-75864](https://github.com/godotengine/godot/pull/75864)).
|
||||
- Command Palette search now also uses original English command names ([GH-76523](https://github.com/godotengine/godot/pull/76523)).
|
||||
- Preserve scene unique names when saving branch as scene ([GH-76609](https://github.com/godotengine/godot/pull/76609)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Ignore invisible children of GraphNode for minimum size ([GH-72240](https://github.com/godotengine/godot/pull/72240)).
|
||||
- Update `TextureProgressBar` upon texture changes ([GH-75532](https://github.com/godotengine/godot/pull/75532)).
|
||||
- Keep a copy of UTF-8 XML source string during the SVG font processing ([GH-75675](https://github.com/godotengine/godot/pull/75675)).
|
||||
- Always cache parent visibility in `CanvasItem` ([GH-75890](https://github.com/godotengine/godot/pull/75890)).
|
||||
- Improve BiDi error handling in TextServer ([GH-75922](https://github.com/godotengine/godot/pull/75922)).
|
||||
- Use dedicated flag for object replacement characters in TextServer ([GH-75974](https://github.com/godotengine/godot/pull/75974)).
|
||||
- Improve line BiDi handling, prevent crash on recursive log updates ([GH-75975](https://github.com/godotengine/godot/pull/75975)).
|
||||
- Don't apply scale to autohide theme property ([GH-75993](https://github.com/godotengine/godot/pull/75993)).
|
||||
|
||||
#### Import
|
||||
|
||||
- gltf: Remove obsolete hack to embed gltf textures in advanced import ([GH-75636](https://github.com/godotengine/godot/pull/75636)).
|
||||
- Expose more compression formats in Image and fix compress check ([GH-76014](https://github.com/godotengine/godot/pull/76014)).
|
||||
- Use DXT1 when compressing PNGs with RGB format ([GH-76516](https://github.com/godotengine/godot/pull/76516)).
|
||||
- gltf: Permit sparse accessors without a bufferView ([GH-76875](https://github.com/godotengine/godot/pull/76875)).
|
||||
|
||||
#### Networking
|
||||
|
||||
- Poll LSP/DAP clients for connection status updates ([GH-75850](https://github.com/godotengine/godot/pull/75850)).
|
||||
|
||||
#### Particles
|
||||
|
||||
- Translate inactive GPUParticles3D particles to -INF ([GH-75162](https://github.com/godotengine/godot/pull/75162)).
|
||||
- Use `angle_rand` to calculate `base_angle` in particles process material ([GH-75999](https://github.com/godotengine/godot/pull/75999)).
|
||||
- Don't store instance transform origin in RD 3D renderer unless requested ([GH-76003](https://github.com/godotengine/godot/pull/76003)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Modify `contact_max_allowed_penetration` precision to 3 significant digits ([GH-75665](https://github.com/godotengine/godot/pull/75665)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Downgrade Android gradle plugin to version 7.2.1 ([GH-76325](https://github.com/godotengine/godot/pull/76325)).
|
||||
- Linux: Ensure WindowData minimized/maximized are mutually exclusive ([GH-76868](https://github.com/godotengine/godot/pull/76868)).
|
||||
- Linux: Don't use udev for joypad hotloading when running in a sandbox ([GH-76961](https://github.com/godotengine/godot/pull/76961)).
|
||||
- Windows: Support long path in file access ([GH-76739](https://github.com/godotengine/godot/pull/76739)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Recreate swap chain when suboptimal to avoid error spam ([GH-72859](https://github.com/godotengine/godot/pull/72859)).
|
||||
- Use `MODELVIEW_MATRIX` when on double precision ([GH-75462](https://github.com/godotengine/godot/pull/75462)).
|
||||
- Check for instancing without relying on `instance_count` when drawing 2D meshes ([GH-75954](https://github.com/godotengine/godot/pull/75954)).
|
||||
|
||||
#### Shaders
|
||||
|
||||
- Write out `render_mode` even when mode is set to default in VisualShaders ([GH-75957](https://github.com/godotengine/godot/pull/75957)).
|
||||
|
||||
#### Thirdparty
|
||||
|
||||
- astcenc updated to 4.4.0.
|
||||
- doctest updated to 2.4.11.
|
||||
- mbedtls updated to 2.28.3.
|
||||
- thorvg updated to 0.9.0.
|
||||
- CA root certificates updated to 2023-03-23 bundle from Mozilla.
|
||||
|
||||
### Fixed
|
||||
|
||||
#### 2D
|
||||
|
||||
- Fix RemoteTransform2D could fail to update AnimatableBody2D's position or rotation ([GH-75487](https://github.com/godotengine/godot/pull/75487)).
|
||||
- Fix rendering odd-sized tiles ([GH-74814](https://github.com/godotengine/godot/pull/74814)).
|
||||
- Fix TouchScreenButton not redrawn when texture changes ([GH-75016](https://github.com/godotengine/godot/pull/75016)).
|
||||
|
||||
#### 3D
|
||||
|
||||
- 3D: Fixes to CSG robustness ([GH-74771](https://github.com/godotengine/godot/pull/74771)).
|
||||
- 3D: Fix infinite loop in CSG `Build2DFaces::_find_edge_intersections` ([GH-76521](https://github.com/godotengine/godot/pull/76521)).
|
||||
- 3D: Fix `SurfaceTool::create_from_blend_shape()` ([GH-76669](https://github.com/godotengine/godot/pull/76669)).
|
||||
|
||||
#### Animation
|
||||
|
||||
- Fix `blend_shape` (shapekey) empty name import ([GH-75990](https://github.com/godotengine/godot/pull/75990)).
|
||||
|
||||
#### Audio
|
||||
|
||||
- Fix crash caused by invalid `mix_rate` assignment due to bogus project settings ([GH-69833](https://github.com/godotengine/godot/pull/69833)).
|
||||
- Fix AudioStreamPlayer2D crash when PhysicsServer2D runs on thread ([GH-75728](https://github.com/godotengine/godot/pull/75728)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- Fix the Python type error when creating the `.sln` file ([GH-75309](https://github.com/godotengine/godot/pull/75309)).
|
||||
- Fix forced optimization in `dev_build` ([GH-75909](https://github.com/godotengine/godot/pull/75909)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Fix the UID field of the tscn/res file is lost when the external dependency is updated ([GH-70234](https://github.com/godotengine/godot/pull/70234)).
|
||||
- Fix invalid global position when read outside tree ([GH-75509](https://github.com/godotengine/godot/pull/75509)).
|
||||
- Fix moving position indicator out of bounds in FileAccessMemory ([GH-75641](https://github.com/godotengine/godot/pull/75641)).
|
||||
- Fix expected argument count in Callable call error text ([GH-76259](https://github.com/godotengine/godot/pull/76259)).
|
||||
- Fix lerp error message ([GH-76314](https://github.com/godotengine/godot/pull/76314)).
|
||||
- Make `LocalVector` respect its `tight` template parameter ([GH-64120](https://github.com/godotengine/godot/pull/64120)).
|
||||
- Prevent errors when using ViewportTexture ([GH-75751](https://github.com/godotengine/godot/pull/75751)).
|
||||
- Fix size error in `BitMap.opaque_to_polygons` ([GH-76536](https://github.com/godotengine/godot/pull/76536)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Fix off-by-one issue where "Go to Line" dialog shows the incorrect line number ([GH-75523](https://github.com/godotengine/godot/pull/75523)).
|
||||
- Fix UI responsiveness to touch taps ([GH-75703](https://github.com/godotengine/godot/pull/75703)).
|
||||
- Fix deserializing resource usage debug data ([GH-75782](https://github.com/godotengine/godot/pull/75782)).
|
||||
- Initialize editor values on first launch ([GH-75799](https://github.com/godotengine/godot/pull/75799)).
|
||||
- Fix connect signal dialog not allowing Unicode method name ([GH-75814](https://github.com/godotengine/godot/pull/75814)).
|
||||
- Fix method dialog label ([GH-75844](https://github.com/godotengine/godot/pull/75844)).
|
||||
- Fix editor spin slider remaining editable if set `read_only` while editing ([GH-76122](https://github.com/godotengine/godot/pull/76122)).
|
||||
- Fix layout list not resizing in editor layout dialog ([GH-76364](https://github.com/godotengine/godot/pull/76364)).
|
||||
- Fix `line_spacing` in code editor will not take effect immediately on change ([GH-76396](https://github.com/godotengine/godot/pull/76396)).
|
||||
- Fix inconsistent file dialog settings usage ([GH-76421](https://github.com/godotengine/godot/pull/76421)).
|
||||
- Fix Node arrays appear as Object arrays in the inspector ([GH-76530](https://github.com/godotengine/godot/pull/76530)).
|
||||
- Fix CollisionShape2D editor crashes ([GH-76546](https://github.com/godotengine/godot/pull/76546), [GH-76798](https://github.com/godotengine/godot/pull/76798)).
|
||||
- Fix 2D shader preview draws over uniform ([GH-76555](https://github.com/godotengine/godot/pull/76555)).
|
||||
- Fix crash when trying to create bones from Control ([GH-77160](https://github.com/godotengine/godot/pull/77160)).
|
||||
|
||||
#### Export
|
||||
|
||||
- Fix validation of codesigning certificate password on macOS ([GH-74326](https://github.com/godotengine/godot/pull/74326)).
|
||||
|
||||
#### GDExtension
|
||||
|
||||
- Add missing bindings and documentation for MultiplayerPeerExtension ([GH-75116](https://github.com/godotengine/godot/pull/75116)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Add missing member type check when resolving `extends` ([GH-75879](https://github.com/godotengine/godot/pull/75879)).
|
||||
- Fix typo in LSP parse function parameters ([GH-76090](https://github.com/godotengine/godot/pull/76090)).
|
||||
- Fix inner method variable rename in LSP ([GH-76095](https://github.com/godotengine/godot/pull/76095)).
|
||||
- Fix multi-line string highlighting with single quotes ([GH-76170](https://github.com/godotengine/godot/pull/76170)).
|
||||
- Fix mixed tabs and spaces issues ([GH-76286](https://github.com/godotengine/godot/pull/76286)).
|
||||
- Fix wrong file name on function call error ([GH-76404](https://github.com/godotengine/godot/pull/76404)).
|
||||
- Don't fail when freed object is returned ([GH-76483](https://github.com/godotengine/godot/pull/76483)).
|
||||
- Don't send empty LSP completion command ([GH-76790](https://github.com/godotengine/godot/pull/76790)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Fix RichTextLabel wrong selection offset in padded table cell ([GH-71742](https://github.com/godotengine/godot/pull/71742)).
|
||||
- Fix commenting collapsed function issue ([GH-75070](https://github.com/godotengine/godot/pull/75070)).
|
||||
- Fix fill align and trim with enabled dropcap in `RichTextLabel` ([GH-75504](https://github.com/godotengine/godot/pull/75504)).
|
||||
- Fix descriptions not showing for theme properties ([GH-75559](https://github.com/godotengine/godot/pull/75559)).
|
||||
- Fix some theme values affect the editor by setting a default value for them ([GH-75566](https://github.com/godotengine/godot/pull/75566)).
|
||||
- Fix several GraphEdit operations at zoom levels other than 100% ([GH-75595](https://github.com/godotengine/godot/pull/75595)).
|
||||
- Fix offset calculation in Tree when there are hidden items ([GH-75977](https://github.com/godotengine/godot/pull/75977)).
|
||||
- Add missing LineEdit constants in editor theme ([GH-76123](https://github.com/godotengine/godot/pull/76123)).
|
||||
- Fix blurry borders on antialiased StyleBoxFlat ([GH-76132](https://github.com/godotengine/godot/pull/76132)).
|
||||
- Fix fractional ascent for image fonts with odd height ([GH-76136](https://github.com/godotengine/godot/pull/76136)).
|
||||
- Fix right click in selection of additional caret ([GH-76472](https://github.com/godotengine/godot/pull/76472)).
|
||||
|
||||
#### Import
|
||||
|
||||
- SVG: Fix `tvg::Picture->size()` and scale based errors ([GH-75034](https://github.com/godotengine/godot/pull/75034)).
|
||||
- Fix OBJ mesh importer smoothing handling ([GH-75315](https://github.com/godotengine/godot/pull/75315)).
|
||||
- Fix animation silhouette using incorrect index ([GH-76499](https://github.com/godotengine/godot/pull/76499)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Fix guide button detection with XInput and Xbox Series controllers ([GH-73200](https://github.com/godotengine/godot/pull/73200)).
|
||||
- Fix the issue preventing dragging in the 2D editor ([GH-75113](https://github.com/godotengine/godot/pull/75113)).
|
||||
- Fix keycode/physical keycode mix up on web ([GH-75738](https://github.com/godotengine/godot/pull/75738)).
|
||||
- Fix potential null in android text entry system ([GH-75991](https://github.com/godotengine/godot/pull/75991)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Fix NavigationObstacles not being added to avoidance simulation ([GH-75756](https://github.com/godotengine/godot/pull/75756)).
|
||||
- Fix NavigationMesh baking for HeightMapShape ([GH-76212](https://github.com/godotengine/godot/pull/76212)).
|
||||
|
||||
#### Networking
|
||||
|
||||
- Fix crashes trying to use TLS when not available ([GH-77011](https://github.com/godotengine/godot/pull/77011)).
|
||||
|
||||
#### Particles
|
||||
|
||||
- Properly calculate lifetime_split for particles ([GH-73313](https://github.com/godotengine/godot/pull/73313)).
|
||||
- Fix "error X3708: continue cannot be used in a switch" in HTML export ([GH-75795](https://github.com/godotengine/godot/pull/75795)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Fix typo bug in convex-convex separating axis test ([GH-75835](https://github.com/godotengine/godot/pull/75835)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Fix issue with resizing the display when using the compatibility renderer ([GH-76464](https://github.com/godotengine/godot/pull/76464)).
|
||||
- Android: Allow concurrent buffering and dispatch of input events ([GH-76399](https://github.com/godotengine/godot/pull/76399)).
|
||||
- Android: Fix double tap & drag on Android ([GH-76791](https://github.com/godotengine/godot/pull/76791)).
|
||||
- iOS: Fix splash screen rotation ([GH-76037](https://github.com/godotengine/godot/pull/76037)).
|
||||
- iOS: Fix loading of GDExtension dylibs auto converted to framework ([GH-76510](https://github.com/godotengine/godot/pull/76510)).
|
||||
- Windows: Fix clipboard relying on focused window ([GH-73878](https://github.com/godotengine/godot/pull/73878)).
|
||||
- Windows: Fix queuing utterances in rapid succession ([GH-75880](https://github.com/godotengine/godot/pull/75880)).
|
||||
- Windows: Cleanup COM library initialization/uninitialization ([GH-75881](https://github.com/godotengine/godot/pull/75881)).
|
||||
- Windows: Fix StringFileInfo structure ([GH-76001](https://github.com/godotengine/godot/pull/76001)).
|
||||
- Windows: Add mono audio support to WASAPI ([GH-76541](https://github.com/godotengine/godot/pull/76541)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Fix interpolation of R0 for metallic and calculation of the Fresnel Shlick term in SSR ([GH-75368](https://github.com/godotengine/godot/pull/75368)).
|
||||
- Fix `get_test_texture()` returning an almost fully white texture ([GH-75632](https://github.com/godotengine/godot/pull/75632)).
|
||||
- Ensure that depth write state is updated before transparent pass in OpenGL3 renderer ([GH-75968](https://github.com/godotengine/godot/pull/75968)).
|
||||
- Fix editor lock on SDF collision bake on error ([GH-76257](https://github.com/godotengine/godot/pull/76257)).
|
||||
- Fix issues with Vulkan layout transitions ([GH-76315](https://github.com/godotengine/godot/pull/76315)).
|
||||
- Fix breakages of volumetric fog on voxel GI changes ([GH-76437](https://github.com/godotengine/godot/pull/76437)).
|
||||
- Fix GLES3 rendering on Android studio emulator ([GH-74945](https://github.com/godotengine/godot/pull/74945)).
|
||||
- Fix more voxel GI issues ([GH-76550](https://github.com/godotengine/godot/pull/76550)).
|
||||
- Use proper UV in cubemap downsampler raster (Fixes reflections in mobile renderer) ([GH-76692](https://github.com/godotengine/godot/pull/76692)).
|
||||
|
||||
#### Shaders
|
||||
|
||||
- Fix crashes caused due to missing type specifier on visual shader editor ([GH-75809](https://github.com/godotengine/godot/pull/75809)).
|
||||
- Fix Shader Preprocessor line numbering when disabled ([GH-76479](https://github.com/godotengine/godot/pull/76479)).
|
||||
- Fix rotation issue with `NODE_POSITION_VIEW` shader built-in ([GH-76109](https://github.com/godotengine/godot/pull/76109)).
|
||||
|
||||
#### XR
|
||||
|
||||
- Fix incorrect HTC action map entries ([GH-74930](https://github.com/godotengine/godot/pull/74930)).
|
||||
|
||||
|
||||
## [4.0.2] - 2023-04-04
|
||||
|
||||
See the [release announcement](https://godotengine.org/article/maintenance-release-godot-4-0-2) for details.
|
||||
|
||||
### Added
|
||||
|
||||
#### Core
|
||||
|
||||
- Add a missing `ImageTextureLayered::_images` setter for the C# bindings ([GH-74668](https://github.com/godotengine/godot/pull/74668)).
|
||||
- Exposing more project settings for documentation ([GH-74727](https://github.com/godotengine/godot/pull/74727)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Expose the `apply_floor_snap` function to allow manual snap ([GH-73749](https://github.com/godotengine/godot/pull/73749)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Use the new API for virtual keyboard height detection on Android, bugfix for old API ([GH-74398](https://github.com/godotengine/godot/pull/74398)).
|
||||
- Android: Configure maven central snapshot versions for the Godot Android library ([GH-74470](https://github.com/godotengine/godot/pull/74470)).
|
||||
- Android: Add "filesRoot" path to Android provider paths xml ([GH-74673](https://github.com/godotengine/godot/pull/74673)).
|
||||
- macOS: Re-add support for the `_sc_` inside app bundle ([GH-73429](https://github.com/godotengine/godot/pull/73429)).
|
||||
|
||||
#### Project converter
|
||||
|
||||
- Add conversion for `Vector2` `tangent()` -> `orthogonal()` ([GH-74515](https://github.com/godotengine/godot/pull/74515)).
|
||||
- Add navigation renames to the converter ([GH-75513](https://github.com/godotengine/godot/pull/75513)).
|
||||
|
||||
#### Shaders
|
||||
|
||||
- Add drag and drop support for shader include files in shader editor ([GH-74869](https://github.com/godotengine/godot/pull/74869)).
|
||||
|
||||
#### XR
|
||||
|
||||
- Add `XRServer.world_origin` property ([GH-74151](https://github.com/godotengine/godot/pull/74151)).
|
||||
- Enable access to the Valve Index grip force sensors ([GH-74787](https://github.com/godotengine/godot/pull/74787)).
|
||||
|
||||
### Changed
|
||||
|
||||
#### 2D
|
||||
|
||||
- Use 8×8 default grid size for TextureRegion and 2D polygon editors ([GH-73685](https://github.com/godotengine/godot/pull/73685)).
|
||||
- Don't allow selecting nodes without owner in the editor ([GH-75492](https://github.com/godotengine/godot/pull/75492)).
|
||||
|
||||
#### Animation
|
||||
|
||||
- Update property keying state without a full Inspector rebuild ([GH-74564](https://github.com/godotengine/godot/pull/74564)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- Exit with non-zero status if there are issues with FreeType dependencies ([GH-74645](https://github.com/godotengine/godot/pull/74645)).
|
||||
- SCons: Cleanup `pulseaudio` defines for Linux ([GH-74666](https://github.com/godotengine/godot/pull/74666)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Encode `GodotProjectDir` as Base64 to prevent issues with special characters ([GH-74312](https://github.com/godotengine/godot/pull/74312)).
|
||||
- Do not print errors about missing references to intentionally ignored members ([GH-75284](https://github.com/godotengine/godot/pull/75284)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Make `Gradient` resort points on `reverse` ([GH-75235](https://github.com/godotengine/godot/pull/75235)).
|
||||
- Port robust signal (dis)connection to `ShapeCast2D` ([GH-75266](https://github.com/godotengine/godot/pull/75266)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Improve POT Generation dialog ([GH-74213](https://github.com/godotengine/godot/pull/74213)).
|
||||
- Hide internal settings from the class reference ([GH-74226](https://github.com/godotengine/godot/pull/74226)).
|
||||
- Remove disabled plugins from active plugins ([GH-75331](https://github.com/godotengine/godot/pull/75331)).
|
||||
- More i18n improvements ([GH-75385](https://github.com/godotengine/godot/pull/75385)).
|
||||
|
||||
#### Export
|
||||
|
||||
- Delete unused compression formats from `.import` files when exporting ([GH-74684](https://github.com/godotengine/godot/pull/74684)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Make GDScript number highlighting stricter ([GH-74184](https://github.com/godotengine/godot/pull/74184)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Improve layout direction/locale automatic selection ([GH-73716](https://github.com/godotengine/godot/pull/73716)).
|
||||
- Add mutex for FreeType face creation/deletion operations in TextServer ([GH-73987](https://github.com/godotengine/godot/pull/73987)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Remove `meta_mem` update on keyup/keydown on Windows ([GH-75172](https://github.com/godotengine/godot/pull/75172)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Revert attempted fix of trimesh CCD ([GH-74861](https://github.com/godotengine/godot/pull/74861)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Bump the target SDK version to 33 (Android 13) ([GH-75203](https://github.com/godotengine/godot/pull/75203)).
|
||||
|
||||
#### Project converter
|
||||
|
||||
- Remove Tween properties/signals from renames ([GH-75443](https://github.com/godotengine/godot/pull/75443)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Incorporating the availability of screen and depth textures for the GLES3 backend ([GH-72361](https://github.com/godotengine/godot/pull/72361)).
|
||||
|
||||
#### Thirdparty
|
||||
|
||||
- mymindstorm/setup-emsdk updated to 12.
|
||||
|
||||
#### XR
|
||||
|
||||
- Replace OpenXR operating system alert dialog with a warning log message ([GH-73144](https://github.com/godotengine/godot/pull/73144)).
|
||||
- Check hardware sRGB conversion when an sRGB target is used ([GH-74892](https://github.com/godotengine/godot/pull/74892)).
|
||||
|
||||
### Fixed
|
||||
|
||||
#### 2D
|
||||
|
||||
- Fix preview rendering and transform calculations in the tiles editor ([GH-74982](https://github.com/godotengine/godot/pull/74982)).
|
||||
- Fix `ENTER_CANVAS` / `VISIBILITY_CHANGED` notification order when `CanvasItem` enters tree ([GH-75238](https://github.com/godotengine/godot/pull/75238)).
|
||||
- Fix a crash in the tiles editor when merging atlases ([GH-75361](https://github.com/godotengine/godot/pull/75361)).
|
||||
|
||||
#### 3D
|
||||
|
||||
- Fix GridMap signal `cell_size_changed` disconnect error ([GH-74890](https://github.com/godotengine/godot/pull/74890)).
|
||||
|
||||
#### Animation
|
||||
|
||||
- Fix `AnimatedSprite2D` autoplay warning ([GH-75258](https://github.com/godotengine/godot/pull/75258)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- Fix xml namespace in org.godotengine.Godot.xml ([GH-74920](https://github.com/godotengine/godot/pull/74920)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Fix building projects for MSBuild before 17.3 ([GH-74479](https://github.com/godotengine/godot/pull/74479)).
|
||||
- Fix `Array.AddRange` index out of bounds ([GH-75357](https://github.com/godotengine/godot/pull/75357)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Fix some race conditions that happen during initialization ([GH-73793](https://github.com/godotengine/godot/pull/73793)).
|
||||
- Fix crash in resource load ([GH-74166](https://github.com/godotengine/godot/pull/74166)).
|
||||
- Fix `randfn` to prevent it from generating nan values ([GH-74248](https://github.com/godotengine/godot/pull/74248)).
|
||||
- Fix Variant hashing for floats ([GH-74600](https://github.com/godotengine/godot/pull/74600)).
|
||||
- Fix type check for `max`/`min` ([GH-74770](https://github.com/godotengine/godot/pull/74770)).
|
||||
- Fix `Array.slice()` rounding when step is other than 1 ([GH-74909](https://github.com/godotengine/godot/pull/74909)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Fix cancelling selection while gizmo editing making uncommitted changes ([GH-71156](https://github.com/godotengine/godot/pull/71156)).
|
||||
- Fix `EditorUndoRedoManager`'s handling of `MERGE_ENDS` ([GH-74460](https://github.com/godotengine/godot/pull/74460)).
|
||||
- Fix built-in scripts missing their methods on signal connection ([GH-74495](https://github.com/godotengine/godot/pull/74495)).
|
||||
- Fix "Download Project Source" for the Web Editor ([GH-75194](https://github.com/godotengine/godot/pull/75194)).
|
||||
- Fix incorrect sizes of some editor elements ([GH-75379](https://github.com/godotengine/godot/pull/75379), [GH-75381](https://github.com/godotengine/godot/pull/75381)).
|
||||
|
||||
#### Export
|
||||
|
||||
- Fix GDExtensions library export when multiple architectures are set ([GH-74057](https://github.com/godotengine/godot/pull/74057)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Fix "Find in Files" search results not opening built-in script ([GH-74401](https://github.com/godotengine/godot/pull/74401)).
|
||||
- Fix false positive `REDUNDANT_AWAIT` warning ([GH-74949](https://github.com/godotengine/godot/pull/74949)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Fix scrolling behavior with zero/low page value ([GH-67910](https://github.com/godotengine/godot/pull/67910)).
|
||||
- Fix some ways to create inconsistent Viewport size states ([GH-73188](https://github.com/godotengine/godot/pull/73188)).
|
||||
- Fix `GraphNode` resizing when its bottom border is too thin ([GH-73800](https://github.com/godotengine/godot/pull/73800)).
|
||||
- Fix IME position in the single window mode sub-windows ([GH-74472](https://github.com/godotengine/godot/pull/74472)).
|
||||
- Fix gutter set width results in receiving only half of the desired size ([GH-74537](https://github.com/godotengine/godot/pull/74537)).
|
||||
- Fix `get_drag_data` not overridable in some Controls ([GH-75122](https://github.com/godotengine/godot/pull/75122)).
|
||||
- Fix block caret size at the end of the line ([GH-75597](https://github.com/godotengine/godot/pull/75597)).
|
||||
|
||||
#### Import
|
||||
|
||||
- Fix `ResourceImporterLayeredTexture::import()` `high_quality` variable type ([GH-75244](https://github.com/godotengine/godot/pull/75244)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Fix layout bug in `keyboard_get_keycode_from_physical` on Linux/X11 ([GH-75461](https://github.com/godotengine/godot/pull/75461)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Fix GridMap free navigation RID error spam ([GH-74889](https://github.com/godotengine/godot/pull/74889)).
|
||||
- Fix agents with disabled avoidance getting added to avoidance simulation ([GH-74893](https://github.com/godotengine/godot/pull/74893)).
|
||||
|
||||
#### Networking
|
||||
|
||||
- Fix list handling in `SceneReplicationConfig` ([GH-74552](https://github.com/godotengine/godot/pull/74552)).
|
||||
|
||||
#### Physics
|
||||
|
||||
- Fix `collide_shape` return type ([GH-75260](https://github.com/godotengine/godot/pull/75260)).
|
||||
- Fix property hint for platform layers on 3D physics body ([GH-75544](https://github.com/godotengine/godot/pull/75544)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Fix directory access when the running app has the `All files access` permission ([GH-75146](https://github.com/godotengine/godot/pull/75146)).
|
||||
- macOS: Fix infinite loop caused by global menu callbacks which trigger EditorProgress dialog ([GH-75254](https://github.com/godotengine/godot/pull/75254)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Fix spotlight shadows in volumetric fog ([GH-73919](https://github.com/godotengine/godot/pull/73919)).
|
||||
- Fix issues with point size not functioning correctly in GLES3 ([GH-73966](https://github.com/godotengine/godot/pull/73966)).
|
||||
- Update GPUParticles2D/3D speed scale on `ENTER_TREE` ([GH-75398](https://github.com/godotengine/godot/pull/75398)).
|
||||
|
||||
#### Shaders
|
||||
|
||||
- Fix ndc calculation for LinearSceneDepth VS node in GLES3 ([GH-74910](https://github.com/godotengine/godot/pull/74910)).
|
||||
|
||||
#### XR
|
||||
|
||||
- Fix typo in OpenXR pose orientation check ([GH-74928](https://github.com/godotengine/godot/pull/74928)).
|
||||
|
||||
|
||||
## [4.0.1] - 2023-03-20
|
||||
|
||||
See the [release announcement](https://godotengine.org/article/maintenance-release-godot-4-0-1) for details.
|
||||
|
||||
### Added
|
||||
|
||||
#### Import
|
||||
|
||||
- Set the unlit / unshaded extension when importing / exporting glTF ([GH-74287](https://github.com/godotengine/godot/pull/74287)).
|
||||
|
||||
#### Project converter
|
||||
|
||||
- Add keycode project conversion ([GH-74237](https://github.com/godotengine/godot/pull/74237)).
|
||||
- Add conversion for common Theme Overrides ([GH-74624](https://github.com/godotengine/godot/pull/74624)).
|
||||
- Move tool declarations to top ([GH-74432](https://github.com/godotengine/godot/pull/74432)).
|
||||
|
||||
#### Tilemaps
|
||||
|
||||
- Remember previously selected TileMap tile ([GH-74039](https://github.com/godotengine/godot/pull/74039)).
|
||||
|
||||
### Changed
|
||||
|
||||
#### Animation
|
||||
|
||||
- Check for type mismatch in `PropertyTweener.from()` ([GH-74112](https://github.com/godotengine/godot/pull/74112)).
|
||||
|
||||
#### Buildsystem
|
||||
|
||||
- Safeguard Makefile commands for documentation ([GH-74042](https://github.com/godotengine/godot/pull/74042)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Always show "Create C# solution" option ([GH-73904](https://github.com/godotengine/godot/pull/73904)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Propagate errors when creating an OpenGL context fails in X11 ([GH-74563](https://github.com/godotengine/godot/pull/74563)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Automatically reparent editor message dialogs to avoid error spam ([GH-73365](https://github.com/godotengine/godot/pull/73365)).
|
||||
- Translate strings which were previously missed ([GH-74211](https://github.com/godotengine/godot/pull/74211), [GH-74637](https://github.com/godotengine/godot/pull/74637)).
|
||||
- Disallow creating a project in the Home or Documents folder ([GH-74964](https://github.com/godotengine/godot/pull/74964)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Don't autocomplete numbers ([GH-74466](https://github.com/godotengine/godot/pull/74466)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Assume outline size is 1 if it's not set, but channel for outline is defined in a BitMap font ([GH-74212](https://github.com/godotengine/godot/pull/74212)).
|
||||
- Do not draw virtual spaces (word break / justification points) ([GH-74488](https://github.com/godotengine/godot/pull/74488)).
|
||||
- Generate empty textures for theme icons if the SVG module is disabled ([GH-74551](https://github.com/godotengine/godot/pull/74551)).
|
||||
- Add invalid font scaling check, restrict Linux/BSD system fonts lookup to TrueType/CFF only ([GH-74702](https://github.com/godotengine/godot/pull/74702)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Update modifier key status during IME input on Windows ([GH-74474](https://github.com/godotengine/godot/pull/74474)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Allow negative NavigationAgent2D path debug line_width for thin lines ([GH-74800](https://github.com/godotengine/godot/pull/74800)).
|
||||
|
||||
#### Project converter
|
||||
|
||||
- Do not convert lines that start with a comment ([GH-74193](https://github.com/godotengine/godot/pull/74193)).
|
||||
- Don't strip whitespace when converting ([GH-74232](https://github.com/godotengine/godot/pull/74232)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Use MSAA 2D texture in multipass tonemapper ([GH-74150](https://github.com/godotengine/godot/pull/74150)).
|
||||
- Use linear filtering without mipmaps for ProceduralSkyMaterial and PhysicalSkyMaterial ([GH-74740](https://github.com/godotengine/godot/pull/74740)).
|
||||
|
||||
### Fixed
|
||||
|
||||
#### Audio
|
||||
|
||||
- Improve logic related to editing audio buses and prevent crashes ([GH-74560](https://github.com/godotengine/godot/pull/74560)).
|
||||
|
||||
#### C#/.NET
|
||||
|
||||
- Fix crash when errors occur before language initialization ([GH-74127](https://github.com/godotengine/godot/pull/74127)).
|
||||
- Get singleton instances using the Core name ([GH-74280](https://github.com/godotengine/godot/pull/74280)).
|
||||
- Ensure that script names (and therefore class names) are valid identifiers ([GH-74330](https://github.com/godotengine/godot/pull/74330)).
|
||||
- Ignore explicit interface implementations ([GH-74375](https://github.com/godotengine/godot/pull/74375)).
|
||||
|
||||
#### Core
|
||||
|
||||
- Set properties of ImageTexture3D when creating ([GH-74521](https://github.com/godotengine/godot/pull/74521)).
|
||||
- Fix buffer overrun in CPUParticles3D in `precision=double` builds ([GH-74555](https://github.com/godotengine/godot/pull/74555)).
|
||||
- Prevent crashing on startup if project has scripted theme types ([GH-74565](https://github.com/godotengine/godot/pull/74565)).
|
||||
|
||||
#### Editor
|
||||
|
||||
- Disable local space for Blender-style transforms ([GH-59443](https://github.com/godotengine/godot/pull/59443), [GH-74601](https://github.com/godotengine/godot/pull/74601)).
|
||||
- Stop toaster notification circle flickering ([GH-74017](https://github.com/godotengine/godot/pull/74017)).
|
||||
- Fix dock name lost translation after layout change ([GH-74158](https://github.com/godotengine/godot/pull/74158)).
|
||||
- Fix crash when showing file in FileSystem dock ([GH-74591](https://github.com/godotengine/godot/pull/74591)).
|
||||
- Prevent cache corruption when saving resources in the editor ([GH-74615](https://github.com/godotengine/godot/pull/74615)).
|
||||
- Ensure that editor color map is initialized in the project manager ([GH-74750](https://github.com/godotengine/godot/pull/74750)).
|
||||
- Fix MultiNodeEdit not cleared after deleting nodes ([GH-74795](https://github.com/godotengine/godot/pull/74795)).
|
||||
- Fix error when opening Inspector's dots menu ([GH-74974](https://github.com/godotengine/godot/pull/74974)).
|
||||
|
||||
#### Export
|
||||
|
||||
- Fix various issues related to remote deploy and remote execute on Windows ([GH-74030](https://github.com/godotengine/godot/pull/74030)).
|
||||
|
||||
#### GDExtension
|
||||
|
||||
- Fix crash when dumping extension API in a non-writable directory ([GH-74590](https://github.com/godotengine/godot/pull/74590)).
|
||||
- Fix extension bindings for motion collision/result structs ([GH-74671](https://github.com/godotengine/godot/pull/74671)).
|
||||
|
||||
#### GDScript
|
||||
|
||||
- Fix error spam when naming a func at the end of the script ([GH-73410](https://github.com/godotengine/godot/pull/73410)).
|
||||
- Fix checking if a call is awaited in compiler ([GH-74147](https://github.com/godotengine/godot/pull/74147)).
|
||||
- Fix autocomplete inside a block with a type test condition ([GH-74689](https://github.com/godotengine/godot/pull/74689)).
|
||||
|
||||
#### GUI
|
||||
|
||||
- Fix RichTextLabel crash with out of bound exception ([GH-68325](https://github.com/godotengine/godot/pull/68325)).
|
||||
- Fix justification on punctuation characters ([GH-74477](https://github.com/godotengine/godot/pull/74477)).
|
||||
- Add missing handler for removing font sizes in the theme editor ([GH-74547](https://github.com/godotengine/godot/pull/74547)).
|
||||
|
||||
#### Import
|
||||
|
||||
- Fix glTF mesh importer not freeing nodes correctly on import ([GH-74018](https://github.com/godotengine/godot/pull/74018)).
|
||||
- Prevent infinite loop by disabling importer when canceling FBX2glTF setup ([GH-74293](https://github.com/godotengine/godot/pull/74293)).
|
||||
- Fix blend-file import when using custom color management in blender ([GH-74496](https://github.com/godotengine/godot/pull/74496)).
|
||||
|
||||
#### Input
|
||||
|
||||
- Fix InputEventConfigurationDialog modifies original event ([GH-74858](https://github.com/godotengine/godot/pull/74858)).
|
||||
|
||||
#### Navigation
|
||||
|
||||
- Fix NavigationAgent3D debug path duplicated points ([GH-74976](https://github.com/godotengine/godot/pull/74976)).
|
||||
|
||||
#### Porting
|
||||
|
||||
- Android: Fix null-pointer dereference when using `gl_compatibility` renderer ([GH-74781](https://github.com/godotengine/godot/pull/74781)).
|
||||
- Linux/X11: Check if required xkb functions exist before using it ([GH-74222](https://github.com/godotengine/godot/pull/74222)).
|
||||
- Linux/X11: Fix broken shortcut key input ([GH-74535](https://github.com/godotengine/godot/pull/74535)).
|
||||
|
||||
#### Project converter
|
||||
|
||||
- Correct superclass constructors ([GH-74354](https://github.com/godotengine/godot/pull/74354)).
|
||||
- Add parentheses around arguments when converting `xform` ([GH-74693](https://github.com/godotengine/godot/pull/74693)).
|
||||
|
||||
#### Rendering
|
||||
|
||||
- Add proper default texture filter and repeat modes for Canvas shaders in the OpenGL3 renderer ([GH-74315](https://github.com/godotengine/godot/pull/74315)).
|
||||
- Fix instance uniforms breaking when setting a new mesh ([GH-74349](https://github.com/godotengine/godot/pull/74349)).
|
||||
- Fix AABB calculation for meshes using Skeleton2D ([GH-74416](https://github.com/godotengine/godot/pull/74416)).
|
||||
- Avoid overflow when calculating ptr address for 3D textures in RenderingDevice texture update ([GH-74526](https://github.com/godotengine/godot/pull/74526)).
|
||||
- Fixes a canvas item set to clip children being drawn as black if no children are visible ([GH-74533](https://github.com/godotengine/godot/pull/74533)).
|
||||
- Avoid copying CanvasTexture when updating proxy ([GH-74566](https://github.com/godotengine/godot/pull/74566)).
|
||||
|
||||
#### Tilemaps
|
||||
|
||||
- Fix TileSetEditor painting `texture_origin` Vector2i ([GH-73514](https://github.com/godotengine/godot/pull/73514)).
|
||||
|
||||
|
||||
## [4.0] - 2023-03-01
|
||||
|
||||
The Godot 4.0 release was our biggest released to date, spanning 4 years of
|
||||
|
@ -791,7 +1657,7 @@ See the [release announcement](https://godotengine.org/article/godot-3-4-is-rele
|
|||
|
||||
#### Thirdparty
|
||||
|
||||
- Bullet uppdated to version 3.17.
|
||||
- Bullet updated to version 3.17.
|
||||
- Embree updated to version 3.13.0.
|
||||
- MbedTLS updated to version 2.16.11 (security update).
|
||||
- NanoSVG updated to 2021-09-03 git snapshot (security update).
|
||||
|
@ -932,7 +1798,7 @@ See the [release announcement](https://godotengine.org/article/godot-3-4-is-rele
|
|||
- Fix and clean disabled shapes handling in Godot physics servers ([GH-49845](https://github.com/godotengine/godot/pull/49845)).
|
||||
- Fix `KinematicBody` axis lock ([GH-45176](https://github.com/godotengine/godot/pull/45176)).
|
||||
- Don't override `KinematicCollision` reference when still in use in script ([GH-52955](https://github.com/godotengine/godot/pull/52955)).
|
||||
- Fix ragdoll simulation when parent was readded to scene ([GH-48823](https://github.com/godotengine/godot/pull/48823)).
|
||||
- Fix ragdoll simulation when parent was re-added to scene ([GH-48823](https://github.com/godotengine/godot/pull/48823)).
|
||||
- Ignore disabled shapes for mass property calculations ([GH-49699](https://github.com/godotengine/godot/pull/49699)).
|
||||
|
||||
#### Porting
|
||||
|
@ -1333,7 +2199,7 @@ See the [release announcement](https://godotengine.org/article/godot-3-3-has-arr
|
|||
- Support for automatically building Android templates before exporting.
|
||||
- This makes 3rd-party SDK integration easier.
|
||||
- Support for [texture atlases in 2D](https://godotengine.org/article/atlas-support-returns-godot-3-2).
|
||||
- Major improvements to the visual shader system. ([News post 1](https://godotengine.org/article/major-update-for-visual-shader-in-godot-3-2), [News post 2](https://godotengine.org/article/major-update-visual-shaders-godot-3-2-part-2))
|
||||
- Major improvements to the visual shader system ([News post 1](https://godotengine.org/article/major-update-for-visual-shader-in-godot-3-2), [News post 2](https://godotengine.org/article/major-update-visual-shaders-godot-3-2-part-2)).
|
||||
- Redesigned visual shader editor with drag-and-drop capability.
|
||||
- Textures can be dragged from the FileSystem dock to be added as nodes.
|
||||
- Most functions available in GLSL are now exposed.
|
||||
|
@ -2440,6 +3306,10 @@ See the [release announcement](https://godotengine.org/article/godot-3-3-has-arr
|
|||
- Only WebAssembly is supported now, since all browsers supporting WebGL 2.0 also support WebAssembly.
|
||||
|
||||
|
||||
[4.0.4]: https://github.com/godotengine/godot/compare/4.0.3-stable...4.0.4-stable
|
||||
[4.0.3]: https://github.com/godotengine/godot/compare/4.0.2-stable...4.0.3-stable
|
||||
[4.0.2]: https://github.com/godotengine/godot/compare/4.0.1-stable...4.0.2-stable
|
||||
[4.0.1]: https://github.com/godotengine/godot/compare/4.0-stable...4.0.1-stable
|
||||
[4.0]: https://github.com/godotengine/godot/compare/3.2-stable...4.0-stable
|
||||
[3.5]: https://github.com/godotengine/godot/compare/3.4-stable...3.5-stable
|
||||
[3.4]: https://github.com/godotengine/godot/compare/3.3-stable...3.4-stable
|
||||
|
|
|
@ -8,87 +8,10 @@
|
|||
- [Contributing to Godot's translation](#contributing-to-godots-translation)
|
||||
- [Communicating with developers](#communicating-with-developers)
|
||||
|
||||
**Please read the first section before reporting a bug!**
|
||||
|
||||
## Reporting bugs
|
||||
|
||||
The golden rule is to **always open *one* issue for *one* bug**. If you notice
|
||||
several bugs and want to report them, make sure to create one new issue for
|
||||
each of them.
|
||||
|
||||
If you're reporting a new bug, you'll make our life simpler (and the
|
||||
fix will come sooner) by following these guidelines:
|
||||
|
||||
### Search first in the existing database
|
||||
|
||||
Issues are often reported several times by various users. It's good practice to
|
||||
**search first in the [issue tracker](https://github.com/godotengine/godot/issues)
|
||||
before reporting your issue**. If you don't find a relevant match or if you're
|
||||
unsure, don't hesitate to **open a new issue**. The bugsquad will handle it
|
||||
from there if it's a duplicate.
|
||||
|
||||
### Specify the platform
|
||||
|
||||
Godot runs on a large variety of platforms and operating systems and devices.
|
||||
**In your bug reports, please always specify:**
|
||||
|
||||
- Operating system and version (e.g. Windows 10, macOS 10.15, Ubuntu 19.10)
|
||||
- Godot version (e.g. 3.2, 3.1.2, or the Git commit hash if you're using a development branch)
|
||||
|
||||
For bugs that are likely OS-specific and/or graphics-related, please also specify:
|
||||
|
||||
- Device (CPU model including architecture, e.g. x86_64, arm64, etc.)
|
||||
- GPU model (and the driver version in use if you know it)
|
||||
|
||||
**Bug reports not including the required information may be closed at the
|
||||
maintainers' discretion.** If in doubt, always include all the requested
|
||||
information; it's better to include too much information than not enough
|
||||
information.
|
||||
|
||||
### Specify steps to reproduce
|
||||
|
||||
Many bugs can't be reproduced unless specific steps are taken. Please **specify
|
||||
the exact steps** that must be taken to reproduce the condition, and try to
|
||||
keep them as minimal as possible. If you're describing a procedure to follow
|
||||
in the editor, don't hesitate to include screenshots.
|
||||
|
||||
Making your bug report easy to reproduce will make it easier for contributors
|
||||
to fix the bug.
|
||||
|
||||
### Provide a simple example project
|
||||
|
||||
Sometimes, unexpected behavior can happen in your project. In such case,
|
||||
understand that:
|
||||
|
||||
- What happens to you may not happen to other users.
|
||||
- We can't take the time to look at your project, understand how it is set up
|
||||
and then figure out why it's failing.
|
||||
- On the contributors' end, recreating a test project from scratch takes valuable
|
||||
time that can be saved by uploading a *minimal* project.
|
||||
|
||||
To speed up our work, **please upload a minimal project** that isolates
|
||||
and reproduces the issue. This is always the **best way for us to fix it**.
|
||||
We recommend attaching a ZIP file with the minimal project directly to the bug report,
|
||||
by drag and dropping the file in the GitHub edition field. This ensures the file
|
||||
can remain available for a long period of time. Only use third-party file hosts
|
||||
if your ZIP file isn't accepted by GitHub because it's too large.
|
||||
|
||||
We recommend always attaching a minimal reproduction project, even if the issue
|
||||
may seem simple to reproduce manually.
|
||||
|
||||
**Note for C# users:** If your issue is *not* .NET-specific, please upload a
|
||||
minimal reproduction project written in GDScript.
|
||||
This will make it easier for contributors to reproduce the issue
|
||||
locally as not everyone has a .NET setup available.
|
||||
|
||||
**If you've been asked by a maintainer to upload a minimal reproduction project,
|
||||
you *must* do so within 7 days.** Otherwise, your bug report will be closed as
|
||||
it'll be considered too difficult to diagnose.
|
||||
|
||||
Now that you've read the guidelines, click the link below to create a
|
||||
bug report:
|
||||
|
||||
- **[Report a bug](https://github.com/godotengine/godot/issues/new?assignees=&labels=&template=bug_report.yml)**
|
||||
Report bugs [here](https://github.com/godotengine/godot/issues/new?assignees=&labels=&template=bug_report.yml).
|
||||
Please follow the instructions in the template when you do.
|
||||
|
||||
## Proposing features or improvements
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ License: Expat
|
|||
|
||||
Files: ./thirdparty/doctest/
|
||||
Comment: doctest
|
||||
Copyright: 2016-2021, Viktor Kirilov
|
||||
Copyright: 2016-2023, Viktor Kirilov
|
||||
License: Expat
|
||||
|
||||
Files: ./thirdparty/embree/
|
||||
|
@ -390,7 +390,7 @@ License: BSD-2-clause
|
|||
|
||||
Files: ./thirdparty/msdfgen/
|
||||
Comment: Multi-channel signed distance field generator
|
||||
Copyright: 2016, Viktor Chlumsky
|
||||
Copyright: 2016-2022, Viktor Chlumsky
|
||||
License: MIT
|
||||
|
||||
Files: ./thirdparty/oidn/
|
||||
|
@ -483,7 +483,7 @@ License: Zlib
|
|||
|
||||
Files: ./thirdparty/zstd/
|
||||
Comment: Zstandard
|
||||
Copyright: 2016-2021, Facebook, Inc.
|
||||
Copyright: Meta Platforms, Inc. and affiliates.
|
||||
License: BSD-3-clause
|
||||
|
||||
|
||||
|
|
185
DONORS.md
185
DONORS.md
|
@ -23,20 +23,17 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
## Silver sponsors
|
||||
|
||||
Affray Interactive <https://scp.games/pandemic>
|
||||
Delton Ding
|
||||
Playful Studios <https://playfulstudios.com>
|
||||
Robot Gentleman <http://robotgentleman.com>
|
||||
Striked <https://striked.gg>
|
||||
|
||||
## Bronze sponsors
|
||||
|
||||
ASIFA-Hollywood <https://www.asifa-hollywood.org>
|
||||
Basically Games
|
||||
Bippinbits <https://bippinbits.com>
|
||||
Brandon Lamb
|
||||
Bri
|
||||
Garry Newman
|
||||
Gordon MacPherson
|
||||
Hunter Dickson
|
||||
Isaiah smith
|
||||
Jb Evain
|
||||
Keepsake Games <https://keepsake.games>
|
||||
|
@ -45,7 +42,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Kyle Szklenski
|
||||
Matthew Campbell
|
||||
Maxim Karsten
|
||||
Moonwards <https://www.moonwards.com>
|
||||
Nik Rudenko
|
||||
TrampolineTales <https://trampolinetales.com>
|
||||
|
||||
|
@ -56,17 +52,12 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Andres Hernandez
|
||||
Andrew Dunai
|
||||
anti666
|
||||
Christian Baune
|
||||
Christopher Montesano
|
||||
Christopher Shifflett
|
||||
Christoph Woinke
|
||||
Daniel Edwards
|
||||
Darrin Massena
|
||||
David Mydlarz
|
||||
Digital Grows
|
||||
Edward Flick
|
||||
Florian Neumann
|
||||
GameDev.net
|
||||
Hein-Pieter van Braam
|
||||
Jonah Stich
|
||||
Justin Arnold
|
||||
|
@ -74,19 +65,15 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Justo Delgado Baudí
|
||||
Kossi Selom Banybah
|
||||
Lloyd Bond
|
||||
Marcel Kräml
|
||||
Marek Belski
|
||||
Markus Ort
|
||||
Matthieu Huvé
|
||||
Michael
|
||||
Mike King
|
||||
Nassor Paulino da Silva
|
||||
nate-wilkins
|
||||
Nathan Warden
|
||||
Neal Gompa (Conan Kudo)
|
||||
Ninja_5tyl3
|
||||
Nick Macholl
|
||||
Patrick Horn
|
||||
Patrick Schmidt
|
||||
Rami
|
||||
Ronnie Cheng
|
||||
Ryan Heath
|
||||
|
@ -94,18 +81,15 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
ShikadiGum
|
||||
Slobodan Milnovic
|
||||
Stephan Lanfermann
|
||||
Steve
|
||||
Tim Yuen
|
||||
Violin Iliev
|
||||
Vladimír Chvátil
|
||||
|
||||
## Gold donors
|
||||
|
||||
Acheron
|
||||
Adam Brown
|
||||
albinaask
|
||||
Allen Pestaluky
|
||||
Arisaka Mayuki
|
||||
Asher Glick
|
||||
Barugon
|
||||
Benito
|
||||
|
@ -115,39 +99,30 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
David Gehrig
|
||||
David Hubber
|
||||
David Snopek
|
||||
Dima Paloskin
|
||||
Ed Morley
|
||||
Frank Kurka
|
||||
Guilherme de Oliveira
|
||||
Guy Kay Jay
|
||||
Javier Roman
|
||||
Joan Fons
|
||||
Jonathan Wright
|
||||
Jon Woodward
|
||||
Karl Werf
|
||||
Klavdij Voncina
|
||||
Maciej Pendolski
|
||||
Manuele Finocchiaro
|
||||
Markus Wiesner
|
||||
Mateo Navarrete
|
||||
Matthew Hillier
|
||||
Officine Pixel S.n.c.
|
||||
Pedro Silva
|
||||
Retro Village
|
||||
Rob Messick
|
||||
Roland Fredenhagen
|
||||
Ronan Zeegers
|
||||
Sarksus
|
||||
Sean
|
||||
Sergey
|
||||
Sofox
|
||||
Taylor Ritenour
|
||||
Stephan Kessler
|
||||
Tom Langwaldt
|
||||
tukon
|
||||
Vagabond Arcade
|
||||
Victor
|
||||
Xeno Coliseum
|
||||
|
||||
␣
|
||||
23BLUENINJA
|
||||
Acheron
|
||||
AdamRatai
|
||||
Alexander Erlemann
|
||||
Alexandre VALIN
|
||||
|
@ -156,12 +131,10 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Algebrute
|
||||
alice gambrell
|
||||
Alo Mis
|
||||
Andrew Cunningham
|
||||
Andrew Farr
|
||||
Andriy
|
||||
Antanas Paskauskas
|
||||
Antoni Batchelli
|
||||
Ari
|
||||
Arisaka Mayuki
|
||||
Arthur S. Muszynski
|
||||
BasicIncomePlz
|
||||
Brandon Hawkinson
|
||||
|
@ -172,26 +145,23 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Charlie Whitfield
|
||||
Chris Petrich
|
||||
Chris Serino
|
||||
Collin Rapp
|
||||
Craig Ostrin
|
||||
Craig Scarborough
|
||||
Craig Smith
|
||||
CT
|
||||
CzechBlueBear
|
||||
CzłowiekImadło
|
||||
Daniel Eichler
|
||||
Daniel Grice
|
||||
Daniel Reed
|
||||
Daniel Tebbutt
|
||||
Darrian Little
|
||||
Dennis Belfrage
|
||||
Donn Eddy
|
||||
Emily A. Bellows
|
||||
Eric Brand
|
||||
Eugenio Hugo Salgüero Jáñez
|
||||
Felix Winterhalter
|
||||
flesk
|
||||
Florencio Olsen
|
||||
foxydevloper
|
||||
Fransiska
|
||||
Furroy
|
||||
Gabrielius Vaiškūnas
|
||||
Gary Hulst
|
||||
Geoffroy Warin
|
||||
|
@ -202,26 +172,18 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Guillaume Pham Ngoc
|
||||
Harry Tumber
|
||||
Harvey Fong
|
||||
Heath Hayes
|
||||
Horváth-Lázár Péter
|
||||
Hu Hund
|
||||
illuxxium
|
||||
Jaap Marsman
|
||||
Jamal Bencharki
|
||||
James Couzens
|
||||
Jared White
|
||||
Jason Yundt
|
||||
Jennifer Wilcox
|
||||
Jesús Chicharro
|
||||
Jihun Moon
|
||||
Joel Fivat
|
||||
Johnathan Kupferer
|
||||
John Stinson
|
||||
Josef Stumpfegger
|
||||
Joshie Sparks
|
||||
Joshua Flores
|
||||
Joshua Lesperance
|
||||
Juan Velandia
|
||||
Judd
|
||||
Julian Todd
|
||||
JUSTIN CARROLL
|
||||
|
@ -230,15 +192,12 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Khora
|
||||
kickmaniac
|
||||
kinfox
|
||||
Laszlo Kiss
|
||||
leetNightshade
|
||||
Leo Fidel R Liban
|
||||
Liam Smyth
|
||||
LoparPanda
|
||||
Luca Junge
|
||||
Lucaaa
|
||||
Luca Vazzano
|
||||
LyaaaaaGames
|
||||
MadScientistCarl
|
||||
Marcus Dobler
|
||||
Marcus Richter
|
||||
Mark Barrett
|
||||
|
@ -246,63 +205,58 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Martin Gulliksson
|
||||
Martin Kotz
|
||||
Martin Soucek
|
||||
matt
|
||||
Matt Greene
|
||||
Matthew Dana
|
||||
Max Kryschi
|
||||
Matthieu Huvé
|
||||
Michael Dürwald
|
||||
Michael Policastro
|
||||
MikadoSC
|
||||
n00sh
|
||||
nate etan
|
||||
Nicola Cocchiaro
|
||||
Nicolás Monner Sans
|
||||
Nikita Blizniuk
|
||||
Nikita Rotskov
|
||||
Nikola Whallon
|
||||
Oliver Dick
|
||||
Otis Clark
|
||||
Patrick Wuttke
|
||||
Patryk Pluta (vrid)
|
||||
Paul Hocker
|
||||
Paul Von Zimmerman
|
||||
Pete Goodwin
|
||||
Petr Malac
|
||||
Petrus Prinsloo
|
||||
Philip Woods
|
||||
RAMupgrade
|
||||
Rebekah Farr
|
||||
red1939
|
||||
Reilt
|
||||
Rene Tailleur
|
||||
Rhodochrone
|
||||
Rickard Hermanson
|
||||
Rob
|
||||
Rob McInroy
|
||||
RodZilla
|
||||
Romeo Disca
|
||||
Ronan Zeegers
|
||||
Ronnie Ashlock
|
||||
Ronny Mühle
|
||||
Russ
|
||||
Ryan Breaker
|
||||
Ryan Miller
|
||||
Ryan Scott
|
||||
"Sage Automatic Systems, LLC"
|
||||
Samuel Hummerstone
|
||||
Samuel Judd
|
||||
schroedinger's possum
|
||||
Shishir Tandale
|
||||
Sing Chun Lee
|
||||
SKison
|
||||
Song Junwoo
|
||||
spacechase0
|
||||
SpicyCactuar
|
||||
Stephan Hennion
|
||||
Steven Landow
|
||||
Stoned Xander
|
||||
sus
|
||||
Talii
|
||||
Teslatech
|
||||
Thomas Bjarnelöf
|
||||
Thomas Kurz
|
||||
Tim Nedvyga
|
||||
Tobias Bocanegra
|
||||
Tobias Raggl
|
||||
Tom Glenn
|
||||
Torbulous
|
||||
toto bibi
|
||||
Troy Kinsella
|
||||
|
@ -319,12 +273,11 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
|
||||
## Silver donors
|
||||
|
||||
Aaron Adriano
|
||||
Aaron Mayfield
|
||||
Aaron Oldenburg
|
||||
Adam Brunnmeier
|
||||
Adam Carr
|
||||
Adam Long
|
||||
Adam McCurdy
|
||||
Adam N Webber
|
||||
Adam Smeltzer
|
||||
Adinimys
|
||||
|
@ -333,17 +286,15 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Adrien de Pierres
|
||||
Agustinus Arya
|
||||
Aidan O'Flannagain
|
||||
Aiguo Wang
|
||||
ajaxcc
|
||||
Aki Mimoto
|
||||
Akio Yamazaki
|
||||
Alan Beauchamp
|
||||
Albert Gyulgazyan
|
||||
Alberto Salazar Muñoz
|
||||
Alberto Vilches
|
||||
Alder Stefano
|
||||
Alejandro Saucedo
|
||||
AleMax
|
||||
Alessandro Senese
|
||||
Alex Clavelle
|
||||
Alex de la Mare
|
||||
alex raeside
|
||||
|
@ -354,6 +305,7 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Andrew
|
||||
Andrew Groot
|
||||
andrew james morris
|
||||
Andy Baird
|
||||
Ano Nim
|
||||
Anthony Avina
|
||||
Anton Bouwer
|
||||
|
@ -361,8 +313,8 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Arda Erol
|
||||
Arthur Brainville
|
||||
Arturo Rosales
|
||||
Ash K
|
||||
Aubrey Falconer
|
||||
Auré Franky
|
||||
aurelien condomines
|
||||
Austin Miller
|
||||
Azar Gurbanov
|
||||
|
@ -372,11 +324,9 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Benedikt
|
||||
Ben Vercammen
|
||||
Ben Visness
|
||||
Bernhard Werner
|
||||
Bill Thibault
|
||||
bitbrain
|
||||
Bjarne Voigtländer
|
||||
Black Block
|
||||
Brady Goldsworthy
|
||||
Bram
|
||||
Brian
|
||||
|
@ -388,7 +338,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Cameron Meyer
|
||||
Carlos Rios
|
||||
Carl van der Geest
|
||||
Casey
|
||||
Cesar Ruiz
|
||||
Chad Steadman
|
||||
Checkpoint Charlie
|
||||
|
@ -397,13 +346,14 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Chris Jagusch
|
||||
Chris Langford
|
||||
Chris Ridenour
|
||||
Christer Stenbrenden
|
||||
Christian Alexander Bjørklund Bøhler
|
||||
Christian Kaltenecker
|
||||
Christian Mauduit
|
||||
Christian Scholz
|
||||
Christian Winter
|
||||
Christoffer Dahlblom
|
||||
Christoph Czurda
|
||||
Christophe Gagnier
|
||||
Ciyvius
|
||||
Codex404
|
||||
Cody Parker
|
||||
Conall O
|
||||
|
@ -413,11 +363,12 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
CrispyPin
|
||||
cynwav
|
||||
Dakota Watkins
|
||||
Daniel H. Bahr
|
||||
Daniel Hoffmann
|
||||
Danielle
|
||||
Daniel Ramos
|
||||
Dare Looks
|
||||
Daren Scot Wilson
|
||||
Dave Jansen
|
||||
Davesnothere
|
||||
David Baker
|
||||
David Bôle
|
||||
|
@ -428,36 +379,33 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Dimitri Roche
|
||||
Dominik Wetzel
|
||||
Donovan Hutcheon
|
||||
Douglas Plumley
|
||||
Doug Walker
|
||||
Dragontrapper
|
||||
dragoon
|
||||
Dr Ewan Murray
|
||||
Ducky
|
||||
Duobix
|
||||
Duodecimal
|
||||
edisonlee55
|
||||
Eduardo Teixeira
|
||||
Edward Herbert
|
||||
Edward Swartz
|
||||
Egon Elbre
|
||||
Elias Nykrem
|
||||
Elgenzay
|
||||
Elijah Anderson
|
||||
Emerson MX
|
||||
Ends
|
||||
Ephemeral
|
||||
Eric Stokes
|
||||
Eric Walkingshaw
|
||||
Eric Williams
|
||||
Erkki Seppälä
|
||||
Ewan Holmes
|
||||
Faisal Alkubaisi
|
||||
Fault Boy
|
||||
fby
|
||||
Felix Adam
|
||||
Fer DC
|
||||
Filip Lundby
|
||||
Frank
|
||||
fumangy
|
||||
Frank Kurka
|
||||
Frying☆Pan
|
||||
Game Endeavor
|
||||
Garrett Steffen
|
||||
Gary Thomas
|
||||
|
@ -473,23 +421,20 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Guo Hongci
|
||||
Hans Jorgensen
|
||||
Haplo
|
||||
Helge Maus
|
||||
Helianthus Games
|
||||
Heribert Hirth
|
||||
Ian Richard Kunert
|
||||
Ian Williams
|
||||
Interstice
|
||||
itsybitesyspider
|
||||
iveks
|
||||
Jacob D
|
||||
Jaguar
|
||||
Jake D
|
||||
Jako Danar
|
||||
James
|
||||
James A F Manley
|
||||
James Duran
|
||||
James Gary
|
||||
James Thomas
|
||||
Jamie Massey
|
||||
Janis Skuja
|
||||
Jan Vetulani
|
||||
JARKKO PARVIAINEN
|
||||
Jason Evans
|
||||
Jason Uechi
|
||||
|
@ -498,8 +443,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Jennifer Graves
|
||||
Jesse Dubay
|
||||
João Pedro Braz
|
||||
Joe Hurdle
|
||||
Joe Klemmer
|
||||
John Barlex
|
||||
John Bruce
|
||||
John Palgut
|
||||
|
@ -514,67 +457,69 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Jonathan G
|
||||
Jon Sully
|
||||
Jordy Goodridge
|
||||
Jose Francisco 'Yiro' Vera Girona
|
||||
Joseph Catrambone
|
||||
Josh Segall
|
||||
Josh Taylor
|
||||
Joshua Heidrich
|
||||
Jozef Krcho
|
||||
Juanfran
|
||||
Juan Maggi
|
||||
Juan Uys
|
||||
Jueast
|
||||
Julian le Roux
|
||||
Julian Murgia
|
||||
Julien Kaspar
|
||||
Justin Hamilton
|
||||
Justin Spedding
|
||||
Justin Zander
|
||||
J Vetulani
|
||||
Kalydi Balázs
|
||||
Katsuomi Kobayashi
|
||||
Keedong Park
|
||||
Keegan Scott
|
||||
Keinan Powers
|
||||
Keith Bradner
|
||||
Kenji Kawabata
|
||||
Ken Minardo
|
||||
Kent Jofur
|
||||
Kerotasma
|
||||
Ketafuki
|
||||
killaQueen
|
||||
kimbring2
|
||||
kindzadza
|
||||
Kodera Software
|
||||
Kostas Mouratidis
|
||||
Krishna Nadoor
|
||||
KsyTek Games
|
||||
kycho
|
||||
Kyle Burnett
|
||||
Kyle Jacobs
|
||||
Lasse le Dous
|
||||
Laurent CHEA
|
||||
Laurent Dethoor
|
||||
Laxman Pradhan
|
||||
Lech Rozanski
|
||||
Leland Vakarian
|
||||
Leonardo Baumle
|
||||
Levi Berciu
|
||||
Levi Lindsey
|
||||
LF
|
||||
Linus Lind Lundgren
|
||||
Logan Apple
|
||||
Lucas Coelho
|
||||
Logan Bratton
|
||||
Lonnie Cox
|
||||
Ludovic DELVAL
|
||||
Luigi Renna
|
||||
Luis Ernesto Del Toro Peña
|
||||
Luis Gaemperle
|
||||
Luis Morao
|
||||
Lukas Komischke
|
||||
Luke Diasio
|
||||
Luke Kasz
|
||||
Major Haul
|
||||
Malcolm
|
||||
Mara Huldra
|
||||
Marcell Simon
|
||||
Marcos Heitor Carvalho
|
||||
Markie Music
|
||||
Mark Tyler
|
||||
Markus Martin
|
||||
Markus Michael Egger
|
||||
Markus Strompen
|
||||
Martin Fitzke
|
||||
Martin Holas
|
||||
Martin Linklater
|
||||
Martin Liška
|
||||
Martin Trbola
|
||||
Martin Zabinski
|
||||
|
@ -586,7 +531,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Maxime Blade
|
||||
Maxwell
|
||||
McStuffings
|
||||
Melchor
|
||||
Melissa Mears
|
||||
Metal Demon 2000
|
||||
Michael
|
||||
|
@ -595,37 +539,29 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Mikael Nordenberg
|
||||
Mikail Freitas
|
||||
Mikayla
|
||||
Mike Birkhead
|
||||
Mike Copley
|
||||
Mike McRoberts
|
||||
Miss
|
||||
Mitchell J. Wagner
|
||||
MJacred
|
||||
ModularMind
|
||||
Molinghu
|
||||
Molly Jameson
|
||||
MoltenGears
|
||||
Moowool
|
||||
Moritz Weissenberger
|
||||
moulefrite
|
||||
MrAZIE
|
||||
Mrjemandem
|
||||
Nathaniel
|
||||
neguse
|
||||
neighty
|
||||
Neil Blakey-Milner
|
||||
Neil Wang
|
||||
Neofytos Chimonas
|
||||
Nerdforge
|
||||
Nerdyninja
|
||||
Nicholas La Roux
|
||||
Nick Eldrenkamp
|
||||
Nick Macholl
|
||||
Nico Greve
|
||||
Nicolas Rosset
|
||||
Nicolò Brigadoi Calamari
|
||||
Nils Nordmark
|
||||
Nobbele
|
||||
Noel Billig
|
||||
Noesis
|
||||
obscuresteel
|
||||
|
@ -639,23 +575,23 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Patrick Indermühle
|
||||
Patrickm
|
||||
Patrick Nafarrete
|
||||
Paul Black
|
||||
Paul Gieske
|
||||
Paul Hankins
|
||||
Paul Mozet
|
||||
Paweł Kowal
|
||||
Paweł Łyczkowski
|
||||
Pedro Henrique Martins Garcia
|
||||
Peter Höglund
|
||||
Philip Ludington (MrPhil)
|
||||
Phoenix Jauregui
|
||||
Pierre Caye
|
||||
Pille
|
||||
Pixel Archipel
|
||||
pj
|
||||
Point08
|
||||
Portponky
|
||||
Preethi Vaidyanathan
|
||||
PsycHead
|
||||
PsyCrab
|
||||
Puntigames
|
||||
pwab
|
||||
Quincy Quincy
|
||||
|
@ -665,9 +601,11 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Ragnar Pettersson
|
||||
Rainer Amler
|
||||
Rammeow
|
||||
Rebecca H
|
||||
Relintai
|
||||
Remi Rampin
|
||||
Reneator
|
||||
Richard Hayes
|
||||
Richard Ivánek
|
||||
Riley
|
||||
Robin Ward
|
||||
|
@ -680,21 +618,21 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Roland Rząsa
|
||||
Roman Papush
|
||||
Roy Scayged
|
||||
Rudi
|
||||
Russ
|
||||
Russell Matney
|
||||
Ryan Groom
|
||||
Ryan Mueller
|
||||
Rykk
|
||||
Sacha Waked (Shaidak)
|
||||
Sammy Fischer
|
||||
Sangeeth Pavithran
|
||||
Sasha Schwartz
|
||||
Sean Dee
|
||||
Sebastian Michailidis
|
||||
Sekuta
|
||||
SeongWan Kim
|
||||
Sessamekesh
|
||||
SeungJong k
|
||||
Shaidak
|
||||
Shane Lillie
|
||||
Shane Spoor
|
||||
Shaun Kohanowski
|
||||
simdee
|
||||
Simon Jonas Larsen
|
||||
Simon Schoenenberger
|
||||
|
@ -705,7 +643,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
SleepDepJoel1
|
||||
smbe19
|
||||
smo1704
|
||||
Soheib El-Harrache
|
||||
Solene Waked
|
||||
Sophie Winter
|
||||
Squidgy
|
||||
|
@ -718,7 +655,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
SxP
|
||||
tadashi endo
|
||||
Tarch
|
||||
Techwizz
|
||||
Terry
|
||||
TheVoiceInMyHead
|
||||
Thibaut DECROMBECQUE
|
||||
|
@ -732,7 +668,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Tim Erskine
|
||||
Tim Gleason
|
||||
Tim Klein
|
||||
Tim Nedvyga
|
||||
Timothy B. MacDonald
|
||||
Tim Raveling
|
||||
Tim Riley
|
||||
|
@ -740,7 +675,6 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Tom Coxon
|
||||
Tom Webster
|
||||
Torsten Crass
|
||||
travis f w
|
||||
Trent Skinner
|
||||
tril zerobyte
|
||||
Tryggve Sollid
|
||||
|
@ -757,22 +691,21 @@ generous deed immortalized in the next stable release of Godot Engine.
|
|||
Vincent Barkmann
|
||||
Vincent Cloutier
|
||||
Vincent Foulon
|
||||
Vitaliy Sapronenko
|
||||
Vladimir Savin
|
||||
Vulinux
|
||||
Wapiti .
|
||||
Wiley Thompson
|
||||
William Bodin
|
||||
William Edwards
|
||||
William F Siqueira
|
||||
Wolfram
|
||||
Woonki Moon
|
||||
Wyatt Goodin
|
||||
Xananax
|
||||
Yan Shi
|
||||
yin
|
||||
Zekim
|
||||
Zher Huei Lee
|
||||
Zoee Silcock
|
||||
Zyphery
|
||||
ケルベロス
|
||||
貴宏 小松
|
||||
郝晨煜
|
||||
|
|
21
SConstruct
21
SConstruct
|
@ -645,7 +645,7 @@ if selected_platform in platform_list:
|
|||
print(
|
||||
"Detected mingw version is not using posix threads. Only posix "
|
||||
"version of mingw is supported. "
|
||||
'Use "update-alternatives --config <platform>-w64-mingw32-[gcc|g++]" '
|
||||
'Use "update-alternatives --config x86_64-w64-mingw32-g++" '
|
||||
"to switch to posix threads."
|
||||
)
|
||||
Exit(255)
|
||||
|
@ -686,7 +686,8 @@ if selected_platform in platform_list:
|
|||
if env["warnings"] == "extra":
|
||||
env.Append(CCFLAGS=["/W4"])
|
||||
elif env["warnings"] == "all":
|
||||
env.Append(CCFLAGS=["/W3"])
|
||||
# C4458 is like -Wshadow. Part of /W4 but let's apply it for the default /W3 too.
|
||||
env.Append(CCFLAGS=["/W3", "/w34458"])
|
||||
elif env["warnings"] == "moderate":
|
||||
env.Append(CCFLAGS=["/W2"])
|
||||
# Disable warnings which we don't plan to fix.
|
||||
|
@ -715,7 +716,7 @@ if selected_platform in platform_list:
|
|||
common_warnings = []
|
||||
|
||||
if methods.using_gcc(env):
|
||||
common_warnings += ["-Wshadow-local", "-Wno-misleading-indentation"]
|
||||
common_warnings += ["-Wshadow", "-Wno-misleading-indentation"]
|
||||
if cc_version_major == 7: # Bogus warning fixed in 8+.
|
||||
common_warnings += ["-Wno-strict-overflow"]
|
||||
if cc_version_major < 11:
|
||||
|
@ -725,6 +726,7 @@ if selected_platform in platform_list:
|
|||
if cc_version_major >= 12: # False positives in our error macros, see GH-58747.
|
||||
common_warnings += ["-Wno-return-type"]
|
||||
elif methods.using_clang(env) or methods.using_emcc(env):
|
||||
common_warnings += ["-Wshadow-field-in-constructor", "-Wshadow-uncaptured-local"]
|
||||
# We often implement `operator<` for structs of pointers as a requirement
|
||||
# for putting them in `Set` or `Map`. We don't mind about unreliable ordering.
|
||||
common_warnings += ["-Wno-ordered-compare-function-pointers"]
|
||||
|
@ -820,6 +822,15 @@ if selected_platform in platform_list:
|
|||
env.module_list = modules_enabled
|
||||
methods.sort_module_list(env)
|
||||
|
||||
if env.editor_build:
|
||||
# Add editor-specific dependencies to the dependency graph.
|
||||
env.module_add_dependencies("editor", ["freetype", "svg"])
|
||||
|
||||
# And check if they are met.
|
||||
if not env.module_check_dependencies("editor"):
|
||||
print("Not all modules required by editor builds are enabled.")
|
||||
Exit(255)
|
||||
|
||||
methods.generate_version_header(env.module_version_string)
|
||||
|
||||
env["PROGSUFFIX_WRAP"] = suffix + env.module_version_string + ".console" + env["PROGSUFFIX"]
|
||||
|
@ -840,7 +851,7 @@ if selected_platform in platform_list:
|
|||
|
||||
if env["disable_3d"]:
|
||||
if env.editor_build:
|
||||
print("Build option 'disable_3d=yes' cannot be used for editor builds, but only for export templates.")
|
||||
print("Build option 'disable_3d=yes' cannot be used for editor builds, only for export template builds.")
|
||||
Exit(255)
|
||||
else:
|
||||
env.Append(CPPDEFINES=["_3D_DISABLED"])
|
||||
|
@ -848,7 +859,7 @@ if selected_platform in platform_list:
|
|||
if env.editor_build:
|
||||
print(
|
||||
"Build option 'disable_advanced_gui=yes' cannot be used for editor builds, "
|
||||
"but only for export templates."
|
||||
"only for export template builds."
|
||||
)
|
||||
Exit(255)
|
||||
else:
|
||||
|
|
|
@ -401,6 +401,10 @@ void ProjectSettings::_get_property_list(List<PropertyInfo> *p_list) const {
|
|||
vc.flags = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE;
|
||||
}
|
||||
|
||||
if (v->internal) {
|
||||
vc.flags |= PROPERTY_USAGE_INTERNAL;
|
||||
}
|
||||
|
||||
if (v->basic) {
|
||||
vc.flags |= PROPERTY_USAGE_EDITOR_BASIC_SETTING;
|
||||
}
|
||||
|
@ -636,7 +640,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
|
|||
|
||||
Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) {
|
||||
Error err = _setup(p_path, p_main_pack, p_upwards, p_ignore_override);
|
||||
if (err == OK) {
|
||||
if (err == OK && !p_ignore_override) {
|
||||
String custom_settings = GLOBAL_GET("application/config/project_settings_override");
|
||||
if (!custom_settings.is_empty()) {
|
||||
_load_settings_text(custom_settings);
|
||||
|
@ -1242,7 +1246,7 @@ void ProjectSettings::_add_builtin_input_map() {
|
|||
action["events"] = events;
|
||||
|
||||
String action_name = "input/" + E.key;
|
||||
GLOBAL_DEF_INTERNAL(action_name, action);
|
||||
GLOBAL_DEF(action_name, action);
|
||||
input_presets.push_back(action_name);
|
||||
}
|
||||
}
|
||||
|
@ -1266,6 +1270,10 @@ ProjectSettings::ProjectSettings() {
|
|||
GLOBAL_DEF("application/config/custom_user_dir_name", "");
|
||||
GLOBAL_DEF("application/config/project_settings_override", "");
|
||||
|
||||
GLOBAL_DEF("application/run/main_loop_type", "SceneTree");
|
||||
GLOBAL_DEF("application/config/auto_accept_quit", true);
|
||||
GLOBAL_DEF("application/config/quit_on_go_back", true);
|
||||
|
||||
// The default window size is tuned to:
|
||||
// - Have a 16:9 aspect ratio,
|
||||
// - Have both dimensions divisible by 8 to better play along with video recording,
|
||||
|
@ -1304,26 +1312,23 @@ ProjectSettings::ProjectSettings() {
|
|||
}
|
||||
extensions.push_back("gdshader");
|
||||
|
||||
GLOBAL_DEF("editor/run/main_run_args", "");
|
||||
|
||||
GLOBAL_DEF(PropertyInfo(Variant::PACKED_STRING_ARRAY, "editor/script/search_in_file_extensions"), extensions);
|
||||
|
||||
GLOBAL_DEF(PropertyInfo(Variant::STRING, "editor/script/templates_search_path", PROPERTY_HINT_DIR), "res://script_templates");
|
||||
|
||||
// For correct doc generation.
|
||||
GLOBAL_DEF("editor/naming/default_signal_callback_name", "_on_{node_name}_{signal_name}");
|
||||
GLOBAL_DEF("editor/naming/default_signal_callback_to_self_name", "_on_{signal_name}");
|
||||
|
||||
_add_builtin_input_map();
|
||||
|
||||
// Keep the enum values in sync with the `DisplayServer::ScreenOrientation` enum.
|
||||
custom_prop_info["display/window/handheld/orientation"] = PropertyInfo(Variant::INT, "display/window/handheld/orientation", PROPERTY_HINT_ENUM, "Landscape,Portrait,Reverse Landscape,Reverse Portrait,Sensor Landscape,Sensor Portrait,Sensor");
|
||||
GLOBAL_DEF("display/window/subwindows/embed_subwindows", true);
|
||||
// Keep the enum values in sync with the `DisplayServer::VSyncMode` enum.
|
||||
custom_prop_info["display/window/vsync/vsync_mode"] = PropertyInfo(Variant::INT, "display/window/vsync/vsync_mode", PROPERTY_HINT_ENUM, "Disabled,Enabled,Adaptive,Mailbox");
|
||||
custom_prop_info["rendering/driver/threads/thread_model"] = PropertyInfo(Variant::INT, "rendering/driver/threads/thread_model", PROPERTY_HINT_ENUM, "Single-Unsafe,Single-Safe,Multi-Threaded");
|
||||
GLOBAL_DEF("physics/2d/run_on_separate_thread", false);
|
||||
GLOBAL_DEF("physics/3d/run_on_separate_thread", false);
|
||||
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "display/window/stretch/mode", PROPERTY_HINT_ENUM, "disabled,canvas_items,viewport"), "disabled");
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::STRING, "display/window/stretch/aspect", PROPERTY_HINT_ENUM, "ignore,keep,keep_width,keep_height,expand"), "keep");
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::FLOAT, "display/window/stretch/scale", PROPERTY_HINT_RANGE, "0.5,8.0,0.01"), 1.0);
|
||||
|
||||
GLOBAL_DEF(PropertyInfo(Variant::INT, "debug/settings/profiler/max_functions", PROPERTY_HINT_RANGE, "128,65535,1"), 16384);
|
||||
|
||||
GLOBAL_DEF(PropertyInfo(Variant::BOOL, "compression/formats/zstd/long_distance_matching"), Compression::zstd_long_distance_matching);
|
||||
|
@ -1339,18 +1344,26 @@ ProjectSettings::ProjectSettings() {
|
|||
GLOBAL_DEF_RST(PropertyInfo(Variant::INT, "rendering/occlusion_culling/bvh_build_quality", PROPERTY_HINT_ENUM, "Low,Medium,High"), 2);
|
||||
GLOBAL_DEF(PropertyInfo(Variant::INT, "memory/limits/multithreaded_server/rid_pool_prealloc", PROPERTY_HINT_RANGE, "0,500,1"), 60); // No negative and limit to 500 due to crashes.
|
||||
GLOBAL_DEF_RST("internationalization/rendering/force_right_to_left_layout_direction", false);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "internationalization/rendering/root_node_layout_direction", PROPERTY_HINT_RANGE, "Based on Locale,Left-to-Right,Right-to-Left"), 0);
|
||||
|
||||
GLOBAL_DEF(PropertyInfo(Variant::INT, "gui/timers/incremental_search_max_interval_msec", PROPERTY_HINT_RANGE, "0,10000,1,or_greater"), 2000);
|
||||
|
||||
GLOBAL_DEF_BASIC("gui/common/snap_controls_to_pixels", true);
|
||||
GLOBAL_DEF_BASIC("gui/fonts/dynamic_fonts/use_oversampling", true);
|
||||
|
||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/block_size_kb", 256);
|
||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/max_size_mb", 128);
|
||||
GLOBAL_DEF("rendering/rendering_device/staging_buffer/texture_upload_region_size_px", 64);
|
||||
GLOBAL_DEF("rendering/rendering_device/vulkan/max_descriptors_per_pool", 64);
|
||||
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "rendering/textures/canvas_textures/default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap"), 1);
|
||||
GLOBAL_DEF_BASIC(PropertyInfo(Variant::INT, "rendering/textures/canvas_textures/default_texture_repeat", PROPERTY_HINT_ENUM, "Disable,Enable,Mirror"), 0);
|
||||
|
||||
// These properties will not show up in the dialog nor in the documentation. If you want to exclude whole groups, see _get_property_list() method.
|
||||
GLOBAL_DEF_INTERNAL("application/config/features", PackedStringArray());
|
||||
GLOBAL_DEF_INTERNAL("internationalization/locale/translation_remaps", PackedStringArray());
|
||||
GLOBAL_DEF_INTERNAL("internationalization/locale/translations", PackedStringArray());
|
||||
GLOBAL_DEF_INTERNAL("internationalization/locale/translations_pot_files", PackedStringArray());
|
||||
}
|
||||
|
||||
ProjectSettings::~ProjectSettings() {
|
||||
|
|
|
@ -1052,6 +1052,7 @@ void GDExtensionAPIDump::generate_extension_json_file(const String &p_path) {
|
|||
|
||||
String text = json->stringify(api, "\t", false) + "\n";
|
||||
Ref<FileAccess> fa = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_MSG(fa.is_null(), vformat("Cannot open file '%s' for writing.", p_path));
|
||||
fa->store_string(text);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ class GDExtensionInterfaceDump {
|
|||
public:
|
||||
static void generate_gdextension_interface_file(const String &p_path) {
|
||||
Ref<FileAccess> fa = FileAccess::open(p_path, FileAccess::WRITE);
|
||||
ERR_FAIL_COND_MSG(fa.is_null(), vformat("Cannot open file '%s' for writing.", p_path));
|
||||
CharString cs(gdextension_interface_dump);
|
||||
fa->store_buffer((const uint8_t *)cs.ptr(), cs.length());
|
||||
};
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Source: https://github.com/godotengine/godot
|
||||
|
||||
# Windows
|
||||
__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Windows,
|
||||
__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,guide:b10,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Windows,
|
||||
|
||||
# Android
|
||||
Default Android Gamepad,Default Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b8,rightshoulder:b10,rightx:a2,start:b6,righty:a3,dpleft:h0.8,lefttrigger:a4,x:b2,dpup:h0.1,back:b4,leftstick:b7,leftshoulder:b9,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,platform:Android,
|
||||
|
|
|
@ -35,6 +35,10 @@
|
|||
#include "core/input/input_map.h"
|
||||
#include "core/os/os.h"
|
||||
|
||||
#ifdef DEV_ENABLED
|
||||
#include "core/os/thread.h"
|
||||
#endif
|
||||
|
||||
static const char *_joy_buttons[(size_t)JoyButton::SDL_MAX] = {
|
||||
"a",
|
||||
"b",
|
||||
|
@ -486,6 +490,10 @@ Vector3 Input::get_gyroscope() const {
|
|||
}
|
||||
|
||||
void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated) {
|
||||
// This function does the final delivery of the input event to user land.
|
||||
// Regardless where the event came from originally, this has to happen on the main thread.
|
||||
DEV_ASSERT(Thread::get_caller_id() == Thread::get_main_id());
|
||||
|
||||
// Notes on mouse-touch emulation:
|
||||
// - Emulated mouse events are parsed, that is, re-routed to this method, so they make the same effects
|
||||
// as true mouse events. The only difference is the situation is flagged as emulated so they are not
|
||||
|
@ -537,7 +545,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
|
|||
touch_event->set_position(mb->get_position());
|
||||
touch_event->set_double_tap(mb->is_double_click());
|
||||
touch_event->set_device(InputEvent::DEVICE_ID_EMULATION);
|
||||
_THREAD_SAFE_UNLOCK_
|
||||
event_dispatch_function(touch_event);
|
||||
_THREAD_SAFE_LOCK_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -563,7 +573,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
|
|||
drag_event->set_velocity(get_last_mouse_velocity());
|
||||
drag_event->set_device(InputEvent::DEVICE_ID_EMULATION);
|
||||
|
||||
_THREAD_SAFE_UNLOCK_
|
||||
event_dispatch_function(drag_event);
|
||||
_THREAD_SAFE_LOCK_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -664,7 +676,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
|
|||
|
||||
if (ge.is_valid()) {
|
||||
if (event_dispatch_function) {
|
||||
_THREAD_SAFE_UNLOCK_
|
||||
event_dispatch_function(ge);
|
||||
_THREAD_SAFE_LOCK_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -687,7 +701,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
|
|||
}
|
||||
|
||||
if (event_dispatch_function) {
|
||||
_THREAD_SAFE_UNLOCK_
|
||||
event_dispatch_function(p_event);
|
||||
_THREAD_SAFE_LOCK_
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -831,6 +847,7 @@ bool Input::is_emulating_touch_from_mouse() const {
|
|||
// Calling this whenever the game window is focused helps unsticking the "touch mouse"
|
||||
// if the OS or its abstraction class hasn't properly reported that touch pointers raised
|
||||
void Input::ensure_touch_mouse_raised() {
|
||||
_THREAD_SAFE_METHOD_
|
||||
if (mouse_from_touch_index != -1) {
|
||||
mouse_from_touch_index = -1;
|
||||
|
||||
|
@ -937,8 +954,15 @@ void Input::flush_buffered_events() {
|
|||
_THREAD_SAFE_METHOD_
|
||||
|
||||
while (buffered_events.front()) {
|
||||
_parse_input_event_impl(buffered_events.front()->get(), false);
|
||||
// The final delivery of the input event involves releasing the lock.
|
||||
// While the lock is released, another thread may lock it and add new events to the back.
|
||||
// Therefore, we get each event and pop it while we still have the lock,
|
||||
// to ensure the list is in a consistent state.
|
||||
List<Ref<InputEvent>>::Element *E = buffered_events.front();
|
||||
Ref<InputEvent> e = E->get();
|
||||
buffered_events.pop_front();
|
||||
|
||||
_parse_input_event_impl(e, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1330,8 +1354,9 @@ void Input::parse_mapping(String p_mapping) {
|
|||
|
||||
String output = entry[idx].get_slice(":", 0).replace(" ", "");
|
||||
String input = entry[idx].get_slice(":", 1).replace(" ", "");
|
||||
ERR_CONTINUE_MSG(output.length() < 1 || input.length() < 2,
|
||||
vformat("Invalid device mapping entry \"%s\" in mapping:\n%s", entry[idx], p_mapping));
|
||||
if (output.length() < 1 || input.length() < 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (output == "platform" || output == "hint") {
|
||||
continue;
|
||||
|
|
|
@ -474,10 +474,15 @@ String InputEventKey::to_string() {
|
|||
return vformat("InputEventKey: keycode=%s, mods=%s, physical=%s, pressed=%s, echo=%s", kc, mods, physical, p, e);
|
||||
}
|
||||
|
||||
Ref<InputEventKey> InputEventKey::create_reference(Key p_keycode) {
|
||||
Ref<InputEventKey> InputEventKey::create_reference(Key p_keycode, bool p_physical) {
|
||||
Ref<InputEventKey> ie;
|
||||
ie.instantiate();
|
||||
ie->set_keycode(p_keycode & KeyModifierMask::CODE_MASK);
|
||||
if (p_physical) {
|
||||
ie->set_physical_keycode(p_keycode & KeyModifierMask::CODE_MASK);
|
||||
} else {
|
||||
ie->set_keycode(p_keycode & KeyModifierMask::CODE_MASK);
|
||||
}
|
||||
|
||||
ie->set_unicode(char32_t(p_keycode & KeyModifierMask::CODE_MASK));
|
||||
|
||||
if ((p_keycode & KeyModifierMask::SHIFT) != Key::NONE) {
|
||||
|
|
|
@ -195,7 +195,7 @@ public:
|
|||
virtual String as_text() const override;
|
||||
virtual String to_string() override;
|
||||
|
||||
static Ref<InputEventKey> create_reference(Key p_keycode_with_modifier_masks);
|
||||
static Ref<InputEventKey> create_reference(Key p_keycode_with_modifier_masks, bool p_physical = false);
|
||||
|
||||
InputEventKey() {}
|
||||
};
|
||||
|
|
|
@ -68,7 +68,7 @@ protected:
|
|||
virtual String _get_root_string() const;
|
||||
|
||||
AccessType get_access_type() const;
|
||||
String fix_path(String p_path) const;
|
||||
virtual String fix_path(String p_path) const;
|
||||
|
||||
template <class T>
|
||||
static Ref<DirAccess> _create_builtin() {
|
||||
|
|
|
@ -80,7 +80,7 @@ protected:
|
|||
static void _bind_methods();
|
||||
|
||||
AccessType get_access_type() const;
|
||||
String fix_path(const String &p_path) const;
|
||||
virtual String fix_path(const String &p_path) const;
|
||||
virtual Error open_internal(const String &p_path, int p_mode_flags) = 0; ///< open a file
|
||||
virtual uint64_t _get_modified_time(const String &p_file) = 0;
|
||||
virtual void _set_access_type(AccessType p_access);
|
||||
|
|
|
@ -144,7 +144,7 @@ uint64_t FileAccessMemory::get_buffer(uint8_t *p_dst, uint64_t p_length) const {
|
|||
}
|
||||
|
||||
memcpy(p_dst, &data[pos], read);
|
||||
pos += p_length;
|
||||
pos += read;
|
||||
|
||||
return read;
|
||||
}
|
||||
|
@ -172,5 +172,5 @@ void FileAccessMemory::store_buffer(const uint8_t *p_src, uint64_t p_length) {
|
|||
}
|
||||
|
||||
memcpy(&data[pos], p_src, write);
|
||||
pos += p_length;
|
||||
pos += write;
|
||||
}
|
||||
|
|
|
@ -63,8 +63,9 @@ Error HTTPClient::_request_raw(Method p_method, const String &p_url, const Vecto
|
|||
}
|
||||
|
||||
Error HTTPClient::_request(Method p_method, const String &p_url, const Vector<String> &p_headers, const String &p_body) {
|
||||
int size = p_body.length();
|
||||
return request(p_method, p_url, p_headers, size > 0 ? (const uint8_t *)p_body.utf8().get_data() : nullptr, size);
|
||||
CharString body_utf8 = p_body.utf8();
|
||||
int size = body_utf8.length();
|
||||
return request(p_method, p_url, p_headers, size > 0 ? (const uint8_t *)body_utf8.get_data() : nullptr, size);
|
||||
}
|
||||
|
||||
String HTTPClient::query_string_from_dict(const Dictionary &p_dict) {
|
||||
|
|
|
@ -60,6 +60,7 @@ Error HTTPClientTCP::connect_to_host(const String &p_host, int p_port, Ref<TLSOp
|
|||
}
|
||||
|
||||
ERR_FAIL_COND_V(tls_options.is_valid() && tls_options->is_server(), ERR_INVALID_PARAMETER);
|
||||
ERR_FAIL_COND_V_MSG(tls_options.is_valid() && !StreamPeerTLS::is_available(), ERR_UNAVAILABLE, "HTTPS is not available in this build.");
|
||||
ERR_FAIL_COND_V(conn_host.length() < HOST_MIN_LEN, ERR_INVALID_PARAMETER);
|
||||
|
||||
if (conn_port < 0) {
|
||||
|
|
|
@ -2649,7 +2649,7 @@ Error Image::compress_from_channels(CompressMode p_mode, UsedChannels p_channels
|
|||
_image_compress_bptc_func(this, p_channels);
|
||||
} break;
|
||||
case COMPRESS_ASTC: {
|
||||
ERR_FAIL_COND_V(!_image_compress_bptc_func, ERR_UNAVAILABLE);
|
||||
ERR_FAIL_COND_V(!_image_compress_astc_func, ERR_UNAVAILABLE);
|
||||
_image_compress_astc_func(this, p_astc_format);
|
||||
} break;
|
||||
case COMPRESS_MAX: {
|
||||
|
@ -3535,6 +3535,8 @@ void Image::_bind_methods() {
|
|||
BIND_ENUM_CONSTANT(COMPRESS_ETC);
|
||||
BIND_ENUM_CONSTANT(COMPRESS_ETC2);
|
||||
BIND_ENUM_CONSTANT(COMPRESS_BPTC);
|
||||
BIND_ENUM_CONSTANT(COMPRESS_ASTC);
|
||||
BIND_ENUM_CONSTANT(COMPRESS_MAX);
|
||||
|
||||
BIND_ENUM_CONSTANT(USED_CHANNELS_L);
|
||||
BIND_ENUM_CONSTANT(USED_CHANNELS_LA);
|
||||
|
|
|
@ -75,7 +75,7 @@ struct _IP_ResolverPrivate {
|
|||
Semaphore sem;
|
||||
|
||||
Thread thread;
|
||||
bool thread_abort = false;
|
||||
SafeFlag thread_abort;
|
||||
|
||||
void resolve_queues() {
|
||||
for (int i = 0; i < IP::RESOLVER_MAX_QUERIES; i++) {
|
||||
|
@ -111,7 +111,7 @@ struct _IP_ResolverPrivate {
|
|||
static void _thread_function(void *self) {
|
||||
_IP_ResolverPrivate *ipr = static_cast<_IP_ResolverPrivate *>(self);
|
||||
|
||||
while (!ipr->thread_abort) {
|
||||
while (!ipr->thread_abort.is_set()) {
|
||||
ipr->sem.wait();
|
||||
ipr->resolve_queues();
|
||||
}
|
||||
|
@ -343,12 +343,12 @@ IP::IP() {
|
|||
singleton = this;
|
||||
resolver = memnew(_IP_ResolverPrivate);
|
||||
|
||||
resolver->thread_abort = false;
|
||||
resolver->thread_abort.clear();
|
||||
resolver->thread.start(_IP_ResolverPrivate::_thread_function, resolver);
|
||||
}
|
||||
|
||||
IP::~IP() {
|
||||
resolver->thread_abort = true;
|
||||
resolver->thread_abort.set();
|
||||
resolver->sem.post();
|
||||
resolver->thread.wait_to_finish();
|
||||
|
||||
|
|
|
@ -91,9 +91,12 @@ String JSON::_stringify(const Variant &p_var, const String &p_indent, int p_cur_
|
|||
case Variant::PACKED_FLOAT64_ARRAY:
|
||||
case Variant::PACKED_STRING_ARRAY:
|
||||
case Variant::ARRAY: {
|
||||
Array a = p_var;
|
||||
if (a.size() == 0) {
|
||||
return "[]";
|
||||
}
|
||||
String s = "[";
|
||||
s += end_statement;
|
||||
Array a = p_var;
|
||||
|
||||
ERR_FAIL_COND_V_MSG(p_markers.has(a.id()), "\"[...]\"", "Converting circular structure to JSON.");
|
||||
p_markers.insert(a.id());
|
||||
|
|
|
@ -310,12 +310,6 @@ Error ResourceLoader::load_threaded_request(const String &p_path, const String &
|
|||
thread_load_mutex->unlock();
|
||||
ERR_FAIL_V_MSG(ERR_INVALID_PARAMETER, "There is no thread loading source resource '" + p_source_resource + "'.");
|
||||
}
|
||||
//must be loading from this thread
|
||||
if (thread_load_tasks[p_source_resource].loader_id != Thread::get_caller_id()) {
|
||||
thread_load_mutex->unlock();
|
||||
ERR_FAIL_V_MSG(ERR_INVALID_PARAMETER, "Threading loading resource'" + local_path + " failed: Source specified: '" + p_source_resource + "' but was not called by it.");
|
||||
}
|
||||
|
||||
//must not be already added as s sub tasks
|
||||
if (thread_load_tasks[p_source_resource].sub_tasks.has(local_path)) {
|
||||
thread_load_mutex->unlock();
|
||||
|
@ -492,13 +486,21 @@ Ref<Resource> ResourceLoader::load_threaded_get(const String &p_path, Error *r_e
|
|||
print_lt("GET: load count: " + itos(thread_loading_count) + " / wait count: " + itos(thread_waiting_count) + " / suspended count: " + itos(thread_suspended_count) + " / active: " + itos(thread_loading_count - thread_suspended_count));
|
||||
}
|
||||
|
||||
bool still_valid = true;
|
||||
bool was_thread = load_task.thread;
|
||||
do {
|
||||
load_task.cond_var->wait(thread_load_lock);
|
||||
if (!thread_load_tasks.has(local_path)) { //may have been erased during unlock and this was always an invalid call
|
||||
still_valid = false;
|
||||
break;
|
||||
}
|
||||
} while (load_task.cond_var); // In case of spurious wakeup.
|
||||
|
||||
thread_suspended_count--;
|
||||
if (was_thread) {
|
||||
thread_suspended_count--;
|
||||
}
|
||||
|
||||
if (!thread_load_tasks.has(local_path)) { //may have been erased during unlock and this was always an invalid call
|
||||
if (!still_valid) {
|
||||
if (r_error) {
|
||||
*r_error = ERR_INVALID_PARAMETER;
|
||||
}
|
||||
|
|
|
@ -397,7 +397,7 @@ void Basis::rotate_to_align(Vector3 p_start_direction, Vector3 p_end_direction)
|
|||
real_t dot = p_start_direction.dot(p_end_direction);
|
||||
dot = CLAMP(dot, -1.0f, 1.0f);
|
||||
const real_t angle_rads = Math::acos(dot);
|
||||
set_axis_angle(axis, angle_rads);
|
||||
*this = Basis(axis, angle_rads) * (*this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -807,8 +807,8 @@ void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
|
|||
z = (rows[1][0] - rows[0][1]) / s;
|
||||
|
||||
r_axis = Vector3(x, y, z);
|
||||
// CLAMP to avoid NaN if the value passed to acos is not in [0,1].
|
||||
r_angle = Math::acos(CLAMP((rows[0][0] + rows[1][1] + rows[2][2] - 1) / 2, (real_t)0.0, (real_t)1.0));
|
||||
// acos does clamping.
|
||||
r_angle = Math::acos((rows[0][0] + rows[1][1] + rows[2][2] - 1) / 2);
|
||||
}
|
||||
|
||||
void Basis::set_quaternion(const Quaternion &p_quaternion) {
|
||||
|
|
|
@ -596,9 +596,9 @@ private:
|
|||
}
|
||||
};
|
||||
|
||||
enum Orientation { NONE,
|
||||
CLOCKWISE,
|
||||
COUNTER_CLOCKWISE };
|
||||
enum Orientation { ORIENTATION_NONE,
|
||||
ORIENTATION_CLOCKWISE,
|
||||
ORIENTATION_COUNTER_CLOCKWISE };
|
||||
|
||||
Vector3 scaling;
|
||||
Vector3 center;
|
||||
|
@ -1140,13 +1140,13 @@ ConvexHullInternal::Orientation ConvexHullInternal::get_orientation(const Edge *
|
|||
CHULL_ASSERT(!m.is_zero());
|
||||
int64_t dot = n.dot(m);
|
||||
CHULL_ASSERT(dot != 0);
|
||||
return (dot > 0) ? COUNTER_CLOCKWISE : CLOCKWISE;
|
||||
return (dot > 0) ? ORIENTATION_COUNTER_CLOCKWISE : ORIENTATION_CLOCKWISE;
|
||||
}
|
||||
return COUNTER_CLOCKWISE;
|
||||
return ORIENTATION_COUNTER_CLOCKWISE;
|
||||
} else if (p_prev->prev == p_next) {
|
||||
return CLOCKWISE;
|
||||
return ORIENTATION_CLOCKWISE;
|
||||
} else {
|
||||
return NONE;
|
||||
return ORIENTATION_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1176,7 +1176,7 @@ ConvexHullInternal::Edge *ConvexHullInternal::find_max_angle(bool p_ccw, const V
|
|||
} else if ((cmp = cot.compare(p_min_cot)) < 0) {
|
||||
p_min_cot = cot;
|
||||
min_edge = e;
|
||||
} else if ((cmp == 0) && (p_ccw == (get_orientation(min_edge, e, p_s, t) == COUNTER_CLOCKWISE))) {
|
||||
} else if ((cmp == 0) && (p_ccw == (get_orientation(min_edge, e, p_s, t) == ORIENTATION_COUNTER_CLOCKWISE))) {
|
||||
min_edge = e;
|
||||
}
|
||||
}
|
||||
|
@ -1375,7 +1375,7 @@ void ConvexHullInternal::merge(IntermediateHull &p_h0, IntermediateHull &p_h1) {
|
|||
int64_t dot = (*e->target - *c0).dot(normal);
|
||||
CHULL_ASSERT(dot <= 0);
|
||||
if ((dot == 0) && ((*e->target - *c0).dot(t) > 0)) {
|
||||
if (!start0 || (get_orientation(start0, e, s, Point32(0, 0, -1)) == CLOCKWISE)) {
|
||||
if (!start0 || (get_orientation(start0, e, s, Point32(0, 0, -1)) == ORIENTATION_CLOCKWISE)) {
|
||||
start0 = e;
|
||||
}
|
||||
}
|
||||
|
@ -1390,7 +1390,7 @@ void ConvexHullInternal::merge(IntermediateHull &p_h0, IntermediateHull &p_h1) {
|
|||
int64_t dot = (*e->target - *c1).dot(normal);
|
||||
CHULL_ASSERT(dot <= 0);
|
||||
if ((dot == 0) && ((*e->target - *c1).dot(t) > 0)) {
|
||||
if (!start1 || (get_orientation(start1, e, s, Point32(0, 0, -1)) == COUNTER_CLOCKWISE)) {
|
||||
if (!start1 || (get_orientation(start1, e, s, Point32(0, 0, -1)) == ORIENTATION_COUNTER_CLOCKWISE)) {
|
||||
start1 = e;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -74,11 +74,13 @@ public:
|
|||
static _ALWAYS_INLINE_ double tanh(double p_x) { return ::tanh(p_x); }
|
||||
static _ALWAYS_INLINE_ float tanh(float p_x) { return ::tanhf(p_x); }
|
||||
|
||||
static _ALWAYS_INLINE_ double asin(double p_x) { return ::asin(p_x); }
|
||||
static _ALWAYS_INLINE_ float asin(float p_x) { return ::asinf(p_x); }
|
||||
// Always does clamping so always safe to use.
|
||||
static _ALWAYS_INLINE_ double asin(double p_x) { return p_x < -1 ? (-Math_PI / 2) : (p_x > 1 ? (Math_PI / 2) : ::asin(p_x)); }
|
||||
static _ALWAYS_INLINE_ float asin(float p_x) { return p_x < -1 ? (-Math_PI / 2) : (p_x > 1 ? (Math_PI / 2) : ::asinf(p_x)); }
|
||||
|
||||
static _ALWAYS_INLINE_ double acos(double p_x) { return ::acos(p_x); }
|
||||
static _ALWAYS_INLINE_ float acos(float p_x) { return ::acosf(p_x); }
|
||||
// Always does clamping so always safe to use.
|
||||
static _ALWAYS_INLINE_ double acos(double p_x) { return p_x < -1 ? Math_PI : (p_x > 1 ? 0 : ::acos(p_x)); }
|
||||
static _ALWAYS_INLINE_ float acos(float p_x) { return p_x < -1 ? Math_PI : (p_x > 1 ? 0 : ::acosf(p_x)); }
|
||||
|
||||
static _ALWAYS_INLINE_ double atan(double p_x) { return ::atan(p_x); }
|
||||
static _ALWAYS_INLINE_ float atan(float p_x) { return ::atanf(p_x); }
|
||||
|
|
|
@ -35,7 +35,8 @@
|
|||
|
||||
real_t Quaternion::angle_to(const Quaternion &p_to) const {
|
||||
real_t d = dot(p_to);
|
||||
return Math::acos(CLAMP(d * d * 2 - 1, -1, 1));
|
||||
// acos does clamping.
|
||||
return Math::acos(d * d * 2 - 1);
|
||||
}
|
||||
|
||||
Vector3 Quaternion::get_euler(EulerOrder p_order) const {
|
||||
|
|
|
@ -126,10 +126,18 @@ public:
|
|||
}
|
||||
|
||||
_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
|
||||
double temp = randd();
|
||||
if (temp < CMP_EPSILON) {
|
||||
temp += CMP_EPSILON; // To prevent generating of INF value in log function, resulting to return NaN value from this function.
|
||||
}
|
||||
return p_mean + p_deviation * (cos(Math_TAU * randd()) * sqrt(-2.0 * log(temp))); // Box-Muller transform.
|
||||
}
|
||||
_FORCE_INLINE_ float randfn(float p_mean, float p_deviation) {
|
||||
return p_mean + p_deviation * (cos((float)Math_TAU * randf()) * sqrt(-2.0 * log(randf()))); // Box-Muller transform
|
||||
float temp = randf();
|
||||
if (temp < CMP_EPSILON) {
|
||||
temp += CMP_EPSILON; // To prevent generating of INF value in log function, resulting to return NaN value from this function.
|
||||
}
|
||||
return p_mean + p_deviation * (cos((float)Math_TAU * randf()) * sqrt(-2.0 * log(temp))); // Box-Muller transform.
|
||||
}
|
||||
|
||||
double random(double p_from, double p_to);
|
||||
|
|
|
@ -59,15 +59,15 @@ public:
|
|||
|
||||
/*! Constructs a ray from origin, direction, and ray segment. Near
|
||||
* has to be smaller than far. */
|
||||
_FORCE_INLINE_ Ray(const Vector3 &org,
|
||||
const Vector3 &dir,
|
||||
float tnear = 0.0f,
|
||||
float tfar = INFINITY) :
|
||||
org(org),
|
||||
tnear(tnear),
|
||||
dir(dir),
|
||||
_FORCE_INLINE_ Ray(const Vector3 &p_org,
|
||||
const Vector3 &p_dir,
|
||||
float p_tnear = 0.0f,
|
||||
float p_tfar = INFINITY) :
|
||||
org(p_org),
|
||||
tnear(p_tnear),
|
||||
dir(p_dir),
|
||||
time(0.0f),
|
||||
tfar(tfar),
|
||||
tfar(p_tfar),
|
||||
mask(-1),
|
||||
u(0.0),
|
||||
v(0.0),
|
||||
|
|
|
@ -50,8 +50,8 @@ void Thread::_set_platform_functions(const PlatformFunctions &p_functions) {
|
|||
platform_functions = p_functions;
|
||||
}
|
||||
|
||||
void Thread::callback(Thread *p_self, const Settings &p_settings, Callback p_callback, void *p_userdata) {
|
||||
Thread::caller_id = _thread_id_hash(p_self->thread.get_id());
|
||||
void Thread::callback(ID p_caller_id, const Settings &p_settings, Callback p_callback, void *p_userdata) {
|
||||
Thread::caller_id = p_caller_id;
|
||||
if (platform_functions.set_priority) {
|
||||
platform_functions.set_priority(p_settings.priority);
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ void Thread::start(Thread::Callback p_callback, void *p_user, const Settings &p_
|
|||
std::thread empty_thread;
|
||||
thread.swap(empty_thread);
|
||||
}
|
||||
std::thread new_thread(&Thread::callback, this, p_settings, p_callback, p_user);
|
||||
std::thread new_thread(&Thread::callback, _thread_id_hash(thread.get_id()), p_settings, p_callback, p_user);
|
||||
thread.swap(new_thread);
|
||||
id = _thread_id_hash(thread.get_id());
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ private:
|
|||
static thread_local ID caller_id;
|
||||
std::thread thread;
|
||||
|
||||
static void callback(Thread *p_self, const Settings &p_settings, Thread::Callback p_callback, void *p_userdata);
|
||||
static void callback(ID p_caller_id, const Settings &p_settings, Thread::Callback p_callback, void *p_userdata);
|
||||
|
||||
static PlatformFunctions platform_functions;
|
||||
|
||||
|
|
|
@ -382,10 +382,10 @@ String Time::get_time_string_from_system(bool p_utc) const {
|
|||
|
||||
Dictionary Time::get_time_zone_from_system() const {
|
||||
OS::TimeZoneInfo info = OS::get_singleton()->get_time_zone_info();
|
||||
Dictionary timezone;
|
||||
timezone["bias"] = info.bias;
|
||||
timezone["name"] = info.name;
|
||||
return timezone;
|
||||
Dictionary ret_timezone;
|
||||
ret_timezone["bias"] = info.bias;
|
||||
ret_timezone["name"] = info.name;
|
||||
return ret_timezone;
|
||||
}
|
||||
|
||||
double Time::get_unix_time_from_system() const {
|
||||
|
|
|
@ -117,6 +117,15 @@ public:
|
|||
_FORCE_INLINE_ bool operator<(const StringName &p_name) const {
|
||||
return _data < p_name._data;
|
||||
}
|
||||
_FORCE_INLINE_ bool operator<=(const StringName &p_name) const {
|
||||
return _data <= p_name._data;
|
||||
}
|
||||
_FORCE_INLINE_ bool operator>(const StringName &p_name) const {
|
||||
return _data > p_name._data;
|
||||
}
|
||||
_FORCE_INLINE_ bool operator>=(const StringName &p_name) const {
|
||||
return _data >= p_name._data;
|
||||
}
|
||||
_FORCE_INLINE_ bool operator==(const StringName &p_name) const {
|
||||
// the real magic of all this mess happens here.
|
||||
// this is why path comparisons are very fast
|
||||
|
|
|
@ -712,7 +712,25 @@ String TranslationServer::get_tool_locale() {
|
|||
#else
|
||||
{
|
||||
#endif
|
||||
return get_locale();
|
||||
// Look for best matching loaded translation.
|
||||
String best_locale = "en";
|
||||
int best_score = 0;
|
||||
|
||||
for (const Ref<Translation> &E : translations) {
|
||||
const Ref<Translation> &t = E;
|
||||
ERR_FAIL_COND_V(t.is_null(), best_locale);
|
||||
String l = t->get_locale();
|
||||
|
||||
int score = compare_locales(locale, l);
|
||||
if (score > 0 && score >= best_score) {
|
||||
best_locale = l;
|
||||
best_score = score;
|
||||
if (score == 10) {
|
||||
break; // Exact match, skip the rest.
|
||||
}
|
||||
}
|
||||
}
|
||||
return best_locale;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -59,11 +59,7 @@ public:
|
|||
|
||||
_FORCE_INLINE_ void push_back(T p_elem) {
|
||||
if (unlikely(count == capacity)) {
|
||||
if (capacity == 0) {
|
||||
capacity = 1;
|
||||
} else {
|
||||
capacity <<= 1;
|
||||
}
|
||||
capacity = tight ? (capacity + 1) : MAX((U)1, capacity << 1);
|
||||
data = (T *)memrealloc(data, capacity * sizeof(T));
|
||||
CRASH_COND_MSG(!data, "Out of memory");
|
||||
}
|
||||
|
@ -87,7 +83,7 @@ public:
|
|||
}
|
||||
|
||||
/// Removes the item copying the last value into the position of the one to
|
||||
/// remove. It's generally faster than `remove`.
|
||||
/// remove. It's generally faster than `remove_at`.
|
||||
void remove_at_unordered(U p_index) {
|
||||
ERR_FAIL_INDEX(p_index, count);
|
||||
count--;
|
||||
|
@ -143,12 +139,7 @@ public:
|
|||
count = p_size;
|
||||
} else if (p_size > count) {
|
||||
if (unlikely(p_size > capacity)) {
|
||||
if (capacity == 0) {
|
||||
capacity = 1;
|
||||
}
|
||||
while (capacity < p_size) {
|
||||
capacity <<= 1;
|
||||
}
|
||||
capacity = tight ? p_size : nearest_power_of_2_templated(p_size);
|
||||
data = (T *)memrealloc(data, capacity * sizeof(T));
|
||||
CRASH_COND_MSG(!data, "Out of memory");
|
||||
}
|
||||
|
|
|
@ -211,10 +211,10 @@ public:
|
|||
size_mask = mask;
|
||||
}
|
||||
|
||||
RingBuffer<T>(int p_power = 0) {
|
||||
RingBuffer(int p_power = 0) {
|
||||
resize(p_power);
|
||||
}
|
||||
~RingBuffer<T>() {}
|
||||
~RingBuffer() {}
|
||||
};
|
||||
|
||||
#endif // RING_BUFFER_H
|
||||
|
|
|
@ -132,7 +132,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
_ALWAYS_INLINE_ explicit SafeNumeric<T>(T p_value = static_cast<T>(0)) {
|
||||
_ALWAYS_INLINE_ explicit SafeNumeric(T p_value = static_cast<T>(0)) {
|
||||
set(p_value);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -305,9 +305,9 @@ struct BuildIndexSequence<0, Is...> : IndexSequence<Is...> {};
|
|||
#endif
|
||||
|
||||
// Macro GD_IS_DEFINED() allows to check if a macro is defined. It needs to be defined to anything (say 1) to work.
|
||||
#define __GDARG_PLACEHOLDER_1 0,
|
||||
#define __GDARG_PLACEHOLDER_1 false,
|
||||
#define __gd_take_second_arg(__ignored, val, ...) val
|
||||
#define ____gd_is_defined(arg1_or_junk) __gd_take_second_arg(arg1_or_junk 1, 0)
|
||||
#define ____gd_is_defined(arg1_or_junk) __gd_take_second_arg(arg1_or_junk true, false)
|
||||
#define ___gd_is_defined(val) ____gd_is_defined(__GDARG_PLACEHOLDER_##val)
|
||||
#define GD_IS_DEFINED(x) ___gd_is_defined(x)
|
||||
|
||||
|
|
|
@ -466,7 +466,7 @@ Array Array::slice(int p_begin, int p_end, int p_step, bool p_deep) const {
|
|||
ERR_FAIL_COND_V_MSG(p_step > 0 && begin > end, result, "Slice is positive, but bounds is decreasing.");
|
||||
ERR_FAIL_COND_V_MSG(p_step < 0 && begin < end, result, "Slice is negative, but bounds is increasing.");
|
||||
|
||||
int result_size = (end - begin) / p_step;
|
||||
int result_size = (end - begin) / p_step + (((end - begin) % p_step != 0) ? 1 : 0);
|
||||
result.resize(result_size);
|
||||
|
||||
for (int src_idx = begin, dest_idx = 0; dest_idx < result_size; ++dest_idx) {
|
||||
|
|
|
@ -2941,7 +2941,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
|
|||
return hash_one_uint64((uint64_t)_data._int);
|
||||
} break;
|
||||
case FLOAT: {
|
||||
return hash_murmur3_one_float(_data._float);
|
||||
return hash_murmur3_one_double(_data._float);
|
||||
} break;
|
||||
case STRING: {
|
||||
return reinterpret_cast<const String *>(_data._mem)->hash();
|
||||
|
@ -3158,7 +3158,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
|
|||
}
|
||||
return hash_fmix32(h);
|
||||
} else {
|
||||
return hash_murmur3_one_float(0.0);
|
||||
return hash_murmur3_one_double(0.0);
|
||||
}
|
||||
|
||||
} break;
|
||||
|
@ -3659,9 +3659,9 @@ String Variant::get_call_error_text(Object *p_base, const StringName &p_method,
|
|||
err_text = "Cannot convert argument " + itos(errorarg + 1) + " from [missing argptr, type unknown] to " + Variant::get_type_name(Variant::Type(ce.expected));
|
||||
}
|
||||
} else if (ce.error == Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS) {
|
||||
err_text = "Method expected " + itos(ce.argument) + " arguments, but called with " + itos(p_argcount);
|
||||
err_text = "Method expected " + itos(ce.expected) + " arguments, but called with " + itos(p_argcount);
|
||||
} else if (ce.error == Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS) {
|
||||
err_text = "Method expected " + itos(ce.argument) + " arguments, but called with " + itos(p_argcount);
|
||||
err_text = "Method expected " + itos(ce.expected) + " arguments, but called with " + itos(p_argcount);
|
||||
} else if (ce.error == Callable::CallError::CALL_ERROR_INVALID_METHOD) {
|
||||
err_text = "Method not found";
|
||||
} else if (ce.error == Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
|
||||
|
|
|
@ -1906,7 +1906,7 @@ static void _register_variant_builtin_methods() {
|
|||
bind_method(Vector4, distance_squared_to, sarray("to"), varray());
|
||||
bind_method(Vector4, dot, sarray("with"), varray());
|
||||
bind_method(Vector4, inverse, sarray(), varray());
|
||||
bind_method(Vector4, is_equal_approx, sarray("with"), varray());
|
||||
bind_method(Vector4, is_equal_approx, sarray("to"), varray());
|
||||
bind_method(Vector4, is_zero_approx, sarray(), varray());
|
||||
bind_method(Vector4, is_finite, sarray(), varray());
|
||||
|
||||
|
|
|
@ -374,6 +374,7 @@ struct VariantUtilityFunctions {
|
|||
r_error.error = Callable::CallError::CALL_OK;
|
||||
if (from.get_type() != to.get_type()) {
|
||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
r_error.expected = from.get_type();
|
||||
r_error.argument = 1;
|
||||
return Variant();
|
||||
}
|
||||
|
@ -542,7 +543,8 @@ struct VariantUtilityFunctions {
|
|||
}
|
||||
Variant base = *p_args[0];
|
||||
Variant ret;
|
||||
for (int i = 1; i < p_argcount; i++) {
|
||||
|
||||
for (int i = 0; i < p_argcount; i++) {
|
||||
Variant::Type arg_type = p_args[i]->get_type();
|
||||
if (arg_type != Variant::INT && arg_type != Variant::FLOAT) {
|
||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
|
@ -550,6 +552,9 @@ struct VariantUtilityFunctions {
|
|||
r_error.argument = i;
|
||||
return Variant();
|
||||
}
|
||||
if (i == 0) {
|
||||
continue;
|
||||
}
|
||||
bool valid;
|
||||
Variant::evaluate(Variant::OP_LESS, base, *p_args[i], ret, valid);
|
||||
if (!valid) {
|
||||
|
@ -582,7 +587,8 @@ struct VariantUtilityFunctions {
|
|||
}
|
||||
Variant base = *p_args[0];
|
||||
Variant ret;
|
||||
for (int i = 1; i < p_argcount; i++) {
|
||||
|
||||
for (int i = 0; i < p_argcount; i++) {
|
||||
Variant::Type arg_type = p_args[i]->get_type();
|
||||
if (arg_type != Variant::INT && arg_type != Variant::FLOAT) {
|
||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
|
||||
|
@ -590,6 +596,9 @@ struct VariantUtilityFunctions {
|
|||
r_error.argument = i;
|
||||
return Variant();
|
||||
}
|
||||
if (i == 0) {
|
||||
continue;
|
||||
}
|
||||
bool valid;
|
||||
Variant::evaluate(Variant::OP_GREATER, base, *p_args[i], ret, valid);
|
||||
if (!valid) {
|
||||
|
|
|
@ -40,13 +40,13 @@
|
|||
// Defines the main "branch" version. Patch versions in this branch should be
|
||||
// forward-compatible.
|
||||
// Example: "3.1"
|
||||
#define VERSION_BRANCH "" _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR)
|
||||
#define VERSION_BRANCH _MKSTR(VERSION_MAJOR) "." _MKSTR(VERSION_MINOR)
|
||||
#if VERSION_PATCH
|
||||
// Example: "3.1.4"
|
||||
#define VERSION_NUMBER "" VERSION_BRANCH "." _MKSTR(VERSION_PATCH)
|
||||
#define VERSION_NUMBER VERSION_BRANCH "." _MKSTR(VERSION_PATCH)
|
||||
#else // patch is 0, we don't include it in the "pretty" version number.
|
||||
// Example: "3.1" instead of "3.1.0"
|
||||
#define VERSION_NUMBER "" VERSION_BRANCH
|
||||
#define VERSION_NUMBER VERSION_BRANCH
|
||||
#endif // VERSION_PATCH
|
||||
|
||||
// Version number encoded as hexadecimal int with one byte for each number,
|
||||
|
@ -57,16 +57,16 @@
|
|||
// Describes the full configuration of that Godot version, including the version number,
|
||||
// the status (beta, stable, etc.) and potential module-specific features (e.g. mono).
|
||||
// Example: "3.1.4.stable.mono"
|
||||
#define VERSION_FULL_CONFIG "" VERSION_NUMBER "." VERSION_STATUS VERSION_MODULE_CONFIG
|
||||
#define VERSION_FULL_CONFIG VERSION_NUMBER "." VERSION_STATUS VERSION_MODULE_CONFIG
|
||||
|
||||
// Similar to VERSION_FULL_CONFIG, but also includes the (potentially custom) VERSION_BUILD
|
||||
// description (e.g. official, custom_build, etc.).
|
||||
// Example: "3.1.4.stable.mono.official"
|
||||
#define VERSION_FULL_BUILD "" VERSION_FULL_CONFIG "." VERSION_BUILD
|
||||
#define VERSION_FULL_BUILD VERSION_FULL_CONFIG "." VERSION_BUILD
|
||||
|
||||
// Same as above, but prepended with Godot's name and a cosmetic "v" for "version".
|
||||
// Example: "Godot v3.1.4.stable.official.mono"
|
||||
#define VERSION_FULL_NAME "" VERSION_NAME " v" VERSION_FULL_BUILD
|
||||
#define VERSION_FULL_NAME VERSION_NAME " v" VERSION_FULL_BUILD
|
||||
|
||||
// Git commit hash, generated at build time in `core/version_hash.gen.cpp`.
|
||||
extern const char *const VERSION_HASH;
|
||||
|
|
24
doc/Makefile
24
doc/Makefile
|
@ -1,28 +1,28 @@
|
|||
BASEDIR = .
|
||||
CLASSES = $(BASEDIR)/classes/ $(BASEDIR)/../modules/
|
||||
CLASSES = "$(BASEDIR)/classes/" "$(BASEDIR)/../modules/"
|
||||
OUTPUTDIR = $(BASEDIR)/_build
|
||||
TOOLSDIR = $(BASEDIR)/tools
|
||||
JSDIR = $(BASEDIR)/../platform/web
|
||||
JSDIR = "$(BASEDIR)/../platform/web"
|
||||
LANGARG ?= en
|
||||
LANGCMD = -l $(LANGARG)
|
||||
|
||||
.ONESHELL:
|
||||
|
||||
clean:
|
||||
rm -rf $(OUTPUTDIR)
|
||||
rm -rf "$(OUTPUTDIR)"
|
||||
|
||||
doxygen:
|
||||
rm -rf $(OUTPUTDIR)/doxygen
|
||||
mkdir -p $(OUTPUTDIR)/doxygen
|
||||
rm -rf "$(OUTPUTDIR)/doxygen"
|
||||
mkdir -p "$(OUTPUTDIR)/doxygen"
|
||||
doxygen Doxyfile
|
||||
|
||||
rst:
|
||||
rm -rf $(OUTPUTDIR)/rst
|
||||
mkdir -p $(OUTPUTDIR)/rst
|
||||
python3 $(TOOLSDIR)/make_rst.py -o $(OUTPUTDIR)/rst $(LANGCMD) $(CLASSES)
|
||||
rm -rf "$(OUTPUTDIR)/rst"
|
||||
mkdir -p "$(OUTPUTDIR)/rst"
|
||||
python3 "$(TOOLSDIR)/make_rst.py" -o "$(OUTPUTDIR)/rst" "$(LANGCMD)" $(CLASSES)
|
||||
|
||||
rstjs:
|
||||
rm -rf $(OUTPUTDIR)/rstjs
|
||||
mkdir -p $(OUTPUTDIR)/rstjs
|
||||
npm --prefix $(JSDIR) ci
|
||||
npm --prefix $(JSDIR) run docs -- --destination $(OUTPUTDIR)/rstjs/html5_shell_classref.rst
|
||||
rm -rf "$(OUTPUTDIR)/rstjs"
|
||||
mkdir -p "$(OUTPUTDIR)/rstjs"
|
||||
npm --prefix "$(JSDIR)" ci
|
||||
npm --prefix "$(JSDIR)" run docs -- --destination "$(OUTPUTDIR)/rstjs/html5_shell_classref.rst"
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<return type="float" />
|
||||
<param index="0" name="x" type="float" />
|
||||
<description>
|
||||
Returns the arc cosine of [param x] in radians. Use to get the angle of cosine [param x]. [param x] must be between [code]-1.0[/code] and [code]1.0[/code] (inclusive), otherwise, [method acos] will return [constant @GDScript.NAN].
|
||||
Returns the arc cosine of [param x] in radians. Use to get the angle of cosine [param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/code] (inclusive), in order to prevent [method acos] from returning [constant @GDScript.NAN].
|
||||
[codeblock]
|
||||
# c is 0.523599 or 30 degrees if converted with rad_to_deg(c)
|
||||
var c = acos(0.866025)
|
||||
|
@ -76,7 +76,7 @@
|
|||
<return type="float" />
|
||||
<param index="0" name="x" type="float" />
|
||||
<description>
|
||||
Returns the arc sine of [param x] in radians. Use to get the angle of sine [param x]. [param x] must be between [code]-1.0[/code] and [code]1.0[/code] (inclusive), otherwise, [method asin] will return [constant @GDScript.NAN].
|
||||
Returns the arc sine of [param x] in radians. Use to get the angle of sine [param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/code] (inclusive), in order to prevent [method asin] from returning [constant @GDScript.NAN].
|
||||
[codeblock]
|
||||
# s is 0.523599 or 30 degrees if converted with rad_to_deg(s)
|
||||
var s = asin(0.5)
|
||||
|
@ -341,7 +341,7 @@
|
|||
- 1.0: Linear
|
||||
- Greater than 1.0 (exclusive): Ease in
|
||||
[/codeblock]
|
||||
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/ease_cheatsheet.png]ease() curve values cheatsheet[/url]
|
||||
[url=https://raw.githubusercontent.com/godotengine/godot-docs/4.0/img/ease_cheatsheet.png]ease() curve values cheatsheet[/url]
|
||||
See also [method smoothstep]. If you need to perform more advanced transitions, use [method Tween.interpolate_value].
|
||||
</description>
|
||||
</method>
|
||||
|
@ -622,7 +622,7 @@
|
|||
<description>
|
||||
Linearly interpolates between two values by the factor defined in [param weight]. To perform interpolation, [param weight] should be between [code]0.0[/code] and [code]1.0[/code] (inclusive). However, values outside this range are allowed and can be used to perform [i]extrapolation[/i]. If this is not desired, use [method clampf] on the result of this function.
|
||||
[codeblock]
|
||||
lerp(0, 4, 0.75) # Returns 3.0
|
||||
lerpf(0, 4, 0.75) # Returns 3.0
|
||||
[/codeblock]
|
||||
See also [method inverse_lerp] which performs the reverse of this operation. To perform eased interpolation with [method lerp], combine it with [method ease] or [method smoothstep].
|
||||
</description>
|
||||
|
@ -645,8 +645,8 @@
|
|||
<return type="float" />
|
||||
<param index="0" name="x" type="float" />
|
||||
<description>
|
||||
Returns the natural logarithm of [param x]. This is the amount of time needed to reach a certain level of continuous growth.
|
||||
[b]Note:[/b] This is not the same as the "log" function on most calculators, which uses a base 10 logarithm.
|
||||
Returns the [url=https://en.wikipedia.org/wiki/Natural_logarithm]natural logarithm[/url] of [param x] (base [url=https://en.wikipedia.org/wiki/E_(mathematical_constant)][i]e[/i][/url], with [i]e[/i] being approximately 2.71828). This is the amount of time needed to reach a certain level of continuous growth.
|
||||
[b]Note:[/b] This is not the same as the "log" function on most calculators, which uses a base 10 logarithm. To use base 10 logarithm, use [code]log(x) / log(10)[/code].
|
||||
[codeblock]
|
||||
log(10) # Returns 2.302585
|
||||
[/codeblock]
|
||||
|
@ -826,17 +826,21 @@
|
|||
</method>
|
||||
<method name="print_rich" qualifiers="vararg">
|
||||
<description>
|
||||
Converts one or more arguments of any type to string in the best way possible and prints them to the console. The following BBCode tags are supported: b, i, u, s, indent, code, url, center, right, color, bgcolor, fgcolor. Color tags only support named colors such as [code]red[/code], [i]not[/i] hexadecimal color codes. Unsupported tags will be left as-is in standard output.
|
||||
When printing to standard output, the supported subset of BBCode is converted to ANSI escape codes for the terminal emulator to display. Displaying ANSI escape codes is currently only supported on Linux and macOS. Support for ANSI escape codes may vary across terminal emulators, especially for italic and strikethrough.
|
||||
Converts one or more arguments of any type to string in the best way possible and prints them to the console.
|
||||
The following BBCode tags are supported: [code]b[/code], [code]i[/code], [code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], [code]url[/code], [code]center[/code], [code]right[/code], [code]color[/code], [code]bgcolor[/code], [code]fgcolor[/code].
|
||||
Color tags only support the following named colors: [code]black[/code], [code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/code], [code]magenta[/code], [code]pink[/code], [code]purple[/code], [code]cyan[/code], [code]white[/code], [code]orange[/code], [code]gray[/code]. Hexadecimal color codes are not supported.
|
||||
URL tags only support URLs wrapped by a URL tag, not URLs with a different title.
|
||||
When printing to standard output, the supported subset of BBCode is converted to ANSI escape codes for the terminal emulator to display. Support for ANSI escape codes varies across terminal emulators, especially for italic and strikethrough. In standard output, [code]code[/code] is represented with faint text but without any font change. Unsupported tags are left as-is in standard output.
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
print_rich("[code][b]Hello world![/b][/code]") # Prints out: [b]Hello world![/b]
|
||||
print_rich("[color=green][b]Hello world![/b][/color]") # Prints out "Hello world!" in green with a bold font
|
||||
[/gdscript]
|
||||
[csharp]
|
||||
GD.PrintRich("[code][b]Hello world![/b][/code]"); // Prints out: [b]Hello world![/b]
|
||||
GD.PrintRich("[color=green][b]Hello world![/b][/color]"); // Prints out "Hello world!" in green with a bold font
|
||||
[/csharp]
|
||||
[/codeblocks]
|
||||
[b]Note:[/b] Consider using [method push_error] and [method push_warning] to print error and warning messages instead of [method print] or [method print_rich]. This distinguishes them from print messages used for debugging purposes, while also displaying a stack trace when an error or warning is printed.
|
||||
[b]Note:[/b] On Windows, only Windows 10 and later correctly displays ANSI escape codes in standard output.
|
||||
</description>
|
||||
</method>
|
||||
<method name="print_verbose" qualifiers="vararg">
|
||||
|
@ -1142,9 +1146,9 @@
|
|||
<description>
|
||||
Returns [code]-1.0[/code] if [param x] is negative, [code]1.0[/code] if [param x] is positive, and [code]0.0[/code] if [param x] is zero.
|
||||
[codeblock]
|
||||
sign(-6.5) # Returns -1.0
|
||||
sign(0.0) # Returns 0.0
|
||||
sign(6.5) # Returns 1.0
|
||||
signf(-6.5) # Returns -1.0
|
||||
signf(0.0) # Returns 0.0
|
||||
signf(6.5) # Returns 1.0
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -1154,9 +1158,9 @@
|
|||
<description>
|
||||
Returns [code]-1[/code] if [param x] is negative, [code]1[/code] if [param x] is positive, and [code]0[/code] if if [param x] is zero.
|
||||
[codeblock]
|
||||
sign(-6) # Returns -1
|
||||
sign(0) # Returns 0
|
||||
sign(6) # Returns 1
|
||||
signi(-6) # Returns -1
|
||||
signi(0) # Returns 0
|
||||
signi(6) # Returns 1
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -1198,7 +1202,7 @@
|
|||
smoothstep(0, 2, 2.0) # Returns 1.0
|
||||
[/codeblock]
|
||||
Compared to [method ease] with a curve value of [code]-1.6521[/code], [method smoothstep] returns the smoothest possible curve with no sudden changes in the derivative. If you need to perform more advanced transitions, use [Tween] or [AnimationPlayer].
|
||||
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, -1.6521) return values[/url]
|
||||
[url=https://raw.githubusercontent.com/godotengine/godot-docs/4.0/img/smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, -1.6521) return values[/url]
|
||||
</description>
|
||||
</method>
|
||||
<method name="snapped">
|
||||
|
@ -1226,8 +1230,8 @@
|
|||
Returns the multiple of [param step] that is the closest to [param x]. This can also be used to round a floating point number to an arbitrary number of decimals.
|
||||
A type-safe version of [method snapped], returning a [float].
|
||||
[codeblock]
|
||||
snapped(32.0, 2.5) # Returns 32.5
|
||||
snapped(3.14159, 0.01) # Returns 3.14
|
||||
snappedf(32.0, 2.5) # Returns 32.5
|
||||
snappedf(3.14159, 0.01) # Returns 3.14
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -1239,8 +1243,8 @@
|
|||
Returns the multiple of [param step] that is the closest to [param x].
|
||||
A type-safe version of [method snapped], returning an [int].
|
||||
[codeblock]
|
||||
snapped(53, 16) # Returns 48
|
||||
snapped(4096, 100) # Returns 4100
|
||||
snappedi(53, 16) # Returns 48
|
||||
snappedi(4096, 100) # Returns 4100
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
|
@ -2432,10 +2436,10 @@
|
|||
Enum value which doesn't correspond to any MIDI message. This is used to initialize [enum MIDIMessage] properties with a generic state.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_NOTE_OFF" value="8" enum="MIDIMessage">
|
||||
MIDI note OFF message. See the documentation of [InputEventMIDI] for information of how to use MIDI inputs.
|
||||
MIDI note OFF message. Not all MIDI devices send this event; some send [constant MIDI_MESSAGE_NOTE_ON] with zero velocity instead. See the documentation of [InputEventMIDI] for information of how to use MIDI inputs.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_NOTE_ON" value="9" enum="MIDIMessage">
|
||||
MIDI note ON message. See the documentation of [InputEventMIDI] for information of how to use MIDI inputs.
|
||||
MIDI note ON message. Some MIDI devices send this event with velocity zero instead of [constant MIDI_MESSAGE_NOTE_OFF], but implementations vary. See the documentation of [InputEventMIDI] for information of how to use MIDI inputs.
|
||||
</constant>
|
||||
<constant name="MIDI_MESSAGE_AFTERTOUCH" value="10" enum="MIDIMessage">
|
||||
MIDI aftertouch message. This message is most often sent by pressing down on the key after it "bottoms out".
|
||||
|
@ -2773,6 +2777,7 @@
|
|||
The property is shown in the [EditorInspector] (default).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_INTERNAL" value="8" enum="PropertyUsageFlags" is_bitfield="true">
|
||||
The property is excluded from the class reference.
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_CHECKABLE" value="16" enum="PropertyUsageFlags" is_bitfield="true">
|
||||
The property can be checked in the [EditorInspector].
|
||||
|
@ -2838,10 +2843,10 @@
|
|||
The property is read-only in the [EditorInspector].
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_DEFAULT" value="6" enum="PropertyUsageFlags" is_bitfield="true">
|
||||
Default usage (storage, editor and network).
|
||||
Default usage (storage and editor).
|
||||
</constant>
|
||||
<constant name="PROPERTY_USAGE_NO_EDITOR" value="2" enum="PropertyUsageFlags" is_bitfield="true">
|
||||
Default usage but without showing the property in the editor (storage, network).
|
||||
Default usage but without showing the property in the editor (storage).
|
||||
</constant>
|
||||
<constant name="METHOD_FLAG_NORMAL" value="1" enum="MethodFlags" is_bitfield="true">
|
||||
Flag for a normal method.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AABB" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Axis-Aligned Bounding Box.
|
||||
A 3D axis-aligned bounding box.
|
||||
</brief_description>
|
||||
<description>
|
||||
[AABB] consists of a position, a size, and several utility functions. It is typically used for fast overlap tests.
|
||||
|
@ -188,7 +188,7 @@
|
|||
<param index="0" name="from" type="Vector3" />
|
||||
<param index="1" name="dir" type="Vector3" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the given ray intersects with this [AABB]. Ray length is infinite.
|
||||
Returns the point of intersection of the given ray with this [AABB] or [code]null[/code] if there is no intersection. Ray length is infinite.
|
||||
</description>
|
||||
</method>
|
||||
<method name="intersects_segment" qualifiers="const">
|
||||
|
@ -196,7 +196,7 @@
|
|||
<param index="0" name="from" type="Vector3" />
|
||||
<param index="1" name="to" type="Vector3" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the [AABB] intersects the line segment between [param from] and [param to].
|
||||
Returns the point of intersection between [param from] and [param to] with this [AABB] or [code]null[/code] if there is no intersection.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_equal_approx" qualifiers="const">
|
||||
|
@ -237,7 +237,7 @@
|
|||
<return type="bool" />
|
||||
<param index="0" name="right" type="AABB" />
|
||||
<description>
|
||||
Returns [code]true[/code] if the vectors are not equal.
|
||||
Returns [code]true[/code] if the AABBs are not equal.
|
||||
[b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
|
||||
</description>
|
||||
</operator>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AESContext" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Interface to low level AES encryption features.
|
||||
Provides access to AES encryption/decryption of raw data.
|
||||
</brief_description>
|
||||
<description>
|
||||
This class provides access to AES encryption/decryption of raw data. Both AES-ECB and AES-CBC mode are supported.
|
||||
This class holds the context information required for encryption and decryption operations with AES (Advanced Encryption Standard). Both AES-ECB and AES-CBC modes are supported.
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
extends Node
|
||||
|
@ -15,27 +15,27 @@
|
|||
var key = "My secret key!!!" # Key must be either 16 or 32 bytes.
|
||||
var data = "My secret text!!" # Data size must be multiple of 16 bytes, apply padding if needed.
|
||||
# Encrypt ECB
|
||||
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8())
|
||||
var encrypted = aes.update(data.to_utf8())
|
||||
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
|
||||
var encrypted = aes.update(data.to_utf8_buffer())
|
||||
aes.finish()
|
||||
# Decrypt ECB
|
||||
aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8())
|
||||
aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer())
|
||||
var decrypted = aes.update(encrypted)
|
||||
aes.finish()
|
||||
# Check ECB
|
||||
assert(decrypted == data.to_utf8())
|
||||
assert(decrypted == data.to_utf8_buffer())
|
||||
|
||||
var iv = "My secret iv!!!!" # IV must be of exactly 16 bytes.
|
||||
# Encrypt CBC
|
||||
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8())
|
||||
encrypted = aes.update(data.to_utf8())
|
||||
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
|
||||
encrypted = aes.update(data.to_utf8_buffer())
|
||||
aes.finish()
|
||||
# Decrypt CBC
|
||||
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8(), iv.to_utf8())
|
||||
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
|
||||
decrypted = aes.update(encrypted)
|
||||
aes.finish()
|
||||
# Check CBC
|
||||
assert(decrypted == data.to_utf8())
|
||||
assert(decrypted == data.to_utf8_buffer())
|
||||
[/gdscript]
|
||||
[csharp]
|
||||
using Godot;
|
||||
|
@ -50,27 +50,27 @@
|
|||
string key = "My secret key!!!"; // Key must be either 16 or 32 bytes.
|
||||
string data = "My secret text!!"; // Data size must be multiple of 16 bytes, apply padding if needed.
|
||||
// Encrypt ECB
|
||||
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8());
|
||||
byte[] encrypted = _aes.Update(data.ToUtf8());
|
||||
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer());
|
||||
byte[] encrypted = _aes.Update(data.ToUtf8Buffer());
|
||||
_aes.Finish();
|
||||
// Decrypt ECB
|
||||
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8());
|
||||
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer());
|
||||
byte[] decrypted = _aes.Update(encrypted);
|
||||
_aes.Finish();
|
||||
// Check ECB
|
||||
Debug.Assert(decrypted == data.ToUtf8());
|
||||
Debug.Assert(decrypted == data.ToUtf8Buffer());
|
||||
|
||||
string iv = "My secret iv!!!!"; // IV must be of exactly 16 bytes.
|
||||
// Encrypt CBC
|
||||
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8(), iv.ToUtf8());
|
||||
encrypted = _aes.Update(data.ToUtf8());
|
||||
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
|
||||
encrypted = _aes.Update(data.ToUtf8Buffer());
|
||||
_aes.Finish();
|
||||
// Decrypt CBC
|
||||
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8(), iv.ToUtf8());
|
||||
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
|
||||
decrypted = _aes.Update(encrypted);
|
||||
_aes.Finish();
|
||||
// Check CBC
|
||||
Debug.Assert(decrypted == data.ToUtf8());
|
||||
Debug.Assert(decrypted == data.ToUtf8Buffer());
|
||||
}
|
||||
}
|
||||
[/csharp]
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AcceptDialog" inherits="Window" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Base dialog for user notification.
|
||||
A base dialog used for user notification.
|
||||
</brief_description>
|
||||
<description>
|
||||
This dialog is useful for small notifications to the user about an event. It can only be accepted or closed, with the same result.
|
||||
The default use of [AcceptDialog] is to allow it to only be accepted or closed, with the same result. However, the [signal confirmed] and [signal canceled] signals allow to make the two actions different, and the [method add_button] method allows to add custom buttons and actions.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatableBody2D" inherits="StaticBody2D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Physics body for 2D physics which moves only by script or animation. Useful for moving platforms and doors.
|
||||
Physics body for 2D physics which moves only by script or animation (while affecting other bodies on its path). Useful for moving platforms and doors.
|
||||
</brief_description>
|
||||
<description>
|
||||
Animatable body for 2D physics.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimatableBody3D" inherits="StaticBody3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Physics body for 3D physics which moves only by script or animation. Useful for moving platforms and doors.
|
||||
Physics body for 3D physics which moves only by script or animation (while affecting other bodies on its path). Useful for moving platforms and doors.
|
||||
</brief_description>
|
||||
<description>
|
||||
Animatable body for 3D physics.
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Animation" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Contains data used to animate everything in the engine.
|
||||
Holds data that can be used to animate anything in the engine.
|
||||
</brief_description>
|
||||
<description>
|
||||
An Animation resource contains data used to animate everything in the engine. Animations are divided into tracks, and each track must be linked to a node. The state of that node can be changed through time, by adding timed keys (events) to the track.
|
||||
This resource holds data that can be used to animate anything in the engine. Animations are divided into tracks and each track must be linked to a node. The state of that node can be changed through time, by adding timed keys (events) to the track.
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
# This creates an animation that makes the node "Enemy" move to the right by
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNode" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Base resource for [AnimationTree] nodes.
|
||||
Base class for [AnimationTree] nodes. Not related to scene nodes.
|
||||
</brief_description>
|
||||
<description>
|
||||
Base resource for [AnimationTree] nodes. In general, it's not used directly, but you can create custom ones with custom blending formulas.
|
||||
Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], otherwise [AnimationRootNode] should be used instead.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="_get_caption" qualifiers="virtual const">
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations additively based on an amount value in the [code][0.0, 1.0][/code] range.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
- A +add animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeAnimation" inherits="AnimationRootNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Input animation to use in an [AnimationNodeBlendTree].
|
||||
An input animation for an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. Only features one output set using the [member animation] property. Use it as an input for [AnimationNode] that blend animations together.
|
||||
A resource to add to an [AnimationNodeBlendTree]. Only has one output port using the [member animation] property. Used as an input for [AnimationNode]s that blend animations together.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
A resource to add to an [AnimationNodeBlendTree]. Blends two animations linearly based on an amount value in the [code][0.0, 1.0][/code] range.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
|
|
|
@ -11,6 +11,6 @@
|
|||
- A +blend animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace1D" inherits="AnimationRootNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Blends linearly between two of any number of [AnimationNode] of any type placed on a virtual axis.
|
||||
A set of [AnimationRootNode]s placed on a virtual axis, crossfading between the two adjacent ones. Used by [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree].
|
||||
This is a virtual axis on which you can add any type of [AnimationNode] using [method add_blend_point].
|
||||
Outputs the linear blend of the two [AnimationNode]s closest to the node's current value.
|
||||
You can set the extents of the axis using the [member min_space] and [member max_space].
|
||||
A resource used by [AnimationNodeBlendTree].
|
||||
[AnimationNodeBlendSpace1D] represents a virtual axis on which any type of [AnimationRootNode]s can be added using [method add_blend_point]. Outputs the linear blend of the two [AnimationRootNode]s adjacent to the current value.
|
||||
You can set the extents of the axis with [member min_space] and [member max_space].
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="add_blend_point">
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendSpace2D" inherits="AnimationRootNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Blends linearly between three [AnimationNode] of any type placed in a 2D space.
|
||||
A set of [AnimationRootNode]s placed on 2D coordinates, crossfading between the three adjacent ones. Used by [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree].
|
||||
This node allows you to blend linearly between three animations using a [Vector2] weight.
|
||||
You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to create up the blend space by hand.
|
||||
A resource used by [AnimationNodeBlendTree].
|
||||
[AnimationNodeBlendSpace1D] represents a virtual 2D space on which [AnimationRootNode]s are placed. Outputs the linear blend of the three adjacent animations using a [Vector2] weight. Adjacent in this context means the three [AnimationRootNode]s making up the triangle that contains the current value.
|
||||
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 triangulate the blend space by hand.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeBlendTree" inherits="AnimationRootNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
[AnimationTree] node resource that contains many blend type nodes.
|
||||
A sub-tree of blend type [AnimationNode]s used for complex animations. Used by [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
This node may contain a sub-tree of any other blend type nodes, such as [AnimationNodeTransition], [AnimationNodeBlend2], [AnimationNodeBlend3], [AnimationNodeOneShot], etc. This is one of the most commonly used roots.
|
||||
This node may contain a sub-tree of any other blend type nodes, such as [AnimationNodeTransition], [AnimationNodeBlend2], [AnimationNodeBlend3], [AnimationNodeOneShot], etc. This is one of the most commonly used animation node roots.
|
||||
An [AnimationNodeOutput] node named [code]output[/code] is created by default.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOneShot" inherits="AnimationNodeSync" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Plays an animation once in [AnimationNodeBlendTree].
|
||||
Plays an animation once in an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A resource to add to an [AnimationNodeBlendTree]. This node will execute a sub-animation and return once it finishes. Blend times for fading in and out can be customized, as well as filters.
|
||||
|
@ -25,10 +25,10 @@
|
|||
[/gdscript]
|
||||
[csharp]
|
||||
// Play child animation connected to "shot" port.
|
||||
animationTree.Set("parameters/OneShot/request", AnimationNodeOneShot.ONE_SHOT_REQUEST_FIRE);
|
||||
animationTree.Set("parameters/OneShot/request", (int)AnimationNodeOneShot.OneShotRequest.Fire);
|
||||
|
||||
// Abort child animation connected to "shot" port.
|
||||
animationTree.Set("parameters/OneShot/request", AnimationNodeOneShot.ONE_SHOT_REQUEST_ABORT);
|
||||
animationTree.Set("parameters/OneShot/request", (int)AnimationNodeOneShot.OneShotRequest.Abort);
|
||||
|
||||
// Get current state (read-only).
|
||||
animationTree.Get("parameters/OneShot/active");
|
||||
|
@ -36,7 +36,7 @@
|
|||
[/codeblocks]
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeOutput" inherits="AnimationNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Generic output node to be added to [AnimationNodeBlendTree].
|
||||
The animation output node of an [AnimationNodeBlendTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
A node created automatically in an [AnimationNodeBlendTree] that outputs the final animation.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachine" inherits="AnimationRootNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
State machine for control of animations.
|
||||
A state machine with multiple [AnimationRootNode]s, used by [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
Contains multiple nodes representing animation states, connected in a graph. Node transitions can be configured to happen automatically or via code, using a shortest-path algorithm. Retrieve the [AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to control it programmatically.
|
||||
Contains multiple [AnimationRootNode]s representing animation states, connected in a graph. Node transitions can be configured to happen automatically or via code, using a shortest-path algorithm. Retrieve the [AnimationNodeStateMachinePlayback] object from the [AnimationTree] node to control it programmatically.
|
||||
[b]Example:[/b]
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
|
@ -18,7 +18,7 @@
|
|||
[/codeblocks]
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="add_node">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachinePlayback" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Playback control for [AnimationNodeStateMachine].
|
||||
Provides playback control for an [AnimationNodeStateMachine].
|
||||
</brief_description>
|
||||
<description>
|
||||
Allows control of [AnimationTree] state machines created with [AnimationNodeStateMachine]. Retrieve with [code]$AnimationTree.get("parameters/playback")[/code].
|
||||
|
@ -12,13 +12,13 @@
|
|||
state_machine.travel("some_state")
|
||||
[/gdscript]
|
||||
[csharp]
|
||||
var stateMachine = GetNode<AnimationTree>("AnimationTree").Get("parameters/playback") as AnimationNodeStateMachinePlayback;
|
||||
var stateMachine = GetNode<AnimationTree>("AnimationTree").Get("parameters/playback").As<AnimationNodeStateMachinePlayback>();
|
||||
stateMachine.Travel("some_state");
|
||||
[/csharp]
|
||||
[/codeblocks]
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<methods>
|
||||
<method name="get_current_length" qualifiers="const">
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeStateMachineTransition" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A resource to connect each node to make a path for [AnimationNodeStateMachine].
|
||||
A transition within an [AnimationNodeStateMachine] connecting two [AnimationRootNode]s.
|
||||
</brief_description>
|
||||
<description>
|
||||
The path generated when using [method AnimationNodeStateMachinePlayback.travel] is limited to the nodes connected by [AnimationNodeStateMachineTransition].
|
||||
You can set the timing and conditions of the transition in detail.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&""">
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeSync" inherits="AnimationNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
The base class for [AnimationNode] which has more than two input ports and needs to synchronize them.
|
||||
Base class for [AnimationNode]s with more than two input ports that must be synchronized.
|
||||
</brief_description>
|
||||
<description>
|
||||
An animation node used to combine, mix, or blend two or more animations together while keeping them synchronized within an [AnimationTree].
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTimeScale" inherits="AnimationNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A time-scaling animation node to be used with [AnimationTree].
|
||||
A time-scaling animation node used in [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
Allows scaling the speed of the animation (or reversing it) in any children nodes. Setting it to 0 will pause the animation.
|
||||
Allows to scale the speed of the animation (or reverse it) in any children [AnimationNode]s. Setting it to [code]0.0[/code] will pause the animation.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTimeSeek" inherits="AnimationNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A time-seeking animation node to be used with [AnimationTree].
|
||||
A time-seeking animation node used in [AnimationTree].
|
||||
</brief_description>
|
||||
<description>
|
||||
This node can be used to cause a seek command to happen to any sub-children of the animation graph. Use this node type to play an [Animation] from the start or a certain playback position inside the [AnimationNodeBlendTree].
|
||||
|
@ -28,6 +28,6 @@
|
|||
[/codeblocks]
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationNodeTransition" inherits="AnimationNodeSync" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A generic animation transition node for [AnimationTree].
|
||||
A transition within an [AnimationTree] connecting two [AnimationNode]s.
|
||||
</brief_description>
|
||||
<description>
|
||||
Simple state machine for cases which don't require a more advanced [AnimationNodeStateMachine]. Animations can be connected to the inputs and transition times can be specified.
|
||||
|
@ -37,7 +37,7 @@
|
|||
[/codeblocks]
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
|
||||
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
|
||||
</tutorials>
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationPlayer" inherits="Node" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Player of [Animation] resources.
|
||||
A node used for animation playback.
|
||||
</brief_description>
|
||||
<description>
|
||||
An animation player is used for general-purpose playback of [Animation] resources. It contains a dictionary of [AnimationLibrary] resources and custom blend times between animation transitions.
|
||||
An animation player is used for general-purpose playback of animations. It contains a dictionary of [AnimationLibrary] resources and custom blend times between animation transitions.
|
||||
Some methods and properties use a single key to reference an animation directly. These keys are formatted as the key for the library, followed by a forward slash, then the key for the animation within the library, for example [code]"movement/run"[/code]. If the library's key is an empty string (known as the default library), the forward slash is omitted, being the same key used by the library.
|
||||
[AnimationPlayer] is more suited than [Tween] for animations where you know the final values in advance. For example, fading a screen in and out is more easily done with an [AnimationPlayer] node thanks to the animation tools provided by the editor. That particular example can also be implemented with a [Tween], but it requires doing everything by code.
|
||||
Updating the target properties of animations occurs at process time.
|
||||
[AnimationPlayer] is better-suited than [Tween] for more complex animations, for example ones with non-trivial timings. It can also be used over [Tween] if the animation track editor is more convenient than doing it in code.
|
||||
Updating the target properties of animations occurs at the process frame.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
|
||||
|
@ -94,6 +94,7 @@
|
|||
<param index="0" name="name" type="StringName" />
|
||||
<description>
|
||||
Returns the first [AnimationLibrary] with key [param name] or [code]null[/code] if not found.
|
||||
To get the [AnimationPlayer]'s global animation library, use [code]get_animation_library("")[/code].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_animation_library_list" qualifiers="const">
|
||||
|
@ -230,7 +231,7 @@
|
|||
</methods>
|
||||
<members>
|
||||
<member name="assigned_animation" type="String" setter="set_assigned_animation" getter="get_assigned_animation">
|
||||
If playing, the the current animation's key, otherwise, the animation last played. When set, this changes the animation, but will not play it unless already playing. See also [member current_animation].
|
||||
If playing, the current animation's key, otherwise, the animation last played. When set, this changes the animation, but will not play it unless already playing. See also [member current_animation].
|
||||
</member>
|
||||
<member name="audio_max_polyphony" type="int" setter="set_audio_max_polyphony" getter="get_audio_max_polyphony" default="32">
|
||||
The number of possible simultaneous sounds for each of the assigned AudioStreamPlayers.
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationRootNode" inherits="AnimationNode" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
The [AnimationNode] which can be set as the root of an [AnimationTree].
|
||||
Base class for [AnimationNode]s that hold one or multiple composite animations. Usually used for [member AnimationTree.tree_root].
|
||||
</brief_description>
|
||||
<description>
|
||||
[AnimationRootNode] is a base class for [AnimationNode]s that hold a complete animation. A complete animation refers to the output of an [AnimationNodeOutput] in an [AnimationNodeBlendTree] or the output of another [AnimationRootNode]. Used for [member AnimationTree.tree_root] or in other [AnimationRootNode]s.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
|
||||
</tutorials>
|
||||
</class>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AnimationTree" inherits="Node" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A node to be used for advanced animation transitions in an [AnimationPlayer].
|
||||
A node used for advanced animation transitions in an [AnimationPlayer].
|
||||
</brief_description>
|
||||
<description>
|
||||
A node to be used for advanced animation transitions in an [AnimationPlayer].
|
||||
A node used for advanced animation transitions in an [AnimationPlayer].
|
||||
[b]Note:[/b] When linked with an [AnimationPlayer], several properties and methods of the corresponding [AnimationPlayer] will not function as expected. Playback and transitions should be handled using only the [AnimationTree] and its constituent [AnimationNode](s). The [AnimationPlayer] node should be used solely for adding, deleting, and editing animations.
|
||||
</description>
|
||||
<tutorials>
|
||||
|
|
|
@ -128,7 +128,7 @@
|
|||
The magnitude of area-specific wind force.
|
||||
</member>
|
||||
<member name="wind_source_path" type="NodePath" setter="set_wind_source_path" getter="get_wind_source_path" default="NodePath("")">
|
||||
The [Node3D] which is used to specify the the direction and origin of an area-specific wind force. The direction is opposite to the z-axis of the [Node3D]'s local transform, and its origin is the origin of the [Node3D]'s local transform.
|
||||
The [Node3D] which is used to specify the direction and origin of an area-specific wind force. The direction is opposite to the z-axis of the [Node3D]'s local transform, and its origin is the origin of the [Node3D]'s local transform.
|
||||
</member>
|
||||
</members>
|
||||
<signals>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Array" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A generic array datatype.
|
||||
A built-in data structure that holds a sequence of elements.
|
||||
</brief_description>
|
||||
<description>
|
||||
A generic array that can contain several elements of any type, accessible by a numerical index starting at 0. Negative indices can be used to count from the back, like in Python (-1 is the last element, -2 is the second to last, etc.).
|
||||
An array data structure that can contain a sequence of elements of any type. Elements are accessed by a numerical index starting at 0. Negative indices are used to count from the back (-1 is the last element, -2 is the second to last, etc.).
|
||||
[b]Example:[/b]
|
||||
[codeblocks]
|
||||
[gdscript]
|
||||
|
@ -38,10 +38,8 @@
|
|||
GD.Print(array1 + array2); // Prints [One, 2, 3, Four]
|
||||
[/csharp]
|
||||
[/codeblocks]
|
||||
[b]Note:[/b] Concatenating with the [code]+=[/code] operator will create a new array, which has a cost. If you want to append another array to an existing array, [method append_array] is more efficient.
|
||||
[b]Note:[/b] Arrays are always passed by reference. To get a copy of an array that can be modified independently of the original array, use [method duplicate].
|
||||
[b]Note:[/b] Erasing elements while iterating over arrays is [b]not[/b] supported and will result in unpredictable behavior.
|
||||
[b]Note:[/b] When declaring an array with [code]const[/code], the array itself can still be mutated by defining the values at individual indices or pushing/removing elements. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -442,12 +440,23 @@
|
|||
<return type="Variant" />
|
||||
<description>
|
||||
Returns the maximum value contained in the array if all elements are of comparable types. If the elements can't be compared, [code]null[/code] is returned.
|
||||
To find the maximum value using a custom comparator, you can use [method reduce]. In this example every array element is checked and the first maximum value is returned:
|
||||
[codeblock]
|
||||
func _ready():
|
||||
var arr = [Vector2(0, 1), Vector2(2, 0), Vector2(1, 1), Vector2(1, 0), Vector2(0, 2)]
|
||||
# In this example we compare the lengths.
|
||||
print(arr.reduce(func(max, val): return val if is_length_greater(val, max) else max))
|
||||
|
||||
func is_length_greater(a, b):
|
||||
return a.length() > b.length()
|
||||
[/codeblock]
|
||||
</description>
|
||||
</method>
|
||||
<method name="min" qualifiers="const">
|
||||
<return type="Variant" />
|
||||
<description>
|
||||
Returns the minimum value contained in the array if all elements are of comparable types. If the elements can't be compared, [code]null[/code] is returned.
|
||||
See also [method max] for an example of using a custom comparator.
|
||||
</description>
|
||||
</method>
|
||||
<method name="pick_random" qualifiers="const">
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AspectRatioContainer" inherits="Container" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Container that preserves its child controls' aspect ratio.
|
||||
A container that preserves the proportions of its child controls.
|
||||
</brief_description>
|
||||
<description>
|
||||
Arranges child controls in a way to preserve their aspect ratio automatically whenever the container is resized. Solves the problem where the container size is dynamic and the contents' size needs to adjust accordingly without losing proportions.
|
||||
A container type that arranges its child controls in a way that preserves their proportions automatically when the container is resized. Useful when a container has a dynamic size and the child nodes must adjust their sizes accordingly without losing their aspect ratios.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="GUI containers">$DOCS_URL/tutorials/ui/gui_containers.html</link>
|
||||
<link title="Using Containers">$DOCS_URL/tutorials/ui/gui_containers.html</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="alignment_horizontal" type="int" setter="set_alignment_horizontal" getter="get_alignment_horizontal" enum="AspectRatioContainer.AlignmentMode" default="1">
|
||||
|
|
|
@ -1,16 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="AudioStreamGenerator" inherits="AudioStream" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Audio stream that generates sounds procedurally.
|
||||
An audio stream with utilities for procedural sound generation.
|
||||
</brief_description>
|
||||
<description>
|
||||
This audio stream does not play back sounds, but expects a script to generate audio data for it instead. See also [AudioStreamGeneratorPlayback].
|
||||
[AudioStreamGenerator] is a type of audio stream that does not play back sounds on its own; instead, it expects a script to generate audio data for it. See also [AudioStreamGeneratorPlayback].
|
||||
Here's a sample on how to use it to generate a sine wave:
|
||||
[codeblock]
|
||||
var playback # Will hold the AudioStreamGeneratorPlayback.
|
||||
@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
|
||||
var pulse_hz = 440.0 # The frequency of the sound wave.
|
||||
|
||||
func _ready():
|
||||
$AudioStreamPlayer.play()
|
||||
playback = $AudioStreamPlayer.get_stream_playback()
|
||||
fill_buffer()
|
||||
|
||||
func fill_buffer():
|
||||
var phase = 0.0
|
||||
var increment = pulse_hz / sample_hz
|
||||
var frames_available = playback.get_frames_available()
|
||||
|
||||
for i in range(frames_available):
|
||||
playback.push_frame(Vector2.ONE * sin(phase * TAU))
|
||||
phase = fmod(phase + increment, 1.0)
|
||||
[/codeblock]
|
||||
In the example above, the "AudioStreamPlayer" node must use an [AudioStreamGenerator] as its stream. The [code]fill_buffer[/code] function provides audio data for approximating a sine wave.
|
||||
See also [AudioEffectSpectrumAnalyzer] for performing real-time audio spectrum analysis.
|
||||
[b]Note:[/b] Due to performance constraints, this class is best used from C# or from a compiled language via GDExtension. If you still want to use this class from GDScript, consider using a lower [member mix_rate] such as 11,025 Hz or 22,050 Hz.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
|
||||
<link title="Godot 3.2 will get new audio features">https://godotengine.org/article/godot-32-will-get-new-audio-features</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="0.5">
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<param index="3" name="pitch_scale" type="float" default="1.0" />
|
||||
<description>
|
||||
Play an [AudioStream] at a given offset, volume and pitch scale. Playback starts immediately.
|
||||
The return value is an unique integer ID that is associated to this playback stream and which can be used to control it.
|
||||
The return value is a unique integer ID that is associated to this playback stream and which can be used to control it.
|
||||
This ID becomes invalid when the stream ends (if it does not loop), when the [AudioStreamPlaybackPolyphonic] is stopped, or when [method stop_stream] is called.
|
||||
This function returns [constant INVALID_ID] if the amount of streams currently playing equals [member AudioStreamPolyphonic.polyphony]. If you need a higher amount of maximum polyphony, raise this value.
|
||||
</description>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="BaseButton" inherits="Control" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Base class for different kinds of buttons.
|
||||
Abstract base class for GUI buttons.
|
||||
</brief_description>
|
||||
<description>
|
||||
BaseButton is the abstract base class for buttons, so it shouldn't be used directly (it doesn't display anything). Other types of buttons inherit from it.
|
||||
[BaseButton] is an abstract base class for GUI buttons. It doesn't display anything by itself.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
@ -49,6 +49,7 @@
|
|||
</member>
|
||||
<member name="button_group" type="ButtonGroup" setter="set_button_group" getter="get_button_group">
|
||||
The [ButtonGroup] associated with the button. Not to be confused with node groups.
|
||||
[b]Note:[/b] The button will be configured as a radio button if a [ButtonGroup] is assigned to it.
|
||||
</member>
|
||||
<member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButtonMask" default="1">
|
||||
Binary mask to choose which mouse buttons this button will respond to.
|
||||
|
|
|
@ -356,13 +356,13 @@
|
|||
[b]Note:[/b] [member specular_mode] only applies to the specular blob. It does not affect specular reflections from the sky, screen-space reflections, [VoxelGI], SDFGI or [ReflectionProbe]s. To disable reflections from these sources as well, set [member metallic_specular] to [code]0.0[/code] instead.
|
||||
</member>
|
||||
<member name="subsurf_scatter_enabled" type="bool" setter="set_feature" getter="get_feature" default="false">
|
||||
If [code]true[/code], subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges.
|
||||
If [code]true[/code], subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges. Subsurface scattering quality is controlled by [member ProjectSettings.rendering/environment/subsurface_scattering/subsurface_scattering_quality].
|
||||
</member>
|
||||
<member name="subsurf_scatter_skin_mode" type="bool" setter="set_flag" getter="get_flag" default="false">
|
||||
If [code]true[/code], subsurface scattering will use a special mode optimized for the color and density of human skin, such as boosting the intensity of the red channel in subsurface scattering.
|
||||
</member>
|
||||
<member name="subsurf_scatter_strength" type="float" setter="set_subsurface_scattering_strength" getter="get_subsurface_scattering_strength" default="0.0">
|
||||
The strength of the subsurface scattering effect.
|
||||
The strength of the subsurface scattering effect. The depth of the effect is also controlled by [member ProjectSettings.rendering/environment/subsurface_scattering/subsurface_scattering_scale], which is set globally.
|
||||
</member>
|
||||
<member name="subsurf_scatter_texture" type="Texture2D" setter="set_texture" getter="get_texture">
|
||||
Texture used to control the subsurface scattering strength. Stored in the red texture channel. Multiplied by [member subsurf_scatter_strength].
|
||||
|
@ -390,7 +390,7 @@
|
|||
Repeat flags for the texture. See [enum TextureFilter] for options.
|
||||
</member>
|
||||
<member name="transparency" type="int" setter="set_transparency" getter="get_transparency" enum="BaseMaterial3D.Transparency" default="0">
|
||||
If [code]true[/code], transparency is enabled on the body. Some transparency modes will disable shadow casting. Any transparency mode other than Disabled has a greater performance impact compared to opaque rendering. See also [member blend_mode].
|
||||
The material's transparency mode. Some transparency modes will disable shadow casting. Any transparency mode other than [constant TRANSPARENCY_DISABLED] has a greater performance impact compared to opaque rendering. See also [member blend_mode].
|
||||
</member>
|
||||
<member name="use_particle_trails" type="bool" setter="set_flag" getter="get_flag" default="false">
|
||||
If [code]true[/code], enables parts of the shader required for [GPUParticles3D] trails to function. This also requires using a mesh with appropriate skinning, such as [RibbonTrailMesh] or [TubeTrailMesh]. Enabling this feature outside of materials used in [GPUParticles3D] meshes will break material rendering.
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Basis" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
3×3 matrix datatype.
|
||||
A 3×3 matrix for representing 3D rotation and scale.
|
||||
</brief_description>
|
||||
<description>
|
||||
3×3 matrix used for 3D rotation and scale. Almost always used as an orthogonal basis for a [Transform3D].
|
||||
A 3×3 matrix used for representing 3D rotation and scale. Usually used as an orthogonal basis for a [Transform3D].
|
||||
Contains 3 vector fields X, Y and Z as its columns, which are typically interpreted as the local basis vectors of a transformation. For such use, it is composed of a scaling and a rotation matrix, in that order (M = R.S).
|
||||
Can also be accessed as array of 3D vectors. These vectors are normally orthogonal to each other, but are not necessarily normalized (due to scaling).
|
||||
Basis can also be accessed as an array of 3D vectors. These vectors are usually orthogonal to each other, but are not necessarily normalized (due to scaling).
|
||||
For more information, read the "Matrices and transforms" documentation article.
|
||||
</description>
|
||||
<tutorials>
|
||||
|
@ -110,13 +110,13 @@
|
|||
<return type="bool" />
|
||||
<param index="0" name="b" type="Basis" />
|
||||
<description>
|
||||
Returns [code]true[/code] if this basis and [param b] are approximately equal, by calling [code]is_equal_approx[/code] on each component.
|
||||
Returns [code]true[/code] if this basis and [param b] are approximately equal, by calling [method @GlobalScope.is_equal_approx] on all vector components.
|
||||
</description>
|
||||
</method>
|
||||
<method name="is_finite" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<description>
|
||||
Returns [code]true[/code] if this basis is finite, by calling [method @GlobalScope.is_finite] on each component.
|
||||
Returns [code]true[/code] if this basis is finite, by calling [method @GlobalScope.is_finite] on all vector components.
|
||||
</description>
|
||||
</method>
|
||||
<method name="looking_at" qualifiers="static">
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="Bone2D" inherits="Node2D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
Joint used with [Skeleton2D] to control and animate other nodes.
|
||||
A joint used with [Skeleton2D] to control and animate other nodes.
|
||||
</brief_description>
|
||||
<description>
|
||||
Use a hierarchy of [code]Bone2D[/code] bound to a [Skeleton2D] to control, and animate other [Node2D] nodes.
|
||||
You can use [code]Bone2D[/code] and [code]Skeleton2D[/code] nodes to animate 2D meshes created with the Polygon 2D UV editor.
|
||||
A hierarchy of [Bone2D]s can be bound to a [Skeleton2D] to control and animate other [Node2D] nodes.
|
||||
You can use [Bone2D] and [Skeleton2D] nodes to animate 2D meshes created with the [Polygon2D] UV editor.
|
||||
Each bone has a [member rest] transform that you can reset to with [method apply_rest]. These rest poses are relative to the bone's parent.
|
||||
If in the editor, you can set the rest pose of an entire skeleton using a menu option, from the code, you need to iterate over the bones to set their individual rest poses.
|
||||
</description>
|
||||
|
@ -21,14 +21,14 @@
|
|||
<method name="get_autocalculate_length_and_angle" qualifiers="const">
|
||||
<return type="bool" />
|
||||
<description>
|
||||
Returns whether this [code]Bone2D[/code] node is going to autocalculate its length and bone angle using its first [code]Bone2D[/code] child node, if one exists. If there are no [code]Bone2D[/code] children, then it cannot autocalculate these values and will print a warning.
|
||||
Returns whether this [Bone2D] is going to autocalculate its length and bone angle using its first [Bone2D] child node, if one exists. If there are no [Bone2D] children, then it cannot autocalculate these values and will print a warning.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_bone_angle" qualifiers="const">
|
||||
<return type="float" />
|
||||
<description>
|
||||
Returns the angle of the bone in the [code]Bone2D[/code] node.
|
||||
[b]Note:[/b] This is different from the [code]Bone2D[/code]'s rotation. The bone angle is the rotation of the bone shown by the [code]Bone2D[/code] gizmo, and because [code]Bone2D[/code] bones are based on positions, this can vary from the actual rotation of the [code]Bone2D[/code] node.
|
||||
Returns the angle of the bone in the [Bone2D].
|
||||
[b]Note:[/b] This is different from the [Bone2D]'s rotation. The bone's angle is the rotation of the bone shown by the gizmo, which is unaffected by the [Bone2D]'s [member Node2D.transform].
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_index_in_skeleton" qualifiers="const">
|
||||
|
@ -40,7 +40,7 @@
|
|||
<method name="get_length" qualifiers="const">
|
||||
<return type="float" />
|
||||
<description>
|
||||
Returns the length of the bone in the [code]Bone2D[/code] node.
|
||||
Returns the length of the bone in the [Bone2D] node.
|
||||
</description>
|
||||
</method>
|
||||
<method name="get_skeleton_rest" qualifiers="const">
|
||||
|
@ -53,22 +53,22 @@
|
|||
<return type="void" />
|
||||
<param index="0" name="auto_calculate" type="bool" />
|
||||
<description>
|
||||
When set to [code]true[/code], the [code]Bone2D[/code] node will attempt to automatically calculate the bone angle and length using the first child [code]Bone2D[/code] node, if one exists. If none exist, the [code]Bone2D[/code] cannot automatically calculate these values and will print a warning.
|
||||
When set to [code]true[/code], the [Bone2D] node will attempt to automatically calculate the bone angle and length using the first child [Bone2D] node, if one exists. If none exist, the [Bone2D] cannot automatically calculate these values and will print a warning.
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_bone_angle">
|
||||
<return type="void" />
|
||||
<param index="0" name="angle" type="float" />
|
||||
<description>
|
||||
Sets the bone angle for the [code]Bone2D[/code] node. This is typically set to the rotation from the [code]Bone2D[/code] node to a child [code]Bone2D[/code] node.
|
||||
[b]Note:[/b] This is different from the [code]Bone2D[/code]'s rotation. The bone angle is the rotation of the bone shown by the [code]Bone2D[/code] gizmo, and because [code]Bone2D[/code] bones are based on positions, this can vary from the actual rotation of the [code]Bone2D[/code] node.
|
||||
Sets the bone angle for the [Bone2D]. This is typically set to the rotation from the [Bone2D] to a child [Bone2D] node.
|
||||
[b]Note:[/b] [b]Note:[/b] This is different from the [Bone2D]'s rotation. The bone's angle is the rotation of the bone shown by the gizmo, which is unaffected by the [Bone2D]'s [member Node2D.transform].
|
||||
</description>
|
||||
</method>
|
||||
<method name="set_length">
|
||||
<return type="void" />
|
||||
<param index="0" name="length" type="float" />
|
||||
<description>
|
||||
Sets the length of the bone in the [code]Bone2D[/code] node.
|
||||
Sets the length of the bone in the [Bone2D].
|
||||
</description>
|
||||
</method>
|
||||
</methods>
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<class name="BoneAttachment3D" inherits="Node3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
||||
<brief_description>
|
||||
A node that will attach to a bone.
|
||||
А node that dynamically copies or overrides the 3D transform of a bone in its parent [Skeleton3D].
|
||||
</brief_description>
|
||||
<description>
|
||||
This node will allow you to select a bone for this node to attach to. The BoneAttachment3D node can copy the transform of the select bone, or can override the transform of the selected bone.
|
||||
The BoneAttachment3D node must either be a child of a [Skeleton3D] node or be given an external [Skeleton3D] to use in order to function properly.
|
||||
This node selects a bone in a [Skeleton3D] and attaches to it. This means that the [BoneAttachment3D] node will either dynamically copy or override the 3D transform of the selected bone.
|
||||
</description>
|
||||
<tutorials>
|
||||
</tutorials>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue