From 1a8fdda421f8ff5e2f24792df235ec80792d17a1 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 17 Dec 2017 23:51:55 -0500 Subject: [PATCH] Add basic map editor, change map system --- .gitignore | 1 + TODO.md | 2 + android/AndroidManifest.xml | 4 +- .../io/anuke/mindustry/AndroidLauncher.java | 2 +- core/assets-raw/sprites/ui/icon-terrain.png | Bin 0 -> 202 bytes core/assets-raw/sprites/ui/slider.png | Bin 117 -> 135 bytes core/assets-raw/sprites/ui/text-editor.png | Bin 0 -> 322 bytes core/assets/maps/{islands.png => island.png} | Bin core/assets/maps/maps.json | 95 +++ core/assets/sprites/sprites.atlas | 558 +++++++++--------- core/assets/sprites/sprites.png | Bin 79702 -> 79186 bytes core/assets/ui/uiskin.json | 1 + core/src/io/anuke/mindustry/Vars.java | 9 +- core/src/io/anuke/mindustry/ai/Pathfind.java | 5 +- core/src/io/anuke/mindustry/core/Control.java | 13 +- .../src/io/anuke/mindustry/core/Tutorial.java | 3 +- core/src/io/anuke/mindustry/core/UI.java | 12 +- core/src/io/anuke/mindustry/core/World.java | 56 +- .../mindustry/entities/enemies/Enemy.java | 4 +- core/src/io/anuke/mindustry/io/SaveIO.java | 9 +- .../anuke/mindustry/mapeditor/MapEditor.java | 123 ++++ .../mindustry/mapeditor/MapEditorDialog.java | 142 +++++ .../anuke/mindustry/mapeditor/MapFilter.java | 214 +++++++ .../io/anuke/mindustry/mapeditor/MapView.java | 66 +++ .../io/anuke/mindustry/ui/LevelDialog.java | 14 +- .../src/io/anuke/mindustry/ui/LoadDialog.java | 4 +- core/src/io/anuke/mindustry/ui/MapEditor.java | 5 - .../mindustry/ui/fragments/MenuFragment.java | 27 +- .../io/anuke/mindustry/world/ColorMapper.java | 77 +++ .../io/anuke/mindustry/world/Generator.java | 80 +-- core/src/io/anuke/mindustry/world/Map.java | 54 +- core/src/io/anuke/mindustry/world/Maps.java | 119 ++++ desktop/mindustry-maps/maps.json | 1 + .../mindustry/desktop/DesktopLauncher.java | 2 +- 34 files changed, 1237 insertions(+), 465 deletions(-) create mode 100644 core/assets-raw/sprites/ui/icon-terrain.png create mode 100644 core/assets-raw/sprites/ui/text-editor.png rename core/assets/maps/{islands.png => island.png} (100%) create mode 100644 core/assets/maps/maps.json create mode 100644 core/src/io/anuke/mindustry/mapeditor/MapEditor.java create mode 100644 core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java create mode 100644 core/src/io/anuke/mindustry/mapeditor/MapFilter.java create mode 100644 core/src/io/anuke/mindustry/mapeditor/MapView.java delete mode 100644 core/src/io/anuke/mindustry/ui/MapEditor.java create mode 100644 core/src/io/anuke/mindustry/world/ColorMapper.java create mode 100644 core/src/io/anuke/mindustry/world/Maps.java create mode 100644 desktop/mindustry-maps/maps.json diff --git a/.gitignore b/.gitignore index d568a38105..71869acd34 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /desktop/packr-out/ /desktop/packr-export/ /desktop/mindustry-saves/ +/destkop/mindustry-maps/ /core/lib/ *.gif diff --git a/TODO.md b/TODO.md index 1c87bdf52c..88459d4093 100644 --- a/TODO.md +++ b/TODO.md @@ -16,6 +16,8 @@ _Keep in mind that this is just a basic outline of planned features, and will be - [DONE] Add link to Mindustry discord everywhere - Balancing to slow down progression - Map editor +- Delete saves +- Display playtime ### Major Bugs - Black screen when tabbing out on Android diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index dfaef6fadf..8c14141445 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="38" + android:versionName="3.1.2" > diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 15ca88286c..698b5697f9 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -52,7 +52,7 @@ public class AndroidLauncher extends AndroidApplication{ Mindustry.donationsCallable = new Callable(){ @Override public void run(){ showDonations(); } }; if(doubleScaleTablets && isTablet(this.getContext())){ - Unit.dp.addition = 1f; + Unit.dp.addition = 0.5f; } config.hideStatusBar = true; diff --git a/core/assets-raw/sprites/ui/icon-terrain.png b/core/assets-raw/sprites/ui/icon-terrain.png new file mode 100644 index 0000000000000000000000000000000000000000..92dc447567c73b33f940642caf184f83c9f832ca GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xawj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+M~F#6^~v^*M?j%)PZ!4!jq_(GIr1?maxm-u|6gpo zHqkROdykH~&`c|pgbt;hRSa1v3z(l2a5XY(Sgd-=S7X;X8B9 r)vKr53%=x){SoY7X1mr}V#;{;jv`0Kt>$S!D;PXo{an^LB{Ts5{u@CL literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/ui/slider.png b/core/assets-raw/sprites/ui/slider.png index 7986f4f53bb7d6b9dabaa54e653127335fc413a1..a722706e2b2d91269e9fec217ed34d097dfa8566 100644 GIT binary patch delta 78 zcmXSIXPltI&z9uv?!xdN1Q+aGK6#>|yeW?mi-_3g_*-5K3=ATkE{-7_*ONDF*zn{0 fkpl+~G|XpUu;XFeraeaiB+uaK>gTe~DWM4fTniiV delta 87 zcmZo?ES;bd$XVbKSzV`0_$>R-47C?w+P;uykl nJvkuw`mggx4jeepFrR_J>=0vXd8^1Npge=8tDnm{r-UW|@je{XE)7O>#A&(G)DBnND+l@dW$r9Iy66gHf+|;}h2Ir#G#FEq$ zh4Rdj3GQj+j5{S56Zq?S7;Y@R@L}HUmnv^%?|q)VePYn5P4^}#e`Qw^a^-b*5!QctvB=|2 zK!m@+=jGbdbQXm@$w>;2%kny{n7C~Dp6;mZJ-eb0>0Hb*uw7dIaPKn3MW6Frc+SXd zTQ0lyg>J;A9fePwxX+zYd~WmNj_~JQp~g*ZN6q&wx%p}P{HLDhn5%+b&xuveybp9W NgQu&X%Q~loCII*2drANR literal 0 HcmV?d00001 diff --git a/core/assets/maps/islands.png b/core/assets/maps/island.png similarity index 100% rename from core/assets/maps/islands.png rename to core/assets/maps/island.png diff --git a/core/assets/maps/maps.json b/core/assets/maps/maps.json new file mode 100644 index 0000000000..fcfbde3d3d --- /dev/null +++ b/core/assets/maps/maps.json @@ -0,0 +1,95 @@ +{ + "maps": [ + { + "id": 0, + "name": "maze", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 1, + "name": "fortress", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 2, + "name": "sinkhole", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 3, + "name": "caves", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 4, + "name": "volcano", + "visible": true, + "flipBase": true, + "backgroundColor": "646464" + }, + { + "id": 5, + "name": "caldera", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 6, + "name": "scorch", + "visible": true, + "flipBase": false, + "backgroundColor": "e5d8bb" + }, + { + "id": 7, + "name": "desert", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 8, + "name": "island", + "visible": true, + "flipBase": false, + "backgroundColor": "e5d8bb" + }, + { + "id": 9, + "name": "grassland", + "visible": true, + "flipBase": false, + "backgroundColor": "5ab464" + }, + { + "id": 10, + "name": "tundra", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + }, + { + "id": 11, + "name": "spiral", + "visible": true, + "flipBase": false, + "backgroundColor": "f7feff" + }, + { + "id": 12, + "name": "tutorial", + "visible": true, + "flipBase": false, + "backgroundColor": "646464" + } + ] +} diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 1a9999603e..cd2882139d 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -20,1183 +20,1183 @@ blank index: -1 blocks/blackrock1 rotate: false - xy: 519, 179 + xy: 349, 79 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackrockshadow1 rotate: false - xy: 722, 381 + xy: 361, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstone1 rotate: false - xy: 734, 406 + xy: 229, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstone2 rotate: false - xy: 734, 396 + xy: 239, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstone3 rotate: false - xy: 724, 371 + xy: 249, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstoneblock1 rotate: false - xy: 724, 361 + xy: 259, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstoneblock2 rotate: false - xy: 724, 351 + xy: 269, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstoneblock3 rotate: false - xy: 734, 386 + xy: 279, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/blackstoneedge rotate: false - xy: 1011, 499 + xy: 178, 94 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/block rotate: false - xy: 734, 366 + xy: 299, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/block-2x2 rotate: false - xy: 428, 113 + xy: 661, 292 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/block-3x3 rotate: false - xy: 224, 105 + xy: 125, 38 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/chainturret rotate: false - xy: 747, 430 + xy: 679, 292 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/chainturret-icon rotate: false - xy: 529, 177 + xy: 558, 177 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/coal1 rotate: false - xy: 734, 346 + xy: 319, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coal2 rotate: false - xy: 165, 76 + xy: 329, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coal3 rotate: false - xy: 175, 79 + xy: 339, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coaldrill rotate: false - xy: 185, 79 + xy: 349, 69 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalgenerator rotate: false - xy: 195, 79 + xy: 370, 103 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalgenerator-top rotate: false - xy: 205, 79 + xy: 380, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalpurifier rotate: false - xy: 215, 79 + xy: 390, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/combustiongenerator rotate: false - xy: 225, 83 + xy: 400, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/compositewall rotate: false - xy: 235, 83 + xy: 410, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduit rotate: false - xy: 245, 83 + xy: 420, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitbottom rotate: false - xy: 255, 83 + xy: 430, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitliquid rotate: false - xy: 265, 83 + xy: 440, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduittop rotate: false - xy: 275, 83 + xy: 450, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyor rotate: false - xy: 285, 83 + xy: 460, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyormove rotate: false - xy: 295, 83 + xy: 470, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyortunnel rotate: false - xy: 305, 83 + xy: 480, 105 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/core rotate: false - xy: 276, 105 + xy: 524, 219 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/cross rotate: false - xy: 315, 83 + xy: 371, 93 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/crucible rotate: false - xy: 325, 83 + xy: 381, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/deepwater rotate: false - xy: 335, 83 + xy: 391, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt1 rotate: false - xy: 345, 83 + xy: 401, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt2 rotate: false - xy: 355, 83 + xy: 411, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt3 rotate: false - xy: 365, 83 + xy: 421, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirtedge rotate: false - xy: 1011, 485 + xy: 529, 147 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/door rotate: false - xy: 375, 83 + xy: 431, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/door-large rotate: false - xy: 446, 113 + xy: 697, 291 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/door-large-icon rotate: false - xy: 385, 83 + xy: 441, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/door-large-open rotate: false - xy: 464, 113 + xy: 234, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/door-open rotate: false - xy: 395, 83 + xy: 451, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/doubleturret rotate: false - xy: 514, 124 + xy: 582, 177 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/duriumwall rotate: false - xy: 809, 430 + xy: 461, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/duriumwall-large rotate: false - xy: 661, 292 + xy: 252, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/duriumwall-large-icon rotate: false - xy: 514, 114 + xy: 471, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/flameturret rotate: false - xy: 188, 89 + xy: 226, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/fluxpump rotate: false - xy: 406, 99 + xy: 225, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass1 rotate: false - xy: 416, 99 + xy: 235, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass2 rotate: false - xy: 428, 103 + xy: 245, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass3 rotate: false - xy: 438, 103 + xy: 255, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock1 rotate: false - xy: 448, 103 + xy: 265, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock2 rotate: false - xy: 458, 103 + xy: 275, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassedge rotate: false - xy: 795, 426 + xy: 211, 55 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/ice1 rotate: false - xy: 468, 103 + xy: 285, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ice2 rotate: false - xy: 225, 73 + xy: 295, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ice3 rotate: false - xy: 235, 73 + xy: 305, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iceedge rotate: false - xy: 524, 217 + xy: 563, 189 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/icerock1 rotate: false - xy: 245, 73 + xy: 315, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerock2 rotate: false - xy: 255, 73 + xy: 325, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerockshadow1 rotate: false - xy: 265, 73 + xy: 335, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow1 rotate: false - xy: 265, 73 + xy: 335, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/icerockshadow2 rotate: false - xy: 275, 73 + xy: 495, 126 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rockshadow2 rotate: false - xy: 275, 73 + xy: 495, 126 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron1 rotate: false - xy: 355, 73 + xy: 510, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron2 rotate: false - xy: 365, 73 + xy: 510, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron3 rotate: false - xy: 375, 73 + xy: 491, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/irondrill rotate: false - xy: 385, 73 + xy: 501, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ironwall rotate: false - xy: 395, 73 + xy: 511, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/junction rotate: false - xy: 809, 420 + xy: 525, 127 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/laserturret rotate: false - xy: 709, 279 + xy: 322, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/lava rotate: false - xy: 478, 103 + xy: 520, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/lavaedge rotate: false - xy: 538, 217 + xy: 559, 163 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/lavasmelter rotate: false - xy: 488, 105 + xy: 520, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquiditemjunction rotate: false - xy: 592, 238 + xy: 521, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidjunction rotate: false - xy: 602, 238 + xy: 151, 54 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/liquidrouter rotate: false - xy: 612, 238 + xy: 151, 44 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/machineturret rotate: false - xy: 721, 281 + xy: 301, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/megarepairturret rotate: false - xy: 541, 177 + xy: 313, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/mortarturret rotate: false - xy: 163, 26 + xy: 334, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/mossblock rotate: false - xy: 632, 238 + xy: 171, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/mossstone rotate: false - xy: 632, 238 + xy: 171, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/nuclearreactor rotate: false - xy: 302, 105 + xy: 550, 219 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/nuclearreactor-center rotate: false - xy: 328, 105 + xy: 727, 422 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/nuclearreactor-icon rotate: false - xy: 591, 228 + xy: 171, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/nuclearreactor-lights rotate: false - xy: 354, 105 + xy: 753, 422 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/nuclearreactor-small rotate: false - xy: 679, 292 + xy: 270, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/oil rotate: false - xy: 601, 228 + xy: 181, 52 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/oiledge rotate: false - xy: 519, 189 + xy: 577, 189 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/oilrefinery rotate: false - xy: 611, 228 + xy: 345, 57 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/omnidrill rotate: false - xy: 621, 228 + xy: 539, 137 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/plasmaturret rotate: false - xy: 498, 108 + xy: 313, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/powerbooster rotate: false - xy: 631, 228 + xy: 535, 127 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyor rotate: false - xy: 641, 228 + xy: 530, 117 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/poweredconveyormove rotate: false - xy: 595, 218 + xy: 530, 107 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaser rotate: false - xy: 605, 218 + xy: 531, 97 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlasercorner rotate: false - xy: 615, 218 + xy: 540, 117 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/powerlaserrouter rotate: false - xy: 625, 218 + xy: 540, 107 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduit rotate: false - xy: 635, 218 + xy: 545, 127 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduitbottom rotate: false - xy: 645, 218 + xy: 541, 97 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pulseconduittop rotate: false - xy: 651, 228 + xy: 550, 117 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/pump rotate: false - xy: 655, 218 + xy: 550, 107 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/repairturret rotate: false - xy: 704, 263 + xy: 325, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/rock1 rotate: false - xy: 671, 234 + xy: 161, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rock2 rotate: false - xy: 665, 224 + xy: 171, 38 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/router rotate: false - xy: 665, 214 + xy: 181, 42 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rtgenerator rotate: false - xy: 675, 224 + xy: 157, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/rtgenerator-top rotate: false - xy: 675, 214 + xy: 167, 28 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sand1 rotate: false - xy: 405, 89 + xy: 191, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sand2 rotate: false - xy: 405, 79 + xy: 201, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sand3 rotate: false - xy: 415, 89 + xy: 211, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sandblock1 rotate: false - xy: 415, 79 + xy: 181, 32 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sandblock2 rotate: false - xy: 405, 69 + xy: 191, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sandblock3 rotate: false - xy: 415, 69 + xy: 201, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sandedge rotate: false - xy: 533, 203 + xy: 587, 163 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/shadow rotate: false - xy: 704, 251 + xy: 346, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/shieldgenerator rotate: false - xy: 185, 69 + xy: 159, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shotgunturret rotate: false - xy: 704, 239 + xy: 325, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/shrub rotate: false - xy: 215, 69 + xy: 169, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/shrubshadow rotate: false - xy: 173, 59 + xy: 221, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/smelter rotate: false - xy: 183, 59 + xy: 221, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/sniperturret rotate: false - xy: 722, 415 + xy: 337, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/snow1 rotate: false - xy: 193, 59 + xy: 231, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snow2 rotate: false - xy: 203, 59 + xy: 231, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snow3 rotate: false - xy: 213, 59 + xy: 241, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock1 rotate: false - xy: 173, 49 + xy: 241, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock2 rotate: false - xy: 183, 49 + xy: 251, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowblock3 rotate: false - xy: 193, 49 + xy: 251, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/snowedge rotate: false - xy: 533, 189 + xy: 117, 8 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/sorter rotate: false - xy: 203, 49 + xy: 261, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyor rotate: false - xy: 213, 49 + xy: 261, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelconveyormove rotate: false - xy: 171, 39 + xy: 271, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall rotate: false - xy: 181, 39 + xy: 271, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/steelwall-large rotate: false - xy: 697, 291 + xy: 288, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/steelwall-large-icon rotate: false - xy: 191, 39 + xy: 281, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone1 rotate: false - xy: 201, 39 + xy: 281, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone2 rotate: false - xy: 211, 39 + xy: 291, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stone3 rotate: false - xy: 175, 29 + xy: 291, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock1 rotate: false - xy: 185, 29 + xy: 301, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock2 rotate: false - xy: 195, 29 + xy: 301, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneblock3 rotate: false - xy: 205, 29 + xy: 311, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonedrill rotate: false - xy: 215, 29 + xy: 311, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stoneedge rotate: false - xy: 555, 213 + xy: 131, 8 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/stoneformer rotate: false - xy: 221, 39 + xy: 321, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/stonewall rotate: false - xy: 225, 29 + xy: 321, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter rotate: false - xy: 225, 63 + xy: 331, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/teleporter-top rotate: false - xy: 235, 63 + xy: 331, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/thermalgenerator rotate: false - xy: 245, 63 + xy: 341, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titancannon rotate: false - xy: 380, 105 + xy: 779, 430 size: 24, 24 orig: 24, 24 offset: 0, 0 index: -1 blocks/titancannon-icon rotate: false - xy: 722, 403 + xy: 358, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/titanium1 rotate: false - xy: 255, 63 + xy: 341, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium2 rotate: false - xy: 265, 63 + xy: 351, 47 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titanium3 rotate: false - xy: 275, 63 + xy: 351, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumdrill rotate: false - xy: 285, 63 + xy: 802, 420 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumpurifier rotate: false - xy: 295, 63 + xy: 802, 410 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumshieldwall rotate: false - xy: 305, 63 + xy: 802, 400 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall rotate: false - xy: 315, 63 + xy: 802, 390 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/titaniumwall-large rotate: false - xy: 881, 495 + xy: 360, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 blocks/titaniumwall-large-icon rotate: false - xy: 325, 63 + xy: 802, 380 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/turret rotate: false - xy: 722, 391 + xy: 337, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/uranium1 rotate: false - xy: 355, 63 + xy: 211, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium2 rotate: false - xy: 365, 63 + xy: 221, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uranium3 rotate: false - xy: 375, 63 + xy: 231, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/uraniumdrill rotate: false - xy: 385, 63 + xy: 241, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/water rotate: false - xy: 395, 63 + xy: 251, 27 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/wateredge rotate: false - xy: 569, 213 + xy: 145, 8 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 blocks/waveturret rotate: false - xy: 734, 416 + xy: 349, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 bullet rotate: false - xy: 734, 356 + xy: 309, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1210,7 +1210,7 @@ chainbullet index: -1 circle rotate: false - xy: 169, 89 + xy: 519, 178 size: 17, 17 orig: 17, 17 offset: 0, 0 @@ -1224,238 +1224,238 @@ circle2 index: -1 enemies/blastenemy-t1 rotate: false - xy: 899, 497 + xy: 378, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/blastenemy-t2 rotate: false - xy: 915, 497 + xy: 394, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/blastenemy-t3 rotate: false - xy: 931, 497 + xy: 410, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/empenemy-t1 rotate: false - xy: 947, 497 + xy: 426, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/empenemy-t2 rotate: false - xy: 963, 497 + xy: 442, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/empenemy-t3 rotate: false - xy: 979, 497 + xy: 458, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/enemy-t1 rotate: false - xy: 995, 497 + xy: 474, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/targetenemy-t1 rotate: false - xy: 995, 497 + xy: 474, 115 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/enemy-t2 rotate: false - xy: 157, 38 + xy: 545, 163 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 enemies/enemy-t3 rotate: false - xy: 781, 426 + xy: 197, 55 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 enemies/fastenemy-t1 rotate: false - xy: 765, 432 + xy: 881, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/fastenemy-t2 rotate: false - xy: 482, 115 + xy: 897, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/fastenemy-t3 rotate: false - xy: 715, 293 + xy: 913, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t1 rotate: false - xy: 498, 120 + xy: 929, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t2 rotate: false - xy: 115, 14 + xy: 945, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/flamerenemy-t3 rotate: false - xy: 141, 52 + xy: 961, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/fortressenemy-t1 rotate: false - xy: 125, 72 + xy: 95, 8 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 enemies/fortressenemy-t2 rotate: false - xy: 147, 86 + xy: 519, 197 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 enemies/fortressenemy-t3 rotate: false - xy: 406, 109 + xy: 541, 197 size: 20, 20 orig: 20, 20 offset: 0, 0 index: -1 enemies/healerenemy-t1 rotate: false - xy: 141, 36 + xy: 977, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/healerenemy-t2 rotate: false - xy: 131, 20 + xy: 993, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/healerenemy-t3 rotate: false - xy: 147, 20 + xy: 1009, 497 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t1 rotate: false - xy: 656, 260 + xy: 197, 69 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t2 rotate: false - xy: 672, 260 + xy: 213, 85 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/mortarenemy-t3 rotate: false - xy: 656, 244 + xy: 213, 69 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t1 rotate: false - xy: 672, 244 + xy: 125, 22 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t2 rotate: false - xy: 688, 259 + xy: 141, 22 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/rapidenemy-t3 rotate: false - xy: 688, 243 + xy: 786, 414 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/tankenemy-t1 rotate: false - xy: 781, 440 + xy: 786, 398 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/tankenemy-t2 rotate: false - xy: 797, 440 + xy: 786, 382 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/tankenemy-t3 rotate: false - xy: 157, 52 + xy: 529, 161 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 enemies/titanenemy-t1 rotate: false - xy: 555, 227 + xy: 306, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 enemies/titanenemy-t2 rotate: false - xy: 573, 227 + xy: 324, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 enemies/titanenemy-t3 rotate: false - xy: 147, 68 + xy: 342, 113 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1469,105 +1469,105 @@ enemyarrow index: -1 icon-coal rotate: false - xy: 285, 73 + xy: 505, 126 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-dirium rotate: false - xy: 295, 73 + xy: 515, 126 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-iron rotate: false - xy: 305, 73 + xy: 529, 137 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-steel rotate: false - xy: 315, 73 + xy: 490, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-stone rotate: false - xy: 325, 73 + xy: 490, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-titanium rotate: false - xy: 335, 73 + xy: 500, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-uranium rotate: false - xy: 345, 73 + xy: 500, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laser rotate: false - xy: 552, 217 + xy: 805, 442 size: 1, 12 orig: 1, 12 offset: 0, 0 index: -1 laserend rotate: false - xy: 727, 428 + xy: 538, 177 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 laserfull rotate: false - xy: 95, 10 + xy: 576, 225 size: 18, 18 orig: 18, 18 offset: 0, 0 index: -1 mechs/mech-standard rotate: false - xy: 519, 203 + xy: 573, 163 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shell rotate: false - xy: 175, 69 + xy: 211, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shot rotate: false - xy: 195, 69 + xy: 159, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shot-long rotate: false - xy: 205, 69 + xy: 169, 18 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanshell rotate: false - xy: 335, 63 + xy: 191, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1630,7 +1630,7 @@ ui/button-map-over index: -1 ui/button-select rotate: false - xy: 250, 105 + xy: 155, 68 size: 24, 24 split: 4, 4, 4, 4 orig: 24, 24 @@ -1659,56 +1659,56 @@ ui/check-over index: -1 ui/clear rotate: false - xy: 583, 215 + xy: 570, 177 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/cursor rotate: false - xy: 125, 30 + xy: 579, 203 size: 4, 4 orig: 4, 4 offset: 0, 0 index: -1 ui/icon-areaDelete rotate: false - xy: 200, 89 + xy: 238, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-arrow rotate: false - xy: 597, 280 + xy: 563, 203 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-arrow-left rotate: false - xy: 212, 89 + xy: 229, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-arrow-right rotate: false - xy: 224, 93 + xy: 250, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-cancel rotate: false - xy: 613, 280 + xy: 715, 293 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-check rotate: false - xy: 629, 280 + xy: 722, 406 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -1736,203 +1736,210 @@ ui/icon-close-over index: -1 ui/icon-crafting rotate: false - xy: 236, 93 + xy: 229, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-cursor rotate: false - xy: 248, 93 + xy: 241, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-defense rotate: false - xy: 260, 93 + xy: 262, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-discord rotate: false - xy: 645, 280 + xy: 722, 390 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-distribution rotate: false - xy: 272, 93 + xy: 241, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-donate rotate: false - xy: 661, 276 + xy: 738, 406 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-hold rotate: false - xy: 284, 93 + xy: 253, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-holdDelete rotate: false - xy: 296, 93 + xy: 274, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-info rotate: false - xy: 308, 93 + xy: 253, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-load rotate: false - xy: 677, 276 + xy: 738, 390 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-menu rotate: false - xy: 320, 93 + xy: 265, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-none rotate: false - xy: 332, 93 + xy: 286, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-pause rotate: false - xy: 344, 93 + xy: 265, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-play rotate: false - xy: 356, 93 + xy: 277, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-play-2 rotate: false - xy: 592, 264 + xy: 754, 406 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-power rotate: false - xy: 368, 93 + xy: 298, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-production rotate: false - xy: 380, 93 + xy: 277, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-quit rotate: false - xy: 592, 248 + xy: 754, 390 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-rotate rotate: false - xy: 608, 264 + xy: 181, 78 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-rotate-arrow rotate: false - xy: 608, 248 + xy: 579, 209 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-rotate-left rotate: false - xy: 624, 264 + xy: 181, 62 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-rotate-right rotate: false - xy: 624, 248 + xy: 770, 406 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-save rotate: false - xy: 640, 264 + xy: 770, 390 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-settings rotate: false - xy: 392, 93 + xy: 289, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 +ui/icon-terrain + rotate: false + xy: 194, 101 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 ui/icon-tools rotate: false - xy: 640, 248 + xy: 210, 101 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-touch rotate: false - xy: 131, 8 + xy: 310, 101 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-touchDelete rotate: false - xy: 143, 8 + xy: 289, 77 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-tutorial rotate: false - xy: 693, 275 + xy: 197, 85 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 ui/icon-weapon rotate: false - xy: 155, 8 + xy: 301, 89 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1977,7 +1984,7 @@ ui/scroll index: -1 ui/scroll-horizontal rotate: false - xy: 125, 36 + xy: 592, 251 size: 6, 34 split: 2, 2, 0, 34 pad: 0, 5, 5, 4 @@ -1986,7 +1993,7 @@ ui/scroll-horizontal index: -1 ui/scroll-knob-horizontal rotate: false - xy: 133, 36 + xy: 521, 142 size: 6, 34 split: 2, 2, 0, 34 pad: 0, 5, 13, 12 @@ -2003,21 +2010,21 @@ ui/scroll-knob-vertical index: -1 ui/selection rotate: false - xy: 495, 133 + xy: 576, 222 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ui/separator rotate: false - xy: 169, 86 + xy: 576, 219 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ui/slider rotate: false - xy: 652, 238 + xy: 177, 28 size: 1, 8 orig: 1, 8 offset: 0, 0 @@ -2045,11 +2052,18 @@ ui/slider-knob-over index: -1 ui/slider-vertical rotate: false - xy: 724, 348 + xy: 151, 41 size: 8, 1 orig: 8, 1 offset: 0, 0 index: -1 +ui/text-editor + rotate: false + xy: 194, 117 + size: 38, 12 + orig: 38, 12 + offset: 0, 0 + index: -1 ui/text-exit rotate: false xy: 855, 499 @@ -2066,7 +2080,7 @@ ui/text-load index: -1 ui/text-play rotate: false - xy: 524, 231 + xy: 147, 94 size: 29, 12 orig: 29, 12 offset: 0, 0 @@ -2108,7 +2122,7 @@ ui/text-tutorial index: -1 ui/textfield rotate: false - xy: 194, 101 + xy: 125, 64 size: 28, 28 split: 6, 6, 6, 6 orig: 28, 28 @@ -2124,7 +2138,7 @@ ui/textfield-over index: -1 ui/white rotate: false - xy: 592, 282 + xy: 519, 219 size: 3, 3 orig: 3, 3 offset: 0, 0 @@ -2147,42 +2161,42 @@ ui/window-empty index: -1 weapons/blaster rotate: false - xy: 734, 376 + xy: 289, 67 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/flamer rotate: false - xy: 115, 4 + xy: 481, 95 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/mortar rotate: false - xy: 622, 238 + xy: 161, 58 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/multigun rotate: false - xy: 642, 238 + xy: 161, 48 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/railgun rotate: false - xy: 661, 234 + xy: 551, 97 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 345, 63 + xy: 201, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 4e303b5ec6f3e9eefa08f513d5b920e084a0eee4..7790dd39e3d7661deceb8a4cddd69d488e14f467 100644 GIT binary patch literal 79186 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Ν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 literal 79702 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 1) enemy.node = enemy.node - 1; + enemy.idletime = 0; }else{ - //must be blocked by a playermade block + //must be blocked by a playermade block, do nothing } - - enemy.idletime = 0; } //-1 is only possible here if both pathfindings failed, which should NOT happen diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 99996f4bf0..4cebf9df83 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -118,8 +118,8 @@ public class Control extends Module{ Settings.loadAll("io.anuke.moment"); - for(Map map : Map.values()){ - Settings.defaults("hiscore" + map.name(), 0); + for(Map map : Vars.world.maps().list()){ + Settings.defaults("hiscore" + map.name, 0); } player = new Player(); @@ -278,10 +278,10 @@ public class Control extends Module{ wave ++; - int last = Settings.getInt("hiscore" + world.getMap().name()); + int last = Settings.getInt("hiscore" + world.getMap().name); if(wave > last && mode != GameMode.sandbox){ - Settings.putInt("hiscore" + world.getMap().name(), wave); + Settings.putInt("hiscore" + world.getMap().name, wave); Settings.save(); hiscore = true; } @@ -518,7 +518,6 @@ public class Control extends Module{ } if(!tutorial.active() && mode != GameMode.sandbox){ - extrawavetime -= delta(); if(enemies <= 0){ wavetime -= delta(); @@ -531,10 +530,12 @@ public class Control extends Module{ world.pathfinder().updatePath(); lastUpdated = wave + 1; } + }else{ + extrawavetime -= delta(); } } - if(wavetime <= 0){ + if(wavetime <= 0 || extrawavetime <= 0){ runWave(); } diff --git a/core/src/io/anuke/mindustry/core/Tutorial.java b/core/src/io/anuke/mindustry/core/Tutorial.java index 91f9eb5de0..f26c6cb968 100644 --- a/core/src/io/anuke/mindustry/core/Tutorial.java +++ b/core/src/io/anuke/mindustry/core/Tutorial.java @@ -9,7 +9,6 @@ import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.Map; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Timers; @@ -33,7 +32,7 @@ public class Tutorial{ } public boolean active(){ - return world.getMap() == Map.tutorial && !GameState.is(State.menu); + return world.getMap().name.equals("tutorial") && !GameState.is(State.menu); } public void buildUI(table table){ diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index c434d44d7b..04f47ce952 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -15,6 +15,8 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Mindustry; import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.mapeditor.MapEditor; +import io.anuke.mindustry.mapeditor.MapEditorDialog; import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.fragments.*; import io.anuke.mindustry.world.Tile; @@ -38,11 +40,13 @@ public class UI extends SceneModule{ Table loadingtable, desctable, configtable; MindustrySettingsDialog prefs; MindustryKeybindDialog keys; + MapEditorDialog editorDialog; Dialog about, restart, levels, upgrades, load, settingserror, gameerror, discord; MenuDialog menu; Tooltip tooltip; Tile configTile; Array statlist = new Array<>(); + MapEditor editor = new MapEditor(); boolean wasPaused = false; private Fragment blockfrag = new BlocksFragment(), @@ -118,7 +122,7 @@ public class UI extends SceneModule{ Draw.color(); TextureRegion back = Draw.region("background"); - float backscl = 5f; + float backscl = Unit.dp.inPixels(5f); Draw.alpha(0.7f); Core.batch.draw(back, w/2 - back.getRegionWidth()*backscl/2 +240f, h/2 - back.getRegionHeight()*backscl/2 + 250f, @@ -158,6 +162,8 @@ public class UI extends SceneModule{ configtable = new Table(); scene.add(configtable); + editorDialog = new MapEditorDialog(editor); + settingserror = new Dialog("Warning", "dialog"); settingserror.content().add("[crimson]Failed to access local storage.\nSettings will not be saved."); settingserror.content().pad(10f); @@ -438,6 +444,10 @@ public class UI extends SceneModule{ public void showDiscord(){ discord.show(); } + + public void showEditor(){ + editorDialog.show(); + } public void updateItems(){ ((HudFragment)hudfrag).updateItems(); diff --git a/core/src/io/anuke/mindustry/core/World.java b/core/src/io/anuke/mindustry/core/World.java index bed99810ba..0d80a5cb9d 100644 --- a/core/src/io/anuke/mindustry/core/World.java +++ b/core/src/io/anuke/mindustry/core/World.java @@ -2,9 +2,6 @@ package io.anuke.mindustry.core; import static io.anuke.mindustry.Vars.*; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.math.GridPoint2; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; @@ -25,15 +22,15 @@ import io.anuke.ucore.util.Tmp; public class World extends Module{ private int seed; - private Pixmap[] mapPixmaps; - private Texture[] mapTextures; private Map currentMap; private Tile[][] tiles; private Tile[] temptiles = new Tile[4]; private Pathfind pathfind = new Pathfind(); + private Maps maps = new Maps(); public World(){ - loadMaps(); + maps.loadMaps(); + currentMap = maps.getMap(0); } @Override @@ -43,13 +40,11 @@ public class World extends Module{ @Override public void dispose(){ - for(Texture texture : mapTextures){ - texture.dispose(); - } - - for(Pixmap pix : mapPixmaps){ - pix.dispose(); - } + maps.dispose(); + } + + public Maps maps(){ + return maps; } public Pathfind pathfinder(){ @@ -82,11 +77,11 @@ public class World extends Module{ } public int width(){ - return currentMap.width; + return currentMap.getWidth(); } public int height(){ - return currentMap.height; + return currentMap.getHeight(); } public Tile tile(int x, int y){ @@ -115,25 +110,6 @@ public class World extends Module{ return temptiles; } - public Texture getTexture(Map map){ - return mapTextures[map.ordinal()]; - } - - public void loadMaps(){ - Map[] maps = Map.values(); - - mapPixmaps = new Pixmap[maps.length]; - mapTextures = new Texture[maps.length]; - - for(int i = 0; i < maps.length; i ++){ - Pixmap pix = new Pixmap(Gdx.files.internal("maps/"+maps[i]+".png")); - mapPixmaps[i] = pix; - mapTextures[i] = new Texture(pix); - maps[i].width = pix.getWidth(); - maps[i].height = pix.getHeight(); - } - } - private void createTiles(){ for(int x = 0; x < tiles.length; x ++){ for(int y = 0; y < tiles[0].length; y ++){ @@ -164,28 +140,28 @@ public class World extends Module{ if(tiles != null){ clearTileEntities(); - if(tiles.length != map.width || tiles[0].length != map.height){ - tiles = new Tile[map.width][map.height]; + if(tiles.length != map.getWidth() || tiles[0].length != map.getHeight()){ + tiles = new Tile[map.getWidth()][map.getHeight()]; } createTiles(); }else{ - tiles = new Tile[map.width][map.height]; + tiles = new Tile[map.getWidth()][map.getHeight()]; createTiles(); } Vars.control.getSpawnPoints().clear(); - Entities.resizeTree(0, 0, map.width * tilesize, map.height * tilesize); + Entities.resizeTree(0, 0, map.getWidth() * tilesize, map.getHeight() * tilesize); this.seed = seed; - Generator.generate(mapPixmaps[map.ordinal()], tiles); + Generator.generate(map.pixmap, tiles); //TODO multiblock core control.getInput().placeBlock(control.getCore().x, control.getCore().y, ProductionBlocks.core, 0, false, false); - if(map != Map.tutorial){ + if(!map.name.equals("tutorial")){ setDefaultBlocks(); }else{ Vars.control.getTutorial().setDefaultBlocks(control.getCore().x, control.getCore().y); diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 53acde1bf3..19cb49bd0b 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -17,7 +17,7 @@ public class Enemy extends DestructibleEntity{ public final static Color[] tierColors = { Color.valueOf("ffe451"), Color.valueOf("f48e20"), Color.valueOf("ff6757"), Color.valueOf("ff2d86") }; public final static int maxtier = 4; public final static float maxIdle = 60*1.5f; - public final static float maxIdleLife = 60f*15f; //15 seconds idle = death + public final static float maxIdleLife = 60f*13f; //13 seconds idle = death protected int timeid; protected Timer timer = new Timer(5); @@ -238,7 +238,7 @@ public class Enemy extends DestructibleEntity{ xvelocity = (x - lastx) / Timers.delta(); yvelocity = (y - lasty) / Timers.delta(); - float minv = 0.08f; + float minv = 0.09f; if(xvelocity < minv && yvelocity < minv && node > 0 && target == null){ idletime += Timers.delta(); diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index f31b7e1a4d..5646a82431 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -8,7 +8,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.Date; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectMap; @@ -163,14 +162,14 @@ public class SaveIO{ stream.readInt(); //read version stream.readLong(); //read last saved time stream.readByte(); //read the gamemode - return Map.values()[stream.readByte()]; //read the map + return Vars.world.maps().getMap(stream.readByte()); //read the map }catch (IOException e){ throw new RuntimeException(e); } } public static FileHandle fileFor(int slot){ - return Gdx.files.local("mindustry-saves/" + slot + ".mins"); + return Vars.saveDirectory.child(slot + ".mins"); } public static void write(FileHandle file){ @@ -183,7 +182,7 @@ public class SaveIO{ //--GENERAL STATE-- stream.writeByte(Vars.control.getMode().ordinal()); //gamemode - stream.writeByte(Vars.world.getMap().ordinal()); //map ID + stream.writeByte(Vars.world.getMap().id); //map ID stream.writeInt(Vars.control.getWave()); //wave stream.writeFloat(Vars.control.getWaveCountdown()); //wave countdown @@ -399,7 +398,7 @@ public class SaveIO{ int seed = stream.readInt(); int tiles = stream.readInt(); - Vars.world.loadMap(Map.values()[mapid], seed); + Vars.world.loadMap(Vars.world.maps().getMap(mapid), seed); Vars.renderer.clearTiles(); for(Enemy enemy : enemiesToUpdate){ diff --git a/core/src/io/anuke/mindustry/mapeditor/MapEditor.java b/core/src/io/anuke/mindustry/mapeditor/MapEditor.java new file mode 100644 index 0000000000..6d1feb782f --- /dev/null +++ b/core/src/io/anuke/mindustry/mapeditor/MapEditor.java @@ -0,0 +1,123 @@ +package io.anuke.mindustry.mapeditor; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Pixmap.Format; +import com.badlogic.gdx.graphics.Texture; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.ColorMapper; +import io.anuke.mindustry.world.Map; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.ucore.graphics.Pixmaps; + +public class MapEditor{ + public static final int[] validMapSizes = {64, 128, 256}; + public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15}; + + private Pixmap[] brushPixmaps = new Pixmap[brushSizes.length]; + + private Map map; + private Pixmap pixmap; + private Texture texture; + private int brushSize = 1; + private Block drawBlock = Blocks.stone; + + public MapEditor(){ + for(int i = 0; i < brushSizes.length; i ++){ + int s = brushSizes[i]; + brushPixmaps[i] = new Pixmap(s*2-1, s*2-1, Format.RGB888); + } + } + + public void beginEdit(Map map){ + this.map = map; + this.brushSize = 1; + if(map.pixmap == null){ + pixmap = new Pixmap(256, 256, Format.RGB888); + pixmap.setColor(ColorMapper.getColor(Blocks.stone)); + pixmap.fill(); + texture = new Texture(pixmap); + }else{ + pixmap = map.pixmap; + pixmap.setColor(ColorMapper.getColor(Blocks.stone)); + texture = map.texture; + } + + } + + public Block getDrawBlock(){ + return drawBlock; + } + + public void setDrawBlock(Block block){ + this.drawBlock = block; + pixmap.setColor(ColorMapper.getColor(block)); + } + + public void setBrushSize(int size){ + this.brushSize = size; + } + + public void draw(int dx, int dy){ + if(dx < 0 || dy < 0 || dx >= pixmap.getWidth() || dy >= pixmap.getHeight()){ + return; + } + + Gdx.gl.glBindTexture(GL20.GL_TEXTURE_2D, texture.getTextureObjectHandle()); + + int dstWidth = brushSize*2-1; + int dstHeight = brushSize*2-1; + int width = pixmap.getWidth(), height = pixmap.getHeight(); + + int x = dx - dstWidth/2; + int y = dy - dstHeight/2; + + if (x + dstWidth > width){ + //x = width - dstWidth; + dstWidth = width - x; + }else if (x < 0){ + dstWidth += x; + x = 0; + } + + //System.out.println(x + " " + y + " " + dstWidth + " " + dstHeight); + + if (y + dstHeight > height){ + //y = height - dstHeight; + dstHeight = height - y; + }else if (y < 0){ + dstHeight += y; + y = 0; + } + + pixmap.fillCircle(dx, dy, brushSize); + + Pixmap dst = brush(brushSize); + dst.drawPixmap(pixmap, x, y, dstWidth, dstHeight, 0, 0, dstWidth, dstHeight); + + Gdx.gl.glTexSubImage2D(GL20.GL_TEXTURE_2D, 0, x, y, dstWidth, dstHeight, + dst.getGLFormat(), dst.getGLType(), dst.getPixels()); + } + + private Pixmap brush(int size){ + for(int i = 0; i < brushSizes.length; i ++){ + if(brushSizes[i] == size){ + return brushPixmaps[i]; + } + } + return null; + } + + public Texture texture(){ + return texture; + } + + public void resize(int mapSize){ + Pixmap out = Pixmaps.resize(pixmap, mapSize, mapSize); + pixmap.dispose(); + pixmap = out; + texture.draw(pixmap, 0, 0); + } +} diff --git a/core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java b/core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java new file mode 100644 index 0000000000..0627ddd01a --- /dev/null +++ b/core/src/io/anuke/mindustry/mapeditor/MapEditorDialog.java @@ -0,0 +1,142 @@ +package io.anuke.mindustry.mapeditor; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.ColorMapper; +import io.anuke.mindustry.world.ColorMapper.BlockPair; +import io.anuke.mindustry.world.Map; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.ucore.core.Draw; +import io.anuke.ucore.scene.builders.*; +import io.anuke.ucore.scene.ui.*; +import io.anuke.ucore.scene.ui.layout.Table; +import io.anuke.ucore.scene.ui.layout.Unit; + +public class MapEditorDialog extends Dialog{ + private MapEditor editor; + private MapView view; + + public MapEditorDialog(MapEditor editor){ + super("Map Editor", "dialog"); + this.editor = editor; + view = new MapView(editor); + + setFillParent(true); + + clearChildren(); + pad(0); + build.begin(this); + build(); + build.end(); + + shown(() -> { + editor.beginEdit(new Map()); + }); + } + + public void build(){ + + new table(){{ + float isize = Unit.dp.inPixels(14*3f); + aleft(); + + new table(){{ + defaults().growY().width(130f).units(Unit.dp).padBottom(-6); + + new imagebutton("icon-load", isize, () -> { + + }).text("load map"); + + row(); + + new imagebutton("icon-save", isize, ()->{ + + }).text("save map"); + + row(); + + new imagebutton("icon-load", isize, () -> { + + }).text("load image"); + + row(); + + new imagebutton("icon-save", isize, () -> { + + }).text("save image"); + + row(); + + new imagebutton("icon-cursor", 10f*3f, () -> { + + }).text("resize").padTop(4f); + + row(); + + new imagebutton("icon-arrow-left", isize, () -> { + + }).padBottom(0).text("back"); + + }}.left().growY().end(); + + new table("button"){{ + add(view).grow(); + }}.grow().end(); + + new table(){{ + new imagebutton("icon-terrain", isize, () -> { + + }).margin(12f).text("generate...").width(148f).units(Unit.dp); + + row(); + + new table("button"){{ + margin(10f); + Slider slider = new Slider(0, MapEditor.brushSizes.length-1, 1, false); + slider.moved(f -> { + editor.setBrushSize(MapEditor.brushSizes[(int)(float)f]); + }); + new label(() -> "Brush size: " + MapEditor.brushSizes[(int)slider.getValue()]).left(); + row(); + add(slider).growX().padTop(4f).units(Unit.dp); + }}.growX().end(); + + row(); + + addBlockSelection(get()); + + row(); + + }}.right().growY().end(); + }}.grow().end(); + } + + private void addBlockSelection(Table table){ + Table content = new Table(); + ScrollPane pane = new ScrollPane(content, "volume"); + pane.setFadeScrollBars(false); + pane.setOverscroll(true, false); + ButtonGroup group = new ButtonGroup<>(); + + int i = 0; + + for(BlockPair pair : ColorMapper.getPairs()){ + Block block = pair.wall == Blocks.air ? pair.floor : pair.wall; + + ImageButton button = new ImageButton(Draw.hasRegion(block.name) ? Draw.region(block.name) : Draw.region(block.name + "1"), "toggle"); + button.clicked(() -> editor.setDrawBlock(block)); + button.resizeImage(Unit.dp.inPixels(8*4f)); + group.add(button); + content.add(button).pad(4f).size(53f, 58f).units(Unit.dp); + + if(i++ % 2 == 1){ + content.row(); + } + } + + Table extra = new Table("button"); + extra.addWrap(() -> editor.getDrawBlock().name).width(120f).center(); + table.add(extra).growX(); + table.row(); + table.add(pane).growY().fillX(); + } +} diff --git a/core/src/io/anuke/mindustry/mapeditor/MapFilter.java b/core/src/io/anuke/mindustry/mapeditor/MapFilter.java new file mode 100644 index 0000000000..728630f4eb --- /dev/null +++ b/core/src/io/anuke/mindustry/mapeditor/MapFilter.java @@ -0,0 +1,214 @@ +package io.anuke.mindustry.mapeditor; + +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.math.Vector2; +import com.badlogic.gdx.utils.ObjectMap; +import com.badlogic.gdx.utils.OrderedMap; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.ColorMapper; +import io.anuke.mindustry.world.ColorMapper.BlockPair; +import io.anuke.mindustry.world.blocks.Blocks; +import io.anuke.mindustry.world.blocks.types.Floor; +import io.anuke.ucore.graphics.Pixmaps; +import io.anuke.ucore.noise.RidgedPerlin; +import io.anuke.ucore.noise.Simplex; +import io.anuke.ucore.util.Mathf; + +public class MapFilter{ + private ObjectMap prefs = new OrderedMap(){ + { + put("replace", true); + put("terrain", false); + put("circle", false); + put("distort", false); + put("sand", false); + put("grass", false); + put("stone", false); + put("allgrass", false); + put("allsnow", false); + put("allsand", false); + put("lavarock", false); + put("water", false); + put("oil", false); + put("lavariver", false); + put("slavariver", false); + put("river", false); + put("iceriver", false); + put("oilriver", false); + } + }; + private Simplex sim = new Simplex(); + private RidgedPerlin rid = new RidgedPerlin(1, 10, 20f); + private RidgedPerlin rid2 = new RidgedPerlin(1, 6, 1f); + private RidgedPerlin rid3 = new RidgedPerlin(1, 6, 1f); + + public void randomize(){ + sim.setSeed(Mathf.random(999999)); + rid.setSeed(Mathf.random(999999)); + rid2.setSeed(Mathf.random(999999)); + rid3.setSeed(Mathf.random(999999)); + } + + public ObjectMap getPrefs(){ + return prefs; + } + + public Pixmap process(Pixmap pixmap){ + if(prefs.get("terrain")){ + for(int x = 0; x < pixmap.getWidth(); x++){ + for(int y = 0; y < pixmap.getHeight(); y++){ + float dist = Vector2.dst((float) x / pixmap.getWidth(), (float) y / pixmap.getHeight(), 0.5f, 0.5f) * 2f; + double noise = sim.octaveNoise2D(6, 0.6, 1 / 180.0, x, y + 9999) / (prefs.get("circle") ? 1.7 : 1f) + dist / 10f; + + if(dist > 0.8){ + noise += 2 * (dist - 0.8); + } + + Block block = noise > 0.6 ? Blocks.stoneblock : Blocks.stone; + + pixmap.drawPixel(x, y, ColorMapper.getColor(block)); + } + } + } + + Pixmap src = Pixmaps.copy(pixmap); + + for(int x = 0; x < pixmap.getWidth(); x++){ + for(int y = 0; y < pixmap.getHeight(); y++){ + int dx = 0, dy = 0; + + if(prefs.get("distort")){ + double intensity = 12; + double scale = 80; + double octaves = 4; + double falloff = 0.6; + double nx = (sim.octaveNoise2D(octaves, falloff, 1 / scale, x, y) - 0.5f) * intensity; + double ny = (sim.octaveNoise2D(octaves, falloff, 1 / scale, x, y + 99999) - 0.5f) * intensity; + dx = (int) nx; + dy = (int) ny; + } + + int pix = src.getPixel(x + dx, y + dy); + + BlockPair pair = ColorMapper.get(pix); + Block block = pair == null ? null : pair.wall == Blocks.air ? pair.floor : pair.wall; + + if(block == null) + continue; + + boolean floor = block instanceof Floor; + + double noise = sim.octaveNoise2D(4, 0.6, 1 / 170.0, x, y) + sim.octaveNoise2D(1, 1.0, 1 / 5.0, x, y) / 18.0; + double nwater = sim.octaveNoise2D(1, 1.0, 1 / 130.0, x, y); + noise += nwater / 5.0; + + double noil = sim.octaveNoise2D(1, 1.0, 1 / 150.0, x + 9999, y) + sim.octaveNoise2D(1, 1.0, 1 / 2.0, x, y) / 290.0; + + if(!floor || prefs.get("replace")){ + + if(prefs.get("allgrass")){ + block = floor ? Blocks.grass : Blocks.grassblock; + }else if(prefs.get("allsnow")){ + block = floor ? Blocks.snow : Blocks.snowblock; + }else if(prefs.get("allsand")){ + block = floor ? Blocks.sand : Blocks.sandblock; + }else if(prefs.get("replace")){ + block = floor ? Blocks.stone : Blocks.stoneblock; + } + + if(noise > 0.7 && prefs.get("grass")){ + block = floor ? Blocks.grass : Blocks.grassblock; + } + if(noise > 0.7 && prefs.get("lavarock")){ + block = floor ? Blocks.blackstone : Blocks.blackstoneblock; + } + if(noise > 0.7 && prefs.get("sand")){ + block = floor ? Blocks.sand : Blocks.sandblock; + } + if(noise > 0.8 && prefs.get("stone")){ + block = floor ? Blocks.stone : Blocks.stoneblock; + } + } + + if(floor){ + if(nwater > 0.93 && prefs.get("water")){ + block = Blocks.water; + if(nwater > 0.943){ + block = Blocks.deepwater; + } + } + + if(noil > 0.95 && prefs.get("oil")){ + block = Blocks.dirt; + if(noil > 0.955){ + block = Blocks.oil; + } + } + } + + if(floor && prefs.get("lavariver")){ + double lava = rid.getValue(x, y, 1 / 100f); + double t = 0.6; + if(lava > t){ + block = Blocks.lava; + }else if(lava > t - 0.2){ + block = Blocks.blackstone; + } + } + + if(floor && prefs.get("slavariver")){ + double lava = rid.getValue(x, y, 1 / 40f); + double t = 0.7; + if(lava > t){ + block = Blocks.lava; + }else if(lava > t - 0.3){ + block = Blocks.blackstone; + } + } + + if(floor && prefs.get("oilriver")){ + double lava = rid3.getValue(x, y, 1 / 100f); + double t = 0.9; + if(lava > t){ + block = Blocks.oil; + }else if(lava > t - 0.2){ + block = Blocks.dirt; + } + } + + if(floor && prefs.get("river")){ + double riv = rid2.getValue(x, y, 1 / 140f); + double t = 0.4; + + if(riv > t + 0.1){ + block = Blocks.deepwater; + }else if(riv > t){ + block = Blocks.water; + }else if(riv > t - 0.2){ + block = Blocks.grass; + } + } + + if(floor && prefs.get("iceriver")){ + double riv = rid2.getValue(x, y, 1 / 140f); + double t = 0.4; + + if(riv > t + 0.1){ + block = Blocks.ice; + }else if(riv > t){ + block = Blocks.ice; + }else if(riv > t - 0.2){ + block = Blocks.snow; + } + } + + pixmap.drawPixel(x, y, ColorMapper.getColor(block)); + } + } + + src.dispose(); + + return pixmap; + } +} diff --git a/core/src/io/anuke/mindustry/mapeditor/MapView.java b/core/src/io/anuke/mindustry/mapeditor/MapView.java new file mode 100644 index 0000000000..8fda57d2f6 --- /dev/null +++ b/core/src/io/anuke/mindustry/mapeditor/MapView.java @@ -0,0 +1,66 @@ +package io.anuke.mindustry.mapeditor; + +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.math.Bresenham2; +import com.badlogic.gdx.math.GridPoint2; +import com.badlogic.gdx.utils.Array; + +import io.anuke.ucore.scene.Element; +import io.anuke.ucore.scene.event.InputEvent; +import io.anuke.ucore.scene.event.InputListener; +import io.anuke.ucore.util.Tmp; + +public class MapView extends Element{ + private MapEditor editor; + private Bresenham2 br = new Bresenham2(); + + public MapView(MapEditor editor){ + this.editor = editor; + addListener(new InputListener(){ + int lastx, lasty; + boolean drawing; + + @Override + public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) { + GridPoint2 p = project(x, y); + lastx = p.x; + lasty = p.y; + editor.draw(p.x, p.y); + return true; + } + + @Override + public void touchUp (InputEvent event, float x, float y, int pointer, int button) { + drawing = false; + } + + @Override + public void touchDragged (InputEvent event, float x, float y, int pointer) { + GridPoint2 p = project(x, y); + + if(drawing){ + Array points = br.line(lastx, lasty, p.x, p.y); + for(GridPoint2 point : points){ + editor.draw(point.x, point.y); + } + } + drawing = true; + lastx = p.x; + lasty = p.y; + } + }); + } + + private GridPoint2 project(float x, float y){ + float size = Math.min(width, height); + x = (x - getWidth()/2 + size/2) / size * editor.texture().getWidth(); + y = (y - getHeight()/2 + size/2) / size * editor.texture().getHeight(); + return Tmp.g1.set((int)x, editor.texture().getHeight() - 1 - (int)y); + } + + @Override + public void draw(Batch batch, float alpha){ + float size = Math.min(width, height); + batch.draw(editor.texture(), x + width/2 - size/2, y + height/2 - size/2, size, size); + } +} diff --git a/core/src/io/anuke/mindustry/ui/LevelDialog.java b/core/src/io/anuke/mindustry/ui/LevelDialog.java index 180bc2469b..9ed61d1b81 100644 --- a/core/src/io/anuke/mindustry/ui/LevelDialog.java +++ b/core/src/io/anuke/mindustry/ui/LevelDialog.java @@ -16,7 +16,7 @@ import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.utils.Elements; public class LevelDialog extends FloatingDialog{ - private Map selectedMap = Map.maze; + private Map selectedMap = Vars.world.maps().getMap(0); private TextureRegion region = new TextureRegion(); public LevelDialog(){ @@ -49,8 +49,8 @@ public class LevelDialog extends FloatingDialog{ content().add(selmode); content().row(); - for(int i = 0; i < Map.values().length; i ++){ - Map map = Map.values()[i]; + int i = 0; + for(Map map : Vars.world.maps().list()){ if(!map.visible && !Vars.debug) continue; @@ -59,9 +59,9 @@ public class LevelDialog extends FloatingDialog{ } Table inset = new Table("pane-button"); - inset.add("[accent]"+map.name()).pad(3f).units(Unit.dp); + inset.add("[accent]"+map.name).pad(3f).units(Unit.dp); inset.row(); - inset.add((StringSupplier)(()->"High Score: [accent]" + Settings.getInt("hiscore" + map.name()))) + inset.add((StringSupplier)(()->"High Score: [accent]" + Settings.getInt("hiscore" + map.name))) .pad(3f).units(Unit.dp); inset.pack(); @@ -72,7 +72,7 @@ public class LevelDialog extends FloatingDialog{ Image back = new Image("white"); back.setColor(map.backgroundColor); - ImageButton image = new ImageButton(new TextureRegion(Vars.world.getTexture(map)), "togglemap"); + ImageButton image = new ImageButton(new TextureRegion(map.texture), "togglemap"); image.row(); image.add(inset).width(images+6).units(Unit.dp); image.clicked(()->{ @@ -88,6 +88,8 @@ public class LevelDialog extends FloatingDialog{ maps.add(stack).width(170).pad(4f).units(Unit.dp); maps.padRight(Unit.dp.inPixels(26)); + + i ++; } content().add(pane).uniformX(); diff --git a/core/src/io/anuke/mindustry/ui/LoadDialog.java b/core/src/io/anuke/mindustry/ui/LoadDialog.java index a094b7d3dc..e8b24740c3 100644 --- a/core/src/io/anuke/mindustry/ui/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/LoadDialog.java @@ -55,7 +55,9 @@ public class LoadDialog extends FloatingDialog{ button.row(); - Label info = new Label("[gray]" + (!SaveIO.isSaveValid(i) ? "" : SaveIO.getMode(slot) + ", " + SaveIO.getMap(slot) + ", Wave " + SaveIO.getWave(slot) + "\nLast Saved: " + SaveIO.getTimeString(i))); + Label info = new Label("[gray]" + (!SaveIO.isSaveValid(i) ? "" : SaveIO.getMode(slot) + ", " + + SaveIO.getMap(slot).name + ", Wave " + SaveIO.getWave(slot) + + "\nLast Saved: " + SaveIO.getTimeString(i))); info.setAlignment(Align.center, Align.center); button.add(info).padBottom(3).padTop(7); diff --git a/core/src/io/anuke/mindustry/ui/MapEditor.java b/core/src/io/anuke/mindustry/ui/MapEditor.java deleted file mode 100644 index 33ff2caf4a..0000000000 --- a/core/src/io/anuke/mindustry/ui/MapEditor.java +++ /dev/null @@ -1,5 +0,0 @@ -package io.anuke.mindustry.ui; - -public class MapEditor{ - -} diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index b6f6f778dc..550f442d7d 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -1,5 +1,7 @@ package io.anuke.mindustry.ui.fragments; +import static io.anuke.mindustry.Vars.*; + import com.badlogic.gdx.Gdx; import io.anuke.mindustry.Mindustry; @@ -7,16 +9,10 @@ import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.ui.MenuButton; import io.anuke.mindustry.ui.PressGroup; -import io.anuke.mindustry.world.Map; import io.anuke.ucore.scene.builders.imagebutton; import io.anuke.ucore.scene.builders.table; import io.anuke.ucore.scene.ui.layout.Unit; -import static io.anuke.mindustry.Vars.android; -import static io.anuke.mindustry.Vars.control; -import static io.anuke.mindustry.Vars.gwt; -import static io.anuke.mindustry.Vars.ui; - public class MenuFragment implements Fragment{ public void build(){ @@ -30,22 +26,25 @@ public class MenuFragment implements Fragment{ float scale = 4f; defaults().size(100*scale, 21*scale).pad(-10f).units(Unit.dp); - add(new MenuButton("text-play", group, ()-> ui.showLevels())); + add(new MenuButton("text-play", group, ui::showLevels)); row(); - add(new MenuButton("text-tutorial", group, ()-> control.playMap(Map.tutorial))); + add(new MenuButton("text-tutorial", group, ()-> control.playMap(world.maps().getMap("tutorial")))); row(); if(!gwt){ - add(new MenuButton("text-load", group, ()-> ui.showLoadGame())); + add(new MenuButton("text-load", group, ui::showLoadGame)); + row(); + + add(new MenuButton("text-editor", group, ui::showEditor)); row(); } - add(new MenuButton("text-settings", group, ()-> ui.showPrefs())); + add(new MenuButton("text-settings", group, ui::showPrefs)); row(); if(!gwt){ - add(new MenuButton("text-exit", group, ()-> Gdx.app.exit())); + add(new MenuButton("text-exit", group, Gdx.app::exit)); } get().pad(Unit.dp.inPixels(16)); }}.end(); @@ -60,9 +59,13 @@ public class MenuFragment implements Fragment{ new imagebutton("icon-play-2", isize, () -> ui.showLevels()).text("Play").padTop(4f); - new imagebutton("icon-tutorial", isize, ()-> control.playMap(Map.tutorial)).text("Tutorial").padTop(4f); + new imagebutton("icon-tutorial", isize, () -> control.playMap(world.maps().getMap("tutorial"))).text("Tutorial").padTop(4f); new imagebutton("icon-load", isize, () -> ui.showLoadGame()).text("Load").padTop(4f); + + row(); + + new imagebutton("icon-terrain", isize, () -> ui.showEditor()).text("Editor").padTop(4f); new imagebutton("icon-tools", isize, () -> ui.showPrefs()).text("Settings").padTop(4f); diff --git a/core/src/io/anuke/mindustry/world/ColorMapper.java b/core/src/io/anuke/mindustry/world/ColorMapper.java new file mode 100644 index 0000000000..e73dbf60f1 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/ColorMapper.java @@ -0,0 +1,77 @@ +package io.anuke.mindustry.world; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.IntMap; +import com.badlogic.gdx.utils.IntMap.Entry; +import com.badlogic.gdx.utils.ObjectIntMap; + +import io.anuke.mindustry.world.blocks.Blocks; + +public class ColorMapper{ + private static ObjectIntMap reverseColors = new ObjectIntMap<>(); + private static Array pairs = new Array<>(); + private static IntMap colors = map( + "323232", pair(Blocks.stone), + "646464", pair(Blocks.stone, Blocks.stoneblock), + "50965a", pair(Blocks.grass), + "5ab464", pair(Blocks.grass, Blocks.grassblock), + "506eb4", pair(Blocks.water), + "465a96", pair(Blocks.deepwater), + "252525", pair(Blocks.blackstone), + "575757", pair(Blocks.blackstone, Blocks.blackstoneblock), + "988a67", pair(Blocks.sand), + "e5d8bb", pair(Blocks.sand, Blocks.sandblock), + "c2d1d2", pair(Blocks.snow), + "c4e3e7", pair(Blocks.ice), + "f7feff", pair(Blocks.snow, Blocks.snowblock), + "6e501e", pair(Blocks.dirt), + "ed5334", pair(Blocks.lava), + "292929", pair(Blocks.oil) + ); + + public static BlockPair get(int color){ + return colors.get(color); + } + + public static IntMap getColors(){ + return colors; + } + + public static Array getPairs(){ + return pairs; + } + + public static int getColor(Block block){ + return reverseColors.get(block, 0); + } + + private static BlockPair pair(Block floor, Block wall){ + return new BlockPair(floor, wall); + } + + private static BlockPair pair(Block floor){ + return new BlockPair(floor, Blocks.air); + } + + private static IntMap map(Object...objects){ + IntMap colors = new IntMap<>(); + for(int i = 0; i < objects.length/2; i ++){ + colors.put(Color.rgba8888(Color.valueOf((String)objects[i*2])), (BlockPair)objects[i*2+1]); + pairs.add((BlockPair)objects[i*2+1]); + } + for(Entry e : colors.entries()){ + reverseColors.put(e.value.wall == Blocks.air ? e.value.floor : e.value.wall, e.key); + } + return colors; + } + + public static class BlockPair{ + public final Block floor, wall; + + private BlockPair(Block floor, Block wall){ + this.floor = floor; + this.wall = wall; + } + } +} diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index 9ec6a425bf..ceff64f2e8 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -2,42 +2,26 @@ package io.anuke.mindustry.world; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Pixmap; -import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.IntMap; +import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.Vars; import io.anuke.mindustry.entities.enemies.TargetEnemy; -import io.anuke.mindustry.world.blocks.*; -import io.anuke.mindustry.world.blocks.types.Floor; +import io.anuke.mindustry.world.ColorMapper.BlockPair; +import io.anuke.mindustry.world.blocks.Blocks; import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.noise.Noise; import io.anuke.ucore.util.Mathf; public class Generator{ - public static boolean debugBlockspam = false; - static final int spawn = Color.rgba8888(Color.RED); static final int start = Color.rgba8888(Color.GREEN); - - public static IntMap colors = map( - Hue.rgb(80, 150, 90), Blocks.grass, - Hue.rgb(90, 180, 100), Blocks.grassblock, - Hue.rgb(80, 110, 180), Blocks.water, - Hue.rgb(70, 90, 150), Blocks.deepwater, - Hue.rgb(110, 80, 30), Blocks.dirt, - Hue.rgb(160, 120, 70), Blocks.dirtblock, - Hue.rgb(100, 100, 100), Blocks.stoneblock, - Color.valueOf("323232"), Blocks.stone, - Color.valueOf("575757"), Blocks.blackstoneblock, - Color.valueOf("252525"), Blocks.blackstone, - Color.valueOf("ed5334"), Blocks.lava, - Color.valueOf("292929"), Blocks.oil, - Color.valueOf("e5d8bb"), Blocks.sandblock, - Color.valueOf("988a67"), Blocks.sand, - Color.valueOf("f7feff"), Blocks.snowblock, - Color.valueOf("c2d1d2"), Blocks.snow, - Color.valueOf("c4e3e7"), Blocks.ice - ); + static final ObjectMap rocks = new ObjectMap(){{ + put(Blocks.stone, Blocks.rock); + put(Blocks.snow, Blocks.icerock); + put(Blocks.grass, Blocks.shrub); + put(Blocks.blackstone, Blocks.blackrock); + }}; /**Returns world size.*/ public static void generate(Pixmap pixmap, Tile[][] tiles){ @@ -50,14 +34,11 @@ public class Generator{ Block block = Blocks.air; int color = pixmap.getPixel(x, pixmap.getHeight()-1-y); + BlockPair pair = ColorMapper.get(color); - if(colors.containsKey(color)){ - //TODO less hacky method - if(!(colors.get(color) instanceof Floor)){ - block = colors.get(color); - }else{ - floor = colors.get(color); - } + if(pair != null){ + block = pair.wall; + floor = pair.floor; }else if(color == start){ Vars.control.setCore(Vars.world.tile(x, y)); }else if(color == spawn){ @@ -65,18 +46,8 @@ public class Generator{ floor = Blocks.dirt; } - if(block == Blocks.air){ - if(floor == Blocks.stone && Mathf.chance(0.02)){ - block = Blocks.rock; - } - - if(floor == Blocks.snow && Mathf.chance(0.02)){ - block = Blocks.icerock; - } - - if(floor == Blocks.blackstone && Mathf.chance(0.03)){ - block = Blocks.blackrock; - } + if(block == Blocks.air && Mathf.chance(0.025) && rocks.containsKey(floor)){ + block = rocks.get(floor); } if(floor == Blocks.stone || floor == Blocks.grass || floor == Blocks.blackstone || @@ -98,32 +69,11 @@ public class Generator{ } } - if(block == Blocks.grassblock){ - floor = Blocks.grass; - } - - if(block == Blocks.snowblock){ - floor = Blocks.snow; - } - - if(block == Blocks.sandblock){ - floor = Blocks.sand; - } - - if(floor == Blocks.grass && Mathf.chance(0.03) && block == Blocks.air){ - block = Blocks.shrub; - } - if(color == Hue.rgb(Color.PURPLE)){ if(!Vars.android) new TargetEnemy().set(x * Vars.tilesize, y * Vars.tilesize).add(); floor = Blocks.stone; } - //preformance debugging - if(debugBlockspam && Vector2.dst(0, 0, x, y) < 260){ - block = Mathf.choose(ProductionBlocks.omnidrill, DistributionBlocks.conveyor, DistributionBlocks.router, WeaponBlocks.turret); - } - tiles[x][y].setBlock(block, 0); tiles[x][y].setFloor(floor); } diff --git a/core/src/io/anuke/mindustry/world/Map.java b/core/src/io/anuke/mindustry/world/Map.java index 8dace847cb..34047f06d8 100644 --- a/core/src/io/anuke/mindustry/world/Map.java +++ b/core/src/io/anuke/mindustry/world/Map.java @@ -1,49 +1,25 @@ package io.anuke.mindustry.world; import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; -public enum Map{ - maze("desc"), - fortress("desc"), - sinkhole("desc"), - caves("desc"), - volcano("desc", true), - caldera("desc"), - scorch("desc", Color.valueOf("e5d8bb")), - desert("desc"), - islands("desc", Color.valueOf("e5d8bb")), - grassland("desc", Color.valueOf("5ab464")), - tundra("desc"), - spiral("desc", Color.valueOf("f7feff")), - tutorial(false), - test1(false), - test2(false), - test3(false); - - public final boolean visible; - public final String description; - public final boolean flipBase; - public int width, height; +public class Map{ + public int id; + public String name; + public boolean visible = true; + public boolean flipBase = false; + public boolean custom = false; public Color backgroundColor = Color.valueOf("646464"); - private Map(boolean visible){ - this.visible = visible; - this.flipBase = false; - this.description = "Test map!"; + public transient Pixmap pixmap; + public transient Texture texture; + + public int getWidth(){ + return pixmap.getWidth(); } - private Map(String description){ - this(description, false); - } - - private Map(String description, boolean flipBase){ - this.visible = true; - this.flipBase = flipBase; - this.description = description; - } - - private Map(String description, Color background){ - this(description); - backgroundColor = background; + public int getHeight(){ + return pixmap.getHeight(); } } diff --git a/core/src/io/anuke/mindustry/world/Maps.java b/core/src/io/anuke/mindustry/world/Maps.java new file mode 100644 index 0000000000..2fc96f679b --- /dev/null +++ b/core/src/io/anuke/mindustry/world/Maps.java @@ -0,0 +1,119 @@ +package io.anuke.mindustry.world; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Pixmap; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.*; +import com.badlogic.gdx.utils.Json.Serializer; +import com.badlogic.gdx.utils.JsonWriter.OutputType; + +import io.anuke.mindustry.Vars; +import io.anuke.ucore.graphics.Pixmaps; + +public class Maps implements Disposable{ + private IntMap maps = new IntMap<>(); + private ObjectMap mapNames = new ObjectMap<>(); + private int lastID; + private Json json = new Json(); + + public Maps() { + json.setOutputType(OutputType.json); + json.setElementType(ArrayContainer.class, "maps", Map.class); + json.setSerializer(Color.class, new ColorSerializer()); + } + + public Iterable list(){ + return maps.values(); + } + + public Map getMap(int id){ + return maps.get(id); + } + + public Map getMap(String name){ + return mapNames.get(name); + } + + public void loadMaps(){ + if(!loadMapFile(Gdx.files.internal("maps/maps.json"))){ + throw new RuntimeException("Failed to load maps!"); + } + + if(!loadMapFile(Vars.customMapDirectory.child("maps.json"))){ + try{ + Vars.customMapDirectory.child("maps.json").writeString("{}", false); + }catch(Exception e){ + throw new RuntimeException("Failed to create custom map directory!"); + } + } + } + + public void saveMaps(Array array, FileHandle file){ + json.toJson(new ArrayContainer(array), file); + } + + public void saveCustomMap(Map toSave){ + Array out = new Array<>(); + for(Map map : maps.values()){ + if(map.custom) + out.add(map); + } + Pixmaps.write(toSave.pixmap, Vars.customMapDirectory.child(toSave.name + ".png")); + saveMaps(out, Vars.customMapDirectory.child("maps.json")); + } + + private boolean loadMapFile(FileHandle file){ + try{ + Array arr = json.fromJson(ArrayContainer.class, file).maps; + if(arr != null){ //can be an empty map file + for(Map map : arr){ + map.pixmap = new Pixmap(file.sibling(map.name + ".png")); + map.texture = new Texture(map.pixmap); + maps.put(map.id, map); + mapNames.put(map.name, map); + } + } + return true; + }catch(Exception e){ + e.printStackTrace(); + Gdx.app.error("Mindustry-Maps", "Failed loading map file: " + file); + return false; + } + } + + @Override + public void dispose(){ + for(Map map : maps.values()){ + map.texture.dispose(); + map.pixmap.dispose(); + } + maps.clear(); + } + + private static class ArrayContainer{ + Array maps; + + ArrayContainer() { + } + + ArrayContainer(Array maps) { + this.maps = maps; + } + } + + private class ColorSerializer implements Serializer{ + + @Override + public void write(Json json, Color object, Class knownType){ + json.writeValue(object.toString().substring(0, 6)); + } + + @Override + public Color read(Json json, JsonValue jsonData, Class type){ + return Color.valueOf(jsonData.asString()); + } + + } +} diff --git a/desktop/mindustry-maps/maps.json b/desktop/mindustry-maps/maps.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/desktop/mindustry-maps/maps.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java index eb6289de1b..5a21731502 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopLauncher.java @@ -23,7 +23,7 @@ public class DesktopLauncher { config.setMaximized(true); config.setWindowedMode(960, 540); config.setWindowIcon("sprites/icon.png"); - config.useVsync(false); + config.useVsync(true); Mindustry.platforms = new PlatformFunction(){ SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm");