Compare commits

...

899 Commits
v43 ... v57

Author SHA1 Message Date
Anuken
c318f05cfd Minor lightning visual change / Hid PvP mode on web 2018-10-16 17:46:44 -04:00
Anuken
789d200c24 Fixed typo in tutorial missions 2018-10-16 16:58:18 -04:00
Anuken
2dc4a9e044 Fixed abandoning sector not updating texture 2018-10-16 16:35:43 -04:00
Anuken
82577b91d5 2-column sector button layout 2018-10-16 13:10:06 -04:00
Anuken
8fd08a1574 Fixed infinite graph traversal for power blocks 2018-10-16 11:52:17 -04:00
LQ
7a41fc8ec8 update pad mission (#247)
add MechMission as same as the UpgradeBlocks type
2018-10-16 09:08:53 -04:00
Anuken
798ca929d6 Improved sector mission display 2018-10-15 23:20:47 -03:00
Anuken
7e4e58fb78 Updated android build tools version 2018-10-15 16:31:01 -04:00
Anuken
28b9975c75 Merge remote-tracking branch 'origin/master' 2018-10-15 16:20:44 -04:00
Anuken
5536ade389 Updated gradle to 4.10.2 2018-10-15 16:20:26 -04:00
LQ
21bc195213 make sure new sector include target sector (#244)
if shiftx, shifty calc from total width,height, the result sector did not include the target sector
2018-10-15 10:17:52 -04:00
Anuken
b6beacf053 Input cleanup 2018-10-15 02:05:25 -03:00
Anuken
94b6c133f4 Various resprites 2018-10-14 18:39:24 -04:00
Anuken
949d7bed89 Fixed item images having incorrect underlines 2018-10-14 16:05:39 -04:00
Anuken
81ce12a38c Added random PvP/Waves map generation 2018-10-14 13:24:32 -04:00
Anuken
eba65b2934 Fixed units pathfinding to nonexistent cores 2018-10-14 11:57:37 -04:00
Anuken
c7f5b7fca1 Minified gamemode table 2018-10-14 10:41:17 -04:00
Anuken
f670d522bf PvP merge 2018-10-14 10:01:50 -04:00
Anuken
a02f7f46c3 Merge remote-tracking branch 'origin/master' 2018-10-14 09:57:31 -04:00
Anuken
4b7f254e17 Added 2x2 container storage block 2018-10-14 09:57:28 -04:00
Anuken
9b42be560d Fixed bugs with team assignment 2018-10-14 09:41:19 -04:00
VizardAlpha
31b39231a2 Updates bundle_fr_be.properties (#242) 2018-10-13 23:32:08 -04:00
Anuken
4eb2c1f646 PvP autohost 2018-10-13 23:30:05 -04:00
Anuken
5f89d8588d Added 'abandon sector' button 2018-10-13 23:07:57 -04:00
Anuken
404cbf9b4a Removed menu setting 2018-10-13 22:52:58 -04:00
Anuken
0aabc09b82 Made game-overs remote events 2018-10-13 21:58:17 -04:00
Anuken
a5ebeadd95 Merge remote-tracking branch 'origin/master' 2018-10-13 17:48:04 -04:00
Anuken
9e188aaf03 Fixed place area being deselected near map edges 2018-10-13 17:47:58 -04:00
Anuken
870f5caca9 PvP game over condition 2018-10-13 17:33:23 -04:00
Anuken
28b4ddfc72 PvP game over condition and message 2018-10-13 17:31:38 -04:00
Prosta4okua
13a4a26e97 Update bundle_ru.properties (#241) 2018-10-13 17:29:09 -04:00
Anuken
81c7e63994 Added 'waiting for players' message 2018-10-13 16:03:21 -04:00
Gureumi
7f234ab5bc Fix font (#240) 2018-10-13 15:53:42 -04:00
Anuken
f8d0682810 Added warnings for missing enemy cores 2018-10-13 15:49:18 -04:00
Anuken
175d6b1fc5 Improved difficulty balance 2018-10-13 12:39:07 -04:00
Anuken
1cd8e8a097 Improved server discovery 2018-10-13 12:21:11 -04:00
Anuken
ed95e38257 Fixed breakable cores / Fixed sector sandbox / Fixed ship warp speed 2018-10-13 11:33:49 -04:00
Anuken
cab585225d Removed unused 'pad' recipe modifier 2018-10-13 10:54:05 -04:00
Anuken
3688dde5e5 Merged mobile mechs 2018-10-13 10:52:48 -04:00
Anuken
ae6a5b2512 Made PvP a selectable mode 2018-10-13 10:50:22 -04:00
LQ
6f87611d67 keep the saved width and height of sector (#236)
* keep the saved width and height of sector

width,height changed after expandSector mission, It will reset to original value in initSector()

* keep x,y of sector

sector X and Y may be shifted after loading as well.
2018-10-13 10:44:07 -04:00
Anuken
6a5e31c908 Crash fix 2018-10-13 09:43:31 -04:00
Anuken
8bda5e16cd Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/assets/bundles/bundle_fr.properties
2018-10-13 08:59:15 -04:00
Anuken
d70d3d95f0 Bundles updated 2018-10-13 08:58:41 -04:00
Baramos666
554b7d2ec4 Update bundle_fr.properties (#239) 2018-10-13 08:58:04 -04:00
LQ
ebc4031922 set charset (#238)
default file charset is not utf8 when run from win10
2018-10-13 08:57:31 -04:00
Anuken
c526997aba Fixed coal in core / Fixed build events not triggering 2018-10-13 08:49:54 -04:00
Anuken
c0e3a1f3ef Fixed minor TPS display / block breakage bugs 2018-10-12 22:41:48 -04:00
Anuken
7dc0a7a5c3 Sector generation fix 2018-10-12 17:01:20 -04:00
Anuken
2943b6ed04 Fixed HUD errors 2018-10-12 12:40:30 -04:00
Anuken
5feb212df7 Merge remote-tracking branch 'origin/master' 2018-10-12 09:57:48 -04:00
Anuken
327edcd347 Fixed map crash 2018-10-12 09:57:44 -04:00
LQ
94cbf4cddf fix displayString for CommandMission (#235) 2018-10-12 09:48:39 -04:00
Anuken
08cc87affb nothing again 2018-10-11 23:14:59 -04:00
Baramos666
18020d64cc Update bundle_fr.properties (#234) 2018-10-11 22:58:05 -04:00
Anuken
48b7ceac06 Small rendering fix 2018-10-11 18:46:45 -04:00
Anuken
dbcce9663c Improved base generation 2018-10-11 12:18:23 -04:00
Anuken
6ee7dd56fe Fixed wave spawn crash 2018-10-11 10:01:59 -04:00
Anuken
99418e6b88 Mass driver power fix 2018-10-10 23:51:48 -04:00
Anuken
67db5e9dfc Nothing 2018-10-10 17:34:36 -04:00
Anuken
5f1bc6c6c2 Custom spawn locations 2018-10-10 13:02:00 -04:00
Anuken
05201d7012 Physics, pathfinding improvements 2018-10-10 11:29:34 -04:00
Anuken
6b4983537e Fixed puddles not appearing / Oil extractors not working 2018-10-10 08:57:07 -04:00
Anuken
87c8293c78 Various bugfixes 2018-10-10 08:39:25 -04:00
Anuken
54488564f3 Added sector complete event / Patched up server sector completion 2018-10-09 23:24:27 -04:00
Anuken
f2ac9ed385 Disabled core recipe 2018-10-09 23:10:04 -04:00
Anuken
38f2f1e30a Added legacy map importer 2018-10-09 22:52:28 -04:00
Anuken
02004011ec Update order swap 2018-10-09 20:50:49 -04:00
Anuken
60bb982450 Updated uCore 2018-10-09 20:13:31 -04:00
Anuken
67389c0bac Arc balancing 2018-10-09 19:52:36 -04:00
Anuken
faa1fee1c0 New lightning mechanics 2018-10-09 19:49:46 -04:00
Anuken
0bae421fbc it begins 2018-10-09 18:26:40 -04:00
Anuken
b29d81bf0f Improved lightning effects 2018-10-09 14:02:25 -04:00
Anuken
4792828da1 Missions now displayed as number / Improved mission gen 2018-10-09 09:22:06 -04:00
Anuken
6171e887a8 Sector growth 2018-10-08 23:56:47 -03:00
Anuken
f28fa93f40 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	core/src/io/anuke/mindustry/core/Renderer.java
2018-10-08 19:55:51 -04:00
Anuken
940ad84493 Random sector sizes / Cleanup 2018-10-08 19:55:10 -04:00
Anuken
0b168376ed Fixed build errors 2018-10-08 17:02:16 -04:00
Anuken
f7bd376499 More public modules 2018-10-08 16:09:31 -04:00
VizardAlpha
9566155bdb Created bundle_fr_be.properties (#233)
For Belgian player
2018-10-08 14:14:16 -04:00
Anuken
9994ddb31b Implemented public submodules 2018-10-08 09:41:01 -04:00
Anuken
fadfdaa673 Fixed missing ores 2018-10-08 09:31:47 -04:00
Anuken
4ca546f44a Test cleanup / Artillery fixes 2018-10-07 23:22:54 -04:00
Anuken
8af30c9256 Updated travis Android components 2018-10-07 19:31:19 -03:00
Anuken
42adc38720 Merge remote-tracking branch 'origin/master' 2018-10-07 19:22:18 -03:00
Anuken
c1d9dee46c Added content mission / Working implementation of preset sectors 2018-10-07 19:21:53 -03:00
Anuken
69a7104286 Updated Android tool versions 2018-10-07 11:14:54 -04:00
Anuken
aba5afe32c Updated uCore 2018-10-06 22:54:00 -04:00
Anuken
c1ccf4fceb Fixed sector pref clearing 2018-10-06 22:53:12 -04:00
Anuken
916a4cfc73 Added dialog for graphics startup errors 2018-10-06 17:23:43 -04:00
Anuken
fd107ab5b8 Code cleanup 2018-10-06 11:56:39 -04:00
Anuken
5fa6fccf7b Automatic boost 2018-10-05 23:10:04 -04:00
Anuken
0ce226d0c9 Fixed crash 2018-10-05 23:04:34 -04:00
Anuken
14e0b471d3 Mobile mechs implemented 2018-10-05 22:58:46 -04:00
Anuken
ed0df64cf9 Fixed compile errors / Refactored sector presets 2018-10-05 22:16:40 -04:00
Anuken
35bc2c9803 Sector preset class / New missions 2018-10-05 16:36:50 -04:00
Anuken
a771dc8787 Sector tint / Sector preset system 2018-10-04 20:59:58 -04:00
Anuken
244eb91dfb Added new test 2018-10-04 17:59:16 -04:00
Anuken
7488a6d42b Usage of ExtendedPreferences 2018-10-04 12:19:05 -04:00
Anuken
696a59f1b9 Updated revenant factory sprite 2018-10-04 09:31:52 -04:00
Anuken
ee5a3269f2 Failure confirmed working 2018-10-03 21:17:36 -04:00
Anuken
f89bf027f7 Testing test failure 2018-10-03 21:12:27 -04:00
Anuken
4db432b0a9 Updated travis with tests 2018-10-03 21:00:37 -04:00
Anuken
c82fd9ead5 Added unit tests 2018-10-03 20:58:35 -04:00
Anuken
34715b1e06 Fixed compile errors 2018-10-03 17:17:12 -04:00
Anuken
f0870b3236 Created test module 2018-10-03 15:53:33 -04:00
Anuken
9a286800d6 Ammo type for revenants 2018-10-03 13:44:18 -04:00
Anuken
59832b1777 Added revenant factory sprites 2018-10-03 10:26:37 -04:00
Anuken
561f566506 Merge branch 'circle-physics' of https://github.com/Anuken/Mindustry
# Conflicts:
#	core/src/io/anuke/mindustry/content/UnitTypes.java
2018-10-02 23:35:56 -04:00
Anuken
f0cacf6bd5 Final physics edit, ready to merge 2018-10-02 23:33:43 -04:00
Anuken
ce4031af74 Additional bugfixes 2018-10-02 21:44:32 -04:00
Anuken
dd7f91b8c2 Fixed many various physics bugs 2018-10-02 20:45:28 -04:00
Anuken
8523e5bf6b Rectangles 2018-10-02 18:47:23 -04:00
Anuken
860727d27a Revenant laser 2018-10-02 12:49:27 -04:00
Anuken
f175bf2c82 circles were a mistake 2018-10-01 22:49:53 -04:00
Anuken
40008f44ac Circle collision initial commit 2018-10-01 13:28:35 -04:00
Anuken
3f93b5c63b Revenant stat changes 2018-10-01 12:45:24 -04:00
Anuken
d2ce051c4a Implemented Fortress unit / Made artillery ignore air 2018-10-01 09:51:12 -04:00
Anuken
d5d90bde9a Removed mech ability key 2018-09-30 19:22:19 -04:00
Anuken
fc8d9febf6 Mass driver fixes 2018-09-29 22:53:24 -04:00
Anuken
b43c542213 Auto-target configuration 2018-09-29 20:49:19 -04:00
Anuken
e7533232c0 Fixed custom game waves / Fixed Windows appdata being incorrect 2018-09-29 14:25:29 -11:00
Anuken
5e1aaf11a7 Fixed copper/water not getting unlocked immediately 2018-09-29 10:31:17 -11:00
Anuken
d062dffc13 Cleanup / Fixed unlock system in custom games 2018-09-29 02:50:21 -07:00
Anuken
4810bbbbd9 Fixed loading / Freebuild unlocks 2018-09-28 14:23:56 -04:00
Anuken
967998273f Partially implemented specific unlock databases 2018-09-28 14:17:44 -04:00
Jae
24decf8abc Update bundle_zh_CN.properties (#230)
* Added translations

* Update bundle_fr.properties

* Update bundle_fr.properties

* Added zh_CN translations

* Update bundle_zh_CN.properties

* Update bundle_zh_CN.properties
2018-09-27 17:46:17 -04:00
Anuken
3bc605894e Fixed android text input truncating text 2018-09-27 17:44:47 -04:00
Anuken
b74ae302ec Ground unit retreat attacking / Patrol attacking 2018-09-27 17:40:08 -04:00
DinoWattz
db3dac261a Update bundle_pt_BR.properties (#231)
Fixed some words and translated some words
2018-09-27 13:09:09 -04:00
Anuken
87b47b3042 Even less wall hugging 2018-09-26 18:15:16 -04:00
Jae
720e1a038e French translations added (#228)
* Added translations

* Update bundle_fr.properties

* Update bundle_fr.properties
2018-09-26 13:42:20 -04:00
Baramos666
1753c54e88 Update bundle_fr.properties (#229) 2018-09-26 13:28:18 -04:00
Anuken
2d42de83de Slightly less wall hugging 2018-09-26 13:22:30 -04:00
Anuken
c4e6af455d Wall-hugging ground patrol / Core storage changed to set 2018-09-26 10:23:06 -04:00
Anuken
51d619449b Added discord badge to README 2018-09-25 23:31:45 -04:00
Anuken
1160a14f56 Fixed web errors / Fixed IPv4 crash 2018-09-25 23:27:19 -04:00
Anuken
57fce0ddbc Flying unit patrol 2018-09-25 19:44:10 -04:00
Anuken
b9eb8a750b Removed useless hitbox rects 2018-09-25 17:37:01 -04:00
Anuken
3ce16e0ed1 Changed annotations retention / Mobile block bugfix 2018-09-25 17:18:50 -04:00
Anuken
554d9b4047 Updated bundles 2018-09-25 16:41:18 -04:00
Prosta4okua
02d565ce58 [COMPLETE]Rare update bundle_ru.properties (#223)
* Update bundle_ru.properties

Added the same thing as in bundle.properties. Also added 9 descriptions. Because of this PL, a PL from xga is old.

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2018-09-25 16:39:52 -04:00
Anuken
795bc1276b Cleanup 2018-09-25 12:45:04 -04:00
Anuken
499b7b2e67 Crash fix 2018-09-25 08:41:40 -04:00
Anuken
b6c0fe8bf7 Build fix / Improved map contour 2018-09-24 23:12:13 -04:00
Anuken
d5bb1b72b9 Merge branch 'continuous-sectors' of https://github.com/Anuken/Mindustry
# Conflicts:
#	core/assets/bundles/bundle.properties
2018-09-24 22:57:49 -04:00
Anuken
af86564adc Final tutorial fixes 2018-09-24 22:56:48 -04:00
Anuken
5354e02b6f Finally a somewhat functional tutorial / Many bugfixes 2018-09-24 20:24:51 -04:00
Prosta4okua
4ee17a656f Update bundle.properties (#226) 2018-09-24 14:14:23 -04:00
Anuken
32c59b66f6 Changed tutorial ore gen 2018-09-24 10:19:27 -04:00
Anuken
20732f04ff Block position starting missions 2018-09-23 23:45:35 -04:00
Anuken
06763b34c3 Bugfixes / Better topological map 2018-09-23 18:41:08 -04:00
Anuken
6bab6c57f2 Fixed waves not appearing / Fixed ore tile blending 2018-09-23 12:45:22 -04:00
Anuken
4eab89d73e Per-sector ore gen 2018-09-23 10:10:05 -04:00
Anuken
8d20c46228 Basic tutorial text 2018-09-22 16:41:55 -04:00
Anuken
f5c4586bb7 Merge remote-tracking branch 'origin/master' 2018-09-22 12:29:30 -04:00
Anuken
bc6bbdbbe0 Fixed not being able to move units on conveyors 2018-09-22 12:29:27 -04:00
Anuken
b77caed0ba Added sample tutorial text / Refactoring 2018-09-22 12:20:04 -04:00
Baramos666
df976f1212 Update bundle_fr.properties (#225) 2018-09-22 11:17:07 -04:00
Anuken
999dd5eb6f Better mission display / Improved tutorial item amounts 2018-09-21 23:29:17 -04:00
Anuken
a1a6a3ab81 Tutorial sector prototype / New mission display 2018-09-21 23:14:26 -04:00
Anuken
d067bbfa65 New mission classes 2018-09-21 19:36:19 -04:00
Anuken
3bd40eeb27 Merge remote-tracking branch 'origin/continuous-sectors' into continuous-sectors
# Conflicts:
#	core/src/io/anuke/mindustry/maps/Sectors.java
2018-09-21 16:33:00 -04:00
Anuken
b124d54055 Merge 2018-09-21 16:32:38 -04:00
Anuken
90691de457 Fog persistence in sector expansion 2018-09-21 16:11:40 -04:00
Anuken
bee83a3a3e Sector expansion functional 2018-09-21 14:01:00 -04:00
Anuken
fd8f2438fa New world generation methods 2018-09-21 13:50:39 -04:00
Anuken
7937d99a73 Fixed buggy mobile zoom 2018-09-21 09:02:25 -04:00
Anuken
569afb5535 expandSector implementation 2018-09-21 08:49:35 -04:00
Anuken
fc5a45e113 Merge remote-tracking branch 'origin/continuous-sectors' into continuous-sectors 2018-09-21 08:47:41 -04:00
Anuken
950f4a9f1a Added expandSector method 2018-09-21 08:47:37 -04:00
Anuken
6a6e80b6d8 Fixed multiblock erase bug 2018-09-20 18:25:55 -04:00
Anuken
083c9792a6 Fixes to conveyor transmission visuals 2018-09-20 18:22:29 -04:00
Anuken
893bfce767 Incorrect conveyor movement transitions 2018-09-20 17:14:03 -04:00
Anuken
f61f3df732 Build fix 2018-09-20 12:32:12 -04:00
Anuken
a3be5e332e Fill.polyTri replaced 2018-09-20 12:31:53 -04:00
Anuken
33d65a8593 Fixed unit drop crash 2018-09-20 11:18:57 -04:00
Anuken
ebbf01c6e5 Synchronization 2018-09-20 09:29:16 -04:00
Anuken
acb8496352 Fixed node connection bug 2018-09-20 09:24:31 -04:00
Anuken
ecad5772d2 Fixed power debug blocks not working / Moved debug recipes 2018-09-20 08:47:58 -04:00
Anuken
6e6f5714dd Merge remote-tracking branch 'origin/master' 2018-09-20 08:34:07 -04:00
Anuken
50ae15aa4f Power crash fix 2018-09-20 08:33:57 -04:00
iczero
4e2c3049a0 Don't add unit drops to core if the core is full (#222) 2018-09-19 22:47:32 -04:00
Anuken
3a785c166e Removed NodeEntity 2018-09-19 22:39:43 -04:00
Anuken
5248a4eb9c Name refactor / Fixed crash / Power transfer fix 2018-09-19 22:17:58 -04:00
Anuken
c9a53aed7b Fixed crash, transmission bug 2018-09-19 17:36:58 -04:00
Anuken
bafe5dc784 Fixed block break crash 2018-09-19 12:41:33 -04:00
Anuken
5325488099 Changed enum to two booleans 2018-09-19 10:32:06 -04:00
Anuken
737ad5c8b7 Implemented node linking, graph reflow 2018-09-19 10:26:27 -04:00
Anuken
17cea4e274 Added PowerType enum 2018-09-19 10:07:33 -04:00
Anuken
af5b579a2f Power graph loading / merging 2018-09-19 09:41:30 -04:00
Anuken
c87eaaa928 Graph removal 2018-09-18 20:48:48 -04:00
Anuken
33418397f8 Power graph removal 2018-09-18 17:04:43 -04:00
Anuken
8c7258e839 Merge 2018-09-18 17:04:24 -04:00
Anuken
98fff9b81d Sector width/height 2018-09-18 11:54:08 -04:00
Anuken
0c63b27eea Removed old korean font / Fixed targeting going through UI 2018-09-18 09:17:50 -04:00
Anuken
0968981aef Removed unused graph classes 2018-09-17 21:43:19 -04:00
Anuken
8db4abdf43 Comment removed 2018-09-17 10:13:15 -04:00
Anuken
9aa4219bf0 Fixed core deconstruction crash 2018-09-17 09:57:58 -04:00
Anuken
6c32ab4711 Fixed visual glitch 2018-09-17 09:09:48 -04:00
Anuken
a80c5a1efa Fixed artillery bullet not respecting range properly 2018-09-16 22:30:06 -04:00
Anuken
4ba46bff69 Smoother map preview 2018-09-16 22:28:42 -04:00
Anuken
6a7c97277f Fixed meltdown not setting blocks on fire 2018-09-16 22:13:44 -04:00
Anuken
cc70ff9732 Branch created 2018-09-16 22:05:29 -04:00
Anuken
2d25948c57 Revenant factory definition / Crash fix 2018-09-16 21:57:37 -04:00
Anuken
8946af4831 Mass renaming of blocks and units 2018-09-16 19:48:15 -04:00
Anuken
5e7ca0374c Direct core item drops 2018-09-16 14:39:30 -04:00
Anuken
21f8e89ba4 ItemDrop class removed 2018-09-16 14:29:08 -04:00
Anuken
f0aca90de2 Bundle update 2018-09-16 14:19:56 -04:00
Anuken
097228066a Revenant sprite / Training mode / Mine transfer range / Drone heal buff 2018-09-16 14:05:43 -04:00
Anuken
7d8782f3dc Crash fix 2018-09-15 22:06:24 -04:00
Anuken
e4ea9d561e Lightning shield absorption 2018-09-15 16:37:28 -04:00
Anuken
e284d9de8e Balancing / Fixed editor/map bugs 2018-09-15 11:10:07 -04:00
Anuken
df6382a1ca Balancing 2018-09-14 15:16:25 -04:00
Anuken
c1c1a3318c Meltdown 2018-09-14 12:59:52 -04:00
Anuken
796df1cec5 Merge remote-tracking branch 'origin/master' 2018-09-14 10:53:27 -04:00
Anuken
28980293c5 Corrected spectre/meltdown recipes 2018-09-14 10:53:12 -04:00
Anuken
d878ad2e7e Meltdown prototype 2018-09-14 10:29:34 -04:00
Anuken
1290d1e9d4 Balancing / Wall renaming 2018-09-13 23:04:43 -04:00
Anuken
f229f1e9fe Added LaserTurret class / Updated bundles 2018-09-13 22:33:03 -04:00
Anuken
0776951018 Improved turret accuracy 2018-09-13 16:53:05 -04:00
Anuken
6d47b449b9 Spectre improvements 2018-09-13 14:43:52 -04:00
Anuken
594c975c70 Spectre WIP 2018-09-13 09:33:09 -04:00
Anuken
bf57318307 Compile error fix / Additional power transfer implementation 2018-09-13 08:32:55 -04:00
Anuken
abd87793e4 Power graph initial commit 2018-09-12 18:35:29 -04:00
Anuken
7b4e6128ce Server build fix 2018-09-12 11:01:20 -04:00
Anuken
2ae65acc28 Wave unit pads 2018-09-12 10:28:45 -04:00
Anuken
2ee87ad078 Crash fix 2018-09-12 10:18:45 -04:00
Anuken
d65beea179 Removed debug menu / Crash fix / Ship speed warp fix / String locale fix 2018-09-12 10:07:10 -04:00
Anuken
b19f3ff8cf Removed core bullet shield / Drill ore-count 2018-09-11 22:24:14 -04:00
Anuken
75fae9454d Fixed core crash / Fixed error texture on shoot 2018-09-11 18:12:11 -04:00
Anuken
5d309c39cf Added core recipe, made core destructible 2018-09-11 17:09:42 -04:00
Anuken
649fc5a0e6 Bundles updated 2018-09-11 16:34:31 -04:00
Anuken
67cfa5d42f Made blocks no longer unlock in custom games 2018-09-11 16:27:45 -04:00
Anuken
5dcacdeea1 Merge remote-tracking branch 'origin/master' 2018-09-11 09:22:59 -04:00
Anuken
2f7073bbe4 Removed NetEvents class / Added unused patrol command 2018-09-11 09:22:54 -04:00
Prosta4okua
e8df6ed3be Nice Update bundle_uk_UA.properties. :) (#220)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2018-09-11 09:22:16 -04:00
Anuken
d9eb4c1296 Server build fix / Debug hook 2018-09-10 19:33:12 -04:00
Anuken
4af0fbf553 Removed debug mode / Added source blocks to sandbox 2018-09-10 17:46:32 -04:00
Anuken
2da0862cb2 Fill.polyTri replaced 2018-09-10 13:14:43 -04:00
Anuken
66fcf84688 Removed Fill.poly() references 2018-09-10 10:59:27 -04:00
Anuken
5740d40d57 Merge remote-tracking branch 'origin/master' 2018-09-09 21:52:54 -04:00
Anuken
6ef2256bf2 Removed all reflection 2018-09-09 21:44:10 -04:00
Anuken
65f911909b Pools replace with Pooling / Removed all core reflection 2018-09-09 17:44:10 -04:00
Anuken
2cb6e454c8 Auto-generated serialization code 2018-09-09 16:19:53 -04:00
iczero
abfaa47db2 Add version type/number/modifier to crash reports (#221) 2018-09-09 14:38:29 -04:00
Prosta4okua
e06970eebb Create strings.xml (#217) 2018-09-09 11:30:26 -04:00
Anuken
dadc83800b Merge remote-tracking branch 'origin/master' 2018-09-09 11:27:06 -04:00
Anuken
62f2c67321 Fixed some multithreading bugs / No more drift 2018-09-09 11:26:15 -04:00
Anuken
1651844b4f Crash fix 2018-09-09 10:09:00 -04:00
xgamezs
fb9f42ff93 Update bundle_uk_UA.properties (#219) 2018-09-08 23:02:49 -04:00
Anuken
9c29b982dd absolutely incredible performance improvements 2018-09-08 23:00:17 -04:00
Anuken
f52c4964b3 Changed arc recipe 2018-09-08 20:59:39 -04:00
Anuken
46a8edb781 LZ4 compression 2018-09-08 17:07:25 -04:00
Anuken
8dbdbe6d6c Removed delta compression / Removed client snapshot packet 2018-09-08 16:29:09 -04:00
Anuken
778069c15d New artillery turret bullet patterns 2018-09-08 13:43:25 -04:00
Anuken
e98457c540 Fixed server build error 2018-09-08 11:57:57 -04:00
Anuken
7a3a76065c Added RTG generator 2018-09-08 11:48:27 -04:00
Anuken
c73c97dc7b Added arc turret 2018-09-08 11:35:29 -04:00
Anuken
1b0dd279ae Phase matter shield boost 2018-09-08 09:38:22 -04:00
Anuken
7dd487ccc5 Force projector implementation 2018-09-07 23:24:55 -04:00
Anuken
d046591512 Overdrive system 2018-09-07 17:16:38 -04:00
Anuken
e4ce115abf Fixed (another) crash 2018-09-07 13:46:07 -04:00
Anuken
aedcac5820 Fixed a crash 2018-09-07 12:01:36 -04:00
Anuken
9f4430ad92 Fixed save loader failing to load status effects 2018-09-07 09:40:13 -04:00
Anuken
2ad8f1c112 Bundles updated / Crash fix 2018-09-07 09:18:58 -04:00
Anuken
f0d884e114 Force projector sprite 2018-09-06 22:08:22 -04:00
Anuken
b618f5be80 Merge remote-tracking branch 'origin/master' 2018-09-06 21:47:00 -04:00
Anuken
7b63eac3eb Save fixes / Implemented overdrive projector 2018-09-06 21:46:50 -04:00
Prosta4okua
df3f2ea9c1 [Complete]Russian bundle. (#208)
* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2018-09-06 19:53:31 -04:00
Gureumi
30c6280ed1 smail translate (#216) 2018-09-06 19:51:12 -04:00
Anuken
1960b59629 Packer compile fix / Mapping fix 2018-09-06 19:38:19 -04:00
Anuken
6e6edf8322 Fixed trail length bug / Base projector classes 2018-09-06 12:25:38 -04:00
Anuken
f47fb01614 Minor bugfixes 2018-09-06 09:08:54 -04:00
Anuken
ae30bdd599 Bugfixes 2018-09-05 21:30:03 -04:00
Anuken
2c8962cf5f pain and suffering of various kinds 2018-09-05 20:25:50 -04:00
Anuken
eb3e507a11 Content mapping, part 1 2018-09-05 16:02:30 -04:00
Anuken
be3147465d Added unlock menu in-game 2018-09-05 13:22:04 -04:00
Anuken
484721fece Fixed game data clearing 2018-09-05 13:00:15 -04:00
Anuken
9c36026991 Data clearing / Bugfixes 2018-09-05 10:24:47 -04:00
Anuken
bf5055f944 Fixed random bullet pierce 2018-09-05 09:44:26 -04:00
Anuken
389034bf1a Fixed PvP matches not ending / Removed PvP core shield 2018-09-05 09:36:25 -04:00
Anuken
3f07102f2a Crash fixes 2018-09-05 09:05:15 -04:00
Anuken
d4ccfa31b5 Balancing 2018-09-04 22:16:23 -04:00
Anuken
5814b2a4b8 Merge remote-tracking branch 'origin/master' 2018-09-04 22:08:08 -04:00
Anuken
d3f61af493 Added shock mines 2018-09-04 22:08:05 -04:00
xgamezs
233ea7bb4a Update bundle_ru.properties (#214) 2018-09-04 21:23:08 -04:00
Anuken
6893a30ffb Removed camera clamping for custom maps 2018-09-04 19:55:39 -04:00
Anuken
ae6d2fb363 Minor optimization / Fixed bullets piercing shield randomly 2018-09-04 19:45:41 -04:00
Anuken
baa7cb3a10 Flux speed buff / Server drowning / Delta buff 2018-09-04 19:02:40 -04:00
Anuken
7b90544d91 Fixed player mech icon clip / Added kick confirmation 2018-09-04 17:42:56 -04:00
Anuken
9a5495d8b2 Crash fix / New pump/conduit placement restrictions 2018-09-04 16:43:15 -04:00
Anuken
1fa769b3e7 Merge remote-tracking branch 'origin/master' 2018-09-04 15:15:43 -04:00
Anuken
96766ece4e Made wave extinguish fires / Buffed fire 2018-09-04 15:15:25 -04:00
xgamezs
add525396f Update bundle_ru.properties (#213) 2018-09-04 14:43:35 -04:00
Anuken
26ae4edd63 Added version type 2018-09-04 12:10:48 -04:00
Anuken
063893adee Crash fixes 2018-09-04 09:00:37 -04:00
Anuken
ff37e99d71 Save load crash fix / Minor name refactor 2018-09-03 22:37:46 -04:00
Anuken
3d0b02ee23 Cleaned up enemy base walls 2018-09-03 22:12:46 -04:00
Anuken
d7cfbfe6c8 Merge remote-tracking branch 'origin/master' 2018-09-03 21:51:18 -04:00
Anuken
dc00e22f13 Fixed unit pads hiding in PvP / Fixed recipes not deselecting in menu 2018-09-03 21:51:13 -04:00
CrazyBearTR
bcde481304 Update of the Turkish Translation Bundle (#212)
* Update of the Turkish Translation Bundle

Some words were wrong. Fixed in this version.

* Update bundle_tr.properties
2018-09-03 19:38:01 -04:00
Prosta4okua
5b1341e488 [Complete]Update bundle_uk_UA.properties (#211)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2018-09-03 19:37:55 -04:00
Anuken
6ad70ceee3 Typo fix 2018-09-03 17:17:32 -04:00
Anuken
9c4d2f5490 Merge remote-tracking branch 'origin/master' 2018-09-03 17:04:16 -04:00
Anuken
6c5eff1143 Crash fix / Cleanup 2018-09-03 17:04:11 -04:00
Anuken
a893767d0f Merge remote-tracking branch 'origin/master' 2018-09-03 16:22:29 -04:00
Anuken
a4f240edc8 Fixed some high-FPS bugs 2018-09-03 16:22:24 -04:00
Anuken
e0a94f694b Shader fix / Hail buff / Tau nerf / Turkish lower case fix 2018-09-03 15:57:06 -04:00
Anuken
8654f25a4f Bugfixes for GWT 2018-09-03 13:48:16 -04:00
Anuken
e877310d85 Mech balancing / Less glitchy menu shader 2018-09-03 13:33:40 -04:00
Anuken
bb59f45ba6 Crash fix 2018-09-03 10:29:44 -04:00
Anuken
3d4c2a2c20 Merge remote-tracking branch 'origin/master' 2018-09-03 09:56:18 -04:00
Anuken
e36667cd08 Bugfixes 2018-09-03 09:56:14 -04:00
CrazyBearTR
cebaa6949e Turkish language request (#210) 2018-09-03 09:55:04 -04:00
Anuken
019e22aff2 Fixed missile shield pierce 2018-09-03 09:07:59 -04:00
Anuken
5129e2ea73 Crash fixes 2018-09-03 09:02:16 -04:00
Anuken
3b63f60462 Fixed some junction issues / Improved server crash reporting 2018-09-02 22:40:23 -04:00
Anuken
5e29115c2e Fixed ship flight targeting / Fixed unit weapon sprite offset 2018-09-02 16:23:39 -04:00
Anuken
0b4b30286d Fixed bridge infinite capacity / Fixed crash 2018-09-02 15:19:54 -04:00
Anuken
a01f64080d Fixed unit pads / Added chat log 2018-09-02 14:16:14 -04:00
Anuken
d031351bc8 Merge remote-tracking branch 'origin/master' 2018-09-02 13:49:42 -04:00
Anuken
1d21d36253 Fixed font line height / Bundles updated / Changelog date 2018-09-02 13:49:38 -04:00
iczero
8d4cd72b41 Remove duplicate roundrobin properties in weapons (#207) 2018-09-02 13:34:24 -04:00
Anuken
46ab6d3476 Minor fix 2018-09-02 13:33:43 -04:00
Anuken
3fcf3cbf93 Merge remote-tracking branch 'origin/master' 2018-09-02 13:20:58 -04:00
Anuken
ada912c69b Made group error message more specific 2018-09-02 13:20:51 -04:00
Prosta4okua
e204b89eaf Update bundle_ru.properties (#206)
* Update bundle_ru.properties

* Update bundle_ru.properties
2018-09-02 13:20:40 -04:00
Anuken
e903798fc2 Crash report fixes / Mobile mech fixes / Multiplayer fixes 2018-09-02 13:12:45 -04:00
Anuken
54497c43b6 Fixed mobile menu shader / Added 'old save' message for sectors 2018-09-02 11:46:47 -04:00
Anuken
99e54cc214 Fixed server connect crash 2018-09-02 11:22:05 -04:00
Anuken
56ae47cd8d Fixed server build error / Possible crash fix 2018-09-02 11:00:14 -04:00
Anuken
0fb336cf7b Balancing / Fixed bridge contamination 2018-09-02 10:46:24 -04:00
Anuken
469b3c0a94 Balance tweaks / Changed block liquid place-ability 2018-09-01 22:29:25 -04:00
Anuken
d90d88c68b Menu shader / Sprite fixes 2018-09-01 20:16:49 -04:00
Anuken
dcc061af3e New seed-based AI bases 2018-09-01 14:44:06 -04:00
Anuken
a2960f5c50 Pathfind updates / Less reflection / Platform cleanup 2018-08-31 23:19:36 -04:00
Anuken
565f8a2b4d Merge branch 'reflectionless' of https://github.com/Anuken/Mindustry 2018-08-31 16:15:43 -04:00
Anuken
5cb50d57ec Reduced reflection usage / Improved event system 2018-08-31 16:14:14 -04:00
Anuken
522e19d4bf Updated discord URL 2018-08-31 15:40:32 -04:00
Anuken
0db7a78889 Merge remote-tracking branch 'origin/master' 2018-08-31 10:15:12 -04:00
Anuken
1ce3b40b4e Basic pathfinding implementations 2018-08-31 10:15:08 -04:00
Leone25
e633528a7a Update bundle_ita.properties (#205) 2018-08-31 09:24:26 -04:00
Anuken
6570b411d1 Merge remote-tracking branch 'origin/master' 2018-08-31 00:02:42 -04:00
Anuken
ac9e774795 Added basic turret blob structures 2018-08-31 00:02:38 -04:00
Prosta4okua
8791747453 [Complete]Update bundle_ru.properties (#202)
* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2018-08-30 23:52:41 -04:00
Anuken
dda3afe9fa now with waifus 2018-08-30 21:39:27 -04:00
Anuken
d4435f980c Fixed ability input conflicts 2018-08-30 18:30:05 -04:00
Anuken
f29673a6e3 Made desktop selection rebindable 2018-08-30 16:46:41 -04:00
Anuken
9816bab151 Fixed build error 2018-08-30 09:58:18 -04:00
Anuken
5884c0bcb3 Merge branch 'crash-report-server' of https://github.com/Anuken/Mindustry 2018-08-30 09:23:10 -04:00
Anuken
96dc00beac Fixed carrying bug 2018-08-30 09:22:16 -04:00
Anuken
febc1e53b6 Added dedicated server crash reports 2018-08-30 09:05:15 -04:00
Anuken
3e18fb3ca0 Final crash report system for desktop 2018-08-29 23:46:04 -04:00
Anuken
28b9de2e7a Moved reporting system to CoreBot; JSON-base reports 2018-08-29 22:54:15 -04:00
Anuken
9a41399178 Initial proof-of-concept for crash report server 2018-08-29 22:09:55 -04:00
Anuken
db47b9a877 Minor tweaks 2018-08-29 16:19:34 -04:00
Anuken
7cdd7a3487 Merge remote-tracking branch 'origin/master' 2018-08-29 10:07:38 -04:00
Anuken
833f646903 Start of groundwork for dynamic bases 2018-08-29 10:07:34 -04:00
Senventise
35a85860b1 Add Simplified Chinese font and update translations (#204)
* update translation

* add simplified chinese font

* delete outdated font

* Update uiskin.json
2018-08-29 09:38:10 -04:00
Anuken
00f24dfb79 Balancing 2018-08-28 20:10:43 -04:00
Anuken
8c6ae2576d Fuse shot implemented 2018-08-28 19:00:29 -04:00
Anuken
5416ad33bd Basic fuse implementation 2018-08-28 13:10:49 -04:00
Anuken
1e25ba2d8e Implemented ammo types for cyclone 2018-08-28 12:12:08 -04:00
Anuken
8d08d25f5b Updated uCore 2018-08-28 09:02:38 -04:00
Anuken
802e7b12d0 Surge uses / Fixes, optimizations / Turret implementation base 2018-08-27 23:50:23 -04:00
Anuken
9b57550f3d Worldgen changes 2018-08-27 16:04:55 -04:00
Anuken
28c13c8e52 Fixed dropping items into enemy blocks 2018-08-27 13:56:20 -04:00
Anuken
d8f9059989 Player bufixes / Balancing 2018-08-27 13:46:33 -04:00
Anuken
ac9d37d038 Core player shield / Bundles updated 2018-08-27 13:30:34 -04:00
Anuken
6323c13704 Mech descriptions / Balancing / Crash fix / Physics fix 2018-08-27 09:52:33 -04:00
Anuken
2f7f16daff Added mend projector 2018-08-26 23:03:02 -04:00
Anuken
9059238aee Fixed lancer turning incorrectly / Buffed lancer 2018-08-26 20:02:29 -04:00
Anuken
2677c0e752 Merge remote-tracking branch 'origin/master' 2018-08-26 17:39:37 -04:00
Anuken
ba80770564 Disabled snapshot debug 2018-08-26 17:39:32 -04:00
Anuken
06ad35d934 Fixed jittery snapshots / Fixed misaligned unit bullets 2018-08-26 17:38:22 -04:00
Anuken
864c4f6bc3 Added custom port support 2018-08-26 10:25:23 -04:00
iczero
f5f0f02abe Fix UUID generation on desktop (#203) 2018-08-26 09:12:16 -04:00
Anuken
19979dec55 Fixed multiplayer crash 2018-08-25 23:25:04 -04:00
Anuken
926e61b7cc Initial test 2018-08-25 20:43:36 -04:00
Anuken
15378d3267 Removed incorrect health values 2018-08-25 20:25:09 -04:00
Anuken
33fcfda1a0 Added alloy smelter 2018-08-25 16:50:42 -04:00
Anuken
74d7b43d0f Fixed game-over state / Recipe balance 2018-08-25 15:35:35 -04:00
Anuken
e392c8f0e6 All reconstructors implemented / Balancing 2018-08-25 14:52:46 -04:00
Anuken
f60ba8587f Balancing / Reconstructors require power 2018-08-25 10:37:05 -04:00
Anuken
86a7f837cd Implemented halberd 2018-08-25 09:55:08 -04:00
Anuken
9465497481 Implemented trident 2018-08-24 23:32:08 -04:00
Anuken
8c3f3ac304 Javelin abilities 2018-08-24 17:53:54 -04:00
Anuken
88ba8f6f55 Ignored gif recorder images 2018-08-24 15:52:51 -04:00
Anuken
c64459dbf4 Fixed alpha drones dying on load 2018-08-24 15:52:05 -04:00
Anuken
8b0bbffe27 Merge remote-tracking branch 'origin/mechs-balance-altfire' into mechs-balance-altfire
# Conflicts:
#	core/src/io/anuke/mindustry/content/Mechs.java
2018-08-24 13:58:32 -04:00
Anuken
94805259d7 Added alpha drone swarm ability 2018-08-24 13:54:53 -04:00
Anuken
e796d44f92 Tau idle regen / Fixed non-synced alts / Fixed units not retreating 2018-08-24 10:19:56 -04:00
Anuken
5e8686db77 Removed Upgrade class / Buffed units / Bugfixes 2018-08-24 09:39:02 -04:00
Anuken
ee835f6514 Merge branch 'master' of https://github.com/Anuken/Mindustry into mechs-balance-altfire
# Conflicts:
#	core/src/io/anuke/mindustry/world/blocks/storage/CoreBlock.java
2018-08-24 08:57:19 -04:00
Anuken
5de61aaed3 Unlockable mechs 2018-08-24 08:55:19 -04:00
Anuken
6613e4ec42 Generaor changes 2018-08-23 23:26:45 -04:00
Anuken
206314f4f4 Implemented lightning tile damage 2018-08-23 09:09:54 -04:00
Anuken
8f12c3f1a8 Fixed lightning / Implemented delta ability and gun 2018-08-23 09:02:09 -04:00
Anuken
4c224d0b9c Balancing, keybinds 2018-08-22 23:45:01 -04:00
Anuken
30dd089c8b Tau mech implemented 2018-08-22 23:29:14 -04:00
Anuken
8d9ec206bf Fixed mech hovering 2018-08-22 17:48:44 -04:00
Anuken
8319288776 Omega mech ability / Rendering fix 2018-08-22 16:13:26 -04:00
Anuken
60bf36613f Merge remote-tracking branch 'origin/master' 2018-08-22 12:42:30 -04:00
Anuken
a75994cbbf Updates to iOS build 2018-08-22 12:42:19 -04:00
Anuken
e1f7c7b03d Omega mech implementation 2018-08-21 22:40:39 -04:00
Anuken
bb7e2c7cee Commit #2000 2018-08-21 19:01:35 -04:00
Anuken
69eb6469f9 Merge branch 'continuous-servers' of https://github.com/Anuken/Mindustry 2018-08-21 18:56:32 -04:00
Anuken
d2eb3be7f8 Merge remote-tracking branch 'origin/master' 2018-08-21 18:54:15 -04:00
Anuken
5aa76639d1 Changed noise octaves with non-detailed worldgen 2018-08-21 18:54:11 -04:00
Anuken
3bf72a1af6 Forced hovering while on block 2018-08-21 17:28:35 -04:00
Anuken
b745d88299 Player State reset / Improved messages / Round end time 2018-08-21 17:23:17 -04:00
Anuken
3aedc07ad0 Initial continuous server implementation 2018-08-21 16:37:57 -04:00
Anuken
dbb164f4be Increased mech damage 2018-08-21 14:21:00 -04:00
Prosta4okua
b0103d1ce3 [Complete]Update bundle_ru.properties (#199)
* Update bundle_ru.properties

* Update bundle_ru.properties

* Update bundle_ru.properties
2018-08-21 13:27:20 -04:00
Prosta4okua
9c532047d3 [Complete]Update bundle_uk_UA.properties (#201)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2018-08-21 13:27:09 -04:00
Anuken
0003a58210 Added land effect / Cleanup 2018-08-21 13:25:04 -04:00
Anuken
34f2704dc7 Added ground mech flight 2018-08-21 12:22:49 -04:00
Anuken
0ddee379ca Added mode-specific respawn time 2018-08-21 10:56:06 -04:00
Anuken
6dcbe4fabb Added phase walls 2018-08-21 10:36:42 -04:00
Anuken
5dbb9fdf3f Final tweaks, ready to merge 2018-08-21 09:45:54 -04:00
Anuken
914fa3079d Per-mode no-build radius 2018-08-20 23:47:56 -04:00
Anuken
2e958d8d8f New team system / Prototype dedicated PvP gamemode 2018-08-20 23:45:27 -04:00
Anuken
7a5e61fd2e Fixed off-color stone floor blocks 2018-08-20 22:17:34 -04:00
Anuken
6a031d8f53 Nerfed wall health 25% 2018-08-20 22:13:29 -04:00
Anuken
dc6f01c0d3 Merge branch 'resource-rework' of https://github.com/Anuken/Mindustry 2018-08-20 22:09:57 -04:00
Anuken
1cc8cbe8a8 Bundles updated / Updated mechanical drill sprite 2018-08-20 22:09:15 -04:00
Anuken
01ae8bec85 Turret sprite fixes 2018-08-20 21:30:37 -04:00
Anuken
258ab87f6b Palette swap / Blocks changed and renamed 2018-08-20 21:04:03 -04:00
Anuken
8ba2db6c58 Dense alloy / Compile errors fixed 2018-08-20 17:43:56 -04:00
Anuken
a7599e85dc Merge remote-tracking branch 'origin/master' 2018-08-20 10:21:56 -04:00
Anuken
28389d698e Fixed editor fill freeze 2018-08-20 10:21:51 -04:00
Gureumi
c47a220721 Update bundle_ko.properties (#198) 2018-08-20 09:21:13 -04:00
Anuken
69f7296baa Merge remote-tracking branch 'origin/master' 2018-08-19 22:49:39 -04:00
Anuken
855f56bb45 Crash fix 2018-08-19 22:49:35 -04:00
Anuken
a79d072aaf More copper 2018-08-19 22:47:46 -04:00
iczero
467047a011 Fix typo (#197) 2018-08-19 22:46:41 -04:00
Leone25
0288daa39d Update bundle_ita.properties (#195) 2018-08-19 18:40:53 -04:00
Prosta4okua
3f075068a9 Update bundle_ru.properties (#196) 2018-08-19 18:40:43 -04:00
Anuken
278e7027f2 Bundles updated 2018-08-19 13:35:35 -04:00
Anuken
9d654c1f18 Copper added, carbide removed 2018-08-19 13:34:36 -04:00
JustYanns
279187d13b Update bundle_fr.properties [Complete] (#146)
* Update bundle_fr.properties

Few things translated in french.
I'll do more soon !!

* Update bundle_fr.properties V2

Update with comment of Math2128

* Update bundle_fr.properties V3

Few translations fixed

* Update bundle_fr.properties V4

•1 Thorium is the same in french and in english. 
•2 Carbide and cryofluid are not translatable !!
•3 Phase matter = "matière de Phase" doesn't sound good, I think we have to let the english word.
•4 Pyratite can be translated as "pyrrhotite" is it a good idea ?

* Update bundle_fr V5

Few translations fixed

* Update bundle_fr.properties V6 [Almost complete]

The french translation is almost finished, I will release the final translation soon.

* Update bundle_fr.properties [pre-release1]

Translation almost finished,
I just have 2 problems (see in the conversation)

* Update bundle_fr.properties  [pre-release2]

Translation almost finished
I just have 2 problems (see in the conversation)

* Update bundle_fr.properties [pre-release3]

Thank you to Math2128, for having helping me ;)

* Update bundle_fr.properties  [pre-release4]

Translations of Math2128's commit added
2018-08-19 13:34:17 -04:00
Anuken
360494f971 Fixed connect/disconnect message color tags 2018-08-19 10:31:25 -04:00
Anuken
81931eb536 Removed unnecessary tungsten references 2018-08-19 10:30:12 -04:00
Gureumi
a2ef11eb0f Fix 'has connected' message + Add chat font (#194)
* Fix 'has connected' message

* Add chat font
2018-08-19 10:29:40 -04:00
Anuken
b872252771 Removed unnecessary tungsten references 2018-08-18 23:02:10 -04:00
Leone25
b2c388276f Update bundle_ita.properties (#192) 2018-08-18 18:33:49 -04:00
Prosta4okua
178928f866 [Complete]Update bundle_uk_UA.properties (#188)
* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties

* Update bundle_uk_UA.properties
2018-08-18 13:10:57 -04:00
Prosta4okua
7e548f9969 Update bundle_ru.properties (#191)
* Update bundle_ru.properties

* Update bundle_ru.properties
2018-08-18 13:10:43 -04:00
Anuken
a60ce3c54c Merge branch 'master' of https://github.com/Anuken/Mindustry into resource-rework 2018-08-18 13:10:22 -04:00
Anuken
0f173bcc5a Increased blink frequency 2018-08-18 13:10:01 -04:00
Anuken
64dbe8312e Fixed merge issues 2018-08-18 13:07:54 -04:00
Anuken
7f443c71ae Merge remote-tracking branch 'origin/master' 2018-08-18 13:06:59 -04:00
Anuken
27276c025c Merge branch 'remove-ammo' of https://github.com/Anuken/Mindustry 2018-08-18 13:06:54 -04:00
Anuken
e9d03c179c init() test 2018-08-18 12:19:20 -04:00
Uriel
dec01c23a9 [Completed] Remaking spanish translation bundle (#187)
* started translating all the stuff

* translated more of the original english file

* translated more parts

* almost half of the file!

* MOREgit add .!

* Update bundle_es.properties

* completed

* forgot about these ones...
2018-08-18 08:57:42 -04:00
Anuken
e0eb227ce5 Recipe init() method added 2018-08-17 22:49:45 -04:00
Anuken
20021c5b31 Fixed 1-character names being valid / Fixed collideLine with tiles 2018-08-17 20:21:49 -04:00
Anuken
f8d6797fc2 Fixed android module being necessary to compile 2018-08-17 18:05:28 -04:00
Anuken
25051980ce Fixed category bundle properties missing 2018-08-17 14:51:18 -04:00
Anuken
fb8becca99 Minor ban fix 2018-08-17 14:09:31 -04:00
Anuken
25bd8a7eaa Fixed sector name not being displayed in saves 2018-08-17 13:02:53 -04:00
Anuken
bbd2424a3f Merge remote-tracking branch 'origin/master' 2018-08-17 12:55:18 -04:00
Anuken
83eeeed319 Discord rich presence improvements 2018-08-17 12:55:06 -04:00
Anuken
c92e8161a1 Merge pull request #190 from Prosta4okua/patch-21
[Complete] bundle_ru.properties
2018-08-17 11:33:29 -04:00
Anuken
258555c990 Merge remote-tracking branch 'origin/master' 2018-08-17 11:32:19 -04:00
Anuken
0f7799422e Crashes fixed 2018-08-17 11:32:12 -04:00
Anuken
177b565d7c Merge pull request #173 from Gab351/patch-1
Translate l227 to l239
2018-08-17 10:38:24 -04:00
Prosta4okua
a62b336b6c Update bundle_ru.properties 2018-08-17 12:59:51 +03:00
Prosta4okua
3ea61c8b3a Update bundle_ru.properties 2018-08-17 12:02:44 +03:00
Prosta4okua
4c57f9f902 Update bundle_ru.properties 2018-08-17 10:48:29 +03:00
Anuken
6d7941fba4 iOS portrait mode support 2018-08-16 18:38:43 -04:00
Anuken
020c6388c2 Block renaming 2018-08-16 18:38:04 -04:00
Anuken
53d35e8c77 Bundles updated / Fixed some localization bugs 2018-08-16 17:43:43 -04:00
Anuken
01f205d352 Merge pull request #189 from Leone25/patch-1
last update bundle_ita.properties
2018-08-16 17:38:44 -04:00
Anuken
a786167b04 Reduced health flash 2018-08-16 17:38:16 -04:00
Anuken
1699ab48e8 Added alternate health bar on all units 2018-08-16 17:07:20 -04:00
Leone25
b15c04a532 Update bundle_ita.properties 2018-08-16 21:10:04 +02:00
Anuken
20d3740e75 Branch created 2018-08-16 11:46:34 -04:00
Anuken
80d57f8c0c Comma fix 2018-08-16 11:25:27 -04:00
Anuken
1de367e89c Full chat revert / Crash fixes 2018-08-16 10:09:22 -04:00
Anuken
8850a89e30 Fixed game-over sector algorithm 2018-08-15 21:25:07 -04:00
Anuken
4f72011cf7 Fixed markup crash / setsector command fixed / Drone crash fixed 2018-08-15 21:00:40 -04:00
Anuken
c569232e74 Fixed multiblocks not accepting items 2018-08-15 19:38:13 -04:00
Anuken
14c526d0c4 Power distribution fix 2018-08-15 18:41:21 -04:00
Anuken
5c4ac6b702 Fixed major issue with Vector2.ZERO mutation 2018-08-15 18:37:20 -04:00
Anuken
d58cc18136 Fixed block targeting bug 2018-08-15 18:18:57 -04:00
Anuken
36c01fde94 Updated uCore / Minor server tweak 2018-08-15 17:46:33 -04:00
Anuken
d4d9d59fe4 Server sector commands / World data compression / Snapshot sent w/ world 2018-08-15 17:25:19 -04:00
Anuken
8dbd0a6130 Fixed drones repairing incorrect blocks 2018-08-15 16:28:00 -04:00
Anuken
3746344cba Crash fixes 2018-08-15 16:26:08 -04:00
Anuken
d07fd1bbfe Improved build sync 2018-08-15 15:16:56 -04:00
Anuken
02f95c0ed4 Merge remote-tracking branch 'origin/master' 2018-08-15 14:16:42 -04:00
Anuken
c98fcbd795 Turrets target blocks / Added core no-build radius 2018-08-15 14:13:50 -04:00
Anuken
d071877963 Merge pull request #186 from Leone25/patch-1
Big update for italian bundle
2018-08-15 13:12:18 -04:00
Anuken
0267cb4006 Conduit sprites improved / Fixed incorrect proximity update 2018-08-15 13:11:55 -04:00
Leone25
bf571e595c Update bundle_ita.properties 2018-08-15 19:05:18 +02:00
Anuken
c0cad70212 Merge remote-tracking branch 'origin/master' 2018-08-15 10:49:05 -04:00
Anuken
7bd6dbb4b4 Partial korean font PR revert / Crash fixes 2018-08-15 10:48:19 -04:00
Anuken
6d932e3d04 Merge pull request #185 from Prosta4okua/patch-19
Update bundle_ru.properties
2018-08-15 09:20:41 -04:00
Prosta4okua
e154b5179d Update bundle_ru.properties 2018-08-15 08:27:26 +03:00
Anuken
52110d6008 ok 2018-08-14 19:30:05 -04:00
Anuken
103b08fd1d Added build progress sync 2018-08-14 18:56:42 -04:00
Anuken
cb09d10e7f Merge remote-tracking branch 'origin/master' 2018-08-14 18:51:13 -04:00
Anuken
a041c1e60d Synced whole place queue / Fixed player flash desync 2018-08-14 18:51:06 -04:00
Anuken
586b4cf4bd Merge pull request #183 from cloud9350/master
Add korean chat fonts + fix typos
2018-08-14 18:32:52 -04:00
Leone25
d0ff149cca Update bundle_ita.properties 2018-08-14 21:07:39 +02:00
Anuken
f8ddc8325c Fixed puddle/IO crash / crafter storage / player NaN position / red tint 2018-08-14 12:24:04 -04:00
Anuken
59ec09e82c Crash fixes / Resource-steal fixed / No-build while shooting fixed 2018-08-14 12:16:21 -04:00
Anuken
2ae5c96690 Merge remote-tracking branch 'origin/master' 2018-08-14 10:42:09 -04:00
Anuken
fda9e6bb9c Various crashes fixed 2018-08-14 10:41:54 -04:00
Anuken
29bcb8e07c Removed bars 2018-08-14 10:29:45 -04:00
Leone25
b70de81c2d Update bundle_ita.properties 2018-08-14 14:41:38 +02:00
Gureumi
5e89b2568f Add korean chat fonts + fix typos 2018-08-14 15:59:07 +09:00
Anuken
ac1d8215ff Merge pull request #182 from Prosta4okua/patch-18
[COMPLETE]Update bundle_ru.properties
2018-08-13 22:21:06 -04:00
Leone25
fefc734bfa Update bundle_ita.properties 2018-08-12 22:24:10 +02:00
Prosta4okua
7f8735842c Update bundle_ru.properties 2018-08-12 22:28:23 +03:00
Prosta4okua
a226983470 Update bundle_ru.properties 2018-08-12 19:19:07 +03:00
Prosta4okua
28526d0a12 Update bundle_ru.properties 2018-08-12 18:54:51 +03:00
Prosta4okua
913e005bae Update bundle_ru.properties 2018-08-12 10:44:56 +03:00
Prosta4okua
7bd9fd5bae Update bundle_ru.properties 2018-08-12 00:12:55 +03:00
Anuken
8986b89d67 Removed unit ammo 2018-08-10 10:45:37 -04:00
Anuken
ef936214f0 Merge pull request #180 from Prosta4okua/patch-17
[Complete]Update bundle_uk_UA.properties
2018-08-10 10:20:43 -04:00
Anuken
18fce6b3e3 Merge pull request #179 from cloud9350/master
Change items name texts and update font
2018-08-10 09:12:52 -04:00
Prosta4okua
ecda4d74ab Update bundle_uk_UA.properties 2018-08-10 16:12:44 +03:00
Prosta4okua
31124037b5 Update bundle_uk_UA.properties 2018-08-10 16:07:46 +03:00
Prosta4okua
aaf95e0756 Update bundle_uk_UA.properties 2018-08-10 16:06:01 +03:00
Gureumi
804e311875 Update 2018-08-10 19:21:46 +09:00
Anuken
61ad9bc47d Merge remote-tracking branch 'origin/master' 2018-08-09 22:20:52 -04:00
Anuken
2b23b7876a Minor bugfix 2018-08-09 22:20:46 -04:00
Anuken
547d334f43 Merge pull request #178 from Leone25/patch-1
update italian boundle_ita
2018-08-09 19:29:34 -04:00
Leone25
7432dc115e Update bundle_ita.properties 2018-08-10 00:48:20 +02:00
Anuken
905defe8ce Merge pull request #177 from Prosta4okua/patch-15
Update bundle_ru.properties
2018-08-09 18:35:44 -04:00
Prosta4okua
0a8ff0cde7 Update bundle_ru.properties 2018-08-10 00:59:27 +03:00
Prosta4okua
bd5f44030e Update bundle_ru.properties 2018-08-10 00:53:41 +03:00
Anuken
79abb86262 Merge remote-tracking branch 'origin/master' 2018-08-09 17:45:09 -04:00
Anuken
fe6f98ec5a Minor bugfixes / Added block names to bundle/ Autogen ore names 2018-08-09 17:44:52 -04:00
Anuken
e39a856e54 Update TRANSLATING.md 2018-08-09 09:47:15 -04:00
Anuken
64e5f8155d Merge pull request #176 from cloud9350/patch-1
Update language ko file
2018-08-09 09:20:10 -04:00
Gureumi
8328b11f6b Update. 2018-08-09 19:54:09 +09:00
Anuken
15778b2ca5 Server hotfix 2018-08-08 22:37:52 -04:00
Anuken
b7842014c1 Fixed minor autotile bug 2018-08-08 22:29:56 -04:00
Anuken
a804053904 Typo fix / Biomatter compressor buffed 2018-08-08 21:10:57 -04:00
Anuken
2aee72b47b Improved host command 2018-08-08 20:57:24 -04:00
Anuken
0cb8c600b7 Merge remote-tracking branch 'origin/master' 2018-08-08 20:53:02 -04:00
Anuken
aa5348f37e Auto-play server sectors / Difficulty decrease / Improved d/c messages 2018-08-08 20:52:51 -04:00
Anuken
0736574a57 Merge pull request #174 from Prosta4okua/patch-13
[Сomlete]Update bundle_ru.properties
2018-08-08 20:07:23 -04:00
Anuken
d56365ce63 Merge pull request #175 from CinExPL/patch-1
Update bundle_pl.properties
2018-08-08 20:07:14 -04:00
Prosta4okua
c82d2f856a Update bundle_ru.properties 2018-08-09 00:02:22 +03:00
Prosta4okua
8432677826 Update bundle_ru.properties 2018-08-08 23:58:41 +03:00
Prosta4okua
0c0c6e5470 Update bundle_ru.properties 2018-08-08 23:56:42 +03:00
Anuken
57019b6e20 Fixed oil extractor desync / Buffed thermal genenerator / Typo fix 2018-08-08 16:00:33 -04:00
CinExPL
12ab2249b4 Update bundle_pl.properties 2018-08-08 21:10:42 +02:00
Anuken
22d0992d38 Merge remote-tracking branch 'origin/master' 2018-08-08 15:04:04 -04:00
Anuken
f8def04653 Overall difficulty decrease / Crash fix / Server fillitems command 2018-08-08 15:02:51 -04:00
Anuken
6349530fc5 Updated build.gradle 2018-08-08 14:42:10 -04:00
Anuken
ad83a7dcc3 Merge remote-tracking branch 'origin/master' 2018-08-08 12:37:46 -04:00
Anuken
cfc2239733 Minor iso changes 2018-08-08 12:37:29 -04:00
Anuken
91552a3a2b Various bugfixes 2018-08-08 12:22:47 -04:00
Anuken
4e3204bc6d All known crashes fixed 2018-08-08 11:18:30 -04:00
Anuken
a94998bd02 Merge remote-tracking branch 'origin/master' 2018-08-08 10:43:09 -04:00
Anuken
81c78eafa6 Biomass compressor fix / Crash fix / Removed spawners in waves 2018-08-08 10:43:03 -04:00
Prosta4okua
273523480f Update bundle_ru.properties 2018-08-08 08:34:44 +03:00
Anuken
b27fefae88 Misc fixes 2018-08-08 01:09:57 -04:00
Anuken
aa00a1b8d1 Minor save-time fix 2018-08-07 20:16:50 -04:00
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
Leone25
3acb843109 Update bundle_ita.properties 2018-08-07 21:48:42 +02:00
Leone25
1768aea66f Update bundle_ita.properties 2018-08-07 20:54:40 +02: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
Leone25
b4272e0387 Update bundle_ita.properties 2018-08-06 20:44:09 +02: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
Gab_351
502c4e51ae Translate l227 to l239 2018-08-06 15:16:39 +03: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
677526cb16 Fixed iOS NullPtr 2018-07-03 19:03:53 -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
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
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
1274 changed files with 58469 additions and 33677 deletions

8
.gitignore vendored
View File

@@ -2,6 +2,8 @@
/core/assets/mindustry-saves/ /core/assets/mindustry-saves/
/core/assets/mindustry-maps/ /core/assets/mindustry-maps/
/core/assets/bundles/output/
/core/assets/.gifimages/
/deploy/ /deploy/
/desktop/packr-out/ /desktop/packr-out/
/desktop/packr-export/ /desktop/packr-export/
@@ -12,13 +14,17 @@
/core/assets-raw/sprites/generated/ /core/assets-raw/sprites/generated/
/annotations/build/ /annotations/build/
/kryonet/build/ /kryonet/build/
/packer/build/ /tools/build/
/tests/build/
/server/build/ /server/build/
/test_files/
/annotations/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
/ios/src/io/anuke/mindustry/gen/
*.gif *.gif
version.properties version.properties

View File

@@ -5,16 +5,19 @@ jdk:
android: android:
components: components:
- android-26 - android-28
# 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-28
- build-tools-28.0.3
script: script:
- ./gradlew test
- ./gradlew desktop:dist - ./gradlew desktop:dist
- ./gradlew server:dist
after_success: after_success:
- chmod +x upload-build.sh - chmod +x upload-build.sh

View File

@@ -1,11 +1,10 @@
![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) [![Discord](https://img.shields.io/discord/391020510269669376.svg)](https://discord.gg/mindustry)
A pixelated sandbox tower defense game made using [LibGDX](https://libgdx.badlogicgames.com/). Winner of the [GDL Metal Monstrosity Jam](https://itch.io/jam/gdl---metal-monstrosity-jam). A 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)_
@@ -32,7 +31,7 @@ _Building:_ `./gradlew desktop:dist`
--- ---
Gradle may take up to several minutes to download files. Be patient. <br> Gradle may take up to several minutes to download files. Be patient. <br>
After building, the output .JAR file should be in the output JAR file should be in `/desktop/build/libs/desktop-release.jar.` After building, the output .JAR file should be in `/desktop/build/libs/desktop-release.jar.`
### Downloads ### Downloads

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`". If you don't find one, create one manually (more info below).
#### 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

@@ -20,8 +20,8 @@
<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="sensor" android:screenOrientation="user"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View File

@@ -24,7 +24,6 @@ dependencies {
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a" 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"
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64" 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" implementation "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion"
} }
@@ -32,13 +31,13 @@ task deploy(type: Copy){
dependsOn "assembleRelease" dependsOn "assembleRelease"
from "build/outputs/apk/google/release/android-google-release.apk" from "build/outputs/apk/google/release/android-google-release.apk"
into "../deploy/"; into "../deploy/"
rename ("android-google-release.apk", appName + "-android-" + getVersionString() + ".apk"); rename ("android-google-release.apk", appName + "-android-" + getVersionString() + ".apk")
} }
android { android {
buildToolsVersion '27.0.3' buildToolsVersion '28.0.3'
compileSdkVersion 27 compileSdkVersion 28
sourceSets { sourceSets {
main { main {
manifest.srcFile 'AndroidManifest.xml' manifest.srcFile 'AndroidManifest.xml'
@@ -101,7 +100,7 @@ android {
keyAlias RELEASE_KEY_ALIAS keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD keyPassword RELEASE_KEY_PASSWORD
}else{ }else{
println("No keystore info property found!"); println("No keystore info property found!")
} }
} }
} }
@@ -116,11 +115,11 @@ android {
// the natives configuration, and extracts them to the proper libs/ folders // the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK. // so they get packed with the APK.
task copyAndroidNatives() { task copyAndroidNatives() {
file("libs/armeabi/").mkdirs(); file("libs/armeabi/").mkdirs()
file("libs/armeabi-v7a/").mkdirs(); file("libs/armeabi-v7a/").mkdirs()
file("libs/arm64-v8a/").mkdirs(); file("libs/arm64-v8a/").mkdirs()
file("libs/x86_64/").mkdirs(); file("libs/x86_64/").mkdirs()
file("libs/x86/").mkdirs(); file("libs/x86/").mkdirs()
configurations.natives.files.each { jar -> configurations.natives.files.each { jar ->
def outputDir = null def outputDir = null
@@ -138,6 +137,7 @@ task copyAndroidNatives() {
} }
} }
} }
task run(type: Exec) { task run(type: Exec) {
def path def path
def localProperties = project.file("../local.properties") def localProperties = project.file("../local.properties")
@@ -159,47 +159,18 @@ task run(type: Exec) {
def adb = path + "/platform-tools/adb" def adb = path + "/platform-tools/adb"
commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher' commandLine "$adb", 'shell', 'am', 'start', '-n', 'io.anuke.mindustry/io.anuke.mindustry.AndroidLauncher'
} }
// sets up the Android Eclipse project, using the old Ant based build.
eclipse {
// need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin
// ignores any nodes added in classpath.file.withXml
sourceSets {
main {
java.srcDirs "src", 'gen'
}
}
jdt {
sourceCompatibility = 1.7
targetCompatibility = 1.7
}
classpath {
plusConfigurations += [project.configurations.compile]
containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'
}
project {
name = appName + "-android"
natures 'com.android.ide.eclipse.adt.AndroidNature'
buildCommands.clear();
buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder"
buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder"
buildCommand "org.eclipse.jdt.core.javabuilder"
buildCommand "com.android.ide.eclipse.adt.ApkBuilder"
}
}
// sets up the Android Idea project, using the old Ant based build. // sets up the Android Idea project, using the old Ant based build.
idea { idea {
module { module {
sourceDirs += file("src"); sourceDirs += file("src")
scopes = [COMPILE: [plus: [project.configurations.compile]]] scopes = [COMPILE: [plus: [project.configurations.compile]]]
iml { iml {
withXml { withXml {
def node = it.asNode() def node = it.asNode()
def builder = NodeBuilder.newInstance(); def builder = NodeBuilder.newInstance()
builder.current = node; builder.current = node
builder.component(name: "FacetManager") { builder.component(name: "FacetManager") {
facet(type: "android", name: "Android") { facet(type: "android", name: "Android") {
configuration { configuration {

View File

@@ -12,7 +12,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="text" android:inputType="text"
android:maxLines="1" android:maxLines="1"
android:maxLength="15"
> >
<requestFocus /> <requestFocus />

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 달러</item>
<item>2 달러</item>
<item>5 달러</item>
<item>10 달러</item>
<item>15 달러</item>
<item>25 달러</item>
<item>50 달러</item>
</string-array>
</resources>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mindustry</string>
<string-array name="donation_google_catalog_values">
<item>1 Доллар</item>
<item>2 Доллара</item>
<item>5 Доллара</item>
<item>10 Долларов</item>
<item>15 Долларов</item>
<item>25 Долларов</item>
<item>50 Долларов</item>
</string-array>
</resources>

View File

@@ -12,7 +12,6 @@ import android.provider.Settings.Secure;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.Log; import android.util.Log;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.Base64Coder;
@@ -25,8 +24,8 @@ 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.Platform;
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider; import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
import io.anuke.mindustry.game.Saves.SaveSlot;
import io.anuke.mindustry.io.SaveIO; import io.anuke.mindustry.io.SaveIO;
import io.anuke.mindustry.io.Saves.SaveSlot;
import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.ui.dialogs.FileChooser; import io.anuke.mindustry.ui.dialogs.FileChooser;
import io.anuke.ucore.function.Consumer; import io.anuke.ucore.function.Consumer;
@@ -48,238 +47,201 @@ import java.util.Locale;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.*;
public class AndroidLauncher extends AndroidApplication{ public class AndroidLauncher extends PatchedAndroidApplication{
public static final int PERMISSION_REQUEST_CODE = 1; public static final int PERMISSION_REQUEST_CODE = 1;
boolean doubleScaleTablets = true;
FileChooser chooser;
boolean doubleScaleTablets = true; @Override
FileChooser chooser; protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.useImmersiveMode = true;
Platform.instance = new Platform(){
DateFormat format = SimpleDateFormat.getDateTimeInstance();
@Override @Override
protected void onCreate(Bundle savedInstanceState){ public String format(Date date){
super.onCreate(savedInstanceState); return format.format(date);
}
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); @Override
config.useImmersiveMode = true; public String format(int number){
return NumberFormat.getIntegerInstance().format(number);
}
Platform.instance = new Platform(){ @Override
DateFormat format = SimpleDateFormat.getDateTimeInstance(); public void addDialog(TextField field, int length){
TextFieldDialogListener.add(field, 0, length);
}
@Override @Override
public boolean hasDiscord() { public String getLocaleName(Locale locale){
return isPackageInstalled("com.discord"); return locale.getDisplayName(locale);
} }
@Override @Override
public String format(Date date){ public void openDonations(){
return format.format(date); showDonations();
} }
@Override @Override
public String format(int number){ public ThreadProvider getThreadProvider(){
return NumberFormat.getIntegerInstance().format(number); return new DefaultThreadImpl();
} }
@Override @Override
public void addDialog(TextField field, int length){ public String getUUID(){
TextFieldDialogListener.add(field, 0, length); 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));
}
String result = new String(Base64Coder.encode(data));
if(result.equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID.");
return result;
}catch(Exception e){
return super.getUUID();
}
}
@Override @Override
public String getLocaleName(Locale locale){ public void shareFile(FileHandle file){
return locale.getDisplayName(locale); }
}
@Override @Override
public void openDonations() { public void showFileChooser(String text, String content, Consumer<FileHandle> cons, boolean open, String filetype){
showDonations(); 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 @Override
public ThreadProvider getThreadProvider() { public void beginForceLandscape(){
return new DefaultThreadImpl(); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} }
@Override @Override
public boolean isDebug() { public void endForceLandscape(){
return false; setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
} }
@Override
public String 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));
}
String result = new String(Base64Coder.encode(data));
if(result.equals("AAAAAAAAAOA=")) throw new RuntimeException("Bad UUID.");
return result;
}catch (Exception e){
return super.getUUID();
}
}
@Override
public void shareFile(FileHandle file){
}
@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;
@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());
}
checkFiles(getIntent()); @Override
} public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
if(requestCode == PERMISSION_REQUEST_CODE){
for(int i : grantResults){
if(i != PackageManager.PERMISSION_GRANTED) return;
}
if(chooser != null){
chooser.show();
}
}
}
@Override private void checkFiles(Intent intent){
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { try{
if(requestCode == PERMISSION_REQUEST_CODE){ Uri uri = intent.getData();
for(int i : grantResults){ if(uri != null){
if(i != PackageManager.PERMISSION_GRANTED) return; 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.saves.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();
}
}
if(chooser != null){ private boolean isPackageInstalled(String packagename){
chooser.show(); try{
} getPackageManager().getPackageInfo(packagename, 0);
} return true;
} }catch(Exception e){
return false;
}
}
private void checkFiles(Intent intent){ private boolean isTablet(Context context){
try { TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Uri uri = intent.getData(); return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
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); private void showDonations(){
boolean map = uri.getPath().endsWith(mapExtension); Intent intent = new Intent(this, DonationsActivity.class);
startActivity(intent);
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 boolean isPackageInstalled(String packagename) {
try {
getPackageManager().getPackageInfo(packagename, 0);
return true;
} catch (Exception e) {
return false;
}
}
private boolean isTablet(Context context) {
TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
return manager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE;
}
private void showDonations(){
Intent intent = new Intent(this, DonationsActivity.class);
startActivity(intent);
}
} }

View File

@@ -11,20 +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(() -> {
AlertDialog dialog = builder.create(); AlertDialog dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
@@ -33,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);
@@ -55,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 ignored){
} }
}
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,30 +46,27 @@ 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 = findViewById(org.sufficientlysecure.donations.R.id.donations__google_android_market_donate_button);
b.setOnClickListener(new View.OnClickListener() { b.setOnClickListener(view -> {
@Override public void onClick(View view) { donationsFragment.donateGoogleOnClick(donationsFragment.getView());
donationsFragment.donateGoogleOnClick(donationsFragment.getView()); b.setEnabled(false);
b.setEnabled(false);
}
}); });
} }
/** /**
* 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 = 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, 16); 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();
} }
} }

View File

@@ -5,74 +5,38 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
/** public class Annotations{
* 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> /** Marks a class as serializable.*/
*/ @Target(ElementType.TYPE)
public class Annotations { @Retention(RetentionPolicy.SOURCE)
public @interface Serialize{
/**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. Server 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;
/**The simple class name where this method is placed.*/
String in() default "Call";
/**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> public enum PacketPriority{
* This method must return void and have two parameters, the first being of type {@link java.nio.ByteBuffer} and the second /** Gets put in a queue and processed if not connected. */
* 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();
}
public enum PacketPriority {
/**Gets put in a queue and processed if not connected.*/
normal, normal,
/**Gets handled immediately, regardless of connection status.*/ /** Gets handled immediately, regardless of connection status. */
high, high,
/**Does not get handled unless client is connected.*/ /** Does not get handled unless client is connected. */
low low
} }
/**A set of two booleans, one specifying server and one specifying client.*/ /** A set of two booleans, one specifying server and one specifying client. */
public enum Loc { public enum Loc{
/**Method can only be invoked on the client from the server.*/ /** Method can only be invoked on the client from the server. */
server(true, false), server(true, false),
/**Method can only be invoked on the server from the client.*/ /** Method can only be invoked on the server from the client. */
client(false, true), client(false, true),
/**Method can be invoked from anywhere*/ /** Method can be invoked from anywhere */
both(true, true), both(true, true),
/**Neither server no client.*/ /** Neither server nor client. */
none(false, false); none(false, false);
/**If true, this method can be invoked ON clients FROM servers.*/ /** If true, this method can be invoked ON clients FROM servers. */
public final boolean isServer; public final boolean isServer;
/**If true, this method can be invoked ON servers FROM clients.*/ /** If true, this method can be invoked ON servers FROM clients. */
public final boolean isClient; public final boolean isClient;
Loc(boolean server, boolean client){ Loc(boolean server, boolean client){
@@ -81,12 +45,12 @@ public class Annotations {
} }
} }
public enum Variant { public enum Variant{
/**Method can only be invoked targeting one player.*/ /** Method can only be invoked targeting one player. */
one(true, false), one(true, false),
/**Method can only be invoked targeting all players.*/ /** Method can only be invoked targeting all players. */
all(false, true), all(false, true),
/**Method targets both one player and all players.*/ /** Method targets both one player and all players. */
both(true, true); both(true, true);
public final boolean isOne, isAll; public final boolean isOne, isAll;
@@ -96,4 +60,52 @@ public class Annotations {
this.isAll = isAll; this.isAll = isAll;
} }
} }
/** Marks a method as invokable remotely across a server/client connection. */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
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.SOURCE)
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.SOURCE)
public @interface ReadClass{
Class<?> value();
}
} }

View File

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

View File

@@ -10,12 +10,16 @@ import javax.tools.Diagnostic.Kind;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set; 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.*/ * This class finds reader and writer methods annotated by the {@link io.anuke.annotations.Annotations.WriteClass}
public class IOFinder { * 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.*/ * 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){ public HashMap<String, ClassSerializer> findSerializers(RoundEnvironment env){
HashMap<String, ClassSerializer> result = new HashMap<>(); HashMap<String, ClassSerializer> result = new HashMap<>();
@@ -51,33 +55,33 @@ public class IOFinder {
} }
private String getValue(WriteClass write){ private String getValue(WriteClass write){
try { try{
Class<?> type = write.value(); Class<?> type = write.value();
return type.getName(); return type.getName();
}catch (MirroredTypeException e){ }catch(MirroredTypeException e){
return e.getTypeMirror().toString(); return e.getTypeMirror().toString();
} }
} }
private String getValue(ReadClass read){ private String getValue(ReadClass read){
try { try{
Class<?> type = read.value(); Class<?> type = read.value();
return type.getName(); return type.getName();
}catch (MirroredTypeException e){ }catch(MirroredTypeException e){
return e.getTypeMirror().toString(); return e.getTypeMirror().toString();
} }
} }
/**Information about read/write methods for a specific class type.*/ /** Information about read/write methods for a specific class type. */
public static class ClassSerializer{ public static class ClassSerializer{
/**Fully qualified method name of the reader.*/ /** Fully qualified method name of the reader. */
public final String readMethod; public final String readMethod;
/**Fully qualified method name of the writer.*/ /** Fully qualified method name of the writer. */
public final String writeMethod; public final String writeMethod;
/**Fully qualified class type name.*/ /** Fully qualified class type name. */
public final String classType; public final String classType;
public ClassSerializer(String readMethod, String writeMethod, String classType) { public ClassSerializer(String readMethod, String writeMethod, String classType){
this.readMethod = readMethod; this.readMethod = readMethod;
this.writeMethod = writeMethod; this.writeMethod = writeMethod;
this.classType = classType; this.classType = classType;

View File

@@ -6,32 +6,34 @@ import io.anuke.annotations.Annotations.Variant;
import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.ExecutableElement;
/**Class that repesents a remote method to be constructed and put into a class.*/ /** Class that repesents a remote method to be constructed and put into a class. */
public class MethodEntry { public class MethodEntry{
/**Simple target class name.*/ /** Simple target class name. */
public final String className; public final String className;
/**Fully qualified target method to call.*/ /** Fully qualified target method to call. */
public final String targetMethod; public final String targetMethod;
/**Whether this method can be called on a client/server.*/ /** Whether this method can be called on a client/server. */
public final Loc where; 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.*/ * 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; public final Variant target;
/**Whether this method is called locally as well as remotely.*/ /** Whether this method is called locally as well as remotely. */
public final Loc local; public final Loc local;
/**Whether this method is unreliable and uses UDP.*/ /** Whether this method is unreliable and uses UDP. */
public final boolean unreliable; public final boolean unreliable;
/**Whether to forward this method call to all other clients when a client invokes it. Server only.*/ /** Whether to forward this method call to all other clients when a client invokes it. Server only. */
public final boolean forward; public final boolean forward;
/**Unique method ID.*/ /** Unique method ID. */
public final int id; public final int id;
/**The element method associated with this entry.*/ /** The element method associated with this entry. */
public final ExecutableElement element; public final ExecutableElement element;
/**The assigned packet priority. Only used in clients.*/ /** The assigned packet priority. Only used in clients. */
public final PacketPriority priority; public final PacketPriority priority;
public MethodEntry(String className, String targetMethod, Loc where, Variant target, public MethodEntry(String className, String targetMethod, Loc where, Variant target,
Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority) { Loc local, boolean unreliable, boolean forward, int id, ExecutableElement element, PacketPriority priority){
this.className = className; this.className = className;
this.forward = forward; this.forward = forward;
this.targetMethod = targetMethod; this.targetMethod = targetMethod;
@@ -45,7 +47,7 @@ public class MethodEntry {
} }
@Override @Override
public int hashCode() { public int hashCode(){
return targetMethod.hashCode(); return targetMethod.hashCode();
} }
} }

View File

@@ -18,25 +18,27 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**The annotation processor for generating remote method call code.*/ /** The annotation processor for generating remote method call code. */
@SupportedSourceVersion(SourceVersion.RELEASE_8) @SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({ @SupportedAnnotationTypes({
"io.anuke.annotations.Annotations.Remote", "io.anuke.annotations.Annotations.Remote",
"io.anuke.annotations.Annotations.WriteClass", "io.anuke.annotations.Annotations.WriteClass",
"io.anuke.annotations.Annotations.ReadClass", "io.anuke.annotations.Annotations.ReadClass",
}) })
public class RemoteMethodAnnotationProcessor extends AbstractProcessor { public class RemoteMethodAnnotationProcessor extends AbstractProcessor{
/**Maximum size of each event packet.*/ /** Maximum size of each event packet. */
public static final int maxPacketSize = 4096; public static final int maxPacketSize = 4096;
/**Name of the base package to put all the generated classes.*/ /** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen"; private static final String packageName = "io.anuke.mindustry.gen";
/**Name of class that handles reading and invoking packets on the server.*/ /** Name of class that handles reading and invoking packets on the server. */
private static final String readServerName = "RemoteReadServer"; private static final String readServerName = "RemoteReadServer";
/**Name of class that handles reading and invoking packets on the client.*/ /** Name of class that handles reading and invoking packets on the client. */
private static final String readClientName = "RemoteReadClient"; private static final String readClientName = "RemoteReadClient";
/**Simple class name of generated class name.*/
private static final String callLocation = "Call";
/**Processing round number.*/ /** Processing round number. */
private int round; private int round;
//class serializers //class serializers
@@ -51,7 +53,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
private ArrayList<ClassEntry> classes; private ArrayList<ClassEntry> classes;
@Override @Override
public synchronized void init(ProcessingEnvironment processingEnv) { public synchronized void init(ProcessingEnvironment processingEnv){
super.init(processingEnv); super.init(processingEnv);
//put all relevant utils into utils class //put all relevant utils into utils class
Utils.typeUtils = processingEnv.getTypeUtils(); Utils.typeUtils = processingEnv.getTypeUtils();
@@ -61,18 +63,17 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
} }
@Override @Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
if(round > 1) return false; //only process 2 rounds if(round > 1) return false; //only process 2 rounds
round ++; round++;
try { try{
//round 1: find all annotations, generate *writers* //round 1: find all annotations, generate *writers*
if(round == 1) { if(round == 1){
//get serializers //get serializers
serializers = new IOFinder().findSerializers(roundEnv); serializers = new IOFinder().findSerializers(roundEnv);
//last method ID used //last method ID used
int lastMethodID = 0; int lastMethodID = 0;
//find all elements with the Remote annotation //find all elements with the Remote annotation
@@ -88,29 +89,29 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
orderedElements.sort(Comparator.comparing(Object::toString)); orderedElements.sort(Comparator.comparing(Object::toString));
//create methods //create methods
for (Element element : orderedElements) { for(Element element : orderedElements){
Remote annotation = element.getAnnotation(Remote.class); Remote annotation = element.getAnnotation(Remote.class);
//check for static //check for static
if (!element.getModifiers().contains(Modifier.STATIC) || !element.getModifiers().contains(Modifier.PUBLIC)) { 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); Utils.messager.printMessage(Kind.ERROR, "All @Remote methods must be public and static: ", element);
} }
//can't generate none methods //can't generate none methods
if (annotation.targets() == Loc.none) { if(annotation.targets() == Loc.none){
Utils.messager.printMessage(Kind.ERROR, "A @Remote method's targets() cannot be equal to 'none':", element); Utils.messager.printMessage(Kind.ERROR, "A @Remote method's targets() cannot be equal to 'none':", element);
} }
//get and create class entry if needed //get and create class entry if needed
if (!classMap.containsKey(annotation.in())) { if(!classMap.containsKey(callLocation)){
ClassEntry clas = new ClassEntry(annotation.in()); ClassEntry clas = new ClassEntry(callLocation);
classMap.put(annotation.in(), clas); classMap.put(callLocation, clas);
classes.add(clas); classes.add(clas);
Utils.messager.printMessage(Kind.NOTE, "Generating class '" + clas.name + "'."); Utils.messager.printMessage(Kind.NOTE, "Generating class '" + clas.name + "'.");
} }
ClassEntry entry = classMap.get(annotation.in()); ClassEntry entry = classMap.get(callLocation);
//create and add entry //create and add entry
MethodEntry method = new MethodEntry(entry.name, Utils.getMethodName(element), annotation.targets(), annotation.variants(), MethodEntry method = new MethodEntry(entry.name, Utils.getMethodName(element), annotation.targets(), annotation.variants(),
@@ -127,7 +128,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
writegen.generateFor(classes, packageName); writegen.generateFor(classes, packageName);
return true; return true;
}else if(round == 2) { //round 2: generate all *readers* }else if(round == 2){ //round 2: generate all *readers*
RemoteReadGenerator readgen = new RemoteReadGenerator(serializers); RemoteReadGenerator readgen = new RemoteReadGenerator(serializers);
//generate server readers //generate server readers
@@ -147,7 +148,7 @@ public class RemoteMethodAnnotationProcessor extends AbstractProcessor {
return true; return true;
} }
}catch (Exception e){ }catch(Exception e){
e.printStackTrace(); e.printStackTrace();
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@@ -14,22 +14,25 @@ import java.nio.ByteBuffer;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
/**Generates code for reading remote invoke packets on the client and server.*/ /** Generates code for reading remote invoke packets on the client and server. */
public class RemoteReadGenerator { public class RemoteReadGenerator{
private final HashMap<String, ClassSerializer> serializers; private final HashMap<String, ClassSerializer> serializers;
/**Creates a read generator that uses the supplied serializer setup.*/ /** Creates a read generator that uses the supplied serializer setup. */
public RemoteReadGenerator(HashMap<String, ClassSerializer> serializers) { public RemoteReadGenerator(HashMap<String, ClassSerializer> serializers){
this.serializers = serializers; this.serializers = serializers;
} }
/**Generates a class for reading remote invoke packets. /**
* Generates a class for reading remote invoke packets.
*
* @param entries List of methods to use/ * @param entries List of methods to use/
* @param className Simple target class name. * @param className Simple target class name.
* @param packageName Full target package name. * @param packageName Full target package name.
* @param needsPlayer Whether this read method requires a reference to the player sender.*/ * @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) public void generateFor(List<MethodEntry> entries, String className, String packageName, boolean needsPlayer)
throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException { throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException, IOException{
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC); TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
@@ -69,10 +72,10 @@ public class RemoteReadGenerator {
StringBuilder varResult = new StringBuilder(); StringBuilder varResult = new StringBuilder();
//go through each parameter //go through each parameter
for(int i = 0; i < entry.element.getParameters().size(); i ++){ for(int i = 0; i < entry.element.getParameters().size(); i++){
VariableElement var = entry.element.getParameters().get(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 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 //full type name of parameter
String typeName = var.asType().toString(); String typeName = var.asType().toString();
//name of parameter //name of parameter
@@ -81,17 +84,17 @@ public class RemoteReadGenerator {
String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1); String capName = typeName.equals("byte") ? "" : Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
//write primitives automatically //write primitives automatically
if (Utils.isPrimitive(typeName)) { if(Utils.isPrimitive(typeName)){
if (typeName.equals("boolean")) { if(typeName.equals("boolean")){
readBlock.addStatement("boolean " + varName + " = buffer.get() == 1"); readBlock.addStatement("boolean " + varName + " = buffer.get() == 1");
} else { }else{
readBlock.addStatement(typeName + " " + varName + " = buffer.get" + capName + "()"); readBlock.addStatement(typeName + " " + varName + " = buffer.get" + capName + "()");
} }
} else { }else{
//else, try and find a serializer //else, try and find a serializer
ClassSerializer ser = serializers.get(typeName); ClassSerializer ser = serializers.get(typeName);
if (ser == null) { //make sure a serializer exists! if(ser == null){ //make sure a serializer exists!
Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: '" + typeName + "'", var); Utils.messager.printMessage(Kind.ERROR, "No @ReadClass method to read class type: '" + typeName + "'", var);
return; return;
} }
@@ -121,7 +124,7 @@ public class RemoteReadGenerator {
} }
readBlock.nextControlFlow("catch (java.lang.Exception e)"); 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.addStatement("throw new java.lang.RuntimeException(\"Failed to to read remote method '" + entry.element.getSimpleName() + "'!\", e)");
readBlock.endControlFlow(); readBlock.endControlFlow();
} }

View File

@@ -14,17 +14,17 @@ import java.nio.ByteBuffer;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
/**Generates code for writing remote invoke packets on the client and server.*/ /** Generates code for writing remote invoke packets on the client and server. */
public class RemoteWriteGenerator { public class RemoteWriteGenerator{
private final HashMap<String, ClassSerializer> serializers; private final HashMap<String, ClassSerializer> serializers;
/**Creates a write generator that uses the supplied serializer setup.*/ /** Creates a write generator that uses the supplied serializer setup. */
public RemoteWriteGenerator(HashMap<String, ClassSerializer> serializers) { public RemoteWriteGenerator(HashMap<String, ClassSerializer> serializers){
this.serializers = serializers; this.serializers = serializers;
} }
/**Generates all classes in this list.*/ /** Generates all classes in this list. */
public void generateFor(List<ClassEntry> entries, String packageName) throws IOException { public void generateFor(List<ClassEntry> entries, String packageName) throws IOException{
for(ClassEntry entry : entries){ for(ClassEntry entry : entries){
//create builder //create builder
@@ -58,7 +58,7 @@ public class RemoteWriteGenerator {
} }
} }
/**Creates a specific variant for a method entry.*/ /** Creates a specific variant for a method entry. */
private void writeMethodVariant(TypeSpec.Builder classBuilder, MethodEntry methodEntry, boolean toAll, boolean forwarded){ private void writeMethodVariant(TypeSpec.Builder classBuilder, MethodEntry methodEntry, boolean toAll, boolean forwarded){
ExecutableElement elem = methodEntry.element; ExecutableElement elem = methodEntry.element;
@@ -99,7 +99,7 @@ public class RemoteWriteGenerator {
if(!forwarded && methodEntry.local != Loc.none){ if(!forwarded && methodEntry.local != Loc.none){
//add in local checks //add in local checks
if(methodEntry.local != Loc.both){ if(methodEntry.local != Loc.both){
method.beginControlFlow("if("+getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())"); method.beginControlFlow("if(" + getCheckString(methodEntry.local) + " || !io.anuke.mindustry.net.Net.active())");
} }
//concatenate parameters //concatenate parameters
@@ -109,16 +109,16 @@ public class RemoteWriteGenerator {
//special case: calling local-only methods uses the local player //special case: calling local-only methods uses the local player
if(index == 0 && methodEntry.where == Loc.client){ if(index == 0 && methodEntry.where == Loc.client){
results.append("io.anuke.mindustry.Vars.players[0]"); results.append("io.anuke.mindustry.Vars.players[0]");
}else { }else{
results.append(var.getSimpleName()); results.append(var.getSimpleName());
} }
if(index != elem.getParameters().size() - 1) results.append(", "); if(index != elem.getParameters().size() - 1) results.append(", ");
index ++; index++;
} }
//add the statement to call it //add the statement to call it
method.addStatement("$N." + elem.getSimpleName() + "(" + results.toString() + ")", method.addStatement("$N." + elem.getSimpleName() + "(" + results.toString() + ")",
((TypeElement)elem.getEnclosingElement()).getQualifiedName().toString()); ((TypeElement) elem.getEnclosingElement()).getQualifiedName().toString());
if(methodEntry.local != Loc.both){ if(methodEntry.local != Loc.both){
method.endControlFlow(); method.endControlFlow();
@@ -126,10 +126,10 @@ public class RemoteWriteGenerator {
} }
//start control flow to check if it's actually client/server so no netcode is called //start control flow to check if it's actually client/server so no netcode is called
method.beginControlFlow("if("+getCheckString(methodEntry.where)+")"); method.beginControlFlow("if(" + getCheckString(methodEntry.where) + ")");
//add statement to create packet from pool //add statement to create packet from pool
method.addStatement("$1N packet = $2N.obtain($1N.class)", "io.anuke.mindustry.net.Packets.InvokePacket", "com.badlogic.gdx.utils.Pools"); method.addStatement("$1N packet = $2N.obtain($1N.class, $1N::new)", "io.anuke.mindustry.net.Packets.InvokePacket", "io.anuke.ucore.util.Pooling");
//assign buffer //assign buffer
method.addStatement("packet.writeBuffer = TEMP_BUFFER"); method.addStatement("packet.writeBuffer = TEMP_BUFFER");
//assign priority //assign priority
@@ -139,7 +139,7 @@ public class RemoteWriteGenerator {
//rewind buffer //rewind buffer
method.addStatement("TEMP_BUFFER.position(0)"); method.addStatement("TEMP_BUFFER.position(0)");
for(int i = 0; i < elem.getParameters().size(); i ++){ for(int i = 0; i < elem.getParameters().size(); i++){
//first argument is skipped as it is always the player caller //first argument is skipped as it is always the player caller
if((!methodEntry.where.isServer/* || methodEntry.mode == Loc.both*/) && i == 0){ if((!methodEntry.where.isServer/* || methodEntry.mode == Loc.both*/) && i == 0){
continue; continue;
@@ -164,7 +164,7 @@ public class RemoteWriteGenerator {
method.beginControlFlow("if(io.anuke.mindustry.net.Net.server())"); 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(Utils.isPrimitive(typeName)){ //check if it's a primitive, and if so write it
if(typeName.equals("boolean")){ //booleans are special if(typeName.equals("boolean")){ //booleans are special
method.addStatement("TEMP_BUFFER.put(" + varName + " ? (byte)1 : 0)"); method.addStatement("TEMP_BUFFER.put(" + varName + " ? (byte)1 : 0)");
}else{ }else{
@@ -181,7 +181,7 @@ public class RemoteWriteGenerator {
} }
//add statement for writing it //add statement for writing it
method.addStatement(ser.writeMethod + "(TEMP_BUFFER, " + varName +")"); method.addStatement(ser.writeMethod + "(TEMP_BUFFER, " + varName + ")");
} }
if(writePlayerSkipCheck){ //write end check if(writePlayerSkipCheck){ //write end check
@@ -197,7 +197,7 @@ public class RemoteWriteGenerator {
if(forwarded){ //forward packet if(forwarded){ //forward packet
if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation if(!methodEntry.local.isClient){ //if the client doesn't get it called locally, forward it back after validation
sendString = "send("; sendString = "send(";
}else { }else{
sendString = "sendExcept(exceptSenderID, "; sendString = "sendExcept(exceptSenderID, ";
} }
}else if(toAll){ //send to all players / to server }else if(toAll){ //send to all players / to server
@@ -207,8 +207,8 @@ public class RemoteWriteGenerator {
} }
//send the actual packet //send the actual packet
method.addStatement("io.anuke.mindustry.net.Net." + sendString + "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")+")"); (methodEntry.unreliable ? "io.anuke.mindustry.net.Net.SendMode.udp" : "io.anuke.mindustry.net.Net.SendMode.tcp") + ")");
//end check for server/client //end check for server/client
@@ -220,7 +220,7 @@ public class RemoteWriteGenerator {
private String getCheckString(Loc loc){ private String getCheckString(Loc loc){
return loc.isClient && loc.isServer ? "io.anuke.mindustry.net.Net.server() || io.anuke.mindustry.net.Net.client()" : 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.isClient ? "io.anuke.mindustry.net.Net.client()" :
loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false"; loc.isServer ? "io.anuke.mindustry.net.Net.server()" : "false";
} }
} }

View File

@@ -0,0 +1,110 @@
package io.anuke.annotations;
import com.squareup.javapoet.*;
import io.anuke.annotations.Annotations.Serialize;
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.ElementFilter;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.List;
import java.util.Set;
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@SupportedAnnotationTypes({
"io.anuke.annotations.Annotations.Serialize"
})
public class SerializeAnnotationProcessor extends AbstractProcessor{
/**Target class name.*/
private static final String className = "Serialization";
/** Name of the base package to put all the generated classes. */
private static final String packageName = "io.anuke.mindustry.gen";
private int round;
@Override
public synchronized void init(ProcessingEnvironment processingEnv){
super.init(processingEnv);
//put all relevant utils into utils class
Utils.typeUtils = processingEnv.getTypeUtils();
Utils.elementUtils = processingEnv.getElementUtils();
Utils.filer = processingEnv.getFiler();
Utils.messager = processingEnv.getMessager();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
if(round++ != 0) return false; //only process 1 round
try{
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
for(TypeElement elem : elements){
TypeName type = TypeName.get(elem.asType());
TypeSpec.Builder serializer = TypeSpec.anonymousClassBuilder("")
.addSuperinterface(ParameterizedTypeName.get(
ClassName.get(Class.forName("io.anuke.ucore.io.TypeSerializer")), type));
MethodSpec.Builder writeMethod = MethodSpec.methodBuilder("write")
.returns(void.class)
.addParameter(DataOutput.class, "stream")
.addParameter(type, "object")
.addAnnotation(Override.class)
.addException(IOException.class)
.addModifiers(Modifier.PUBLIC);
MethodSpec.Builder readMethod = MethodSpec.methodBuilder("read")
.returns(type)
.addParameter(DataInput.class, "stream")
.addAnnotation(Override.class)
.addException(IOException.class)
.addModifiers(Modifier.PUBLIC);
readMethod.addStatement("$L object = new $L()", type, type);
List<VariableElement> fields = ElementFilter.fieldsIn(Utils.elementUtils.getAllMembers(elem));
for(VariableElement field : fields){
if(field.getModifiers().contains(Modifier.STATIC) || field.getModifiers().contains(Modifier.TRANSIENT) || field.getModifiers().contains(Modifier.PRIVATE)) continue;
String name = field.getSimpleName().toString();
String typeName = Utils.typeUtils.erasure(field.asType()).toString().replace('$', '.');
String capName = Character.toUpperCase(typeName.charAt(0)) + typeName.substring(1);
if(field.asType().getKind().isPrimitive()){
writeMethod.addStatement("stream.write" + capName + "(object." + name + ")");
readMethod.addStatement("object." + name + "= stream.read" + capName + "()");
}else{
writeMethod.addStatement("io.anuke.ucore.core.Settings.getSerializer(" + typeName+ ".class).write(stream, object." + name + ")");
readMethod.addStatement("object." + name + " = (" +typeName+")io.anuke.ucore.core.Settings.getSerializer(" + typeName+ ".class).read(stream)");
}
}
readMethod.addStatement("return object");
serializer.addMethod(writeMethod.build());
serializer.addMethod(readMethod.build());
method.addStatement("io.anuke.ucore.core.Settings.setSerializer($N, $L)", Utils.elementUtils.getBinaryName(elem).toString().replace('$', '.') + ".class", serializer.build());
}
classBuilder.addMethod(method.build());
//write result
JavaFile.builder(packageName, classBuilder.build()).build().writeTo(Utils.filer);
return true;
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
}

View File

@@ -7,14 +7,14 @@ import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements; import javax.lang.model.util.Elements;
import javax.lang.model.util.Types; import javax.lang.model.util.Types;
public class Utils { public class Utils{
public static Types typeUtils; public static Types typeUtils;
public static Elements elementUtils; public static Elements elementUtils;
public static Filer filer; public static Filer filer;
public static Messager messager; public static Messager messager;
public static String getMethodName(Element element){ public static String getMethodName(Element element){
return ((TypeElement)element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName(); return ((TypeElement) element.getEnclosingElement()).getQualifiedName().toString() + "." + element.getSimpleName();
} }
public static boolean isPrimitive(String type){ public static boolean isPrimitive(String type){

View File

@@ -9,7 +9,7 @@ buildscript {
dependencies { dependencies {
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0' 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.1.0' classpath 'com.android.tools.build:gradle:3.2.1'
classpath "com.badlogicgames.gdx:gdx-tools:1.9.8" classpath "com.badlogicgames.gdx:gdx-tools:1.9.8"
} }
} }
@@ -22,12 +22,12 @@ allprojects {
ext { ext {
versionNumber = '4.0' versionNumber = '4.0'
versionType = 'alpha' versionModifier = 'alpha'
versionType = 'official'
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.8' gdxVersion = '1.9.8'
roboVMVersion = '2.3.0' roboVMVersion = '2.3.0'
aiVersion = '1.8.1' uCoreVersion = 'd5f892dcf1773b0f6d47d2190d139cc6342ac75f'
uCoreVersion = 'e7a37cff68'
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()
@@ -43,24 +43,34 @@ allprojects {
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\n'
def bundles = new File(project(':core').projectDir, 'assets/bundles/')
bundles.listFiles().each { other ->
if(other.name == "bundle.properties") return
output += other.name.substring("bundle".length() + 1, other.name.lastIndexOf('.')) + "\n"
}
new File(project(':core').projectDir, 'assets/locales').text = output
}
writeVersion = { writeVersion = {
def pfile = new File('core/assets/version.properties') def pfile = new File(project(':core').projectDir, 'assets/version.properties')
def props = new Properties() def props = new Properties()
try{ try{
pfile.createNewFile() pfile.createNewFile()
}catch (Exception e){} }catch (Exception ignored){}
if(pfile.exists()) { if(pfile.exists()) {
props.load(new FileInputStream(pfile)) props.load(new FileInputStream(pfile))
String code = getBuildVersion() String buildid = getBuildVersion()
props["name"] = appName props["type"] = versionType
props["version"] = versionType props["number"] = versionNumber
props["code"] = versionNumber props["modifier"] = versionModifier
props["build"] = code props["build"] = buildid
props.store(pfile.newWriter(), "Autogenerated file. Do not modify.") props.store(pfile.newWriter(), "Autogenerated file. Do not modify.")
} }
@@ -82,11 +92,12 @@ project(":desktop") {
dependencies { dependencies {
compile project(":core") compile project(":core")
compile project(":kryonet") compile project(":kryonet")
if(new File(projectDir.parent, '../debug').exists() && System.properties["release"] == null) compile project(":debug")
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:v2.0.0' compile 'com.github.MinnDevelopment:java-discord-rpc:v2.0.0'
compile 'com.yuvimasory:orange-extensions:1.3.0'
} }
} }
@@ -94,7 +105,6 @@ project(":html") {
apply plugin: "gwt" apply plugin: "gwt"
apply plugin: "war" apply plugin: "war"
dependencies { dependencies {
compile project(":core") compile project(":core")
compileOnly project(":annotations") compileOnly project(":annotations")
@@ -102,24 +112,34 @@ project(":html") {
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(":ios") { project(":ios") {
apply plugin: "java" apply plugin: "java"
apply plugin: "robovm" apply plugin: "robovm"
task copyGen{
copy{
from ("core/build/classes/java/main/io/anuke/mindustry/gen/"){
include "**/*.java"
}
into "ios/src/io/anuke/mindustry/gen"
}
doFirst{
delete{
delete "ios/src/io/anuke/mindustry/gen/"
}
}
}
build.dependsOn(copyGen)
dependencies { dependencies {
compile project(":core") compile project(":core")
@@ -135,16 +155,16 @@ project(":ios") {
project(":core") { project(":core") {
apply plugin: "java" apply plugin: "java"
task finish {
generateLocales()
}
dependencies { dependencies {
compileOnly project(":annotations") compileOnly project(":annotations")
build.finalizedBy(finish)
boolean comp = System.properties["release"] == null || System.properties["release"] == "false" def comp = System.properties["release"] == null || System.properties["release"] == "false"
if(!comp) println("Note: Compiling release build.")
if(!comp){
println("NOTICE: Compiling release build.")
}else{
println("Compiling DEBUG build.")
}
if(new File(projectDir.parent, '../uCore').exists() && comp){ if(new File(projectDir.parent, '../uCore').exists() && comp){
compile project(":uCore") compile project(":uCore")
@@ -161,13 +181,19 @@ project(":core") {
} }
compileJava.options.compilerArgs = [ compileJava.options.compilerArgs = [
"-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor" "-processor", "io.anuke.annotations.RemoteMethodAnnotationProcessor,io.anuke.annotations.SerializeAnnotationProcessor"
] ]
} }
project(":server") { project(":server") {
apply plugin: "java" apply plugin: "java"
configurations {
if(findProject(":android") != null){
compile.exclude module: android
}
}
dependencies { dependencies {
compileOnly project(":annotations") compileOnly project(":annotations")
@@ -178,7 +204,24 @@ project(":server") {
} }
} }
project(":packer") { project(":tests"){
apply plugin: "java"
dependencies {
testImplementation project(":core")
testImplementation('org.junit.jupiter:junit-jupiter-api:5.1.0')
testRuntimeOnly('org.junit.jupiter:junit-jupiter-engine:5.1.0')
testImplementation "com.badlogicgames.gdx:gdx-backend-headless:$gdxVersion"
testImplementation "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
}
test {
useJUnitPlatform()
workingDir = new File("../core/assets")
}
}
project(":tools") {
apply plugin: "java" apply plugin: "java"
dependencies { dependencies {
@@ -199,11 +242,8 @@ project(":kryonet") {
dependencies { dependencies {
compile project(":core") compile project(":core")
compile 'com.github.crykn:kryonet:2.22.1' compile "org.lz4:lz4-java:1.4.1"
compile "org.java-websocket:Java-WebSocket:1.3.7" compile 'com.github.Anuken:kryonet:53b10247b1'
compile 'com.github.Anuken:WaifUPnP:05eb46bc577fd7674596946ba288c96c0cedd893'
} }
} }
tasks.eclipse.doLast {
delete ".project"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

After

Width:  |  Height:  |  Size: 83 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 B

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 580 B

After

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

After

Width:  |  Height:  |  Size: 114 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 B

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 B

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 B

After

Width:  |  Height:  |  Size: 113 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 B

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 492 B

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

After

Width:  |  Height:  |  Size: 168 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 289 B

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 574 B

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 B

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