Compare commits
1130 Commits
Author | SHA1 | Date |
---|---|---|
|
1a192b6129 | |
|
8e3f37d46a | |
|
98778c1645 | |
|
7ca4c63191 | |
|
8788d8bf12 | |
|
f31d722320 | |
|
bbb4512437 | |
|
43ec612949 | |
|
998bf212b7 | |
|
ec8eb4bf91 | |
|
05cd3e67b0 | |
|
ed9762e62f | |
|
ac0b68aa13 | |
|
c3da26caba | |
|
e9f6a6fea5 | |
|
c3144875df | |
|
e37ff39641 | |
|
6292ee4404 | |
|
77dc9b3b85 | |
|
88701e9f20 | |
|
576df4092a | |
|
b8f266588a | |
|
eac7e56f42 | |
|
7aebed5897 | |
|
a6613c32f9 | |
|
76e02a75e5 | |
|
1b9cf17339 | |
|
0584b0401f | |
|
98917a2055 | |
|
10defe21a5 | |
|
3dcbee829c | |
|
e3be34670e | |
|
e3262108d7 | |
|
b144ebc7bc | |
|
672f92c87b | |
|
e2e42b90a8 | |
|
a952009293 | |
|
0982804a86 | |
|
dd427c25e2 | |
|
dddc713a3a | |
|
6fecc1e4b5 | |
|
fe87a87759 | |
|
0e0a4685f9 | |
|
955da07652 | |
|
90c0a9a4f6 | |
|
1359f1e606 | |
|
0d65c1117a | |
|
a5118ebc1b | |
|
17872e7048 | |
|
f7a63ca673 | |
|
691208016c | |
|
35a2cbac56 | |
|
db827a8d30 | |
|
360e24c330 | |
|
e9884589a8 | |
|
9cfdabca3f | |
|
23a6e5fdfe | |
|
6644f191ca | |
|
8b0b15fce4 | |
|
11548c51f0 | |
|
62a142f188 | |
|
7a3d5bc6a2 | |
|
6d79b7474e | |
|
44040dda06 | |
|
ba90deaa6a | |
|
08d8fcdf92 | |
|
51878e4b6e | |
|
008702b1e4 | |
|
6e8c22d598 | |
|
0b3b11a383 | |
|
4cac6276aa | |
|
ea671dd54b | |
|
bc7f677810 | |
|
057d4e669c | |
|
f600d633a3 | |
|
ae61d551c0 | |
|
a14cc4cc68 | |
|
d304f957ef | |
|
bf85350260 | |
|
03476721d9 | |
|
bebd6a15eb | |
|
4c9028fc66 | |
|
e21156df35 | |
|
591a1fe672 | |
|
f90c48eb81 | |
|
162de0f868 | |
|
423c4ce7a4 | |
|
a5d59a0a51 | |
|
85eda3c804 | |
|
6de8b9e4c4 | |
|
bbe71bb378 | |
|
7feff38d6b | |
|
632e26c922 | |
|
106608aca9 | |
|
d5bc62830a | |
|
3b15abf2c9 | |
|
6d049a3701 | |
|
65454c36a8 | |
|
e0e15b0ec4 | |
|
ee8c773e71 | |
|
7f38fe2b8b | |
|
500775eb14 | |
|
1cdde4d5a9 | |
|
eaa43020f5 | |
|
b5b1ac7289 | |
|
ece17d68d9 | |
|
85787616e7 | |
|
11abf36c99 | |
|
19d771fef2 | |
|
2b89d1d23e | |
|
6f318b83b8 | |
|
7a1b56f9c8 | |
|
2b86928737 | |
|
8c557f87f7 | |
|
6776319472 | |
|
760af804c0 | |
|
c49e5142a5 | |
|
60a767032e | |
|
60142b191d | |
|
134bb3214a | |
|
db7c990f51 | |
|
08884e6180 | |
|
c2130a7b2f | |
|
5ddc43fe94 | |
|
601aed3684 | |
|
0e4c06f3b8 | |
|
ac2d734122 | |
|
1ca1154cd0 | |
|
a8a0f24492 | |
|
50e9e570dd | |
|
d72c2e0648 | |
|
da2bc5e3bb | |
|
c4481d8bed | |
|
689c8fab6f | |
|
fd0eb34b4e | |
|
bfcc2f8e1b | |
|
b8c9db0d44 | |
|
4df6647a75 | |
|
d78adabf7c | |
|
1742018696 | |
|
a460c7898b | |
|
8ee3688da2 | |
|
9032ca0c7b | |
|
1cb85807dd | |
|
78396708d4 | |
|
6c86ce566c | |
|
16a3bb0273 | |
|
ac209e7fc3 | |
|
49b3a0ad6f | |
|
ad11f401b1 | |
|
d972b2e7ff | |
|
a5517313d2 | |
|
f694980c6d | |
|
b981d430f1 | |
|
c0bc484f0c | |
|
af68b1eebc | |
|
f83cf659e8 | |
|
bd0dcb3184 | |
|
338c9c8ccb | |
|
a92fb9da8e | |
|
9da16a1e0f | |
|
472f360cf9 | |
|
c94ec7613d | |
|
9ae61e0556 | |
|
9c8d782fb2 | |
|
d709389c87 | |
|
f550ddd23f | |
|
f232069dc4 | |
|
6fabad213e | |
|
cc3d650d23 | |
|
3a4caeb298 | |
|
ee404c828a | |
|
43035839b1 | |
|
cfacd57f15 | |
|
000f9c15d8 | |
|
d7438b8a8d | |
|
b59db1eee8 | |
|
26cf0bb6b4 | |
|
635ada23dd | |
|
e12beee51e | |
|
1f6cc8e55c | |
|
f8ab80defa | |
|
314fcfd741 | |
|
6ada9cef2f | |
|
410efbe0d3 | |
|
85d5af180b | |
|
b4eec2c364 | |
|
02af29f2fa | |
|
3a40de482f | |
|
1e1fb5adaf | |
|
80e3ff705d | |
|
10b90b70fe | |
|
7708a11840 | |
|
98accb1aa8 | |
|
bf33917cfd | |
|
304bd86220 | |
|
629062ea26 | |
|
2528741333 | |
|
d5becadd59 | |
|
7b0d0aa779 | |
|
650e381659 | |
|
6134d5130c | |
|
32d74427e5 | |
|
f14a19b947 | |
|
1b04a8589f | |
|
abb2af7d27 | |
|
84becbe914 | |
|
549a595b42 | |
|
a56272a248 | |
|
63de416066 | |
|
c19fd54927 | |
|
f8c6e83688 | |
|
5a4893fc53 | |
|
14d8df0858 | |
|
868baa470a | |
|
319c5787be | |
|
1e9b321283 | |
|
8b2770116d | |
|
40863313dd | |
|
ee12a56e96 | |
|
0f82fa3d64 | |
|
df11afaf44 | |
|
d2ba904243 | |
|
63ef3e0555 | |
|
869b6465b9 | |
|
91edd1c0b5 | |
|
6b4c97e545 | |
|
5f5b62a4ea | |
|
68a9492f3d | |
|
9abfe4ce95 | |
|
6c794d6a7e | |
|
47ad95b265 | |
|
c4c9b5fe09 | |
|
fc26f51ff2 | |
|
a2a62f636b | |
|
ce1867be7a | |
|
09185211ff | |
|
9e79183579 | |
|
bed04dbf87 | |
|
64df43c7c9 | |
|
d7daa027ee | |
|
abe9a26460 | |
|
2c58cfc3cb | |
|
a1d6276097 | |
|
afc2b63f06 | |
|
af27aca021 | |
|
dad5082e7e | |
|
6aa4e63929 | |
|
8568572092 | |
|
3cce7aa0a6 | |
|
f1dba8f061 | |
|
17eb029497 | |
|
456687c857 | |
|
186ee3c6a7 | |
|
0e059c8a52 | |
|
17ccd50806 | |
|
b478c8eb2c | |
|
cf99a27692 | |
|
f7eb374c1e | |
|
a7881a0eea | |
|
0934e4e672 | |
|
ddbfa132a5 | |
|
7c57c7dd62 | |
|
3565d6dc43 | |
|
18ee21554e | |
|
7073db7bfa | |
|
3e5e34f5f8 | |
|
0f9c566a63 | |
|
86d31f5f00 | |
|
5f40d38f8d | |
|
800bc8f16d | |
|
40acd04eb9 | |
|
f1af947060 | |
|
5f5e4a28cc | |
|
254a9ca943 | |
|
3ceedbebad | |
|
bc99965205 | |
|
cfa1f70d79 | |
|
7c0d49bafa | |
|
da9d80d110 | |
|
4787413cb6 | |
|
2813728785 | |
|
2973590533 | |
|
b74f664da6 | |
|
7baa395d3f | |
|
b305041f28 | |
|
7d6cc1a828 | |
|
4d0d2c0507 | |
|
4cba3b39db | |
|
872f7a4532 | |
|
6432dae35d | |
|
ed19d787f6 | |
|
e3305782f2 | |
|
d98be526b6 | |
|
ae3b4ebb94 | |
|
2f62b53b6a | |
|
8dfbd70718 | |
|
4d4f0d7886 | |
|
cd0bc8e796 | |
|
5e89a82743 | |
|
d2ca303c5e | |
|
fe597a5a46 | |
|
d20d28be78 | |
|
2f1fd6fb62 | |
|
022d95434d | |
|
ce28ed92d2 | |
|
8f294ac5ea | |
|
9410031d45 | |
|
61b2db5a07 | |
|
15464e288c | |
|
4467ebbbd9 | |
|
a2dedabd77 | |
|
2356e6c967 | |
|
b712fe25dc | |
|
5bdec804b3 | |
|
2784937ca8 | |
|
d383e9d1a4 | |
|
4f1b22c668 | |
|
8fa609ef9e | |
|
c6851259e8 | |
|
5a60ad9308 | |
|
7a90fdb113 | |
|
3bc8343e8b | |
|
1c7eb994d4 | |
|
c76278b735 | |
|
fc53078130 | |
|
88583a8a2e | |
|
d6076d131f | |
|
2d1c5fa4ba | |
|
7eaebc4e7c | |
|
db73133f1b | |
|
7c0c81d141 | |
|
adff6bd08c | |
|
06de52492a | |
|
2c8e0d2da0 | |
|
ce5f012101 | |
|
3bca05bc50 | |
|
56bb91df0a | |
|
c793c8ba53 | |
|
808ca1de7f | |
|
809efc1be2 | |
|
29532113c0 | |
|
1e6c3fa92b | |
|
35f2c3c142 | |
|
49f5e3be79 | |
|
a04d4aaca4 | |
|
08ad6c1d99 | |
|
c9825413c0 | |
|
990438db55 | |
|
2b299c0007 | |
|
88e468c526 | |
|
a0cd983927 | |
|
792502db84 | |
|
5f5ecc2db1 | |
|
361eb3eb15 | |
|
dbb89e6883 | |
|
fa3034d190 | |
|
9e0489a034 | |
|
a7d4b1e7f7 | |
|
127fa678f4 | |
|
e0d47ddf08 | |
|
57382e10a7 | |
|
0a28feb7a9 | |
|
6f8f95b5de | |
|
e9eec23c3e | |
|
d0fcea5574 | |
|
e059429760 | |
|
918095622c | |
|
23c19c11e6 | |
|
bc2c4a26ac | |
|
83214fc93b | |
|
e062669cf7 | |
|
2e94bf8bf2 | |
|
e8816091e6 | |
|
fc1b99a5b1 | |
|
04300e5222 | |
|
2f326e5b6f | |
|
064d00fdfa | |
|
ff61d55c44 | |
|
7ab7a9d098 | |
|
b54f3696ff | |
|
dc77ecd2b2 | |
|
026272f7f7 | |
|
d08018b7b1 | |
|
00396dce61 | |
|
69201fa877 | |
|
d920060dee | |
|
2718271bb1 | |
|
3cf90f9387 | |
|
c6b1a40627 | |
|
d36f8f1122 | |
|
a572613001 | |
|
c30c5a4d7a | |
|
ef1c1e5192 | |
|
3b12288ae0 | |
|
a1cdff2e2e | |
|
e43bc25d82 | |
|
549d73b8fc | |
|
0d1e846d93 | |
|
2d493a76bd | |
|
bdfe5f52c2 | |
|
e55611a1a9 | |
|
ba467ad62c | |
|
5e961ec6fa | |
|
bc5d5d8610 | |
|
e5d04b9eda | |
|
e36ea6d3e6 | |
|
803da63fa8 | |
|
84c89356a6 | |
|
a2dae24b99 | |
|
af23272e3d | |
|
506d8aa967 | |
|
5dff2e537b | |
|
75e8e68da4 | |
|
4fe4049c3a | |
|
69e921be31 | |
|
c6bb5bad74 | |
|
2c2f2dd4be | |
|
dedffc4f22 | |
|
4491a23d52 | |
|
0e843d3193 | |
|
769de9a7e2 | |
|
2bfedec518 | |
|
29d4b92bf4 | |
|
40850067c8 | |
|
f45e954e62 | |
|
40ea2ce01a | |
|
e1c8ce4a58 | |
|
af0250dc60 | |
|
4207fbf8f3 | |
|
03de485ebb | |
|
7f89659110 | |
|
1a37540797 | |
|
c4df916bdf | |
|
5048d6a485 | |
|
24382d3fd1 | |
|
5045e5b864 | |
|
c739a876b0 | |
|
5e63477f9b | |
|
09562ffbd3 | |
|
ceeb4dbeb3 | |
|
0ff93faacc | |
|
3918272227 | |
|
302de87e32 | |
|
d48daf2135 | |
|
5ff42e29e4 | |
|
7160804c82 | |
|
58d7ea223e | |
|
e50b00c70e | |
|
31db4b4543 | |
|
671ca50b82 | |
|
a5aea72a17 | |
|
1de6256401 | |
|
930493101d | |
|
ebc2ce310f | |
|
12fd9d00d6 | |
|
f36f5af92a | |
|
94a277ef9d | |
|
6c8045b280 | |
|
6edb7017b9 | |
|
9e62fe8fa3 | |
|
79d72c39e0 | |
|
5a8fe97aac | |
|
d9a9a1d4e5 | |
|
06ea008105 | |
|
705f4d7415 | |
|
cbd467f97f | |
|
088ef008a6 | |
|
06ebff7518 | |
|
39c4511249 | |
|
ca6b497019 | |
|
434545ebad | |
|
a6e6b53e18 | |
|
7de582c4e6 | |
|
e2edb083ff | |
|
b09006a11b | |
|
92010f19f1 | |
|
b0e31f569a | |
|
eba867706b | |
|
3ae38ee5da | |
|
0be16edee0 | |
|
37d3dcd988 | |
|
b0e3753d76 | |
|
9957ef2ea7 | |
|
f4ceb27b35 | |
|
fda6fd5b8f | |
|
b90b85f0c3 | |
|
e182a56f7e | |
|
653bf13a7d | |
|
dd837ff472 | |
|
3f34e4dde2 | |
|
41dafe642a | |
|
25c72302ca | |
|
81f49be6b4 | |
|
2658060b1c | |
|
f452552ecd | |
|
193743e782 | |
|
27f3982250 | |
|
4c26583007 | |
|
ae718ab00c | |
|
bea25049a0 | |
|
0bd52d9b18 | |
|
d66f1e83fd | |
|
923587e6e2 | |
|
ecf1e4b65f | |
|
7cf4a4b3b8 | |
|
88df78c4a2 | |
|
84aeb4bfff | |
|
350c27abbc | |
|
b7d1bc11ab | |
|
e1bddb5d02 | |
|
507da30f04 | |
|
6b376e5e9a | |
|
73aa636271 | |
|
f5d21e2669 | |
|
c96e2019af | |
|
bb6fab7555 | |
|
c4931ae420 | |
|
ba462c9526 | |
|
e260498776 | |
|
6f9ff6a487 | |
|
aab38c9fb9 | |
|
6d877c800a | |
|
543f2bb32c | |
|
eaeb57e2d7 | |
|
1aa64f8c5d | |
|
24730a9213 | |
|
7626c84633 | |
|
2d98a38ada | |
|
c7a4988e6c | |
|
1c01767a56 | |
|
9fbbea49a9 | |
|
01d643831c | |
|
9d99e8bf9f | |
|
d393784bbe | |
|
c8ad4dc956 | |
|
b8d054a080 | |
|
0caa2369c6 | |
|
fb958c7c34 | |
|
8176d5c83c | |
|
5b478b6229 | |
|
27327cf18e | |
|
487c008f5c | |
|
e7f1d3a424 | |
|
0f0a09cc5e | |
|
dad8d86d3e | |
|
e1d03d651a | |
|
291a40d33a | |
|
cac44eadc7 | |
|
78c61d459d | |
|
b3380bd0ac | |
|
7ebdfc9026 | |
|
ecf44e83e0 | |
|
b9cd31eb2b | |
|
0ea8b9932c | |
|
38409d45f9 | |
|
1711cb6b87 | |
|
b220a9f418 | |
|
91f3148493 | |
|
5909735add | |
|
bc3fe05a4d | |
|
d9c6a64a62 | |
|
ed69bcf0bb | |
|
ac2052bd4b | |
|
3c9fc333b0 | |
|
17291081e5 | |
|
b0245457db | |
|
b5247dda0f | |
|
69751260a6 | |
|
8e2fdc4bc0 | |
|
8a226a1160 | |
|
e09928f87f | |
|
cd4e28f391 | |
|
9443c50d94 | |
|
9eb7a9c346 | |
|
1de059d806 | |
|
dae96feeb9 | |
|
f54c86f9fc | |
|
22eea7be0e | |
|
adc9490672 | |
|
7949330c90 | |
|
c925bab659 | |
|
73152b5760 | |
|
065b6dc29b | |
|
102a770c42 | |
|
2451cf801f | |
|
51012571ae | |
|
39d1440b96 | |
|
2fd15f04d6 | |
|
dc8aaa6098 | |
|
778ee80dda | |
|
fa804f3f6d | |
|
79813d57a8 | |
|
f6ce516771 | |
|
92ecc17a44 | |
|
d0ff58052d | |
|
c8ecaf6c8c | |
|
8bce9cceb7 | |
|
154bd2a839 | |
|
bea67b9a87 | |
|
688a5416f2 | |
|
e9e582f251 | |
|
f85555675b | |
|
597a795d6b | |
|
c61f265454 | |
|
67d86214f0 | |
|
4719c77f94 | |
|
828f4dbad5 | |
|
da8c5b9a83 | |
|
c2603554e6 | |
|
1d35d84ec5 | |
|
a839be1ada | |
|
47c0c4e85c | |
|
55fb102838 | |
|
dd3eebabf1 | |
|
58ff47d688 | |
|
a60280ccfb | |
|
be0b5233c0 | |
|
fcedf681cd | |
|
69bcc763f7 | |
|
0081731654 | |
|
6d36d20d06 | |
|
5621b433c9 | |
|
3a6dc1e90c | |
|
55dfd55645 | |
|
e6e2f5595d | |
|
654eda1c65 | |
|
899335d1fe | |
|
95c2496adf | |
|
98a685b592 | |
|
d38e6f97f1 | |
|
fca8aea99c | |
|
22c472fdd1 | |
|
8260954654 | |
|
6405f9031b | |
|
449538d6d3 | |
|
6713ea1590 | |
|
16840057a1 | |
|
a353e561de | |
|
d0c7d98fc4 | |
|
74a3635e1c | |
|
3ce199f628 | |
|
f60fa3a7f2 | |
|
8dc645c9a7 | |
|
c5b92aa676 | |
|
5bd8a90dcd | |
|
3e32051791 | |
|
b0e4c15982 | |
|
b765b2adc8 | |
|
ab564eb631 | |
|
c49f5d2b0a | |
|
9576cdc8e7 | |
|
caff21137d | |
|
61ef929411 | |
|
b4ab521e0f | |
|
ee0795269d | |
|
11f43c2494 | |
|
656bc169b0 | |
|
c44648c69c | |
|
de8d3abbc8 | |
|
011040e46f | |
|
87a1687c74 | |
|
174810fb34 | |
|
7ac1bc2dec | |
|
b8bf8e07e9 | |
|
73f51f23ef | |
|
2612ec0855 | |
|
c81c1ec872 | |
|
a6717ec76d | |
|
761b211740 | |
|
f8ce5c1311 | |
|
662738e6bf | |
|
f912f0acc4 | |
|
a22860b244 | |
|
5fee89b00b | |
|
a251d92aa3 | |
|
8155c2764a | |
|
fb1ab16682 | |
|
06052332b2 | |
|
15e0323919 | |
|
20a995d1d2 | |
|
b04f7530e4 | |
|
f84127657b | |
|
dc40109ade | |
|
8c67886b52 | |
|
a247d0d67b | |
|
6ef0dd942e | |
|
33b455f8d9 | |
|
881a32f92d | |
|
782e72d92d | |
|
a3f8c09766 | |
|
390d4a9385 | |
|
caa1508fea | |
|
db51defddd | |
|
c5be3a725f | |
|
27d3ec7555 | |
|
dc8dcf9d71 | |
|
242c1f03d7 | |
|
7ccda2736d | |
|
a5728a11a0 | |
|
12dbd9e1a6 | |
|
9bfa0268c1 | |
|
1ac96bc330 | |
|
565097e897 | |
|
076269e5e3 | |
|
594097ae4c | |
|
1648728e1b | |
|
3b82946444 | |
|
17a480ed19 | |
|
c63785b5bc | |
|
184361d460 | |
|
aca9784c95 | |
|
61790085cc | |
|
73c6bfe2c7 | |
|
476dc8b0dd | |
|
9b557250b8 | |
|
80781db7cd | |
|
34e763c8f3 | |
|
3fa6d58b01 | |
|
5245f19fa8 | |
|
f9219fd509 | |
|
cbbc0b0135 | |
|
2496869153 | |
|
74a0d44f44 | |
|
48418114da | |
|
cc16879a45 | |
|
46cd946d35 | |
|
c875f9d5d6 | |
|
f546e285b7 | |
|
eec085278a | |
|
947e253bf9 | |
|
1d3cea6b2e | |
|
8cb8f65469 | |
|
392a2ac691 | |
|
c55c6553b2 | |
|
21b5053b72 | |
|
3af6995fd0 | |
|
52f218e6b9 | |
|
e6c87be723 | |
|
0e37d3dfa3 | |
|
ac3da5ab90 | |
|
8e9cc74857 | |
|
1dfa3e9808 | |
|
59537138bc | |
|
68b2aaf9d5 | |
|
a8dc78765b | |
|
835d053c00 | |
|
960f04b0ab | |
|
cdd5159a08 | |
|
1b031dfea3 | |
|
5b475b3273 | |
|
966199e8dc | |
|
c1d0353798 | |
|
a9a38bbffb | |
|
b07fb71359 | |
|
d1030b877c | |
|
59a8ab97d8 | |
|
9645baeb30 | |
|
bb346ef5f2 | |
|
97daa29eda | |
|
73497b1908 | |
|
f9ad9cc794 | |
|
3d86a76db9 | |
|
f5b1b52f67 | |
|
0767c0eee1 | |
|
4f97c1bd24 | |
|
8eed672213 | |
|
2c4e343a48 | |
|
c18fc2abf6 | |
|
c364378e30 | |
|
fb36b6902d | |
|
6ed5bc8203 | |
|
56c3c26572 | |
|
6bcffe712d | |
|
044de6eea0 | |
|
7fc3831384 | |
|
4cf5a18721 | |
|
9e33b81f50 | |
|
22bfb9e3ab | |
|
8af747c599 | |
|
56d7fb91c6 | |
|
ab311c5770 | |
|
586cdb24bd | |
|
3d9426c515 | |
|
3f61204961 | |
|
e03887cdde | |
|
4c93ddabb4 | |
|
a00f370805 | |
|
35f1dabe93 | |
|
a2a2ba1f7b | |
|
c20e0dfc2d | |
|
eccbfc6a0e | |
|
239f6bd94d | |
|
1fb92ca412 | |
|
df231e3f2c | |
|
9abf8a084f | |
|
0f902041e0 | |
|
ed72784766 | |
|
08a8ef9c77 | |
|
f94aca4433 | |
|
0e6c83d07c | |
|
fb8585282d | |
|
a3594e173c | |
|
dfa332490a | |
|
678df76c65 | |
|
2fc5732ed8 | |
|
949583a6b4 | |
|
106abe0b5a | |
|
7bce63fbcb | |
|
91ed8bfe3d | |
|
b4bef31df5 | |
|
b94428b35b | |
|
76b3098ce7 | |
|
5979166c1e | |
|
8c7b19ea12 | |
|
ada246acf9 | |
|
948e99a9ef | |
|
71909648b7 | |
|
60012d984b | |
|
6347311749 | |
|
cc38d257cc | |
|
548ff374ee | |
|
caf1ff86b0 | |
|
3108a9d44b | |
|
c48eeef081 | |
|
554ae5a165 | |
|
1ac24e67bb | |
|
b57528e4dc | |
|
a7bd8b81ea | |
|
9548fb601c | |
|
8a35b17ba6 | |
|
d51be136e1 | |
|
59b2f4af3c | |
|
65346459d3 | |
|
16a55e0f64 | |
|
58848b709c | |
|
f231e854e5 | |
|
55580f25ae | |
|
edfb3527cf | |
|
f4bac67aa9 | |
|
0cb62ea051 | |
|
e8ae3e7b8f | |
|
6e6e9985b2 | |
|
793dba1e07 | |
|
d688953fd8 | |
|
218e4e7361 | |
|
7efca710f2 | |
|
c77b9a92c2 | |
|
52a8dc2a0b | |
|
dca3ba38c0 | |
|
ecc750bfaf | |
|
0ad33e9af6 | |
|
04537d1e96 | |
|
f9f930133f | |
|
bf91be1ff1 | |
|
e05a6fd6ea | |
|
f1694b45ec | |
|
2555c383d6 | |
|
0ae3a53f26 | |
|
166cc8b1d9 | |
|
14c162de39 | |
|
446925adac | |
|
39971b1e1a | |
|
2b13c24277 | |
|
93cba4581a | |
|
d481d43790 | |
|
7dbdd52141 | |
|
8e53f02e00 | |
|
cab9f853c0 | |
|
81b415a6bf | |
|
3d5cbbf50f | |
|
047b75258b | |
|
91d582ab09 | |
|
7324f0462b | |
|
eb58363977 | |
|
cb8c824314 | |
|
f71e158418 | |
|
d887d9ef35 | |
|
0c325e3660 | |
|
f4289ca839 | |
|
84201f6e44 | |
|
d2bde1a805 | |
|
978a47f505 | |
|
00f9e03f02 | |
|
953d98f89c | |
|
b5a44c0807 | |
|
dd978b636c | |
|
cd299bef4b | |
|
27254581a4 | |
|
d0e9bb0ed3 | |
|
1df821fdfa | |
|
52a70fdee5 | |
|
32cbce6b80 | |
|
b33c1cae31 | |
|
a7f6388bd7 | |
|
55e0b7404c | |
|
c94073fb39 | |
|
22d82d7c02 | |
|
e7687d7a57 | |
|
9a4fd8ad12 | |
|
827dc80cce | |
|
efe693347e | |
|
50bcbcf616 | |
|
9ed075120e | |
|
dd01cc82bb | |
|
a998b45341 | |
|
ff4991654f | |
|
f7380db6a2 | |
|
46e45c6cfb | |
|
22f2529b08 | |
|
1753301753 | |
|
5d0d2660f7 | |
|
75a7883184 | |
|
65bd2dbb48 | |
|
9da55981d1 | |
|
c7d7c0fcff | |
|
dc3312cc2e | |
|
a0a2c4e519 | |
|
14128948ee | |
|
bdb158ff27 | |
|
476c4fd497 | |
|
427de50ea1 | |
|
0e10c2022f | |
|
fb98d2f34e | |
|
3e8a158835 | |
|
7767d7c72a | |
|
97eee2a801 | |
|
05486d3907 | |
|
e1604fab67 | |
|
6baa6d5686 | |
|
073cac5e71 | |
|
198954e45f | |
|
029abbfc08 | |
|
3952ba46cb | |
|
fe81b90dc1 | |
|
9ec1675db2 | |
|
eab6ec9323 | |
|
804ff2dddd | |
|
4e9d8d1e18 | |
|
48a149dafa | |
|
8d88d5a7ef | |
|
fe551e0299 | |
|
16b25fa760 | |
|
76689659f7 | |
|
b834175016 | |
|
9ab9599e4f | |
|
8965cb5ce1 | |
|
915ccdc964 | |
|
68fdfb0597 | |
|
6f8292bc2d | |
|
6cf4045e0f | |
|
b9fc99cb2c | |
|
fd87a3633e | |
|
8a5c60322a | |
|
62ab2db885 | |
|
5fe64c5aae | |
|
369aead56a | |
|
f7159123c6 | |
|
3fdcb0b753 | |
|
3667360d35 | |
|
9600e94ee6 | |
|
e3e65994ec | |
|
740f2e2f9e | |
|
7252a37b2c | |
|
dad8d5297f | |
|
108526ec07 | |
|
a625173786 | |
|
8dd61357da | |
|
235d596e59 | |
|
e794436c69 | |
|
4ff1b874f3 | |
|
feab3c1ba9 | |
|
2cc68b23ad | |
|
a07654394b | |
|
5a0ff91658 | |
|
f89b7897f6 | |
|
df92ea02f0 | |
|
25246a1c77 | |
|
e73d4b0959 | |
|
60f1d12246 | |
|
8341396640 | |
|
a601d44517 | |
|
62f964474c | |
|
0bd60bae88 | |
|
cff4626b2d | |
|
04cb2b1560 | |
|
2ffcbf0565 | |
|
26b9327090 | |
|
f489744755 | |
|
a7d86c5356 | |
|
067f73e11e | |
|
2fdcff4886 | |
|
e2d596d44a | |
|
24678e4332 | |
|
4942173e5b | |
|
b33b0c6993 | |
|
00ed65f0fb | |
|
4cabbc6082 | |
|
1cb3b64a29 | |
|
79c71d06f5 | |
|
2afdb4bc95 | |
|
e851011678 | |
|
3f673c6865 | |
|
0ae2b6869a | |
|
17c72b7378 | |
|
a717a3ed8f | |
|
107b94fad6 | |
|
5c3445236f | |
|
b3dedc737e | |
|
985c4812f3 | |
|
a2b123a9be | |
|
03d5de1482 | |
|
8d89f80d6b | |
|
13f5eb1f71 | |
|
21c65541bf | |
|
b1aae71f5f | |
|
46fd93a766 | |
|
d037295e1c | |
|
51fb7b83ae | |
|
4b57c8fd99 | |
|
d642dbedc5 | |
|
015ec64771 | |
|
694eebcf6d | |
|
0c4a98cf35 | |
|
b293d52fbb | |
|
94f6d289a8 | |
|
8e3c4c7570 | |
|
f776779175 | |
|
404c9274f9 | |
|
92b0f24dcb | |
|
0b1d249ebe | |
|
abe1117055 | |
|
fb7ea31a49 | |
|
9eb912816f | |
|
45cf74dca9 | |
|
10e601fcd5 | |
|
f286673dde | |
|
de2137bfd2 | |
|
272824562b | |
|
3741d2ea2c | |
|
b9d3eac5b0 | |
|
557d457c1c | |
|
eb97cd2d5c | |
|
fb9cb06ccb | |
|
d3d5a0c50e | |
|
605444ee0f | |
|
00329bafc9 | |
|
bdb4df82c9 | |
|
ea9d3c77a0 | |
|
a6077e202d | |
|
d6db3f5ed2 | |
|
afe210b014 | |
|
2795c6dcf2 | |
|
5204bf644e | |
|
471a12fec4 | |
|
c8ec35c798 | |
|
34e70d48ce | |
|
b662c10513 | |
|
258437c340 | |
|
458ad5280e | |
|
737bc6b1a2 | |
|
f94dfe9365 | |
|
1b75091dd6 | |
|
9a6b7dc358 | |
|
5fa574b352 | |
|
cc6a0e7b44 | |
|
9ad8a84e8d | |
|
e2b0bd91e2 | |
|
c31f47fe3d | |
|
40a5a8902d | |
|
fb5a1c5208 | |
|
2cbd61f518 | |
|
6c8eb009e2 | |
|
b9066e609a | |
|
cccdf9578a | |
|
fdc0cda9c4 | |
|
74bb5ead32 | |
|
59cb4e6579 | |
|
cd621ee3ea | |
|
0d644d3d20 | |
|
420c883b06 | |
|
442b367bc2 | |
|
3d71ff400d | |
|
83e8ce78c2 | |
|
6434abda76 | |
|
db1bf6a0e0 | |
|
a195266dde | |
|
da3d4e3762 | |
|
e892ef1a36 | |
|
273512ecbb | |
|
22819be2ea | |
|
6699fa0627 | |
|
cc50054b72 | |
|
571d83c6a6 | |
|
a4602d302c | |
|
a61e8ee7bc | |
|
d1605609a2 | |
|
7030b87435 | |
|
7906a493ef | |
|
8a5f53d946 | |
|
f56a37659f | |
|
f651c9c228 | |
|
1ef92176b2 | |
|
c095ee9c5d | |
|
243da98b00 | |
|
62e07e4395 | |
|
0c2ee8ba8e | |
|
d2eede3f76 | |
|
6a35c25a94 | |
|
5dc002098f | |
|
db9233f499 | |
|
62310a75df | |
|
9c1d0009ba | |
|
1a1a9cb57d | |
|
8f7dc638e0 | |
|
2156a2e31c | |
|
5c0c359832 | |
|
29d994f3a0 | |
|
4e0305de51 | |
|
c362001ed4 | |
|
70e81e287d | |
|
8822c9d5db | |
|
077c9553b5 | |
|
0e2f4930e8 | |
|
a6a11f56d9 | |
|
ded2ed2fef | |
|
9abfeadc21 | |
|
9344bce9b1 | |
|
348aa4f750 | |
|
6fc97c43cd |
|
@ -0,0 +1 @@
|
||||||
|
ko_fi: limbonaut
|
|
@ -0,0 +1,64 @@
|
||||||
|
name: Bug report
|
||||||
|
description: Report a bug in LimboAI
|
||||||
|
labels:
|
||||||
|
- bug
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
- Write a descriptive title above.
|
||||||
|
- Search [open](https://github.com/limbonaut/limboai/issues) and [closed](https://github.com/limbonaut/limboai/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported.
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Godot version
|
||||||
|
description: |
|
||||||
|
- Specify the Godot version and hardware information if relevant.
|
||||||
|
- You can copy the version info by clicking on it in the Godot status bar.
|
||||||
|
- Alternatively, you can copy the version and hardware info in Godot using the main menu command "Help -> Copy System Info".
|
||||||
|
placeholder: v4.2.2.limboai+v1.1.0.gha [15073afe3]
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: LimboAI version
|
||||||
|
description: |
|
||||||
|
- Specify the LimboAI version.
|
||||||
|
- You can copy the version info by clicking on it in the toolbar of the LimboAI editor (top-right corner).
|
||||||
|
placeholder: v1.1.0 [8fa609e]
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: variant
|
||||||
|
attributes:
|
||||||
|
label: LimboAI variant
|
||||||
|
description: Which variant of our plugin are you running?
|
||||||
|
options:
|
||||||
|
- GDExtension / AssetLib
|
||||||
|
- Module (custom editor or template build)
|
||||||
|
default: 0
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Issue description
|
||||||
|
description: |
|
||||||
|
- Describe your issue in detail. What doesn't work and how do you expect it to work instead?
|
||||||
|
- Provide screenshots and/or a console output if it helps to convey the problem.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: How to reproduce
|
||||||
|
description: |
|
||||||
|
- Provide a list of steps or sample code that reproduces the issue.
|
||||||
|
- You can provide a small Godot project which reproduces the issue, with no unnecessary files included.
|
||||||
|
- Drag and drop a ZIP archive to upload it (10Mb limit).
|
||||||
|
- Don't include the `.godot` folder in the archive.
|
||||||
|
- Redroduction project helps to find the bug more quickly!
|
||||||
|
validations:
|
||||||
|
required: true
|
|
@ -0,0 +1,14 @@
|
||||||
|
blank_issues_enabled: false
|
||||||
|
|
||||||
|
contact_links:
|
||||||
|
- name: Documentation
|
||||||
|
url: https://limboai.readthedocs.io/en/stable/
|
||||||
|
about: Please see our documentation for more information.
|
||||||
|
|
||||||
|
- name: Discussions
|
||||||
|
url: https://github.com/limbonaut/limboai/discussions
|
||||||
|
about: Need help? Ask questions in Discussions or on our Discord server.
|
||||||
|
|
||||||
|
- name: Discord Server
|
||||||
|
url: https://discord.gg/N5MGC95GpP
|
||||||
|
about: Share your experience or get help on our Discord server.
|
|
@ -0,0 +1,38 @@
|
||||||
|
name: Feature or improvement proposal
|
||||||
|
description: Propose a new feature to be added or improved in LimboAI
|
||||||
|
labels:
|
||||||
|
- enhancement
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
- Write a descriptive title above.
|
||||||
|
- Search [open](https://github.com/limbonaut/limboai/issues) and [closed](https://github.com/limbonaut/limboai/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Problem statement
|
||||||
|
description: |
|
||||||
|
- Describe the problem or limitation you're currently facing with the LimboAI plugin.
|
||||||
|
- If it helps, describe the project you're working on and how it relates to the problem or limitation.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Proposed solution
|
||||||
|
description: |
|
||||||
|
- Describe your proposed solution and how it helps to overcome the problem or limitation.
|
||||||
|
- If it helps, show how it will work with code, pseudo-code, mock-ups, and/or diagrams.
|
||||||
|
- You can include any images or videos with drag'n'drop, and sample code blocks with <code>```</code> tags.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Alternatives
|
||||||
|
description: |
|
||||||
|
- Describe alternative solutions and features you've considered.
|
||||||
|
- If this enhancement will not be used often, can it be worked around with a few clicks or lines of code?
|
||||||
|
validations:
|
||||||
|
required: true
|
|
@ -0,0 +1,33 @@
|
||||||
|
name: Build .NET assemblies
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
platform:
|
||||||
|
required: true
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- linuxbsd
|
||||||
|
- windows
|
||||||
|
- macos
|
||||||
|
bin:
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Override GODOT_VERSION_STATUS for NuGet packages
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
GODOT_VERSION_STATUS=$(echo "${GODOT_VERSION_STATUS}" | sed "s|+|-|").gha
|
||||||
|
echo "GODOT_VERSION_STATUS=${GODOT_VERSION_STATUS}" >> "$GITHUB_ENV"
|
||||||
|
echo "GODOT_VERSION_STATUS: ${GODOT_VERSION_STATUS}"
|
||||||
|
|
||||||
|
- name: Generate C# glue
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
./bin/${{inputs.bin}} --headless --generate-mono-glue ./modules/mono/glue || true
|
||||||
|
|
||||||
|
- name: Build .NET assemblies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=${{ inputs.platform }}
|
|
@ -0,0 +1,24 @@
|
||||||
|
name: Setup version
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Set GDEXTENSION_VERSION & LIMBOAI_VERSION
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cd godot-cpp
|
||||||
|
GDEXTENSION_VERSION=$( (git describe --tags --exact-match HEAD || git rev-parse --short HEAD) | sed 's/\(.*\)-\(.*\)/\1/g' )
|
||||||
|
|
||||||
|
if [[ ${GDEXTENSION_VERSION} == godot-* ]]; then
|
||||||
|
GDEXTENSION_VERSION=${GDEXTENSION_VERSION#"godot-"}
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "GDEXTENSION_VERSION=${GDEXTENSION_VERSION}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
echo "LIMBOAI_VERSION=$( (git describe --tags --exact-match HEAD || git rev-parse --short HEAD) | sed 's/\(.*\)-\(.*\)/\1.\2/g' )" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Set NAME_PREFIX
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "NAME_PREFIX=limboai+${LIMBOAI_VERSION}.gdextension-${GDEXTENSION_VERSION}" >> "$GITHUB_ENV"
|
|
@ -0,0 +1,21 @@
|
||||||
|
name: Setup version
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Set GODOT_VERSION & LIMBOAI_VERSION
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "GODOT_VERSION=$( (git describe --tags --exact-match HEAD || git rev-parse --short HEAD) | sed 's/\(.*\)-\(.*\)/\1/g' )" >> "$GITHUB_ENV"
|
||||||
|
cd modules/limboai
|
||||||
|
echo "LIMBOAI_VERSION=$( (git describe --tags --exact-match HEAD || git rev-parse --short HEAD) | sed 's/\(.*\)-\(.*\)/\1.\2/g' )" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Set NAME_PREFIX
|
||||||
|
shell: bash
|
||||||
|
run: echo "NAME_PREFIX=limboai+${LIMBOAI_VERSION}.godot-${GODOT_VERSION}" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Set GODOT_VERSION_STATUS & BUILD_NAME
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "GODOT_VERSION_STATUS=limboai+${LIMBOAI_VERSION}" >> "$GITHUB_ENV"
|
||||||
|
echo "BUILD_NAME=gha" >> "$GITHUB_ENV"
|
|
@ -0,0 +1,58 @@
|
||||||
|
name: Setup Linux toolchain
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
arch:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- name: Set up environment
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# ! Settings:
|
||||||
|
TOOLCHAIN_64_URL=https://github.com/godotengine/buildroot/releases/download/godot-2020.11.x-2/x86_64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||||
|
TOOLCHAIN_64_SHA=16c8302fcb676c1f0fb9df73d6cff250ba1f4286
|
||||||
|
TOOLCHAIN_32_URL=https://github.com/godotengine/buildroot/releases/download/godot-2020.11.x-2/i686-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||||
|
TOOLCHAIN_32_SHA=6171652abc54ef219e5187bc53660ee4e2f796f4
|
||||||
|
TOOLCHAIN_ARM64_URL=https://github.com/godotengine/buildroot/releases/download/godot-2023.08.x-3/aarch64-godot-linux-gnu_sdk-buildroot.tar.bz2
|
||||||
|
TOOLCHAIN_ARM64_SHA=73bed3d26b92c8b9a93c0ceb6bcce8fe567d1764
|
||||||
|
TOOLCHAIN_ARM32_URL=https://github.com/godotengine/buildroot/releases/download/godot-2023.08.x-3/arm-godot-linux-gnueabihf_sdk-buildroot.tar.bz2
|
||||||
|
TOOLCHAIN_ARM32_SHA=aa5853fd73faec3837c6127649471275d7e61cb2
|
||||||
|
|
||||||
|
# ! Export variables:
|
||||||
|
if [[ "${{ inputs.arch }}" == "x86_64" ]]; then
|
||||||
|
echo "TOOLCHAIN_URL=${TOOLCHAIN_64_URL}" >> "$GITHUB_ENV"
|
||||||
|
echo "TOOLCHAIN_SHA=${TOOLCHAIN_64_SHA}" >> "$GITHUB_ENV"
|
||||||
|
elif [[ "${{ inputs.arch }}" == "x86_32" ]]; then
|
||||||
|
echo "TOOLCHAIN_URL=${TOOLCHAIN_32_URL}" >> "$GITHUB_ENV"
|
||||||
|
echo "TOOLCHAIN_SHA=${TOOLCHAIN_32_SHA}" >> "$GITHUB_ENV"
|
||||||
|
elif [[ "${{ inputs.arch }}" == "arm64" ]]; then
|
||||||
|
echo "TOOLCHAIN_URL=${TOOLCHAIN_ARM64_URL}" >> "$GITHUB_ENV"
|
||||||
|
echo "TOOLCHAIN_SHA=${TOOLCHAIN_ARM64_SHA}" >> "$GITHUB_ENV"
|
||||||
|
elif [[ "${{ inputs.arch }}" == "arm32" ]]; then
|
||||||
|
echo "TOOLCHAIN_URL=${TOOLCHAIN_ARM32_URL}" >> "$GITHUB_ENV"
|
||||||
|
echo "TOOLCHAIN_SHA=${TOOLCHAIN_ARM32_SHA}" >> "$GITHUB_ENV"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Cache buildroot
|
||||||
|
id: cache-buildroot
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: buildroot
|
||||||
|
key: ${{env.TOOLCHAIN_SHA}}
|
||||||
|
|
||||||
|
- name: Set up buildroot
|
||||||
|
if: steps.cache-buildroot.outputs.cache-hit != 'true'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir buildroot
|
||||||
|
wget ${TOOLCHAIN_URL} -O buildroot/buildroot.tar.bz2
|
||||||
|
cd buildroot
|
||||||
|
echo "${TOOLCHAIN_SHA} buildroot.tar.bz2"
|
||||||
|
echo "${TOOLCHAIN_SHA} buildroot.tar.bz2" | shasum --check
|
||||||
|
tar -xjf buildroot.tar.bz2 --strip-components=1
|
||||||
|
ls -l
|
||||||
|
rm buildroot.tar.bz2
|
||||||
|
./relocate-sdk.sh
|
||||||
|
cd ..
|
|
@ -0,0 +1,127 @@
|
||||||
|
name: 🔗 All builds
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
godot-cpp-ref:
|
||||||
|
description: A tag, branch or commit hash in the godot-cpp repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
cache-sha:
|
||||||
|
name: Cache SHA
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
godot-sha: ${{ steps.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-sha: ${{ steps.cache-sha.outputs.limboai-sha }}
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
- name: Cache SHA
|
||||||
|
id: cache-sha
|
||||||
|
run: |
|
||||||
|
echo "godot-sha=$(git describe --tags --exact-match HEAD || git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
cd modules/limboai
|
||||||
|
echo "limboai-sha=$(git describe --tags --exact-match HEAD || git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
android-build:
|
||||||
|
name: 🤖 Android
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/android.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
|
||||||
|
ios-build:
|
||||||
|
name: 🍏 iOS
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/ios.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
|
||||||
|
linux-build:
|
||||||
|
name: 🐧 Linux
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/linux.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
test-build: false
|
||||||
|
|
||||||
|
macos-build:
|
||||||
|
name: 🍎 macOS
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/macos.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
|
||||||
|
windows-build:
|
||||||
|
name: 🪟 Windows
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/windows.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
test-build: false
|
||||||
|
|
||||||
|
web-build:
|
||||||
|
name: 🌐 Web
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/web.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
|
||||||
|
gdextension:
|
||||||
|
name: 🔌 GDExtension
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/gdextension.yml
|
||||||
|
with:
|
||||||
|
godot-cpp-ref: ${{ inputs.godot-cpp-ref }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
test-build: false
|
||||||
|
|
||||||
|
demo:
|
||||||
|
name: 🎮️ Demo project
|
||||||
|
needs: cache-sha
|
||||||
|
uses: ./.github/workflows/demo.yml
|
||||||
|
with:
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
||||||
|
|
||||||
|
merge_templates:
|
||||||
|
name: 📦 Merge templates
|
||||||
|
if: ${{ always() }}
|
||||||
|
needs:
|
||||||
|
[
|
||||||
|
cache-sha,
|
||||||
|
android-build,
|
||||||
|
ios-build,
|
||||||
|
linux-build,
|
||||||
|
macos-build,
|
||||||
|
windows-build,
|
||||||
|
web-build,
|
||||||
|
]
|
||||||
|
uses: ./.github/workflows/merge_templates.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-sha.outputs.godot-sha }}
|
||||||
|
limboai-ref: ${{ needs.cache-sha.outputs.limboai-sha }}
|
|
@ -0,0 +1,277 @@
|
||||||
|
name: 🤖 Android builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: production=yes tests=no verbose=yes warnings=extra werror=yes
|
||||||
|
DOTNET_NOLOGO: true
|
||||||
|
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
android-builds:
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# * Standard arm64
|
||||||
|
|
||||||
|
- name: Template (arm64, debug)
|
||||||
|
arch: arm64
|
||||||
|
target: template_debug
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Template (arm64, release)
|
||||||
|
arch: arm64
|
||||||
|
target: template_release
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
# * Standard arm32
|
||||||
|
|
||||||
|
- name: Template (arm32, debug)
|
||||||
|
arch: arm32
|
||||||
|
target: template_debug
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Template (arm32, release)
|
||||||
|
arch: arm32
|
||||||
|
target: template_release
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
# * Standard x86_64
|
||||||
|
|
||||||
|
- name: Template (x86_64, debug)
|
||||||
|
arch: x86_64
|
||||||
|
target: template_debug
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Template (x86_64, release)
|
||||||
|
arch: x86_64
|
||||||
|
target: template_release
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
# * Standard x86_32
|
||||||
|
|
||||||
|
- name: Template (x86_32, debug)
|
||||||
|
arch: x86_32
|
||||||
|
target: template_debug
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Template (x86_32, release)
|
||||||
|
arch: x86_32
|
||||||
|
target: template_release
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
# * .NET arm64
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, debug)
|
||||||
|
arch: arm64
|
||||||
|
target: template_debug
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, release)
|
||||||
|
arch: arm64
|
||||||
|
target: template_release
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
# * .NET arm32
|
||||||
|
|
||||||
|
- name: Template .NET (arm32, debug)
|
||||||
|
arch: arm32
|
||||||
|
target: template_debug
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Template .NET (arm32, release)
|
||||||
|
arch: arm32
|
||||||
|
target: template_release
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
# * .NET x86_64
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, debug)
|
||||||
|
arch: x86_64
|
||||||
|
target: template_debug
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, release)
|
||||||
|
arch: x86_64
|
||||||
|
target: template_release
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
# * .NET x86_32
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, debug)
|
||||||
|
arch: x86_32
|
||||||
|
target: template_debug
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, release)
|
||||||
|
arch: x86_32
|
||||||
|
target: template_release
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: godot.linuxbsd.${{matrix.target}}.${{matrix.arch}}${{ matrix.dotnet == true && '.mono' || '' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Java 17
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: 17
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
|
||||||
|
# ! Note: we stopped using the scons cache in release builds.
|
||||||
|
# - name: Set up scons cache
|
||||||
|
# uses: actions/cache@v4
|
||||||
|
# with:
|
||||||
|
# path: ${{github.workspace}}/.scons_cache/
|
||||||
|
# key: ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# restore-keys: |
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
scons platform=android target=${{matrix.target}} arch=${{matrix.arch}} module_mono_enabled=${{matrix.dotnet}} ${{env.SCONSFLAGS}}
|
||||||
|
ls platform/android/java/lib/libs/*
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: tmp-android${{matrix.dotnet == true && '-dotnet' || ''}}-templates-${{strategy.job-index}}
|
||||||
|
path: platform/android/java/lib/libs/*
|
||||||
|
|
||||||
|
make-android-package:
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
needs: android-builds
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Package Android templates
|
||||||
|
dotnet: false
|
||||||
|
- name: Package Android .NET templates
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Download Android template builds
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: tmp-android${{matrix.dotnet == true && '-dotnet' || ''}}-templates-*
|
||||||
|
merge-multiple: true
|
||||||
|
path: platform/android/java/lib/libs/
|
||||||
|
|
||||||
|
- name: Set up Java 17
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: 17
|
||||||
|
|
||||||
|
- name: Set up Python 3.x
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
architecture: x64
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
|
||||||
|
- name: Generate Godot templates
|
||||||
|
run: |
|
||||||
|
cd platform/android/java
|
||||||
|
./gradlew generateGodotTemplates
|
||||||
|
cd ../../..
|
||||||
|
ls -l bin/
|
||||||
|
|
||||||
|
mkdir -p out/templates/
|
||||||
|
mv bin/android_* out/templates/
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}${{matrix.dotnet == true && '.mono' || ''}}" > out/templates/version.txt
|
||||||
|
ls -l out/*
|
||||||
|
|
||||||
|
- name: Delete Android template builds
|
||||||
|
uses: geekyeggo/delete-artifact@v5
|
||||||
|
with:
|
||||||
|
name: tmp-android${{matrix.dotnet == true && '-dotnet' || ''}}-templates-*
|
||||||
|
useGlob: true
|
||||||
|
failOnError: false
|
||||||
|
|
||||||
|
- name: Upload Android libs
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.dotnet == true && '.dotnet' || ''}}.android-lib
|
||||||
|
path: bin/godot-lib.*
|
||||||
|
|
||||||
|
- name: Upload Android templates
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.dotnet == true && '.dotnet' || ''}}.export-templates.android
|
||||||
|
path: out/*
|
|
@ -0,0 +1,46 @@
|
||||||
|
name: 🎮️ Demo project
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
package-demo:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Package demo
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-tags: true
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
- name: Init version
|
||||||
|
run: echo "LIMBOAI_VERSION=$( (git describe --tags --exact-match HEAD || git rev-parse --short HEAD) | sed 's/\(.*\)-\(.*\)/\1.\2/g' )" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Prepare artifact
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
cp {README,LICENSE}.md demo/
|
||||||
|
mkdir -p demo/addons/limboai/
|
||||||
|
cp -R icons/ demo/addons/limboai/icons
|
||||||
|
echo "${LIMBOAI_VERSION}" > demo/version.txt
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
env:
|
||||||
|
NAME: limboai+${{env.LIMBOAI_VERSION}}.demo-project
|
||||||
|
with:
|
||||||
|
name: ${{ env.NAME }}
|
||||||
|
path: demo/*
|
|
@ -0,0 +1,386 @@
|
||||||
|
name: 🔌 GDExtension
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-cpp-ref:
|
||||||
|
description: A tag, branch or commit hash in the godot-cpp repository.
|
||||||
|
type: string
|
||||||
|
default: godot-4.3-stable
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
debug-symbols:
|
||||||
|
description: Build with debug symbols
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-cpp-ref:
|
||||||
|
description: A tag, branch or commit hash in the godot-cpp repository.
|
||||||
|
type: string
|
||||||
|
default: godot-4.3-stable
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
debug-symbols:
|
||||||
|
description: Build with debug symbols
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: use_mingw=yes dev_build=no
|
||||||
|
EM_VERSION: 3.1.45
|
||||||
|
EM_CACHE_FOLDER: "emsdk-cache"
|
||||||
|
GODOT_VERSION: 4.4-beta3
|
||||||
|
GODOT_REPO: godotengine/godot-builds
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
gdextension:
|
||||||
|
runs-on: ${{ matrix.opts.runner }}
|
||||||
|
name: ${{ matrix.opts.name }}
|
||||||
|
outputs:
|
||||||
|
name-prefix: ${{ steps.output-name-prefix.outputs.name-prefix }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
- name: 🐧 Linux (x86_64, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: linux
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🐧 Linux (x86_64, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: linux
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🪟 Windows (x86_64, release)
|
||||||
|
runner: windows-latest
|
||||||
|
platform: windows
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🪟 Windows (x86_64, debug)
|
||||||
|
runner: windows-latest
|
||||||
|
platform: windows
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🍎 macOS (universal, release)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: macos
|
||||||
|
target: template_release
|
||||||
|
arch: universal
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🍎 macOS (universal, debug)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: macos
|
||||||
|
target: editor
|
||||||
|
arch: universal
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: 🌐 Web (wasm32, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: web
|
||||||
|
target: template_release
|
||||||
|
arch: wasm32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🌐 Web (wasm32, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: web
|
||||||
|
target: editor
|
||||||
|
arch: wasm32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (arm64, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (arm64, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: editor
|
||||||
|
arch: arm64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (arm32, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: template_release
|
||||||
|
arch: arm32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (arm32, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: editor
|
||||||
|
arch: arm32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (x86_64, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (x86_64, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (x86_32, release)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: template_release
|
||||||
|
arch: x86_32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🤖 Android (x86_32, debug)
|
||||||
|
runner: ubuntu-20.04
|
||||||
|
platform: android
|
||||||
|
target: editor
|
||||||
|
arch: x86_32
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🍏 iOS (arm64, release)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: ios
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🍏 iOS (arm64, debug)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: ios
|
||||||
|
target: editor
|
||||||
|
arch: arm64
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🍏 iOS (simulator, release)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: ios
|
||||||
|
target: template_release
|
||||||
|
arch: universal
|
||||||
|
scons-flags: ios_simulator=yes
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: 🍏 iOS (simulator, debug)
|
||||||
|
runner: macos-latest
|
||||||
|
platform: ios
|
||||||
|
target: editor
|
||||||
|
arch: universal
|
||||||
|
scons-flags: ios_simulator=yes
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- { opts: { should-build: false } }
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: liblimboai.${{matrix.opts.platform}}.${{matrix.opts.target}}.${{matrix.opts.arch}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-tags: true
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
- name: Clone godot-cpp
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot-cpp
|
||||||
|
fetch-tags: true
|
||||||
|
path: godot-cpp
|
||||||
|
ref: ${{ inputs.godot-cpp-ref }}
|
||||||
|
|
||||||
|
# Inits GDEXTENSION_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./.github/actions/init-version-gdext
|
||||||
|
|
||||||
|
- name: Output NAME_PREFIX
|
||||||
|
id: output-name-prefix
|
||||||
|
run: echo "name-prefix=${NAME_PREFIX}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Setup Linux toolchain
|
||||||
|
if: matrix.opts.platform == 'linux'
|
||||||
|
uses: ./.github/actions/setup-linux-toolchain
|
||||||
|
with:
|
||||||
|
arch: ${{matrix.opts.arch}}
|
||||||
|
|
||||||
|
- name: Set up Python 3.x
|
||||||
|
if: matrix.opts.platform == 'windows' || matrix.opts.platform == 'macos'
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
architecture: "x64"
|
||||||
|
|
||||||
|
- name: Set up Emscripten cache
|
||||||
|
if: matrix.opts.platform == 'web'
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{env.EM_CACHE_FOLDER}}
|
||||||
|
key: ${{env.EM_VERSION}}-${{runner.os}}-libs
|
||||||
|
|
||||||
|
- name: Set up Emscripten
|
||||||
|
if: matrix.opts.platform == 'web'
|
||||||
|
uses: mymindstorm/setup-emsdk@v14
|
||||||
|
with:
|
||||||
|
version: ${{env.EM_VERSION}}
|
||||||
|
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
|
||||||
|
|
||||||
|
- name: Verify Emscripten setup
|
||||||
|
if: matrix.opts.platform == 'web'
|
||||||
|
run: |
|
||||||
|
emcc -v
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
if: matrix.opts.platform != 'linux'
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
|
||||||
|
- name: Set up Java 17
|
||||||
|
if: matrix.opts.platform == 'android'
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
distribution: temurin
|
||||||
|
java-version: 17
|
||||||
|
|
||||||
|
- uses: nttld/setup-ndk@v1
|
||||||
|
if: matrix.opts.platform == 'android'
|
||||||
|
id: setup-ndk
|
||||||
|
with:
|
||||||
|
ndk-version: r23c
|
||||||
|
link-to-sdk: true
|
||||||
|
|
||||||
|
- name: Set up MSVC problem matcher on Windows
|
||||||
|
if: matrix.opts.platform == 'windows'
|
||||||
|
uses: ammaraskar/msvc-problem-matcher@master
|
||||||
|
|
||||||
|
- name: Set up scons cache
|
||||||
|
if: inputs.test-build # ! Only cache test/PR builds
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{github.workspace}}/.scons_cache/
|
||||||
|
key: ${{env.BIN}}-${{inputs.debug-symbols}}-${{inputs.godot-cpp-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
restore-keys: |
|
||||||
|
${{env.BIN}}-${{inputs.debug-symbols}}-${{inputs.godot-cpp-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
${{env.BIN}}-${{inputs.debug-symbols}}-${{inputs.godot-cpp-ref}}-${{inputs.limboai-ref}}
|
||||||
|
${{env.BIN}}-${{inputs.debug-symbols}}-${{inputs.godot-cpp-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
DEBUG_FLAGS: ${{ inputs.debug-symbols && 'debug_symbols=yes symbols_visibility=visible' || 'debug_symbols=no' }}
|
||||||
|
run: |
|
||||||
|
PATH=${GITHUB_WORKSPACE}/buildroot/bin:$PATH
|
||||||
|
scons platform=${{matrix.opts.platform}} target=${{matrix.opts.target}} arch=${{matrix.opts.arch}} ${{env.DEBUG_FLAGS}} ${{matrix.opts.scons-flags}} ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Prepare artifact
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
ls -R demo/addons/limboai/
|
||||||
|
mkdir out
|
||||||
|
mv demo/addons/ out/
|
||||||
|
cp {README,LICENSE,LOGO_LICENSE}.md out/addons/limboai/
|
||||||
|
cp -R demo/demo/ out/demo/
|
||||||
|
cp demo/LICENSE_ASSETS.md out/demo/
|
||||||
|
rm -f out/addons/limboai/bin/*.{exp,lib,pdb}
|
||||||
|
echo "${LIMBOAI_VERSION}" > out/addons/limboai/version.txt
|
||||||
|
echo "---"
|
||||||
|
ls -R out/
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
env:
|
||||||
|
NAME: tmp-gdextension.${{matrix.opts.platform}}.${{matrix.opts.target}}.${{matrix.opts.arch}}
|
||||||
|
with:
|
||||||
|
name: ${{ env.NAME }}
|
||||||
|
path: out/*
|
||||||
|
|
||||||
|
package-extension:
|
||||||
|
name: 📦 Package extension
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: gdextension
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Merge artifacts
|
||||||
|
uses: actions/upload-artifact/merge@v4
|
||||||
|
with:
|
||||||
|
name: ${{needs.gdextension.outputs.name-prefix}}
|
||||||
|
pattern: tmp-gdextension.*
|
||||||
|
delete-merged: true
|
||||||
|
|
||||||
|
- name: Download artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{needs.gdextension.outputs.name-prefix}}
|
||||||
|
path: out/
|
||||||
|
|
||||||
|
- name: Setup Godot
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "Downloading Godot ${GODOT_VERSION}"
|
||||||
|
mkdir bin
|
||||||
|
cd bin
|
||||||
|
wget "https://github.com/${GODOT_REPO}/releases/download/${GODOT_VERSION}/Godot_v${GODOT_VERSION}_linux.x86_64.zip" -O godot.zip
|
||||||
|
unzip godot.zip
|
||||||
|
rm godot.zip
|
||||||
|
mv Godot_* godot
|
||||||
|
chmod u+x godot
|
||||||
|
ls -l
|
||||||
|
cd ..
|
||||||
|
./bin/godot --version
|
||||||
|
|
||||||
|
- name: Generate icon .import files
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
touch out/project.godot
|
||||||
|
timeout 20s ./bin/godot --headless --editor --path ./out/ || /bin/true
|
||||||
|
rm out/project.godot
|
||||||
|
rm -rf out/.godot/
|
||||||
|
|
||||||
|
- name: Change editor icon import settings
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "--- Listing icons dir:"
|
||||||
|
ls out/addons/limboai/icons/
|
||||||
|
echo "--- (end of listing)"
|
||||||
|
sed -i 's|editor/scale_with_editor_scale=false|editor/scale_with_editor_scale=true|' out/addons/limboai/icons/*.import
|
||||||
|
sed -i 's|editor/convert_colors_with_editor_theme=false|editor/convert_colors_with_editor_theme=true|' out/addons/limboai/icons/*.import
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{needs.gdextension.outputs.name-prefix}}
|
||||||
|
path: out/*
|
||||||
|
overwrite: true
|
|
@ -0,0 +1,255 @@
|
||||||
|
name: 🍏 iOS builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: production=yes tests=no verbose=yes warnings=extra
|
||||||
|
DOTNET_NOLOGO: true
|
||||||
|
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
ios-builds:
|
||||||
|
runs-on: "macos-latest"
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Template (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
ios_simulator: false
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Template (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
ios_simulator: false
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Simulator (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
ios_simulator: true
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
- name: Simulator (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
ios_simulator: true
|
||||||
|
dotnet: false
|
||||||
|
|
||||||
|
# ! Disabled for now as it doesn't work with cctools-port and current LLVM.
|
||||||
|
# * See https://github.com/godotengine/build-containers/pull/85.
|
||||||
|
# - name: Simulator Lib (arm64, release)
|
||||||
|
# target: template_release
|
||||||
|
# arch: arm64
|
||||||
|
# ios_simulator: true
|
||||||
|
|
||||||
|
# - name: Simulator Lib (arm64, debug)
|
||||||
|
# target: template_debug
|
||||||
|
# arch: arm64
|
||||||
|
# ios_simulator: true
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
ios_simulator: false
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
ios_simulator: false
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Simulator .NET (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
ios_simulator: true
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
- name: Simulator .NET (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
ios_simulator: true
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: godot.ios.${{matrix.target}}.${{matrix.arch}}${{ matrix.dotnet == true && '.mono' || '' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Python 3.x
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
architecture: "x64"
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
|
||||||
|
- name: Diagnostics
|
||||||
|
run: |
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
dotnet --info
|
||||||
|
|
||||||
|
- name: Set up Vulkan SDK
|
||||||
|
run: |
|
||||||
|
# ! Note: Vulkan SDK changed packaging, so we need to inline these steps for the time being.
|
||||||
|
#sh misc/scripts/install_vulkan_sdk_macos.sh
|
||||||
|
|
||||||
|
curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/vulkan-sdk.zip" -o /tmp/vulkan-sdk.zip
|
||||||
|
unzip /tmp/vulkan-sdk.zip -d /tmp
|
||||||
|
/tmp/InstallVulkan.app/Contents/MacOS/InstallVulkan --accept-licenses --default-answer --confirm-command install
|
||||||
|
rm -Rf /tmp/InstallVulkan.app
|
||||||
|
rm -f /tmp/vulkan-sdk.zip
|
||||||
|
|
||||||
|
# ! Note: we stopped using the scons cache in release builds.
|
||||||
|
# - name: Set up scons cache
|
||||||
|
# uses: actions/cache@v4
|
||||||
|
# with:
|
||||||
|
# path: ${{github.workspace}}/.scons_cache/
|
||||||
|
# key: ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# restore-keys: |
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
# ${{env.BIN}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
scons platform=ios target=${{matrix.target}} arch=${{matrix.arch}} ios_simulator=${{matrix.ios_simulator}} module_mono_enabled=${{matrix.dotnet}} ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: tmp-ios${{matrix.dotnet == true && '-dotnet' || ''}}-templates-${{strategy.job-index}}
|
||||||
|
path: bin/*
|
||||||
|
|
||||||
|
package-ios-templates:
|
||||||
|
runs-on: "macos-latest"
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
needs: ios-builds
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Package iOS templates
|
||||||
|
dotnet: false
|
||||||
|
- name: Package iOS .NET templates
|
||||||
|
dotnet: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Vulkan SDK
|
||||||
|
run: |
|
||||||
|
# ! Note: Vulkan SDK changed packaging, so we need to inline these steps for the time being.
|
||||||
|
#sh misc/scripts/install_vulkan_sdk_macos.sh
|
||||||
|
|
||||||
|
curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/vulkan-sdk.zip" -o /tmp/vulkan-sdk.zip
|
||||||
|
unzip /tmp/vulkan-sdk.zip -d /tmp
|
||||||
|
/tmp/InstallVulkan.app/Contents/MacOS/InstallVulkan --accept-licenses --default-answer --confirm-command install
|
||||||
|
rm -Rf /tmp/InstallVulkan.app
|
||||||
|
rm -f /tmp/vulkan-sdk.zip
|
||||||
|
|
||||||
|
- name: Download templates artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: tmp-ios${{matrix.dotnet == true && '-dotnet' || ''}}-templates-*
|
||||||
|
merge-multiple: true
|
||||||
|
path: bin/
|
||||||
|
|
||||||
|
- name: Make template bundle
|
||||||
|
run: |
|
||||||
|
ls bin/
|
||||||
|
cp -r misc/dist/ios_xcode bin/
|
||||||
|
cd bin/
|
||||||
|
|
||||||
|
mv libgodot.ios.template_debug.arm64.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64/libgodot.a
|
||||||
|
# ! lipo -create libgodot.ios.template_debug.arm64.simulator.a libgodot.ios.template_debug.x86_64.simulator.a -output ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a
|
||||||
|
mv libgodot.ios.template_debug.x86_64.simulator.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a
|
||||||
|
|
||||||
|
mv libgodot.ios.template_release.arm64.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64/libgodot.a
|
||||||
|
# ! lipo -create libgodot.ios.template_release.arm64.simulator.a libgodot.ios.template_release.x86_64.simulator.a -output ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a
|
||||||
|
mv libgodot.ios.template_release.x86_64.simulator.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a
|
||||||
|
|
||||||
|
cp -r ~/VulkanSDK/*/macOS/lib/MoltenVK.xcframework ios_xcode
|
||||||
|
rm -rf ios_xcode/MoltenVK.xcframework/{macos,tvos}*
|
||||||
|
|
||||||
|
mkdir -p ${{github.workspace}}/out/templates/
|
||||||
|
cd ios_xcode
|
||||||
|
zip -q -9 -r ${{github.workspace}}/out/templates/ios.zip *
|
||||||
|
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}${{matrix.dotnet == true && '.mono' || ''}}" > ${{github.workspace}}/out/templates/version.txt
|
||||||
|
|
||||||
|
ls -l ${{github.workspace}}/out/*
|
||||||
|
|
||||||
|
- name: Upload template bundle
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.dotnet == true && '.dotnet' || ''}}.export-templates.ios
|
||||||
|
path: out/*
|
||||||
|
|
||||||
|
- name: Delete templates artifact
|
||||||
|
uses: geekyeggo/delete-artifact@v5
|
||||||
|
with:
|
||||||
|
name: tmp-ios${{matrix.dotnet == true && '-dotnet' || ''}}-templates-*
|
||||||
|
useGlob: true
|
||||||
|
failOnError: false
|
|
@ -0,0 +1,289 @@
|
||||||
|
name: 🐧 Linux builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: production=yes tests=no verbose=yes warnings=extra werror=yes
|
||||||
|
DOTNET_NOLOGO: true
|
||||||
|
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux-builds:
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
name: ${{ matrix.opts.name }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
# * Standard x86_64
|
||||||
|
|
||||||
|
- name: Editor (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * Standard x86_32
|
||||||
|
|
||||||
|
# - name: Editor (x86_32, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: x86_32
|
||||||
|
# dotnet: false
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_32
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_32
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * Standard arm64
|
||||||
|
|
||||||
|
- name: Editor (arm64, release)
|
||||||
|
target: editor
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * Standard arm32
|
||||||
|
|
||||||
|
- name: Template (arm32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm32
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm32
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET x86_64
|
||||||
|
|
||||||
|
- name: Editor .NET (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET x86_32
|
||||||
|
|
||||||
|
# - name: Editor .NET (x86_32, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: x86_32
|
||||||
|
# dotnet: true
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_32
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_32
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET arm64
|
||||||
|
|
||||||
|
# ! FIXME: Needs a separate job for .NET glue generation since we can't execute arm64 binaries on x86_64.
|
||||||
|
# ! Alternatively, solution generation can be done as post-process job, taking the glue from x86_64, after all builds complete.
|
||||||
|
# - name: Editor .NET (arm64, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: arm64
|
||||||
|
# dotnet: true
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET arm32
|
||||||
|
|
||||||
|
- name: Template .NET (arm32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm32
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (arm32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm32
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- { opts: { should-build: false } }
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: godot.linuxbsd.${{matrix.opts.target}}.${{matrix.opts.arch}}${{ matrix.opts.dotnet == true && '.mono' || '' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Linux toolchain
|
||||||
|
uses: ./modules/limboai/.github/actions/setup-linux-toolchain
|
||||||
|
with:
|
||||||
|
arch: ${{matrix.opts.arch}}
|
||||||
|
|
||||||
|
- name: Set up Wayland deps
|
||||||
|
run: |
|
||||||
|
sudo apt-get install libwayland-dev
|
||||||
|
|
||||||
|
- name: Set up scons cache
|
||||||
|
if: inputs.test-build # ! Only cache test/PR builds
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{github.workspace}}/.scons_cache/
|
||||||
|
key: ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
restore-keys: |
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
PATH=${GITHUB_WORKSPACE}/buildroot/bin:$PATH
|
||||||
|
scons platform=linuxbsd target=${{matrix.opts.target}} arch=${{matrix.opts.arch}} module_mono_enabled=${{matrix.opts.dotnet}} ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Build .NET assemblies
|
||||||
|
if: matrix.opts.dotnet && matrix.opts.target == 'editor'
|
||||||
|
uses: ./modules/limboai/.github/actions/build-dotnet-assemblies
|
||||||
|
with:
|
||||||
|
platform: linuxbsd
|
||||||
|
bin: ${{env.BIN}}
|
||||||
|
|
||||||
|
- name: Prepare artifact
|
||||||
|
env:
|
||||||
|
OUTDIR: ${{ startsWith(matrix.opts.target, 'template') && 'out/templates' || 'out/' }}
|
||||||
|
run: |
|
||||||
|
chmod +x ./bin/godot.*
|
||||||
|
mkdir -p ${{env.OUTDIR}}
|
||||||
|
mv bin/* ${{env.OUTDIR}}
|
||||||
|
ls -R out/
|
||||||
|
|
||||||
|
# Zipping the editor artifact to retain executable bit;
|
||||||
|
# workaround for: https://github.com/actions/upload-artifact/issues/38
|
||||||
|
- name: Zip the editor artifact
|
||||||
|
if: matrix.opts.target == 'editor'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
pushd out/
|
||||||
|
zip -r godot-limboai.editor.linux.zip *
|
||||||
|
rm godot.*
|
||||||
|
rm -rf GodotSharp/
|
||||||
|
echo -e "## Why another ZIP inside?\n\nWorkaround for: https://github.com/actions/upload-artifact/issues/38\n" > README.md
|
||||||
|
popd
|
||||||
|
|
||||||
|
- name: Rename templates
|
||||||
|
if: startsWith(matrix.opts.target, 'template')
|
||||||
|
env:
|
||||||
|
BUILD_TYPE: ${{ endsWith(matrix.opts.target, 'release') && 'release' || 'debug' }}
|
||||||
|
run: |
|
||||||
|
mv out/templates/${BIN} out/templates/linux_${BUILD_TYPE}.${{matrix.opts.arch}}
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}${{matrix.opts.dotnet == true && '.mono' || ''}}" > out/templates/version.txt
|
||||||
|
ls -R out/
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.opts.dotnet == true && '.dotnet' || ''}}.${{matrix.opts.target}}.linux.${{matrix.opts.arch}}
|
||||||
|
path: out/*
|
|
@ -0,0 +1,320 @@
|
||||||
|
name: 🍎 macOS builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: production=yes tests=no verbose=yes warnings=extra
|
||||||
|
DOTNET_NOLOGO: true
|
||||||
|
DOTNET_CLI_TELEMETRY_OPTOUT: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
macos-builds:
|
||||||
|
runs-on: "macos-latest"
|
||||||
|
name: ${{ matrix.opts.name }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
- name: Editor (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Editor (arm64, release)
|
||||||
|
target: editor
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Editor (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Template (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Template (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Editor (arm64, release)
|
||||||
|
target: editor
|
||||||
|
arch: arm64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Template (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: .NET Template (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- { opts: { should-build: false } }
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: godot.macos.${{matrix.opts.target}}.${{matrix.opts.arch}}${{ matrix.opts.dotnet == true && '.mono' || '' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Python 3.x
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
architecture: "x64"
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
|
||||||
|
- name: Set up .NET SDK 6.0
|
||||||
|
if: matrix.opts.dotnet
|
||||||
|
uses: actions/setup-dotnet@v4
|
||||||
|
with:
|
||||||
|
dotnet-version: "6.0.x"
|
||||||
|
|
||||||
|
- name: Diagnostics
|
||||||
|
run: |
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
dotnet --info
|
||||||
|
|
||||||
|
- name: Set up Vulkan SDK
|
||||||
|
run: |
|
||||||
|
# ! Note: Vulkan SDK changed packaging, so we need to inline these steps for the time being.
|
||||||
|
#sh misc/scripts/install_vulkan_sdk_macos.sh
|
||||||
|
|
||||||
|
curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/config.json" -o /tmp/vulkan-sdk.json
|
||||||
|
sdk_version=`jq -r '.version' /tmp/vulkan-sdk.json`
|
||||||
|
curl -L "https://sdk.lunarg.com/sdk/download/latest/mac/vulkan-sdk.zip" -o /tmp/vulkan-sdk.zip
|
||||||
|
unzip /tmp/vulkan-sdk.zip -d /tmp
|
||||||
|
/tmp/InstallVulkan-${sdk_version}.app/Contents/MacOS/InstallVulkan-${sdk_version} --accept-licenses --default-answer --confirm-command install
|
||||||
|
rm -Rf /tmp/InstallVulkan-${sdk_version}.app
|
||||||
|
rm -f /tmp/vulkan-sdk.zip
|
||||||
|
|
||||||
|
- name: Set up scons cache
|
||||||
|
if: inputs.test-build # ! Only cache test/PR builds
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{github.workspace}}/.scons_cache/
|
||||||
|
key: ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
restore-keys: |
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
scons -j2 platform=macos target=${{matrix.opts.target}} arch=${{matrix.opts.arch}} module_mono_enabled=${{matrix.opts.dotnet}} ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Build .NET assemblies
|
||||||
|
if: matrix.opts.dotnet && matrix.opts.target == 'editor'
|
||||||
|
uses: ./modules/limboai/.github/actions/build-dotnet-assemblies
|
||||||
|
with:
|
||||||
|
platform: macos
|
||||||
|
bin: ${{env.BIN}}
|
||||||
|
|
||||||
|
- name: Prepare artifact
|
||||||
|
run: |
|
||||||
|
chmod +x bin/godot.*
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: tmp-${{matrix.opts.dotnet == true && 'dotnet-' || ''}}macos-${{matrix.opts.target}}-${{matrix.opts.arch}}
|
||||||
|
path: bin/*
|
||||||
|
|
||||||
|
make-macos-bundle:
|
||||||
|
runs-on: "macos-latest"
|
||||||
|
name: Make macOS Bundles
|
||||||
|
needs: macos-builds
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
- download-prefix: tmp-macos
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
- download-prefix: tmp-dotnet-macos
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
exclude:
|
||||||
|
- { opts: { should-build: false } }
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Download editor artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: ${{matrix.opts.download-prefix}}-editor-*
|
||||||
|
merge-multiple: true
|
||||||
|
path: bin/
|
||||||
|
|
||||||
|
# Zipping the editor bundle to retain executable bit;
|
||||||
|
# workaround for: https://github.com/actions/upload-artifact/issues/38
|
||||||
|
- name: Make editor bundle
|
||||||
|
env:
|
||||||
|
APP_NAME: Godot${{matrix.opts.dotnet == true && '_mono' || ''}}.app
|
||||||
|
run: |
|
||||||
|
ls bin/
|
||||||
|
lipo -create bin/godot.macos.editor.x86_64* bin/godot.macos.editor.arm64* -output bin/godot.macos.editor.universal
|
||||||
|
mkdir -p out/editor/
|
||||||
|
cp -r misc/dist/macos_tools.app out/editor/${APP_NAME}
|
||||||
|
mkdir -p out/editor/${APP_NAME}/Contents/{MacOS,Resources}
|
||||||
|
cp bin/godot.macos.editor.universal out/editor/${APP_NAME}/Contents/MacOS/Godot
|
||||||
|
chmod +x out/editor/${APP_NAME}/Contents/MacOS/Godot
|
||||||
|
cp -r bin/GodotSharp out/editor/${APP_NAME}/Contents/Resources/GodotSharp || true
|
||||||
|
pushd out/editor
|
||||||
|
zip -q -9 -r ${APP_NAME}.zip ${APP_NAME}
|
||||||
|
rm -rf ${APP_NAME}
|
||||||
|
echo -e "## Why another ZIP inside?\n\nWorkaround for: https://github.com/actions/upload-artifact/issues/38\n" > README.md
|
||||||
|
popd
|
||||||
|
rm -rf bin/*
|
||||||
|
ls out/editor/
|
||||||
|
|
||||||
|
- name: Upload editor bundle
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.opts.dotnet == true && '.dotnet' || ''}}.editor.macos.universal
|
||||||
|
path: out/editor/*
|
||||||
|
|
||||||
|
- name: Download templates artifact
|
||||||
|
if: ${{ !inputs.test-build }}
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
pattern: ${{matrix.opts.download-prefix}}-template_*
|
||||||
|
merge-multiple: true
|
||||||
|
path: bin/
|
||||||
|
|
||||||
|
- name: Make templates bundle
|
||||||
|
if: ${{ !inputs.test-build }}
|
||||||
|
run: |
|
||||||
|
rm -rf out/
|
||||||
|
ls bin/
|
||||||
|
lipo -create bin/godot.macos.template_release.x86_64* bin/godot.macos.template_release.arm64* -output bin/godot.macos.template_release.universal
|
||||||
|
lipo -create bin/godot.macos.template_debug.x86_64* bin/godot.macos.template_debug.arm64* -output bin/godot.macos.template_debug.universal
|
||||||
|
cp -r misc/dist/macos_template.app macos_template.app
|
||||||
|
mkdir -p macos_template.app/Contents/MacOS
|
||||||
|
cp bin/godot.macos.template_debug.universal macos_template.app/Contents/MacOS/godot_macos_debug.universal
|
||||||
|
cp bin/godot.macos.template_release.universal macos_template.app/Contents/MacOS/godot_macos_release.universal
|
||||||
|
chmod +x macos_template.app/Contents/MacOS/godot_macos_{release,debug}.universal
|
||||||
|
zip -q -9 -r macos.zip macos_template.app
|
||||||
|
mkdir -p out/templates/
|
||||||
|
mv macos.zip out/templates/macos.zip
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}${{matrix.opts.dotnet == true && '.mono' || ''}}" > out/templates/version.txt
|
||||||
|
rm -rf bin/*
|
||||||
|
ls out/templates/
|
||||||
|
|
||||||
|
- uses: geekyeggo/delete-artifact@v5
|
||||||
|
with:
|
||||||
|
name: ${{matrix.opts.download-prefix}}-*
|
||||||
|
useGlob: true
|
||||||
|
failOnError: false
|
||||||
|
|
||||||
|
- name: Upload templates bundle
|
||||||
|
if: ${{ !inputs.test-build }}
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.opts.dotnet == true && '.dotnet' || ''}}.export-templates.macos
|
||||||
|
path: out/*
|
|
@ -0,0 +1,52 @@
|
||||||
|
name: 📦️ Merge templates
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
merge-templates:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Merge classical templates
|
||||||
|
uses: actions/upload-artifact/merge@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}.export-templates
|
||||||
|
pattern: ${{env.NAME_PREFIX}}.{export-templates,template_}*
|
||||||
|
delete-merged: true
|
||||||
|
|
||||||
|
- name: Merge .NET templates
|
||||||
|
uses: actions/upload-artifact/merge@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}.dotnet.export-templates
|
||||||
|
pattern: ${{env.NAME_PREFIX}}.dotnet.{export-templates,template_}*
|
||||||
|
delete-merged: true
|
|
@ -0,0 +1,162 @@
|
||||||
|
name: 🔎 Test builds
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
paths-ignore:
|
||||||
|
- "README.md"
|
||||||
|
- "LICENSE.md"
|
||||||
|
- "**/*.png"
|
||||||
|
- "demo/**"
|
||||||
|
- "doc/**"
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches: [master]
|
||||||
|
paths-ignore:
|
||||||
|
- "README.md"
|
||||||
|
- "LICENSE.md"
|
||||||
|
- "**/*.png"
|
||||||
|
- "demo/**"
|
||||||
|
- "doc/**"
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
# Global Settings.
|
||||||
|
env:
|
||||||
|
GODOT_REF: "master"
|
||||||
|
GODOT_CPP_REF: "master"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unit-tests:
|
||||||
|
name: 🧪 Unit tests
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
|
||||||
|
# Settings
|
||||||
|
env:
|
||||||
|
SCONSFLAGS: platform=linuxbsd target=editor arch=x86_64 production=false dev_build=true tests=true verbose=yes warnings=extra werror=yes strict_checks=yes
|
||||||
|
SCONS_CACHE_LIMIT: 7168
|
||||||
|
BIN: godot.linuxbsd.editor.dev.x86_64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ env.GODOT_REF }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
|
||||||
|
- name: Set up Linux toolchain
|
||||||
|
uses: ./modules/limboai/.github/actions/setup-linux-toolchain
|
||||||
|
with:
|
||||||
|
arch: x86_64
|
||||||
|
|
||||||
|
- name: Set up scons cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{github.workspace}}/.scons_cache/
|
||||||
|
key: ${{env.BIN}}-${{env.GODOT_REF}}-${{github.ref}}-${{github.sha}}
|
||||||
|
restore-keys: |
|
||||||
|
${{env.BIN}}-${{env.GODOT_REF}}-${{github.ref}}-${{github.sha}}
|
||||||
|
${{env.BIN}}-${{env.GODOT_REF}}-${{github.ref}}
|
||||||
|
${{env.BIN}}-${{env.GODOT_REF}}
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Set up Python 3.x
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
architecture: "x64"
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
|
||||||
|
- name: Setup GCC problem matcher
|
||||||
|
uses: ammaraskar/gcc-problem-matcher@master
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
PATH=${GITHUB_WORKSPACE}/buildroot/bin:$PATH
|
||||||
|
scons ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Verify build
|
||||||
|
run: |
|
||||||
|
ls -l bin/
|
||||||
|
bin/${{ env.BIN }} --version
|
||||||
|
bin/${{ env.BIN }} --help
|
||||||
|
|
||||||
|
- name: Unit tests
|
||||||
|
run: |
|
||||||
|
bin/${{ env.BIN }} --test --headless
|
||||||
|
|
||||||
|
static-checks:
|
||||||
|
name: ⚙️ Static checks
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
steps:
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Code style checks
|
||||||
|
uses: pre-commit/action@v3.0.1
|
||||||
|
with:
|
||||||
|
extra_args: --all-files
|
||||||
|
|
||||||
|
cache-env:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
godot-ref: ${{ steps.cache-env.outputs.godot-ref }}
|
||||||
|
godot-cpp-ref: ${{ steps.cache-env.outputs.godot-cpp-ref }}
|
||||||
|
steps:
|
||||||
|
- name: Cache env
|
||||||
|
id: cache-env
|
||||||
|
run: |
|
||||||
|
echo "godot-ref=${GODOT_REF}" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "godot-cpp-ref=${GODOT_CPP_REF}" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
linux-test-build:
|
||||||
|
name: 🐧 Linux
|
||||||
|
needs: cache-env
|
||||||
|
uses: ./.github/workflows/linux.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-env.outputs.godot-ref }}
|
||||||
|
limboai-ref: ${{ github.sha }}
|
||||||
|
test-build: true
|
||||||
|
|
||||||
|
windows-test-build:
|
||||||
|
name: 🪟 Windows
|
||||||
|
needs: cache-env
|
||||||
|
uses: ./.github/workflows/windows.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-env.outputs.godot-ref }}
|
||||||
|
limboai-ref: ${{ github.sha }}
|
||||||
|
test-build: true
|
||||||
|
|
||||||
|
macos-test-build:
|
||||||
|
name: 🍎 macOS
|
||||||
|
needs: cache-env
|
||||||
|
uses: ./.github/workflows/macos.yml
|
||||||
|
with:
|
||||||
|
godot-ref: ${{ needs.cache-env.outputs.godot-ref }}
|
||||||
|
limboai-ref: ${{ github.sha }}
|
||||||
|
test-build: true
|
||||||
|
|
||||||
|
gdextension:
|
||||||
|
name: 🔌 GDExtension
|
||||||
|
needs: cache-env
|
||||||
|
uses: ./.github/workflows/gdextension.yml
|
||||||
|
with:
|
||||||
|
godot-cpp-ref: ${{ needs.cache-env.outputs.godot-cpp-ref }}
|
||||||
|
limboai-ref: ${{ github.sha }}
|
||||||
|
test-build: true
|
|
@ -0,0 +1,158 @@
|
||||||
|
name: 🌐 Web builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
# With `lto=full` VM seems to run out of ram and build fails
|
||||||
|
SCONSFLAGS: use_static_cpp=yes debug_symbols=no lto=thin optimize=size verbose=yes warnings=extra werror=yes tests=no
|
||||||
|
EM_VERSION: 3.1.45
|
||||||
|
EM_CACHE_FOLDER: "emsdk-cache"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
web-builds:
|
||||||
|
runs-on: "ubuntu-20.04"
|
||||||
|
name: ${{ matrix.name }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Template (release)
|
||||||
|
target: template_release
|
||||||
|
threads: true
|
||||||
|
dlink: false
|
||||||
|
|
||||||
|
- name: Template (release, dlink)
|
||||||
|
target: template_release
|
||||||
|
threads: true
|
||||||
|
dlink: true
|
||||||
|
|
||||||
|
- name: Template (debug)
|
||||||
|
target: template_debug
|
||||||
|
threads: true
|
||||||
|
dlink: false
|
||||||
|
|
||||||
|
- name: Template (debug, dlink)
|
||||||
|
target: template_debug
|
||||||
|
threads: true
|
||||||
|
dlink: true
|
||||||
|
|
||||||
|
- name: Template (release, nothreads)
|
||||||
|
target: template_release
|
||||||
|
threads: false
|
||||||
|
dlink: false
|
||||||
|
|
||||||
|
- name: Template (release, nothreads, dlink)
|
||||||
|
target: template_release
|
||||||
|
threads: false
|
||||||
|
dlink: true
|
||||||
|
|
||||||
|
- name: Template (debug, nothreads)
|
||||||
|
target: template_debug
|
||||||
|
threads: false
|
||||||
|
dlink: false
|
||||||
|
|
||||||
|
- name: Template (debug, nothreads, dlink)
|
||||||
|
target: template_debug
|
||||||
|
threads: false
|
||||||
|
dlink: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
CACHE_NAME: godot.web.${{matrix.target}}${{ matrix.dlink == true && '.dlink' || '' }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up Emscripten cache
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{env.EM_CACHE_FOLDER}}
|
||||||
|
key: ${{env.EM_VERSION}}-${{runner.os}}-libs
|
||||||
|
|
||||||
|
- name: Set up Emscripten
|
||||||
|
uses: mymindstorm/setup-emsdk@v14
|
||||||
|
with:
|
||||||
|
version: ${{env.EM_VERSION}}
|
||||||
|
actions-cache-folder: ${{env.EM_CACHE_FOLDER}}
|
||||||
|
|
||||||
|
- name: Verify Emscripten setup
|
||||||
|
run: |
|
||||||
|
emcc -v
|
||||||
|
|
||||||
|
- name: Set up scons
|
||||||
|
run: |
|
||||||
|
python -c "import sys; print(sys.version)"
|
||||||
|
python -m pip install scons==4.4.0
|
||||||
|
python --version
|
||||||
|
scons --version
|
||||||
|
|
||||||
|
# ! Note: we stopped using the scons cache in release builds.
|
||||||
|
# - name: Set up scons cache
|
||||||
|
# uses: actions/cache@v4
|
||||||
|
# with:
|
||||||
|
# path: ${{github.workspace}}/.scons_cache/
|
||||||
|
# key: ${{env.CACHE_NAME}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# restore-keys: |
|
||||||
|
# ${{env.CACHE_NAME}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
# ${{env.CACHE_NAME}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
# ${{env.CACHE_NAME}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Compilation
|
||||||
|
env:
|
||||||
|
SCONS_CACHE: ${{github.workspace}}/.scons_cache/
|
||||||
|
run: |
|
||||||
|
scons platform=web target=${{matrix.target}} threads=${{matrix.threads}} dlink_enabled=${{matrix.dlink}} ${{env.SCONSFLAGS}}
|
||||||
|
|
||||||
|
- name: Prepare artifacts
|
||||||
|
run: |
|
||||||
|
mkdir -p out/templates/
|
||||||
|
mv bin/godot.web.template_debug.wasm32.zip out/templates/web_debug.zip || true
|
||||||
|
mv bin/godot.web.template_debug.wasm32.nothreads.zip out/templates/web_nothreads_debug.zip || true
|
||||||
|
mv bin/godot.web.template_debug.wasm32.dlink.zip out/templates/web_dlink_debug.zip || true
|
||||||
|
mv bin/godot.web.template_debug.wasm32.nothreads.dlink.zip out/templates/web_dlink_nothreads_debug.zip || true
|
||||||
|
mv bin/godot.web.template_release.wasm32.zip out/templates/web_release.zip || true
|
||||||
|
mv bin/godot.web.template_release.wasm32.nothreads.zip out/templates/web_nothreads_release.zip || true
|
||||||
|
mv bin/godot.web.template_release.wasm32.dlink.zip out/templates/web_dlink_release.zip || true
|
||||||
|
mv bin/godot.web.template_release.wasm32.nothreads.dlink.zip out/templates/web_dlink_nothreads_release.zip || true
|
||||||
|
rm -rf bin/
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}" > out/templates/version.txt
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}.${{matrix.target}}.web${{matrix.threads == false && '.nothreads' || ''}}${{matrix.dlink == true && '.dlink' || ''}}
|
||||||
|
path: out/*
|
|
@ -0,0 +1,358 @@
|
||||||
|
name: 🪟 Windows builds
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
godot-ref:
|
||||||
|
description: A tag, branch or commit hash in the Godot repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
limboai-ref:
|
||||||
|
description: A tag, branch or commit hash in the LimboAI repository.
|
||||||
|
type: string
|
||||||
|
default: master
|
||||||
|
test-build:
|
||||||
|
description: Limit to pre-defined test builds
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
|
||||||
|
# Global Settings
|
||||||
|
env:
|
||||||
|
BUILD_IMAGE_VERSION: 4.3-f40
|
||||||
|
MESA_VERSION: 23.1.9-1
|
||||||
|
SCONS_CACHE_LIMIT: 4096
|
||||||
|
SCONSFLAGS: production=yes use_mingw=yes verbose=yes warnings=no progress=no d3d12=yes
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
windows-builds:
|
||||||
|
runs-on: "ubuntu-24.04"
|
||||||
|
name: ${{ matrix.opts.name }}
|
||||||
|
outputs:
|
||||||
|
built-dotnet-editor: ${{ steps.mark-dotnet-editor.outputs.built-dotnet-editor }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
# * Standard x86_64
|
||||||
|
|
||||||
|
- name: Editor (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: false
|
||||||
|
should-build: true
|
||||||
|
|
||||||
|
- name: Template (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * Standard x86_32
|
||||||
|
|
||||||
|
# - name: Editor (x86_32, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: x86_32
|
||||||
|
# llvm: false
|
||||||
|
# dotnet: false
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_32
|
||||||
|
llvm: false
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (x86_32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_32
|
||||||
|
llvm: false
|
||||||
|
dotnet: false
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * Standard arm64
|
||||||
|
|
||||||
|
# - name: Editor (arm64, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: arm64
|
||||||
|
# llvm: true
|
||||||
|
# dotnet: false
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
llvm: true
|
||||||
|
dotnet: false
|
||||||
|
scons-flags: mingw_prefix=/root/llvm-mingw
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
llvm: true
|
||||||
|
dotnet: false
|
||||||
|
scons-flags: mingw_prefix=/root/llvm-mingw
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET x86_64
|
||||||
|
|
||||||
|
- name: Editor .NET (x86_64, release)
|
||||||
|
target: editor
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET x86_32
|
||||||
|
|
||||||
|
# - name: Editor .NET (x86_32, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: x86_32
|
||||||
|
# llvm: false
|
||||||
|
# dotnet: true
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, release)
|
||||||
|
target: template_release
|
||||||
|
arch: x86_32
|
||||||
|
llvm: false
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (x86_32, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: x86_32
|
||||||
|
llvm: false
|
||||||
|
dotnet: true
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
# * .NET arm64
|
||||||
|
|
||||||
|
# - name: Editor .NET (arm64, release)
|
||||||
|
# target: editor
|
||||||
|
# arch: arm64
|
||||||
|
# llvm: true
|
||||||
|
# dotnet: true
|
||||||
|
# should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, release)
|
||||||
|
target: template_release
|
||||||
|
arch: arm64
|
||||||
|
llvm: true
|
||||||
|
dotnet: true
|
||||||
|
scons-flags: mingw_prefix=/root/llvm-mingw
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
- name: Template .NET (arm64, debug)
|
||||||
|
target: template_debug
|
||||||
|
arch: arm64
|
||||||
|
llvm: true
|
||||||
|
dotnet: true
|
||||||
|
scons-flags: mingw_prefix=/root/llvm-mingw
|
||||||
|
should-build: ${{ !inputs.test-build }}
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- { opts: { should-build: false } }
|
||||||
|
|
||||||
|
env:
|
||||||
|
BIN: godot.windows.${{matrix.opts.target}}.${{matrix.opts.arch}}${{matrix.opts.llvm && '.llvm' || ''}}${{matrix.opts.dotnet == true && '.mono' || ''}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION, NAME_PREFIX, GODOT_VERSION_STATUS, BUILD_NAME environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Set up scons cache
|
||||||
|
if: inputs.test-build # ! Only cache test/PR builds
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{github.workspace}}/.scons_cache/
|
||||||
|
key: ${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
restore-keys: |
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}-${{env.LIMBOAI_VERSION}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}-${{inputs.limboai-ref}}
|
||||||
|
${{env.BIN}}-${{inputs.godot-ref}}
|
||||||
|
|
||||||
|
- name: Static ANGLE libs
|
||||||
|
run: |
|
||||||
|
mkdir -p deps/angle
|
||||||
|
cd deps/angle
|
||||||
|
url=https://github.com/godotengine/godot-angle-static/releases/download/chromium%2F6601.2/godot-angle-static
|
||||||
|
curl -L -o windows_${{matrix.opts.arch}}.zip $url-${{matrix.opts.arch}}-${{matrix.opts.llvm && 'llvm' || 'gcc'}}-release.zip
|
||||||
|
unzip windows_${{matrix.opts.arch}}.zip
|
||||||
|
rm windows_${{matrix.opts.arch}}.zip
|
||||||
|
|
||||||
|
- name: Mesa libs
|
||||||
|
run: |
|
||||||
|
mkdir -p deps/mesa
|
||||||
|
cd deps/mesa
|
||||||
|
curl -L -o mesa_${{matrix.opts.arch}}.zip https://github.com/godotengine/godot-nir-static/releases/download/${{env.MESA_VERSION}}/godot-nir-static-${{matrix.opts.arch}}-${{matrix.opts.llvm && 'llvm' || 'gcc'}}-release.zip
|
||||||
|
unzip -o mesa_${{matrix.opts.arch}}.zip
|
||||||
|
rm -f mesa_${{matrix.opts.arch}}.zip
|
||||||
|
|
||||||
|
- name: Pull build container
|
||||||
|
run: |
|
||||||
|
podman pull ghcr.io/limbonaut/godot-windows:${{env.BUILD_IMAGE_VERSION}}
|
||||||
|
|
||||||
|
- name: Build using container
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
scons_command="scons \
|
||||||
|
platform=windows \
|
||||||
|
target=${{matrix.opts.target}} \
|
||||||
|
arch=${{matrix.opts.arch}} \
|
||||||
|
use_llvm=${{matrix.opts.llvm}} \
|
||||||
|
module_mono_enabled=${{matrix.opts.dotnet}} \
|
||||||
|
${{env.SCONSFLAGS}} \
|
||||||
|
${{matrix.opts.scons-flags}} \
|
||||||
|
angle_libs=/build/deps/angle \
|
||||||
|
mesa_libs=/build/deps/mesa \
|
||||||
|
"
|
||||||
|
podman_run="podman run -it --rm \
|
||||||
|
--env GODOT_VERSION_STATUS=${GODOT_VERSION_STATUS} \
|
||||||
|
--env BUILD_NAME=${BUILD_NAME} \
|
||||||
|
--env NUM_CORES=$(nproc --all) \
|
||||||
|
--env DOTNET_NOLOGO=true \
|
||||||
|
--env DOTNET_CLI_TELEMETRY_OPTOUT=true \
|
||||||
|
--env SCONS_CACHE=/build/.scons_cache/ \
|
||||||
|
--env SCONS_CACHE_LIMIT=${SCONS_CACHE_LIMIT} \
|
||||||
|
-v ${GITHUB_WORKSPACE}/:/build/ \
|
||||||
|
-w /build godot-windows:${{env.BUILD_IMAGE_VERSION}} bash -c \
|
||||||
|
"
|
||||||
|
echo "Running ${podman_run} \"${scons_command}\""
|
||||||
|
${podman_run} "${scons_command}"
|
||||||
|
|
||||||
|
- name: Prepare artifact
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
OUTDIR: ${{ startsWith(matrix.opts.target, 'template') && 'out/templates' || 'out/' }}
|
||||||
|
run: |
|
||||||
|
rm -f bin/*.{exp,lib,pdb}
|
||||||
|
mkdir -p ${{env.OUTDIR}}
|
||||||
|
mv bin/* ${{env.OUTDIR}}
|
||||||
|
ls -R out/
|
||||||
|
|
||||||
|
- name: Rename templates
|
||||||
|
if: startsWith(matrix.opts.target, 'template')
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
BUILD_TYPE: ${{ endsWith(matrix.opts.target, 'release') && 'release' || 'debug' }}
|
||||||
|
run: |
|
||||||
|
mv out/templates/${BIN}.exe out/templates/windows_${BUILD_TYPE}_${{matrix.opts.arch}}.exe
|
||||||
|
mv out/templates/${BIN}.console.exe out/templates/windows_${BUILD_TYPE}_${{matrix.opts.arch}}_console.exe
|
||||||
|
echo "${GODOT_VERSION}.limboai+${LIMBOAI_VERSION}${{matrix.opts.dotnet == true && '.mono' || ''}}" > out/templates/version.txt
|
||||||
|
ls -R out/
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.NAME_PREFIX}}${{matrix.opts.dotnet == true && '.dotnet' || ''}}.${{matrix.opts.target}}.windows.${{matrix.opts.arch}}
|
||||||
|
path: out/*
|
||||||
|
|
||||||
|
- name: Mark .NET editor as built
|
||||||
|
if: matrix.opts.dotnet && matrix.opts.target == 'editor'
|
||||||
|
id: mark-dotnet-editor
|
||||||
|
run: echo "built-dotnet-editor=true" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
|
||||||
|
dotnet-assemblies:
|
||||||
|
name: .NET assembly for ${{matrix.opts.arch}}
|
||||||
|
needs: windows-builds
|
||||||
|
if: always() && needs.windows-builds.outputs.built-dotnet-editor == 'true'
|
||||||
|
runs-on: "windows-latest"
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
opts:
|
||||||
|
- arch: x86_64
|
||||||
|
llvm: false
|
||||||
|
env:
|
||||||
|
BIN: godot.windows.editor.${{matrix.opts.arch}}${{matrix.opts.llvm && '.llvm' || ''}}.mono
|
||||||
|
steps:
|
||||||
|
- name: Clone Godot
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: godotengine/godot
|
||||||
|
ref: ${{ inputs.godot-ref }}
|
||||||
|
|
||||||
|
- name: Clone LimboAI module
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: modules/limboai
|
||||||
|
ref: ${{ inputs.limboai-ref }}
|
||||||
|
|
||||||
|
# Inits GODOT_VERSION, LIMBOAI_VERSION and NAME_PREFIX environment variables.
|
||||||
|
- uses: ./modules/limboai/.github/actions/init-version
|
||||||
|
|
||||||
|
- name: Reconstruct artifact name
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "ARTIFACT=${{env.NAME_PREFIX}}.dotnet.editor.windows.${{matrix.opts.arch}}" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Download editor artifact
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.ARTIFACT}}
|
||||||
|
path: bin/
|
||||||
|
|
||||||
|
- name: Build .NET assemblies
|
||||||
|
uses: ./modules/limboai/.github/actions/build-dotnet-assemblies
|
||||||
|
with:
|
||||||
|
platform: windows
|
||||||
|
bin: ${{env.BIN}}
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{env.ARTIFACT}}
|
||||||
|
overwrite: true
|
||||||
|
path: bin/*
|
|
@ -1,3 +1,9 @@
|
||||||
|
# LimboAI-specific
|
||||||
|
demo/addons/
|
||||||
|
demo/script_templates/
|
||||||
|
icons/*.import
|
||||||
|
godot-cpp
|
||||||
|
|
||||||
# Godot auto generated files
|
# Godot auto generated files
|
||||||
*.gen.*
|
*.gen.*
|
||||||
.import/
|
.import/
|
||||||
|
@ -181,3 +187,6 @@ godot.creator.*
|
||||||
|
|
||||||
# compile commands (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
# compile commands (https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
|
|
||||||
|
# clang cache
|
||||||
|
.cache
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
|
rev: v17.0.6
|
||||||
|
hooks:
|
||||||
|
- id: clang-format
|
||||||
|
files: \.(c|h|cpp|hpp|cc|cxx|m|mm|inc|java|glsl)$
|
||||||
|
types_or: [text]
|
||||||
|
exclude: |
|
||||||
|
(?x)^(
|
||||||
|
tests/python_build.*|
|
||||||
|
.*thirdparty.*|
|
||||||
|
.*platform/android/java/lib/src/com.*|
|
||||||
|
.*-so_wrap.*
|
||||||
|
)
|
||||||
|
|
||||||
|
- repo: https://github.com/psf/black-pre-commit-mirror
|
||||||
|
rev: 24.2.0
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
files: (\.py$|SConstruct|SCsub)
|
||||||
|
types_or: [text]
|
||||||
|
exclude: .*thirdparty.*
|
||||||
|
args:
|
||||||
|
- --line-length=120
|
|
@ -0,0 +1,7 @@
|
||||||
|
Copyright (c) 2023-2025 Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,5 @@
|
||||||
|
LimboAI Logo
|
||||||
|
Copyright (c) 2023 Aleksandra Snitsaruk
|
||||||
|
|
||||||
|
This work is licensed under the Creative Commons Attribution 4.0 International
|
||||||
|
license (CC BY 4.0 International): https://creativecommons.org/licenses/by/4.0/
|
139
README.md
139
README.md
|
@ -0,0 +1,139 @@
|
||||||
|
<p align="center">
|
||||||
|
<img src="doc/images/logo.svg" width="400" alt="LimboAI logo">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# LimboAI - Behavior Trees & State Machines for Godot 4
|
||||||
|
|
||||||
|
[](https://github.com/limbonaut/limboai/actions/workflows/all_builds.yml)
|
||||||
|
[](https://github.com/limbonaut/limboai/actions/workflows/test_builds.yml)
|
||||||
|
[](https://limboai.readthedocs.io/en/latest/?badge=latest)
|
||||||
|
[](https://github.com/limbonaut/limboai/blob/master/LICENSE.md)
|
||||||
|
[](https://discord.gg/N5MGC95GpP)
|
||||||
|
[](https://mastodon.gamedev.place/@limbo)
|
||||||
|
|
||||||
|
>**🛈 Supported Godot Engine:** **4.3** (v1.2.0+) | **4.2** (v1.1.x releases)
|
||||||
|
|
||||||
|
**LimboAI** is an open-source C++ plugin for **Godot Engine 4** providing a combination of
|
||||||
|
**Behavior Trees** and **State Machines**, which can be used together to create complex AI behaviors.
|
||||||
|
It comes with a behavior tree editor, built-in documentation, visual debugger, extensive demo project with a tutorial, and more!
|
||||||
|
While it is implemented in C++, it fully supports GDScript for [creating your own tasks](https://limboai.readthedocs.io/en/stable/behavior-trees/custom-tasks.html) and [states](https://limboai.readthedocs.io/en/stable/hierarchical-state-machines/create-hsm.html).
|
||||||
|
|
||||||
|
If you enjoy using LimboAI, please **consider supporting** my efforts with a donation on Ko-fi 😊 Your contribution will help me continue developing and improving it.
|
||||||
|
|
||||||
|
[](https://ko-fi.com/Y8Y2TCNH0)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Behavior Trees are powerful hierarchical structures used to model and control the behavior of agents in a game (e.g., characters, enemies). They are designed to make it easier to create rich and highly modular behaviors for your games. To learn more about behavior trees, check out [Introduction to Behavior Trees](https://limboai.readthedocs.io/en/stable/behavior-trees/introduction.html) and our demo project, which includes a tutorial.
|
||||||
|
|
||||||
|
## Demonstration
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
>**🛈 Demo project** lives in the `demo` folder and is available separately in [**Releases**](https://github.com/limbonaut/limboai/releases).
|
||||||
|
> Run `demo/scenes/showcase.tscn` to get started.
|
||||||
|
> It also includes a tutorial that introduces behavior trees through illustrative examples.
|
||||||
|
|
||||||
|
### Videos
|
||||||
|
|
||||||
|
> **🛈** YouTube videos produced by various creators
|
||||||
|
|
||||||
|
<a href="https://www.youtube.com/watch?v=NWaMArUg7mY"><img src="https://img.youtube.com/vi/NWaMArUg7mY/0.jpg" width=410></a>
|
||||||
|
<a href="https://www.youtube.com/watch?v=aP0Aacdxmno"><img src="https://img.youtube.com/vi/aP0Aacdxmno/0.jpg" width=410></a>
|
||||||
|
<a href="https://www.youtube.com/watch?v=vZHzMO90IwQ"><img src="https://img.youtube.com/vi/vZHzMO90IwQ/0.jpg" width=410></a>
|
||||||
|
<a href="https://www.youtube.com/watch?v=gAk3xl5fBsM"><img src="https://img.youtube.com/vi/gAk3xl5fBsM/0.jpg" width=410></a>
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Behavior Trees (BT):**
|
||||||
|
- Easily create, edit, and save `BehaviorTree` resources in the editor.
|
||||||
|
- Execute `BehaviorTree` resources using the `BTPlayer` node.
|
||||||
|
- Create complex behaviors by combining and nesting tasks in a hierarchy.
|
||||||
|
- Control execution flow using composite, decorator, and condition tasks.
|
||||||
|
- [Create custom tasks](https://limboai.readthedocs.io/en/stable/behavior-trees/custom-tasks.html) by extending core classes: `BTAction`, `BTCondition`, `BTDecorator`, and `BTComposite`.
|
||||||
|
- Built-in class documentation.
|
||||||
|
- Blackboard system: Share data seamlessly between tasks using the `Blackboard`.
|
||||||
|
- Blackboard plans: Define variables in the BehaviorTree resource and override their values in the BTPlayer node.
|
||||||
|
- Plan editor: Manage variables, their data types and property hints.
|
||||||
|
- Blackboard scopes: Prevent name conflicts and enable advanced techniques like [sharing data between several agents](https://limboai.readthedocs.io/en/stable/behavior-trees/using-blackboard.html#sharing-data-between-several-agents).
|
||||||
|
- Blackboard parameters: [Export a BB parameter](https://limboai.readthedocs.io/en/stable/behavior-trees/using-blackboard.html#task-parameters), for which user can provide a value or bind it to a blackboard variable (can be used in custom tasks).
|
||||||
|
- Inspector support for specifying blackboard variables (custom editor for exported `StringName` properties ending with "_var").
|
||||||
|
- Use the `BTSubtree` task to execute a tree from a different resource file, promoting organization and reusability.
|
||||||
|
- Visual Debugger: Inspect the execution of any BT in a running scene to identify and troubleshoot issues.
|
||||||
|
- Visualize BT in-game using `BehaviorTreeView` node (for custom in-game tools).
|
||||||
|
- Monitor tree performance with custom performance monitors.
|
||||||
|
|
||||||
|
- **Hierarchical State Machines (HSM):**
|
||||||
|
- Extend the `LimboState` class to implement state logic.
|
||||||
|
- `LimboHSM` node serves as a state machine that manages `LimboState` instances and transitions.
|
||||||
|
- `LimboHSM` is a state itself and can be nested within other `LimboHSM` instances.
|
||||||
|
- [Event-based](https://limboai.readthedocs.io/en/stable/hierarchical-state-machines/create-hsm.html#events-and-transitions): Transitions are associated with events and are triggered by the state machine when the relevant event is dispatched, allowing for better decoupling of transitions from state logic.
|
||||||
|
- Combine state machines with behavior trees using `BTState` for advanced reactive AI.
|
||||||
|
- Delegation Option: Using the vanilla `LimboState`, [delegate the implementation](https://limboai.readthedocs.io/en/stable/hierarchical-state-machines/create-hsm.html#single-file-state-machine-setup) to your callback functions, making it perfect for rapid prototyping and game jams.
|
||||||
|
- 🛈 Note: State machine setup and initialization require code; there is no GUI editor.
|
||||||
|
|
||||||
|
- **Tested:** Behavior tree tasks and HSM are covered by unit tests.
|
||||||
|
|
||||||
|
- **GDExtension:** LimboAI can be [used as extension](https://limboai.readthedocs.io/en/stable/getting-started/getting-limboai.html#get-gdextension-version). Custom engine builds are not necessary.
|
||||||
|
|
||||||
|
- **Demo + Tutorial:** Check out our extensive demo project, which includes an introduction to behavior trees using examples.
|
||||||
|
|
||||||
|
## First steps
|
||||||
|
|
||||||
|
Follow the [Getting started](https://limboai.readthedocs.io/en/stable/getting-started/getting-limboai.html) guide to learn how to get started with LimboAI and the demo project.
|
||||||
|
|
||||||
|
## Getting LimboAI
|
||||||
|
|
||||||
|
LimboAI can be used as either a C++ module or as a GDExtension shared library. GDExtension version is more convenient to use but somewhat limited in features. Whichever you choose to use, your project will stay compatible with both and you can switch from one to the other any time. See [Using GDExtension](https://limboai.readthedocs.io/en/stable/getting-started/getting-limboai.html#get-gdextension-version).
|
||||||
|
|
||||||
|
### Precompiled builds
|
||||||
|
|
||||||
|
- For the most recent builds, navigate to **Actions** → [**All Builds**](https://github.com/limbonaut/limboai/actions/workflows/all_builds.yml), select a build from the list, and scroll down until you find the **Artifacts** section.
|
||||||
|
- For release builds, check [**Releases**](https://github.com/limbonaut/limboai/releases).
|
||||||
|
|
||||||
|
### Compiling from source
|
||||||
|
|
||||||
|
- Download the Godot Engine source code and put this module source into the `modules/limboai` directory.
|
||||||
|
- Consult the Godot Engine documentation for instructions on [how to build from source code](https://docs.godotengine.org/en/stable/contributing/development/compiling/index.html).
|
||||||
|
- If you plan to export a game utilizing the LimboAI module, you'll also need to build export templates.
|
||||||
|
- To execute unit tests, compile the engine with `tests=yes` and run it with `--test --tc="*[LimboAI]*"`.
|
||||||
|
|
||||||
|
#### For GDExtension
|
||||||
|
|
||||||
|
- You'll need SCons build tool and a C++ compiler. See also [Compiling](https://docs.godotengine.org/en/stable/contributing/development/compiling/index.html).
|
||||||
|
- Run `scons target=editor` to build the plugin library for your current platform.
|
||||||
|
- SCons will automatically clone the godot-cpp/ repository if it doesn't already exist in the `limboai/godot-cpp` directory.
|
||||||
|
- By default, built targets are placed in the demo project: `demo/addons/limboai/bin/`
|
||||||
|
- Check `scons -h` for other options and targets.
|
||||||
|
|
||||||
|
## Using the plugin
|
||||||
|
|
||||||
|
- Online Documentation: [stable](https://limboai.readthedocs.io/en/stable/index.html), [latest](https://limboai.readthedocs.io/en/latest/index.html)
|
||||||
|
- [Getting started](https://limboai.readthedocs.io/en/stable/getting-started/getting-limboai.html)
|
||||||
|
- [Introduction to Behavior Trees](https://limboai.readthedocs.io/en/stable/behavior-trees/introduction.html)
|
||||||
|
- [Creating custom tasks in GDScript](https://limboai.readthedocs.io/en/stable/behavior-trees/custom-tasks.html)
|
||||||
|
- [Sharing data using Blackboard](https://limboai.readthedocs.io/en/stable/behavior-trees/using-blackboard.html)
|
||||||
|
- [Accessing nodes in the scene tree](https://limboai.readthedocs.io/en/stable/behavior-trees/accessing-nodes.html)
|
||||||
|
- [State machines](https://limboai.readthedocs.io/en/stable/hierarchical-state-machines/create-hsm.html)
|
||||||
|
- [Using GDExtension](https://limboai.readthedocs.io/en/stable/getting-started/getting-limboai.html#get-gdextension-version)
|
||||||
|
- [Using LimboAI with C#](https://limboai.readthedocs.io/en/stable/getting-started/c-sharp.html)
|
||||||
|
- [Class reference](https://limboai.readthedocs.io/en/stable/classes/featured-classes.html)
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions are welcome! Please open issues for bug reports, feature requests, or code changes.
|
||||||
|
For detailed guidelines on contributing to code or documentation, check out our [Contributing](https://limboai.readthedocs.io/en/latest/getting-started/contributing.html) page.
|
||||||
|
|
||||||
|
If you have an idea for a behavior tree task or a feature that could be useful in a variety of projects, open an issue to discuss it.
|
||||||
|
|
||||||
|
## Social
|
||||||
|
|
||||||
|
Need help? We have a Discord server: https://discord.gg/N5MGC95GpP
|
||||||
|
|
||||||
|
I write about LimboAI development on Mastodon: https://mastodon.gamedev.place/@limbo.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT
|
||||||
|
|
||||||
|
LimboAI logo and demo project art assets are licensed under the Creative Commons Attribution 4.0 International license that can be found at https://creativecommons.org/licenses/by/4.0/
|
|
@ -0,0 +1,160 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
"""
|
||||||
|
This is SConstruct file for building GDExtension variant using SCons build system.
|
||||||
|
For module variant, see SCsub file.
|
||||||
|
|
||||||
|
Use --project=DIR to customize output path for built targets.
|
||||||
|
- Built targets are placed into "DIR/addons/limboai/bin".
|
||||||
|
- For example: scons --project="../my_project"
|
||||||
|
- built targets will be placed into "../my_project/addons/limboai/bin".
|
||||||
|
- If not specified, built targets are put into the demo/ project.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import subprocess
|
||||||
|
from limboai_version import generate_module_version_header, godot_cpp_ref
|
||||||
|
|
||||||
|
sys.path.append("gdextension")
|
||||||
|
from update_icon_entries import update_icon_entries
|
||||||
|
from fix_icon_imports import fix_icon_imports
|
||||||
|
|
||||||
|
# Check if godot-cpp/ exists
|
||||||
|
if not os.path.exists("godot-cpp"):
|
||||||
|
print("Directory godot-cpp/ not found. Cloning repository...")
|
||||||
|
result = subprocess.run(
|
||||||
|
["git", "clone", "-b", godot_cpp_ref, "https://github.com/godotengine/godot-cpp.git"],
|
||||||
|
check=True,
|
||||||
|
# capture_output=True
|
||||||
|
)
|
||||||
|
if result.returncode != 0:
|
||||||
|
print("Error: Cloning godot-cpp repository failed.")
|
||||||
|
Exit(1)
|
||||||
|
print("Finished cloning godot-cpp repository.")
|
||||||
|
|
||||||
|
AddOption(
|
||||||
|
"--project",
|
||||||
|
dest="project",
|
||||||
|
type="string",
|
||||||
|
nargs=1,
|
||||||
|
action="store",
|
||||||
|
metavar="DIR",
|
||||||
|
default="demo",
|
||||||
|
help="Specify project directory",
|
||||||
|
)
|
||||||
|
|
||||||
|
help_text = """
|
||||||
|
Options:
|
||||||
|
--project=DIR Specify project directory (default: "demo");
|
||||||
|
built targets will be placed in DIR/addons/limboai/bin
|
||||||
|
"""
|
||||||
|
Help(help_text)
|
||||||
|
|
||||||
|
project_dir = GetOption("project")
|
||||||
|
if not os.path.isdir(project_dir):
|
||||||
|
print("Project directory not found: " + project_dir)
|
||||||
|
Exit(2)
|
||||||
|
|
||||||
|
# Parse LimboAI-specific variables.
|
||||||
|
vars = Variables()
|
||||||
|
vars.AddVariables(
|
||||||
|
BoolVariable("deploy_manifest", help="Deploy limboai.gdextension into PROJECT/addons/limboai/bin", default=True),
|
||||||
|
BoolVariable("deploy_icons", help="Deploy icons into PROJECT/addons/limboai/icons", default=True),
|
||||||
|
)
|
||||||
|
env = Environment(tools=["default"], PLATFORM="", variables=vars)
|
||||||
|
Help(vars.GenerateHelpText(env))
|
||||||
|
|
||||||
|
# Read LimboAI-specific variables.
|
||||||
|
deploy_manifest = env["deploy_manifest"]
|
||||||
|
deploy_icons = env["deploy_icons"]
|
||||||
|
|
||||||
|
# Remove processed variables from ARGUMENTS to avoid godot-cpp warnings.
|
||||||
|
for o in vars.options:
|
||||||
|
if o.key in ARGUMENTS:
|
||||||
|
del ARGUMENTS[o.key]
|
||||||
|
|
||||||
|
# For reference:
|
||||||
|
# - CCFLAGS are compilation flags shared between C and C++
|
||||||
|
# - CFLAGS are for C-specific compilation flags
|
||||||
|
# - CXXFLAGS are for C++-specific compilation flags
|
||||||
|
# - CPPFLAGS are for pre-processor flags
|
||||||
|
# - CPPDEFINES are for pre-processor defines
|
||||||
|
# - LINKFLAGS are for linking flags
|
||||||
|
|
||||||
|
env = SConscript("godot-cpp/SConstruct")
|
||||||
|
|
||||||
|
# Generate version header.
|
||||||
|
print("Generating LimboAI version header...")
|
||||||
|
generate_module_version_header()
|
||||||
|
|
||||||
|
# Update icon entries in limboai.gdextension file.
|
||||||
|
# Note: This will remove everything after [icons] section, and rebuild it with generated icon entries.
|
||||||
|
print("Updating LimboAI icon entries...")
|
||||||
|
update_icon_entries(silent=True)
|
||||||
|
|
||||||
|
# Fix icon imports in the PROJECT/addons/limboai/icons/.
|
||||||
|
# Enables scaling and color conversion in the editor for imported SVG icons.
|
||||||
|
try:
|
||||||
|
fix_icon_imports(project_dir)
|
||||||
|
except FileNotFoundError as e:
|
||||||
|
print(e)
|
||||||
|
except Exception as e:
|
||||||
|
print("Unknown error: " + str(e))
|
||||||
|
|
||||||
|
# Tweak this if you want to use different folders, or more folders, to store your source code in.
|
||||||
|
env.Append(CPPDEFINES=["LIMBOAI_GDEXTENSION"])
|
||||||
|
sources = Glob("*.cpp")
|
||||||
|
sources += Glob("blackboard/*.cpp")
|
||||||
|
sources += Glob("blackboard/bb_param/*.cpp")
|
||||||
|
sources += Glob("bt/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/blackboard/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/composites/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/decorators/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/scene/*.cpp")
|
||||||
|
sources += Glob("bt/tasks/utility/*.cpp")
|
||||||
|
sources += Glob("gdextension/*.cpp")
|
||||||
|
sources += Glob("editor/debugger/*.cpp")
|
||||||
|
sources += Glob("editor/*.cpp")
|
||||||
|
sources += Glob("hsm/*.cpp")
|
||||||
|
sources += Glob("util/*.cpp")
|
||||||
|
|
||||||
|
# Generate documentation header.
|
||||||
|
if env["target"] in ["editor", "template_debug"]:
|
||||||
|
doc_data = env.GodotCPPDocData("gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml"))
|
||||||
|
sources.append(doc_data)
|
||||||
|
|
||||||
|
# Build library.
|
||||||
|
if env["platform"] == "macos":
|
||||||
|
library = env.SharedLibrary(
|
||||||
|
project_dir
|
||||||
|
+ "/addons/limboai/bin/liblimboai.{}.{}.framework/liblimboai.{}.{}".format(
|
||||||
|
env["platform"], env["target"], env["platform"], env["target"]
|
||||||
|
),
|
||||||
|
source=sources,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
library = env.SharedLibrary(
|
||||||
|
project_dir + "/addons/limboai/bin/liblimboai{}{}".format(env["suffix"], env["SHLIBSUFFIX"]),
|
||||||
|
source=sources,
|
||||||
|
)
|
||||||
|
|
||||||
|
Default(library)
|
||||||
|
|
||||||
|
# Deploy icons into PROJECT/addons/limboai/icons.
|
||||||
|
if deploy_icons:
|
||||||
|
cmd_deploy_icons = env.Command(
|
||||||
|
project_dir + "/addons/limboai/icons/",
|
||||||
|
"icons/",
|
||||||
|
Copy("$TARGET", "$SOURCE"),
|
||||||
|
)
|
||||||
|
Default(cmd_deploy_icons)
|
||||||
|
|
||||||
|
# Deploy limboai.gdextension into PROJECT/addons/limboai/bin.
|
||||||
|
if deploy_manifest:
|
||||||
|
cmd_deploy_manifest = env.Command(
|
||||||
|
project_dir + "/addons/limboai/bin/limboai.gdextension",
|
||||||
|
"gdextension/limboai.gdextension",
|
||||||
|
Copy("$TARGET", "$SOURCE"),
|
||||||
|
)
|
||||||
|
Default(cmd_deploy_manifest)
|
23
SCsub
23
SCsub
|
@ -5,12 +5,25 @@ Import("env_modules")
|
||||||
|
|
||||||
module_env = env.Clone()
|
module_env = env.Clone()
|
||||||
|
|
||||||
|
module_env.Append(CPPDEFINES=["LIMBOAI_MODULE"])
|
||||||
|
|
||||||
|
import limboai_version
|
||||||
|
|
||||||
|
limboai_version.generate_module_version_header()
|
||||||
|
|
||||||
module_env.add_source_files(env.modules_sources, "*.cpp")
|
module_env.add_source_files(env.modules_sources, "*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "blackboard/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "blackboard/bb_param/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bt/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bt/composites/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/tasks/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bt/actions/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/tasks/blackboard/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bt/decorators/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/tasks/composites/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bt/conditions/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/tasks/decorators/*.cpp")
|
||||||
module_env.add_source_files(env.modules_sources, "bb_param/*.cpp")
|
module_env.add_source_files(env.modules_sources, "bt/tasks/misc/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "bt/tasks/scene/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "bt/tasks/utility/*.cpp")
|
||||||
if env.editor_build:
|
if env.editor_build:
|
||||||
module_env.add_source_files(env.modules_sources, "editor/*.cpp")
|
module_env.add_source_files(env.modules_sources, "editor/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "editor/debugger/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "hsm/*.cpp")
|
||||||
|
module_env.add_source_files(env.modules_sources, "util/*.cpp")
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_aabb.h */
|
|
||||||
|
|
||||||
#ifndef BB_AABB_H
|
|
||||||
#define BB_AABB_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBAabb : public BBParam {
|
|
||||||
GDCLASS(BBAabb, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::AABB; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_AABB_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_ARRAY_H
|
|
||||||
#define BB_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBArray : public BBParam {
|
|
||||||
GDCLASS(BBArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_basis.h */
|
|
||||||
|
|
||||||
#ifndef BB_BASIS_H
|
|
||||||
#define BB_BASIS_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBBasis : public BBParam {
|
|
||||||
GDCLASS(BBBasis, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::BASIS; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_BASIS_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_bool.h */
|
|
||||||
|
|
||||||
#ifndef BB_BOOL_H
|
|
||||||
#define BB_BOOL_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBBool : public BBParam {
|
|
||||||
GDCLASS(BBBool, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::BOOL; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_BOOL_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_byte_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_BYTE_ARRAY_H
|
|
||||||
#define BB_BYTE_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBByteArray : public BBParam {
|
|
||||||
GDCLASS(BBByteArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_BYTE_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_BYTE_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_color.h */
|
|
||||||
|
|
||||||
#ifndef BB_COLOR_H
|
|
||||||
#define BB_COLOR_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBColor : public BBParam {
|
|
||||||
GDCLASS(BBColor, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::COLOR; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_COLOR_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_color_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_COLOR_ARRAY_H
|
|
||||||
#define BB_COLOR_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBColorArray : public BBParam {
|
|
||||||
GDCLASS(BBColorArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_COLOR_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_COLOR_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_dictionary.h */
|
|
||||||
|
|
||||||
#ifndef BB_DICTIONARY_H
|
|
||||||
#define BB_DICTIONARY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBDictionary : public BBParam {
|
|
||||||
GDCLASS(BBDictionary, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::DICTIONARY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_DICTIONARY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_float.h */
|
|
||||||
|
|
||||||
#ifndef BB_FLOAT_H
|
|
||||||
#define BB_FLOAT_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBFloat : public BBParam {
|
|
||||||
GDCLASS(BBFloat, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::FLOAT; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_FLOAT_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_real_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_FLOAT_ARRAY_H
|
|
||||||
#define BB_FLOAT_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBFloatArray : public BBParam {
|
|
||||||
GDCLASS(BBFloatArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_FLOAT64_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_FLOAT_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_int.h */
|
|
||||||
|
|
||||||
#ifndef BB_INT_H
|
|
||||||
#define BB_INT_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBInt : public BBParam {
|
|
||||||
GDCLASS(BBInt, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::INT; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_INT_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_int_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_INT_ARRAY_H
|
|
||||||
#define BB_INT_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBIntArray : public BBParam {
|
|
||||||
GDCLASS(BBIntArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_INT64_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_INT_ARRAY_H
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* bb_node.cpp */
|
|
||||||
|
|
||||||
#include "bb_node.h"
|
|
||||||
#include "core/error/error_macros.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
#include "scene/main/node.h"
|
|
||||||
|
|
||||||
Variant BBNode::get_value(Object *p_agent, const Ref<Blackboard> &p_blackboard, const Variant &p_default) {
|
|
||||||
ERR_FAIL_COND_V(p_agent == nullptr, Variant());
|
|
||||||
ERR_FAIL_COND_V(!p_blackboard.is_valid(), Variant());
|
|
||||||
|
|
||||||
Variant val;
|
|
||||||
if (get_value_source() == SAVED_VALUE) {
|
|
||||||
val = get_saved_value();
|
|
||||||
} else {
|
|
||||||
val = p_blackboard->get_var(get_variable(), p_default);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (val.get_type() == Variant::NODE_PATH) {
|
|
||||||
Node *agent = Object::cast_to<Node>(p_agent);
|
|
||||||
ERR_FAIL_COND_V_MSG(agent == nullptr, Variant(), "BBNode: p_agent must be a Node.");
|
|
||||||
return agent->get_node(val);
|
|
||||||
} else {
|
|
||||||
Node *node = Object::cast_to<Node>(val);
|
|
||||||
if (unlikely(node == nullptr && val.get_type() != Variant::NIL)) {
|
|
||||||
WARN_PRINT("BBNode: Unexpected variant type of a blackboard variable.");
|
|
||||||
return p_default;
|
|
||||||
} else {
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
/* bb_node.h */
|
|
||||||
|
|
||||||
#ifndef BB_NODE_H
|
|
||||||
#define BB_NODE_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBNode : public BBParam {
|
|
||||||
GDCLASS(BBNode, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::NODE_PATH; }
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual Variant get_value(Object *p_agent, const Ref<Blackboard> &p_blackboard, const Variant &p_default = Variant()) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_NODE_H
|
|
|
@ -1,88 +0,0 @@
|
||||||
/* bb_param.cpp */
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/core_bind.h"
|
|
||||||
#include "core/error/error_macros.h"
|
|
||||||
#include "core/object/class_db.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
#include "modules/limboai/limbo_utility.h"
|
|
||||||
|
|
||||||
VARIANT_ENUM_CAST(BBParam::ValueSource);
|
|
||||||
|
|
||||||
void BBParam::set_value_source(ValueSource p_value) {
|
|
||||||
value_source = p_value;
|
|
||||||
notify_property_list_changed();
|
|
||||||
_update_name();
|
|
||||||
emit_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
Variant BBParam::get_saved_value() {
|
|
||||||
if (saved_value.get_type() != get_type()) {
|
|
||||||
Callable::CallError err;
|
|
||||||
Variant::construct(get_type(), saved_value, nullptr, 0, err);
|
|
||||||
}
|
|
||||||
return saved_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BBParam::set_saved_value(Variant p_value) {
|
|
||||||
saved_value = p_value;
|
|
||||||
_update_name();
|
|
||||||
emit_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BBParam::set_variable(const String &p_value) {
|
|
||||||
variable = p_value;
|
|
||||||
_update_name();
|
|
||||||
emit_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
String BBParam::to_string() {
|
|
||||||
if (value_source == SAVED_VALUE) {
|
|
||||||
return String(saved_value);
|
|
||||||
} else {
|
|
||||||
return LimboUtility::get_singleton()->decorate_var(variable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Variant BBParam::get_value(Object *p_agent, const Ref<Blackboard> &p_blackboard, const Variant &p_default) {
|
|
||||||
ERR_FAIL_COND_V(!p_blackboard.is_valid(), p_default);
|
|
||||||
|
|
||||||
if (value_source == SAVED_VALUE) {
|
|
||||||
return saved_value;
|
|
||||||
} else {
|
|
||||||
return p_blackboard->get_var(variable, p_default);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BBParam::_get_property_list(List<PropertyInfo> *p_list) const {
|
|
||||||
if (value_source == ValueSource::SAVED_VALUE) {
|
|
||||||
p_list->push_back(PropertyInfo(get_type(), "saved_value"));
|
|
||||||
} else {
|
|
||||||
p_list->push_back(PropertyInfo(Variant::STRING, "variable"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void BBParam::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("set_value_source", "p_value_source"), &BBParam::set_value_source);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_value_source"), &BBParam::get_value_source);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_saved_value", "p_value"), &BBParam::set_saved_value);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_saved_value"), &BBParam::get_saved_value);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_variable", "p_variable_name"), &BBParam::set_variable);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_variable"), &BBParam::get_variable);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_type"), &BBParam::get_type);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_value", "p_agent", "p_blackboard", "p_default"), &BBParam::get_value, Variant());
|
|
||||||
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "value_source", PROPERTY_HINT_ENUM, "Saved Value, Blackboard Var"), "set_value_source", "get_value_source");
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "variable", PROPERTY_HINT_NONE, "", 0), "set_variable", "get_variable");
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::NIL, "saved_value", PROPERTY_HINT_NONE, "", 0), "set_saved_value", "get_saved_value");
|
|
||||||
|
|
||||||
BIND_ENUM_CONSTANT(SAVED_VALUE);
|
|
||||||
BIND_ENUM_CONSTANT(BLACKBOARD_VAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
BBParam::BBParam() {
|
|
||||||
value_source = SAVED_VALUE;
|
|
||||||
variable = "";
|
|
||||||
saved_value = Variant();
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
/* bb_param.h */
|
|
||||||
|
|
||||||
#ifndef BB_PARAM_H
|
|
||||||
#define BB_PARAM_H
|
|
||||||
|
|
||||||
#include "core/io/resource.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/typedefs.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
#include "modules/limboai/blackboard.h"
|
|
||||||
#include "modules/limboai/limbo_utility.h"
|
|
||||||
|
|
||||||
class BBParam : public Resource {
|
|
||||||
GDCLASS(BBParam, Resource);
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum ValueSource : unsigned int {
|
|
||||||
SAVED_VALUE,
|
|
||||||
BLACKBOARD_VAR
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
|
||||||
ValueSource value_source;
|
|
||||||
Variant saved_value;
|
|
||||||
String variable;
|
|
||||||
|
|
||||||
_FORCE_INLINE_ void _update_name() {
|
|
||||||
set_name((value_source == SAVED_VALUE) ? String(saved_value) : LimboUtility::get_singleton()->decorate_var(variable));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
virtual Variant::Type get_type() const { return Variant::NIL; }
|
|
||||||
|
|
||||||
void _get_property_list(List<PropertyInfo> *p_list) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void set_value_source(ValueSource p_value);
|
|
||||||
ValueSource get_value_source() const { return value_source; }
|
|
||||||
|
|
||||||
void set_saved_value(Variant p_value);
|
|
||||||
Variant get_saved_value();
|
|
||||||
|
|
||||||
void set_variable(const String &p_value);
|
|
||||||
String get_variable() const { return variable; }
|
|
||||||
|
|
||||||
virtual String to_string() override;
|
|
||||||
|
|
||||||
virtual Variant get_value(Object *p_agent, const Ref<Blackboard> &p_blackboard, const Variant &p_default = Variant());
|
|
||||||
|
|
||||||
BBParam();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_PARAM_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_plane.h */
|
|
||||||
|
|
||||||
#ifndef BB_PLANE_H
|
|
||||||
#define BB_PLANE_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBPlane : public BBParam {
|
|
||||||
GDCLASS(BBPlane, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PLANE; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_PLANE_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_quat.h */
|
|
||||||
|
|
||||||
#ifndef BB_QUATERNION_H
|
|
||||||
#define BB_QUATERNION_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBQuaternion : public BBParam {
|
|
||||||
GDCLASS(BBQuaternion, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::QUATERNION; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_QUATERNION_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_rect2.h */
|
|
||||||
|
|
||||||
#ifndef BB_RECT2_H
|
|
||||||
#define BB_RECT2_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBRect2 : public BBParam {
|
|
||||||
GDCLASS(BBRect2, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::RECT2; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_RECT2_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_rect2.h */
|
|
||||||
|
|
||||||
#ifndef BB_RECT2I_H
|
|
||||||
#define BB_RECT2I_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBRect2i : public BBParam {
|
|
||||||
GDCLASS(BBRect2i, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::RECT2I; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_RECT2I_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_string.h */
|
|
||||||
|
|
||||||
#ifndef BB_STRING_H
|
|
||||||
#define BB_STRING_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBString : public BBParam {
|
|
||||||
GDCLASS(BBString, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::STRING; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_STRING_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_string_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_STRING_ARRAY_H
|
|
||||||
#define BB_STRING_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBStringArray : public BBParam {
|
|
||||||
GDCLASS(BBStringArray, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_STRING_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_STRING_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_string.h */
|
|
||||||
|
|
||||||
#ifndef BB_STRING_NAME_H
|
|
||||||
#define BB_STRING_NAME_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBStringName : public BBParam {
|
|
||||||
GDCLASS(BBStringName, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::STRING_NAME; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_STRING_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_transform2d.h */
|
|
||||||
|
|
||||||
#ifndef BB_TRANSFORM2D_H
|
|
||||||
#define BB_TRANSFORM2D_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBTransform2D : public BBParam {
|
|
||||||
GDCLASS(BBTransform2D, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::TRANSFORM2D; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_TRANSFORM2D_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_transform.h */
|
|
||||||
|
|
||||||
#ifndef BB_TRANSFORM3D_H
|
|
||||||
#define BB_TRANSFORM3D_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBTransform3D : public BBParam {
|
|
||||||
GDCLASS(BBTransform3D, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::TRANSFORM3D; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_TRANSFORM3D_H
|
|
|
@ -1,28 +0,0 @@
|
||||||
/* bb_variant.cpp */
|
|
||||||
|
|
||||||
#include "bb_variant.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
|
|
||||||
void BBVariant::set_type(Variant::Type p_type) {
|
|
||||||
type = p_type;
|
|
||||||
notify_property_list_changed();
|
|
||||||
emit_changed();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BBVariant::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("set_type", "p_type"), &BBVariant::set_type);
|
|
||||||
|
|
||||||
String vtypes;
|
|
||||||
for (int i = 0; i < Variant::VARIANT_MAX; i++) {
|
|
||||||
if (i > 0) {
|
|
||||||
vtypes += ",";
|
|
||||||
}
|
|
||||||
vtypes += Variant::get_type_name(Variant::Type(i));
|
|
||||||
}
|
|
||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, vtypes), "set_type", "get_type");
|
|
||||||
}
|
|
||||||
|
|
||||||
BBVariant::BBVariant() {
|
|
||||||
type = Variant::NIL;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
/* bb_variant.h */
|
|
||||||
|
|
||||||
#ifndef BB_VARIANT_H
|
|
||||||
#define BB_VARIANT_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
|
|
||||||
class BBVariant : public BBParam {
|
|
||||||
GDCLASS(BBVariant, BBParam);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Variant::Type type;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
virtual Variant::Type get_type() const override { return type; }
|
|
||||||
void set_type(Variant::Type p_type);
|
|
||||||
|
|
||||||
public:
|
|
||||||
BBVariant();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VARIANT
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector2.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR2_H
|
|
||||||
#define BB_VECTOR2_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector2 : public BBParam {
|
|
||||||
GDCLASS(BBVector2, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR2; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR2_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector2_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR2_ARRAY_H
|
|
||||||
#define BB_VECTOR2_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector2Array : public BBParam {
|
|
||||||
GDCLASS(BBVector2Array, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_VECTOR2_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR2_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector2.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR2I_H
|
|
||||||
#define BB_VECTOR2I_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector2i : public BBParam {
|
|
||||||
GDCLASS(BBVector2i, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR2I; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR2I_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector3.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR3_H
|
|
||||||
#define BB_VECTOR3_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector3 : public BBParam {
|
|
||||||
GDCLASS(BBVector3, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR3; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR3_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector3_array.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR3_ARRAY_H
|
|
||||||
#define BB_VECTOR3_ARRAY_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector3Array : public BBParam {
|
|
||||||
GDCLASS(BBVector3Array, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::PACKED_VECTOR3_ARRAY; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR3_ARRAY_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector3.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR3I_H
|
|
||||||
#define BB_VECTOR3I_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector3i : public BBParam {
|
|
||||||
GDCLASS(BBVector3i, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR3I; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR3I_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector3.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR4_H
|
|
||||||
#define BB_VECTOR4_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector4 : public BBParam {
|
|
||||||
GDCLASS(BBVector4, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR4; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR4_H
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* bb_vector3.h */
|
|
||||||
|
|
||||||
#ifndef BB_VECTOR4I_H
|
|
||||||
#define BB_VECTOR4I_H
|
|
||||||
|
|
||||||
#include "bb_param.h"
|
|
||||||
#include "core/object/object.h"
|
|
||||||
|
|
||||||
class BBVector4i : public BBParam {
|
|
||||||
GDCLASS(BBVector4i, BBParam);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual Variant::Type get_type() const override { return Variant::VECTOR4I; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BB_VECTOR4I_H
|
|
|
@ -1,62 +0,0 @@
|
||||||
/* blackboard.cpp */
|
|
||||||
|
|
||||||
#include "blackboard.h"
|
|
||||||
#include "core/error/error_macros.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
#include "scene/main/node.h"
|
|
||||||
|
|
||||||
Ref<Blackboard> Blackboard::top() const {
|
|
||||||
Ref<Blackboard> bb(this);
|
|
||||||
while (bb->get_parent_scope().is_valid()) {
|
|
||||||
bb = bb->get_parent_scope();
|
|
||||||
}
|
|
||||||
return bb;
|
|
||||||
}
|
|
||||||
|
|
||||||
Variant Blackboard::get_var(const Variant &p_key, const Variant &p_default) const {
|
|
||||||
if (data.has(p_key)) {
|
|
||||||
return data.get_valid(p_key);
|
|
||||||
} else if (parent.is_valid()) {
|
|
||||||
return parent->get_var(p_key, p_default);
|
|
||||||
} else {
|
|
||||||
return p_default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Blackboard::set_var(const Variant &p_key, const Variant &p_value) {
|
|
||||||
data[p_key] = p_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Blackboard::has_var(const Variant &p_key) const {
|
|
||||||
return data.has(p_key) || (parent.is_valid() && parent->has_var(p_key));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Blackboard::erase_var(const Variant &p_key) {
|
|
||||||
data.erase(p_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Blackboard::prefetch_nodepath_vars(Node *p_node) {
|
|
||||||
ERR_FAIL_COND(p_node == nullptr);
|
|
||||||
for (int i = 0; i < data.size(); i++) {
|
|
||||||
Variant value = data.get_value_at_index(i);
|
|
||||||
if (value.get_type() == Variant::NODE_PATH) {
|
|
||||||
Node *fetched_node = p_node->get_node_or_null(value);
|
|
||||||
if (fetched_node != nullptr) {
|
|
||||||
data[data.get_key_at_index(i)] = fetched_node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void Blackboard::_bind_methods() {
|
|
||||||
ClassDB::bind_method(D_METHOD("get_data"), &Blackboard::get_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_data", "p_data"), &Blackboard::set_data);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_var", "p_key", "p_default"), &Blackboard::get_var, Variant());
|
|
||||||
ClassDB::bind_method(D_METHOD("set_var", "p_key", "p_value"), &Blackboard::set_var);
|
|
||||||
ClassDB::bind_method(D_METHOD("has_var", "p_key"), &Blackboard::has_var);
|
|
||||||
ClassDB::bind_method(D_METHOD("set_parent_scope", "p_blackboard"), &Blackboard::set_parent_scope);
|
|
||||||
ClassDB::bind_method(D_METHOD("get_parent_scope"), &Blackboard::get_parent_scope);
|
|
||||||
ClassDB::bind_method(D_METHOD("erase_var"), &Blackboard::erase_var);
|
|
||||||
ClassDB::bind_method(D_METHOD("prefetch_nodepath_vars", "p_node"), &Blackboard::prefetch_nodepath_vars);
|
|
||||||
ClassDB::bind_method(D_METHOD("top"), &Blackboard::top);
|
|
||||||
}
|
|
39
blackboard.h
39
blackboard.h
|
@ -1,39 +0,0 @@
|
||||||
/* blackboard.h */
|
|
||||||
|
|
||||||
#ifndef BLACKBOARD_H
|
|
||||||
#define BLACKBOARD_H
|
|
||||||
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/object/ref_counted.h"
|
|
||||||
#include "core/variant/dictionary.h"
|
|
||||||
#include "core/variant/variant.h"
|
|
||||||
#include "scene/main/node.h"
|
|
||||||
|
|
||||||
class Blackboard : public RefCounted {
|
|
||||||
GDCLASS(Blackboard, RefCounted);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Dictionary data;
|
|
||||||
Ref<Blackboard> parent;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
static void _bind_methods();
|
|
||||||
|
|
||||||
public:
|
|
||||||
void set_data(const Dictionary &p_value) { data = p_value; }
|
|
||||||
Dictionary get_data() const { return data; }
|
|
||||||
|
|
||||||
void set_parent_scope(const Ref<Blackboard> &p_blackboard) { parent = p_blackboard; }
|
|
||||||
Ref<Blackboard> get_parent_scope() const { return parent; }
|
|
||||||
|
|
||||||
Ref<Blackboard> top() const;
|
|
||||||
|
|
||||||
Variant get_var(const Variant &p_key, const Variant &p_default) const;
|
|
||||||
void set_var(const Variant &p_key, const Variant &p_value);
|
|
||||||
bool has_var(const Variant &p_key) const;
|
|
||||||
void erase_var(const Variant &p_key);
|
|
||||||
|
|
||||||
void prefetch_nodepath_vars(Node *p_node);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // BLACKBOARD_H
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_aabb.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_AABB_H
|
||||||
|
#define BB_AABB_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBAabb : public BBParam {
|
||||||
|
GDCLASS(BBAabb, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::AABB; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_AABB_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_ARRAY_H
|
||||||
|
#define BB_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBArray : public BBParam {
|
||||||
|
GDCLASS(BBArray, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_basis.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_BASIS_H
|
||||||
|
#define BB_BASIS_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBBasis : public BBParam {
|
||||||
|
GDCLASS(BBBasis, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::BASIS; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_BASIS_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_bool.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_BOOL_H
|
||||||
|
#define BB_BOOL_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBBool : public BBParam {
|
||||||
|
GDCLASS(BBBool, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::BOOL; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_BOOL_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_byte_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_BYTE_ARRAY_H
|
||||||
|
#define BB_BYTE_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBByteArray : public BBParam {
|
||||||
|
GDCLASS(BBByteArray, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_BYTE_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_BYTE_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_color.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_COLOR_H
|
||||||
|
#define BB_COLOR_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBColor : public BBParam {
|
||||||
|
GDCLASS(BBColor, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::COLOR; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_COLOR_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_color_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_COLOR_ARRAY_H
|
||||||
|
#define BB_COLOR_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBColorArray : public BBParam {
|
||||||
|
GDCLASS(BBColorArray, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_COLOR_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_COLOR_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_dictionary.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_DICTIONARY_H
|
||||||
|
#define BB_DICTIONARY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBDictionary : public BBParam {
|
||||||
|
GDCLASS(BBDictionary, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::DICTIONARY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_DICTIONARY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_float.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_FLOAT_H
|
||||||
|
#define BB_FLOAT_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBFloat : public BBParam {
|
||||||
|
GDCLASS(BBFloat, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::FLOAT; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_FLOAT_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_float32_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_FLOAT32_ARRAY_H
|
||||||
|
#define BB_FLOAT32_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBFloat32Array : public BBParam {
|
||||||
|
GDCLASS(BBFloat32Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_FLOAT32_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_FLOAT32_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_float64_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_FLOAT64_ARRAY_H
|
||||||
|
#define BB_FLOAT64_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBFloat64Array : public BBParam {
|
||||||
|
GDCLASS(BBFloat64Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_FLOAT64_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_FLOAT64_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_int.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_INT_H
|
||||||
|
#define BB_INT_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBInt : public BBParam {
|
||||||
|
GDCLASS(BBInt, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::INT; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_INT_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_int32_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_INT32_ARRAY_H
|
||||||
|
#define BB_INT32_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBInt32Array : public BBParam {
|
||||||
|
GDCLASS(BBInt32Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_INT32_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_INT32_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_int64_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_INT64_ARRAY_H
|
||||||
|
#define BB_INT64_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBInt64Array : public BBParam {
|
||||||
|
GDCLASS(BBInt64Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_INT64_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_INT64_ARRAY_H
|
|
@ -0,0 +1,33 @@
|
||||||
|
/**
|
||||||
|
* bb_node.cpp
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bb_node.h"
|
||||||
|
|
||||||
|
Variant BBNode::get_value(Node *p_scene_root, const Ref<Blackboard> &p_blackboard, const Variant &p_default) {
|
||||||
|
ERR_FAIL_NULL_V_MSG(p_scene_root, Variant(), "BBNode: get_value() failed - scene_root is null.");
|
||||||
|
ERR_FAIL_COND_V_MSG(p_blackboard.is_null(), Variant(), "BBNode: get_value() failed - blackboard is null.");
|
||||||
|
|
||||||
|
Variant val;
|
||||||
|
if (get_value_source() == SAVED_VALUE) {
|
||||||
|
val = get_saved_value();
|
||||||
|
} else {
|
||||||
|
val = p_blackboard->get_var(get_variable(), p_default);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (val.get_type() == Variant::NODE_PATH) {
|
||||||
|
return p_scene_root->get_node_or_null(val);
|
||||||
|
} else if (val.get_type() == Variant::OBJECT || val.get_type() == Variant::NIL) {
|
||||||
|
return val;
|
||||||
|
} else {
|
||||||
|
WARN_PRINT("BBNode: Unexpected variant type: " + Variant::get_type_name(val.get_type()) + ". Returning default value.");
|
||||||
|
return p_default;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
/**
|
||||||
|
* bb_node.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_NODE_H
|
||||||
|
#define BB_NODE_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBNode : public BBParam {
|
||||||
|
GDCLASS(BBNode, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::NODE_PATH; }
|
||||||
|
virtual Variant get_value(Node *p_scene_root, const Ref<Blackboard> &p_blackboard, const Variant &p_default = Variant()) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_NODE_H
|
|
@ -0,0 +1,120 @@
|
||||||
|
/**
|
||||||
|
* bb_param.cpp
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
#include "../../util/limbo_utility.h"
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_MODULE
|
||||||
|
#endif // LIMBOAI_MODULE
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_GDEXTENSION
|
||||||
|
using namespace godot;
|
||||||
|
#endif // LIMBOAI_GDEXTENSION
|
||||||
|
|
||||||
|
VARIANT_ENUM_CAST(BBParam::ValueSource);
|
||||||
|
|
||||||
|
void BBParam::set_value_source(ValueSource p_value) {
|
||||||
|
value_source = p_value;
|
||||||
|
notify_property_list_changed();
|
||||||
|
_update_name();
|
||||||
|
emit_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
Variant BBParam::get_saved_value() {
|
||||||
|
return saved_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BBParam::set_saved_value(Variant p_value) {
|
||||||
|
if (p_value.get_type() == Variant::NIL) {
|
||||||
|
_assign_default_value();
|
||||||
|
} else {
|
||||||
|
saved_value = p_value;
|
||||||
|
}
|
||||||
|
_update_name();
|
||||||
|
emit_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BBParam::set_variable(const StringName &p_variable) {
|
||||||
|
variable = p_variable;
|
||||||
|
_update_name();
|
||||||
|
emit_changed();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_MODULE
|
||||||
|
String BBParam::to_string() {
|
||||||
|
#elif LIMBOAI_GDEXTENSION
|
||||||
|
String BBParam::_to_string() {
|
||||||
|
#endif
|
||||||
|
if (value_source == SAVED_VALUE) {
|
||||||
|
String s = saved_value.stringify();
|
||||||
|
switch (get_type()) {
|
||||||
|
case Variant::STRING: {
|
||||||
|
s = "\"" + s.c_escape() + "\"";
|
||||||
|
} break;
|
||||||
|
case Variant::STRING_NAME: {
|
||||||
|
s = "&\"" + s.c_escape() + "\"";
|
||||||
|
} break;
|
||||||
|
case Variant::NODE_PATH: {
|
||||||
|
s = "^\"" + s.c_escape() + "\"";
|
||||||
|
} break;
|
||||||
|
default: {
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
} else {
|
||||||
|
return LimboUtility::get_singleton()->decorate_var(variable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Variant BBParam::get_value(Node *p_scene_root, const Ref<Blackboard> &p_blackboard, const Variant &p_default) {
|
||||||
|
ERR_FAIL_COND_V(!p_blackboard.is_valid(), p_default);
|
||||||
|
|
||||||
|
if (value_source == SAVED_VALUE) {
|
||||||
|
if (saved_value == Variant()) {
|
||||||
|
_assign_default_value();
|
||||||
|
}
|
||||||
|
return saved_value;
|
||||||
|
} else {
|
||||||
|
ERR_FAIL_COND_V_MSG(!p_blackboard->has_var(variable), p_default, vformat("BBParam: Blackboard variable \"%s\" doesn't exist.", variable));
|
||||||
|
return p_blackboard->get_var(variable, p_default);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BBParam::_get_property_list(List<PropertyInfo> *p_list) const {
|
||||||
|
if (value_source == ValueSource::SAVED_VALUE) {
|
||||||
|
p_list->push_back(PropertyInfo(get_type(), "saved_value"));
|
||||||
|
} else {
|
||||||
|
p_list->push_back(PropertyInfo(Variant::STRING_NAME, "variable"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BBParam::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_value_source", "value_source"), &BBParam::set_value_source);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_value_source"), &BBParam::get_value_source);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_saved_value", "value"), &BBParam::set_saved_value);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_saved_value"), &BBParam::get_saved_value);
|
||||||
|
ClassDB::bind_method(D_METHOD("set_variable", "variable_name"), &BBParam::set_variable);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_variable"), &BBParam::get_variable);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_type"), &BBParam::get_type);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_value", "scene_root", "blackboard", "default"), &BBParam::get_value, Variant());
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "value_source", PROPERTY_HINT_ENUM, "Saved Value,Blackboard Var"), "set_value_source", "get_value_source");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "variable", PROPERTY_HINT_NONE, "", 0), "set_variable", "get_variable");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::NIL, "saved_value", PROPERTY_HINT_NONE, "", 0), "set_saved_value", "get_saved_value");
|
||||||
|
|
||||||
|
BIND_ENUM_CONSTANT(SAVED_VALUE);
|
||||||
|
BIND_ENUM_CONSTANT(BLACKBOARD_VAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
BBParam::BBParam() {
|
||||||
|
value_source = SAVED_VALUE;
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/**
|
||||||
|
* bb_param.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_PARAM_H
|
||||||
|
#define BB_PARAM_H
|
||||||
|
|
||||||
|
#include "../../blackboard/blackboard.h"
|
||||||
|
#include "../../util/limbo_utility.h"
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_MODULE
|
||||||
|
#include "core/io/resource.h"
|
||||||
|
#endif // LIMBOAI_MODULE
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_GDEXTENSION
|
||||||
|
#include <godot_cpp/classes/resource.hpp>
|
||||||
|
#endif // LIMBOAI_GDEXTENSION
|
||||||
|
|
||||||
|
class BBParam : public Resource {
|
||||||
|
GDCLASS(BBParam, Resource);
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum ValueSource : unsigned int {
|
||||||
|
SAVED_VALUE,
|
||||||
|
BLACKBOARD_VAR
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
ValueSource value_source;
|
||||||
|
Variant saved_value;
|
||||||
|
StringName variable;
|
||||||
|
|
||||||
|
_FORCE_INLINE_ void _update_name() {
|
||||||
|
set_name((value_source == SAVED_VALUE) ? String(saved_value) : LimboUtility::get_singleton()->decorate_var(variable));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
_FORCE_INLINE_ void _assign_default_value() { saved_value = VARIANT_DEFAULT(get_type()); }
|
||||||
|
|
||||||
|
void _get_property_list(List<PropertyInfo> *p_list) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void set_value_source(ValueSource p_value);
|
||||||
|
ValueSource get_value_source() const { return value_source; }
|
||||||
|
|
||||||
|
void set_saved_value(Variant p_value);
|
||||||
|
Variant get_saved_value();
|
||||||
|
|
||||||
|
void set_variable(const StringName &p_variable);
|
||||||
|
StringName get_variable() const { return variable; }
|
||||||
|
|
||||||
|
#ifdef LIMBOAI_MODULE
|
||||||
|
virtual String to_string() override;
|
||||||
|
#elif LIMBOAI_GDEXTENSION
|
||||||
|
virtual String _to_string();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const { return Variant::NIL; }
|
||||||
|
virtual Variant::Type get_variable_expected_type() const { return get_type(); }
|
||||||
|
virtual Variant get_value(Node *p_scene_root, const Ref<Blackboard> &p_blackboard, const Variant &p_default = Variant());
|
||||||
|
|
||||||
|
BBParam();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_PARAM_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_plane.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_PLANE_H
|
||||||
|
#define BB_PLANE_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBPlane : public BBParam {
|
||||||
|
GDCLASS(BBPlane, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PLANE; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_PLANE_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_projection.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_PROJECTION_H
|
||||||
|
#define BB_PROJECTION_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBProjection : public BBParam {
|
||||||
|
GDCLASS(BBProjection, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PROJECTION; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_PROJECTION_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_quaternion.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_QUATERNION_H
|
||||||
|
#define BB_QUATERNION_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBQuaternion : public BBParam {
|
||||||
|
GDCLASS(BBQuaternion, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::QUATERNION; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_QUATERNION_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_rect2.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_RECT2_H
|
||||||
|
#define BB_RECT2_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBRect2 : public BBParam {
|
||||||
|
GDCLASS(BBRect2, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::RECT2; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_RECT2_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_rect2i.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_RECT2I_H
|
||||||
|
#define BB_RECT2I_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBRect2i : public BBParam {
|
||||||
|
GDCLASS(BBRect2i, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::RECT2I; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_RECT2I_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_string.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_STRING_H
|
||||||
|
#define BB_STRING_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBString : public BBParam {
|
||||||
|
GDCLASS(BBString, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::STRING; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_STRING_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_string_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_STRING_ARRAY_H
|
||||||
|
#define BB_STRING_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBStringArray : public BBParam {
|
||||||
|
GDCLASS(BBStringArray, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_STRING_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_STRING_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_string_name.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_STRING_NAME_H
|
||||||
|
#define BB_STRING_NAME_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBStringName : public BBParam {
|
||||||
|
GDCLASS(BBStringName, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::STRING_NAME; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_STRING_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_transform2d.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_TRANSFORM2D_H
|
||||||
|
#define BB_TRANSFORM2D_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBTransform2D : public BBParam {
|
||||||
|
GDCLASS(BBTransform2D, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::TRANSFORM2D; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_TRANSFORM2D_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_transform3d.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_TRANSFORM3D_H
|
||||||
|
#define BB_TRANSFORM3D_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBTransform3D : public BBParam {
|
||||||
|
GDCLASS(BBTransform3D, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::TRANSFORM3D; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_TRANSFORM3D_H
|
|
@ -0,0 +1,48 @@
|
||||||
|
/**
|
||||||
|
* bb_variant.cpp
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bb_variant.h"
|
||||||
|
|
||||||
|
void BBVariant::set_type(Variant::Type p_type) {
|
||||||
|
if (type != p_type) {
|
||||||
|
type = p_type;
|
||||||
|
if (get_saved_value().get_type() != p_type) {
|
||||||
|
_assign_default_value();
|
||||||
|
}
|
||||||
|
emit_changed();
|
||||||
|
notify_property_list_changed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Variant::Type BBVariant::get_type() const {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BBVariant::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_type", "type"), &BBVariant::set_type);
|
||||||
|
|
||||||
|
String vtypes;
|
||||||
|
for (int i = 0; i < Variant::VARIANT_MAX; i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
vtypes += ",";
|
||||||
|
}
|
||||||
|
vtypes += Variant::get_type_name(Variant::Type(i));
|
||||||
|
}
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "type", PROPERTY_HINT_ENUM, vtypes), "set_type", "get_type");
|
||||||
|
}
|
||||||
|
|
||||||
|
BBVariant::BBVariant(const Variant &p_value) {
|
||||||
|
set_type(p_value.get_type());
|
||||||
|
set_saved_value(p_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
BBVariant::BBVariant() {
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/**
|
||||||
|
* bb_variant.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VARIANT_H
|
||||||
|
#define BB_VARIANT_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVariant : public BBParam {
|
||||||
|
GDCLASS(BBVariant, BBParam);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Variant::Type type = Variant::NIL;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual Variant::Type get_type() const override;
|
||||||
|
void set_type(Variant::Type p_type);
|
||||||
|
|
||||||
|
virtual Variant::Type get_variable_expected_type() const override { return Variant::NIL; }
|
||||||
|
|
||||||
|
BBVariant(const Variant &p_value);
|
||||||
|
BBVariant();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VARIANT
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector2.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR2_H
|
||||||
|
#define BB_VECTOR2_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector2 : public BBParam {
|
||||||
|
GDCLASS(BBVector2, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::VECTOR2; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR2_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector2_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR2_ARRAY_H
|
||||||
|
#define BB_VECTOR2_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector2Array : public BBParam {
|
||||||
|
GDCLASS(BBVector2Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_VECTOR2_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR2_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector2i.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR2I_H
|
||||||
|
#define BB_VECTOR2I_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector2i : public BBParam {
|
||||||
|
GDCLASS(BBVector2i, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::VECTOR2I; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR2I_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector3.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR3_H
|
||||||
|
#define BB_VECTOR3_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector3 : public BBParam {
|
||||||
|
GDCLASS(BBVector3, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::VECTOR3; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR3_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector3_array.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR3_ARRAY_H
|
||||||
|
#define BB_VECTOR3_ARRAY_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector3Array : public BBParam {
|
||||||
|
GDCLASS(BBVector3Array, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::PACKED_VECTOR3_ARRAY; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR3_ARRAY_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector3i.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR3I_H
|
||||||
|
#define BB_VECTOR3I_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector3i : public BBParam {
|
||||||
|
GDCLASS(BBVector3i, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::VECTOR3I; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR3I_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* bb_vector4.h
|
||||||
|
* =============================================================================
|
||||||
|
* Copyright (c) 2023-present Serhii Snitsaruk and the LimboAI contributors.
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by an MIT-style
|
||||||
|
* license that can be found in the LICENSE file or at
|
||||||
|
* https://opensource.org/licenses/MIT.
|
||||||
|
* =============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BB_VECTOR4_H
|
||||||
|
#define BB_VECTOR4_H
|
||||||
|
|
||||||
|
#include "bb_param.h"
|
||||||
|
|
||||||
|
class BBVector4 : public BBParam {
|
||||||
|
GDCLASS(BBVector4, BBParam);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods() {}
|
||||||
|
|
||||||
|
virtual Variant::Type get_type() const override { return Variant::VECTOR4; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BB_VECTOR4_H
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue