Compare commits

..

995 Commits
v37 ... v48

Author SHA1 Message Date
Anuken
ba62e0eefc Fixed playtime not resetting on save exit 2018-08-07 19:46:05 -04:00
Anuken
cb16c75e11 Minor bundle fixes / Web build fixed 2018-08-07 19:36:56 -04:00
Anuken
3efed0ace3 Added sector loc display 2018-08-07 19:04:58 -04:00
Anuken
879fb8194f Further nerfed AI 2018-08-07 19:01:23 -04:00
Anuken
049dd89470 Fixed drone spam 2018-08-07 18:49:43 -04:00
Anuken
1f59d4354a Fixed retreat command, more pathfinding 2018-08-07 18:26:16 -04:00
Anuken
8dea45d9d5 More pathfinding fixes 2018-08-07 18:19:02 -04:00
Anuken
21ba6e257c Added indicator when core is under attack 2018-08-07 17:01:17 -04:00
Anuken
18ebda01a4 Drill balancing / More starting resources 2018-08-07 16:13:37 -04:00
Anuken
4b61f273d5 Targeting fixes / command center fixes 2018-08-07 11:59:16 -04:00
Anuken
a1dbbbdafc Crash fixes / 2x2 drills 2018-08-07 11:40:25 -04:00
Anuken
dcb840f290 Many bugfixes / Dagger unit buffed / Build times increased 2018-08-07 11:17:32 -04:00
Anuken
e6c4c66199 All drill costs decreased / Fixed specific sector save errors 2018-08-06 23:32:43 -04:00
Anuken
b76cd558aa Added difficulty grace period scaling 2018-08-06 22:58:22 -04:00
Anuken
85b077b5c5 Additional recipe balancing 2018-08-06 22:03:25 -04:00
Anuken
c34d6e6606 Improved targeting / Balancing / Monsoon nerf 2018-08-06 19:17:42 -04:00
Anuken
a5fd0aebe6 Fixed armageddon / Removed idle command / Balancing 2018-08-06 19:04:07 -04:00
Anuken
aaec04d04a Balancing / Made pads spawn infinite units 2018-08-06 16:58:44 -04:00
Anuken
77f9d6cb1d Grace period increased / Even more starting resources / Pulverizer buff 2018-08-06 12:52:29 -04:00
Anuken
aaa82b34e4 Difficulty display / More starting resources / Recipe tweaks 2018-08-06 12:42:34 -04:00
Anuken
7a6b1129d9 Merge remote-tracking branch 'origin/master' 2018-08-06 12:23:12 -04:00
Anuken
1f8918c773 Added starter items based on difficulty 2018-08-06 12:22:55 -04:00
Anuken
e9fe724e59 Merge pull request #172 from Prosta4okua/patch-11
(Complete)Update bundle_ru.properties
2018-08-06 11:21:41 -04:00
Anuken
80001246ef Added sector wave difficulty / ita bundle updated 2018-08-06 11:19:44 -04:00
Anuken
50461bb7c8 Merge pull request #164 from Leone25/patch-2 2018-08-06 11:17:29 -04:00
Anuken
c7c7cfde74 Merge branch 'master' into patch-2 2018-08-06 11:17:20 -04:00
Anuken
dcc29c0c48 Fixed extremely suicidal enemies / Conveyor tile fixes 2018-08-06 10:54:56 -04:00
Anuken
635e299464 Tweaked spawn times / Liquid bridge fixes 2018-08-06 10:31:50 -04:00
Prosta4okua
382fdcbb40 Update bundle_ru.properties 2018-08-06 15:03:23 +03:00
Anuken
468e092422 Pad ammo autofill / Per-mission waves / Better core resource selection 2018-08-05 23:19:11 -04:00
Anuken
6904d4693f Merge remote-tracking branch 'origin/master' 2018-08-05 19:19:55 -04:00
Anuken
3ef7ec3be5 Bundles updated 2018-08-05 19:19:50 -04:00
Anuken
70257cbbfa Merge pull request #170 from Prosta4okua/patch-10
[Complete] Update bundle_ru.properties
2018-08-05 19:18:25 -04:00
Anuken
6ef31d0ec1 Added spawner grace period 2018-08-05 19:17:46 -04:00
Prosta4okua
d3077bec58 Update bundle_ru.properties 2018-08-06 00:12:50 +03:00
Prosta4okua
a1095353fc Update bundle_ru.properties 2018-08-06 00:11:19 +03:00
Anuken
66fab1b3df Added thermal generator / Enemy bases with spawning 2018-08-05 17:00:26 -04:00
Prosta4okua
569d6d4272 Update bundle_ru.properties 2018-08-05 19:09:01 +03:00
Anuken
07c19ce085 Added thermal pump / Better conveyor autotile 2018-08-05 10:14:18 -04:00
Anuken
d86dd4f80b Fixed terrible spawn generation 2018-08-04 23:19:10 -04:00
Anuken
f0f89f0894 New non-clipped 8x8 turret sprites 2018-08-04 20:19:04 -04:00
Anuken
47af2e83f7 Improved structure generation 2018-08-04 16:58:31 -04:00
Anuken
8ec87872c8 Added outpost schematic system 2018-08-04 14:51:33 -04:00
Anuken
f30ea80b42 Made units self-destruct after spawner removal 2018-08-03 20:22:33 -04:00
Anuken
1dd6e66167 Added basic enemy outposts 2018-08-03 16:39:12 -04:00
Anuken
4e681b2dd1 Merge remote-tracking branch 'origin/master' 2018-08-03 12:13:39 -04:00
Anuken
58be00b3ce Exploit fixes 2018-08-03 12:13:17 -04:00
Anuken
5604ac6b6a Merge pull request #169 from Prosta4okua/patch-9
[COMPLETE]Update bundle_ru.properties
2018-08-03 10:53:52 -04:00
Anuken
effdaefdf3 Added built-in sandbox map 2018-08-02 13:58:02 -04:00
Anuken
5775fad030 Fixed core generation 2018-08-02 12:00:29 -04:00
Prosta4okua
eabc6d79c3 Update bundle_ru.properties 2018-08-02 12:44:35 +03:00
Prosta4okua
5f4ca6e383 Update bundle_ru.properties 2018-08-02 11:57:11 +03:00
Anuken
c05020e28e Fixed no-wave FPS display / Fixed unit pad inventories 2018-08-01 22:14:43 -04:00
Anuken
5206079e23 Implemented sandbox mode 2018-08-01 20:13:57 -04:00
Anuken
9b01140882 Fixed merge conflicts 2018-08-01 18:44:53 -04:00
Anuken
4dae27da98 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/assets/bundles/bundle_ru.properties
2018-08-01 18:44:25 -04:00
Anuken
f0cab65a6d Bundles updated 2018-08-01 18:38:48 -04:00
Anuken
699a47351b Merge pull request #168 from Prosta4okua/patch-8
[COMPLETE]Update bundle_ru.properties
2018-08-01 18:37:51 -04:00
Anuken
af004da699 Added mission completion dialog / Bundle fixes 2018-08-01 18:31:44 -04:00
Prosta4okua
b5ad885237 Update bundle_ru.properties 2018-08-01 23:45:08 +03:00
Prosta4okua
07bd0fec70 Update bundle_ru.properties 2018-08-01 23:44:25 +03:00
Prosta4okua
318e51d736 Update bundle_ru.properties 2018-08-01 23:43:18 +03:00
Anuken
ae90db50fe Added monsoon pad / Renamed factories to pads 2018-08-01 16:18:13 -04:00
Prosta4okua
64772c195e Update bundle_ru.properties 2018-08-01 21:17:23 +03:00
Prosta4okua
05ead63bdc Update bundle_ru.properties 2018-08-01 21:16:55 +03:00
Prosta4okua
6f5c64420d Update bundle_ru.properties 2018-08-01 20:59:45 +03:00
Prosta4okua
d9d9a00a24 Update bundle_ru.properties 2018-08-01 20:53:01 +03:00
Anuken
c1de67032c Nerfed monsoon bomber 2018-08-01 13:09:46 -04:00
Anuken
890d49fdd7 Merge remote-tracking branch 'origin/master' 2018-08-01 12:46:54 -04:00
Anuken
ba96ea5a0c Gamemode-specfic missions / Red-enabled location verification 2018-08-01 12:19:17 -04:00
Anuken
b481b784bb Merge pull request #166 from Predator127/patch-4
Fixed PT-BR
2018-07-31 21:56:58 -04:00
Anuken
53b6e68a85 Merge remote-tracking branch 'origin/master' 2018-07-31 21:55:22 -04:00
Anuken
e3d16418a0 Added island around core generation 2018-07-31 21:53:40 -04:00
Predator127
e41f560ecd Fixed PT-BR
Small fixes.
2018-07-31 17:49:14 -03:00
Anuken
d394d9a529 Merge pull request #165 from bdjnk/patch-1
fix english translation bundle link, fix spelling
2018-07-31 15:55:14 -04:00
Michael Plotke
a73015fa6e fix english translation bundle link, fix spelling 2018-07-31 14:37:54 -04:00
Anuken
87846864cc Merge remote-tracking branch 'origin/master' 2018-07-31 12:57:48 -04:00
Anuken
f3b976bdd1 All web version bugs fixed 2018-07-31 12:57:34 -04:00
Anuken
3a06e319b0 Merge pull request #163 from toushangyouxiang/master
Add bundle_zh_CN.properties
2018-07-31 07:02:25 -07:00
Anuken
fe31c404ff Merge pull request #162 from Predator127/patch-3
Huehue
2018-07-31 07:02:16 -07:00
Anuken
cc23378758 Updated gradle version 2018-07-31 09:48:33 -04:00
toushangyouxiang
5cac949ea8 fix translation 2018-07-31 21:02:25 +08:00
toushangyouxiang
a35e897194 translate fix 2018-07-31 21:01:29 +08:00
toushangyouxiang
8e92edeae1 add bundle_zh_CN.properties 2018-07-31 14:25:32 +08:00
toushangyouxiang
f289a0a9a8 fix name 2018-07-31 14:20:20 +08:00
toushangyouxiang
65a7e89a8c add bundle_zh_CN.properties 2018-07-31 14:17:01 +08:00
Anuken
43be3259c9 Removed all websocket code 2018-07-30 23:43:11 -04:00
Anuken
54a4c95a1b Minor UI fixes 2018-07-30 23:32:43 -04:00
Anuken
ddac5cbfbc Added unit type descriptions / Changed blast drill sprite 2018-07-30 21:20:00 -04:00
Anuken
22342d01a5 Added blast drill 2018-07-30 19:40:44 -04:00
Predator127
7cffaeb193 Huehue
small changes
2018-07-30 19:34:55 -03:00
Anuken
2534496543 Merge remote-tracking branch 'origin/master' 2018-07-30 17:00:24 -04:00
Anuken
fe9b11e771 Fully implemented mass driver 2018-07-30 17:00:18 -04:00
Anuken
032347840f Merge pull request #161 from Prosta4okua/patch-6
[COMPLETE] Upt8te bundle_ru.properties
2018-07-30 10:50:24 -07:00
Prosta4okua
2978bc6ac5 Update bundle_ru.properties 2018-07-30 19:24:06 +03:00
Prosta4okua
a3b0bb323f Update bundle_ru.properties 2018-07-30 19:23:06 +03:00
Prosta4okua
a6246d27d9 [INCOMPLETE]Upt8te bundle_ru.properties 2018-07-30 19:11:25 +03:00
Anuken
884b649b53 Merge pull request #160 from Predator127/patch-2
Update bundle_pt_BR.properties
2018-07-29 16:29:31 -07:00
Predator127
92a2f770b4 Update bundle_pt_BR.properties 2018-07-29 20:02:54 -03:00
Anuken
e88ce078df Fixed place distance not being respected 2018-07-29 19:00:29 -04:00
Anuken
77f0dfb9b1 Added system to query block outputs / Editor bugfixes 2018-07-29 17:41:27 -04:00
Anuken
78d1accf07 Added resource mission 2018-07-29 12:26:48 -04:00
Anuken
2ec68a7f07 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/assets/bundles/bundle_pt_BR.properties
2018-07-29 12:01:52 -04:00
Anuken
bbaa2a2c92 Updated bundles, removed unused text 2018-07-29 12:01:25 -04:00
Anuken
341bb67ef4 Merge pull request #159 from TriggeredBoi/patch-1
Update bundle_pt_BR.properties
2018-07-29 09:00:43 -07:00
Anuken
e377cb423b Merge remote-tracking branch 'origin/master' 2018-07-29 11:57:56 -04:00
Anuken
81e954c258 Implemented multi-mission sectors / Various bugfixes 2018-07-29 11:57:46 -04:00
Trigg
79d41ba7ac Update bundle_pt_BR.properties
fixed some stuff for now, I guess

