diff --git a/core/assets-raw/sprites/ui/icons/icon-break.png b/core/assets-raw/sprites/ui/icons/icon-break.png new file mode 100644 index 0000000000..8f20326533 Binary files /dev/null and b/core/assets-raw/sprites/ui/icons/icon-break.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 07c3e4e7e0..4e4c56ffa9 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -55,56 +55,56 @@ bridgeconveyor-arrow index: -1 bridgeconveyor-bridge rotate: false - xy: 210, 8 + xy: 658, 124 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconveyor-end rotate: false - xy: 669, 229 + xy: 210, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 461, 108 + xy: 481, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top rotate: false - xy: 451, 98 + xy: 501, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduittunnel rotate: false - xy: 461, 98 + xy: 511, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor rotate: false - xy: 471, 98 + xy: 521, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyormove rotate: false - xy: 481, 101 + xy: 531, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyortunnel rotate: false - xy: 491, 101 + xy: 541, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -132,98 +132,98 @@ core-top index: -1 junction rotate: false - xy: 561, 93 + xy: 688, 145 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit rotate: false - xy: 561, 83 + xy: 688, 135 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-arrow rotate: false - xy: 561, 73 + xy: 688, 125 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-bridge rotate: false - xy: 571, 106 + xy: 551, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-end rotate: false - xy: 571, 96 + xy: 551, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor rotate: false - xy: 581, 106 + xy: 551, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-arrow rotate: false - xy: 571, 86 + xy: 394, 85 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-bridge rotate: false - xy: 581, 96 + xy: 481, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-end rotate: false - xy: 591, 106 + xy: 491, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidjunction rotate: false - xy: 601, 96 + xy: 561, 103 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter rotate: false - xy: 611, 106 + xy: 561, 93 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-bottom rotate: false - xy: 591, 76 + xy: 561, 83 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-liquid rotate: false - xy: 601, 86 + xy: 561, 73 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-top rotate: false - xy: 611, 96 + xy: 571, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -251,84 +251,84 @@ liquidtank-top index: -1 multiplexer rotate: false - xy: 999, 443 + xy: 576, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 overflowgate rotate: false - xy: 404, 85 + xy: 591, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 poweredconveyor rotate: false - xy: 581, 66 + xy: 591, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 poweredconveyormove rotate: false - xy: 591, 66 + xy: 601, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulseconduit-bottom rotate: false - xy: 631, 68 + xy: 611, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulseconduit-top rotate: false - xy: 561, 63 + xy: 621, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 router rotate: false - xy: 641, 84 + xy: 651, 80 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 270, 25 + xy: 284, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 280, 25 + xy: 294, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 splitter rotate: false - xy: 300, 25 + xy: 801, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelconveyor rotate: false - xy: 310, 25 + xy: 811, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelconveyormove rotate: false - xy: 801, 443 + xy: 821, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -342,7 +342,7 @@ teleporter-top index: -1 unloader rotate: false - xy: 845, 403 + xy: 869, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -356,7 +356,7 @@ vault index: -1 weaponfactory rotate: false - xy: 608, 116 + xy: 626, 116 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -426,49 +426,49 @@ blackstoneedge index: -1 coal1 rotate: false - xy: 677, 219 + xy: 451, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal2 rotate: false - xy: 667, 209 + xy: 461, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 677, 209 + xy: 471, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 511, 101 + xy: 431, 90 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 521, 101 + xy: 451, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 531, 101 + xy: 461, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 541, 101 + xy: 471, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -482,35 +482,35 @@ dirtedge index: -1 grass1 rotate: false - xy: 501, 91 + xy: 441, 82 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass2 rotate: false - xy: 511, 91 + xy: 451, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 521, 91 + xy: 461, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassblock1 rotate: false - xy: 531, 91 + xy: 471, 78 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassblock2 rotate: false - xy: 541, 91 + xy: 481, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -524,441 +524,441 @@ grassedge index: -1 ice1 rotate: false - xy: 441, 82 + xy: 491, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice2 rotate: false - xy: 451, 78 + xy: 501, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 461, 78 + xy: 511, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iceedge rotate: false - xy: 248, 47 + xy: 264, 47 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 471, 78 + xy: 521, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock2 rotate: false - xy: 481, 81 + xy: 531, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 491, 81 + xy: 541, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 491, 81 + xy: 541, 81 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 501, 81 + xy: 694, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 501, 81 + xy: 694, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron1 rotate: false - xy: 531, 81 + xy: 693, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron2 rotate: false - xy: 541, 81 + xy: 693, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron3 rotate: false - xy: 694, 273 + xy: 693, 223 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 571, 76 + xy: 501, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 262, 47 + xy: 278, 47 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead1 rotate: false - xy: 591, 96 + xy: 521, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead2 rotate: false - xy: 601, 106 + xy: 531, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 581, 76 + xy: 541, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 611, 76 + xy: 591, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 621, 106 + xy: 571, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 621, 96 + xy: 581, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 621, 86 + xy: 601, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 621, 76 + xy: 571, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 631, 108 + xy: 581, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 276, 47 + xy: 292, 47 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mossblock rotate: false - xy: 631, 98 + xy: 591, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil rotate: false - xy: 631, 88 + xy: 611, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oiledge rotate: false - xy: 290, 47 + xy: 648, 192 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock1 rotate: false - xy: 641, 104 + xy: 651, 100 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock2 rotate: false - xy: 641, 94 + xy: 651, 90 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 641, 54 + xy: 404, 85 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 631, 48 + xy: 414, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 641, 44 + xy: 571, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock1 rotate: false - xy: 652, 124 + xy: 581, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock2 rotate: false - xy: 652, 114 + xy: 591, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock3 rotate: false - xy: 651, 104 + xy: 601, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 304, 47 + xy: 648, 178 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrub rotate: false - xy: 662, 124 + xy: 571, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 662, 114 + xy: 581, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 661, 84 + xy: 611, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 661, 74 + xy: 621, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 661, 64 + xy: 631, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock1 rotate: false - xy: 661, 54 + xy: 641, 50 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock2 rotate: false - xy: 661, 44 + xy: 651, 50 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock3 rotate: false - xy: 250, 25 + xy: 264, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 644, 150 + xy: 644, 122 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 space rotate: false - xy: 290, 25 + xy: 306, 39 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 644, 136 + xy: 210, 18 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone1 rotate: false - xy: 799, 433 + xy: 799, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 799, 423 + xy: 809, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 799, 413 + xy: 809, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock1 rotate: false - xy: 809, 433 + xy: 819, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock2 rotate: false - xy: 809, 423 + xy: 809, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock3 rotate: false - xy: 819, 433 + xy: 805, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 668, 277 + xy: 650, 263 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 819, 413 + xy: 829, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 815, 403 + xy: 839, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 829, 423 + xy: 829, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 839, 433 + xy: 825, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 829, 413 + xy: 839, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 825, 403 + xy: 839, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 859, 413 + xy: 869, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 655, 235 + xy: 655, 221 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -993,14 +993,14 @@ border index: -1 conduit-liquid rotate: false - xy: 471, 108 + xy: 491, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 501, 101 + xy: 441, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1028,7 +1028,7 @@ cross-4 index: -1 enemyspawn rotate: false - xy: 471, 88 + xy: 521, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1042,49 +1042,49 @@ nuclearreactor-shadow index: -1 place-arrow rotate: false - xy: 414, 86 + xy: 601, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 playerspawn rotate: false - xy: 571, 66 + xy: 621, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 685, 333 + xy: 686, 299 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 554, 125 + xy: 576, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 576, 170 + xy: 594, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 594, 170 + xy: 612, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 612, 170 + xy: 630, 170 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1105,7 +1105,7 @@ rubble-3-1 index: -1 shadow-1 rotate: false - xy: 681, 251 + xy: 681, 227 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1140,7 +1140,7 @@ shadow-5 index: -1 shadow-round-1 rotate: false - xy: 681, 239 + xy: 681, 215 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1161,14 +1161,14 @@ batterylarge index: -1 combustiongenerator rotate: false - xy: 441, 112 + xy: 451, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustiongenerator-top rotate: false - xy: 441, 102 + xy: 461, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1238,7 +1238,7 @@ largesolarpanel index: -1 liquidcombustiongenerator rotate: false - xy: 591, 86 + xy: 551, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1266,21 +1266,21 @@ nuclearreactor-lights index: -1 powerinfinite rotate: false - xy: 601, 66 + xy: 611, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powernode rotate: false - xy: 611, 66 + xy: 631, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powernodelarge rotate: false - xy: 558, 179 + xy: 554, 161 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1294,42 +1294,42 @@ powernodelarge-shadow index: -1 powervoid rotate: false - xy: 621, 66 + xy: 601, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rtgenerator rotate: false - xy: 641, 74 + xy: 641, 70 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rtgenerator-top rotate: false - xy: 641, 64 + xy: 651, 70 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shieldgenerator rotate: false - xy: 651, 74 + xy: 631, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shieldprojector rotate: false - xy: 630, 170 + xy: 572, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 solarpanel rotate: false - xy: 260, 25 + xy: 274, 37 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1350,7 +1350,7 @@ teleporter-top index: -1 thermalgenerator rotate: false - xy: 829, 433 + xy: 815, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1462,105 +1462,105 @@ cultivator-top index: -1 extractor rotate: false - xy: 481, 91 + xy: 531, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 fluxpump rotate: false - xy: 491, 91 + xy: 541, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 521, 81 + xy: 693, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill rotate: false - xy: 693, 263 + xy: 693, 213 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill-rotator rotate: false - xy: 693, 253 + xy: 220, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill-rotator rotate: false - xy: 693, 253 + xy: 220, 8 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill-top rotate: false - xy: 693, 243 + xy: 704, 273 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 551, 71 + xy: 678, 125 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 561, 103 + xy: 688, 155 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserdrill rotate: false - xy: 945, 443 + xy: 963, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laserdrill-rotator rotate: false - xy: 963, 443 + xy: 981, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 laserdrill-top rotate: false - xy: 981, 443 + xy: 999, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 581, 86 + xy: 511, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 601, 76 + xy: 581, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 611, 86 + xy: 571, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1623,7 +1623,7 @@ oilextractor-top index: -1 oilrefinery rotate: false - xy: 631, 78 + xy: 581, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1658,203 +1658,203 @@ plasmadrill-top index: -1 plasticformer rotate: false - xy: 576, 188 + xy: 594, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 plasticformer-top rotate: false - xy: 594, 188 + xy: 612, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 poweralloysmelter rotate: false - xy: 612, 188 + xy: 630, 188 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 poweralloysmelter-top rotate: false - xy: 630, 188 + xy: 558, 179 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 powersmelter rotate: false - xy: 554, 161 + xy: 554, 143 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 powersmelter-top rotate: false - xy: 554, 143 + xy: 554, 125 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 siliconsmelter-top rotate: false - xy: 554, 143 + xy: 554, 125 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 pulverizer rotate: false - xy: 571, 56 + xy: 611, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 581, 56 + xy: 621, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump rotate: false - xy: 591, 56 + xy: 631, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 reinforceddrill rotate: false - xy: 601, 56 + xy: 621, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 reinforceddrill-rotator rotate: false - xy: 611, 56 + xy: 631, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 reinforceddrill-top rotate: false - xy: 621, 56 + xy: 631, 76 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 651, 94 + xy: 611, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 651, 84 + xy: 621, 66 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 siliconextractor rotate: false - xy: 661, 104 + xy: 591, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 siliconsmelter rotate: false - xy: 572, 152 + xy: 572, 134 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 smelter rotate: false - xy: 661, 94 + xy: 601, 56 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill rotate: false - xy: 811, 443 + xy: 831, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill-rotator rotate: false - xy: 821, 443 + xy: 841, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill-top rotate: false - xy: 831, 443 + xy: 799, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stonedrill rotate: false - xy: 809, 413 + xy: 819, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneformer rotate: false - xy: 805, 403 + xy: 829, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill rotate: false - xy: 839, 423 + xy: 835, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill-top rotate: false - xy: 839, 413 + xy: 849, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 waterextractor rotate: false - xy: 608, 152 + xy: 608, 134 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-liquid rotate: false - xy: 608, 134 + xy: 626, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-rotator rotate: false - xy: 626, 152 + xy: 626, 134 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-top rotate: false - xy: 626, 134 + xy: 572, 116 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1910,7 +1910,7 @@ block-4-top index: -1 scatter-heat rotate: false - xy: 686, 299 + xy: 682, 275 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1959,7 +1959,7 @@ crux-panel-right index: -1 duo rotate: false - xy: 451, 88 + xy: 501, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1980,14 +1980,14 @@ spectre index: -1 lancer rotate: false - xy: 554, 113 + xy: 685, 333 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 685, 345 + xy: 686, 311 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -2008,49 +2008,49 @@ ripple index: -1 scatter rotate: false - xy: 686, 311 + xy: 686, 287 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scatter-heat rotate: false - xy: 686, 287 + xy: 681, 263 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scorch rotate: false - xy: 682, 275 + xy: 681, 251 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 681, 263 + xy: 681, 239 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 swarmer rotate: false - xy: 590, 152 + xy: 590, 134 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave rotate: false - xy: 572, 116 + xy: 590, 116 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 590, 116 + xy: 608, 116 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -2099,35 +2099,35 @@ walkerfactory-top-open index: -1 repairpoint rotate: false - xy: 631, 58 + xy: 641, 100 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repairpoint-turret rotate: false - xy: 642, 124 + xy: 641, 90 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 resupplypoint rotate: false - xy: 642, 114 + xy: 641, 80 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 compositewall rotate: false - xy: 451, 108 + xy: 471, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 441, 92 + xy: 481, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2148,14 +2148,14 @@ door-large-open index: -1 door-open rotate: false - xy: 431, 90 + xy: 491, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 duriumwall rotate: false - xy: 461, 88 + xy: 511, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2169,49 +2169,49 @@ duriumwall-large index: -1 ironwall rotate: false - xy: 220, 8 + xy: 703, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelwall rotate: false - xy: 841, 443 + xy: 799, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelwall-large rotate: false - xy: 572, 134 + xy: 590, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 stonewall rotate: false - xy: 819, 423 + xy: 819, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumshieldwall rotate: false - xy: 835, 403 + xy: 849, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumwall rotate: false - xy: 849, 433 + xy: 859, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumwall-large rotate: false - xy: 590, 134 + xy: 608, 152 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -2309,7 +2309,7 @@ shell-back index: -1 shot rotate: false - xy: 651, 44 + xy: 651, 60 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2323,7 +2323,7 @@ transfer index: -1 transfer-arrow rotate: false - xy: 849, 423 + xy: 849, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2337,196 +2337,196 @@ transfer-end index: -1 item-armor-piercing-bullet rotate: false - xy: 689, 229 + xy: 703, 253 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-composite-flak rotate: false - xy: 703, 263 + xy: 703, 213 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-explosive-shell rotate: false - xy: 703, 253 + xy: 667, 205 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-frag-shell rotate: false - xy: 703, 243 + xy: 677, 205 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-homing-bullet rotate: false - xy: 699, 233 + xy: 662, 195 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-incendiary-mortar-shell rotate: false - xy: 699, 223 + xy: 662, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead-bullet rotate: false - xy: 709, 223 + xy: 672, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-scythe-missile rotate: false - xy: 707, 203 + xy: 672, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-mortar-shell rotate: false - xy: 481, 71 + xy: 682, 195 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-swarm-missile rotate: false - xy: 491, 71 + xy: 682, 185 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium-shell rotate: false - xy: 521, 71 + xy: 678, 155 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-tracer-bullet rotate: false - xy: 541, 71 + xy: 678, 135 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 687, 219 + xy: 703, 243 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 687, 209 + xy: 703, 233 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 704, 273 + xy: 703, 223 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-iron rotate: false - xy: 697, 213 + xy: 672, 195 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 709, 233 + xy: 662, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plastic rotate: false - xy: 707, 213 + xy: 662, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 697, 203 + xy: 672, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 551, 101 + xy: 668, 155 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-steel rotate: false - xy: 551, 91 + xy: 668, 145 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 551, 81 + xy: 668, 135 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 394, 85 + xy: 668, 125 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thermite rotate: false - xy: 501, 71 + xy: 682, 175 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 511, 71 + xy: 682, 165 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 531, 71 + xy: 678, 145 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 standard-mech rotate: false - xy: 210, 18 + xy: 654, 277 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-ship rotate: false - xy: 654, 277 + xy: 668, 277 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -2738,7 +2738,7 @@ icon-admin-small index: -1 icon-areaDelete rotate: false - xy: 655, 223 + xy: 655, 209 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -2759,21 +2759,21 @@ icon-arrow-16 index: -1 icon-arrow-down rotate: false - xy: 655, 211 + xy: 669, 251 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 669, 251 + xy: 669, 239 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 669, 239 + xy: 669, 227 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -2799,13 +2799,20 @@ icon-ban orig: 14, 14 offset: 0, 0 index: -1 -icon-cancel +icon-break rotate: false xy: 500, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 +icon-cancel + rotate: false + xy: 518, 177 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 icon-chat rotate: false xy: 407, 108 @@ -2815,7 +2822,7 @@ icon-chat index: -1 icon-check rotate: false - xy: 518, 177 + xy: 482, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -2850,7 +2857,7 @@ icon-dev-builds index: -1 icon-discord rotate: false - xy: 626, 118 + xy: 145, 28 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -2864,490 +2871,490 @@ icon-distribution index: -1 icon-donate rotate: false - xy: 145, 28 + xy: 147, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-dots rotate: false - xy: 147, 1 + xy: 162, 36 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-editor rotate: false - xy: 162, 36 + xy: 178, 36 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 178, 36 + xy: 194, 36 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-exit rotate: false - xy: 194, 36 + xy: 210, 32 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-file rotate: false - xy: 482, 123 + xy: 500, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-image rotate: false - xy: 500, 141 + xy: 518, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-file-text rotate: false - xy: 210, 32 + xy: 163, 1 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-fill rotate: false - xy: 518, 159 + xy: 500, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-floppy rotate: false - xy: 163, 1 + xy: 167, 20 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-floppy-16 rotate: false - xy: 500, 123 + xy: 518, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-folder rotate: false - xy: 167, 20 + xy: 183, 20 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 183, 20 + xy: 179, 4 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-github rotate: false - xy: 179, 4 + xy: 638, 300 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 638, 300 + xy: 638, 284 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-grid rotate: false - xy: 518, 141 + xy: 518, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-hold rotate: false - xy: 250, 35 + xy: 250, 33 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 262, 35 + xy: 306, 49 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 638, 284 + xy: 654, 307 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 654, 307 + xy: 654, 291 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 274, 35 + xy: 644, 110 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 654, 291 + xy: 670, 307 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 511, 81 + xy: 693, 263 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-line rotate: false - xy: 518, 123 + xy: 540, 195 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-link rotate: false - xy: 670, 307 + xy: 670, 291 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 286, 35 + xy: 195, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-load rotate: false - xy: 670, 291 + xy: 233, 93 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-load-image rotate: false - xy: 540, 195 + xy: 536, 177 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-load-map rotate: false - xy: 536, 177 + xy: 536, 159 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-loading rotate: false - xy: 536, 159 + xy: 536, 141 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-logic rotate: false - xy: 298, 35 + xy: 669, 215 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 310, 35 + xy: 395, 95 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu-large rotate: false - xy: 536, 141 + xy: 536, 123 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-none rotate: false - xy: 195, 2 + xy: 407, 96 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 395, 95 + xy: 419, 96 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pencil rotate: false - xy: 536, 123 + xy: 558, 197 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-pencil-small rotate: false - xy: 233, 93 + xy: 249, 93 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-pick rotate: false - xy: 558, 197 + xy: 783, 449 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-play rotate: false - xy: 407, 96 + xy: 793, 401 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 249, 93 + xy: 265, 93 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 419, 96 + xy: 482, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-power rotate: false - xy: 793, 401 + xy: 494, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-production rotate: false - xy: 482, 111 + xy: 506, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 265, 93 + xy: 281, 93 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-redo rotate: false - xy: 783, 449 + xy: 781, 431 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-refresh rotate: false - xy: 281, 93 + xy: 297, 93 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 297, 93 + xy: 232, 77 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-resize rotate: false - xy: 781, 431 + xy: 781, 413 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-rotate rotate: false - xy: 232, 77 + xy: 232, 61 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 232, 61 + xy: 248, 77 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 248, 77 + xy: 248, 61 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 248, 61 + xy: 264, 77 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 264, 77 + xy: 264, 61 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save-image rotate: false - xy: 781, 413 + xy: 855, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-save-map rotate: false - xy: 855, 443 + xy: 873, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-settings rotate: false - xy: 494, 111 + xy: 518, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-terrain rotate: false - xy: 873, 443 + xy: 891, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-tools rotate: false - xy: 264, 61 + xy: 280, 77 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 506, 111 + xy: 530, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 518, 111 + xy: 542, 111 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 280, 77 + xy: 280, 61 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-trash-16 rotate: false - xy: 891, 443 + xy: 909, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-trello rotate: false - xy: 280, 61 + xy: 296, 77 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 296, 77 + xy: 296, 61 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-undo rotate: false - xy: 909, 443 + xy: 927, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-units rotate: false - xy: 530, 111 + xy: 554, 113 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-weapon rotate: false - xy: 542, 111 + xy: 685, 345 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 296, 61 + xy: 232, 45 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-zoom rotate: false - xy: 927, 443 + xy: 945, 443 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 icon-zoom-small rotate: false - xy: 232, 45 + xy: 248, 45 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3527,56 +3534,56 @@ drone index: -1 scout rotate: false - xy: 648, 192 + xy: 648, 164 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 scout-base rotate: false - xy: 648, 178 + xy: 644, 150 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-mech-base rotate: false - xy: 648, 178 + xy: 644, 150 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 scout-leg rotate: false - xy: 648, 164 + xy: 644, 136 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-mech-leg rotate: false - xy: 648, 164 + xy: 644, 136 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol rotate: false - xy: 650, 263 + xy: 664, 263 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol-booster-1 rotate: false - xy: 664, 263 + xy: 655, 249 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol-booster-2 rotate: false - xy: 655, 249 + xy: 655, 235 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -3611,56 +3618,56 @@ blaster-equip index: -1 clustergun rotate: false - xy: 679, 229 + xy: 441, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 clustergun-equip rotate: false - xy: 667, 219 + xy: 441, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shockgun rotate: false - xy: 651, 64 + xy: 561, 63 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 651, 54 + xy: 641, 60 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 triblaster rotate: false - xy: 859, 433 + xy: 845, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 triblaster-equip rotate: false - xy: 849, 413 + xy: 859, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 vulcan rotate: false - xy: 859, 423 + xy: 859, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 vulcan-equip rotate: false - xy: 869, 433 + xy: 855, 403 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 244ffb485f..370bc2d709 100644 Binary files a/core/assets/sprites/sprites.png and b/core/assets/sprites/sprites.png differ diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index a02210dba2..d75b9ebac4 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -24,7 +24,7 @@ import io.anuke.ucore.util.OS; import java.util.Locale; public class Vars{ - public static final boolean testMobile = false; + public static final boolean testMobile = true; //shorthand for whether or not this is running on android or ios public static boolean mobile; public static boolean ios; diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 3a04c5ce04..59863cd757 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -61,9 +61,11 @@ public class Control extends Module{ Core.atlas = new Atlas("sprites.atlas"); for(Item item : Item.all()){ - item.init(); + item.load(); } + db.load(); + gdxInput = Gdx.input; proxy = new InputProxy(Gdx.input){ @@ -337,8 +339,14 @@ public class Control extends Module{ input.update(); } - if(Timers.get("timerCheckUnlock", 60)){ + //check unlocks every 2 seconds + if(Timers.get("timerCheckUnlock", 120)){ checkUnlockableBlocks(); + + //save if the db changed + if(db.isDirty()){ + db.save(); + } } if(Inputs.keyTap("pause") && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){ diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 67d20131a2..e1c044457a 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -30,7 +30,7 @@ public class Units { Units.getNearby(rect, unit -> { if(value[0]) return; - if(unit.hitbox.getRect(unit.x, unit.y).overlaps(rect)){ + if(!unit.isFlying() && unit.hitbox.getRect(unit.x, unit.y).overlaps(rect)){ value[0] = true; } }); diff --git a/core/src/io/anuke/mindustry/game/ContentDatabase.java b/core/src/io/anuke/mindustry/game/ContentDatabase.java index 567e934719..3e37d688f2 100644 --- a/core/src/io/anuke/mindustry/game/ContentDatabase.java +++ b/core/src/io/anuke/mindustry/game/ContentDatabase.java @@ -9,7 +9,10 @@ import io.anuke.ucore.core.Events; import io.anuke.ucore.core.Settings; public class ContentDatabase { + /**Maps unlockable type names to a set of unlocked content.*/ private ObjectMap> unlocked = new ObjectMap<>(); + /**Whether unlockables have changed since the last save.*/ + private boolean dirty; /**Returns whether or not this piece of content is unlocked yet.*/ public boolean isUnlocked(Content content){ @@ -36,14 +39,24 @@ public class ContentDatabase { //fire unlock event so other classes can use it if(ret){ Events.fire(UnlockEvent.class, content); + dirty = true; } return ret; } - //saving/loading currently disabled for testing. + /**Returns whether unlockables have changed since the last save.*/ + public boolean isDirty(){ + return dirty; + } - private void load(){ + /**Clears all unlocked content.*/ + public void reset(){ + unlocked.clear(); + dirty = true; + } + + public void load(){ ObjectMap> result = Settings.getJson("content-database", ObjectMap.class); for(Entry> entry : result.entries()){ @@ -51,9 +64,12 @@ public class ContentDatabase { set.addAll(entry.value); unlocked.put(entry.key, set); } + + dirty = false; } - private void save(){ + public void save(){ + ObjectMap> write = new ObjectMap<>(); for(Entry> entry : unlocked.entries()){ @@ -61,6 +77,8 @@ public class ContentDatabase { } Settings.putJson("content-database", write); + Settings.save(); + dirty = false; } } diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java index 8a448066c7..570f759926 100644 --- a/core/src/io/anuke/mindustry/input/AndroidInput.java +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -9,6 +9,7 @@ import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.content.blocks.Blocks; import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.Player; @@ -32,7 +33,7 @@ import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.*; -import static io.anuke.mindustry.input.PlaceMode.none; +import static io.anuke.mindustry.input.PlaceMode.*; public class AndroidInput extends InputHandler implements GestureListener{ private static Rectangle r1 = new Rectangle(), r2 = new Rectangle(); @@ -55,7 +56,7 @@ public class AndroidInput extends InputHandler implements GestureListener{ private float lineScale; /**List of currently selected tiles to place.*/ - private Array placement = new Array<>(); + private Array selection = new Array<>(); /**Place requests to be removed.*/ private Array removals = new Array<>(); /**Whether or not the player is currently shifting all placed tiles.*/ @@ -64,6 +65,8 @@ public class AndroidInput extends InputHandler implements GestureListener{ private boolean lineMode; /**Current place mode.*/ private PlaceMode mode = none; + /**Whether no recipe was available when switching to break mode.*/ + private Recipe lastRecipe; public AndroidInput(Player player){ super(player); @@ -75,15 +78,15 @@ public class AndroidInput extends InputHandler implements GestureListener{ return getRequest(tile) != null; } - /**Returns whether this block overlaps any placement requests.*/ + /**Returns whether this block overlaps any selection requests.*/ boolean checkOverlapPlacement(int x, int y, Block block){ r2.setSize(block.size * tilesize); r2.setCenter(x * tilesize + block.offset(), y * tilesize + block.offset()); - for(PlaceRequest req : placement){ + for(PlaceRequest req : selection){ Tile other = req.tile(); - if(other == null) continue; + if(other == null || req.remove) continue; r1.setSize(req.recipe.result.size * tilesize); r1.setCenter(other.worldx() + req.recipe.result.offset(), other.worldy() + req.recipe.result.offset()); @@ -95,44 +98,61 @@ public class AndroidInput extends InputHandler implements GestureListener{ return false; } - /**Returns the placement request that overlaps this tile, or null.*/ + /**Returns the selection request that overlaps this tile, or null.*/ PlaceRequest getRequest(Tile tile){ r2.setSize(tilesize); r2.setCenter(tile.worldx(), tile.worldy()); - for(PlaceRequest req : placement){ + for(PlaceRequest req : selection){ Tile other = req.tile(); if(other == null) continue; - r1.setSize(req.recipe.result.size * tilesize); - r1.setCenter(other.worldx() + req.recipe.result.offset(), other.worldy() + req.recipe.result.offset()); + if(!req.remove){ + r1.setSize(req.recipe.result.size * tilesize); + r1.setCenter(other.worldx() + req.recipe.result.offset(), other.worldy() + req.recipe.result.offset()); - if(r2.overlaps(r1)){ - return req; + if (r2.overlaps(r1)) { + return req; + } + }else { + + r1.setSize(other.block().size * tilesize); + r1.setCenter(other.worldx() + other.block().offset(), other.worldy() + other.block().offset()); + + if (r2.overlaps(r1)) { + return req; + } } } return null; } void removeRequest(PlaceRequest request){ - placement.removeValue(request, true); + selection.removeValue(request, true); removals.add(request); } void drawRequest(PlaceRequest request){ Tile tile = request.tile(); - float offset = request.recipe.result.offset(); - TextureRegion[] regions = request.recipe.result.getBlockIcon(); + if(!request.remove) { + //draw placing request + float offset = request.recipe.result.offset(); + TextureRegion[] regions = request.recipe.result.getBlockIcon(); - Draw.alpha(Mathf.clamp((1f - request.scale) / 0.5f)); - Draw.tint(Color.WHITE, Palette.breakInvalid, request.redness); + Draw.alpha(Mathf.clamp((1f - request.scale) / 0.5f)); + Draw.tint(Color.WHITE, Palette.breakInvalid, request.redness); - for(TextureRegion region : regions){ - Draw.rect(region, tile.worldx() + offset, tile.worldy() + offset, - region.getRegionWidth() * request.scale, region.getRegionHeight() * request.scale, - request.recipe.result.rotate ? request.rotation * 90 : 0); + for (TextureRegion region : regions) { + Draw.rect(region, tile.worldx() + offset, tile.worldy() + offset, + region.getRegionWidth() * request.scale, region.getRegionHeight() * request.scale, + request.recipe.result.rotate ? request.rotation * 90 : 0); + } + }else{ + Draw.color(Palette.remove); + //draw removing request + Lines.poly(tile.drawx(), tile.drawy(), 4, tile.block().size * tilesize/2f * request.scale, 45 + 15); } } @@ -143,29 +163,47 @@ public class AndroidInput extends InputHandler implements GestureListener{ new table(){{ abottom().aleft(); + new table("pane"){{ + margin(5); + defaults().size(60f); + + //Add a break button. + new imagebutton("icon-break", "toggle", 16 * 2f, () -> { + mode = mode == breaking ? recipe == null ? none : placing : breaking; + lastRecipe = recipe; + }).update(l -> l.setChecked(mode == breaking)); + }}.end(); + new table("pane"){{ margin(5); defaults().size(60f); //Add a cancel button, which clears the selection. - new imagebutton("icon-cancel", 16 * 2f, () -> recipe = null); + new imagebutton("icon-cancel", 16 * 2f, () -> selection.clear()) + .cell.disabled(i -> selection.size == 0); //Add an accept button, which places everything. new imagebutton("icon-check", 16 * 2f, () -> { - for (PlaceRequest request : placement) { + for (PlaceRequest request : selection) { Tile tile = request.tile(); + //actually place/break all selected blocks if (tile != null) { - rotation = request.rotation; - recipe = request.recipe; - tryPlaceBlock(tile.x, tile.y); + if(!request.remove) { + rotation = request.rotation; + recipe = request.recipe; + tryPlaceBlock(tile.x, tile.y); + }else{ + tryBreakBlock(tile.x, tile.y); + } } } - removals.addAll(placement); - placement.clear(); + //move all current requests to removal array to they fade out + removals.addAll(selection); + selection.clear(); selecting = false; - }).cell.disabled(i -> placement.size == 0); + }).cell.disabled(i -> selection.size == 0); //Add a rotate button new imagebutton("icon-arrow", 16 * 2f, () -> rotation = Mathf.mod(rotation + 1, 4)) @@ -173,8 +211,8 @@ public class AndroidInput extends InputHandler implements GestureListener{ i.getImage().setRotation(rotation * 90); i.getImage().setOrigin(Align.center); }).cell.disabled(i -> recipe == null || !recipe.result.rotate); - }}.end(); - }}.visible(this::isPlacing).end(); + }}.visible(() -> mode != none).end(); + }}.visible(() -> !state.is(State.menu)).end(); } @Override @@ -196,19 +234,21 @@ public class AndroidInput extends InputHandler implements GestureListener{ } //draw normals - for(PlaceRequest request : placement){ + for(PlaceRequest request : selection){ Tile tile = request.tile(); if(tile == null) continue; - if(validPlace(tile.x, tile.y, request.recipe.result, request.rotation)){ + if ((!request.remove && validPlace(tile.x, tile.y, request.recipe.result, request.rotation)) + || (request.remove && validBreak(tile.x, tile.y))) { request.scale = Mathf.lerpDelta(request.scale, 1f, 0.2f); request.redness = Mathf.lerpDelta(request.redness, 0f, 0.2f); - }else{ + } else { request.scale = Mathf.lerpDelta(request.scale, 0.5f, 0.1f); request.redness = Mathf.lerpDelta(request.redness, 1f, 0.2f); } + drawRequest(request); } @@ -221,30 +261,57 @@ public class AndroidInput extends InputHandler implements GestureListener{ Tile tile = tileAt(control.gdxInput().getX(), control.gdxInput().getY()); if(tile != null){ - NormalizeDrawResult dresult = PlaceUtils.normalizeDrawArea(recipe.result, lineStartX, lineStartY, tile.x, tile.y, true, maxLength, lineScale); - Lines.rect(dresult.x, dresult.y, dresult.x2 - dresult.x, dresult.y2 - dresult.y); + //draw placing + if(mode == placing) { + NormalizeDrawResult dresult = PlaceUtils.normalizeDrawArea(recipe.result, lineStartX, lineStartY, tile.x, tile.y, true, maxLength, lineScale); - NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, true, maxLength); + Lines.rect(dresult.x, dresult.y, dresult.x2 - dresult.x, dresult.y2 - dresult.y); - //go through each cell and draw the block to place if valid - for(int i = 0; i <= result.getLength(); i += recipe.result.size){ - int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); - int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); + NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, true, maxLength); - if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)){ - Draw.color(); + //go through each cell and draw the block to place if valid + for (int i = 0; i <= result.getLength(); i += recipe.result.size) { + int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); + int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); - TextureRegion[] regions = recipe.result.getBlockIcon(); + if (!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)) { + Draw.color(); - for(TextureRegion region : regions){ - Draw.rect(region, x *tilesize + recipe.result.offset(), y * tilesize + recipe.result.offset(), - region.getRegionWidth() * lineScale, region.getRegionHeight() * lineScale, recipe.result.rotate ? result.rotation * 90 : 0); + TextureRegion[] regions = recipe.result.getBlockIcon(); + + for (TextureRegion region : regions) { + Draw.rect(region, x * tilesize + recipe.result.offset(), y * tilesize + recipe.result.offset(), + region.getRegionWidth() * lineScale, region.getRegionHeight() * lineScale, recipe.result.rotate ? result.rotation * 90 : 0); + } + } else { + Draw.color(Palette.breakInvalid); + Lines.square(x * tilesize + recipe.result.offset(), y * tilesize + recipe.result.offset(), recipe.result.size * tilesize / 2f); } - }else{ - Draw.color(Palette.breakInvalid); - Lines.square(x*tilesize + recipe.result.offset(), y*tilesize + recipe.result.offset(), recipe.result.size * tilesize/2f); } + + }else if(mode == breaking){ + //draw breaking + NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, lineStartX, lineStartY, tile.x, tile.y, false, maxLength, 1f); + NormalizeResult dresult = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, false, maxLength); + + Draw.color(Palette.remove); + + Draw.alpha(0.6f); + Draw.alpha(1f); + + for(int x = dresult.x; x <= dresult.x2; x ++){ + for(int y = dresult.y; y <= dresult.y2; y ++){ + Tile other = world.tile(x, y); + if(other == null || !validBreak(other.x, other.y)) continue; + other = other.target(); + + Lines.poly(other.drawx(), other.drawy(), 4, other.block().size * tilesize/2f, 45 + 15); + } + } + + Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y); + } } } @@ -263,10 +330,10 @@ public class AndroidInput extends InputHandler implements GestureListener{ if(cursor == null || ui.hasMouse(screenX, screenY)) return false; //only begin selecting if the tapped block is a request - selecting = hasRequest(cursor) && isPlacing(); + selecting = hasRequest(cursor) && isPlacing() && mode == placing; //call tap events - if(pointer == 0 && !selecting){ + if(pointer == 0 && !selecting && mode == none){ tileTapped(cursor.target()); } @@ -280,22 +347,49 @@ public class AndroidInput extends InputHandler implements GestureListener{ if(lineMode) { Tile tile = tileAt(screenX, screenY); - if(tile == null) return false; + if (tile == null) return false; - //normalize area - NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, true, 100); + if(mode == placing) { - rotation = result.rotation; + //normalize area + NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, true, 100); - //place blocks on line - for(int i = 0; i <= result.getLength(); i += recipe.result.size){ - int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); - int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); + rotation = result.rotation; - if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)){ - PlaceRequest request = new PlaceRequest(x * tilesize, y * tilesize, recipe, result.rotation); - request.scale = 1f; - placement.add(request); + //place blocks on line + for (int i = 0; i <= result.getLength(); i += recipe.result.size) { + int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); + int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); + + if (!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)) { + PlaceRequest request = new PlaceRequest(x * tilesize, y * tilesize, recipe, result.rotation); + request.scale = 1f; + selection.add(request); + } + } + + }else if(mode == breaking){ + //normalize area + NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tile.x, tile.y, rotation, false, maxLength); + + //break everything in area + for(int x = 0; x <= Math.abs(result.x2 - result.x); x ++ ){ + for(int y = 0; y <= Math.abs(result.y2 - result.y); y ++){ + int wx = lineStartX + x * Mathf.sign(tile.x - lineStartX); + int wy = lineStartY + y * Mathf.sign(tile.y - lineStartY); + + Tile tar = world.tile(wx, wy); + + if(tar == null) continue; + + tar = tar.target(); + + if (!hasRequest(world.tile(tar.x, tar.y)) && validBreak(tar.x, tar.y)) { + PlaceRequest request = new PlaceRequest(tar.worldx(), tar.worldy()); + request.scale = 1f; + selection.add(request); + } + } } } @@ -306,7 +400,7 @@ public class AndroidInput extends InputHandler implements GestureListener{ @Override public boolean longPress(float x, float y) { - if(state.is(State.menu) || !isPlacing()) return false; + if(state.is(State.menu) || mode == none) return false; //get tile on cursor Tile cursor = tileAt(x, y); @@ -320,7 +414,11 @@ public class AndroidInput extends InputHandler implements GestureListener{ lineStartY = cursor.y; lineMode = true; - Effects.effect(Fx.tapBlock, cursor.worldx() + recipe.result.offset(), cursor.worldy() + recipe.result.offset(), recipe.result.size); + if(mode == breaking){ + Effects.effect(Fx.tapBlock, cursor.worldx(), cursor.worldy(), 1f); + }else{ + Effects.effect(Fx.tapBlock, cursor.worldx() + recipe.result.offset(), cursor.worldy() + recipe.result.offset(), recipe.result.size); + } return false; } @@ -338,9 +436,12 @@ public class AndroidInput extends InputHandler implements GestureListener{ //remove if request present if(hasRequest(cursor)) { removeRequest(getRequest(cursor)); - }else if(isPlacing() && validPlace(cursor.x, cursor.y, recipe.result, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, recipe.result)){ - //add to placement queue if it's a valid place position - placement.add(new PlaceRequest(cursor.worldx(), cursor.worldy(), recipe, rotation)); + }else if(mode == placing && isPlacing() && validPlace(cursor.x, cursor.y, recipe.result, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, recipe.result)){ + //add to selection queue if it's a valid place position + selection.add(new PlaceRequest(cursor.worldx(), cursor.worldy(), recipe, rotation)); + }else if(mode == breaking && validBreak(cursor.x, cursor.y) && !hasRequest(cursor)){ + //add to selection queue if it's a valid BREAK position + selection.add(new PlaceRequest(cursor.worldx(), cursor.worldy())); } return false; @@ -350,11 +451,22 @@ public class AndroidInput extends InputHandler implements GestureListener{ public void update(){ //reset state when not placing - if(!isPlacing()){ + if(mode == none){ selecting = false; lineMode = false; - removals.addAll(placement); - placement.clear(); + removals.addAll(selection); + selection.clear(); + } + + //if there is no mode and there's a recipe, switch to placing + if(recipe != null && mode == none){ + mode = placing; + } + + //automatically switch to placing after a new recipe is selected + if(lastRecipe != recipe && mode == breaking && recipe != null){ + mode = placing; + lastRecipe = recipe; } if(lineMode){ @@ -413,12 +525,14 @@ public class AndroidInput extends InputHandler implements GestureListener{ float dx = deltaX * Core.camera.zoom / Core.cameraScale, dy = deltaY * Core.camera.zoom / Core.cameraScale; - if(selecting){ - for(PlaceRequest req : placement){ + if(selecting){ //pan all requests + for(PlaceRequest req : selection){ + if(req.remove) continue; //don't shift removal requests req.x += dx; req.y -= dy; } }else{ + //pan player player.x -= dx; player.y += dy; player.targetAngle = Mathf.atan2(dx, -dy) + 180f; @@ -481,6 +595,7 @@ public class AndroidInput extends InputHandler implements GestureListener{ float x, y; Recipe recipe; int rotation; + boolean remove; //animation variables float scale; @@ -491,10 +606,17 @@ public class AndroidInput extends InputHandler implements GestureListener{ this.y = y; this.recipe = recipe; this.rotation = rotation; + this.remove = false; + } + + PlaceRequest(float x, float y) { + this.x = x; + this.y = y; + this.remove = true; } Tile tile(){ - return world.tileWorld(x - recipe.result.offset(), y - recipe.result.offset()); + return world.tileWorld(x - (recipe == null ? 0 : recipe.result.offset()), y - (recipe == null ? 0 : recipe.result.offset())); } } } diff --git a/core/src/io/anuke/mindustry/type/Item.java b/core/src/io/anuke/mindustry/type/Item.java index 45011a8298..49b714a8a2 100644 --- a/core/src/io/anuke/mindustry/type/Item.java +++ b/core/src/io/anuke/mindustry/type/Item.java @@ -42,7 +42,7 @@ public class Item implements Comparable, Content{ items.add(this); } - public void init(){ + public void load(){ this.region = Draw.region("item-" + name); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index c4f5a81e46..f8c2fb2ca0 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -99,7 +99,10 @@ public class BlocksFragment implements Fragment{ visible(() -> !state.is(State.menu) && shown); }}.end().get(); + }}.end(); + + rebuild(); } /**Rebuilds the whole placement menu, attempting to preserve previous state.*/