Compare commits
808 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3bf7031e6a | ||
|
|
503fc980f4 | ||
|
|
efed11eb97 | ||
|
|
330820062f | ||
|
|
45d157fe3f | ||
|
|
812dea385c | ||
|
|
c582bdea46 | ||
|
|
e6c6a9381b | ||
|
|
4b4c0755c6 | ||
|
|
aeb0539c91 | ||
|
|
9feafa45f5 | ||
|
|
927df391f3 | ||
|
|
cbef6adeb1 | ||
|
|
2dee221861 | ||
|
|
0b175cb25d | ||
|
|
0820338b55 | ||
|
|
a2b46eee6f | ||
|
|
09a435320a | ||
|
|
bf56200c06 | ||
|
|
2d18df2011 | ||
|
|
bab87c0da8 | ||
|
|
148f272500 | ||
|
|
6de4af727b | ||
|
|
75946b9d14 | ||
|
|
1c63ee6743 | ||
|
|
efdaf0d986 | ||
|
|
3f6aeac33d | ||
|
|
d9692004cc | ||
|
|
67a12eecad | ||
|
|
37999e0870 | ||
|
|
66dc1e94f5 | ||
|
|
ebcce194a0 | ||
|
|
95eab94c80 | ||
|
|
41a6dbe06c | ||
|
|
fa22b0ec12 | ||
|
|
be60a367e8 | ||
|
|
608de34205 | ||
|
|
0a8f2edb05 | ||
|
|
41b08f38c5 | ||
|
|
a83c0b2e9a | ||
|
|
8f853c8f18 | ||
|
|
b4071f6dcb | ||
|
|
6b70418861 | ||
|
|
de0235ad94 | ||
|
|
c278c632b3 | ||
|
|
6392330e70 | ||
|
|
160ae4e244 | ||
|
|
a6c9bd3182 | ||
|
|
801eadd8a8 | ||
|
|
211dab1297 | ||
|
|
0c3b39ffdc | ||
|
|
c31f88a318 | ||
|
|
e9eb981782 | ||
|
|
83bde8a781 | ||
|
|
52f352bf94 | ||
|
|
b419a96d69 | ||
|
|
eb3d5b62f5 | ||
|
|
1c5f578d88 | ||
|
|
db3aae1388 | ||
|
|
0b08eb72a6 | ||
|
|
cbc81376be | ||
|
|
27e9901d05 | ||
|
|
532c36677c | ||
|
|
0c20c6ecb7 | ||
|
|
fbb3240ebb | ||
|
|
bffae90022 | ||
|
|
61f6368591 | ||
|
|
1027ca2a85 | ||
|
|
5acc42f739 | ||
|
|
1edeaeb94e | ||
|
|
879acc6077 | ||
|
|
4e5d87104c | ||
|
|
e6a24b8ba1 | ||
|
|
fd190c7770 | ||
|
|
d56869aefa | ||
|
|
c8a15bb7e4 | ||
|
|
07c28c3f6d | ||
|
|
855957b099 | ||
|
|
50959317e9 | ||
|
|
20a681a71f | ||
|
|
4e2d558b36 | ||
|
|
0430b908f4 | ||
|
|
a84e9f2aaa | ||
|
|
7ce571e59c | ||
|
|
545a64f7dc | ||
|
|
10c999a4a2 | ||
|
|
d0e026d597 | ||
|
|
0b1e2bf19b | ||
|
|
71c2c7ad05 | ||
|
|
97f5bf3cc4 | ||
|
|
bb9573b85a | ||
|
|
e1f53dfc67 | ||
|
|
87481e0a4d | ||
|
|
f7aa58e385 | ||
|
|
ea5c78f814 | ||
|
|
c93c016e9c | ||
|
|
4bb6664c7e | ||
|
|
9578068a02 | ||
|
|
30e5f2b17d | ||
|
|
f959760c07 | ||
|
|
e7db2350bc | ||
|
|
0585dabf7a | ||
|
|
a3c6e3f1df | ||
|
|
9f57278644 | ||
|
|
afc35cf623 | ||
|
|
6d8523054b | ||
|
|
fdecd55278 | ||
|
|
7e7f95916b | ||
|
|
ab52c65dcf | ||
|
|
ed4d0eb5d0 | ||
|
|
4bc9143306 | ||
|
|
a4f558c77a | ||
|
|
e4f226a9c5 | ||
|
|
c7d34049fa | ||
|
|
ee06e620c6 | ||
|
|
b48110db3b | ||
|
|
8413046dd8 | ||
|
|
83a5a82e18 | ||
|
|
771c5fbe3d | ||
|
|
74f16d0137 | ||
|
|
5d5d354f7d | ||
|
|
8f5f27755d | ||
|
|
4cb92cdb06 | ||
|
|
9e067ebdd6 | ||
|
|
fd5fcc9928 | ||
|
|
c0b2abb5fd | ||
|
|
2c8620a75c | ||
|
|
62f6ed0878 | ||
|
|
886b62bbad | ||
|
|
4bd58589fc | ||
|
|
0ce4144767 | ||
|
|
cde945f40e | ||
|
|
e2126a2693 | ||
|
|
c9f6d92bef | ||
|
|
fbf4c411c1 | ||
|
|
ce5218db58 | ||
|
|
e2ea7f9b87 | ||
|
|
94d9f04814 | ||
|
|
c86dbac04a | ||
|
|
f36eed32b9 | ||
|
|
cd752209ad | ||
|
|
fe37d619b9 | ||
|
|
043f4688ef | ||
|
|
949f171579 | ||
|
|
87d586a30e | ||
|
|
783f453da3 | ||
|
|
6dcf889ffe | ||
|
|
8d44879cc6 | ||
|
|
e7b813962d | ||
|
|
22fadab3b3 | ||
|
|
91741ec29c | ||
|
|
8269d842ce | ||
|
|
d038bdb6ce | ||
|
|
6cef301b94 | ||
|
|
e7ffbd817c | ||
|
|
97067a6ee2 | ||
|
|
7d1a8f5404 | ||
|
|
43bcf0cf3b | ||
|
|
71751ee18d | ||
|
|
ed105b102d | ||
|
|
f2662045ed | ||
|
|
ecb77b0283 | ||
|
|
4d4869842e | ||
|
|
47300b42b0 | ||
|
|
609565af5f | ||
|
|
0c75f920de | ||
|
|
e7b51f313b | ||
|
|
e8204fc983 | ||
|
|
aa69af64fb | ||
|
|
41f734b04d | ||
|
|
8ad6f3abcc | ||
|
|
e4875903f1 | ||
|
|
0a04de04f1 | ||
|
|
20427fdffa | ||
|
|
0fd0abc6c0 | ||
|
|
70f7fc29d4 | ||
|
|
b0c1aff783 | ||
|
|
4909c28ed9 | ||
|
|
9e6745f691 | ||
|
|
6c3ccb259f | ||
|
|
6c8d80777c | ||
|
|
2db61f93ac | ||
|
|
ad059cbc38 | ||
|
|
87e7e04c5e | ||
|
|
c083d059c9 | ||
|
|
ebd44d3b60 | ||
|
|
51f5d04889 | ||
|
|
0f4d574115 | ||
|
|
1feb4a5e6d | ||
|
|
f861b75c7d | ||
|
|
3530ca8989 | ||
|
|
6b074ed4b2 | ||
|
|
671823b4fa | ||
|
|
8ceebf1546 | ||
|
|
376495836a | ||
|
|
98212df076 | ||
|
|
1316c9235a | ||
|
|
a0905d5695 | ||
|
|
2a35e22dd2 | ||
|
|
f86a07daee | ||
|
|
997628622a | ||
|
|
563e015c92 | ||
|
|
64533de597 | ||
|
|
3776b99c39 | ||
|
|
a5d1350815 | ||
|
|
82e44397ff | ||
|
|
335c880af2 | ||
|
|
966efa0669 | ||
|
|
526a61381d | ||
|
|
d01f68f731 | ||
|
|
1235b41172 | ||
|
|
21f3a053ed | ||
|
|
9e960d461b | ||
|
|
02fad0a9cc | ||
|
|
627b78043b | ||
|
|
89b439c3c8 | ||
|
|
4a4a9f267b | ||
|
|
f605aabaa9 | ||
|
|
d82d0ae923 | ||
|
|
1e111d29d9 | ||
|
|
110def97d9 | ||
|
|
5bacdfa951 | ||
|
|
914f1b38f8 | ||
|
|
2aff73a958 | ||
|
|
13c2eae1f4 | ||
|
|
8f4258b119 | ||
|
|
4eba89603e | ||
|
|
61f75d7331 | ||
|
|
cd387c5c3a | ||
|
|
2fa32e5099 | ||
|
|
f12da57720 | ||
|
|
964d1a0d87 | ||
|
|
0cb14461ba | ||
|
|
d05f9c5540 | ||
|
|
690580c57d | ||
|
|
5039763a52 | ||
|
|
2cc54ffa5b | ||
|
|
0a9b78f013 | ||
|
|
e42fa7ad20 | ||
|
|
9c179e559b | ||
|
|
6dd10b74d5 | ||
|
|
a073b0ab18 | ||
|
|
4f253999ac | ||
|
|
9108a7bae6 | ||
|
|
6ba88323fe | ||
|
|
e112e3f949 | ||
|
|
1ed4e9f5bb | ||
|
|
b6c5f202e4 | ||
|
|
976b39414f | ||
|
|
d74887eaa1 | ||
|
|
7fb72bf0e2 | ||
|
|
b0126206e1 | ||
|
|
9c240850b8 | ||
|
|
5b7b50f555 | ||
|
|
f591403b7d | ||
|
|
4b028b3435 | ||
|
|
cbcf237d80 | ||
|
|
a815c564fb | ||
|
|
cb12501d5b | ||
|
|
86aeabc911 | ||
|
|
5e2a455045 | ||
|
|
86dddd0253 | ||
|
|
4677de80c1 | ||
|
|
fbcbca6f24 | ||
|
|
7024273a02 | ||
|
|
070bb4d2d1 | ||
|
|
f33e924cdf | ||
|
|
18fcc6e596 | ||
|
|
59e909ae3a | ||
|
|
66766b43c7 | ||
|
|
8c6c4c2630 | ||
|
|
ea2ed7d776 | ||
|
|
a708c8b7ea | ||
|
|
12ca4cda91 | ||
|
|
85f73fee02 | ||
|
|
1b5b6d424b | ||
|
|
126a764918 | ||
|
|
f796a24956 | ||
|
|
e815cff291 | ||
|
|
0ad89ebc04 | ||
|
|
a4b9579d25 | ||
|
|
e65b6670ec | ||
|
|
1665e75068 | ||
|
|
6d01d893f7 | ||
|
|
cb9616a381 | ||
|
|
d218fb926a | ||
|
|
39276b4b03 | ||
|
|
51ba999ee1 | ||
|
|
52593252c5 | ||
|
|
718f56172e | ||
|
|
34b7961814 | ||
|
|
897b90f044 | ||
|
|
a9778e6e68 | ||
|
|
ccaf888e8b | ||
|
|
29821003fe | ||
|
|
3f7ba23dff | ||
|
|
6fd243522d | ||
|
|
368bf2258f | ||
|
|
533ddb874e | ||
|
|
baaf126c15 | ||
|
|
5b2bfe10bc | ||
|
|
17b24c3389 | ||
|
|
55b3e8639f | ||
|
|
22dad88ff7 | ||
|
|
ce3b0f2d8f | ||
|
|
a87e2a56d2 | ||
|
|
bb0ee26e4f | ||
|
|
adf5189541 | ||
|
|
82077936bb | ||
|
|
5094a6fc49 | ||
|
|
274ef166ef | ||
|
|
66c27fab13 | ||
|
|
56bcabedf7 | ||
|
|
79a9541394 | ||
|
|
7e35de3c33 | ||
|
|
7b90044544 | ||
|
|
5a7e5450dc | ||
|
|
ec2ec59be0 | ||
|
|
beb25bd595 | ||
|
|
c2919f7e7a | ||
|
|
cee9d86835 | ||
|
|
9dbedc6e5d | ||
|
|
53310ed80a | ||
|
|
9251c55be2 | ||
|
|
25658f2a0a | ||
|
|
4f9e64588f | ||
|
|
afeb4d033b | ||
|
|
2569b2139d | ||
|
|
d88923bb71 | ||
|
|
d0c6d9a489 | ||
|
|
1bdea1b8d8 | ||
|
|
6ea90ea828 | ||
|
|
6217ae78e3 | ||
|
|
20529d3ebc | ||
|
|
c8fa116a24 | ||
|
|
2904bc69d9 | ||
|
|
38b3ad07b7 | ||
|
|
fe765e5a5b | ||
|
|
6e7514491c | ||
|
|
eb5b50b3e9 | ||
|
|
82b908f0ab | ||
|
|
336256fc71 | ||
|
|
49a7da6393 | ||
|
|
a8c645f00d | ||
|
|
62d8cb0b25 | ||
|
|
f5028a4937 | ||
|
|
203612853b | ||
|
|
8e8e95cd2d | ||
|
|
696e6cb84b | ||
|
|
67940476af | ||
|
|
0dd9d2b460 | ||
|
|
6b2f2d0664 | ||
|
|
636bfdb530 | ||
|
|
c0d6618808 | ||
|
|
e21a3347ac | ||
|
|
59a68ee981 | ||
|
|
7a072746d9 | ||
|
|
a6799dd29b | ||
|
|
163ecb160a | ||
|
|
f00d1f9505 | ||
|
|
87b489a541 | ||
|
|
f670ade2ee | ||
|
|
b5508c1152 | ||
|
|
564c258c86 | ||
|
|
745ff1a270 | ||
|
|
e727ee6d4a | ||
|
|
e6a39a8255 | ||
|
|
43bff5c34d | ||
|
|
c046a1b474 | ||
|
|
209e3f03c1 | ||
|
|
dbf05a1419 | ||
|
|
5af35b6771 | ||
|
|
00abba11ae | ||
|
|
d268d94f76 | ||
|
|
76af3e3077 | ||
|
|
54bade668e | ||
|
|
5a3ec8f407 | ||
|
|
c043664ad6 | ||
|
|
7e9ca6fbb6 | ||
|
|
e9a82652a0 | ||
|
|
db2e6b6973 | ||
|
|
da9278ad8d | ||
|
|
5a9307e9a7 | ||
|
|
f31fd622dd | ||
|
|
6723157ca5 | ||
|
|
956448a1a5 | ||
|
|
4be675f977 | ||
|
|
7924051c0d | ||
|
|
83b5f6ef2d | ||
|
|
0f26d62a0a | ||
|
|
a9f11256cd | ||
|
|
ead0547d59 | ||
|
|
89e29bce62 | ||
|
|
058db5d5d0 | ||
|
|
76aa409f89 | ||
|
|
923d0497e6 | ||
|
|
dd4f4b83fc | ||
|
|
c2bed82db5 | ||
|
|
9a444da343 | ||
|
|
9dd6a77c76 | ||
|
|
895725df64 | ||
|
|
6f07576748 | ||
|
|
550a11962e | ||
|
|
c3883cdad0 | ||
|
|
e9e2cd614d | ||
|
|
55e1759b47 | ||
|
|
33f5215e6d | ||
|
|
5459a646b3 | ||
|
|
6229f99a2e | ||
|
|
0e5b95e3aa | ||
|
|
72d7c1ba54 | ||
|
|
ee9a2ee03d | ||
|
|
6bfbcc4aa9 | ||
|
|
a9d7ed50b7 | ||
|
|
bc77ebc10c | ||
|
|
cbdce79d7d | ||
|
|
46dfa064d0 | ||
|
|
0478af2564 | ||
|
|
750388a425 | ||
|
|
ea9155b903 | ||
|
|
d34f228d2f | ||
|
|
093043750b | ||
|
|
4fb0c246db | ||
|
|
5e951f27c9 | ||
|
|
49253964d8 | ||
|
|
4ff1d0c2e1 | ||
|
|
2385011f96 | ||
|
|
7527f9326c | ||
|
|
9c7b80f066 | ||
|
|
48facc0978 | ||
|
|
22a6c4e8af | ||
|
|
bd6cfa6461 | ||
|
|
c63dca1c0d | ||
|
|
c6af151bf3 | ||
|
|
ccc20a9716 | ||
|
|
47605583d1 | ||
|
|
58e83c11f0 | ||
|
|
836a4eb892 | ||
|
|
6d50a747e3 | ||
|
|
4344af1f02 | ||
|
|
6510d83524 | ||
|
|
6d01193e1e | ||
|
|
8c3d6d05ab | ||
|
|
733a064c79 | ||
|
|
8715f6a301 | ||
|
|
b51725633e | ||
|
|
5ec11c61bd | ||
|
|
ab038a4d46 | ||
|
|
a976a7affb | ||
|
|
2f76684113 | ||
|
|
1ad7f12e2d | ||
|
|
017b83d375 | ||
|
|
650b443fd0 | ||
|
|
8aa1509f47 | ||
|
|
b21bf2d544 | ||
|
|
777bd60f88 | ||
|
|
7889db43a8 | ||
|
|
ae3aa20508 | ||
|
|
84e754dd10 | ||
|
|
b9618d66f2 | ||
|
|
daa7b20e4a | ||
|
|
48a7254aa3 | ||
|
|
2bc63b37e4 | ||
|
|
33afab7294 | ||
|
|
8010a82776 | ||
|
|
048b7bd32f | ||
|
|
28fa0b070d | ||
|
|
dc0be93b25 | ||
|
|
5e49d2d8d6 | ||
|
|
1d8efe5f9d | ||
|
|
8b791b68d3 | ||
|
|
521174f911 | ||
|
|
a6f7bd9099 | ||
|
|
fed964e0f7 | ||
|
|
77b4f3e930 | ||
|
|
351b8c2469 | ||
|
|
ee9f65d4a3 | ||
|
|
a1a69f62e1 | ||
|
|
ff52fec663 | ||
|
|
5743d30851 | ||
|
|
de02061b5e | ||
|
|
b64c38809e | ||
|
|
a163db485b | ||
|
|
47f7507af3 | ||
|
|
568e55e373 | ||
|
|
79e722b5ff | ||
|
|
415252a5b2 | ||
|
|
307bb7aeec | ||
|
|
397da91ab4 | ||
|
|
fdd0c25a25 | ||
|
|
d691e9f39d | ||
|
|
a5cbe19d23 | ||
|
|
5661124d86 | ||
|
|
1346e163e9 | ||
|
|
d5626bfe52 | ||
|
|
0900c13fa1 | ||
|
|
5019f200b7 | ||
|
|
3b41ded045 | ||
|
|
9f84b84819 | ||
|
|
f61f3af687 | ||
|
|
0a6f7ac817 | ||
|
|
153e6c5f1b | ||
|
|
e24d96da6f | ||
|
|
59e5099ed6 | ||
|
|
b8e6e5df61 | ||
|
|
16851a457e | ||
|
|
1c5bb605c3 | ||
|
|
dc12d58054 | ||
|
|
120e0f6971 | ||
|
|
b9136e4e98 | ||
|
|
197b97d0db | ||
|
|
912136d174 | ||
|
|
653c85c58d | ||
|
|
638c99981d | ||
|
|
71e61abcd6 | ||
|
|
fa1d440bb0 | ||
|
|
f0064e35bc | ||
|
|
88d208268a | ||
|
|
6aa90a44f7 | ||
|
|
3c9322ee08 | ||
|
|
b2f47e6b70 | ||
|
|
c905a870e0 | ||
|
|
b2360e42c6 | ||
|
|
0da621745a | ||
|
|
d8fc3851a7 | ||
|
|
edd3fb3440 | ||
|
|
a105c017d5 | ||
|
|
dd1034e37b | ||
|
|
41f16a54de | ||
|
|
b91510efb3 | ||
|
|
745d8122f5 | ||
|
|
98e4f7409b | ||
|
|
cdb3971b8d | ||
|
|
d01b8c7ad1 | ||
|
|
7c35b6e95a | ||
|
|
86b35fc43d | ||
|
|
5b2c8ac337 | ||
|
|
734d4a912b | ||
|
|
4386d3169a | ||
|
|
35348f1150 | ||
|
|
36b27458b6 | ||
|
|
bbb2153112 | ||
|
|
9ec1d8f16b | ||
|
|
e1858df645 | ||
|
|
3b1066e16f | ||
|
|
75709a7812 | ||
|
|
81c68e90cb | ||
|
|
bc9110b344 | ||
|
|
89d5618232 | ||
|
|
1e8b844eac | ||
|
|
3fc278c7b7 | ||
|
|
db546412f1 | ||
|
|
3b42b604e1 | ||
|
|
f22caed088 | ||
|
|
1f4e611629 | ||
|
|
8879593381 | ||
|
|
22b7086bea | ||
|
|
c097841d78 | ||
|
|
44e4ffbe62 | ||
|
|
84f60f63b8 | ||
|
|
572f358bda | ||
|
|
46df7726c3 | ||
|
|
3abfaf1bca | ||
|
|
f119afe436 | ||
|
|
94908bc599 | ||
|
|
cabcfc7136 | ||
|
|
d2c6305548 | ||
|
|
414af6a5d5 | ||
|
|
ecab13af57 | ||
|
|
47f9aece38 | ||
|
|
6dc64cf2f6 | ||
|
|
832582caa9 | ||
|
|
828661e9de | ||
|
|
52f78ee4ed | ||
|
|
6029b6d67f | ||
|
|
9d744580a1 | ||
|
|
b295f51c29 | ||
|
|
5c6aea0d50 | ||
|
|
99bf50ee52 | ||
|
|
f48a19a3bc | ||
|
|
fed11db92e | ||
|
|
23fb15fe78 | ||
|
|
7a533f6053 | ||
|
|
a292ff4287 | ||
|
|
29329383e4 | ||
|
|
fefdad5335 | ||
|
|
982f9ce8fb | ||
|
|
5c6d4b9ac2 | ||
|
|
49954f5c07 | ||
|
|
0b837925a2 | ||
|
|
54dd67a435 | ||
|
|
18ddc040d1 | ||
|
|
aeb28f67e4 | ||
|
|
54b892cd29 | ||
|
|
2e28525c4b | ||
|
|
8aa8de570f | ||
|
|
6723479c32 | ||
|
|
e318b6a113 | ||
|
|
df44f82198 | ||
|
|
97d54868e9 | ||
|
|
65e65ba308 | ||
|
|
2056d5e350 | ||
|
|
8b3b72243f | ||
|
|
814146f227 | ||
|
|
511983e1ea | ||
|
|
13e5df62c9 | ||
|
|
8debf8caf8 | ||
|
|
eab90cac05 | ||
|
|
ce401b01b6 | ||
|
|
271dcd46bc | ||
|
|
c1a7b452e0 | ||
|
|
e50ff6b0a5 | ||
|
|
34ddb92e4d | ||
|
|
35b16c7292 | ||
|
|
931fc93b4b | ||
|
|
aacd9dc62c | ||
|
|
061c55614b | ||
|
|
41c6887f33 | ||
|
|
b427185fac | ||
|
|
6fa14accfe | ||
|
|
1b8933cd84 | ||
|
|
e6261a6bf8 | ||
|
|
0a76647175 | ||
|
|
787706b1f7 | ||
|
|
94665e8055 | ||
|
|
b24770629e | ||
|
|
a09bd09a0e | ||
|
|
988df8742c | ||
|
|
10c41bf443 | ||
|
|
bb30876557 | ||
|
|
81c24b3de1 | ||
|
|
4e1f734af7 | ||
|
|
2f726cf7f2 | ||
|
|
e726d16094 | ||
|
|
5bda5124e6 | ||
|
|
1a66b7c4c3 | ||
|
|
da86dee981 | ||
|
|
6caf0fc1cc | ||
|
|
8d28976b0d | ||
|
|
26e972314e | ||
|
|
8a582f8872 | ||
|
|
ca04504573 | ||
|
|
80360214df | ||
|
|
c69eae486e | ||
|
|
57bebd3fb6 | ||
|
|
329dac77ee | ||
|
|
e5dabc63c2 | ||
|
|
f652135e19 | ||
|
|
6bf7d8b111 | ||
|
|
004ad0eb8c | ||
|
|
989034c799 | ||
|
|
c2334ce80a | ||
|
|
6d59fe3080 | ||
|
|
9c01256029 | ||
|
|
e33c863162 | ||
|
|
787a9c0083 | ||
|
|
c75c22955c | ||
|
|
5afb5d24d8 | ||
|
|
134cc34d74 | ||
|
|
3397d6c907 | ||
|
|
f8cf185db9 | ||
|
|
735935c0c4 | ||
|
|
fd3beaf2b9 | ||
|
|
034fab480d | ||
|
|
17432d1f94 | ||
|
|
62c6d8e42d | ||
|
|
14e057cf05 | ||
|
|
982c9bf964 | ||
|
|
b4aba3d263 | ||
|
|
9f9d57b9a9 | ||
|
|
236e3c7e61 | ||
|
|
2160844ad0 | ||
|
|
51475d600c | ||
|
|
149f7a1d9d | ||
|
|
56ef7ae60c | ||
|
|
7ec6586c4a | ||
|
|
074a6bfa87 | ||
|
|
965fec5927 | ||
|
|
58b87aa999 | ||
|
|
b0b16b52ee | ||
|
|
9ab3f7e5aa | ||
|
|
61210955bd | ||
|
|
28f73d0a76 | ||
|
|
99fb1a4c5f | ||
|
|
42cf80106f | ||
|
|
bcb9cfd2fe | ||
|
|
1d57568322 | ||
|
|
d56c041c4a | ||
|
|
be48ed5589 | ||
|
|
897c296fbe | ||
|
|
d25fe028b8 | ||
|
|
d9ade96fad | ||
|
|
7fd05b7ca6 | ||
|
|
0eec5383ed | ||
|
|
f474d2c834 | ||
|
|
e40e5e6a99 | ||
|
|
82d20efa8d | ||
|
|
8c7716428d | ||
|
|
9ac8a4211e | ||
|
|
23750bab55 | ||
|
|
22aeddc655 | ||
|
|
ab69cd8027 | ||
|
|
f3d35e9537 | ||
|
|
4cb72c1998 | ||
|
|
12ccc10e83 | ||
|
|
ec631f3499 | ||
|
|
75d2ea1519 | ||
|
|
14e9a94061 | ||
|
|
d3284ab9f6 | ||
|
|
775df43470 | ||
|
|
e2e6024e8f | ||
|
|
d89b51f17d | ||
|
|
aa626947ed | ||
|
|
630693d64e | ||
|
|
f2be23274e | ||
|
|
2972780bed | ||
|
|
cf3d2c3def | ||
|
|
1f8751054c | ||
|
|
cc90e6d479 | ||
|
|
76dd3c86f2 | ||
|
|
91468fa2f9 | ||
|
|
739219c57b | ||
|
|
f56e1933a6 | ||
|
|
8e4aec9c4d | ||
|
|
e6e29aaf1e | ||
|
|
1ac5f54e9e | ||
|
|
bf983658c8 | ||
|
|
e17286eb9f | ||
|
|
19c17e96de | ||
|
|
b45368342d | ||
|
|
11e071289b | ||
|
|
dcea8ae64f | ||
|
|
c9480ef17d | ||
|
|
a9517096f9 | ||
|
|
fc3f03425e | ||
|
|
8d43046f13 | ||
|
|
cd6880aff4 | ||
|
|
ccefa45fb0 | ||
|
|
b721d7a10f | ||
|
|
ef85d1d83e | ||
|
|
d03ceb2a23 | ||
|
|
90198be1cb | ||
|
|
f640494c1f | ||
|
|
77b9feb765 | ||
|
|
99139dfcca | ||
|
|
a241f63ddc | ||
|
|
70507258ae | ||
|
|
51a8144f49 | ||
|
|
54ad9ba243 | ||
|
|
a7f7a09418 | ||
|
|
44897fb371 | ||
|
|
bb6a748167 | ||
|
|
21f61d46da | ||
|
|
6ac8a9d440 | ||
|
|
4a8299d9dc | ||
|
|
560d388df4 | ||
|
|
7683e86d8b | ||
|
|
ebb763db03 | ||
|
|
920491ddb2 | ||
|
|
761728ac43 | ||
|
|
d8ddb9dc82 | ||
|
|
405f153439 | ||
|
|
f789a35901 | ||
|
|
46c6b2168c | ||
|
|
1f955904a4 | ||
|
|
558c89cc30 | ||
|
|
222d41c84a | ||
|
|
12a62f4607 | ||
|
|
f561768c67 | ||
|
|
c1bb05c0a4 | ||
|
|
f5b8d8a60c | ||
|
|
8218cfc72c | ||
|
|
00706daae5 | ||
|
|
6ba8a6a600 | ||
|
|
377fb2329c | ||
|
|
285ee665ee | ||
|
|
f8d55ba837 | ||
|
|
c6f1f19866 | ||
|
|
745592f507 | ||
|
|
d52f5e6e03 | ||
|
|
eb62356313 | ||
|
|
919dc248e3 | ||
|
|
a011728cc9 | ||
|
|
e584139b6d | ||
|
|
21f3f52c7b | ||
|
|
568e43cf3d | ||
|
|
e004e540d7 | ||
|
|
cac6172344 | ||
|
|
d8cbc7ddd8 | ||
|
|
bdf3a2dfe8 | ||
|
|
693b82e47d | ||
|
|
888be0fd5e | ||
|
|
e8ea2af298 | ||
|
|
785c2e36c6 | ||
|
|
d824b41bbb | ||
|
|
a9df64f861 | ||
|
|
4cb78f55d1 | ||
|
|
8091bec6bf | ||
|
|
7baf42b138 | ||
|
|
ab9835b896 | ||
|
|
9d142c5607 | ||
|
|
09db6dc424 | ||
|
|
3b62526267 | ||
|
|
5d80031a40 | ||
|
|
656e4d529c | ||
|
|
a894873d6b | ||
|
|
832aac0e6e | ||
|
|
6967d4e762 |
8
.gitignore
vendored
@@ -1,5 +1,3 @@
|
||||
##Packr, build stuff
|
||||
|
||||
logs/
|
||||
/core/assets/mindustry-saves/
|
||||
/core/assets/mindustry-maps/
|
||||
@@ -13,8 +11,10 @@ logs/
|
||||
/desktop/gifexport/
|
||||
/core/lib/
|
||||
/core/assets-raw/sprites/generated/
|
||||
/core/assets-raw/sprites_out/
|
||||
/annotations/build/
|
||||
/kryonet/build/
|
||||
/annotations/out/
|
||||
/net/build/
|
||||
/tools/build/
|
||||
/tests/build/
|
||||
/server/build/
|
||||
@@ -28,6 +28,8 @@ logs/
|
||||
/ios/src/io/anuke/mindustry/gen/
|
||||
/core/src/io/anuke/mindustry/gen/
|
||||
ios/robovm.properties
|
||||
packr-out/
|
||||
config/
|
||||
*.gif
|
||||
|
||||
version.properties
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
jdk:
|
||||
- openjdk8
|
||||
script:
|
||||
- "git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc"
|
||||
- "./gradlew test"
|
||||
- "./gradlew desktop:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
||||
- "./gradlew server:dist -Pbuildversion=${TRAVIS_TAG:1}"
|
||||
|
||||
15
README.md
@@ -3,32 +3,35 @@
|
||||
[](https://travis-ci.org/Anuken/Mindustry)
|
||||
[](https://discord.gg/mindustry)
|
||||
|
||||
A pixelated sandbox tower defense game made using [LibGDX](https://libgdx.badlogicgames.com/). Winner of the [GDL Metal Monstrosity Jam](https://itch.io/jam/gdl---metal-monstrosity-jam).
|
||||
A sandbox tower defense game written in Java.
|
||||
|
||||
_[Trello Board](https://trello.com/b/aE2tcUwF/mindustry-40-plans)_
|
||||
_[Wiki](http://mindustry.wikia.com/wiki/Mindustry_Wiki)_
|
||||
_[Discord](https://discord.gg/r8BkXNd)_
|
||||
|
||||
### Building
|
||||
|
||||
Bleeding-edge live builds are generated automatically for every commit. You can see them [here](https://jenkins.hellomouse.net/job/mindustry/).
|
||||
|
||||
If you'd rather compile on your own, follow these instructions.
|
||||
First, make sure you have Java 8 and JDK 8 installed. Open a terminal in the root directory, and run the following commands:
|
||||
First, make sure you have Java 8 and JDK 8 installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands:
|
||||
|
||||
#### Windows
|
||||
|
||||
_Running:_ `gradlew desktop:run`
|
||||
_Building:_ `gradlew desktop:dist`
|
||||
|
||||
#### Linux
|
||||
#### Linux/Mac OS
|
||||
|
||||
_Running:_ `./gradlew desktop:run`
|
||||
_Building:_ `./gradlew desktop:dist`
|
||||
|
||||
#### For Server Builds...
|
||||
#### Server
|
||||
|
||||
Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server' i.e. `gradlew server:dist`.
|
||||
Server builds are bundled with each released build (in Releases). If you'd rather compile on your own, replace 'desktop' with 'server', e.g. `gradlew server:dist`.
|
||||
|
||||
##### Troubleshooting
|
||||
|
||||
If the terminal returns `Permission denied` or `Command not found` on Mac/Linux, run `chmod +x ./gradlew` before running `./gradlew`. *This is a one-time procedure.*
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
package="io.anuke.mindustry">
|
||||
|
||||
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
|
||||
<uses-permission android:name="com.android.vending.BILLING" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
@@ -17,10 +16,11 @@
|
||||
android:appCategory="game"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
|
||||
<meta-data android:name="android.max_aspect" android:value="2.1" />
|
||||
<activity
|
||||
android:name="io.anuke.mindustry.AndroidLauncher"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="sensor"
|
||||
android:screenOrientation="user"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
|
||||
|
||||
<intent-filter>
|
||||
|
||||
@@ -8,7 +8,7 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.2.1'
|
||||
classpath 'com.android.tools.build:gradle:3.3.2'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,32 +26,27 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
implementation project(":core")
|
||||
implementation project(":kryonet")
|
||||
implementation 'com.android.support:support-v4:28.0.0'
|
||||
implementation 'org.sufficientlysecure:donations:2.5'
|
||||
implementation 'com.google.android.gms:play-services-auth:16.0.1'
|
||||
implementation project(":net")
|
||||
|
||||
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
|
||||
implementation arcModule("backends:backend-android")
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
|
||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
|
||||
implementation "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
|
||||
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
|
||||
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
|
||||
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
|
||||
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
|
||||
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
|
||||
implementation "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
|
||||
}
|
||||
|
||||
task deploy(type: Copy){
|
||||
dependsOn "assembleRelease"
|
||||
|
||||
from "build/outputs/apk/google/release/android-google-release.apk"
|
||||
from "build/outputs/apk/release/android-release.apk"
|
||||
into "../deploy/"
|
||||
rename ("android-google-release.apk", appName + "-android-" + getVersionString() + ".apk")
|
||||
rename ("android-release.apk", appName + "-android-" + getVersionString() + ".apk")
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -105,12 +100,6 @@ android {
|
||||
|
||||
flavorDimensions "google"
|
||||
|
||||
productFlavors {
|
||||
google {
|
||||
buildConfigField "boolean", "DONATIONS_GOOGLE", "true"
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
release {
|
||||
if(project.hasProperty("RELEASE_STORE_FILE")) {
|
||||
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 76 KiB |
@@ -20,26 +20,10 @@
|
||||
#}
|
||||
|
||||
-verbose
|
||||
|
||||
-dontwarn android.support.**
|
||||
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
|
||||
-dontwarn com.badlogic.gdx.utils.GdxBuild
|
||||
-dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild
|
||||
-dontwarn com.badlogic.gdx.jnigen.BuildTarget*
|
||||
-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild
|
||||
|
||||
-keep class com.badlogic.gdx.controllers.android.AndroidControllers
|
||||
|
||||
-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* {
|
||||
<init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration);
|
||||
}
|
||||
|
||||
-keepclassmembers class com.badlogic.gdx.physics.box2d.World {
|
||||
boolean contactFilter(long, long);
|
||||
void beginContact(long);
|
||||
void endContact(long);
|
||||
void preSolve(long, long);
|
||||
void postSolve(long, long);
|
||||
boolean reportFixture(long);
|
||||
float reportRayFixture(long, float, float, float, float, float);
|
||||
-verbose
|
||||
-ignorewarnings
|
||||
-keep class io.anuke.mindustry.game.Rules
|
||||
-keep class io.anuke.mindustry.desktop.DesktopLauncher
|
||||
-keepclasseswithmembers public class * {
|
||||
public static void main(java.lang.String[]);
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 23 KiB |
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="#000">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="top"
|
||||
android:adjustViewBounds="false"
|
||||
android:contentDescription="background"
|
||||
android:cropToPadding="false"
|
||||
android:scaleType="centerCrop"
|
||||
android:src="@drawable/background" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/donations_activity_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 553 B After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 28 KiB |
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">Mindustry</string>
|
||||
<string-array name="donation_google_catalog_values">
|
||||
<item>1 달러</item>
|
||||
<item>2 달러</item>
|
||||
<item>5 달러</item>
|
||||
<item>10 달러</item>
|
||||
<item>15 달러</item>
|
||||
<item>25 달러</item>
|
||||
<item>50 달러</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">Mindustry</string>
|
||||
<string-array name="donation_google_catalog_values">
|
||||
<item>1 Доллар</item>
|
||||
<item>2 Доллара</item>
|
||||
<item>5 Доллара</item>
|
||||
<item>10 Долларов</item>
|
||||
<item>15 Долларов</item>
|
||||
<item>25 Долларов</item>
|
||||
<item>50 Долларов</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -2,14 +2,5 @@
|
||||
<resources>
|
||||
|
||||
<string name="app_name">Mindustry</string>
|
||||
<string-array name="donation_google_catalog_values">
|
||||
<item>1 Dollar</item>
|
||||
<item>2 Dollars</item>
|
||||
<item>5 Dollars</item>
|
||||
<item>10 Dollars</item>
|
||||
<item>15 Dollars</item>
|
||||
<item>25 Dollars</item>
|
||||
<item>50 Dollars</item>
|
||||
</string-array>
|
||||
|
||||
</resources>
|
||||
@@ -10,26 +10,21 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.utils.Base64Coder;
|
||||
import com.google.android.gms.common.GoogleApiAvailability;
|
||||
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
|
||||
import com.google.android.gms.common.GooglePlayServicesRepairableException;
|
||||
import com.google.android.gms.security.ProviderInstaller;
|
||||
import io.anuke.kryonet.KryoClient;
|
||||
import io.anuke.kryonet.KryoServer;
|
||||
import io.anuke.arc.Core;
|
||||
import io.anuke.arc.backends.android.surfaceview.AndroidApplication;
|
||||
import io.anuke.arc.backends.android.surfaceview.AndroidApplicationConfiguration;
|
||||
import io.anuke.arc.files.FileHandle;
|
||||
import io.anuke.arc.function.Consumer;
|
||||
import io.anuke.arc.scene.ui.layout.Unit;
|
||||
import io.anuke.arc.util.Strings;
|
||||
import io.anuke.arc.util.serialization.Base64Coder;
|
||||
import io.anuke.net.KryoClient;
|
||||
import io.anuke.net.KryoServer;
|
||||
import io.anuke.mindustry.core.Platform;
|
||||
import io.anuke.mindustry.game.Saves.SaveSlot;
|
||||
import io.anuke.mindustry.io.SaveIO;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.ui.dialogs.FileChooser;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@@ -39,7 +34,7 @@ import java.util.ArrayList;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
public class AndroidLauncher extends AndroidApplication{
|
||||
public static final int PERMISSION_REQUEST_CODE = 1;
|
||||
boolean doubleScaleTablets = true;
|
||||
FileChooser chooser;
|
||||
@@ -49,11 +44,12 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
super.onCreate(savedInstanceState);
|
||||
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
|
||||
config.useImmersiveMode = true;
|
||||
config.depth = 0;
|
||||
Platform.instance = new Platform(){
|
||||
|
||||
@Override
|
||||
public void openDonations(){
|
||||
showDonations();
|
||||
public void hide(){
|
||||
moveTaskToBack(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -93,13 +89,13 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
if(checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
|
||||
perms.add(Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
}
|
||||
requestPermissions(perms.toArray(new String[perms.size()]), PERMISSION_REQUEST_CODE);
|
||||
requestPermissions(perms.toArray(new String[0]), PERMISSION_REQUEST_CODE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginForceLandscape(){
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -113,17 +109,10 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
}
|
||||
};
|
||||
|
||||
try{
|
||||
ProviderInstaller.installIfNeeded(this);
|
||||
}catch(GooglePlayServicesRepairableException e){
|
||||
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
|
||||
apiAvailability.getErrorDialog(this, e.getConnectionStatusCode(), 0).show();
|
||||
}catch(GooglePlayServicesNotAvailableException e){
|
||||
Log.e("SecurityException", "Google Play Services not available.");
|
||||
}
|
||||
if(doubleScaleTablets && isTablet(this.getContext())){
|
||||
Unit.dp.addition = 0.5f;
|
||||
}
|
||||
|
||||
config.hideStatusBar = true;
|
||||
Net.setClientProvider(new KryoClient());
|
||||
Net.setServerProvider(new KryoServer());
|
||||
@@ -132,7 +121,7 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
|
||||
if(requestCode == PERMISSION_REQUEST_CODE){
|
||||
for(int i : grantResults){
|
||||
if(i != PackageManager.PERMISSION_GRANTED) return;
|
||||
@@ -161,28 +150,30 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
InputStream inStream;
|
||||
if(myFile != null) inStream = new FileInputStream(myFile);
|
||||
else inStream = getContentResolver().openInputStream(uri);
|
||||
Gdx.app.postRunnable(() -> {
|
||||
Core.app.post(() -> {
|
||||
if(save){ //open save
|
||||
System.out.println("Opening save.");
|
||||
FileHandle file = Gdx.files.local("temp-save." + saveExtension);
|
||||
FileHandle file = Core.files.local("temp-save." + saveExtension);
|
||||
file.write(inStream, false);
|
||||
if(SaveIO.isSaveValid(file)){
|
||||
try{
|
||||
SaveSlot slot = control.saves.importSave(file);
|
||||
ui.load.runLoadSave(slot);
|
||||
}catch(IOException e){
|
||||
ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false)));
|
||||
ui.showError(Core.bundle.format("save.import.fail", Strings.parseException(e, false)));
|
||||
}
|
||||
}else{
|
||||
ui.showError("$text.save.import.invalid");
|
||||
ui.showError("$save.import.invalid");
|
||||
}
|
||||
}else if(map){ //open map
|
||||
Gdx.app.postRunnable(() -> {
|
||||
FileHandle file = Core.files.local("temp-map." + mapExtension);
|
||||
file.write(inStream, false);
|
||||
Core.app.post(() -> {
|
||||
System.out.println("Opening map.");
|
||||
if(!ui.editor.isShown()){
|
||||
ui.editor.show();
|
||||
}
|
||||
ui.editor.beginEditMap(inStream);
|
||||
ui.editor.beginEditMap(file);
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -192,22 +183,8 @@ public class AndroidLauncher extends PatchedAndroidApplication{
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isPackageInstalled(String packagename){
|
||||
try{
|
||||
getPackageManager().getPackageInfo(packagename, 0);
|
||||
return true;
|
||||
}catch(Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTablet(Context context){
|
||||
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
|
||||
}
|
||||
|
||||
private void showDonations(){
|
||||
Intent intent = new Intent(this, DonationsActivity.class);
|
||||
startActivity(intent);
|
||||
return manager != null && manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
package io.anuke.mindustry;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import org.sufficientlysecure.donations.DonationsFragment;
|
||||
|
||||
public class DonationsActivity extends FragmentActivity{
|
||||
/**
|
||||
* Google
|
||||
*/
|
||||
private static final String GOOGLE_PUBKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzG93KhpfBPKTo2jF0yxbWkkmMKwsPNM4SsMj1aDq7vv6n3R+mqJVfprOJxFfJh7JchXTflLIgiaKXFAiU70gJbMTniEWnEaFSxAeF09a7U0RjOwN+7rFwjCG91c2CpYxPanBTQP4zasc1ODPVzq4q6/4ByjhenN71V4WmR08NFIAodcfFPrOkDPil7i8y7cgcd1Ky53U0TS+LLYJttAK3XdTK4s7VE3I5IKoeNa4uwCmIM59R67q2k3cXjLk/nP6MP+y++EzHN/PTiR1sVg4dMP8K31RPw/1QNLPQwJz6Wc872oWwb7xo5gkoXbDc5WPPydsi8F3SyKNaYwzN6CDFQIDAQAB";
|
||||
private static final String[] GOOGLE_CATALOG = new String[]{
|
||||
"mindustry.donation.1", "mindustry.donation.2", "mindustry.donation.5",
|
||||
"mindustry.donation.10", "mindustry.donation.15",
|
||||
"mindustry.donation.25", "mindustry.donation.50"};
|
||||
DonationsFragment donationsFragment;
|
||||
|
||||
/**
|
||||
* Called when the activity is first created.
|
||||
*/
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState){
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setTheme(R.style.GdxTheme);
|
||||
|
||||
setContentView(R.layout.donations_activity);
|
||||
|
||||
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
|
||||
if(BuildConfig.DONATIONS_GOOGLE){
|
||||
donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG,
|
||||
getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null,
|
||||
null, false, null, null, false, null);
|
||||
}
|
||||
|
||||
|
||||
ft.replace(R.id.donations_activity_container, donationsFragment, "donationsFragment");
|
||||
ft.commit();
|
||||
}
|
||||
|
||||
public void onStart(){
|
||||
super.onStart();
|
||||
Button b = findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button);
|
||||
b.setOnClickListener(view -> {
|
||||
donationsFragment.donateGoogleOnClick(donationsFragment.getView());
|
||||
b.setEnabled(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to
|
||||
* the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment.
|
||||
*/
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data){
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
Button b = findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button);
|
||||
b.setEnabled(true);
|
||||
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment");
|
||||
if(fragment != null){
|
||||
fragment.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
package io.anuke.mindustry;
|
||||
|
||||
import com.badlogic.gdx.backends.android.AndroidApplication;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
public class PatchedAndroidApplication extends AndroidApplication {
|
||||
private final ExecutorService exec = Executors.newSingleThreadExecutor();
|
||||
|
||||
@Override
|
||||
protected void onPause () {
|
||||
if(useImmersiveMode) {
|
||||
exec.submit(() -> {
|
||||
try {Thread.sleep(100);} catch (InterruptedException ignored) {}
|
||||
graphics.onDrawFrame(null);
|
||||
});
|
||||
}
|
||||
super.onPause();
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,18 @@ import java.lang.annotation.Target;
|
||||
|
||||
public class Annotations{
|
||||
|
||||
@Target({ElementType.METHOD, ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Nullable{
|
||||
|
||||
}
|
||||
|
||||
@Target({ElementType.METHOD, ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface NonNull{
|
||||
|
||||
}
|
||||
|
||||
/** Marks a class as serializable.*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@@ -14,6 +26,21 @@ public class Annotations{
|
||||
|
||||
}
|
||||
|
||||
/** Marks a class as a special value type struct. Class name must end in 'Struct'.*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Struct{
|
||||
|
||||
}
|
||||
|
||||
/**Marks a field of a struct. Optional.*/
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface StructField{
|
||||
/**Size of a struct field in bits. Not valid on booleans or floating point numbers.*/
|
||||
int value();
|
||||
}
|
||||
|
||||
public enum PacketPriority{
|
||||
/** Gets put in a queue and processed if not connected. */
|
||||
normal,
|
||||
|
||||
@@ -28,6 +28,8 @@ import java.util.stream.Collectors;
|
||||
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
||||
/** Maximum size of each event packet. */
|
||||
public static final int maxPacketSize = 4096;
|
||||
/** Warning on top of each autogenerated file.*/
|
||||
public static final String autogenWarning = "Autogenerated file. Do not modify!\n";
|
||||
/** Name of the base package to put all the generated classes. */
|
||||
private static final String packageName = "io.anuke.mindustry.gen";
|
||||
|
||||
@@ -107,8 +109,6 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
||||
ClassEntry clas = new ClassEntry(callLocation);
|
||||
classMap.put(callLocation, clas);
|
||||
classes.add(clas);
|
||||
|
||||
Utils.messager.printMessage(Kind.NOTE, "Generating class '" + clas.name + "'.");
|
||||
}
|
||||
|
||||
ClassEntry entry = classMap.get(callLocation);
|
||||
@@ -138,6 +138,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
|
||||
|
||||
//create class for storing unique method hash
|
||||
TypeSpec.Builder hashBuilder = TypeSpec.classBuilder("MethodHash").addModifiers(Modifier.PUBLIC);
|
||||
hashBuilder.addJavadoc(autogenWarning);
|
||||
hashBuilder.addField(FieldSpec.builder(int.class, "HASH", Modifier.STATIC, Modifier.PUBLIC, Modifier.FINAL)
|
||||
.initializer("$1L", Objects.hash(methods)).build());
|
||||
|
||||
|
||||
@@ -2,8 +2,6 @@ package io.anuke.annotations;
|
||||
|
||||
import com.squareup.javapoet.*;
|
||||
import io.anuke.annotations.IOFinder.ClassSerializer;
|
||||
import io.anuke.annotations.MethodEntry;
|
||||
import io.anuke.annotations.Utils;
|
||||
|
||||
import javax.lang.model.element.Modifier;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
@@ -28,7 +26,7 @@ public class RemoteReadGenerator{
|
||||
/**
|
||||
* Generates a class for reading remote invoke packets.
|
||||
*
|
||||
* @param entries List of methods to use/
|
||||
* @param entries List of methods to use.
|
||||
* @param className Simple target class name.
|
||||
* @param packageName Full target package name.
|
||||
* @param needsPlayer Whether this read method requires a reference to the player sender.
|
||||
@@ -37,6 +35,7 @@ public class RemoteReadGenerator{
|
||||
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException{
|
||||
|
||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||
|
||||
//create main method builder
|
||||
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("readPacket")
|
||||
@@ -51,7 +50,7 @@ public class RemoteReadGenerator{
|
||||
Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class);
|
||||
cons.setAccessible(true);
|
||||
|
||||
TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.Player");
|
||||
TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.type.Player");
|
||||
//add player parameter
|
||||
readMethod.addParameter(playerType, "player");
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ public class RemoteWriteGenerator{
|
||||
for(ClassEntry entry : entries){
|
||||
//create builder
|
||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(entry.name).addModifiers(Modifier.PUBLIC);
|
||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||
|
||||
//add temporary write buffer
|
||||
classBuilder.addField(FieldSpec.builder(ByteBuffer.class, "TEMP_BUFFER", Modifier.STATIC, Modifier.PRIVATE, Modifier.FINAL)
|
||||
@@ -79,7 +80,7 @@ public class RemoteWriteGenerator{
|
||||
return;
|
||||
}
|
||||
|
||||
if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.Player")){
|
||||
if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.type.Player")){
|
||||
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
|
||||
return;
|
||||
}
|
||||
@@ -108,7 +109,7 @@ public class RemoteWriteGenerator{
|
||||
for(VariableElement var : elem.getParameters()){
|
||||
//special case: calling local-only methods uses the local player
|
||||
if(index == 0 && methodEntry.where == Loc.client){
|
||||
results.append("io.anuke.mindustry.Vars.players[0]");
|
||||
results.append("io.anuke.mindustry.Vars.player");
|
||||
}else{
|
||||
results.append(var.getSimpleName());
|
||||
}
|
||||
@@ -129,7 +130,7 @@ public class RemoteWriteGenerator{
|
||||
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
|
||||
|
||||
//add statement to create packet from pool
|
||||
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.ucore.util.Pooling");
|
||||
method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.arc.util.pooling.Pools");
|
||||
//assign buffer
|
||||
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
|
||||
//assign priority
|
||||
|
||||
@@ -12,6 +12,7 @@ import javax.lang.model.util.ElementFilter;
|
||||
import java.io.DataInput;
|
||||
import java.io.DataOutput;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -45,31 +46,56 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
||||
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
|
||||
|
||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
||||
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||
|
||||
TypeName jsonType = ClassName.bestGuess("io.anuke.arc.util.serialization.Json");
|
||||
TypeName jsonValueType = ClassName.bestGuess("io.anuke.arc.util.serialization.JsonValue");
|
||||
TypeName ubJsonWriterType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonWriter");
|
||||
TypeName ubJsonReaderType = ClassName.bestGuess("io.anuke.arc.util.serialization.UBJsonReader");
|
||||
|
||||
classBuilder.addField(jsonType, "bjson", Modifier.STATIC, Modifier.PRIVATE);
|
||||
classBuilder.addField(ubJsonReaderType, "bjsonReader", Modifier.STATIC, Modifier.PRIVATE);
|
||||
classBuilder.addStaticBlock(CodeBlock.builder()
|
||||
.addStatement("bjson = new " + jsonType + "()")
|
||||
.addStatement("bjsonReader = new " + ubJsonReaderType + "()")
|
||||
.build());
|
||||
|
||||
for(TypeElement elem : elements){
|
||||
TypeName type = TypeName.get(elem.asType());
|
||||
String simpleTypeName = type.toString().substring(type.toString().lastIndexOf('.') + 1);
|
||||
|
||||
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
|
||||
.addSuperinterface(ParameterizedTypeName.get(
|
||||
ClassName.bestGuess("io.anuke.ucore.io.TypeSerializer"), type));
|
||||
ClassName.bestGuess("io.anuke.arc.Settings.TypeSerializer"), type));
|
||||
|
||||
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
|
||||
.returns(void.class)
|
||||
.addParameter(DataOutput.class, "stream")
|
||||
.addParameter(type, "object")
|
||||
.addAnnotation(Override.class)
|
||||
.addException(IOException.class)
|
||||
.addModifiers(Modifier.PUBLIC);
|
||||
|
||||
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("read")
|
||||
.returns(type)
|
||||
.addParameter(DataInput.class, "stream")
|
||||
.addAnnotation(Override.class)
|
||||
.addException(IOException.class)
|
||||
.addModifiers(Modifier.PUBLIC);
|
||||
|
||||
MethodSpec.Builder jsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "Json")
|
||||
.returns(void.class)
|
||||
.addParameter(jsonType, "json")
|
||||
.addParameter(type, "object")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||
|
||||
MethodSpec.Builder jsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "Json")
|
||||
.returns(type)
|
||||
.addParameter(jsonValueType, "value")
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||
|
||||
readMethod.addStatement("$L object = new $L()", type, type);
|
||||
jsonReadMethod.addStatement("$L object = new $L()", type, type);
|
||||
|
||||
List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem));
|
||||
for(VariableElement field : fields){
|
||||
@@ -82,18 +108,57 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
||||
if(field.asType().getKind().isPrimitive()){
|
||||
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
|
||||
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
|
||||
|
||||
jsonWriteMethod.addStatement("json.writeValue(\"" + name + "\", object." + name +")");
|
||||
jsonReadMethod.addStatement("if(value.has(\"" + name + "\")) object." + name + "= value.get" + capName + "(\"" + name + "\")");
|
||||
}else{
|
||||
writeMethod.addStatement("io.anuke.ucore.core.Settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
|
||||
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.ucore.core.Settings.getSerializer(" + typeName+ ".class).read(stream)");
|
||||
writeMethod.addStatement("io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
|
||||
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.arc.Core.settings.getSerializer(" + typeName+ ".class).read(stream)");
|
||||
}
|
||||
}
|
||||
|
||||
readMethod.addStatement("return object");
|
||||
jsonReadMethod.addStatement("return object");
|
||||
|
||||
serializer.addMethod(writeMethod.build());
|
||||
serializer.addMethod(readMethod.build());
|
||||
|
||||
method.addStatement("io.anuke.ucore.core.Settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
||||
method.addStatement("io.anuke.arc.Core.settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
|
||||
|
||||
name(writeMethod, "write" + simpleTypeName);
|
||||
name(readMethod, "read" + simpleTypeName);
|
||||
|
||||
writeMethod.addModifiers(Modifier.STATIC);
|
||||
readMethod.addModifiers(Modifier.STATIC);
|
||||
|
||||
classBuilder.addMethod(writeMethod.build());
|
||||
classBuilder.addMethod(readMethod.build());
|
||||
|
||||
classBuilder.addMethod(jsonWriteMethod.build());
|
||||
classBuilder.addMethod(jsonReadMethod.build());
|
||||
|
||||
MethodSpec.Builder binaryJsonWriteMethod = MethodSpec.methodBuilder("write" + simpleTypeName + "StreamJson")
|
||||
.returns(void.class)
|
||||
.addParameter(DataOutput.class, "stream")
|
||||
.addParameter(type, "object")
|
||||
.addException(IOException.class)
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||
.addStatement("java.io.StringWriter output = new java.io.StringWriter()")
|
||||
.addStatement("bjson.setWriter(output)")
|
||||
.addStatement("bjson.writeObjectStart(" + type + ".class, " + type + ".class)")
|
||||
.addStatement("write" + simpleTypeName + "Json(bjson, object)")
|
||||
.addStatement("bjson.writeObjectEnd()")
|
||||
.addStatement("stream.writeUTF(output.toString())");
|
||||
|
||||
MethodSpec.Builder binaryJsonReadMethod = MethodSpec.methodBuilder("read" + simpleTypeName + "StreamJson")
|
||||
.returns(type)
|
||||
.addParameter(DataInput.class, "stream")
|
||||
.addException(IOException.class)
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
|
||||
.addStatement("return read" + simpleTypeName + "Json(bjson.fromJson(null, stream.readUTF()))");
|
||||
|
||||
classBuilder.addMethod(binaryJsonWriteMethod.build());
|
||||
classBuilder.addMethod(binaryJsonReadMethod.build());
|
||||
}
|
||||
|
||||
classBuilder.addMethod(method.build());
|
||||
@@ -107,4 +172,14 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void name(MethodSpec.Builder builder, String name){
|
||||
try{
|
||||
Field field = builder.getClass().getDeclaredField("name");
|
||||
field.setAccessible(true);
|
||||
field.set(builder, name);
|
||||
}catch(Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,229 @@
|
||||
package io.anuke.annotations;
|
||||
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
import com.squareup.javapoet.MethodSpec;
|
||||
import com.squareup.javapoet.TypeName;
|
||||
import com.squareup.javapoet.TypeSpec;
|
||||
import io.anuke.annotations.Annotations.Struct;
|
||||
import io.anuke.annotations.Annotations.StructField;
|
||||
|
||||
import javax.annotation.processing.*;
|
||||
import javax.lang.model.SourceVersion;
|
||||
import javax.lang.model.element.Modifier;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.lang.model.element.VariableElement;
|
||||
import javax.lang.model.type.TypeKind;
|
||||
import javax.lang.model.util.ElementFilter;
|
||||
import javax.tools.Diagnostic.Kind;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**Generates ""value types"" classes that are packed into integer primitives of the most aproppriate size.
|
||||
* It would be nice if Java didn't make crazy hacks like this necessary.*/
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||
@SupportedAnnotationTypes({
|
||||
"io.anuke.annotations.Annotations.Struct"
|
||||
})
|
||||
public class StructAnnotationProcessor extends AbstractProcessor{
|
||||
/** Name of the base package to put all the generated classes. */
|
||||
private static final String packageName = "io.anuke.mindustry.gen";
|
||||
private int round;
|
||||
|
||||
@Override
|
||||
public synchronized void init(ProcessingEnvironment processingEnv){
|
||||
super.init(processingEnv);
|
||||
//put all relevant utils into utils class
|
||||
Utils.typeUtils = processingEnv.getTypeUtils();
|
||||
Utils.elementUtils = processingEnv.getElementUtils();
|
||||
Utils.filer = processingEnv.getFiler();
|
||||
Utils.messager = processingEnv.getMessager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
||||
if(round++ != 0) return false; //only process 1 round
|
||||
|
||||
try{
|
||||
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Struct.class));
|
||||
|
||||
for(TypeElement elem : elements){
|
||||
|
||||
if(!elem.getSimpleName().toString().endsWith("Struct")){
|
||||
Utils.messager.printMessage(Kind.ERROR, "All classes annotated with @Struct must have their class names end in 'Struct'.", elem);
|
||||
continue;
|
||||
}
|
||||
|
||||
String structName = elem.getSimpleName().toString().substring(0, elem.getSimpleName().toString().length() - "Struct".length());
|
||||
String structParam = structName.toLowerCase();
|
||||
|
||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(structName)
|
||||
.addModifiers(Modifier.FINAL, Modifier.PUBLIC);
|
||||
|
||||
try{
|
||||
List<VariableElement> variables = ElementFilter.fieldsIn(elem.getEnclosedElements());
|
||||
int structSize = variables.stream().mapToInt(StructAnnotationProcessor::varSize).sum();
|
||||
int structTotalSize = (structSize <= 8 ? 8 : structSize <= 16 ? 16 : structSize <= 32 ? 32 : 64);
|
||||
|
||||
if(variables.size() == 0){
|
||||
Utils.messager.printMessage(Kind.ERROR, "making a struct with no fields is utterly pointles.", elem);
|
||||
continue;
|
||||
}
|
||||
|
||||
//obtain type which will be stored
|
||||
Class<?> structType = typeForSize(structSize);
|
||||
|
||||
//[constructor] get(fields...) : structType
|
||||
MethodSpec.Builder constructor = MethodSpec.methodBuilder("get")
|
||||
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
|
||||
.returns(structType);
|
||||
|
||||
StringBuilder cons = new StringBuilder();
|
||||
StringBuilder doc = new StringBuilder();
|
||||
doc.append("Bits used: ").append(structSize).append(" / ").append(structTotalSize).append("\n");
|
||||
|
||||
int offset = 0;
|
||||
for(VariableElement var : variables){
|
||||
int size = varSize(var);
|
||||
TypeName varType = TypeName.get(var.asType());
|
||||
String varName = var.getSimpleName().toString();
|
||||
|
||||
//add val param to constructor
|
||||
constructor.addParameter(varType, varName);
|
||||
|
||||
//[get] field(structType) : fieldType
|
||||
MethodSpec.Builder getter = MethodSpec.methodBuilder(var.getSimpleName().toString())
|
||||
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
|
||||
.returns(varType)
|
||||
.addParameter(structType, structParam);
|
||||
//[set] field(structType, fieldType) : structType
|
||||
MethodSpec.Builder setter = MethodSpec.methodBuilder(var.getSimpleName().toString())
|
||||
.addModifiers(Modifier.STATIC, Modifier.PUBLIC)
|
||||
.returns(structType)
|
||||
.addParameter(structType, structParam).addParameter(varType, "value");
|
||||
|
||||
//[getter]
|
||||
if(varType == TypeName.BOOLEAN){
|
||||
//bools: single bit, is simplified
|
||||
getter.addStatement("return ($L & (1L << $L)) != 0", structParam, offset);
|
||||
}else if(varType == TypeName.FLOAT){
|
||||
//floats: need conversion
|
||||
getter.addStatement("return Float.intBitsToFloat((int)(($L >>> $L) & $L))", structParam, offset, bitString(size, structTotalSize));
|
||||
}else{
|
||||
//bytes, shorts, chars, ints
|
||||
getter.addStatement("return ($T)(($L >>> $L) & $L)", varType, structParam, offset, bitString(size, structTotalSize));
|
||||
}
|
||||
|
||||
//[setter] + [constructor building]
|
||||
if(varType == TypeName.BOOLEAN){
|
||||
cons.append(" | (").append(varName).append(" ? ").append("1L << ").append(offset).append("L : 0)");
|
||||
|
||||
//bools: single bit, needs special case to clear things
|
||||
setter.beginControlFlow("if(value)");
|
||||
setter.addStatement("return ($T)(($L & ~(1L << $LL)))", structType, structParam, offset);
|
||||
setter.nextControlFlow("else");
|
||||
setter.addStatement("return ($T)(($L & ~(1L << $LL)) | (1L << $LL))", structType, structParam, offset, offset);
|
||||
setter.endControlFlow();
|
||||
}else if(varType == TypeName.FLOAT){
|
||||
cons.append(" | (").append("(").append(structType).append(")").append("Float.floatToIntBits(").append(varName).append(") << ").append(offset).append("L)");
|
||||
|
||||
//floats: need conversion
|
||||
setter.addStatement("return ($T)(($L & $L) | (($T)Float.floatToIntBits(value) << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset);
|
||||
}else{
|
||||
cons.append(" | (((").append(structType).append(")").append(varName).append(" << ").append(offset).append("L)").append(" & ").append(bitString(offset, size, structTotalSize)).append(")");
|
||||
|
||||
//bytes, shorts, chars, ints
|
||||
setter.addStatement("return ($T)(($L & $L) | (($T)value << $LL))", structType, structParam, bitString(offset, size, structTotalSize), structType, offset);
|
||||
}
|
||||
|
||||
doc.append("<br> ").append(varName).append(" [").append(offset).append("..").append(size + offset).append("]\n");
|
||||
|
||||
//add finished methods
|
||||
classBuilder.addMethod(getter.build());
|
||||
classBuilder.addMethod(setter.build());
|
||||
|
||||
offset += size;
|
||||
}
|
||||
|
||||
classBuilder.addJavadoc(doc.toString());
|
||||
|
||||
//add constructor final statement + add to class and build
|
||||
constructor.addStatement("return ($T)($L)", structType, cons.toString().substring(3));
|
||||
classBuilder.addMethod(constructor.build());
|
||||
|
||||
JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer);
|
||||
}catch(IllegalArgumentException e){
|
||||
e.printStackTrace();
|
||||
Utils.messager.printMessage(Kind.ERROR, e.getMessage(), elem);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
static String bitString(int offset, int size, int totalSize){
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for(int i = 0; i < offset; i++) builder.append('0');
|
||||
for(int i = 0; i < size; i++) builder.append('1');
|
||||
for(int i = 0; i < totalSize - size - offset; i++) builder.append('0');
|
||||
return "0b" + builder.reverse().toString() + "L";
|
||||
}
|
||||
|
||||
static String bitString(int size, int totalSize){
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for(int i = 0; i < size; i++) builder.append('1');
|
||||
for(int i = 0; i < totalSize - size; i++) builder.append('0');
|
||||
return "0b" + builder.reverse().toString() + "L";
|
||||
}
|
||||
|
||||
static int varSize(VariableElement var) throws IllegalArgumentException{
|
||||
if(!var.asType().getKind().isPrimitive()){
|
||||
throw new IllegalArgumentException("All struct fields must be primitives: " + var);
|
||||
}
|
||||
|
||||
StructField an = var.getAnnotation(StructField.class);
|
||||
if(var.asType().getKind() == TypeKind.BOOLEAN && an != null && an.value() != 1){
|
||||
throw new IllegalArgumentException("Booleans can only be one bit long... why would you do this?");
|
||||
}
|
||||
|
||||
if(var.asType().getKind() == TypeKind.FLOAT && an != null && an.value() != 32){
|
||||
throw new IllegalArgumentException("Float size can't be changed. Very sad.");
|
||||
}
|
||||
|
||||
return an == null ? typeSize(var.asType().getKind()) : an.value();
|
||||
}
|
||||
|
||||
static Class<?> typeForSize(int size) throws IllegalArgumentException{
|
||||
if(size <= 8){
|
||||
return byte.class;
|
||||
}else if(size <= 16){
|
||||
return short.class;
|
||||
}else if(size <= 32){
|
||||
return int.class;
|
||||
}else if(size <= 64){
|
||||
return long.class;
|
||||
}
|
||||
throw new IllegalArgumentException("Too many fields, must fit in 64 bits. Curent size: " + size);
|
||||
}
|
||||
|
||||
/**returns a type's element size in bits.*/
|
||||
static int typeSize(TypeKind kind) throws IllegalArgumentException{
|
||||
switch(kind){
|
||||
case BOOLEAN:
|
||||
return 1;
|
||||
case BYTE:
|
||||
return 8;
|
||||
case SHORT:
|
||||
return 16;
|
||||
case FLOAT:
|
||||
case CHAR:
|
||||
case INT:
|
||||
return 32;
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid type kind: " + kind + ". Note that doubles and longs are not supported.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,3 @@
|
||||
io.anuke.annotations.RemoteMethodAnnotationProcessor
|
||||
io.anuke.annotations.SerializeAnnotationProcessor
|
||||
io.anuke.annotations.StructAnnotationProcessor
|
||||
|
||||
203
build.gradle
@@ -1,31 +1,63 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
buildscript{
|
||||
repositories{
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
google()
|
||||
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0'
|
||||
classpath "com.badlogicgames.gdx:gdx-tools:1.9.8"
|
||||
|
||||
dependencies{
|
||||
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.6'
|
||||
classpath "com.badlogicgames.gdx:gdx-tools:1.9.9"
|
||||
classpath "com.badlogicgames.packr:packr:2.1-SNAPSHOT"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
apply plugin: "eclipse"
|
||||
allprojects{
|
||||
apply plugin: "idea"
|
||||
|
||||
version = 'release'
|
||||
|
||||
ext {
|
||||
ext{
|
||||
versionNumber = '4'
|
||||
versionModifier = 'alpha'
|
||||
versionType = 'official'
|
||||
versionModifier = 'beta'
|
||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||
appName = 'Mindustry'
|
||||
gdxVersion = '1.9.9'
|
||||
roboVMVersion = '2.3.0'
|
||||
uCoreVersion = '09e13f973a0769d971316d1d4f4a1eef3570926f'
|
||||
roboVMVersion = '2.3.6'
|
||||
arcHash = null
|
||||
|
||||
debugged = {
|
||||
return new File(projectDir.parent, '../debug').exists() && !project.hasProperty("release")
|
||||
}
|
||||
|
||||
localArc = {
|
||||
return (!project.hasProperty("release")) && new File(projectDir.parent, '../Arc').exists()
|
||||
}
|
||||
|
||||
getArcHash = {
|
||||
//get latest commit hash from gtihub since JITPack's '-snapshot' version doesn't work correctly
|
||||
if(arcHash == null){
|
||||
try{
|
||||
arcHash = 'git ls-remote https://github.com/Anuken/Arc.git'.execute().text.split("\t")[0]
|
||||
}catch(e){
|
||||
e.printStackTrace()
|
||||
arcHash = "-SNAPSHOT"
|
||||
}
|
||||
}
|
||||
return arcHash
|
||||
}
|
||||
|
||||
arcModule = { String name ->
|
||||
if(localArc()){
|
||||
return project(":Arc:$name")
|
||||
}else{
|
||||
//skip to last submodule
|
||||
if(name.contains(':')) name = name.split(':').last()
|
||||
return "com.github.Anuken.Arc:$name:${getArcHash()}"
|
||||
}
|
||||
}
|
||||
|
||||
getVersionString = {
|
||||
String buildVersion = getBuildVersion()
|
||||
@@ -44,7 +76,7 @@ allprojects {
|
||||
generateLocales = {
|
||||
def output = 'en\n'
|
||||
def bundles = new File(project(':core').projectDir, 'assets/bundles/')
|
||||
bundles.listFiles().each { other ->
|
||||
bundles.listFiles().each{ other ->
|
||||
if(other.name == "bundle.properties") return
|
||||
output += other.name.substring("bundle".length() + 1, other.name.lastIndexOf('.')) + "\n"
|
||||
}
|
||||
@@ -57,10 +89,9 @@ allprojects {
|
||||
|
||||
try{
|
||||
pfile.createNewFile()
|
||||
}catch (Exception ignored){}
|
||||
|
||||
if(pfile.exists()) {
|
||||
}catch(Exception ignored){}
|
||||
|
||||
if(pfile.exists()){
|
||||
props.load(new FileInputStream(pfile))
|
||||
|
||||
String buildid = getBuildVersion()
|
||||
@@ -75,51 +106,36 @@ allprojects {
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
repositories{
|
||||
mavenLocal()
|
||||
mavenCentral()
|
||||
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven { url "https://oss.sonatype.org/content/repositories/releases/" }
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||
maven{ url "https://oss.sonatype.org/content/repositories/releases/" }
|
||||
maven{ url 'https://jitpack.io' }
|
||||
}
|
||||
}
|
||||
|
||||
project(":desktop") {
|
||||
project(":desktop"){
|
||||
apply plugin: "java"
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
compile project(":kryonet")
|
||||
if(new File(projectDir.parent, '../debug').exists() && System.properties["release"] == null) compile project(":debug")
|
||||
compile project(":net")
|
||||
|
||||
if(debugged()) compile project(":debug")
|
||||
|
||||
compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||
compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
||||
|
||||
compile arcModule("backends:backend-lwjgl3")
|
||||
compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.0'
|
||||
}
|
||||
}
|
||||
|
||||
project(":ios") {
|
||||
project(":ios"){
|
||||
apply plugin: "java"
|
||||
apply plugin: "robovm"
|
||||
|
||||
task copyGen{
|
||||
copy{
|
||||
from ("core/build/classes/java/main/io/anuke/mindustry/gen/"){
|
||||
include "**/*.java"
|
||||
}
|
||||
|
||||
into "core/src/io/anuke/mindustry/gen"
|
||||
}
|
||||
|
||||
doFirst{
|
||||
delete{
|
||||
delete "core/src/io/anuke/mindustry/gen/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
task incrementConfig{
|
||||
def vfile = file('robovm.properties')
|
||||
|
||||
@@ -133,116 +149,115 @@ project(":ios") {
|
||||
props['app.mainclass'] = 'io.anuke.mindustry.IOSLauncher'
|
||||
props['app.executable'] = 'IOSLauncher'
|
||||
props['app.name'] = 'Mindustry'
|
||||
props['app.build'] = (!props.hasProperty("app.build") ? 40 : props['app.build'].toInteger() + 1)+""
|
||||
props['app.build'] = (!props.containsKey("app.build") ? 40 : props['app.build'].toInteger() + 1) + ""
|
||||
props.store(vfile.newWriter(), null)
|
||||
}
|
||||
|
||||
build.dependsOn(incrementConfig)
|
||||
build.dependsOn(copyGen)
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
implementation project(":kryonet")
|
||||
compile project(":net")
|
||||
compileOnly project(":annotations")
|
||||
|
||||
compile arcModule("backends:backend-robovm")
|
||||
|
||||
compile "com.mobidevelop.robovm:robovm-rt:$roboVMVersion"
|
||||
compile "com.mobidevelop.robovm:robovm-cocoatouch:$roboVMVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
|
||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
|
||||
compileOnly project(":annotations")
|
||||
}
|
||||
}
|
||||
|
||||
project(":core") {
|
||||
project(":core"){
|
||||
apply plugin: "java"
|
||||
|
||||
task finish {
|
||||
task finish{
|
||||
generateLocales()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
build.finalizedBy(finish)
|
||||
|
||||
def comp = System.properties["release"] == null || System.properties["release"] == "false"
|
||||
if(!comp) println("Note: Compiling release build.")
|
||||
|
||||
if(new File(projectDir.parent, '../uCore').exists() && comp){
|
||||
compile project(":uCore")
|
||||
}else{
|
||||
compile "com.github.anuken:ucore:$uCoreVersion"
|
||||
task cleanGen{
|
||||
doFirst{
|
||||
delete{
|
||||
delete "../core/src/io/anuke/mindustry/gen/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(new File(projectDir.parent, '../GDXGifRecorder').exists() && comp) {
|
||||
compile project(":GDXGifRecorder")
|
||||
task copyGen{
|
||||
doLast{
|
||||
copy{
|
||||
from("../core/build/classes/java/main/io/anuke/mindustry/gen/"){
|
||||
include "**/*.java"
|
||||
}
|
||||
|
||||
compile "com.badlogicgames.gdx:gdx:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
|
||||
into "../core/src/io/anuke/mindustry/gen"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies{
|
||||
compileJava.dependsOn(cleanGen)
|
||||
compileJava.finalizedBy(copyGen)
|
||||
|
||||
compile arcModule("arc-core")
|
||||
compile arcModule("extensions:freetype")
|
||||
//compile arcModule("extensions:postprocessing")
|
||||
if(localArc() && debugged()) compile arcModule("extensions:recorder")
|
||||
|
||||
compileOnly project(":annotations")
|
||||
annotationProcessor project(":annotations")
|
||||
}
|
||||
}
|
||||
|
||||
project(":server") {
|
||||
project(":server"){
|
||||
apply plugin: "java"
|
||||
|
||||
configurations {
|
||||
if(findProject(":android") != null){
|
||||
compile.exclude module: android
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
compile project(":kryonet")
|
||||
compile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
|
||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||
compile project(":net")
|
||||
compile arcModule("backends:backend-headless")
|
||||
}
|
||||
}
|
||||
|
||||
project(":tests"){
|
||||
apply plugin: "java"
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
testImplementation project(":core")
|
||||
testImplementation('org.junit.jupiter:junit-jupiter-api:5.1.0')
|
||||
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.1.0')
|
||||
testImplementation "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
|
||||
testImplementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-params:5.3.1"
|
||||
testImplementation "org.junit.jupiter:junit-jupiter-api:5.3.1"
|
||||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.3.1"
|
||||
compile arcModule("backends:backend-headless")
|
||||
}
|
||||
|
||||
test {
|
||||
test{
|
||||
useJUnitPlatform()
|
||||
workingDir = new File("../core/assets")
|
||||
}
|
||||
}
|
||||
|
||||
project(":tools") {
|
||||
project(":tools"){
|
||||
apply plugin: "java"
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
}
|
||||
}
|
||||
|
||||
project(":annotations") {
|
||||
project(":annotations"){
|
||||
apply plugin: "java"
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
compile 'com.squareup:javapoet:1.11.0'
|
||||
}
|
||||
}
|
||||
|
||||
project(":kryonet") {
|
||||
project(":net"){
|
||||
apply plugin: "java"
|
||||
|
||||
dependencies {
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
compile "org.lz4:lz4-java:1.4.1"
|
||||
compile 'com.github.Anuken:kryonet:53b10247b1'
|
||||
compile 'com.github.Anuken:kryonet:a64d2280880e80566ca1bdaffa55de43e51cad38'
|
||||
compile 'com.github.Anuken:WaifUPnP:05eb46bc577fd7674596946ba288c96c0cedd893'
|
||||
}
|
||||
}
|
||||
BIN
core/assets-raw/fonts/NanumBarunGothic.ttf
Normal file
BIN
core/assets-raw/fonts/OpenSansEmoji.ttf
Normal file
BIN
core/assets-raw/fonts/font_latin.ttf
Normal file
BIN
core/assets-raw/sprites/blocks/defense/mender-top.png
Normal file
|
After Width: | Height: | Size: 1018 B |
BIN
core/assets-raw/sprites/blocks/defense/mender.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
core/assets-raw/sprites/blocks/distribution/mass-driver-base.png
Normal file
|
After Width: | Height: | Size: 273 B |
|
Before Width: | Height: | Size: 405 B |
|
Before Width: | Height: | Size: 273 B After Width: | Height: | Size: 405 B |
|
Before Width: | Height: | Size: 216 B |
|
Before Width: | Height: | Size: 271 B |
|
Before Width: | Height: | Size: 119 B After Width: | Height: | Size: 253 B |
|
Before Width: | Height: | Size: 168 B After Width: | Height: | Size: 206 B |
|
Before Width: | Height: | Size: 155 B After Width: | Height: | Size: 172 B |
|
Before Width: | Height: | Size: 294 B After Width: | Height: | Size: 354 B |
BIN
core/assets-raw/sprites/blocks/drills/laser-drill-rim.png
Normal file
|
After Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 136 B After Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 143 B After Width: | Height: | Size: 155 B |
|
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 291 B |
|
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 170 B |
|
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 253 B |
|
Before Width: | Height: | Size: 206 B |
|
Before Width: | Height: | Size: 172 B |
|
Before Width: | Height: | Size: 362 B |
|
Before Width: | Height: | Size: 128 B |
|
Before Width: | Height: | Size: 133 B |
|
Before Width: | Height: | Size: 98 B |
|
Before Width: | Height: | Size: 101 B |
|
Before Width: | Height: | Size: 102 B |
|
Before Width: | Height: | Size: 116 B |
BIN
core/assets-raw/sprites/blocks/environment/char1.png
Normal file
|
After Width: | Height: | Size: 113 B |
BIN
core/assets-raw/sprites/blocks/environment/char2.png
Normal file
|
After Width: | Height: | Size: 109 B |
BIN
core/assets-raw/sprites/blocks/environment/char3.png
Normal file
|
After Width: | Height: | Size: 115 B |
BIN
core/assets-raw/sprites/blocks/environment/cliffs1.png
Normal file
|
After Width: | Height: | Size: 130 B |
BIN
core/assets-raw/sprites/blocks/environment/craters1.png
Normal file
|
After Width: | Height: | Size: 111 B |
BIN
core/assets-raw/sprites/blocks/environment/craters2.png
Normal file
|
After Width: | Height: | Size: 115 B |
BIN
core/assets-raw/sprites/blocks/environment/craters3.png
Normal file
|
After Width: | Height: | Size: 105 B |
BIN
core/assets-raw/sprites/blocks/environment/craters4.png
Normal file
|
After Width: | Height: | Size: 106 B |
BIN
core/assets-raw/sprites/blocks/environment/craters5.png
Normal file
|
After Width: | Height: | Size: 93 B |
BIN
core/assets-raw/sprites/blocks/environment/craters6.png
Normal file
|
After Width: | Height: | Size: 98 B |
BIN
core/assets-raw/sprites/blocks/environment/darksand1.png
Normal file
|
After Width: | Height: | Size: 94 B |
BIN
core/assets-raw/sprites/blocks/environment/darksand2.png
Normal file
|
After Width: | Height: | Size: 105 B |
BIN
core/assets-raw/sprites/blocks/environment/darksand3.png
Normal file
|
After Width: | Height: | Size: 94 B |
|
Before Width: | Height: | Size: 75 B After Width: | Height: | Size: 113 B |
|
Before Width: | Height: | Size: 103 B |
|
Before Width: | Height: | Size: 94 B |
|
Before Width: | Height: | Size: 101 B |
|
Before Width: | Height: | Size: 116 B |
BIN
core/assets-raw/sprites/blocks/environment/dunerocks-large.png
Normal file
|
After Width: | Height: | Size: 190 B |
BIN
core/assets-raw/sprites/blocks/environment/dunerocks1.png
Normal file
|
After Width: | Height: | Size: 121 B |
BIN
core/assets-raw/sprites/blocks/environment/dunerocks2.png
Normal file
|
After Width: | Height: | Size: 118 B |