(Don't want to be rude, but a good chunk of Predator's translation seems to have been made by fucken google translate )
2018-07-29 12:20:30 -03:00
Anuken
e740e4da87 Merge pull request #158 from Predator127/patch-1
Update bundle_pt_BR.properties
2018-07-29 06:51:58 -07:00
Predator127
b476c47194 Update bundle_pt_BR.properties 2018-07-28 23:33:56 -03:00
Anuken
b2d61a93d9 Added sector mission display and generation 2018-07-28 22:06:01 -04:00
Anuken
a045ec9d46 Fixed sector dialog UI scaling 2018-07-28 12:59:52 -04:00
Anuken
1daf8d2743 cleanup of cleanup 2018-07-28 12:52:02 -04:00
Anuken
295824f440 Minor cleanup 2018-07-28 12:50:11 -04:00
Anuken
22b59e0cf6 Merge pull request #157 from Ameb/libgdx-miui-fix
Introduce workaround for libgdx issue by @codegist
2018-07-28 08:49:52 -07:00
Ameb
ecabdb82e6 Introduce workaround for libgdx issue by @codegist
libgdx/libgdx#3861 libgdx/libgdx#4626 libgdx/libgdx#5312
2018-07-28 17:24:20 +02:00
Anuken
924b1c1a67 Fixed #156 2018-07-28 10:06:28 -04:00
Anuken
0454c4c25a Added skin aliases 2018-07-28 09:44:38 -04:00
Anuken
3a3b81941b Fixed server fog not being cleared by blocks 2018-07-27 20:18:04 -04:00
Anuken
0875c29da5 Implemented fog saving 2018-07-27 17:26:12 -04:00
Anuken
0d4cf9f6c4 Mac crash fix 2018-07-27 14:26:34 -04:00
Anuken
6a525dcf59 Mac crash fix 2018-07-27 14:25:06 -04:00
Anuken
01f6904f82 Tile field encapsulation 2018-07-27 10:52:14 -04:00
Anuken
23bd9a989b Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/assets/bundles/bundle_ru.properties
2018-07-27 09:15:24 -04:00
Anuken
acfa02475b Updated bundles 2018-07-27 09:10:39 -04:00
Anuken
9dba304011 Merge pull request #151 from Prosta4okua/patch-5
[COMPLETE]Update bundle_ru.properties
2018-07-27 09:09:37 -04:00
Prosta4okua
69b0020d15 Update bundle_ru.properties 2018-07-27 10:03:52 +03:00
Anuken
ce2896cb38 Command center name added / Regression fix 2018-07-26 23:04:37 -04:00
Anuken
68fd09c222 Improved unit commands 2018-07-26 19:20:47 -04:00
Anuken
c832a7b93f Full command center implementation 2018-07-26 17:51:25 -04:00
Anuken
49e19ab34d Removed 'in' class 2018-07-26 15:40:35 -04:00
Anuken
c1c82b451d Removed multi-class call generation 2018-07-26 15:24:48 -04:00
Anuken
ea6f88b7f6 Added basic command center logic 2018-07-26 15:17:23 -04:00
Anuken
2a6ee6d65b Bundle cleanup 2018-07-26 14:19:58 -04:00
Anuken
583342b430 Merge remote-tracking branch 'origin/master' 2018-07-26 13:34:25 -04:00
Anuken
7289c1080c Cleaned up custom game dialog / Disabled saving in sectors 2018-07-26 13:34:20 -04:00
Prosta4okua
9ed4f2b7a3 Update bundle_ru.properties 2018-07-26 19:40:51 +03:00
Prosta4okua
7396f91a5e Update bundle_ru.properties 2018-07-26 19:39:48 +03:00
Prosta4okua
ccc926d812 Update bundle_ru.properties 2018-07-26 19:36:26 +03:00
Prosta4okua
bd39255ead Update bundle_ru.properties 2018-07-26 19:31:21 +03:00
Prosta4okua
add7b1a7d9 Update bundle_ru.properties 2018-07-26 19:29:19 +03:00
Prosta4okua
8e471f9939 Update bundle_ru.properties 2018-07-26 19:24:08 +03:00
Prosta4okua
c61568ef98 Update bundle_ru.properties 2018-07-26 19:13:47 +03:00
Prosta4okua
3260e45e71 Update bundle_ru.properties 2018-07-26 19:11:48 +03:00
Prosta4okua
ea61b560b8 Update bundle_ru.properties 2018-07-26 19:03:58 +03:00
Prosta4okua
f8ad7d485b [INCOMPLETE]Update bundle_ru.properties 2018-07-26 18:58:24 +03:00
Anuken
229e624434 Merge pull request #150 from Prosta4okua/patch-4
Update bundle_ru.properties
2018-07-26 11:19:31 -04:00
Anuken
7a3fb9c759 Sector size increased / Cores moved / Fixed desktop recipes appearing 2018-07-26 10:47:46 -04:00
Prosta4okua
9a7ea0d28c Update bundle_ru.properties 2018-07-26 17:40:38 +03:00
Anuken
ee5e655668 Made splitter faster when unchained 2018-07-25 17:29:43 -04:00
Anuken
58be055f57 Added interceptor factory / Sector-specific ore gen 2018-07-24 21:57:09 -04:00
Leone25
38e1944503 Update bundle_ita.properties 2018-07-24 16:34:52 +02:00
Anuken
992b402e9c Merge remote-tracking branch 'origin/master' 2018-07-24 10:15:31 -04:00
Anuken
81bf28e4ed Fixed build error / Added per-type drone mine config 2018-07-24 10:15:25 -04:00
Anuken
f10734b083 Merge pull request #149 from Prosta4okua/patch-3
[Сomplete]Upd8te bundle_ru.properties
2018-07-24 10:00:35 -04:00
Anuken
bf8f565631 Fixed ore-cliff blending 2018-07-24 09:18:04 -04:00
Anuken
9bc1ff8fa2 Added unit type unlocking / Fixed viewing of enemy block stats 2018-07-24 09:08:35 -04:00
Prosta4okua
56239b6bbf Up8te bundle_ru.properties
It's all?!
2018-07-24 13:44:30 +03:00
Leone25
cedd2bfe57 Update bundle_ita.properties 2018-07-24 10:42:09 +02:00
Anuken
7e187a57d8 Volcanic terrain now more frequent 2018-07-23 22:58:56 -04:00
Anuken
572a30a2c5 Improved worldgen 2018-07-23 22:36:39 -04:00
Anuken
f3235ef7e8 Merge remote-tracking branch 'origin/master' 2018-07-23 20:44:42 -04:00
Anuken
7448eb32cc Added battle misson / Team block colors / Mission worldgen 2018-07-23 20:44:33 -04:00
Anuken
33e8cc4711 Merge pull request #148 from Prosta4okua/patch-2
[WIP] Update bundle_ru.properties
2018-07-23 17:53:27 -04:00
Prosta4okua
6cdb016c2c [WIP] Update bundle_ru.properties 2018-07-23 23:45:43 +03:00
Leone25
ababb7f5ab Update bundle_ita.properties 2018-07-23 21:24:23 +02:00
Leone25
9f2b66e09d Update bundle_ita.properties 2018-07-23 20:56:38 +02:00
Leone25
8de267f6a9 Update bundle_ita.properties 2018-07-23 19:20:58 +02:00
Anuken
ecf9a3cbc9 Added FPS cap setting / Bugfixes 2018-07-23 11:09:51 -04:00
Anuken
01300b97e2 Changed game over menu for sectors 2018-07-22 19:06:52 -04:00
Leone25
787163fb06 Flew changes at the bottom 2018-07-22 22:18:51 +02:00
Anuken
3701a3c3d9 Updated italian bundle 2018-07-22 15:55:36 -04:00
Anuken
68c51bb1bc More generation improvements 2018-07-22 13:29:01 -04:00
Anuken
df147c700c Merge remote-tracking branch 'origin/master' 2018-07-21 22:05:10 -04:00
Anuken
f5fc4d99dd Improved generation 2018-07-21 22:04:10 -04:00
Anuken
2a4aa9e550 Merge pull request #145 from theshadowknight/patch-2
PL update
2018-07-21 17:38:12 -04:00
theshadowknight
0a489f1117 . 2018-07-21 18:16:33 +02:00
theshadowknight
9cc7c061a3 FINAL 2018-07-21 18:10:38 +02:00
theshadowknight
a1e7274ec3 I think it is final
*think*
2018-07-21 17:59:44 +02:00
theshadowknight
51d516a39e . 2018-07-21 17:49:32 +02:00
theshadowknight
de7c38231c look 2018-07-21 17:46:48 +02:00
theshadowknight
c352ef9382 PL update
YAY! *Some easter eggs here*
2018-07-21 17:15:14 +02:00
Anuken
e36b5551e9 Added translation testing info, useful information 2018-07-21 11:13:21 -04:00
Anuken
57856c38d6 Merge remote-tracking branch 'origin/master' 2018-07-21 10:07:01 -04:00
Anuken
2a8e02339b Added disclaimer 2018-07-21 10:06:20 -04:00
Anuken
57f94ca6a2 Merge pull request #144 from theshadowknight/patch-1
PL translation update
2018-07-21 10:03:17 -04:00
theshadowknight
0eaca8b80a PL translation update
I finished at 458
2018-07-21 13:00:56 +02:00
Anuken
d2dbab57dc Updated translation guide 2018-07-21 00:47:31 -04:00
Anuken
cb448a3494 Ignored locales.json 2018-07-21 00:45:11 -04:00
Anuken
3fa6eae05b Removed locales.json 2018-07-21 00:44:49 -04:00
Anuken
52cc7d699a Added translation guide / Added locale list autogen 2018-07-21 00:44:13 -04:00
Anuken
ec4eac3a7d Moved locale declaration to json file 2018-07-20 23:48:42 -04:00
Anuken
fbcfb23676 fixBundles -> updateBundles 2018-07-20 20:35:53 -04:00
Anuken
dbb2371801 Re-added block shadows / Block optimization 2018-07-20 18:41:08 -04:00
Anuken
4d6dc9546f Fixed cliffs not blending properly 2018-07-20 16:52:42 -04:00
Anuken
06b9d328f4 Added auto-generated cliffs for floor blocks 2018-07-20 16:06:26 -04:00
Anuken
48c7daa4ab iOS fixes 2018-07-20 13:59:00 -04:00
Anuken
3c83b88127 Multi-threaded generation previews 2018-07-20 09:26:41 -04:00
Anuken
3a63fa5475 Generation minor improvements / Added debug map view 2018-07-19 20:46:30 -04:00
Anuken
882790d133 Sleeping system changes 2018-07-19 18:10:29 -04:00
Anuken
bcf72b894d Fixed conveyor entities not sleeping 2018-07-19 17:58:16 -04:00
Anuken
9f723c39ef Bundles updated / Fixed player name color changing join/leave text 2018-07-19 14:20:51 -04:00
Anuken
56fc40a64d Removed sound assets / Fixed text wrap / Proper screen clear 2018-07-19 11:06:10 -04:00
Anuken
091f591ffb Added sector-specific spawns 2018-07-19 09:58:19 -04:00
Anuken
4d88a8206a Fixed unnecessary disconnect messages / Fixed player ban crash 2018-07-19 09:30:58 -04:00
Anuken
363bf7c552 Removed sector camera clamp / Added map edge padding / Turret sprite fix 2018-07-18 22:43:35 -04:00
Anuken
7ff4e5879d Implemented multi-cell sectors 2018-07-18 13:23:54 -04:00
Anuken
0b7decbfdd Removed static block layer / Minor bugfixes 2018-07-18 10:40:31 -04:00
Anuken
be9ea33aa4 Improved floodfill / Fixed resource use bug / Fixed editor turret draw 2018-07-17 23:20:05 -04:00
Anuken
d4b2cad94e Merge remote-tracking branch 'origin/master' 2018-07-17 19:19:55 -04:00
Anuken
ac039ce7cd Fixed sector world gen / Added sector goal unlocks 2018-07-17 19:12:44 -04:00
Anuken
946e60937d iOS fixes 2018-07-17 14:15:43 -04:00
Anuken
6f6601d270 Improved sector dialog look / Made mobile versions show play select 2018-07-17 13:19:20 -04:00
Anuken
71016f0d7c Updated uCore / Added hidden sector saves 2018-07-17 12:47:11 -04:00
Anuken
c2c2551607 Implemented save time recording 2018-07-17 10:42:44 -04:00
Anuken
d7812ec030 New save slot system / Buffed smelter / Fixed flying shadow glitches 2018-07-17 09:18:19 -04:00
Anuken
f184b0700f Fixed conveyor/conduit crash / Improved conveyor movement 2018-07-16 21:44:15 -04:00
Anuken
07f0be8d8d Updated uCore / Sector deploying support 2018-07-16 20:53:35 -04:00
Anuken
dd45b43d7f Classes moved / Fixed autotile bugs / Added sector display 2018-07-16 18:42:29 -04:00
Anuken
9b505106e3 Fixed ugly oversized shadows in corner autotiles 2018-07-16 09:42:13 -04:00
Anuken
d552f37daf Added conveyor autotiling / Fixed autotile update bug 2018-07-15 22:33:14 -04:00
Anuken
6a7ff13859 Added basic sector classes / Changed play menu dialog 2018-07-15 17:19:33 -04:00
Anuken
9e3af13efc Added build version warning for servers 2018-07-15 14:51:03 -04:00
Anuken
92a968217c Fixed power being set to NaN / Set splitter sprite to router 2018-07-15 11:50:06 -04:00
Anuken
37b9df3202 Removed all UI builders / Updated uCore and functional interfaces 2018-07-14 22:06:03 -04:00
Anuken
7dc33111fc Changed default world size back 2018-07-14 20:04:27 -04:00
Anuken
ab2f260a52 Fixed some crashes 2018-07-14 17:16:13 -04:00
Anuken
1aa4b8cb88 Fixed crash report displaying location incorrectly 2018-07-14 17:00:33 -04:00
Anuken
dfed36748c Fixed saves not loading / Increased biomatter compressor output 2018-07-14 16:06:38 -04:00
Anuken
d35f736548 Updated traditional chinese bundle / Fixed korean bundle 2018-07-14 12:14:22 -04:00
Anuken
cfecdae970 Class package refactoring 2018-07-14 12:11:48 -04:00
Anuken
59ade6cf09 Vault optimizations / Removed unloader 2018-07-14 10:47:18 -04:00
Anuken
642842888a Removed Waffle.io links 2018-07-14 09:34:19 -04:00
Anuken
3ae51edf3a Merge branch '4.0' of https://github.com/Anuken/Mindustry
# Conflicts:
#	core/assets/bundles/bundle_ko.properties
#	core/src/io/anuke/mindustry/Vars.java
#	core/src/io/anuke/mindustry/core/UI.java
2018-07-14 09:32:55 -04:00
Anuken
d8ccb81015 Merge remote-tracking branch 'origin/4.0' into 4.0 2018-07-14 09:26:43 -04:00
Anuken
0db6020231 Increased bridge range / Bugfixes 2018-07-14 09:26:34 -04:00
Anuken
738c0a5c9c Merge pull request #143 from player20033/patch-1
#142 Solution
2018-07-13 22:12:51 -04:00
player20033
a2f7d3e241 #142 Solution 2018-07-14 10:02:13 +08:00
Anuken
9b86ded164 Merge pull request #141 from cloud9350/patch-4
Update bundle_ko.properties
2018-07-13 20:00:34 -04:00
Gureumi
6cbb645b10 Update bundle_ko.properties 2018-07-14 08:54:55 +09:00
Anuken
066a1d7591 Merge remote-tracking branch 'origin/4.0' into 4.0
# Conflicts:
#	core/src/io/anuke/mindustry/Vars.java
2018-07-13 19:54:20 -04:00
Anuken
5f82d575ee iOS fixes 2018-07-13 19:50:18 -04:00
Anuken
302ae0a83c Merge remote-tracking branch 'origin/4.0' into 4.0
# Conflicts:
#	core/assets/bundles/bundle_ko.properties
2018-07-13 13:48:52 -04:00
Anuken
82c4c791cc Added message for loading broken saves 2018-07-13 13:43:37 -04:00
Anuken
3c0310120d Merge pull request #140 from cloud9350/patch-4
Update bundle_ko.properties
2018-07-13 13:24:05 -04:00
Anuken
21c106e9d5 Updated splitter description 2018-07-13 12:53:40 -04:00
Anuken
2c8cd2f8dc Fixed autosave not triggering 2018-07-13 12:50:45 -04:00
Anuken
380d9908b4 Fixed chat stopping velocity / Fixed drone repair not being synced 2018-07-13 11:46:16 -04:00
Anuken
6abef7d645 Fixed item bridge crash 2018-07-13 11:09:33 -04:00
Anuken
98ac25ac29 Fixed distributor 2018-07-13 10:21:17 -04:00
Anuken
93bec04c92 Fixed overflow gate, splitter 2018-07-13 10:11:42 -04:00
Gureumi
136559cddd Update bundle_ko.properties 2018-07-13 22:34:41 +09:00
Gureumi
3f63a6ed70 Update bundle_ko.properties 2018-07-13 22:24:00 +09:00
Anuken
2fcb3c4420 Bugfixes 2018-07-12 21:13:08 -04:00
Anuken
baaeb229cf Formatting 2018-07-12 20:37:15 -04:00
Anuken
a3bda3a941 Changed crash report location 2018-07-12 19:00:02 -04:00
Anuken
3d536aa28d Fixed player names not displaying 2018-07-12 18:58:02 -04:00
Anuken
454267455b Fixed mobile consume frag / Added ability for ship to mine 2018-07-12 15:44:05 -04:00
Anuken
8e9adeb4b4 Fixed web version bugs 2018-07-12 14:06:50 -04:00
Anuken
1f18e7beed Improved glitchy interpolation / Updated uCore 2018-07-12 11:38:09 -04:00
Anuken
b5e8e54107 Added build tools to travis 2018-07-12 10:24:56 -04:00
Anuken
f41e426b69 Reactor balancing / Fixed generators / Fixed pump crash / Travis update 2018-07-12 10:20:38 -04:00
Anuken
6375862a71 Fixed deadlock / Crafter fixes / Autotile fixes / Low FPS ship fixes 2018-07-12 09:11:28 -04:00
Anuken
be2a745d78 Increased ore generation amount 2018-07-11 19:58:49 -04:00
Anuken
d89feb2c75 Bugfixes, minor optimizations 2018-07-11 19:57:27 -04:00
Anuken
b4a20c8fcb Fixed fog glitching around during screenshake 2018-07-11 12:30:07 -04:00
Anuken
73087a92f4 Fixed build error 2018-07-11 12:21:46 -04:00
Anuken
2b58bd5bd8 Optimizations 2018-07-11 12:19:21 -04:00
Anuken
bce0101278 Fixed some multiplayer crashes 2018-07-10 21:04:14 -04:00
Anuken
bba418c79d Added consumers for repair/resupply points 2018-07-10 18:57:50 -04:00
Anuken
cb58eb82fc Added requirement display / Text fixes / Better crash reports 2018-07-10 16:53:35 -04:00
Anuken
3aafffabc1 Added BlockConsumeFragment 2018-07-10 11:41:51 -04:00
Anuken
66b9cdf64c Conduit autotiling / Added Block.onProximityUpdate() 2018-07-10 10:14:10 -04:00
Anuken
d31fbf3b6f Added flyer shadows / Fixed block inventory rebuild spawn / Distributor 2018-07-09 20:18:50 -04:00
Anuken
dbee30a412 Updated uCore / Made splitter distribute properly 2018-07-09 18:14:55 -04:00
Anuken
f3cc881930 Status bar cleanup / Fixed power distribution / Fixed adjacency updates 2018-07-09 14:25:52 -04:00
Anuken
3d9c9e639d Automatic external bundle loading 2018-07-09 11:24:24 -04:00
Anuken
d6969d2c74 Removed unused bundle keys 2018-07-09 11:06:15 -04:00
Anuken
b7e28a73ba Bugfixes / Added tool to re-format bundles with missing text 2018-07-09 11:02:30 -04:00
Anuken
1e8206757d Various bugfixes / Fixed persistent inventory, block crashes 2018-07-08 23:59:02 -04:00
Anuken
a0e94577fc Fixed infinite red square, glitchy shadows 2018-07-08 17:04:32 -04:00
Anuken
a2a0c2f791 Fixed startup error 2018-07-08 16:50:52 -04:00
Anuken
63a0fde121 Offload optimizations / Compile errors fixed / Massive refactor 2018-07-08 16:38:29 -04:00
Anuken
c06152de07 Consumption system more or less complete 2018-07-08 00:04:41 -04:00
Anuken
0b3ccbda20 Merge pull request #136 from JaiunL/patch-1
Translated a few parts
2018-07-07 21:00:03 -04:00
Anuken
97b7eb0768 Bugfixes / Compile error fixes / Removed routers 2018-07-07 13:48:20 -04:00
Jaiun Lee
b712301804 Revised 2018-07-07 13:29:11 +09:00
Jaiun Lee
76ebe3ff41 Translated a few parts
Mostly focused on grammatical errors and inconsistency in styling. Still need multiple revisions on a full spectrum. Discord: Reaper#7917
2018-07-07 13:24:00 +09:00
Anuken
d988bb1821 Massive amount of bugfixes / Multi-liquid support / Broken build 2018-07-06 23:24:14 -04:00
Anuken
64f1fbe400 Fixed many various crashes 2018-07-06 12:04:33 -04:00
Anuken
c2c837329c Fixed block construction / Added build version to crash 2018-07-06 10:54:20 -04:00
Anuken
b6531efe08 Merge remote-tracking branch 'origin/4.0' into 4.0 2018-07-06 09:52:26 -04:00
Anuken
2c97a4aefe Fixed importing saves / File chooser bad size 2018-07-06 09:52:18 -04:00
Anuken
f0ffebd58c Delete vcs.xml 2018-07-05 18:56:48 -04:00
Anuken
05e407f064 Delete github_settings.xml 2018-07-05 18:56:33 -04:00
Anuken
6dd2eec1b6 Merge pull request #131 from Lorex/master
Add Traditional Chinese support
2018-07-05 18:56:12 -04:00
Anuken
df13436688 Merge pull request #135 from cloud9350/patch-1
Update language file for game beta version
2018-07-05 18:54:27 -04:00
Anuken
fa0d89b6df Fixed crash 2018-07-05 17:37:24 -04:00
Anuken
ab0f8defa4 Merge branch '4.0' of https://github.com/Anuken/Mindustry into 4.0 2018-07-05 17:11:27 -04:00
Anuken
6b3329845b Fixed onConstructFinish() not syncing rotation 2018-07-05 16:49:29 -04:00
Anuken
fc07c5efa6 Fixed carry entity chain reaction 2018-07-05 16:01:12 -04:00
Anuken
23188df276 Fixed slowdown when FPS got lower than TPS 2018-07-05 15:40:31 -04:00
Anuken
5e66dfcc36 Minor optimization 2018-07-05 15:23:20 -04:00
Anuken
bc36c57f9f Improved enemy drop tables 2018-07-05 14:09:46 -04:00
Anuken
5efa7d551e Fixed enemies dropping duplicate items 2018-07-05 14:05:11 -04:00
Anuken
8c6cda0d97 Fixed pathfinding using water / Fixed mech factories moving too fast 2018-07-05 13:38:42 -04:00
Anuken
4fa165bc6a Updated uCore 2018-07-05 13:23:31 -04:00
Anuken
da6695ceee Decreased flyer speed, damage, moved start wave / Wave time increase 2018-07-05 13:20:54 -04:00
Anuken
1043a5bb0d Fixed ghosts appearing in player list 2018-07-05 12:30:29 -04:00
Anuken
c7625278b5 Fixed autosave not triggering, offset player resource bars 2018-07-05 12:19:57 -04:00
Anuken
b9ef88951e Massive amount of bugfixes, too many to list in commit log 2018-07-05 12:05:53 -04:00
Gureumi
14fe35bba0 Update bundle_ko.properties 2018-07-05 22:21:12 +09:00
Anuken
4a32706c5a Misc bugfixes / Unified build/break block system 2018-07-04 23:52:21 -04:00
Anuken
cc92edfa58 Fixed item drop duplicates, invincible players 2018-07-04 15:22:59 -04:00
Anuken
071d0fbbf7 Fixed player names not displaying 2018-07-04 15:01:29 -04:00
Anuken
6ff44fddd0 Fixed plastanium compressor 2018-07-04 13:42:15 -04:00
Anuken
8760e99c43 Fixed dedicated server crash 2018-07-04 13:18:50 -04:00
Anuken
423f5f16bb Fixed extremely glitchy player pickup 2018-07-04 12:31:09 -04:00
Anuken
1c8c702afd Made flying units appear later in waves 2018-07-04 11:58:41 -04:00
Anuken
d2a739262d Added admin wave sending / Admin system fixes / Build fix 2018-07-04 11:57:04 -04:00
Anuken
76d0285e3f Added freebuild / Power system fix / Net packet pool fix / Crash fixes 2018-07-04 11:38:59 -04:00
Anuken
cb9d3414f2 Merge branch '4.0' of https://github.com/Anuken/Mindustry into 4.0 2018-07-03 20:07:15 -04:00
Anuken
12f444750c Fixed custom client inversion 2018-07-03 20:03:51 -04:00
Anuken
5fdf7e3a12 Updated annotations module 2018-07-03 19:58:24 -04:00
Anuken
60deb9205b uCore update / Kick packet priority / Custom client lock / Net fixes 2018-07-03 19:48:29 -04:00
Anuken
677526cb16 Fixed iOS NullPtr 2018-07-03 19:03:53 -04:00
Anuken
359a392cca Fixed various bugs and crashes 2018-07-03 15:53:06 -04:00
Anuken
4d600f973a Added max power output display to item power generator 2018-07-03 13:20:01 -04:00
Anuken
4a626bc920 Various net crashes fixed 2018-07-03 13:13:02 -04:00
Anuken
3597860074 Additional crashes/synchronizations fixed 2018-07-03 12:57:22 -04:00
Anuken
68d2c30c38 More bugfixes 2018-07-03 12:48:20 -04:00
Anuken
e210d9c08e Fixed server verifying mobile player positions 2018-07-03 12:29:14 -04:00
Anuken
c9b77e4e23 Crash fixes 2018-07-03 12:27:37 -04:00
Anuken
e56d865416 Updated uCore 2018-07-03 11:21:53 -04:00
Anuken
efc779a8d7 Added desktop place info text 2018-07-03 11:00:53 -04:00
Anuken
7e6807509b Fixed mobile breaking not taking into account multiblocks 2018-07-03 10:47:33 -04:00
Anuken
a683866397 Fixed conveyors/conduits not using items 2018-07-03 10:29:16 -04:00
Anuken
7a4f56d943 Additional bugfixes 2018-07-03 10:07:48 -04:00
Anuken
ec127519aa Many various bugfixes 2018-07-03 09:26:04 -04:00
Anuken
5ea3e2006d Fixed squished buttons in main menu 2018-07-02 23:07:14 -04:00
Anuken
bd914bf42a Removed player death sound 2018-07-02 21:47:52 -04:00
Anuken
e66c95fc76 Fixed ground units not targeting things properly 2018-07-02 21:47:26 -04:00
Anuken
9130302c93 Fixed pyratite mixer glitchy animation / Fixed block select flashing 2018-07-02 21:35:21 -04:00
Anuken
11b979e408 Crash fix 2018-07-02 19:29:11 -04:00
Anuken
44f13ef162 Added mobile build radius display 2018-07-02 18:11:23 -04:00
Anuken
17253adcdf Fixed FPS counter not hiding / Disabled minimap by default on mobile 2018-07-02 16:11:11 -04:00
Anuken
04dcc262ee Portrait alignment fixes 2018-07-02 16:01:58 -04:00
Anuken
e3bee43163 Portrait mode support / Mobile fixes 2018-07-02 15:49:01 -04:00
Anuken
fb2bb5a4bc Start of work on portrait mode / Made fragments abstract classes 2018-07-02 13:54:22 -04:00
Anuken
cf0a25fdfc Mobile placement guide / Bugfixes / Switched mobile test to arg 2018-07-02 13:06:52 -04:00
Anuken
e9436426b7 Gradle update / Block inventory improved / Crash fixes 2018-07-02 11:04:24 -04:00
Anuken
37ba95f8b3 Disabled mobile debug / Added no-core error message 2018-07-01 18:15:51 -04:00
Anuken
deadcd5339 Level selection improvements 2018-07-01 17:58:19 -04:00
Anuken
95d01f0ef5 Unlockable cleanup / Added javelin ship / Mobile fixes 2018-07-01 15:44:56 -04:00
Anuken
02b8e34242 Crash fixes / New ammo types / New turrets / Missiles added 2018-07-01 14:36:16 -04:00
Anuken
7177e0a576 New power node system / Volatile generators / Drone crash fix 2018-07-01 10:24:14 -04:00
Anuken
b2c99fd0fd Power transfer algo fix / Battery link fix / Fireball fix / 'and' 2018-06-30 23:59:38 -04:00
Anuken
cc5910f997 Added massive amount of partially-unfinished content to recipe menu 2018-06-30 20:59:05 -04:00
Anuken
cb6090c773 Fixed various crashes, synchronization bugs 2018-06-30 11:20:25 -04:00
Anuken
c0a649ffcb Added item names and descriptions, better unlock menu 2018-06-30 00:09:16 -04:00
Anuken
bebc1a22f3 Added content unlock menu 2018-06-29 19:47:47 -04:00
Anuken
b4151a256b Extensive netcode changes, bugfixes 2018-06-29 14:13:31 -04:00
Anuken
3898602f0e Improved error logging of remote reading/writing 2018-06-29 09:22:29 -04:00
Anuken
0216425209 Fixed more building desync 2018-06-29 09:15:07 -04:00
Anuken
499671a637 Fixed some snapshot bugs, net crashes 2018-06-28 21:04:01 -04:00
Anuken
ab82faf7ba Implemented scalable snapshot sizes 2018-06-28 20:49:12 -04:00
Anuken
fdf7173f14 Added vault to recipe list, removed 'next wave' button 2018-06-28 16:18:44 -04:00
Anuken
4b11511bd1 Minor world load time optimization 2018-06-28 15:48:21 -04:00
Anuken
53cbc0fb8b Further decreased save time and filesize 3x 2018-06-28 14:13:47 -04:00
Anuken
b209f3e50d Reduced save file size by 5x 2018-06-28 13:48:22 -04:00
Anuken
5ec495987e Un-broke editor block icons 2018-06-28 13:25:29 -04:00
Anuken
66c9fd8431 Added descriptions for some transportation blocks, fixed wrapping 2018-06-28 12:00:30 -04:00
Anuken
576af67587 Fixed crude turret icons 2018-06-28 11:50:50 -04:00
Anuken
cad44cf379 Added warning text on first startup, tutorial stub text, desc fixes 2018-06-28 10:11:25 -04:00
Anuken
ff07e99e39 Added more detailed drill tier lists 2018-06-27 21:53:52 -04:00
Anuken
18b137a1a6 New block stat system, names for all current block recipes 2018-06-27 21:29:57 -04:00
Anuken
2344fb910b Fixed server game-over crash 2018-06-27 14:58:14 -04:00
Anuken
085d309528 Added packet pooling synchronization 2018-06-27 14:55:37 -04:00
Anuken
c8069dfee7 Removed lag simulation 2018-06-27 14:52:31 -04:00
Anuken
9c90f59c25 Many various network fixes 2018-06-27 14:52:08 -04:00
Anuken
15cf8fe0be Fixed drone desync, client crash, dedicated server player warping 2018-06-27 14:23:15 -04:00
Anuken
4258f53bc8 Build crash fix 2018-06-27 14:06:55 -04:00
Anuken
3640f1ba77 Fixed player colors not being saved 2018-06-27 13:58:55 -04:00
Anuken
23bb409639 Cleanup 2018-06-27 13:55:38 -04:00
Anuken
6364b9e06b Implemented new spawnlist 2018-06-27 13:54:50 -04:00
Anuken
5cefecced8 Fixed fog not clearing, movement bug, items stuck in blocks 2018-06-27 11:57:37 -04:00
Anuken
8b17972b11 Fixed buggy ground unit rotations 2018-06-27 11:04:56 -04:00
Anuken
e799187aaf Added new wave spawning system 2018-06-27 10:56:39 -04:00
Anuken
c89123b18a Unit weapon rework, titan and bomber enemies added, various fixes 2018-06-26 22:48:18 -04:00
Anuken
03277c69af Various crash fixes 2018-06-26 16:19:05 -04:00
Anuken
20b3bb8f13 Mech palette change, delta mech implementation 2018-06-26 16:01:40 -04:00
Anuken
a6ca84308e Added phaseweaver to recipe list 2018-06-26 14:50:12 -04:00
Anuken
a71f3f55b0 Removed unnecessary language file entries 2018-06-26 14:21:03 -04:00
Anuken
24ac823f06 Added new recipes, fixed conveyor bug 2018-06-26 13:54:06 -04:00
Anuken
e407ba3ad3 Fully implemented dart ship factory 2018-06-26 12:44:40 -04:00
Anuken
7a049d64d8 Many various bugfixes, more aggressive memory optimization 2018-06-26 11:15:23 -04:00
Anuken
8ec9d95cd2 Fixed mass-block-breaking visual bug 2018-06-25 22:57:19 -04:00
Anuken
91501d39ee Balancing, fixed drone AI, fixed placement, fixed stacking effects 2018-06-25 22:47:18 -04:00
Anuken
5d70b4b95b Fixed player begin able to mine near enemies 2018-06-25 20:43:36 -04:00
Anuken
c7bc6e9128 Added range indicators, mobile build cancel button 2018-06-25 20:38:42 -04:00
Anuken
b911ef98bb Fixed units without an inventory being able to withdraw items 2018-06-25 19:37:04 -04:00
Anuken
f464868934 Fixed player disconnect events not getting shown properly 2018-06-25 19:35:07 -04:00
Anuken
d89c33fbe8 More multiplayer fixes 2018-06-25 19:25:26 -04:00
Anuken
f61f8a36f8 Typo fix 2018-06-25 18:48:01 -04:00
Anuken
b9b34eea37 Fixed some important crashes and multithreading issues 2018-06-25 18:46:04 -04:00
Anuken
d948607039 Fixed dashing not syncing, position being verified on client hosting 2018-06-25 18:33:40 -04:00
Anuken
5a135e108a Massive amount of bug/crash fixes, wave saving 2018-06-25 18:07:11 -04:00
Anuken
ced11c88bc Fixed smelter not using items, unit factory recipe 2018-06-25 15:44:09 -04:00
Anuken
92a748a762 Nerfed drone mined speed, new ore sprite packing 2018-06-25 15:05:42 -04:00
Anuken
f4c9645d73 Fixed power distributors connecting to generators, wrong save extension 2018-06-25 14:18:33 -04:00
Anuken
89ddbfc83d Added turbine generator to recipe list 2018-06-25 12:54:03 -04:00
Anuken
fa53b1be73 Added a few new recipes, balanced smelter 2018-06-25 12:48:35 -04:00
Anuken
c7ec7db61a Fixed empty inventories showing, debug blocks getting unlocked 2018-06-24 21:58:04 -04:00
Anuken
27cf4b0218 Fixed a bug in drone AI 2018-06-24 21:49:41 -04:00
Anuken
482858e36b Updated uCore version, should build now 2018-06-24 21:34:53 -04:00
Anuken
50372ed9f3 Disabled NYI gamemode selection, removed test map 2018-06-24 21:33:37 -04:00
Anuken
d8e8765cec Balanced a few electric turrets, fixed crash 2018-06-24 21:26:22 -04:00
Anuken
6ec28be541 Implemented homing silicon bullets 2018-06-24 21:17:48 -04:00
Anuken
6e5aec080a Implemented artillery turret, carbide artillery shells 2018-06-24 21:05:00 -04:00
Anuken
c7fb517e6c Made core drone pick up dropped items 2018-06-24 20:18:56 -04:00
Anuken
ca10ab0274 Increased fog view range, added tile fog discovery 2018-06-24 16:20:42 -04:00
Anuken
41e611d7db Improved fog of war, added minimap display 2018-06-24 14:42:45 -04:00
Anuken
77a63a39ad Added terrible fog-of-war 2018-06-24 00:09:00 -04:00
Anuken
0267ad574f Fixed some AI quirks, re-added debug blocks, fixed cultivator 2018-06-23 15:11:13 -04:00
Anuken
8f2aae6065 Added unit death scorch effects, more bugfixes 2018-06-23 12:30:54 -04:00
Anuken
a4edf827c8 Added random slopes, various bugfixes and balance fixes 2018-06-23 11:53:14 -04:00
Anuken
f9947d2e53 Improved world generation 2018-06-23 10:36:47 -04:00
Anuken
0a6614d1b3 Added rocks again 2018-06-22 23:04:58 -04:00
Anuken
98cfb4d5ed New block color and ore system 2018-06-22 22:48:00 -04:00
Anuken
18a780147e Updated uCore 2018-06-22 19:31:30 -04:00
Anuken
74878b5cb1 Loads of bugfixes, gameplay tweaks 2018-06-22 19:14:50 -04:00
Anuken
57d5628750 Fixed unit stats bars not being interpolated 2018-06-22 15:48:38 -04:00
Anuken
fc058476ed Made drone more intelligent 2018-06-22 15:38:14 -04:00
Anuken
c24eb231ab Added core miner drone, massive amount of balancing/setup 2018-06-22 15:07:48 -04:00
Anuken
28e44d33c4 Updated uCore 2018-06-21 16:03:07 -04:00
Anuken
f7dbe807e4 Added unit drops, boosting 2018-06-21 15:58:37 -04:00
Anuken
a76e99af86 Playtesting begins: balancing fixes 2018-06-21 14:07:20 -04:00
Anuken
13bb78ffa0 Added new conveyor animation 2018-06-21 12:41:33 -04:00
Anuken
8c194398a9 Added deselection, fixed pump placement and junction skipping 2018-06-21 10:20:37 -04:00
Anuken
21238e7376 lerp -> slerp 2018-06-20 22:57:22 -04:00
Anuken
ca30f49481 Added spatial indexing of tile targets, many bugfixes 2018-06-20 22:56:53 -04:00
Anuken
45da578756 Implemented dynamic ground unit spawning 2018-06-20 20:23:43 -04:00
Anuken
1c80314cfd Added procedural map borders 2018-06-20 18:14:12 -04:00
Anuken
23d621e9c7 Added incomplete procedural map generator 2018-06-20 16:16:59 -04:00
Anuken
2884e4b847 Improvements to playability at low TPS 2018-06-20 15:06:53 -04:00
Anuken
0c7f6432d8 Fixed glitchy minimap unit rendering 2018-06-20 12:15:56 -04:00
Anuken
56bb23400a Moved over map generator / Fixed logic updating on both threads 2018-06-20 11:09:44 -04:00
Anuken
33a278ccb4 Added unit squads, new spawning, WaveSpawner class 2018-06-19 23:46:46 -04:00
Anuken
e79494b5cb Implemented desktop carrying 2018-06-19 16:02:25 -04:00
Anuken
3c3147d665 Implemented flying for desktop, new ship bodies 2018-06-19 15:38:09 -04:00
Anuken
23f3f68767 Implemented basic mech factories 2018-06-19 14:23:59 -04:00
Anuken
08690b9d9e Merge pull request #133 from cloud9350/patch-4
fix fatal language translate (bundle ko)
2018-06-18 23:10:07 -04:00
Anuken
6cfd1a1ef6 Improved texture gen system, mech icon generation 2018-06-18 23:05:31 -04:00
Gureumi
d3eb9c9d99 Update bundle_ko.properties 2018-06-19 10:18:32 +09:00
Gureumi
a0ef3a0e44 fix fatal language translate (bundle ko)
fix no show server version + host user name on list
2018-06-19 10:13:07 +09:00
Anuken
354c6e17c0 Implemented smelting with flux 2018-06-18 17:20:23 -04:00
Anuken
c31a710aa7 Cleanup up turret definitions/recipes 2018-06-18 16:37:38 -04:00
Anuken
0304512b8a Implemented unstable fusion reactor, mending core, liquid cooled turrets 2018-06-18 16:07:37 -04:00
Anuken
6bdd960623 Added generated sprites to gitignore 2018-06-18 14:38:26 -04:00
Anuken
80d0a1555a Added phasewalls 2018-06-18 14:37:50 -04:00
Anuken
ee2cba89d5 New generators, projectors, status system, sprites renamed 2018-06-18 14:27:50 -04:00
Anuken
84d80525fa Duplicate ID check, hasItems cleanup, web host message, projector start 2018-06-17 23:19:58 -04:00
Anuken
4d9fab6cf2 Added all new stat definitions to bundle 2018-06-17 10:25:10 -04:00
Anuken
77856a3ff7 Improved stat system 2018-06-16 23:17:47 -04:00
Anuken
eb99132b8c Implemented volatile teleporters 2018-06-16 22:00:10 -04:00
Anuken
e1cdf80b17 Changed teleporter name, fixed some bugs 2018-06-16 21:55:38 -04:00
Anuken
9fbeeda1c6 Updated uCore 2018-06-16 19:45:45 -04:00
Anuken
1a8cd2e24c Added reconstructor blocks 2018-06-16 19:41:54 -04:00
Anuken
6c620182ea Implemented mass drivers 2018-06-16 14:34:11 -04:00
Anuken
ff542a9946 Improved efficiency of areEnemies() function 2018-06-16 11:35:32 -04:00
Anuken
6281826b92 Updated uCore 2018-06-15 21:54:26 -04:00
Anuken
eb94a4ee14 Added deflector walls 2018-06-15 21:52:02 -04:00
Anuken
09ebb7a01c Added entries for all new smelters 2018-06-15 18:47:53 -04:00
Anuken
11d2ada6b3 Added texture generation system 2018-06-15 18:06:05 -04:00
Anuken
ffbb6bb40b Sprite reorganization, new power and tier-based pumps 2018-06-15 15:53:43 -04:00
Anuken
604f315a83 Switched to binary preference file for desktop 2018-06-15 12:13:52 -04:00
Anuken
ba67c01dd0 Fixed a minor cursor bug, changed drill/pump place verification 2018-06-14 18:36:55 -04:00
Anuken
fab3704dbd Moved over Streamable inner classes, added test map 2018-06-14 17:11:38 -04:00
Anuken
1436e78305 Fixed extra space in uCore dependency 2018-06-13 23:49:25 -04:00
Anuken
125677f787 Added toggleable syncing 2018-06-13 23:16:34 -04:00
Anuken
63d5539427 Updated uCore 2018-06-13 21:18:52 -04:00
Anuken
4be101e9fc Implemented ore generation 2018-06-13 21:02:47 -04:00
Anuken
d0302cdbf3 Many fixes to admin/trace/UUID system 2018-06-13 17:52:31 -04:00
Anuken
c077f6e1e8 Implemented authoritative movement/shooting, fixed netbugs 2018-06-13 17:06:46 -04:00
Anuken
4ca9a26bdd Added name validation 2018-06-13 11:38:12 -04:00
Anuken
6b713b283a Updated inventory menu, weapon factory mechanics 2018-06-12 22:26:16 -04:00
Anuken
9abbd8c158 Implemented slopes 2018-06-12 11:36:55 -04:00
Anuken
4df0641d67 Improved event exception format 2018-06-12 11:05:17 -04:00
Anuken
4b093812bc Added elevation tool 2018-06-12 10:58:07 -04:00
Anuken
d7120af5cb Fixed a small map renderer bug 2018-06-11 21:16:16 -04:00
Anuken
e36a666542 Implemented elevation in-game with sprites 2018-06-11 21:08:15 -04:00
Anuken
b609b5909b Implemented elevation in editor and mechanically in-game 2018-06-11 15:18:25 -04:00
Anuken
cbd83b5e39 Fixed many various bugs with syncing things 2018-06-10 23:33:37 -04:00
Anuken
2ddd768393 Actually implemented puddle syncing 2018-06-10 21:00:23 -04:00
Anuken
c508f30d92 Synced puddles, updated uCore 2018-06-10 20:53:13 -04:00
Anuken
9b7750c1f3 Synced fireballs and fire 2018-06-10 19:16:59 -04:00
Anuken
a9b5949a7b Fixed units not shooting 2018-06-10 14:46:04 -04:00
Anuken
f56247df7a Added placed() method support 2018-06-10 14:43:28 -04:00
Anuken
0ef76aa66d Implemented block input sync, cursor bugfix 2018-06-10 14:29:29 -04:00
Anuken
5c98283932 Implemented unit syncing, new instantiation system 2018-06-10 13:03:52 -04:00
Anuken
ce6bd0fd6d Fixed item drop quantities not syncing 2018-06-09 23:33:01 -04:00
Anuken
aca1001f9a Fixed player dupes, new breaking system, multiplayer block edits 2018-06-09 23:23:14 -04:00
Anuken
d5a58be440 Updated uCore, fixed GWT build, better client snapshot system 2018-06-09 17:05:47 -04:00
Anuken
b33dd7e91c Fixed ammo resupply and shooting not working clientside 2018-06-09 14:20:08 -04:00
Anuken
30e13259b3 Updated client snapshot system, fixed stuck respawn bug 2018-06-09 13:44:24 -04:00
Anuken
be2fa1dfad Fixed interpolation, made death and damage serverside 2018-06-09 11:58:15 -04:00
Lorex
87c5ad79f4 IC-2018.1.4 <Lorex@DESKTOP-8V15HFB Merge branch 'master' 2018-06-09 16:33:18 +08:00
Lorex
2e210e7adc Add Traditional Chinese support 2018-06-09 16:15:17 +08:00
Lorex
c56f4783c0 IC-2018.1.4 <Lorex@DESKTOP-8V15HFB Create vcs.xml, github_settings.xml 2018-06-09 16:13:55 +08:00
Lorex
a1d351aa37 IC-2018.1.4 <Lorex@DESKTOP-8V15HFB Overwrite remote https://github.com/Lorex/Mindustry.git to local 2018-06-09 16:02:39 +08:00
Anuken
bc7b584001 Local forwarding fixes, remote building 2018-06-09 01:12:49 -04:00
Anuken
690571eec0 Massive amount of fixes and changes with multiplayer/annotations 2018-06-08 22:43:23 -04:00
Anuken
0620c635e5 Updated uCore 2018-06-08 12:23:11 -04:00
Anuken
8e00bdcf30 First client/server snapshot implementation 2018-06-08 12:22:07 -04:00
Anuken
0bd0602655 Fixed build errors 2018-06-08 10:02:15 -04:00
Anuken
2bcbc3294b Updated saving to DataOutput/Input 2018-06-07 20:30:02 -04:00
Anuken
9aa5460688 Added DEZ library 2018-06-07 17:23:32 -04:00
Anuken
e451cdd519 More codegen fixes, fixed (one) multiplayer connect crash 2018-06-07 00:01:08 -04:00
Anuken
ab9cdf5610 Increased max packet size to 1024 2018-06-06 21:07:53 -04:00
Anuken
c443eee15d Annotation system bugs fixed 2018-06-06 20:56:59 -04:00
Anuken
9e136bad94 Core annotation system finished 2018-06-06 20:23:19 -04:00
Anuken
ccb97e34d5 Moved many block files; work on annotation processor 2018-06-06 14:51:25 -04:00
Anuken
917e2e40fb Memory optimizations, multithreading fixes, uCore updated 2018-06-05 14:03:08 -04:00
Anuken
c5ed0afb4e Added (mobile) pickup/dropping of units 2018-06-05 00:02:07 -04:00
Anuken
b10fa9e5b2 Added carry traits 2018-06-04 21:15:40 -04:00
Anuken
210967cfef Added syncable bullets 2018-06-04 18:32:03 -04:00
Anuken
2a5118326a Added item drops, fixed various bugs 2018-06-04 16:17:24 -04:00
Anuken
a6225962b0 Updated uCore 2018-06-04 13:02:07 -04:00
Anuken
01f4a9b23b Changed too many things to fit in commit log 2018-06-04 12:47:08 -04:00
Anuken
3202d62a92 Further targeting improvements for AI 2018-06-03 20:03:53 -04:00
Anuken
270dc351a1 Unit system rewrite, new drone AI 2018-06-03 12:12:18 -04:00
Anuken
12c746a4e4 Fixed build errors, AI improvements 2018-06-03 00:09:41 -04:00
Anuken
a116a2a553 Fixed crash caused by lack of multithreading 2018-06-02 22:08:37 -04:00
Anuken
9555b10b97 Bugfixes, cleanup, optimization 2018-06-02 21:45:07 -04:00
Anuken
ae6b4211b9 Added mining 2018-06-02 11:13:07 -04:00
Anuken
3fe7e4e8da mess cleanup 2018-06-02 00:47:22 -04:00
Anuken
ba805739b0 one painful merge later 2018-06-02 00:46:40 -04:00
Anuken
89d8aa99ac Updated uCore 2018-06-02 00:23:08 -04:00
Anuken
5b65c2e27e Fixed MapIO not reading map stream fully 2018-06-02 00:19:31 -04:00
Anuken
6f9b712230 Fixed trail appearing behind player mech 2018-06-01 18:35:14 -04:00
Anuken
ca3bfa2239 Merge remote-tracking branch 'origin/master' 2018-06-01 18:25:39 -04:00
Anuken
35a3a89d2d Changed Discord RPC version to 2.0.0 2018-06-01 18:25:23 -04:00
Anuken
be8632d94b Added Android automatic shooting 2018-06-01 18:23:45 -04:00
Anuken
1bc4b16d38 Added map import button 2018-06-01 14:45:55 -04:00
Anuken
863c159fbb Fixed build errors 2018-06-01 13:24:11 -04:00
Anuken
a647efe3fd Merge pull request #125 from hellomouse/feature-blocklogsandrollback
Added edit logging and whole world rollback
2018-06-01 11:21:48 -06:00
Anuken
c79c23899f Merge branch 'master' into feature-blocklogsandrollback 2018-06-01 11:21:34 -06:00
Anuken
a04e432aea Fixed multithreading 2018-06-01 13:11:40 -04:00
Anuken
5c120e532f Added support for Mac file association; minor optimizations 2018-06-01 13:01:05 -04:00
Anuken
cfa95eef39 Fixed a few mime-type problems 2018-06-01 12:22:39 -04:00
Anuken
a327b9cfa8 Fixed iOS map/save loading 2018-06-01 12:20:57 -04:00
Anuken
c4ae6121b4 Implemented loading map/save files on launch (Android) 2018-06-01 12:20:16 -04:00
Anuken
23d07600f7 Bugfixes, added saving/loading maps in editor for web version 2018-05-31 23:49:43 -04:00
Anuken
418467e467 Fixed bad app-data directory being provided 2018-05-31 21:24:04 -04:00
Anuken
e60b3880ce MapEditor tweaks, fixed file browser on Android w/ permissions 2018-05-31 20:27:13 -04:00
Anuken
92acf009b0 Fixed FileChooser conflict 2018-05-31 17:04:26 -04:00
Anuken
a141df434c Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	build.gradle
#	core/src/io/anuke/mindustry/Vars.java
#	core/src/io/anuke/mindustry/core/Control.java
#	core/src/io/anuke/mindustry/core/Platform.java
#	core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java
#	core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java
#	core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java
#	desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java
2018-05-31 17:00:47 -04:00
Anuken
32201dda72 Implemented nuclear reactor 'heating' 2018-05-31 16:45:45 -04:00
Anuken
13b0c8880d Implemented block breaking on Android 2018-05-31 16:27:30 -04:00
Anuken
24e7d755eb Added respawn animation on game start 2018-05-31 11:48:07 -04:00
Anuken
e534a6b7fc Merge remote-tracking branch 'origin/4.0' into 4.0 2018-05-31 11:41:38 -04:00
Anuken
277d75016c Updated uCore, added new respawn mechanics 2018-05-31 11:41:31 -04:00
Anuken
278a10cf61 Merge pull request #127 from cloud9350/patch-3
Update bundle_ko.properties
2018-05-31 09:12:24 -06:00
Gureumi
8f283b2226 Update bundle_ko.properties
Early update language file!
may be?
2018-05-31 20:53:38 +09:00
Anuken
857b76980b Fixed shaky camera, many other small bugs 2018-05-30 23:51:42 -04:00
Anuken
fae7bfa8c5 Dynamic layout for unlocking blocks 2018-05-30 22:41:52 -04:00
Anuken
e9e7d2e289 Place menu scrolling, fixed some settings menu bugs 2018-05-30 18:32:01 -04:00
Anuken
e3cbe118c5 Done with desktop breaking 2018-05-30 13:43:49 -04:00
Anuken
9d05cfba36 Implemented desktop line placement 2018-05-30 12:40:51 -04:00
Anuken
b5966afe25 Removed unnecessary UI fragments, began work on Desktop input 2018-05-30 00:32:20 -04:00
Anuken
1cf91c0ce3 Added rotation to Android placement 2018-05-29 23:18:31 -04:00
Anuken
0f09a0b152 New shaders, remake of Android placement partially done 2018-05-29 22:03:43 -04:00
Anuken
b434c37f01 Rewrite of all static initialization code 2018-05-29 15:24:47 -04:00
Anuken
4655bd5502 Massive input refactoring 2018-05-29 00:15:24 -04:00
Anuken
fcb74d4fba Removed additional info from mac version 2018-05-28 16:55:46 -04:00
Anuken
2bf7d06a91 Scrapped current place menu 2018-05-28 16:23:23 -04:00
Anuken
ce68c2a3e9 Documentation, added Content/ContentDatabase classes 2018-05-28 15:20:46 -04:00
Anuken
e58194ac3c Confined Mac users to Downloads/ directory 2018-05-28 12:34:01 -04:00
Anuken
857f36e01a Re-definition of all ammo and new turrets 2018-05-28 12:28:50 -04:00
Anuken
83c3a80766 Definition of all bullet types listed on trello 2018-05-27 19:12:01 -04:00
Anuken
736552f3b1 Removed all usage of drawBullet, switched to BasicBulletType 2018-05-27 15:49:01 -04:00
Anuken
0b28f97d8f Bullet refactoring 2018-05-27 15:17:35 -04:00
Anuken
47b627d669 Added sprites for all ammo types 2018-05-25 23:04:48 -04:00
Anuken
b051a296fc Added definitions for all bullet types 2018-05-25 21:56:23 -04:00
Anuken
908a569413 Added all dummy ammo types, added ItemType class 2018-05-25 11:45:47 -04:00
Anuken
31f83dfb40 Merge remote-tracking branch 'origin/master' 2018-05-25 01:10:31 -04:00
Anuken
022b16c8e6 Updated Platform.java 2018-05-25 01:10:12 -04:00
Anuken
d462d9c89b Removed JavaFX usage 2018-05-25 01:09:47 -04:00
Anuken
86360049c3 Updated FileChooser dir 2018-05-25 01:09:18 -04:00
Anuken
f524be6738 Added native file choosers for importing/exporting save 2018-05-24 23:16:03 -04:00
Anuken
519d2c1714 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/assets/sprites/icon.icns
2018-05-24 21:14:10 -04:00
Anuken
c19fcb831f Added native file chooser, fixed macOS prefs errors 2018-05-24 21:13:31 -04:00
Anuken
ff6268e616 Updated icns file 2018-05-24 21:12:41 -04:00
Anuken
b0f1ad63ee Changed prefs directory definition 2018-05-24 17:20:37 -04:00
Anuken
a7b017f307 Merge remote-tracking branch 'origin/master' 2018-05-24 16:13:19 -04:00
Anuken
29c3df8ba7 Changed bundle identifier script 2018-05-24 16:12:12 -04:00
Anuken
570226a051 Renamed all turrets 2018-05-24 15:40:36 -04:00
Anuken
96cfb51bd8 Sprite changes 2018-05-24 13:30:56 -04:00
Anuken
ba0c7907ca Merge remote-tracking branch 'origin/master' 2018-05-24 11:21:16 -04:00
Anuken
4c6ae83d4b Build 40 release 2018-05-24 11:19:03 -04:00
Anuken
e4231e012d Fixed a few minor bugs with scrolling in editor 2018-05-23 22:23:52 -04:00
Anuken
9693de8885 Added new screen for managing and viewing maps, many editor fixes 2018-05-23 21:40:59 -04:00
Anuken
d096a7ceb1 Merge fixes 2018-05-23 10:37:14 -04:00
Anuken
fd77dfd66d Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	build.gradle
#	core/src/io/anuke/mindustry/Vars.java
#	core/src/io/anuke/mindustry/core/Control.java
#	core/src/io/anuke/mindustry/core/Logic.java
#	core/src/io/anuke/mindustry/core/NetClient.java
#	core/src/io/anuke/mindustry/core/NetServer.java
#	core/src/io/anuke/mindustry/core/UI.java
#	core/src/io/anuke/mindustry/editor/MapSaveDialog.java
#	core/src/io/anuke/mindustry/input/GestureHandler.java
#	core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java
#	core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java
#	core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java
#	gradle/wrapper/gradle-wrapper.properties
#	server/src/io/anuke/mindustry/server/ServerControl.java
2018-05-23 10:36:59 -04:00
Anuken
3f1389818c Changed TextArea padding 2018-05-23 10:28:47 -04:00
Anuken
c920fa6740 Added all export/import menus, fixed bad icons for editor blocks 2018-05-22 23:56:29 -04:00
Anuken
b4088dcfbc Some more revisions to iOS version 2018-05-22 14:30:54 -07:00
Anuken
b20f026c7b Added dialogs for saving/loading maps directly, work on web support 2018-05-22 17:28:21 -04:00
Anuken
f0fa126e7b Changed map edit menu, added map info dialog 2018-05-22 14:16:12 -04:00
Anuken
2999694f48 Fixed brush not respecting multiblock rules 2018-05-22 12:33:42 -04:00
Anuken
fcc60957c1 Made DrawOperation non-disposable 2018-05-22 12:09:18 -04:00
Anuken
4781351184 Testing github webhook 2018-05-22 12:07:33 -04:00
Anuken
d97a585eba Added undoing for map editor 2018-05-22 00:02:43 -04:00
Anuken
2d65c9734c Added IndexedRenderer rotation, map editor rotation 2018-05-21 23:00:40 -04:00
Anuken
3b5a9c0a10 Added IndexedRenderer color, block team indicator 2018-05-21 18:49:00 -04:00
Anuken
f6184004e5 Implemented editor multiblock support 2018-05-21 17:45:12 -04:00
Anuken
d70dd05221 Fixed 'permission denied' open error on iOS 2018-05-21 15:06:20 -04:00
Anuken
5602cb8920 Added basic enemy spawning, fixed turret base sprite, input place lag 2018-05-21 15:03:34 -04:00
Anuken
4a250b4e27 Fixed brush size layout, added map resize button 2018-05-21 13:59:35 -04:00
Anuken
37afb46957 Deprecated Draw.color(String), switched to type-safe usage 2018-05-21 13:37:16 -04:00
Anuken
9708d3183f Implemented multiblock replacement, upgrade-safe building 2018-05-21 12:20:23 -04:00
Anuken
433cb99eab Removed outdated 3.2 itch.io GIF from readme 2018-05-21 12:05:02 -04:00
Anuken
241b86d704 Updated item transfer visuals, centered block inventory 2018-05-21 12:03:49 -04:00
Anuken
3b0c66429c Fixed dedicated server crash 2018-05-21 11:27:06 -04:00
Anuken
8f137eadf0 New ItemTransfer entity 2018-05-21 11:25:41 -04:00
Anuken
468a6c1dca Delete MANIFEST.MF 2018-05-21 11:07:54 -04:00
Anuken
f9597569ba Delete annotations-release.jar 2018-05-21 11:07:47 -04:00
Anuken
93353ff900 Removed action-based item transfer animation 2018-05-21 11:05:10 -04:00
Anuken
ed7e77b2db New breaking animation and colors 2018-05-21 00:27:01 -04:00
Anuken
2108aab523 Added usage of OS.getAppDataDirectory() 2018-05-20 21:52:45 -04:00
Anuken
75f01099ee Re-added resource harvesting from blocks 2018-05-20 20:51:56 -04:00
Anuken
26e1ad51ff Documentation, cleanup, incremental resource usage, core seeking 2018-05-20 20:41:10 -04:00
Anuken
c1a5482ad2 Major refactoring of building, sound, inventory 2018-05-20 17:59:52 -04:00
Anuken
ed232248a2 Updated polish bundle 2018-05-20 16:05:24 -04:00
Anuken
e215324292 Updated spanish bundle, added missing formatted text 2018-05-20 15:50:01 -04:00
Anuken
a8bc2f10e4 Fixed iPad share crash, updated iOS version to 3.5 2018-05-20 12:27:23 -07:00
Anuken
b64cbc223f Updated icons again 2018-05-20 15:16:44 -04:00
Anuken
de40df7f7b Fixed place mode not overwriting old queue 2018-05-20 13:05:25 -04:00
Anuken
94896451ac Merge remote-tracking branch 'origin/master' 2018-05-20 11:47:32 -04:00
Anuken
0e35bb4852 Fixed scrolling player menu causing panning on mobile 2018-05-20 11:47:20 -04:00
Anuken
cd30b1d9b3 Fixed bad scaling on ipad devices 2018-05-20 08:40:36 -07:00
Anuken
8d66d43a98 Some more sharing revisions 2018-05-19 20:19:47 -07:00
Anuken
8ca861360b Changed sharing mechanism again 2018-05-19 21:06:12 -04:00
Anuken
410db16160 Fixed iOS app errors 2018-05-19 17:52:29 -07:00
Anuken
1c1df81341 Added sharing for iOS saves, fixed icons 2018-05-19 17:13:04 -07:00
Anuken
66a1cc7b71 Updated iOS map sharing 2018-05-19 18:25:20 -04:00
Anuken
0543569315 Merge remote-tracking branch 'origin/master' 2018-05-19 15:01:55 -07:00
Anuken
e5a94bd140 Grid updates 2018-05-19 15:01:18 -07:00
Anuken
adfebdb3f6 Merge pull request #122 from Prosta4okua/patch-1
Update bundle_ru.properties[Work in progress]
2018-05-19 15:58:41 -06:00
Prosta4okua
dbe06b0a93 Update bundle_ru.properties 2018-05-19 22:50:50 +03:00
Anuken
e8305d1245 Updated map editor with better placement preview 2018-05-19 11:53:01 -07:00
Prosta4okua
b2ea733b45 Update bundle_ru.properties 2018-05-19 21:49:29 +03:00
Anuken
fc320fb9ee Moved Platform.java, basic iOS image loading 2018-05-19 10:35:48 -07:00
Commodore64x
a3268eefbf Fixed field size in rollback menu. 2018-05-19 14:34:50 +10:00
Commodore64x
5a77eebb34 Fixed ui in the rollback menu. 2018-05-19 14:22:07 +10:00
Commodore64x
68af32bc9f Added rollback into the admin menu, fixed a bug where players would crash upon trying to view their own logs on relog. 2018-05-19 13:37:44 +10:00
Anuken
100e5042de Fixed block placement crash 2018-05-18 18:24:36 -07:00
Anuken
b3e188a5f4 Improvements to annotation code generation system, client RMI 2018-05-18 17:21:18 -07:00
Anuken
ae3bcac3b7 Removed gifimages folder 2018-05-18 09:26:50 -07:00
Anuken
afed54b217 Fixed a few bugs with new placement system 2018-05-18 09:22:40 -07:00
Anuken
2d768990ec Updated iOS icons 2018-05-18 07:53:30 -07:00
Anuken
10c44d0a4e Changed iOS version to 9.0.0 2018-05-17 22:31:26 -07:00
Anuken
57b0e3e311 Fixed iOS donate button and changelog appearing 2018-05-17 20:55:29 -07:00
Anuken
19e62786c9 New placement system without limits, queue block placements 2018-05-17 20:36:43 -07:00
Anuken
e45e04a6dc More ios fixes 2018-05-16 21:13:57 -07:00
Anuken
97cac33773 New build limits, recipe refactoring 2018-05-16 14:27:25 -07:00
Anuken
a889571b98 Added unit-based block building with effects 2018-05-16 12:54:36 -07:00
Anuken
cf1148e7c8 iOS plist fixes, re-added music 2018-05-16 11:06:15 -07:00
Anuken
e2f74fd4f0 Removed build effect surface usage 2018-05-16 07:52:17 -07:00
Anuken
57bcea56b5 Implemented block build animation and shaders 2018-05-15 20:03:03 -07:00
Commodore64x
380a955e7a Updated the way packets are exchanged for edit logs. 2018-05-15 16:36:39 +10:00
Anuken
cf50f47459 Improvements to ground unit AI 2018-05-14 08:51:16 -07:00
Anuken
eb69dce585 Removed Invoke class 2018-05-14 06:40:23 -07:00
Commodore64x
b3adf7b331 Replaced ArrayLists with Arrays, overhauled requesting of logs from the server, improved rollback command and added log resetting. 2018-05-14 18:48:44 +10:00
Anuken
a8900bb50e Re-added discord RPC 2018-05-13 21:43:53 -07:00
Anuken
c79f0b76ff Keybind fixes 2018-05-13 21:16:44 -07:00
Anuken
ca24e64c42 Implemented local multiplayer fully 2018-05-13 20:48:44 -07:00
Anuken
d1a3752b2d Annotation processing done, more work on local multiplayer input 2018-05-13 16:41:50 -07:00
Anuken
00e70cbb6a Massive amount of refactoring for local multiplayer, annotations 2018-05-12 07:30:23 -07:00
Commodore64x
7f2c2d9d6b Added edit logging and whole world rollback 2018-05-12 18:34:44 +10:00
Anuken
959f756ff5 Local multiplayer initial commit 2018-05-11 07:59:10 -07:00
Anuken
90b9ba71de Removed delta() usage in modules 2018-05-11 07:02:10 -07:00
Anuken
26025a3018 Fixed multithreading affecting wave time 2018-05-09 16:58:53 -07:00
Anuken
cce35b4a6f Fixed build.gradle 2018-05-09 16:46:25 -07:00
Anuken
09bdfd7ac1 Added local method invocation annotation 2018-05-09 16:41:02 -07:00
Anuken
ce2b73b737 Updated Bullet to use floats 2018-05-09 09:46:24 -07:00
Anuken
61e9611bab Merge pull request #124 from cloud9350/patch-2 2018-05-09 10:55:40 -04:00
Anuken
83d1707b56 Added event method, changed Fireball to projectile type 2018-05-09 10:52:51 -04:00
Gureumi
cbdf252fe6 fix missing tranlate lang and update about info 2018-05-09 20:33:53 +09:00
Anuken
55cd0c2bae Added basic RMI-like system for network evens 2018-05-08 18:39:52 -04:00
Anuken
6cc1cecf5a Updated RDX item, changed packet creation to use pooling 2018-05-08 10:53:36 -04:00
Anuken
7a94ebcf2a Implemented packet pooling 2018-05-07 14:23:52 -04:00
Anuken
84a126253a Fixed player looking at cursor with no ammo 2018-05-06 21:35:59 -04:00
Anuken
ad3ce3f9fc Minor comment fix 2018-05-06 11:52:10 -04:00
Anuken
c74ee2150c Implemented new accurate turret prediction 2018-05-06 10:54:18 -04:00
Prosta4okua
665f0ee03e Update bundle_ru.properties 2018-05-06 09:45:17 +03:00
Anuken
f8a4128c88 Updated sprites 2018-05-06 01:43:33 -04:00
Anuken
c931bbf107 Merged with master 2018-05-06 01:43:12 -04:00
Anuken
b020336f8c Temporarily disabled validating replacements 2018-05-05 22:26:59 -04:00
Anuken
299c2af59b Added configurable anti-grief 2018-05-05 20:20:34 -04:00
Anuken
37a73eda37 Fixed menu opening and closing when chat is open 2018-05-05 18:36:25 -04:00
Anuken
3938022002 Updated build.gradle to fix invalid JVM args for windows 2018-05-05 15:47:18 -04:00
Anuken
450fc456be Fixed extra wave time counting down on tutorial 2018-05-05 14:13:21 -04:00
Anuken
f7e0dc4818 Changed music back 2018-05-05 13:50:32 -04:00
Anuken
b496f51afc Added turk bundle, updated wrapping, added fastshoot kick message 2018-05-05 13:45:04 -04:00
Anuken
c1163a078a Updated translation bundles, added autowrap to menu 2018-05-05 13:18:21 -04:00
Anuken
90c243dec8 Merge remote-tracking branch 'origin/master' 2018-05-05 12:49:01 -04:00
Anuken
fab22a152c Fixed instant disconnect due to UDP flood, extremely jumpy interpolation 2018-05-05 12:48:50 -04:00
Anuken
3905da1a62 Added RDX entry 2018-05-05 10:16:26 -04:00
Anuken
0b02ada315 Merge pull request #121 from cloud9350/patch-1
Update translate file to Mindustry 4.0
2018-05-04 09:45:01 -04:00
Gureumi
3dd1fc2efe Update translate file to Mindustry 4.0 2018-05-04 13:13:12 +00:00
Anuken
c1066e94f2 Implemented drone sprite, basic AI 2018-05-03 22:54:21 -04:00
Anuken
3a3c23d2f1 Fixed discarded shells appearing in water 2018-05-03 15:19:00 -04:00
Anuken
1f439b4b0c Made server write version on build 2018-05-03 13:04:30 -04:00
Anuken
2af750cfec Implemented shooting and states for ground units 2018-05-03 12:59:23 -04:00
Anuken
42b3b19a57 Fixed broken blocks not updating path 2018-05-02 17:26:20 -04:00
Anuken
496498b913 Implemented auto-updating pathfinder 2018-05-02 17:14:10 -04:00
Anuken
b7a7e7dcc0 Updated GWT and Gradle versions 2018-05-02 11:45:33 -04:00
Anuken
3fcdfbd01a Optimized floor rendering 2018-05-02 11:38:44 -04:00
Anuken
72fc673020 Fixed floor rendering 2018-05-02 00:19:38 -04:00
Anuken
c3967c79c9 Fixed some hitbox issues, preparing to remake floor rendering 2018-05-01 23:45:32 -04:00
Anuken
3dd07d2f4a Implemented fast dijkstra-map pathfinding 2018-05-01 21:34:30 -04:00
Anuken
036f233946 Improved rubble and VTOL accuracy 2018-05-01 19:07:13 -04:00
Anuken
16c243d270 Merge remote-tracking branch 'origin/master' 2018-05-01 17:04:38 -04:00
Anuken
9776884a91 Fixed controllers not aiming properly 2018-05-01 17:04:32 -04:00
Anuken
131f646024 Fixed broken resupply animations 2018-05-01 16:46:10 -04:00
Anuken
1bf728359d Fixed build errors 2018-05-01 16:02:42 -04:00
Anuken
0ee5c1cd86 Changed iOS launcher to have slighly smaller DP decrease 2018-05-01 11:21:52 -04:00
Anuken
8a83e0fc1a Fixed server compile errors, added resupply point block 2018-04-30 22:28:47 -04:00
Anuken
0be49002ba Added repair point block 2018-04-30 17:14:35 -04:00
Anuken
2b96c820fd Fixed rubble-related crash, improved vtol AI 2018-04-29 23:34:40 -04:00
Anuken
9641a388e2 Improved vtol effects, added state machines for behavior 2018-04-29 15:31:13 -04:00
Anuken
37fcd81e87 Improved VTOL animation, made power nodes circular 2018-04-29 10:46:14 -04:00
Anuken
b589d8a1df Added VTOL animation 2018-04-29 01:22:26 -04:00
Anuken
d0a44906fe API changes for getting traces and upgrades 2018-04-28 19:52:38 -04:00
Anuken
5b8ee48600 Merge fixes 2018-04-28 16:29:23 -04:00
Anuken
e5f6b7f66c Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-04-28 16:28:58 -04:00
Anuken
941ebd39bf Added new royalty-free music 2018-04-28 13:44:46 -04:00
Anuken
52b73b5a9d Made iOS UI slightly bigger 2018-04-28 12:58:21 -04:00
Anuken
f5b7e6bb60 Made IOS UI size slightly smaller 2018-04-28 12:54:54 -04:00
Anuken
44965a42e4 Added new splash screens and icons for iOS 2018-04-28 12:42:06 -04:00
Anuken
d8aea69c0c Merge remote-tracking branch 'origin/master' 2018-04-28 12:27:49 -04:00
Anuken
aa110ec9a6 Various iOS fixes 2018-04-28 12:27:43 -04:00
Anuken
dbfe5196e7 Fixed iOS text fields not getting source text 2018-04-28 11:38:09 -04:00
Anuken
13e911eaa1 Merge remote-tracking branch 'origin/master' 2018-04-28 11:22:42 -04:00
Anuken
cbbd5ffc62 Renamed 'android' usage to 'mobile' 2018-04-28 11:22:35 -04:00
Anuken
cf40aec9d7 Merge remote-tracking branch 'origin/master' 2018-04-28 11:16:09 -04:00
Anuken
cdda421920 Fixed multithreading not working on iOS 2018-04-28 11:15:53 -04:00
Anuken
0db22f2cff Fixed place mode visual bug 2018-04-28 11:12:24 -04:00
Anuken
7a22ca2841 Fixed being unable to get log in low android versions 2018-04-28 10:41:33 -04:00
Anuken
4fc8e321af Added iOS text field dialog listener 2018-04-28 10:14:57 -04:00
Anuken
59fe8f444f Merge remote-tracking branch 'origin/master' 2018-04-27 23:43:32 -04:00
Anuken
8cc3a865e2 iOS fixes 2018-04-27 23:42:59 -04:00
Anuken
8a13482c38 Changed OGGs to MP3s, fixed desktop version being unable to start 2018-04-27 22:44:21 -04:00
Anuken
d8d8552176 Added iOS module 2018-04-27 16:01:37 -04:00
Anuken
96475557ae Travis build fix 2018-04-27 15:33:12 -04:00
Anuken
bb4c498e5a Fixed some mac build issues 2018-04-27 13:49:04 -04:00
Anuken
3ba57c3473 Minor cleanup with bars 2018-04-27 13:43:08 -04:00
Anuken
094aa5a326 Fixed lightning not rendering 2018-04-25 21:19:15 -04:00
Anuken
4b71b30418 Fixed compile error with new effects system, update uCore 2018-04-25 20:55:20 -04:00
Anuken
d960703a5c Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-04-25 20:53:49 -04:00
Anuken
6244551d69 Fixed android build errors 2018-04-25 20:53:32 -04:00
Anuken
3ed6be1d6d Fixed build errors 2018-04-25 20:53:03 -04:00
Anuken
91c3cb93f0 Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	build.gradle
#	core/assets/bundles/bundle_es_LA.properties
#	core/assets/version.properties
2018-04-25 20:45:39 -04:00
Anuken
8c369d9874 Removed version.properties 2018-04-25 20:44:22 -04:00
Anuken
b5008f4ad3 Added unit ammo support, multi-ammo inventories 2018-04-25 20:40:51 -04:00
Anuken
deefab8a5b Implemented ammo ressuplying 2018-04-24 21:38:57 -04:00
Anuken
ff6dc98bbe Added spanish bundle 2018-04-23 21:47:39 -04:00
Anuken
8581213126 Moved bullet FX to ammo type, beginning of weapon rework 2018-04-23 21:35:40 -04:00
Anuken
19d058a644 More base unit types added 2018-04-23 19:14:52 -04:00
Anuken
aa83510fbe Moved unit-related classes, added base flying types 2018-04-22 17:40:23 -04:00
Anuken
5aa995b5ef Version.properties update 2018-04-21 18:49:06 -04:00
Anuken
1a9d701d32 Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	core/assets-raw/sprites/blocks/chainturret-icon.png
#	core/assets-raw/sprites/blocks/chainturret.png
#	core/assets-raw/sprites/blocks/titancannon-icon.png
#	core/assets-raw/sprites/blocks/titancannon.png
#	core/assets/sprites/sprites.atlas
#	core/assets/sprites/sprites.png
#	core/assets/version.properties
#	core/src/io/anuke/mindustry/entities/effect/TeslaOrb.java
#	core/src/io/anuke/mindustry/graphics/BlockRenderer.java
#	core/src/io/anuke/mindustry/input/InputHandler.java
#	core/src/io/anuke/mindustry/input/PlaceMode.java
2018-04-21 18:47:43 -04:00
Anuken
9f4f107b6d Changed version build 2018-04-21 18:39:49 -04:00
Anuken
90716ebaad Added italian bundle 2018-04-21 18:32:56 -04:00
Anuken
496b4e77e8 Updated version 2018-04-21 18:28:38 -04:00
Anuken
6e9d833c77 Added infinite reach on sandbox 2018-04-21 18:08:34 -04:00
Anuken
48061d3cae Fixed flick scroll issues 2018-04-21 18:03:43 -04:00
Anuken
292ce33e0f Fixed placement preview PR 2018-04-21 15:54:21 -04:00
Anuken
365fc6af20 Merge pull request #117 from hellomouse/feature-blockpreview
Added Placement Preview
2018-04-21 15:41:03 -04:00
Anuken
97360b33f4 Added new chain/titan sprites 2018-04-21 15:18:12 -04:00
Anuken
5012313dc4 Implemented inefficient pathfinding 2018-04-21 14:26:05 -04:00
Anuken
95f10aeb06 Attempts to further optimize pathfinding 2018-04-21 11:55:32 -04:00
Anuken
8a965e56cd Fixed not being able to pan with invalid recipe selected 2018-04-21 11:02:54 -04:00
Anuken
fb14a83b9a More work on pathfinding 2018-04-21 01:09:06 -04:00
Commodore64x
8cef351ed9 Fixed preview for multiblocks. 2018-04-21 12:44:23 +10:00
Anuken
4261e6242c Implemented JPS badly 2018-04-20 19:55:41 -04:00
Anuken
68bfd3017b Updated uCore 2018-04-19 22:02:41 -04:00
Anuken
ccd25c7e76 Implemented basic minimap 2018-04-19 21:57:55 -04:00
Anuken
7df232c65d Added block rubble, more liquid interaction 2018-04-19 19:06:52 -04:00
Anuken
32fb79478c Updated uCore 2018-04-18 21:34:07 -04:00
Anuken
d950396f68 Updated DrawLayer 2018-04-18 21:32:06 -04:00
Anuken
7d5f336e36 Final block rendering system revisions, for now 2018-04-18 21:31:33 -04:00
Anuken
b5cba3abfd New unbroken floor rendering system 2018-04-18 21:18:12 -04:00
Anuken
1d8630dd7d Improved conduit interaction / Various messups 2018-04-18 15:23:20 -04:00
Anuken
bfcce4f7ab Messed up rendering some more 2018-04-17 23:52:38 -04:00
Anuken
622f0d9355 Refactored BlockRenderer into two classes 2018-04-17 22:20:57 -04:00
Anuken
434256b0a5 Messed up many things 2018-04-17 20:04:57 -04:00
Anuken
e7a4ce2e19 Implemented entity pooling, effect saving, other fixes 2018-04-17 18:57:03 -04:00
Anuken
23dc62dbd2 Fixed map file names not being shown 2018-04-17 17:15:43 -04:00
Anuken
739e636a2c Added 'sleeping entity' optimization 2018-04-17 17:07:04 -04:00
Anuken
b020bf6816 Variable name refactorings / Untested entity sleeping 2018-04-17 09:31:41 -04:00
Anuken
47d61c4a0e Changed GridMap usage to IntMap 2018-04-17 09:06:55 -04:00
Anuken
714c5fd784 Added missing synchronized block 2018-04-17 08:59:01 -04:00
Anuken
7f2a0a77c7 Player saveWrite tweaks 2018-04-17 08:57:30 -04:00
Anuken
0bebe5008b Implemented leaky liquid explosions / New entity save system 2018-04-16 22:46:16 -04:00
Anuken
ee24eb8d1b Made saves load backup files if original save gets corrupted 2018-04-16 21:11:49 -04:00
Anuken
d396149521 Implemented passing of commands as arguments 2018-04-16 20:28:47 -04:00
Anuken
a4962c5225 Basic documentation for fire/puddles 2018-04-16 17:41:49 -04:00
Anuken
bece87c790 Implemented puddles of liquid 2018-04-16 17:32:35 -04:00
Anuken
e21d92cf4d Changed UUID algorithm on desktop 2018-04-16 09:58:31 -04:00
Anuken
e6f9ce888f Fixed autosave not updating meta 2018-04-15 23:12:26 -04:00
Anuken
871b6548ab Implemented player explosion intensity calculation / Fixed fire spread 2018-04-15 22:41:27 -04:00
Anuken
cb569be3b3 Improved fireballs and general block explosions 2018-04-15 20:06:38 -04:00
Commodore64x
0e50fbf3f2 Fixed rendering and other issues. 2018-04-16 09:08:44 +10:00
Anuken
3adc599278 Implemented fire 2018-04-15 17:12:09 -04:00
Anuken
68593acf89 Changed UUID generation slightly 2018-04-15 16:04:22 -04:00
Anuken
6007e511ba Implemented basic block explosion modeling 2018-04-15 15:49:50 -04:00
Anuken
01fc7108d8 Implemented conveyor item access 2018-04-15 13:05:18 -04:00
Commodore64x
494e415bd3 Fixed formatting? 2018-04-15 19:53:23 +10:00
Commodore64x
c17b34c70d Added Placement Preview 2018-04-15 19:40:22 +10:00
Anuken
02ab945ab8 Made junction ignore clogs 2018-04-14 21:57:10 -04:00
Anuken
97e5ac4c1e Implemented 'deep' unplaceable floor blocks 2018-04-14 21:51:46 -04:00
Anuken
458d4378f0 Removed liquid storage 2018-04-14 21:13:10 -04:00
Anuken
b715e0d34e Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-04-14 20:45:46 -04:00
Anuken
cce4113b2d Fixed flipped fin/fout usage 2018-04-14 20:44:40 -04:00
Anuken
89f06506c1 Fixed transfer exploit 2018-04-14 20:38:33 -04:00
Anuken
cc26e61d7a Updated uCore 2018-04-14 13:50:05 -04:00
Anuken
4b6b1b43cd Updated uCore 2018-04-14 13:49:42 -04:00
Anuken
913ee34c8d Implemented item dumping 2018-04-14 13:47:55 -04:00
Anuken
4e77f24a06 Implemented inventory capacity 2018-04-14 12:00:42 -04:00
Anuken
fcf62ada8f Changed inventory system to use real core inventory 2018-04-14 11:14:00 -04:00
Anuken
86b7966027 Implemented item dragging and transferring 2018-04-13 23:55:53 -04:00
Anuken
43c9bc51dc Implemented basic block inventories 2018-04-13 20:05:42 -04:00
Anuken
1ff6a7e423 Updated uCore 2018-04-12 17:34:59 -04:00
Anuken
439d2c88ae Updated uCore 2018-04-12 17:34:24 -04:00
Anuken
37aced0ad3 Minor tweaks to fit new Effects position 2018-04-12 17:22:29 -04:00
Anuken
a3a1e6d3a9 Added liquid bridge conduits 2018-04-11 21:39:54 -04:00
Anuken
2c769cad0b Removed tunnels / Added item bridge 2018-04-11 21:14:12 -04:00
Anuken
b1ad8f917d Changed parameters of griefer command 2018-04-11 13:06:03 -04:00
Anuken
221f7be21b Added utility griefer scan command 2018-04-11 13:05:08 -04:00
Anuken
bed34c4cad Fixed typo in findip command / Tweaks to kicking criteria 2018-04-11 10:25:59 -04:00
Anuken
f8b0819fb3 Fixed stone formers 2018-04-11 10:24:01 -04:00
Anuken
25778a143c Added overflow gate block 2018-04-10 21:30:24 -04:00
Anuken
5b11875a5a Better conveyor physics / Performance test maps / Unit inventory begin 2018-04-09 20:25:08 -04:00
Anuken
6967093689 Added liquid bridge / Smoothed conduit liquid display 2018-04-09 18:31:06 -04:00
Anuken
0cafa152bf Added fix for overflow block IDs 2018-04-09 10:30:15 -04:00
Anuken
697e288de2 Fixed 'bans' server crash 2018-04-09 10:24:47 -04:00
Anuken
aa28c3a45b Added light item bridge 2018-04-08 21:46:48 -04:00
Anuken
815daccff1 Made server connection info slightly less verbose 2018-04-08 12:38:22 -04:00
Anuken
f61aa6068b Added additional server commands, fixed a crash 2018-04-08 12:33:13 -04:00
Anuken
21fe0f9246 Added incinerator 2018-04-08 12:23:39 -04:00
Anuken
6db1175c95 Implemented conveyor physics 2018-04-08 12:02:42 -04:00
Anuken
00b78402eb Fixed build errors 2018-04-08 10:48:22 -04:00
Anuken
30ddd91a34 Merge fixes 2018-04-08 10:47:09 -04:00
Anuken
1789fadbf6 Merged with master 2018-04-08 10:46:48 -04:00
Anuken
86d5803b63 Minor status effect/liquid bugfixes 2018-04-08 10:36:49 -04:00
Anuken
98ec2dcf44 Implemented passable liquids 2018-04-07 23:24:33 -04:00
Anuken
117e2e2cb6 Added metal floor / Implemented teleporter activation 2018-04-07 21:37:33 -04:00
Anuken
4b39e5fab6 Fully implemented teleporters 2018-04-07 19:31:42 -04:00
Anuken
7ea4a503f7 Added new 'space' tile with shader / Added additional teleporter FX 2018-04-06 21:28:14 -04:00
Anuken
7cf619e620 Back button usage cleanup 2018-04-06 17:07:33 -04:00
Anuken
7a65604cc8 Lightning turret tweaks / Beginning of teleporter rework 2018-04-06 16:59:31 -04:00
Anuken
d67402e6aa Implemented lightning turret 2018-04-06 15:14:19 -04:00
Anuken
2191437f39 Fixed turrets hitting friendly players / Fixed android compile error 2018-04-06 10:33:11 -04:00
Anuken
c6efa6ca2e Updated uCore 2018-04-05 22:30:59 -04:00
Anuken
5172ae781f Updates for new uCore version 2018-04-05 22:30:25 -04:00
Anuken
343a94bf05 Implemented GFX for all status effects 2018-04-05 22:25:08 -04:00
Anuken
7cd96e379e Partial liquid turret implementation / Status effects 2018-04-05 21:37:54 -04:00
Anuken
ddf39461fb Implemented lancer turret 2018-04-05 17:29:49 -04:00
Anuken
62608bea6c More effect tweaks / Unfinished implementation of lancer turret 2018-04-04 23:50:27 -04:00
Anuken
05356776c5 Static effects / Better shell ejections / Implemented new cannon turret 2018-04-04 21:13:49 -04:00
Anuken
1956fccbe9 Implemented 'railgun' turret / Hierarchy split / Color refactoring 2018-04-04 16:44:32 -04:00
Anuken
53ca2d0755 Removed extra line of code 2018-04-04 00:04:05 -04:00
Anuken
641a4b87c6 Updated uCore, fixed build errors 2018-04-03 23:59:10 -04:00
Anuken
0559b43bde Updated uCore 2018-04-03 23:58:33 -04:00
Anuken
397220e682 Implemented liquid turrets with ammo / Implemented flamer turret 2018-04-03 23:06:39 -04:00
Anuken
636da8f95f Additional bullet effects / Rotational replacement 2018-04-03 18:36:18 -04:00
Anuken
94f2e880cd Additional effect tweaks 2018-04-02 23:08:07 -04:00
Anuken
c03aa6300e Added shell ejection effects / Added burst turret 2018-04-02 22:52:24 -04:00
Anuken
54d0cae450 Major turret and bullet refactoring // New effects 2018-04-02 21:43:06 -04:00
Anuken
efd9280f96 Build code fix 2018-04-02 15:35:20 -04:00
Anuken
20b95fa063 Ammo things added 2018-04-01 21:07:52 -04:00
Anuken
ec5f74b753 Removed every single bullet type, breaking everything 2018-04-01 11:56:11 -04:00
Anuken
5ee369f26a Fixed fusion reactor power transfer / Start of turret overhaul 2018-04-01 11:13:27 -04:00
Anuken
198dff7864 Updated plasma drill sprites 2018-03-31 22:48:56 -04:00
Anuken
af483e93f3 Updated uCore 2018-03-31 22:41:22 -04:00
Anuken
0813f00ea1 Added fusion reactor 2018-03-31 22:39:23 -04:00
Anuken
06dcc875bd Added longer-range power nodes / Resprite of some generators 2018-03-31 17:20:48 -04:00
Anuken
eab226f04d Organized FX 2018-03-31 15:30:06 -04:00
Anuken
dd0ad495f7 Added plasma drill 2018-03-31 14:51:24 -04:00
Anuken
4ff3517343 Updated uCore 2018-03-31 14:06:29 -04:00
Anuken
8a80e82b5d Added nuclear drill / Broke various things 2018-03-31 14:03:52 -04:00
Anuken
c14fb51eb8 Added pulverizer block 2018-03-31 11:55:17 -04:00
Anuken
9302b7c15c Added text 2018-03-31 11:53:32 -04:00
Anuken
662283908c Implemented silicon production / Centrifuge / Retexturing 2018-03-30 23:25:39 -04:00
Anuken
532eeb7ab0 Groundwater pump animation / water recolor 2018-03-29 23:38:16 -04:00
Anuken
e78579581f Drill cleanup / Added liquid boosting / Liquid hierarchy cleanup 2018-03-29 22:51:49 -04:00
Anuken
027e8dc35e Start of drill re-tiering / Animated drills / Fixed fracker bugs 2018-03-29 21:36:34 -04:00
Anuken
d83a852681 Start of drill re-tiering / Animated drills / Fixed fracker bugs 2018-03-28 23:00:12 -04:00
Anuken
826d5705c9 Animated oil extractor 2018-03-28 21:23:02 -04:00
Anuken
fbf8655ea4 Oil extractor water now needed / new liquid physics / new plastic balance 2018-03-28 20:01:47 -04:00
Anuken
737c63da5e Plastic production system balancing 2018-03-28 10:20:42 -04:00
Anuken
a98f42012a Implemented biomatter compressor 2018-03-28 00:05:27 -04:00
Anuken
8526c67e4d Updated uCore to fix build errors 2018-03-27 23:21:01 -04:00
Anuken
29051d4281 Improved cultivator sprite, changed save format of some crafters 2018-03-27 23:17:15 -04:00
Anuken
1d0063ed39 Fixed offloadNear and power smelter bugs 2018-03-27 21:30:54 -04:00
Anuken
18d81f6daa Implemented alloy smelter, fixed place crashes for many of the blocks 2018-03-27 20:11:47 -04:00
Anuken
17bc8fd9ed Added sprites for all new crafting blocks, fixed seprator 2018-03-26 22:49:33 -04:00
Anuken
707e57e72d Added many new block types, changed land unit AI, bugfixes 2018-03-26 20:26:36 -04:00
Anuken
f049706539 Updated uCore 2018-03-25 23:53:38 -04:00
Anuken
203e4bc0a4 Added ground unit factory support 2018-03-25 23:49:40 -04:00
Anuken
d6cd197435 Implemented new build shader 2018-03-25 16:47:01 -04:00
Anuken
684b57d139 Flying unit factory implementation, bugfixes 2018-03-25 15:04:29 -04:00
Anuken
3418979f4d Content class reorganization, beginning work on unit factory 2018-03-25 13:12:32 -04:00
Anuken
59530909d6 Added terrain exporting and importing 2018-03-25 00:44:25 -04:00
Anuken
674d259df1 Editor crude multiblock support, indexed renderer Z support 2018-03-24 18:19:39 -04:00
Anuken
3af18094f7 Fixed power passback, adjusted laser colors to depend on transfer amount 2018-03-24 11:12:21 -04:00
Anuken
9e309c9592 Changed uranium to thorium, fixed faulty vault transfer issues 2018-03-24 00:53:26 -04:00
Anuken
c73286358c Changed router passback function to take items into account 2018-03-23 23:00:08 -04:00
Anuken
967dab21bc Extra conflict fixes 2018-03-23 22:49:07 -04:00
Anuken
4e9d1d348e Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-03-23 22:48:51 -04:00
Anuken
7b3d60215b New power system implemented 2018-03-23 22:39:42 -04:00
Anuken
7d2fd514be Experimental power system changes 2018-03-23 20:17:35 -04:00
Anuken
2981dd857f Fixed some compile errors 2018-03-22 20:37:13 -04:00
Anuken
5b075ead9e Removed quartz and dirium, added plastic + dense alloy 2018-03-22 19:10:28 -04:00
Anuken
e5656896e7 Added text 2018-03-21 20:50:00 -04:00
Anuken
238c589ad6 Unified turret outlines, fixed saves not working 2018-03-21 20:04:59 -04:00
Anuken
85988a2ff9 More map editor improvements, turret outline rendering 2018-03-21 16:45:05 -04:00
Anuken
23e6f89eef Added very basic exporting, preview and a test map 2018-03-21 00:31:43 -04:00
Anuken
e330b28e49 Optimized map renderer to no longer lag out on crappy phones 2018-03-20 22:15:44 -04:00
Anuken
1984921883 WIP inefficient mesh renderer 2018-03-20 21:55:11 -04:00
Anuken
68f8ef54ac Removing CacheBatch due to performance issues 2018-03-20 20:14:39 -04:00
Anuken
940b8b72f9 Basic implementation of editor 2018-03-19 23:09:38 -04:00
Anuken
34f4eda1cf Fixed compile errors 2018-03-19 15:01:22 -04:00
Anuken
1b36325450 Fixed errors in everything except MapView 2018-03-18 23:24:12 -04:00
Anuken
0f8168324f Removed old maps, re-added map editor, broke compilation again 2018-03-18 22:30:33 -04:00
Anuken
172ac78466 New map format, completely broke loading or playing 2018-03-17 21:21:24 -04:00
Anuken
713875100b Everything has been broken 2018-03-17 12:22:21 -04:00
Anuken
ba84bb82b4 Implemented a basic unit 2018-03-17 00:41:56 -04:00
Anuken
ed0b796c5a Extra merge changes 2018-03-16 22:19:35 -04:00
Anuken
4a7c722673 Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-03-16 22:18:58 -04:00
Anuken
714fdc751a Added test unit type 2018-03-16 21:48:44 -04:00
Anuken
ad2e2032e6 Added GroundUnitType, compile fixed 2018-03-16 00:30:41 -04:00
Anuken
52c0a8e573 Fixed compile errors, unitification 2018-03-15 21:42:23 -04:00
Anuken
807c4688c2 Added Units class, removed writeString() from SaveFileVersion 2018-03-15 13:30:06 -04:00
Anuken
b4ec2ccb90 Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-03-15 12:57:03 -04:00
Anuken
155f3945a6 Progress on implementing unit teams 2018-03-15 00:19:05 -04:00
Anuken
0b2a933faa Fixed startup crash, implemented basic player animations 2018-03-14 23:03:27 -04:00
Anuken
01ba051c43 Fixed compilation errors 2018-03-14 20:15:25 -04:00
Anuken
1cd30e9057 Mass-deletion of enemy code 2018-03-14 18:02:35 -04:00
Anuken
a023c4fbac Fixed positions jumping with shader zoom-out 2018-03-14 14:13:06 -04:00
Anuken
99c12595a9 Animated oil blocks as well 2018-03-14 12:57:30 -04:00
Anuken
3056e9e79c Animated water 2018-03-13 22:34:52 -04:00
Anuken
b822a02d41 Added cryofluid mixer, liquid rebalancing 2018-03-13 18:54:28 -04:00
Anuken
539971b5a0 Changed oil extractor sprite 2018-03-13 11:38:56 -04:00
Anuken
2a0d3b05d3 Added oil extractor 2018-03-13 01:16:15 -04:00
Anuken
d1b51844e4 Changed laser transitions and effects 2018-03-13 00:16:40 -04:00
Anuken
94b815b8ab Added groundwater pump, 3x3 solar panels 2018-03-12 22:02:52 -04:00
Anuken
e67ddf9430 Added liquid silos, general liquid cleanup 2018-03-12 16:09:14 -04:00
Anuken
9674ca5e87 Fixed some problems with Generators 2018-03-11 10:07:12 -04:00
Anuken
5834dc9b2e Improved laser visuals 2018-03-11 09:46:57 -04:00
Anuken
9d49c7d836 Implemented new display/icon system for power lasers/batteries 2018-03-10 23:32:13 -05:00
Anuken
3ce7284fc5 Added batteries, 3x3 teleporter 2018-03-10 20:28:25 -05:00
Anuken
bf6e33791d Added sorted unloader and new block group system 2018-03-10 15:22:34 -05:00
Anuken
6a11f0dd8d Fixed improper drill time display 2018-03-10 13:30:33 -05:00
Anuken
83452b1e36 Fixed many crashes, refactored block bars 2018-03-10 12:13:42 -05:00
Anuken
d88a908e29 Changed plasma drill stats 2018-03-09 23:08:27 -05:00
Anuken
9c05ddbd7d Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	core/assets/sprites/sprites.atlas
#	core/assets/version.properties
2018-03-09 20:58:21 -05:00
Anuken
89ca9ad213 Added generic drill class, cleanup of other subclasses 2018-03-09 20:57:12 -05:00
Anuken
c46f1ec590 Added LiquidDrill 2018-03-09 10:09:32 -05:00
Anuken
3131e8c7e9 Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0 2018-03-08 22:34:26 -05:00
Anuken
7d8b0f9941 Version modification 2018-03-08 22:32:34 -05:00
Anuken
d3313d6438 Fixed outstanding block type crashes 2018-03-08 16:59:39 -05:00
Anuken
c611066791 Completely borked liquid/power/inventory system 2018-03-07 22:54:12 -05:00
Anuken
1e456d6560 Changed biomatter extractor texture 2018-03-06 17:46:24 -05:00
Anuken
6a564f6693 Fixed some generator bugs, implemented laser drill properly 2018-03-05 23:26:53 -05:00
Anuken
45a3be7642 Refactoring of generators, added solar panel, power drills 2018-03-05 22:12:33 -05:00
Anuken
a25b6a9952 Added biomatter extractor, sulfuric acid 2018-03-05 16:38:13 -05:00
Anuken
25063ed1f0 Added new turret sprites 2018-03-05 14:10:52 -05:00
Anuken
292dbf101b More reorganization, implemented multiblock drills, API changes 2018-03-04 22:00:32 -05:00
Anuken
099d88ba7b Retexturing, changed mega repair turret size 2018-03-04 16:29:54 -05:00
Anuken
992fcc73b8 Added liquid tunnel recipe, fixed crashes/bugs 2018-03-04 00:17:30 -05:00
Anuken
9b3c9aaea2 Storage blocks, organized sprites, liquid tunnel implementation 2018-03-03 23:46:51 -05:00
Anuken
41e4f87e06 Merge fixes 2018-03-03 18:08:35 -05:00
Anuken
6de48b4535 Merge branches '4.0' and 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	core/assets/version.properties
#	core/src/io/anuke/mindustry/core/NetClient.java
#	core/src/io/anuke/mindustry/world/Tile.java
2018-03-03 18:06:57 -05:00
Anuken
70b104c936 Cleanup of Tile 2018-03-03 18:03:15 -05:00
Anuken
827f72f595 Added canDump for vaults, better vault icon 2018-03-02 09:04:44 -05:00
Anuken
5faff6260e Implemented multiblock output, broke router chaining 2018-03-01 23:36:48 -05:00
Anuken
59e8a85c7e Added Edges class, broke tiles and saving 2018-02-28 23:16:35 -05:00
Anuken
d3ec50825e Merge branch 'master' of https://github.com/Anuken/Mindustry into 4.0
# Conflicts:
#	core/assets/sprites/sprites.atlas
#	core/assets/sprites/sprites.png
#	core/assets/version.properties
#	core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java
2018-02-27 19:58:34 -05:00
Anuken
2518564f92 Added Vault block 2018-02-23 10:26:47 -05:00
Anuken
81de9875d3 New resources, blocks, core no longer accepts fuel materials 2018-02-22 20:12:20 -05:00
Anuken
eae07c15a7 Added pulverizer, new temporary laser graphics, debug power blocks 2018-02-21 23:28:02 -05:00
Anuken
1fdffa8be5 Added splitter, power smelter, new sections 2018-02-21 22:29:15 -05:00
1400 changed files with 59269 additions and 29806 deletions

8
.gitignore vendored
View File

@@ -2,6 +2,7 @@
/core/assets/mindustry-saves/ /core/assets/mindustry-saves/
/core/assets/mindustry-maps/ /core/assets/mindustry-maps/
/core/assets/bundles/output/
/deploy/ /deploy/
/desktop/packr-out/ /desktop/packr-out/
/desktop/packr-export/ /desktop/packr-export/
@@ -9,14 +10,21 @@
/desktop/mindustry-maps/ /desktop/mindustry-maps/
/desktop/gifexport/ /desktop/gifexport/
/core/lib/ /core/lib/
/core/assets-raw/sprites/generated/
/annotations/build/
/kryonet/build/ /kryonet/build/
/packer/build/
/server/build/ /server/build/
/annotations/build/
/android/assets/mindustry-maps/ /android/assets/mindustry-maps/
/android/assets/mindustry-saves/ /android/assets/mindustry-saves/
/core/assets/gifexport/ /core/assets/gifexport/
/core/assets/version.properties /core/assets/version.properties
/core/assets/locales.json
*.gif *.gif
version.properties
.attach_* .attach_*
## Java ## Java

View File

@@ -5,13 +5,14 @@ jdk:
android: android:
components: components:
- android-26 - android-27
# Additional components # Additional components
- extra-google-google_play_services - extra-google-google_play_services
- extra-google-m2repository - extra-google-m2repository
- extra-android-m2repository - extra-android-m2repository
- addon-google_apis-google-26 - addon-google_apis-google-27
- build-tools-27.0.3
script: script:
- ./gradlew desktop:dist - ./gradlew desktop:dist

View File

@@ -1,11 +1,9 @@
![Imgur](https://i.imgur.com/w4N0yhv.png) ![Imgur](https://i.imgur.com/w4N0yhv.png)
[![Build Status](https://travis-ci.org/Anuken/Mindustry.svg?branch=master)](https://travis-ci.org/Anuken/Mindustry) [![Build Status](https://travis-ci.org/Anuken/Mindustry.svg?branch=master)](https://travis-ci.org/Anuken/Mindustry)
[![Waffle.io - Columns and their card count](https://badge.waffle.io/Anuken/Mindustry.svg?columns=all)](https://waffle.io/Anuken/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 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).
_[Issue tracker](https://waffle.io/Anuken/Mindustry)_
_[Trello Board](https://trello.com/b/aE2tcUwF/mindustry-40-plans)_ _[Trello Board](https://trello.com/b/aE2tcUwF/mindustry-40-plans)_
_[Wiki](http://mindustry.wikia.com/wiki/Mindustry_Wiki)_ _[Wiki](http://mindustry.wikia.com/wiki/Mindustry_Wiki)_
_[Discord](https://discord.gg/r8BkXNd)_ _[Discord](https://discord.gg/r8BkXNd)_
@@ -38,6 +36,4 @@ After building, the output .JAR file should be in the output JAR file should be
<a href="https://anuke.itch.io/mindustry"><img src="https://i.imgur.com/sk26hTV.png" width="auto" height="75"></a> <a href="https://anuke.itch.io/mindustry"><img src="https://i.imgur.com/sk26hTV.png" width="auto" height="75"></a>
<a href="https://anuke.itch.io/mindustry"><img src="https://i.imgur.com/ZSPVQpn.gif" width="auto" height="75"></a>
<a href="https://play.google.com/store/apps/details?id=io.anuke.mindustry&hl=en"><img src="https://i.imgur.com/8dF6l81.png" width="auto" height="75"></a> <a href="https://play.google.com/store/apps/details?id=io.anuke.mindustry&hl=en"><img src="https://i.imgur.com/8dF6l81.png" width="auto" height="75"></a>

39
TRANSLATING.md Normal file
View File

@@ -0,0 +1,39 @@
## Translating for Mindustry
**DISCLAIMER:** *Currently, 4.0 is far from done, which means that things such as block names, descriptions, and core text will be changing often. If you begin translating now, you might have to re-do large chunks of the bundle before final release.*
To begin, log in to your GitHub account, or if you don't have one yet, create it [here](https://github.com/).
Consult [this list](https://www.science.co.il/language/Locale-codes.php) to find the locale code for your language. Once you've found it,
head over to the translation bundle folder and check the [list of bundles](https://github.com/Anuken/Mindustry/tree/master/core/assets/bundles) that have already been created.
You're looking for a file called "`bundle_`(insert locale code here)`.properties`".
#### Editing an existing translation
If a translation bundle already exists, that means someone has already started working on a translation. To edit it or translate text, simply click the file and press the edit (pencil) button in the top right. Once you're done editing, press the green "propose file change" button at the bottom, then "create pull request" (twice).
Once this is done, all you need to do is wait for me to approve your changes.
#### Creating a new translation bundle
If a translation bundle for your language *doesn't* exist, you need to create one yourself.
In the folder with all the bundles in it, click the *'create new file'* button, and name it `bundle_(locale code here).properties`.
Then, copy-paste the entire contents of the [English translation bundle](https://raw.githubusercontent.com/Anuken/Mindustry/master/core/assets/bundles/bundle.properties) into the file, and translate all the necessary text to your language.
Once you are done, press the *propose new file* button at the bottom, then 'create pull request twice'.
#### Useful Information
- When you see text surrounded by square brackets, such as `[RED]`, `[]` or `[accent]`, this indicates a color code. Don't translate it.
- `{0}` means an argument that will be replaced when the text is displayed. For example, `Wave: {0}` will replace the `{0}` with whatever wave you are in.
- Empty lines are fine, and it doesn't matter in what order you place the text.
- `\n` means "new line". If you want to split text into multiple lines, use `\n` to do it.
#### Testing your translation bundle
There are two ways to test the translation bundle:
1) Assuming you have the PC version downloaded, download your bundle file, name it `bundle.properties`, then place it in the same folder as the Mindustry desktop executable and run it. *You should get a popup message in-game confirming that you have loaded an external translation.*
2) For advanced users: simply download your fork of mindustry and compile/run the game.
**And that's it.**
*(...of course, that's never really it. Bother me on Discord when something inevitably goes wrong.)*

View File

@@ -9,22 +9,58 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<application <application
android:allowBackup="true" android:resizeableActivity="false"
android:icon="@mipmap/ic_launcher" android:allowBackup="true"
android:roundIcon="@mipmap/ic_launcher_round" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/GdxTheme" > android:isGame="true"
android:appCategory="game"
android:label="@string/app_name"
android:theme="@style/GdxTheme" android:fullBackupContent="@xml/backup_rules">
<activity <activity
android:name="io.anuke.mindustry.AndroidLauncher" android:name="io.anuke.mindustry.AndroidLauncher"
android:label="@string/app_name" android:label="@string/app_name"
android:screenOrientation="sensorLandscape" android:screenOrientation="user"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="application/octet-stream"/>
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="application/octet-stream"/>
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav" />
</intent-filter>
<intent-filter android:icon="@mipmap/ic_launcher"
android:label="Mindustry Map"
android:priority="1">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.mmap" android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" android:host="*" android:pathPattern=".*\\.msav" android:mimeType="*/*" />
</intent-filter>
</activity> </activity>
<activity android:name=".DonationsActivity" <activity android:name=".DonationsActivity"
android:theme="@style/GdxTheme" /> android:theme="@style/GdxTheme" />

View File

@@ -1,4 +1,8 @@
apply plugin: "com.android.application"
configurations { natives }
repositories { repositories {
mavenCentral() mavenCentral()
jcenter() jcenter()
@@ -8,8 +12,19 @@ repositories {
} }
dependencies { dependencies {
implementation 'com.android.support:support-v4:22.1.1' implementation project(":core")
implementation project(":kryonet")
implementation 'com.android.support:support-v4:25.3.1'
implementation 'org.sufficientlysecure:donations:2.5' implementation 'org.sufficientlysecure:donations:2.5'
implementation 'com.google.android.gms:play-services-auth:11.8.0'
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
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-controllers-android:$gdxVersion"
} }
task deploy(type: Copy){ task deploy(type: Copy){
@@ -21,8 +36,8 @@ task deploy(type: Copy){
} }
android { android {
buildToolsVersion '26.0.2' buildToolsVersion '27.0.3'
compileSdkVersion 26 compileSdkVersion 27
sourceSets { sourceSets {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
@@ -34,7 +49,7 @@ android {
jniLibs.srcDirs = ['libs'] jniLibs.srcDirs = ['libs']
} }
instrumentTest.setRoot('tests') androidTest.setRoot('tests')
} }
packagingOptions { packagingOptions {
exclude 'META-INF/robovm/ios/robovm.xml' exclude 'META-INF/robovm/ios/robovm.xml'
@@ -42,18 +57,26 @@ android {
defaultConfig { defaultConfig {
def vfile = file('../core/assets/version.properties') def vfile = file('../core/assets/version.properties')
def props = new Properties()
props.load(new FileInputStream(vfile))
def code = props['androidBuildCode'].toInteger() + 1 def code = 0
props['androidBuildCode'] = code.toString() def versionNameResult = "unknown"
props.store(vfile.newWriter(), "Autogenerated file. Do not modify.")
if(vfile.exists()){
def props = new Properties()
props.load(new FileInputStream(vfile))
code = (props['androidBuildCode'] == null ? 0 : props['androidBuildCode']).toInteger() + 1
props['androidBuildCode'] = code.toString()
props.store(vfile.newWriter(), "Autogenerated file. Do not modify.")
versionNameResult = "$versionNumber-$versionType-${props['build'].replace(" ", "-")}"
}
applicationId "io.anuke.mindustry" applicationId "io.anuke.mindustry"
minSdkVersion 9 minSdkVersion 14
targetSdkVersion 26 targetSdkVersion 27
versionCode code versionCode code
versionName "$versionNumber-$versionType-${props['build'].replace(" ", "-")}" versionName versionNameResult
} }
compileOptions { compileOptions {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp" >
<EditText
android:id="@+id/gdxDialogsEditTextInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1"
android:maxLength="15"
>
<requestFocus />
</EditText>
</LinearLayout>

View File

@@ -6,27 +6,6 @@
android:orientation="vertical" android:orientation="vertical"
android:padding="10dp" > android:padding="10dp" >
<TextView
android:id="@+id/gdxDialogsEnterTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
android:id="@+id/gdxDialogsEnterMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<EditText <EditText
android:id="@+id/gdxDialogsEditTextInput" android:id="@+id/gdxDialogsEditTextInput"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<style name="GdxTheme" parent="android:Theme.Material.NoActionBar"> <style name="GdxTheme" parent="android:Theme.Material.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item> <item name="android:colorBackgroundCacheHint">@null</item>
@@ -9,11 +8,4 @@
<item name="android:windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item>
<item name="android:windowFullscreen">true</item> <item name="android:windowFullscreen">true</item>
</style> </style>
<style name="LightBackground" parent="android:Theme.Material.Light" >
<item name="android:colorBackground">@android:color/black</item>
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/white</item>
<item name="android:textColorSecondaryInverse">@android:color/white</item>
</style>
</resources> </resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
</full-backup-content>

View File

@@ -3,164 +3,255 @@ package io.anuke.mindustry;
import android.Manifest; import android.Manifest;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings.Secure; import android.provider.Settings.Secure;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import com.badlogic.gdx.backends.android.AndroidApplication; import android.util.Log;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Base64Coder; 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.DefaultThreadImpl; import io.anuke.kryonet.DefaultThreadImpl;
import io.anuke.kryonet.KryoClient; import io.anuke.kryonet.KryoClient;
import io.anuke.kryonet.KryoServer; import io.anuke.kryonet.KryoServer;
import io.anuke.mindustry.core.Platform;
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider; import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
import io.anuke.mindustry.io.Platform; import io.anuke.mindustry.game.Saves.SaveSlot;
import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.ucore.core.Settings; import io.anuke.mindustry.ui.dialogs.FileChooser;
import io.anuke.ucore.function.Consumer;
import io.anuke.ucore.scene.ui.TextField; import io.anuke.ucore.scene.ui.TextField;
import io.anuke.ucore.scene.ui.layout.Unit; 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;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Random;
public class AndroidLauncher extends AndroidApplication{ import static io.anuke.mindustry.Vars.*;
boolean doubleScaleTablets = true;
int WRITE_REQUEST_CODE = 1;
@Override public class AndroidLauncher extends PatchedAndroidApplication{
protected void onCreate(Bundle savedInstanceState){ public static final int PERMISSION_REQUEST_CODE = 1;
super.onCreate(savedInstanceState); boolean doubleScaleTablets = true;
FileChooser chooser;
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); @Override
config.useImmersiveMode = true; protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.useImmersiveMode = true;
Platform.instance = new Platform(){
DateFormat format = SimpleDateFormat.getDateTimeInstance();
Platform.instance = new Platform(){ @Override
DateFormat format = SimpleDateFormat.getDateTimeInstance(); public boolean hasDiscord(){
return isPackageInstalled("com.discord");
}
@Override @Override
public boolean hasDiscord() { public String format(Date date){
return isPackageInstalled("com.discord"); return format.format(date);
} }
@Override @Override
public String format(Date date){ public String format(int number){
return format.format(date); return NumberFormat.getIntegerInstance().format(number);
} }
@Override @Override
public String format(int number){ public void addDialog(TextField field, int length){
return NumberFormat.getIntegerInstance().format(number); TextFieldDialogListener.add(field, 0, length);
} }
@Override @Override
public void addDialog(TextField field, int length){ public String getLocaleName(Locale locale){
TextFieldDialogListener.add(field, 0, length); return locale.getDisplayName(locale);
} }
@Override @Override
public String getLocaleName(Locale locale){ public void openDonations(){
return locale.getDisplayName(locale); showDonations();
} }
@Override @Override
public void openDonations() { public ThreadProvider getThreadProvider(){
showDonations(); return new DefaultThreadImpl();
} }
@Override @Override
public void requestWritePerms() { public boolean isDebug(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return false;
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && }
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, WRITE_REQUEST_CODE);
}else{
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { @Override
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_REQUEST_CODE); public String getUUID(){
} try{
String s = Secure.getString(getContext().getContentResolver(),
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { Secure.ANDROID_ID);
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, WRITE_REQUEST_CODE); int len = s.length();
} byte[] data = new byte[len / 2];
} for(int i = 0; i < len; i += 2){
} data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
} + Character.digit(s.charAt(i + 1), 16));
@Override
public ThreadProvider getThreadProvider() {
return new DefaultThreadImpl();
}
@Override
public boolean isDebug() {
return false;
}
@Override
public byte[] getUUID() {
try {
String s = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}catch (Exception e){
Settings.defaults("uuid", "");
String uuid = Settings.getString("uuid");
if(uuid.isEmpty()){
byte[] result = new byte[8];
new Random().nextBytes(result);
uuid = new String(Base64Coder.encode(result));
Settings.putString("uuid", uuid);
Settings.save();
return result;
} }
return Base64Coder.decode(uuid); String result = new String(Base64Coder.encode(data));
} if(result.equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID.");
} return result;
}; }catch(Exception e){
return super.getUUID();
}
}
if(doubleScaleTablets && isTablet(this.getContext())){ @Override
Unit.dp.addition = 0.5f; public void shareFile(FileHandle file){
} }
config.hideStatusBar = true; @Override
public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){
chooser = new FileChooser(text, file -> file.extension().equalsIgnoreCase(filetype), open, cons);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M || (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)){
chooser.show();
chooser = null;
}else{
ArrayList<String> perms = new ArrayList<>();
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
perms.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
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);
}
}
@Override
public void beginForceLandscape(){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
@Override
public void endForceLandscape(){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
@Override
public boolean canDonate(){
return true;
}
};
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.setClientProvider(new KryoClient());
Net.setServerProvider(new KryoServer()); Net.setServerProvider(new KryoServer());
initialize(new Mindustry(), config); initialize(new Mindustry(), config);
} checkFiles(getIntent());
}
private boolean isPackageInstalled(String packagename) { @Override
try { public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
getPackageManager().getPackageInfo(packagename, 0); if(requestCode == PERMISSION_REQUEST_CODE){
return true; for(int i : grantResults){
} catch (Exception e) { if(i != PackageManager.PERMISSION_GRANTED) return;
return false; }
} if(chooser != null){
} chooser.show();
}
}
}
private boolean isTablet(Context context) { private void checkFiles(Intent intent){
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); try{
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE; Uri uri = intent.getData();
} if(uri != null){
File myFile = null;
String scheme = uri.getScheme();
if(scheme.equals("file")){
String fileName = uri.getEncodedPath();
myFile = new File(fileName);
}else if(!scheme.equals("content")){
//error
return;
}
boolean save = uri.getPath().endsWith(saveExtension);
boolean map = uri.getPath().endsWith(mapExtension);
InputStream inStream;
if(myFile != null) inStream = new FileInputStream(myFile);
else inStream = getContentResolver().openInputStream(uri);
Gdx.app.postRunnable(() -> {
if(save){ //open save
System.out.println("Opening save.");
FileHandle file = Gdx.files.local("temp-save." + saveExtension);
file.write(inStream, false);
if(SaveIO.isSaveValid(file)){
try{
SaveSlot slot = control.getSaves().importSave(file);
ui.load.runLoadSave(slot);
}catch(IOException e){
ui.showError(Bundles.format("text.save.import.fail", Strings.parseException(e, false)));
}
}else{
ui.showError("$text.save.import.invalid");
}
}else if(map){ //open map
Gdx.app.postRunnable(() -> {
System.out.println("Opening map.");
if(!ui.editor.isShown()){
ui.editor.show();
}
ui.editor.beginEditMap(inStream);
});
}
});
}
}catch(IOException e){
e.printStackTrace();
}
}
private void showDonations(){ private boolean isPackageInstalled(String packagename){
Intent intent = new Intent(this, DonationsActivity.class); try{
startActivity(intent); 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);
}
} }

View File

@@ -11,21 +11,20 @@ import android.widget.EditText;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
public class AndroidTextFieldDialog{ public class AndroidTextFieldDialog{
private Activity activity; private Activity activity;
private EditText userInput; private EditText userInput;
private AlertDialog.Builder builder; private AlertDialog.Builder builder;
private TextPromptListener listener; private TextPromptListener listener;
private boolean isBuild; private boolean isBuild;
public AndroidTextFieldDialog() { public AndroidTextFieldDialog(){
this.activity = (Activity)Gdx.app; this.activity = (Activity) Gdx.app;
load(); load();
} }
public AndroidTextFieldDialog show() { public AndroidTextFieldDialog show(){
activity.runOnUiThread(() -> { activity.runOnUiThread(() -> {
Gdx.app.error("Android Dialogs", AndroidTextFieldDialog.class.getSimpleName() + " now shown.");
AlertDialog dialog = builder.create(); AlertDialog dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
@@ -34,12 +33,12 @@ public class AndroidTextFieldDialog{
}); });
return this; return this;
} }
private AndroidTextFieldDialog load() { private AndroidTextFieldDialog load(){
activity.runOnUiThread(() -> { activity.runOnUiThread(() -> {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
LayoutInflater li = LayoutInflater.from(activity); LayoutInflater li = LayoutInflater.from(activity);
@@ -48,7 +47,7 @@ public class AndroidTextFieldDialog{
alertDialogBuilder.setView(promptsView); alertDialogBuilder.setView(promptsView);
userInput = (EditText) promptsView.findViewById(getResourceId("gdxDialogsEditTextInput", "id")); userInput = promptsView.findViewById(getResourceId("gdxDialogsEditTextInput", "id"));
alertDialogBuilder.setCancelable(false); alertDialogBuilder.setCancelable(false);
builder = alertDialogBuilder; builder = alertDialogBuilder;
@@ -56,64 +55,65 @@ public class AndroidTextFieldDialog{
isBuild = true; isBuild = true;
}); });
// Wait till TextPrompt is built. // Wait till TextPrompt is built.
while (!isBuild) { while(!isBuild){
try { try{
Thread.sleep(10); Thread.sleep(10);
} catch (InterruptedException e) { } }catch(InterruptedException e){
} }
}
return this; return this;
} }
public int getResourceId(String pVariableName, String pVariableType) { public int getResourceId(String pVariableName, String pVariableType){
try { try{
return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName()); return activity.getResources().getIdentifier(pVariableName, pVariableType, activity.getPackageName());
} catch (Exception e) { }catch(Exception e){
Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName Gdx.app.error("Android Dialogs", "Cannot find resouce with name: " + pVariableName
+ " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?"); + " Did you copy the layouts to /res/layouts and /res/layouts_v14 ?");
e.printStackTrace(); e.printStackTrace();
return -1; return -1;
} }
} }
public AndroidTextFieldDialog setText(CharSequence value) { public AndroidTextFieldDialog setText(CharSequence value){
userInput.append(value); userInput.append(value);
return this; return this;
} }
public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label) { public AndroidTextFieldDialog setCancelButtonLabel(CharSequence label){
builder.setNegativeButton(label, (dialog, id) -> dialog.cancel()); builder.setNegativeButton(label, (dialog, id) -> dialog.cancel());
return this; return this;
} }
public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label) { public AndroidTextFieldDialog setConfirmButtonLabel(CharSequence label){
builder.setPositiveButton(label, (dialog, id) -> { builder.setPositiveButton(label, (dialog, id) -> {
if (listener != null && !userInput.getText().toString().isEmpty()) { if(listener != null && !userInput.getText().toString().isEmpty()){
listener.confirm(userInput.getText().toString()); listener.confirm(userInput.getText().toString());
} }
}); });
return this; return this;
} }
public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener) { public AndroidTextFieldDialog setTextPromptListener(TextPromptListener listener){
this.listener = listener; this.listener = listener;
return this; return this;
} }
public AndroidTextFieldDialog setInputType(int type) { public AndroidTextFieldDialog setInputType(int type){
userInput.setInputType(type); userInput.setInputType(type);
return this; return this;
} }
public AndroidTextFieldDialog setMaxLength(int length) { public AndroidTextFieldDialog setMaxLength(int length){
userInput.setFilters(new InputFilter[] { new InputFilter.LengthFilter(length) }); userInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)});
return this; return this;
} }
public interface TextPromptListener{ public interface TextPromptListener{
void confirm(String text); void confirm(String text);
} }
} }

View File

@@ -8,12 +8,9 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import org.sufficientlysecure.donations.DonationsFragment; import org.sufficientlysecure.donations.DonationsFragment;
public class DonationsActivity extends FragmentActivity { public class DonationsActivity extends FragmentActivity{
DonationsFragment donationsFragment;
/** /**
* Google * Google
*/ */
@@ -21,13 +18,14 @@ public class DonationsActivity extends FragmentActivity {
private static final String[] GOOGLE_CATALOG = new String[]{ private static final String[] GOOGLE_CATALOG = new String[]{
"mindustry.donation.1", "mindustry.donation.2", "mindustry.donation.5", "mindustry.donation.1", "mindustry.donation.2", "mindustry.donation.5",
"mindustry.donation.10", "mindustry.donation.15", "mindustry.donation.10", "mindustry.donation.15",
"mindustry.donation.25", "mindustry.donation.50" }; "mindustry.donation.25", "mindustry.donation.50"};
DonationsFragment donationsFragment;
/** /**
* Called when the activity is first created. * Called when the activity is first created.
*/ */
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setTheme(R.style.GdxTheme); setTheme(R.style.GdxTheme);
@@ -35,7 +33,7 @@ public class DonationsActivity extends FragmentActivity {
setContentView(R.layout.donations_activity); setContentView(R.layout.donations_activity);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if (BuildConfig.DONATIONS_GOOGLE) { if(BuildConfig.DONATIONS_GOOGLE){
donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG, donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG,
getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null, getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null,
null, false, null, null, false, null); null, false, null, null, false, null);
@@ -48,9 +46,10 @@ public class DonationsActivity extends FragmentActivity {
public void onStart(){ public void onStart(){
super.onStart(); super.onStart();
Button b = ((Button)findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button)); Button b = ((Button) findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
b.setOnClickListener(new View.OnClickListener() { b.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View view) { @Override
public void onClick(View view){
donationsFragment.donateGoogleOnClick(donationsFragment.getView()); donationsFragment.donateGoogleOnClick(donationsFragment.getView());
b.setEnabled(false); b.setEnabled(false);
} }
@@ -58,20 +57,19 @@ public class DonationsActivity extends FragmentActivity {
} }
/** /**
* Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to * 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. * the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment.
*/ */
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
Button b = ((Button)findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button)); Button b = ((Button) findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button));
b.setEnabled(true); b.setEnabled(true);
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment"); Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment");
if (fragment != null) { if(fragment != null){
fragment.onActivityResult(requestCode, resultCode, data); fragment.onActivityResult(requestCode, resultCode, data);
//TODO donation event, set settings? //TODO donation event, set settings?
} }

View File

@@ -0,0 +1,20 @@
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();
}
}

View File

@@ -11,57 +11,57 @@ import io.anuke.ucore.scene.event.InputListener;
import io.anuke.ucore.scene.ui.TextField; import io.anuke.ucore.scene.ui.TextField;
public class TextFieldDialogListener extends ClickListener{ public class TextFieldDialogListener extends ClickListener{
private TextField field; private TextField field;
private int type; private int type;
private int max; private int max;
public static void add(TextField field, int type, int max){ //type - 0 is text, 1 is numbers, 2 is decimals
field.addListener(new TextFieldDialogListener(field, type, max)); public TextFieldDialogListener(TextField field, int type, int max){
field.addListener(new InputListener(){ this.field = field;
public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { this.type = type;
Gdx.input.setOnscreenKeyboardVisible(false); this.max = max;
return false; }
}
});
}
public static void add(TextField field){ public static void add(TextField field, int type, int max){
add(field, 0, 15); field.addListener(new TextFieldDialogListener(field, type, max));
} field.addListener(new InputListener(){
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
Gdx.input.setOnscreenKeyboardVisible(false);
return false;
}
});
}
//type - 0 is text, 1 is numbers, 2 is decimals public static void add(TextField field){
public TextFieldDialogListener(TextField field, int type, int max){ add(field, 0, 16);
this.field = field; }
this.type = type;
this.max = max;
}
public void clicked(final InputEvent event, float x, float y){ public void clicked(final InputEvent event, float x, float y){
if(Gdx.app.getType() == ApplicationType.Desktop) return; if(Gdx.app.getType() == ApplicationType.Desktop) return;
AndroidTextFieldDialog dialog = new AndroidTextFieldDialog(); AndroidTextFieldDialog dialog = new AndroidTextFieldDialog();
dialog.setTextPromptListener(text -> { dialog.setTextPromptListener(text -> {
field.clearText(); field.clearText();
field.appendText(text); field.appendText(text);
field.fire(new ChangeListener.ChangeEvent()); field.fire(new ChangeListener.ChangeEvent());
Gdx.graphics.requestRendering(); Gdx.graphics.requestRendering();
}); });
if(type == 0){ if(type == 0){
dialog.setInputType(InputType.TYPE_CLASS_TEXT); dialog.setInputType(InputType.TYPE_CLASS_TEXT);
}else if(type == 1){ }else if(type == 1){
dialog.setInputType(InputType.TYPE_CLASS_NUMBER); dialog.setInputType(InputType.TYPE_CLASS_NUMBER);
}else if(type == 2){ }else if(type == 2){
dialog.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL); dialog.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
} }
dialog.setConfirmButtonLabel("OK").setText(field.getText()); dialog.setConfirmButtonLabel("OK").setText(field.getText());
dialog.setCancelButtonLabel("Cancel"); dialog.setCancelButtonLabel("Cancel");
dialog.setMaxLength(max); dialog.setMaxLength(max);
dialog.show(); dialog.show();
event.cancel(); event.cancel();
} }
} }

4
annotations/build.gradle Normal file
View File

@@ -0,0 +1,4 @@
apply plugin: "java"
sourceCompatibility = 1.8
sourceSets.main.java.srcDirs = [ "src/" ]

View File

@@ -0,0 +1,108 @@
package io.anuke.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Goal: To create a system to send events to the server from the client and vice versa, without creating a new packet type each time.<br>
* These events may optionally also trigger on the caller client/server as well.<br>
*/
public class Annotations{
public enum PacketPriority{
/** Gets put in a queue and processed if not connected. */
normal,
/** Gets handled immediately, regardless of connection status. */
high,
/** Does not get handled unless client is connected. */
low
}
/** A set of two booleans, one specifying server and one specifying client. */
public enum Loc{
/** Method can only be invoked on the client from the server. */
server(true, false),
/** Method can only be invoked on the server from the client. */
client(false, true),
/** Method can be invoked from anywhere */
both(true, true),
/** Neither server nor client. */
none(false, false);
/** If true, this method can be invoked ON clients FROM servers. */
public final boolean isServer;
/** If true, this method can be invoked ON servers FROM clients. */
public final boolean isClient;
Loc(boolean server, boolean client){
this.isServer = server;
this.isClient = client;
}
}
public enum Variant{
/** Method can only be invoked targeting one player. */
one(true, false),
/** Method can only be invoked targeting all players. */
all(false, true),
/** Method targets both one player and all players. */
both(true, true);
public final boolean isOne, isAll;
Variant(boolean isOne, boolean isAll){
this.isOne = isOne;
this.isAll = isAll;
}
}
/** Marks a method as invokable remotely across a server/client connection. */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface Remote{
/** Specifies the locations from which this method can be invoked. */
Loc targets() default Loc.server;
/** Specifies which methods are generated. Only affects server-to-client methods. */
Variant variants() default Variant.all;
/** The local locations where this method is called locally, when invoked. */
Loc called() default Loc.none;
/** Whether to forward this packet to all other clients upon recieval. Client only. */
boolean forward() default false;
/**
* Whether the packet for this method is sent with UDP instead of TCP.
* UDP is faster, but is prone to packet loss and duplication.
*/
boolean unreliable() default false;
/** Priority of this event. */
PacketPriority priority() default PacketPriority.normal;
}
/**
* Specifies that this method will be used to write classes of the type returned by {@link #value()}.<br>
* This method must return void and have two parameters, the first being of type {@link java.nio.ByteBuffer} and the second
* being the type returned by {@link #value()}.
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface WriteClass{
Class<?> value();
}
/**
* Specifies that this method will be used to read classes of the type returned by {@link #value()}. <br>
* This method must return the type returned by {@link #value()},
* and have one parameter, being of type {@link java.nio.ByteBuffer}.
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface ReadClass{
Class<?> value();
}
}

View File

@@ -0,0 +1,15 @@
package io.anuke.annotations;
import java.util.ArrayList;
/** Represents a class witha list method entries to include in it. */
public class ClassEntry{
/** All methods in this generated class. */
public final ArrayList<MethodEntry> methods = new ArrayList<>();
/** Simple class name. */
public final String name;
public ClassEntry(String name){
this.name = name;
}
}

View File

@@ -0,0 +1,90 @@
package io.anuke.annotations;
import io.anuke.annotations.Annotations.ReadClass;
import io.anuke.annotations.Annotations.WriteClass;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.type.MirroredTypeException;
import javax.tools.Diagnostic.Kind;
import java.util.HashMap;
import java.util.Set;
/**
* This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
* and {@link io.anuke.annotations.Annotations.ReadClass} annotations.
*/
public class IOFinder{
/**
* Finds all class serializers for all types and returns them. Logs errors when necessary.
* Maps fully qualified class names to their serializers.
*/
public HashMap<String, ClassSerializer> findSerializers(RoundEnvironment env){
HashMap<String, ClassSerializer> result = new HashMap<>();
//get methods with the types
Set<? extends Element> writers = env.getElementsAnnotatedWith(WriteClass.class);
Set<? extends Element> readers = env.getElementsAnnotatedWith(ReadClass.class);
//look for writers first
for(Element writer : writers){
WriteClass writean = writer.getAnnotation(WriteClass.class);
String typeName = getValue(writean);
//make sure there's only one read method
if(readers.stream().filter(elem -> getValue(elem.getAnnotation(ReadClass.class)).equals(typeName)).count() > 1){
Utils.messager.printMessage(Kind.ERROR, "Multiple writer methods for type '" + typeName + "'", writer);
}
//make sure there's only one write method
long count = readers.stream().filter(elem -> getValue(elem.getAnnotation(ReadClass.class)).equals(typeName)).count();
if(count == 0){
Utils.messager.printMessage(Kind.ERROR, "Writer method does not have an accompanying reader: ", writer);
}else if(count > 1){
Utils.messager.printMessage(Kind.ERROR, "Writer method has multiple reader for type: ", writer);
}
Element reader = readers.stream().filter(elem -> getValue(elem.getAnnotation(ReadClass.class)).equals(typeName)).findFirst().get();
//add to result list
result.put(typeName, new ClassSerializer(Utils.getMethodName(reader), Utils.getMethodName(writer), typeName));
}
return result;
}
private String getValue(WriteClass write){
try{
Class<?> type = write.value();
return type.getName();
}catch(MirroredTypeException e){
return e.getTypeMirror().toString();
}
}
private String getValue(ReadClass read){
try{
Class<?> type = read.value();
return type.getName();
}catch(MirroredTypeException e){
return e.getTypeMirror().toString();
}
}
/** Information about read/write methods for a specific class type. */
public static class ClassSerializer{
/** Fully qualified method name of the reader. */
public final String readMethod;
/** Fully qualified method name of the writer. */
public final String writeMethod;
/** Fully qualified class type name. */
public final String classType;
public ClassSerializer(String readMethod, String writeMethod, String classType){
this.readMethod = readMethod;
this.writeMethod = writeMethod;
this.classType = classType;
}
}
}

View File

@@ -0,0 +1,53 @@
package io.anuke.annotations;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.PacketPriority;
import io.anuke.annotations.Annotations.Variant;
import javax.lang.model.element.ExecutableElement;
/** Class that repesents a remote method to be constructed and put into a class. */
public class MethodEntry{
/** Simple target class name. */
public final String className;
/** Fully qualified target method to call. */
public final String targetMethod;
/** Whether this method can be called on a client/server. */
public final Loc where;
/**
* Whether an additional 'one' and 'all' method variant is generated. At least one of these must be true.
* Only applicable to client (server-invoked) methods.
*/
public final Variant target;
/** Whether this method is called locally as well as remotely. */
public final Loc local;
/** Whether this method is unreliable and uses UDP. */
public final boolean unreliable;
/** Whether to forward this method call to all other clients when a client invokes it. Server only. */
public final boolean forward;
/** Unique method ID. */
public final int id;
/** The element method associated with this entry. */
public final ExecutableElement element;
/** The assigned packet priority. Only used in clients. */
public final PacketPriority priority;
public MethodEntry(String className, String targetMethod, Loc where, Variant target,
Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority){
this.className = className;
this.forward = forward;
this.targetMethod = targetMethod;
this.where = where;
this.target = target;
this.local = local;
this.id = id;
this.element = element;
this.unreliable = unreliable;
this.priority = priority;
}
@Override
public int hashCode(){
return targetMethod.hashCode();
}
}

View File

@@ -0,0 +1,159 @@
package io.anuke.annotations;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.TypeSpec;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.annotations.IOFinder.ClassSerializer;
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.tools.Diagnostic.Kind;
import java.util.*;
import java.util.stream.Collectors;
/** The annotation processor for generating remote method call code. */
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({
"io.anuke.annotations.Annotations.Remote",
"io.anuke.annotations.Annotations.WriteClass",
"io.anuke.annotations.Annotations.ReadClass",
})
public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/** Maximum size of each event packet. */
public static final int maxPacketSize = 4096;
/** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen";
/** Name of class that handles reading and invoking packets on the server. */
private static final String readServerName = "RemoteReadServer";
/** Name of class that handles reading and invoking packets on the client. */
private static final String readClientName = "RemoteReadClient";
/**Simple class name of generated class name.*/
private static final String callLocation = "Call";
/** Processing round number. */
private int round;
//class serializers
private HashMap<String, ClassSerializer> serializers;
//all elements with the Remote annotation
private Set<? extends Element> elements;
//map of all classes to generate by name
private HashMap<String, ClassEntry> classMap;
//list of all method entries
private ArrayList<MethodEntry> methods;
//list of all method entries
private ArrayList<ClassEntry> classes;
@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 > 1) return false; //only process 2 rounds
round++;
try{
//round 1: find all annotations, generate *writers*
if(round == 1){
//get serializers
serializers = new IOFinder().findSerializers(roundEnv);
//last method ID used
int lastMethodID = 0;
//find all elements with the Remote annotation
elements = roundEnv.getElementsAnnotatedWith(Remote.class);
//map of all classes to generate by name
classMap = new HashMap<>();
//list of all method entries
methods = new ArrayList<>();
//list of all method entries
classes = new ArrayList<>();
List<Element> orderedElements = new ArrayList<>(elements);
orderedElements.sort(Comparator.comparing(Object::toString));
//create methods
for(Element element : orderedElements){
Remote annotation = element.getAnnotation(Remote.class);
//check for static
if(!element.getModifiers().contains(Modifier.STATIC) || !element.getModifiers().contains(Modifier.PUBLIC)){
Utils.messager.printMessage(Kind.ERROR, "All @Remote methods must be public and static: ", element);
}
//can't generate none methods
if(annotation.targets() == Loc.none){
Utils.messager.printMessage(Kind.ERROR, "A @Remote method's targets() cannot be equal to 'none':", element);
}
//get and create class entry if needed
if(!classMap.containsKey(callLocation)){
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);
//create and add entry
MethodEntry method = new MethodEntry(entry.name, Utils.getMethodName(element), annotation.targets(), annotation.variants(),
annotation.called(), annotation.unreliable(), annotation.forward(), lastMethodID++, (ExecutableElement) element, annotation.priority());
entry.methods.add(method);
methods.add(method);
}
//create read/write generators
RemoteWriteGenerator writegen = new RemoteWriteGenerator(serializers);
//generate the methods to invoke (write)
writegen.generateFor(classes, packageName);
return true;
}else if(round == 2){ //round 2: generate all *readers*
RemoteReadGenerator readgen = new RemoteReadGenerator(serializers);
//generate server readers
readgen.generateFor(methods.stream().filter(method -> method.where.isClient).collect(Collectors.toList()), readServerName, packageName, true);
//generate client readers
readgen.generateFor(methods.stream().filter(method -> method.where.isServer).collect(Collectors.toList()), readClientName, packageName, false);
//create class for storing unique method hash
TypeSpec.Builder hashBuilder = TypeSpec.classBuilder("MethodHash").addModifiers(Modifier.PUBLIC);
hashBuilder.addField(FieldSpec.builder(int.class, "HASH", Modifier.STATIC, Modifier.PUBLIC, Modifier.FINAL)
.initializer("$1L", Objects.hash(methods)).build());
//build and write resulting hash class
TypeSpec spec = hashBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(Utils.filer);
return true;
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
return false;
}
}

View File

@@ -0,0 +1,146 @@
package io.anuke.annotations;
import com.squareup.javapoet.*;
import io.anuke.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.tools.Diagnostic.Kind;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.List;
/** Generates code for reading remote invoke packets on the client and server. */
public class RemoteReadGenerator{
private final HashMap<String, ClassSerializer> serializers;
/** Creates a read generator that uses the supplied serializer setup. */
public RemoteReadGenerator(HashMap<String, ClassSerializer> serializers){
this.serializers = serializers;
}
/**
* Generates a class for reading remote invoke packets.
*
* @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.
*/
public void generateFor(List<MethodEntry> entries, String className, String packageName, boolean needsPlayer)
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException{
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
//create main method builder
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("readPacket")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.addParameter(ByteBuffer.class, "buffer") //buffer to read form
.addParameter(int.class, "id") //ID of method type to read
.returns(void.class);
if(needsPlayer){
//since the player type isn't loaded yet, creating a type def is necessary
//this requires reflection since the TypeName constructor is private for some reason
Constructor<TypeName> cons = TypeName.class.getDeclaredConstructor(String.class);
cons.setAccessible(true);
TypeName playerType = cons.newInstance("io.anuke.mindustry.entities.Player");
//add player parameter
readMethod.addParameter(playerType, "player");
}
CodeBlock.Builder readBlock = CodeBlock.builder(); //start building block of code inside read method
boolean started = false; //whether an if() statement has been written yet
for(MethodEntry entry : entries){
//write if check for this entry ID
if(!started){
started = true;
readBlock.beginControlFlow("if(id == " + entry.id + ")");
}else{
readBlock.nextControlFlow("else if(id == " + entry.id + ")");
}
readBlock.beginControlFlow("try");
//concatenated list of variable names for method invocation
StringBuilder varResult = new StringBuilder();
//go through each parameter
for(int i = 0; i < entry.element.getParameters().size(); i++){
VariableElement var = entry.element.getParameters().get(i);
if(!needsPlayer || i != 0){ //if client, skip first parameter since it's always of type player and doesn't need to be read
//full type name of parameter
String typeName = var.asType().toString();
//name of parameter
String varName = var.getSimpleName().toString();
//captialized version of type name for reading primitives
String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
//write primitives automatically
if(Utils.isPrimitive(typeName)){
if(typeName.equals("boolean")){
readBlock.addStatement("boolean " + varName + " = buffer.get() == 1");
}else{
readBlock.addStatement(typeName + " " + varName + " = buffer.get" + capName + "()");
}
}else{
//else, try and find a serializer
ClassSerializer ser = serializers.get(typeName);
if(ser == null){ //make sure a serializer exists!
Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: '" + typeName + "'", var);
return;
}
//add statement for reading it
readBlock.addStatement(typeName + " " + varName + " = " + ser.readMethod + "(buffer)");
}
//append variable name to string builder
varResult.append(var.getSimpleName());
if(i != entry.element.getParameters().size() - 1) varResult.append(", ");
}else{
varResult.append("player");
if(i != entry.element.getParameters().size() - 1) varResult.append(", ");
}
}
//execute the relevant method before the forward
//if it throws a ValidateException, the method won't be forwarded
readBlock.addStatement("$N." + entry.element.getSimpleName() + "(" + varResult.toString() + ")", ((TypeElement) entry.element.getEnclosingElement()).getQualifiedName().toString());
//call forwarded method, don't forward on the client reader
if(entry.forward && entry.where.isServer && needsPlayer){
//call forwarded method
readBlock.addStatement(packageName + "." + entry.className + "." + entry.element.getSimpleName() +
"__forward(player.con.id" + (varResult.length() == 0 ? "" : ", ") + varResult.toString() + ")");
}
readBlock.nextControlFlow("catch (java.lang.Exception e)");
readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to to read remote method '" + entry.element.getSimpleName() + "'!\", e)");
readBlock.endControlFlow();
}
//end control flow if necessary
if(started){
readBlock.nextControlFlow("else");
readBlock.addStatement("throw new $1N(\"Invalid read method ID: \" + id + \"\")", RuntimeException.class.getName()); //handle invalid method IDs
readBlock.endControlFlow();
}
//add block and method to class
readMethod.addCode(readBlock.build());
classBuilder.addMethod(readMethod.build());
//build and write resulting class
TypeSpec spec = classBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(Utils.filer);
}
}

View File

@@ -0,0 +1,226 @@
package io.anuke.annotations;
import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.IOFinder.ClassSerializer;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.tools.Diagnostic.Kind;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.List;
/** Generates code for writing remote invoke packets on the client and server. */
public class RemoteWriteGenerator{
private final HashMap<String, ClassSerializer> serializers;
/** Creates a write generator that uses the supplied serializer setup. */
public RemoteWriteGenerator(HashMap<String, ClassSerializer> serializers){
this.serializers = serializers;
}
/** Generates all classes in this list. */
public void generateFor(List<ClassEntry> entries, String packageName) throws IOException{
for(ClassEntry entry : entries){
//create builder
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(entry.name).addModifiers(Modifier.PUBLIC);
//add temporary write buffer
classBuilder.addField(FieldSpec.builder(ByteBuffer.class, "TEMP_BUFFER", Modifier.STATIC, Modifier.PRIVATE, Modifier.FINAL)
.initializer("ByteBuffer.allocate($1L)", RemoteMethodAnnotationProcessor.maxPacketSize).build());
//go through each method entry in this class
for(MethodEntry methodEntry : entry.methods){
//write the 'send event to all players' variant: always happens for clients, but only happens if 'all' is enabled on the server method
if(methodEntry.where.isClient || methodEntry.target.isAll){
writeMethodVariant(classBuilder, methodEntry, true, false);
}
//write the 'send event to one player' variant, which is only applicable on the server
if(methodEntry.where.isServer && methodEntry.target.isOne){
writeMethodVariant(classBuilder, methodEntry, false, false);
}
//write the forwarded method version
if(methodEntry.where.isServer && methodEntry.forward){
writeMethodVariant(classBuilder, methodEntry, true, true);
}
}
//build and write resulting class
TypeSpec spec = classBuilder.build();
JavaFile.builder(packageName, spec).build().writeTo(Utils.filer);
}
}
/** Creates a specific variant for a method entry. */
private void writeMethodVariant(TypeSpec.Builder classBuilder, MethodEntry methodEntry, boolean toAll, boolean forwarded){
ExecutableElement elem = methodEntry.element;
//create builder
MethodSpec.Builder method = MethodSpec.methodBuilder(elem.getSimpleName().toString() + (forwarded ? "__forward" : "")) //add except suffix when forwarding
.addModifiers(Modifier.STATIC, Modifier.SYNCHRONIZED)
.returns(void.class);
//forwarded methods aren't intended for use, and are not public
if(!forwarded){
method.addModifiers(Modifier.PUBLIC);
}
//validate client methods to make sure
if(methodEntry.where.isClient){
if(elem.getParameters().isEmpty()){
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods must have a first parameter of type Player.", elem);
return;
}
if(!elem.getParameters().get(0).asType().toString().equals("io.anuke.mindustry.entities.Player")){
Utils.messager.printMessage(Kind.ERROR, "Client invoke methods should have a first parameter of type Player.", elem);
return;
}
}
//if toAll is false, it's a 'send to one player' variant, so add the player as a parameter
if(!toAll){
method.addParameter(int.class, "playerClientID");
}
//add sender to ignore
if(forwarded){
method.addParameter(int.class, "exceptSenderID");
}
//call local method if applicable, shouldn't happen when forwarding method as that already happens by default
if(!forwarded && methodEntry.local != Loc.none){
//add in local checks
if(methodEntry.local != Loc.both){
method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())");
}
//concatenate parameters
int index = 0;
StringBuilder results = new StringBuilder();
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]");
}else{
results.append(var.getSimpleName());
}
if(index != elem.getParameters().size() - 1) results.append(", ");
index++;
}
//add the statement to call it
method.addStatement("$N." + elem.getSimpleName() + "(" + results.toString() + ")",
((TypeElement) elem.getEnclosingElement()).getQualifiedName().toString());
if(methodEntry.local != Loc.both){
method.endControlFlow();
}
}
//start control flow to check if it's actually client/server so no netcode is called
method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
//add statement to create packet from pool
method.addStatement("$1N packet = $2N.obtain($1N.class)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.ucore.util.Pooling");
//assign buffer
method.addStatement("packet.writeBuffer = TEMP_BUFFER");
//assign priority
method.addStatement("packet.priority = (byte)" + methodEntry.priority.ordinal());
//assign method ID
method.addStatement("packet.type = (byte)" + methodEntry.id);
//rewind buffer
method.addStatement("TEMP_BUFFER.position(0)");
for(int i = 0; i < elem.getParameters().size(); i++){
//first argument is skipped as it is always the player caller
if((!methodEntry.where.isServer/* || methodEntry.mode == Loc.both*/) && i == 0){
continue;
}
VariableElement var = elem.getParameters().get(i);
//add parameter to method
method.addParameter(TypeName.get(var.asType()), var.getSimpleName().toString());
//name of parameter
String varName = var.getSimpleName().toString();
//name of parameter type
String typeName = var.asType().toString();
//captialized version of type name for writing primitives
String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
//special case: method can be called from anywhere to anywhere
//thus, only write the player when the SERVER is writing data, since the client is the only one who reads it
boolean writePlayerSkipCheck = methodEntry.where == Loc.both && i == 0;
if(writePlayerSkipCheck){ //write begin check
method.beginControlFlow("if(io.anuke.mindustry.net.Net.server())");
}
if(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
if(typeName.equals("boolean")){ //booleans are special
method.addStatement("TEMP_BUFFER.put(" + varName + " ? (byte)1 : 0)");
}else{
method.addStatement("TEMP_BUFFER.put" +
capName + "(" + varName + ")");
}
}else{
//else, try and find a serializer
ClassSerializer ser = serializers.get(typeName);
if(ser == null){ //make sure a serializer exists!
Utils.messager.printMessage(Kind.ERROR, "No @WriteClass method to write class type: '" + typeName + "'", var);
return;
}
//add statement for writing it
method.addStatement(ser.writeMethod + "(TEMP_BUFFER, " + varName + ")");
}
if(writePlayerSkipCheck){ //write end check
method.endControlFlow();
}
}
//assign packet length
method.addStatement("packet.writeLength = TEMP_BUFFER.position()");
String sendString;
if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "send(";
}else{
sendString = "sendExcept(exceptSenderID, ";
}
}else if(toAll){ //send to all players / to server
sendString = "send(";
}else{ //send to specific client from server
sendString = "sendTo(playerClientID, ";
}
//send the actual packet
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "packet, " +
(methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
//end check for server/client
method.endControlFlow();
//add method to class, finally
classBuilder.addMethod(method.build());
}
private String getCheckString(Loc loc){
return loc.isClient && loc.isServer ? "io.anuke.mindustry.net.Net.server() || io.anuke.mindustry.net.Net.client()" :
loc.isClient ? "io.anuke.mindustry.net.Net.client()" :
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false";
}
}

View File

@@ -0,0 +1,24 @@
package io.anuke.annotations;
import javax.annotation.processing.Filer;
import javax.annotation.processing.Messager;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
public class Utils{
public static Types typeUtils;
public static Elements elementUtils;
public static Filer filer;
public static Messager messager;
public static String getMethodName(Element element){
return ((TypeElement) element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName();
}
public static boolean isPrimitive(String type){
return type.equals("boolean") || type.equals("byte") || type.equals("short") || type.equals("int")
|| type.equals("long") || type.equals("float") || type.equals("double") || type.equals("char");
}
}

View File

@@ -7,8 +7,9 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0'
classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6' classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6'
classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.android.tools.build:gradle:3.1.3'
classpath "com.badlogicgames.gdx:gdx-tools:1.9.8" classpath "com.badlogicgames.gdx:gdx-tools:1.9.8"
} }
} }
@@ -20,12 +21,12 @@ allprojects {
version = 'release' version = 'release'
ext { ext {
versionNumber = '3.5' versionNumber = '4.0'
versionType = 'release' versionType = 'alpha'
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.8' gdxVersion = '1.9.8'
aiVersion = '1.8.1' roboVMVersion = '2.3.0'
uCoreVersion = 'c5d47cc' uCoreVersion = '6a727b957e'
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()
@@ -40,6 +41,40 @@ allprojects {
getPackage = { getPackage = {
return project.ext.mainClassName.substring(0, project.ext.mainClassName.indexOf("desktop") - 1) return project.ext.mainClassName.substring(0, project.ext.mainClassName.indexOf("desktop") - 1)
} }
generateLocales = {
def output = '["en",'
def bundles = new File('core/assets/bundles/')
bundles.listFiles().each { other ->
if(other.name == "bundle.properties") return;
output += '"' + other.name.substring("bundle".length() + 1, other.name.lastIndexOf('.')) + '",'
}
output = (output.substring(0, output.size() - 1) + "]")
new File('core/assets/locales.json').text = output;
}
writeVersion = {
def pfile = new File('core/assets/version.properties')
def props = new Properties()
try{
pfile.createNewFile()
}catch (Exception e){}
if(pfile.exists()) {
props.load(new FileInputStream(pfile))
String code = getBuildVersion()
props["name"] = appName
props["version"] = versionType
props["code"] = versionNumber
props["build"] = code
props.store(pfile.newWriter(), "Autogenerated file. Do not modify.")
}
}
} }
repositories { repositories {
@@ -60,7 +95,7 @@ project(":desktop") {
compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion" compile "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-lwjgl3:$gdxVersion"
compile 'com.github.MinnDevelopment:java-discord-rpc:v1.3.2' compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.0'
} }
} }
@@ -71,69 +106,82 @@ project(":html") {
dependencies { dependencies {
compile project(":core") compile project(":core")
compileOnly project(":annotations")
compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion" compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion"
compile "com.badlogicgames.gdx:gdx:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-ai:$aiVersion:sources"
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion:sources"
compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion:sources" compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion:sources"
compile "com.sksamuel.gwt:gwt-websockets:1.0.4"
compile "com.sksamuel.gwt:gwt-websockets:1.0.4:sources"
} }
compileJava.options.compilerArgs = [
"-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor"
]
} }
project(":android") { project(":ios") {
apply plugin: "android" apply plugin: "java"
apply plugin: "robovm"
configurations { natives }
dependencies { dependencies {
implementation project(":core") compile project(":core")
implementation project(":kryonet") implementation project(":kryonet")
implementation "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" compile "com.mobidevelop.robovm:robovm-rt:$roboVMVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" compile "com.mobidevelop.robovm:robovm-cocoatouch:$roboVMVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
implementation "com.badlogicgames.gdx:gdx-ai:$aiVersion"
implementation "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
} }
} }
project(":core") { project(":core") {
apply plugin: "java" apply plugin: "java"
task finish {
generateLocales()
}
dependencies { dependencies {
boolean comp = System.properties["release"] == null || System.properties["release"].equals("false") compileOnly project(":annotations")
build.finalizedBy(finish)
if(!comp){ def comp = System.properties["release"] == null || System.properties["release"] == "false"
println("NOTICE: Compiling release build.")
}else{
println("Compiling DEBUG build.")
}
if(new File('../uCore').exists() && comp){ if(!comp) println("Note: Compiling release build.")
if(new File(projectDir.parent, '../uCore').exists() && comp){
compile project(":uCore") compile project(":uCore")
}else{ }else{
compile "com.github.anuken:ucore:$uCoreVersion" compile "com.github.anuken:ucore:$uCoreVersion"
} }
if(new File('../GDXGifRecorder').exists() && comp) { if(new File(projectDir.parent, '../GDXGifRecorder').exists() && comp) {
compile project(":GDXGifRecorder") compile project(":GDXGifRecorder")
} }
compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-ai:$aiVersion"
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
} }
compileJava.options.compilerArgs = [
"-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor"
]
} }
project(":server") { project(":server") {
apply plugin: "java" apply plugin: "java"
configurations {
compile.exclude module: android
}
dependencies { dependencies {
compileOnly project(":annotations")
compile project(":core") compile project(":core")
compile project(":kryonet") compile project(":kryonet")
compile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion" compile "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
@@ -141,13 +189,28 @@ project(":server") {
} }
} }
project(":packer") {
apply plugin: "java"
dependencies {
compile project(":core")
}
}
project(":annotations") {
apply plugin: "java"
dependencies {
compile 'com.squareup:javapoet:1.11.0'
}
}
project(":kryonet") { project(":kryonet") {
apply plugin: "java" apply plugin: "java"
dependencies { dependencies {
compile project(":core") compile project(":core")
compile 'com.github.crykn:kryonet:2.22.1' compile 'com.github.crykn:kryonet:2.22.1'
compile "org.java-websocket:Java-WebSocket:1.3.7"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

Some files were not shown because too many files have changed in this diff Show More