diff --git a/annotations/src/io/anuke/annotations/Annotations.java b/annotations/src/io/anuke/annotations/Annotations.java index 8fb07932b6..b405c437b9 100644 --- a/annotations/src/io/anuke/annotations/Annotations.java +++ b/annotations/src/io/anuke/annotations/Annotations.java @@ -11,7 +11,7 @@ import java.lang.annotation.Target; */ public class Annotations { - /**Marks a method as invokable remotely from a server on a client.*/ + /**Marks a method as invokable remotely across a server/client connection.*/ @Target(ElementType.METHOD) @Retention(RetentionPolicy.CLASS) public @interface Remote { diff --git a/core/assets-raw/sprites/blocks/units/reconstructor-open.png b/core/assets-raw/sprites/blocks/units/reconstructor-open.png new file mode 100644 index 0000000000..32527045b3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/units/reconstructor-open.png differ diff --git a/core/assets-raw/sprites/blocks/units/reconstructor.png b/core/assets-raw/sprites/blocks/units/reconstructor.png new file mode 100644 index 0000000000..b703c27481 Binary files /dev/null and b/core/assets-raw/sprites/blocks/units/reconstructor.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index f596c4078c..67da0b1818 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -13,28 +13,28 @@ background index: -1 conveyormove rotate: false - xy: 697, 329 + xy: 265, 21 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-arrow rotate: false - xy: 756, 268 + xy: 747, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-bridge rotate: false - xy: 735, 258 + xy: 757, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor-end rotate: false - xy: 745, 258 + xy: 767, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -55,14 +55,14 @@ ripple index: -1 poweredconveyormove rotate: false - xy: 709, 199 + xy: 736, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelconveyormove rotate: false - xy: 777, 411 + xy: 733, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -76,28 +76,28 @@ teleporter-top index: -1 irondrill rotate: false - xy: 757, 308 + xy: 545, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill-rotator rotate: false - xy: 767, 320 + xy: 555, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill-rotator rotate: false - xy: 767, 320 + xy: 555, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 irondrill-top rotate: false - xy: 767, 310 + xy: 565, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -209,84 +209,84 @@ plasmadrill-top index: -1 reinforceddrill rotate: false - xy: 740, 228 + xy: 736, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 reinforceddrill-rotator rotate: false - xy: 750, 228 + xy: 746, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 reinforceddrill-top rotate: false - xy: 730, 218 + xy: 756, 278 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill rotate: false - xy: 787, 411 + xy: 743, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill-rotator rotate: false - xy: 797, 411 + xy: 753, 238 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steeldrill-top rotate: false - xy: 807, 421 + xy: 707, 229 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill rotate: false - xy: 787, 381 + xy: 725, 169 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumdrill-top rotate: false - xy: 797, 381 + xy: 725, 159 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 waterextractor rotate: false - xy: 297, 63 + xy: 315, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-liquid rotate: false - xy: 315, 63 + xy: 333, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-rotator rotate: false - xy: 333, 63 + xy: 351, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 waterextractor-top rotate: false - xy: 351, 63 + xy: 369, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -356,7 +356,7 @@ blackstoneblock2 index: -1 blackstoneblock3 rotate: false - xy: 489, 122 + xy: 981, 440 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -370,28 +370,28 @@ blackstoneedge index: -1 coal2 rotate: false - xy: 629, 100 + xy: 933, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal3 rotate: false - xy: 639, 100 + xy: 943, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt2 rotate: false - xy: 707, 329 + xy: 279, 35 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt3 rotate: false - xy: 697, 309 + xy: 275, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -405,28 +405,28 @@ dirtedge index: -1 grass2 rotate: false - xy: 717, 309 + xy: 285, 5 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass3 rotate: false - xy: 727, 329 + xy: 445, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassblock1 rotate: false - xy: 727, 319 + xy: 441, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grassblock2 rotate: false - xy: 727, 309 + xy: 455, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -440,14 +440,14 @@ grassedge index: -1 ice2 rotate: false - xy: 737, 328 + xy: 465, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice3 rotate: false - xy: 737, 318 + xy: 475, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -461,434 +461,434 @@ iceedge index: -1 icerock2 rotate: false - xy: 747, 328 + xy: 485, 92 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow1 rotate: false - xy: 747, 318 + xy: 495, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow1 rotate: false - xy: 747, 318 + xy: 495, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerockshadow2 rotate: false - xy: 757, 328 + xy: 505, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rockshadow2 rotate: false - xy: 757, 328 + xy: 505, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron2 rotate: false - xy: 737, 308 + xy: 525, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron3 rotate: false - xy: 747, 308 + xy: 535, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavaedge rotate: false - xy: 965, 436 + xy: 991, 433 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 lead2 rotate: false - xy: 713, 249 + xy: 777, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead3 rotate: false - xy: 723, 249 + xy: 777, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor2 rotate: false - xy: 723, 239 + xy: 716, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor3 rotate: false - xy: 733, 238 + xy: 706, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor4 rotate: false - xy: 743, 238 + xy: 716, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor5 rotate: false - xy: 753, 238 + xy: 726, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor6 rotate: false - xy: 710, 229 + xy: 716, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalflooredge rotate: false - xy: 991, 433 + xy: 1005, 433 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 mossblock rotate: false - xy: 710, 219 + xy: 726, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oiledge rotate: false - xy: 1005, 433 + xy: 773, 340 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 rock2 rotate: false - xy: 750, 218 + xy: 716, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand2 rotate: false - xy: 739, 208 + xy: 705, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand3 rotate: false - xy: 749, 208 + xy: 715, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock1 rotate: false - xy: 729, 198 + xy: 725, 259 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock2 rotate: false - xy: 739, 198 + xy: 736, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandblock3 rotate: false - xy: 749, 198 + xy: 746, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sandedge rotate: false - xy: 965, 422 + xy: 253, 41 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 shrubshadow rotate: false - xy: 767, 420 + xy: 713, 249 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow2 rotate: false - xy: 767, 400 + xy: 733, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow3 rotate: false - xy: 767, 390 + xy: 743, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock1 rotate: false - xy: 777, 421 + xy: 753, 248 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock2 rotate: false - xy: 787, 421 + xy: 713, 239 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowblock3 rotate: false - xy: 797, 421 + xy: 723, 239 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snowedge rotate: false - xy: 1005, 405 + xy: 1005, 419 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 spaceedge rotate: false - xy: 437, 67 + xy: 607, 106 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 stone-cliff-edge rotate: false - xy: 797, 401 + xy: 719, 219 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-1 rotate: false - xy: 807, 411 + xy: 715, 209 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-edge-2 rotate: false - xy: 817, 421 + xy: 715, 199 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone-cliff-side rotate: false - xy: 827, 423 + xy: 715, 189 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone2 rotate: false - xy: 777, 401 + xy: 717, 229 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone3 rotate: false - xy: 787, 401 + xy: 709, 219 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock1 rotate: false - xy: 777, 391 + xy: 715, 179 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock2 rotate: false - xy: 787, 391 + xy: 715, 169 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneblock3 rotate: false - xy: 797, 391 + xy: 715, 159 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneedge rotate: false - xy: 251, 27 + xy: 649, 106 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 thorium2 rotate: false - xy: 807, 401 + xy: 725, 209 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium3 rotate: false - xy: 817, 411 + xy: 725, 199 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium2 rotate: false - xy: 827, 413 + xy: 725, 189 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium3 rotate: false - xy: 777, 381 + xy: 725, 179 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge rotate: false - xy: 807, 381 + xy: 923, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-1 rotate: false - xy: 817, 391 + xy: 933, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-edge-2 rotate: false - xy: 827, 393 + xy: 943, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water-cliff-side rotate: false - xy: 777, 361 + xy: 953, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 wateredge rotate: false - xy: 463, 118 + xy: 641, 158 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 block-border rotate: false - xy: 651, 139 + xy: 446, 126 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-elevation rotate: false - xy: 489, 112 + xy: 446, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustiongenerator-top rotate: false - xy: 489, 112 + xy: 446, 116 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-middle rotate: false - xy: 475, 100 + xy: 715, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pump-liquid rotate: false - xy: 475, 100 + xy: 715, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-slope rotate: false - xy: 475, 90 + xy: 725, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 border rotate: false - xy: 475, 80 + xy: 843, 425 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-liquid rotate: false - xy: 669, 109 + xy: 783, 330 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-1 rotate: false - xy: 697, 319 + xy: 703, 245 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 cross-2 rotate: false - xy: 309, 99 + xy: 327, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -909,7 +909,7 @@ cross-4 index: -1 enemyspawn rotate: false - xy: 717, 319 + xy: 285, 25 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -923,49 +923,49 @@ nuclearreactor-shadow index: -1 place-arrow rotate: false - xy: 709, 209 + xy: 726, 279 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 playerspawn rotate: false - xy: 720, 229 + xy: 736, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ripples rotate: false - xy: 687, 203 + xy: 679, 155 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 rubble-1-0 rotate: false - xy: 369, 81 + xy: 387, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-1-1 rotate: false - xy: 387, 81 + xy: 405, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-0 rotate: false - xy: 405, 81 + xy: 423, 81 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rubble-2-1 rotate: false - xy: 423, 81 + xy: 261, 55 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -986,7 +986,7 @@ rubble-3-1 index: -1 shadow-1 rotate: false - xy: 653, 183 + xy: 703, 167 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1028,7 +1028,7 @@ shadow-6 index: -1 shadow-round-1 rotate: false - xy: 653, 171 + xy: 703, 155 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1042,105 +1042,105 @@ shadow-round-2 index: -1 bridgeconduit-arrow rotate: false - xy: 475, 70 + xy: 853, 425 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconduit-bridge rotate: false - xy: 475, 60 + xy: 863, 425 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconduit-end rotate: false - xy: 703, 245 + xy: 873, 425 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconveyor-arrow rotate: false - xy: 700, 219 + xy: 883, 425 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconveyor-bridge rotate: false - xy: 699, 209 + xy: 893, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconveyor-end rotate: false - xy: 699, 199 + xy: 903, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-bottom rotate: false - xy: 659, 99 + xy: 773, 330 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conduit-top rotate: false - xy: 669, 99 + xy: 265, 31 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-arrow rotate: false - xy: 725, 259 + xy: 757, 328 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-bridge rotate: false - xy: 736, 268 + xy: 757, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit-end rotate: false - xy: 746, 268 + xy: 737, 308 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter rotate: false - xy: 733, 248 + xy: 787, 320 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-bottom rotate: false - xy: 743, 248 + xy: 787, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-liquid rotate: false - xy: 753, 248 + xy: 706, 299 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidrouter-top rotate: false - xy: 713, 239 + xy: 706, 289 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1168,14 +1168,14 @@ liquidtank-top index: -1 pulseconduit-bottom rotate: false - xy: 720, 219 + xy: 746, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulseconduit-top rotate: false - xy: 719, 209 + xy: 746, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1280,14 +1280,14 @@ nuclearreactor-lights index: -1 rtgenerator-top rotate: false - xy: 729, 208 + xy: 726, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shieldprojector rotate: false - xy: 261, 55 + xy: 279, 61 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1399,63 +1399,63 @@ biomattercompressor-top index: -1 centrifuge-liquid rotate: false - xy: 207, 62 + xy: 291, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-bottom rotate: false - xy: 399, 99 + xy: 417, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-liquid rotate: false - xy: 417, 99 + xy: 499, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cryofluidmixer-top rotate: false - xy: 499, 121 + xy: 517, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator rotate: false - xy: 517, 121 + xy: 535, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-middle rotate: false - xy: 535, 121 + xy: 553, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 cultivator-top rotate: false - xy: 553, 121 + xy: 571, 121 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 extractor rotate: false - xy: 707, 309 + xy: 285, 15 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lavasmelter rotate: false - xy: 755, 258 + xy: 767, 310 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1490,28 +1490,28 @@ silicon-smelter-top index: -1 pulverizer rotate: false - xy: 719, 199 + xy: 756, 298 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 pulverizer-rotator rotate: false - xy: 730, 228 + xy: 756, 288 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator-liquid rotate: false - xy: 760, 228 + xy: 756, 268 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 siliconextractor rotate: false - xy: 767, 410 + xy: 723, 249 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1525,7 +1525,7 @@ core-open index: -1 block-1 rotate: false - xy: 653, 195 + xy: 435, 103 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1588,35 +1588,35 @@ arc-heat index: -1 crux rotate: false - xy: 327, 99 + xy: 345, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 crux-heat rotate: false - xy: 345, 99 + xy: 363, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 crux-panel-left rotate: false - xy: 363, 99 + xy: 381, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 crux-panel-right rotate: false - xy: 381, 99 + xy: 399, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 duo rotate: false - xy: 707, 319 + xy: 275, 5 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1637,14 +1637,14 @@ spectre index: -1 lancer rotate: false - xy: 663, 203 + xy: 691, 167 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 lancer-heat rotate: false - xy: 675, 203 + xy: 667, 155 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1658,63 +1658,49 @@ meltdown index: -1 scatter rotate: false - xy: 641, 192 + xy: 691, 155 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scatter-heat rotate: false - xy: 641, 180 + xy: 703, 203 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scorch rotate: false - xy: 641, 168 + xy: 703, 191 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 scorch-shoot rotate: false - xy: 641, 156 + xy: 703, 179 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 swarmer rotate: false - xy: 279, 61 + xy: 297, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave rotate: false - xy: 369, 63 + xy: 387, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 wave-liquid rotate: false - xy: 387, 63 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -dronefactory - rotate: false - xy: 589, 136 - size: 16, 16 - orig: 16, 16 - offset: 0, 0 - index: -1 -walkerfactory - rotate: false - xy: 589, 136 + xy: 405, 63 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -1747,37 +1733,44 @@ walkerfactory-top-open orig: 16, 16 offset: 0, 0 index: -1 +reconstructor-open + rotate: false + xy: 369, 81 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 repairpoint-turret rotate: false - xy: 740, 218 + xy: 706, 269 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 compositewall rotate: false - xy: 649, 100 + xy: 953, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door-large-open rotate: false - xy: 571, 121 + xy: 589, 136 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 door-open rotate: false - xy: 717, 329 + xy: 275, 15 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumshieldwall rotate: false - xy: 807, 391 + xy: 715, 149 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1798,7 +1791,7 @@ beam-end index: -1 blank rotate: false - xy: 566, 287 + xy: 586, 118 size: 1, 1 orig: 1, 1 offset: 0, 0 @@ -1826,14 +1819,14 @@ casing index: -1 clear rotate: false - xy: 229, 169 + xy: 566, 287 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 enemyarrow rotate: false - xy: 435, 99 + xy: 649, 232 size: 8, 7 orig: 8, 7 offset: 0, 0 @@ -1889,14 +1882,14 @@ shell index: -1 shell-back rotate: false - xy: 653, 160 + xy: 435, 124 size: 9, 9 orig: 9, 9 offset: 0, 0 index: -1 shot rotate: false - xy: 759, 198 + xy: 755, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1910,7 +1903,7 @@ transfer index: -1 transfer-arrow rotate: false - xy: 817, 401 + xy: 725, 149 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1938,28 +1931,28 @@ block-icon-biomattercompressor index: -1 block-icon-bridgeconduit rotate: false - xy: 499, 111 + xy: 456, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconduit rotate: false - xy: 499, 111 + xy: 456, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-bridgeconveyor rotate: false - xy: 509, 111 + xy: 466, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 bridgeconveyor rotate: false - xy: 509, 111 + xy: 466, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1980,49 +1973,49 @@ centrifuge index: -1 block-icon-coal rotate: false - xy: 519, 111 + xy: 476, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 coal1 rotate: false - xy: 519, 111 + xy: 476, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-combustiongenerator rotate: false - xy: 529, 111 + xy: 486, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 combustiongenerator rotate: false - xy: 529, 111 + xy: 486, 122 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-conduit rotate: false - xy: 539, 111 + xy: 456, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-conveyor rotate: false - xy: 549, 111 + xy: 466, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 conveyor rotate: false - xy: 549, 111 + xy: 466, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2064,42 +2057,42 @@ block-icon-cultivator index: -1 block-icon-deepwater rotate: false - xy: 559, 111 + xy: 476, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deepwater rotate: false - xy: 559, 111 + xy: 476, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-deflector-wall rotate: false - xy: 569, 111 + xy: 486, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 deflector-wall rotate: false - xy: 569, 111 + xy: 486, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 duriumwall rotate: false - xy: 569, 111 + xy: 486, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-duriumwall rotate: false - xy: 569, 111 + xy: 486, 112 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2134,28 +2127,28 @@ block-icon-duriumwall-large index: -1 block-icon-dirt rotate: false - xy: 579, 111 + xy: 446, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 dirt1 rotate: false - xy: 579, 111 + xy: 446, 106 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-door rotate: false - xy: 589, 108 + xy: 496, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 door rotate: false - xy: 589, 108 + xy: 496, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2183,21 +2176,21 @@ block-icon-dronefactory index: -1 block-icon-droppoint rotate: false - xy: 599, 108 + xy: 506, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 droppoint rotate: false - xy: 599, 108 + xy: 506, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-duo rotate: false - xy: 609, 110 + xy: 516, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2225,133 +2218,133 @@ block-icon-fusionreactor index: -1 block-icon-grass rotate: false - xy: 619, 110 + xy: 526, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 grass1 rotate: false - xy: 619, 110 + xy: 526, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ice rotate: false - xy: 629, 110 + xy: 536, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ice1 rotate: false - xy: 629, 110 + xy: 536, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-icerock rotate: false - xy: 639, 110 + xy: 546, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icerock1 rotate: false - xy: 639, 110 + xy: 546, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-incinerator rotate: false - xy: 649, 110 + xy: 556, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 incinerator rotate: false - xy: 649, 110 + xy: 556, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-iron rotate: false - xy: 700, 229 + xy: 566, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 iron1 rotate: false - xy: 700, 229 + xy: 566, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-irondrill rotate: false - xy: 661, 139 + xy: 576, 111 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-ironwall rotate: false - xy: 661, 129 + xy: 456, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 ironwall rotate: false - xy: 661, 129 + xy: 456, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemsource rotate: false - xy: 661, 119 + xy: 466, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemsource rotate: false - xy: 661, 119 + xy: 466, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-itemvoid rotate: false - xy: 659, 109 + xy: 476, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 itemvoid rotate: false - xy: 659, 109 + xy: 476, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-junction rotate: false - xy: 705, 339 + xy: 486, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 junction rotate: false - xy: 705, 339 + xy: 486, 102 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2379,28 +2372,28 @@ largesolarpanel index: -1 block-icon-laserconduit rotate: false - xy: 715, 339 + xy: 496, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconduit rotate: false - xy: 715, 339 + xy: 496, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-laserconveyor rotate: false - xy: 725, 339 + xy: 506, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 laserconveyor rotate: false - xy: 725, 339 + xy: 506, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2414,77 +2407,77 @@ block-icon-laserdrill index: -1 block-icon-lava rotate: false - xy: 843, 425 + xy: 516, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lava rotate: false - xy: 843, 425 + xy: 516, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-lead rotate: false - xy: 853, 425 + xy: 526, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 lead1 rotate: false - xy: 853, 425 + xy: 526, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquidcombustiongenerator rotate: false - xy: 863, 425 + xy: 536, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidcombustiongenerator rotate: false - xy: 863, 425 + xy: 536, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquidjunction rotate: false - xy: 873, 425 + xy: 546, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidjunction rotate: false - xy: 873, 425 + xy: 546, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquidrouter rotate: false - xy: 883, 425 + xy: 556, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-liquidsource rotate: false - xy: 893, 427 + xy: 566, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 liquidsource rotate: false - xy: 893, 427 + xy: 566, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2519,14 +2512,14 @@ core-top index: -1 block-icon-mechanical-pump rotate: false - xy: 903, 427 + xy: 576, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 mechanical-pump rotate: false - xy: 903, 427 + xy: 576, 101 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2540,28 +2533,28 @@ block-icon-meltdown index: -1 block-icon-melter rotate: false - xy: 913, 427 + xy: 586, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 melter rotate: false - xy: 913, 427 + xy: 586, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-metalfloor rotate: false - xy: 923, 427 + xy: 596, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 metalfloor1 rotate: false - xy: 923, 427 + xy: 596, 108 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2603,14 +2596,14 @@ nuclearreactor index: -1 block-icon-oil rotate: false - xy: 933, 427 + xy: 586, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oil rotate: false - xy: 933, 427 + xy: 586, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2624,28 +2617,28 @@ block-icon-oilextractor index: -1 block-icon-oilrefinery rotate: false - xy: 943, 427 + xy: 596, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 oilrefinery rotate: false - xy: 943, 427 + xy: 596, 98 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-overflowgate rotate: false - xy: 953, 423 + xy: 606, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 overflowgate rotate: false - xy: 953, 423 + xy: 606, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2673,42 +2666,42 @@ plasteel-compressor index: -1 block-icon-poweredconveyor rotate: false - xy: 773, 330 + xy: 616, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 poweredconveyor rotate: false - xy: 773, 330 + xy: 616, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powerinfinite rotate: false - xy: 783, 330 + xy: 626, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powerinfinite rotate: false - xy: 783, 330 + xy: 626, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-powernode rotate: false - xy: 279, 35 + xy: 636, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powernode rotate: false - xy: 279, 35 + xy: 636, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2729,63 +2722,91 @@ powernodelarge index: -1 block-icon-powervoid rotate: false - xy: 289, 35 + xy: 646, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 powervoid rotate: false - xy: 289, 35 + xy: 646, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulseconduit rotate: false - xy: 405, 55 + xy: 656, 96 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-pulverizer rotate: false - xy: 415, 55 + xy: 297, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 +block-icon-reconstructor + rotate: false + xy: 327, 117 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +dronefactory + rotate: false + xy: 327, 117 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +reconstructor + rotate: false + xy: 327, 117 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 +walkerfactory + rotate: false + xy: 327, 117 + size: 16, 16 + orig: 16, 16 + offset: 0, 0 + index: -1 block-icon-reinforceddrill rotate: false - xy: 425, 55 + xy: 307, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-repairpoint rotate: false - xy: 295, 45 + xy: 317, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 repairpoint rotate: false - xy: 295, 45 + xy: 317, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-resupplypoint rotate: false - xy: 299, 35 + xy: 327, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 resupplypoint rotate: false - xy: 299, 35 + xy: 327, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -2799,259 +2820,259 @@ block-icon-ripple index: -1 block-icon-rock rotate: false - xy: 305, 45 + xy: 337, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rock1 rotate: false - xy: 305, 45 + xy: 337, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rotary-pump rotate: false - xy: 327, 117 + xy: 345, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 rotary-pump rotate: false - xy: 327, 117 + xy: 345, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-router rotate: false - xy: 309, 35 + xy: 347, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 router rotate: false - xy: 309, 35 + xy: 347, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-rtgenerator rotate: false - xy: 315, 45 + xy: 357, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 rtgenerator rotate: false - xy: 315, 45 + xy: 357, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sand rotate: false - xy: 319, 35 + xy: 367, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sand1 rotate: false - xy: 319, 35 + xy: 367, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scatter rotate: false - xy: 325, 45 + xy: 377, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-scorch rotate: false - xy: 329, 35 + xy: 387, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-separator rotate: false - xy: 335, 45 + xy: 397, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 separator rotate: false - xy: 335, 45 + xy: 397, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shieldgenerator rotate: false - xy: 339, 35 + xy: 407, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shieldgenerator rotate: false - xy: 339, 35 + xy: 407, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-shrub rotate: false - xy: 345, 45 + xy: 295, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shrub rotate: false - xy: 345, 45 + xy: 295, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-silicon-smelter rotate: false - xy: 345, 117 + xy: 363, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 silicon-smelter rotate: false - xy: 345, 117 + xy: 363, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-smelter rotate: false - xy: 349, 35 + xy: 305, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 smelter rotate: false - xy: 349, 35 + xy: 305, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-snow rotate: false - xy: 355, 45 + xy: 315, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 snow1 rotate: false - xy: 355, 45 + xy: 315, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-solarpanel rotate: false - xy: 359, 35 + xy: 325, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 solarpanel rotate: false - xy: 359, 35 + xy: 325, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sortedunloader rotate: false - xy: 365, 45 + xy: 335, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sortedunloader rotate: false - xy: 365, 45 + xy: 335, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-sorter rotate: false - xy: 369, 35 + xy: 345, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 sorter rotate: false - xy: 369, 35 + xy: 345, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-space rotate: false - xy: 375, 45 + xy: 355, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 space rotate: false - xy: 375, 45 + xy: 355, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-splitter rotate: false - xy: 379, 35 + xy: 365, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 splitter rotate: false - xy: 379, 35 + xy: 365, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-steelconveyor rotate: false - xy: 385, 45 + xy: 375, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 steelconveyor rotate: false - xy: 385, 45 + xy: 375, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-steeldrill rotate: false - xy: 395, 53 + xy: 385, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3072,63 +3093,63 @@ steelwall index: -1 block-icon-steelwall-large rotate: false - xy: 363, 117 + xy: 381, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 steelwall-large rotate: false - xy: 363, 117 + xy: 381, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-stone rotate: false - xy: 405, 45 + xy: 405, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stone1 rotate: false - xy: 405, 45 + xy: 405, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-stoneformer rotate: false - xy: 415, 45 + xy: 417, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stoneformer rotate: false - xy: 415, 45 + xy: 417, 53 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-stonewall rotate: false - xy: 425, 45 + xy: 415, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 stonewall rotate: false - xy: 425, 45 + xy: 415, 43 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-swarmer rotate: false - xy: 381, 117 + xy: 399, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -3149,105 +3170,105 @@ teleporter index: -1 block-icon-thermal-pump rotate: false - xy: 399, 117 + xy: 417, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 thermal-pump rotate: false - xy: 399, 117 + xy: 417, 117 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-thermalgenerator rotate: false - xy: 437, 57 + xy: 427, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thermalgenerator rotate: false - xy: 437, 57 + xy: 427, 55 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-thorium rotate: false - xy: 435, 47 + xy: 439, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 thorium1 rotate: false - xy: 435, 47 + xy: 439, 71 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-titanium rotate: false - xy: 447, 54 + xy: 439, 61 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titanium1 rotate: false - xy: 447, 54 + xy: 439, 61 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-titaniumdrill rotate: false - xy: 445, 44 + xy: 437, 51 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-titaniumwall rotate: false - xy: 435, 37 + xy: 427, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 titaniumwall rotate: false - xy: 435, 37 + xy: 427, 45 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-titaniumwall-large rotate: false - xy: 417, 117 + xy: 213, 98 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 titaniumwall-large rotate: false - xy: 417, 117 + xy: 213, 98 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-unloader rotate: false - xy: 445, 34 + xy: 437, 41 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 unloader rotate: false - xy: 445, 34 + xy: 437, 41 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -3268,245 +3289,245 @@ vault index: -1 block-icon-water rotate: false - xy: 477, 110 + xy: 705, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 water rotate: false - xy: 477, 110 + xy: 705, 339 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 block-icon-waterextractor rotate: false - xy: 213, 98 + xy: 231, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-wave rotate: false - xy: 231, 99 + xy: 207, 80 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 block-icon-weaponfactory rotate: false - xy: 207, 80 + xy: 207, 62 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 weaponfactory rotate: false - xy: 207, 80 + xy: 207, 62 size: 16, 16 orig: 16, 16 offset: 0, 0 index: -1 item-armor-piercing-bullet rotate: false - xy: 777, 320 + xy: 575, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-composite-flak rotate: false - xy: 706, 299 + xy: 615, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-explosive-shell rotate: false - xy: 706, 289 + xy: 625, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-frag-shell rotate: false - xy: 716, 299 + xy: 635, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-homing-bullet rotate: false - xy: 706, 279 + xy: 645, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-incendiary-mortar-shell rotate: false - xy: 716, 289 + xy: 655, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead-bullet rotate: false - xy: 726, 289 + xy: 697, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-scythe-missile rotate: false - xy: 746, 298 + xy: 717, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-mortar-shell rotate: false - xy: 746, 278 + xy: 727, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-swarm-missile rotate: false - xy: 756, 278 + xy: 727, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium-shell rotate: false - xy: 726, 269 + xy: 737, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-tracer-bullet rotate: false - xy: 715, 259 + xy: 747, 318 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-biomatter rotate: false - xy: 777, 310 + xy: 585, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-blast-compound rotate: false - xy: 787, 320 + xy: 595, 88 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-coal rotate: false - xy: 787, 310 + xy: 605, 86 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-iron rotate: false - xy: 726, 299 + xy: 447, 51 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-lead rotate: false - xy: 716, 279 + xy: 447, 41 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-phase-matter rotate: false - xy: 726, 279 + xy: 697, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-plasteel rotate: false - xy: 736, 298 + xy: 707, 329 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-sand rotate: false - xy: 736, 288 + xy: 697, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-silicon rotate: false - xy: 746, 288 + xy: 707, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-steel rotate: false - xy: 756, 298 + xy: 717, 319 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-stone rotate: false - xy: 756, 288 + xy: 707, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-surge-alloy rotate: false - xy: 736, 278 + xy: 717, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thermite rotate: false - xy: 706, 269 + xy: 727, 309 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-thorium rotate: false - xy: 716, 269 + xy: 737, 328 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 item-titanium rotate: false - xy: 705, 259 + xy: 747, 328 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 standard-mech rotate: false - xy: 773, 340 + xy: 621, 106 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-ship rotate: false - xy: 253, 41 + xy: 635, 106 size: 12, 12 orig: 12, 12 offset: 0, 0 @@ -3683,7 +3704,7 @@ discord-banner-over index: -1 controller-cursor rotate: false - xy: 291, 99 + xy: 309, 99 size: 16, 16 orig: 16, 16 offset: 0, 0 @@ -3718,7 +3739,7 @@ icon-admin-small index: -1 icon-areaDelete rotate: false - xy: 979, 438 + xy: 267, 43 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -3739,28 +3760,28 @@ icon-arrow-16 index: -1 icon-arrow-down rotate: false - xy: 979, 426 + xy: 251, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-left rotate: false - xy: 979, 414 + xy: 263, 1 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-right rotate: false - xy: 267, 43 + xy: 659, 229 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-arrow-up rotate: false - xy: 251, 1 + xy: 671, 227 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -3795,7 +3816,7 @@ icon-cancel index: -1 icon-chat rotate: false - xy: 263, 1 + xy: 683, 227 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -3809,21 +3830,21 @@ icon-check index: -1 icon-crafting rotate: false - xy: 451, 124 + xy: 695, 227 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-cursor rotate: false - xy: 477, 120 + xy: 651, 217 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-defense rotate: false - xy: 451, 112 + xy: 655, 205 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -3844,7 +3865,7 @@ icon-discord index: -1 icon-distribution rotate: false - xy: 463, 106 + xy: 655, 193 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -3865,14 +3886,14 @@ icon-dots index: -1 icon-editor rotate: false - xy: 405, 65 + xy: 423, 65 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-egg rotate: false - xy: 421, 65 + xy: 279, 45 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3893,7 +3914,7 @@ icon-eraser index: -1 icon-exit rotate: false - xy: 279, 45 + xy: 741, 338 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3914,7 +3935,7 @@ icon-file-image index: -1 icon-file-text rotate: false - xy: 741, 338 + xy: 757, 338 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3928,7 +3949,7 @@ icon-fill index: -1 icon-floppy rotate: false - xy: 757, 338 + xy: 626, 285 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3942,28 +3963,28 @@ icon-floppy-16 index: -1 icon-folder rotate: false - xy: 626, 285 + xy: 624, 269 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-folder-parent rotate: false - xy: 624, 269 + xy: 642, 285 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-github rotate: false - xy: 642, 285 + xy: 640, 269 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-google-play rotate: false - xy: 640, 269 + xy: 658, 289 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -3977,49 +3998,49 @@ icon-grid index: -1 icon-hold rotate: false - xy: 451, 100 + xy: 655, 181 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-holdDelete rotate: false - xy: 463, 94 + xy: 655, 169 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-home rotate: false - xy: 658, 289 + xy: 674, 287 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-host rotate: false - xy: 674, 287 + xy: 639, 242 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-info rotate: false - xy: 451, 88 + xy: 655, 157 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-itch.io rotate: false - xy: 639, 242 + xy: 690, 287 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-items-none rotate: false - xy: 757, 318 + xy: 515, 91 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -4033,21 +4054,21 @@ icon-line index: -1 icon-link rotate: false - xy: 690, 287 + xy: 658, 273 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-liquid rotate: false - xy: 463, 82 + xy: 673, 215 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-load rotate: false - xy: 658, 273 + xy: 674, 271 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4075,14 +4096,14 @@ icon-loading index: -1 icon-logic rotate: false - xy: 451, 76 + xy: 685, 215 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-menu rotate: false - xy: 451, 64 + xy: 697, 215 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -4096,14 +4117,14 @@ icon-menu-large index: -1 icon-none rotate: false - xy: 463, 70 + xy: 667, 203 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-pause rotate: false - xy: 463, 58 + xy: 667, 191 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -4117,7 +4138,7 @@ icon-pencil index: -1 icon-pencil-small rotate: false - xy: 674, 271 + xy: 690, 271 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4131,42 +4152,42 @@ icon-pick index: -1 icon-play rotate: false - xy: 652, 229 + xy: 679, 203 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-play-2 rotate: false - xy: 690, 271 + xy: 657, 257 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-players rotate: false - xy: 651, 217 + xy: 667, 179 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-power rotate: false - xy: 664, 227 + xy: 679, 191 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-production rotate: false - xy: 676, 227 + xy: 691, 203 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-quit rotate: false - xy: 657, 257 + xy: 655, 241 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4180,14 +4201,14 @@ icon-redo index: -1 icon-refresh rotate: false - xy: 655, 241 + xy: 673, 255 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rename rotate: false - xy: 673, 255 + xy: 689, 255 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4201,35 +4222,35 @@ icon-resize index: -1 icon-rotate rotate: false - xy: 689, 255 + xy: 671, 239 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-arrow rotate: false - xy: 671, 239 + xy: 687, 239 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-left rotate: false - xy: 687, 239 + xy: 827, 433 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-rotate-right rotate: false - xy: 827, 433 + xy: 843, 435 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-save rotate: false - xy: 843, 435 + xy: 859, 435 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4250,7 +4271,7 @@ icon-save-map index: -1 icon-settings rotate: false - xy: 688, 227 + xy: 667, 167 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -4264,28 +4285,28 @@ icon-terrain index: -1 icon-tools rotate: false - xy: 859, 435 + xy: 875, 435 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-touch rotate: false - xy: 663, 215 + xy: 679, 179 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-touchDelete rotate: false - xy: 675, 215 + xy: 691, 191 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-trash rotate: false - xy: 875, 435 + xy: 891, 437 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4299,14 +4320,14 @@ icon-trash-16 index: -1 icon-trello rotate: false - xy: 891, 437 + xy: 907, 437 size: 14, 14 orig: 14, 14 offset: 0, 0 index: -1 icon-tutorial rotate: false - xy: 907, 437 + xy: 923, 437 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4320,21 +4341,21 @@ icon-undo index: -1 icon-units rotate: false - xy: 687, 215 + xy: 679, 167 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-weapon rotate: false - xy: 651, 205 + xy: 691, 179 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 icon-wiki rotate: false - xy: 923, 437 + xy: 939, 437 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4348,7 +4369,7 @@ icon-zoom index: -1 icon-zoom-small rotate: false - xy: 939, 437 + xy: 965, 434 size: 14, 14 orig: 14, 14 offset: 0, 0 @@ -4419,14 +4440,14 @@ scroll-knob-vertical-black index: -1 selection rotate: false - xy: 587, 209 + xy: 229, 169 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 slider rotate: false - xy: 649, 232 + xy: 496, 122 size: 1, 8 orig: 1, 8 offset: 0, 0 @@ -4528,63 +4549,63 @@ drone index: -1 scout rotate: false - xy: 991, 419 + xy: 251, 27 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 scout-base rotate: false - xy: 1005, 419 + xy: 251, 13 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-mech-base rotate: false - xy: 1005, 419 + xy: 251, 13 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 scout-leg rotate: false - xy: 991, 405 + xy: 991, 419 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 standard-mech-leg rotate: false - xy: 991, 405 + xy: 991, 419 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol rotate: false - xy: 251, 13 + xy: 641, 200 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol-booster-1 rotate: false - xy: 437, 122 + xy: 641, 186 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol-booster-2 rotate: false - xy: 435, 108 + xy: 641, 172 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 vtol-flame rotate: false - xy: 653, 149 + xy: 435, 113 size: 9, 9 orig: 9, 9 offset: 0, 0 @@ -4598,70 +4619,70 @@ beam-equip index: -1 blaster rotate: false - xy: 441, 89 + xy: 981, 430 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blaster-equip rotate: false - xy: 641, 204 + xy: 663, 217 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 clustergun rotate: false - xy: 609, 100 + xy: 913, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 clustergun-equip rotate: false - xy: 619, 100 + xy: 923, 427 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shockgun rotate: false - xy: 760, 218 + xy: 735, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 shockgun-equip rotate: false - xy: 759, 208 + xy: 745, 258 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 triblaster rotate: false - xy: 827, 403 + xy: 827, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 triblaster-equip rotate: false - xy: 777, 371 + xy: 893, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 vulcan rotate: false - xy: 787, 371 + xy: 903, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 vulcan-equip rotate: false - xy: 797, 371 + xy: 913, 417 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index 800c2ce817..9b40e15e72 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/content/Recipes.java b/core/src/io/anuke/mindustry/content/Recipes.java index daaf9071d2..2694dc6275 100644 --- a/core/src/io/anuke/mindustry/content/Recipes.java +++ b/core/src/io/anuke/mindustry/content/Recipes.java @@ -122,6 +122,7 @@ public class Recipes implements ContentList{ new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.steel, 10)); new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.iron, 50)); + new Recipe(units, UnitBlocks.reconstructor, new ItemStack(Items.iron, 1)); //new Recipe(units, UnitBlocks.vtolFactory, new ItemStack(Items.steel, 10)); diff --git a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java index 940559185f..92c4888e64 100644 --- a/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/UnitBlocks.java @@ -5,13 +5,10 @@ import io.anuke.mindustry.content.UnitTypes; import io.anuke.mindustry.type.ContentList; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.units.DropPoint; -import io.anuke.mindustry.world.blocks.units.RepairPoint; -import io.anuke.mindustry.world.blocks.units.ResupplyPoint; -import io.anuke.mindustry.world.blocks.units.UnitFactory; +import io.anuke.mindustry.world.blocks.units.*; public class UnitBlocks extends BlockList implements ContentList { - public static Block resupplyPoint, repairPoint, droneFactory, dropPoint; + public static Block resupplyPoint, repairPoint, droneFactory, dropPoint, reconstructor; @Override public void load() { @@ -38,5 +35,9 @@ public class UnitBlocks extends BlockList implements ContentList { shadow = "shadow-round-1"; repairSpeed = 0.1f; }}; + + reconstructor = new Reconstructor("reconstructor") {{ + size = 2; + }}; } } diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 17f33332f4..23f280f513 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -597,6 +597,10 @@ public class Player extends Unit implements BuilderTrait, CarryTrait { respawning = true; } + public void setRespawning(boolean respawning){ + this.respawning = respawning; + } + @Override public Queue getPlaceQueue(){ return placeQueue; diff --git a/core/src/io/anuke/mindustry/entities/Units.java b/core/src/io/anuke/mindustry/entities/Units.java index 314ba7abc4..b25bc66f63 100644 --- a/core/src/io/anuke/mindustry/entities/Units.java +++ b/core/src/io/anuke/mindustry/entities/Units.java @@ -67,6 +67,28 @@ public class Units { return value[0]; } + /**Returns whether there are any entities on this tile, with the hitbox expanded.*/ + public static boolean anyEntities(Tile tile, float expansion, Predicate pred){ + Block type = tile.block(); + rect.setSize(type.size * tilesize + expansion, type.size * tilesize + expansion); + rect.setCenter(tile.drawx(), tile.drawy()); + + boolean[] value = new boolean[1]; + + Units.getNearby(rect, unit -> { + if(value[0] || !pred.test(unit)) return; + if(!unit.isFlying()){ + unit.getHitbox(hitrect); + + if(hitrect.overlaps(rect)) { + value[0] = true; + } + } + }); + + return value[0]; + } + /**Returns the neareset ally tile in a range.*/ public static TileEntity findAllyTile(Team team, float x, float y, float range, Predicate pred){ return findTile(x, y, range, tile -> !state.teams.areEnemies(team, tile.getTeam()) && pred.test(tile)); diff --git a/core/src/io/anuke/mindustry/input/InputHandler.java b/core/src/io/anuke/mindustry/input/InputHandler.java index baad65d1eb..4edafec28f 100644 --- a/core/src/io/anuke/mindustry/input/InputHandler.java +++ b/core/src/io/anuke/mindustry/input/InputHandler.java @@ -104,9 +104,9 @@ public abstract class InputHandler extends InputAdapter{ //check if tapped block is configurable if(tile.block().configurable && tile.getTeam() == player.getTeam()){ consumed = true; - if((!frag.config.isShown() //if the config fragment is hidden, show + if(((!frag.config.isShown() && tile.block().shouldShowConfigure(tile, player)) //if the config fragment is hidden, show //alternatively, the current selected block can 'agree' to switch config tiles - || frag.config.getSelectedTile().block().onConfigureTileTapped(frag.config.getSelectedTile(), tile))) { + || (frag.config.isShown() && frag.config.getSelectedTile().block().onConfigureTileTapped(frag.config.getSelectedTile(), tile)))) { frag.config.showConfig(tile); } //otherwise... diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java index a3c339033e..0d61857d6d 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlockConfigFragment.java @@ -4,8 +4,10 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Align; -import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.content.blocks.Blocks; +import io.anuke.mindustry.core.GameState.State; +import io.anuke.mindustry.input.InputHandler; +import io.anuke.mindustry.world.Tile; import io.anuke.ucore.core.Core; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.scene.Element; @@ -13,12 +15,18 @@ import io.anuke.ucore.scene.Group; import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.ui.layout.Table; +import static io.anuke.mindustry.Vars.state; import static io.anuke.mindustry.Vars.tilesize; -public class BlockConfigFragment implements Fragment { +public class BlockConfigFragment implements Fragment { private Table table = new Table(); + private InputHandler input; private Tile configTile; + public BlockConfigFragment(InputHandler input){ + this.input = input; + } + @Override public void build(Group parent) { parent.addChild(table); @@ -44,6 +52,16 @@ public class BlockConfigFragment implements Fragment { Actions.scaleTo(1f, 1f, 0.07f, Interpolation.pow3Out)); table.update(() -> { + if(state.is(State.menu)){ + hideConfig(); + return; + } + + if(configTile != null && configTile.block().shouldHideConfigure(configTile, input.player)){ + hideConfig(); + return; + } + table.setOrigin(Align.center); Vector2 pos = Graphics.screen(tile.drawx(), tile.drawy() - tile.block().size * tilesize/2f - 1); table.setPosition(pos.x, pos.y, Align.top); @@ -59,6 +77,7 @@ public class BlockConfigFragment implements Fragment { } public void hideConfig(){ + configTile = null; table.actions(Actions.scaleTo(0f, 1f, 0.06f, Interpolation.pow3Out), Actions.visible(false)); } } diff --git a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java index 140700b476..5a544e2934 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/OverlayFragment.java @@ -15,7 +15,7 @@ public class OverlayFragment implements Fragment{ this.input = input; inv = new BlockInventoryFragment(input); - config = new BlockConfigFragment(); + config = new BlockConfigFragment(input); } @Override diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 3710f5f82a..6d00113a0c 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -195,6 +195,16 @@ public class Block extends BaseBlock implements UnlockableContent{ return tile != other; } + /**Returns whether this config menu should show when the specified player taps it.*/ + public boolean shouldShowConfigure(Tile tile, Player player){ + return true; + } + + /**Whether this configuration should be hidden now. Called every frame the config is open.*/ + public boolean shouldHideConfigure(Tile tile, Player player){ + return false; + } + public boolean synthetic(){ return update || destructible || solid; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java index 71f3e080ca..e9c0ecd0bf 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/MassDriver.java @@ -37,7 +37,6 @@ public class MassDriver extends Block { protected float range; protected float rotateSpeed = 0.04f; protected float translation = 7f; - //minimum amount of items needed to begin firing protected int minDistribute = 10; protected float knockback = 4f; protected float reloadTime = 80f; @@ -134,6 +133,8 @@ public class MassDriver extends Block { @Override public boolean onConfigureTileTapped(Tile tile, Tile other){ + if(tile == other) return false; + MassDriverEntity entity = tile.entity(); if(entity.link == other.packedPosition()) { diff --git a/core/src/io/anuke/mindustry/world/blocks/units/Reconstructor.java b/core/src/io/anuke/mindustry/world/blocks/units/Reconstructor.java new file mode 100644 index 0000000000..be006510a5 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/units/Reconstructor.java @@ -0,0 +1,304 @@ +package io.anuke.mindustry.world.blocks.units; + +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import io.anuke.annotations.Annotations.Loc; +import io.anuke.annotations.Annotations.Remote; +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.content.fx.Fx; +import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.entities.Units; +import io.anuke.mindustry.gen.CallBlocks; +import io.anuke.mindustry.graphics.Palette; +import io.anuke.mindustry.graphics.Shaders; +import io.anuke.mindustry.net.In; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.core.Effects.Effect; +import io.anuke.ucore.core.Graphics; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.graphics.Draw; +import io.anuke.ucore.graphics.Lines; +import io.anuke.ucore.util.Mathf; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import static io.anuke.mindustry.Vars.*; + +public class Reconstructor extends Block{ + protected float departTime = 20f; + protected float arriveTime = 30f; + protected float powerPerTeleport = 5f; + protected Effect arriveEffect = Fx.spawn; + + public Reconstructor(String name) { + super(name); + update = true; + solidifes = true; + hasPower = true; + configurable = true; + } + + @Override + public boolean isSolidFor(Tile tile) { + ReconstructorEntity entity = tile.entity(); + + return entity.solid; + } + + @Override + public void drawConfigure(Tile tile) { + super.drawConfigure(tile); + + ReconstructorEntity entity = tile.entity(); + + if(validLink(tile, entity.link)){ + Tile target = world.tile(entity.link); + + Draw.color(Palette.place); + Lines.square(target.drawx(), target.drawy(), + target.block().size * tilesize / 2f + 1f); + Draw.reset(); + } + + Draw.color(Palette.accent); + Draw.color(); + } + + @Override + public boolean onConfigureTileTapped(Tile tile, Tile other){ + if(tile == other) return false; + + ReconstructorEntity entity = tile.entity(); + + if(entity.link == other.packedPosition()) { + CallBlocks.unlinkReconstructor(null, tile, other); + return false; + }else if(other.block() instanceof Reconstructor){ + CallBlocks.linkReconstructor(null, tile, other); + return false; + } + + return true; + } + + @Override + public boolean shouldShowConfigure(Tile tile, Player player) { + ReconstructorEntity entity = tile.entity(); + return !checkValidTap(tile, entity, player); + } + + @Override + public boolean shouldHideConfigure(Tile tile, Player player){ + ReconstructorEntity entity = tile.entity(); + return checkValidTap(tile, entity, player); + } + + @Override + public void draw(Tile tile) { + ReconstructorEntity entity = tile.entity(); + + if(entity.solid){ + Draw.rect(name, tile.drawx(), tile.drawy()); + }else{ + Draw.rect(name + "-open", tile.drawx(), tile.drawy()); + } + + if(entity.current != null){ + float progress = entity.departing ? entity.updateTime : (1f - entity.updateTime); + + Player player = entity.current; + + TextureRegion region = Draw.region(player.mech.name); + + Shaders.build.region = region; + Shaders.build.progress = progress; + Shaders.build.color.set(Palette.accent); + Shaders.build.time = -entity.time / 10f; + + Graphics.shader(Shaders.build, false); + Shaders.build.apply(); + Draw.rect(region, tile.drawx(), tile.drawy()); + Graphics.shader(); + + Draw.color(Palette.accent); + + Lines.lineAngleCenter( + tile.drawx() + Mathf.sin(entity.time, 6f, Vars.tilesize / 3f * size), + tile.drawy(), + 90, + size * Vars.tilesize /2f); + + Draw.reset(); + } + } + + @Override + public void update(Tile tile) { + ReconstructorEntity entity = tile.entity(); + + boolean stayOpen = false; + + if(entity.current != null){ + entity.time += Timers.delta(); + + entity.solid = true; + + if(entity.departing){ + //force respawn if there's suddenly nothing to link to + if(!validLink(tile, entity.link)){ + entity.current.setRespawning(false); + return; + } + + ReconstructorEntity other = world.tile(entity.link).entity(); + + entity.updateTime -= Timers.delta()/departTime; + if(entity.updateTime <= 0f){ + //TODO veryify power per teleport! + other.power.amount -= powerPerTeleport; + other.current = entity.current; + other.departing = false; + other.current.set(other.x, other.y); + other.updateTime = 1f; + entity.current = null; + } + }else{ //else, arriving + entity.updateTime -= Timers.delta()/arriveTime; + + if(entity.updateTime <= 0f){ + entity.solid = false; + entity.current.setDead(false); + + Effects.effect(arriveEffect, entity.current); + + entity.current = null; + } + } + + }else{ + + if (validLink(tile, entity.link)) { + Tile other = world.tile(entity.link); + if (other.entity.power.amount >= powerPerTeleport && Units.anyEntities(tile, 4f, unit -> unit.getTeam() == entity.getTeam() && unit instanceof Player) && + entity.power.amount >= powerPerTeleport) { + entity.solid = false; + stayOpen = true; + } + } + + if (!stayOpen && !entity.solid && !Units.anyEntities(tile)) { + entity.solid = true; + } + } + } + + @Override + public void tapped(Tile tile, Player player) { + ReconstructorEntity entity = tile.entity(); + + if(!checkValidTap(tile, entity, player)) return; + + CallBlocks.reconstructPlayer(player, tile); + } + + @Override + public TileEntity getEntity() { + return new ReconstructorEntity(); + } + + protected static boolean checkValidTap(Tile tile, ReconstructorEntity entity, Player player){ + return validLink(tile, entity.link) && + Math.abs(player.x - tile.drawx()) <= tile.block().size * tilesize / 2f && + Math.abs(player.y - tile.drawy()) <= tile.block().size * tilesize / 2f && + entity.current == null && entity.power.amount >= ((Reconstructor)tile.block()).powerPerTeleport; + } + + protected static boolean validLink(Tile tile, int position){ + Tile other = world.tile(position); + return other != tile && other != null && other.block() instanceof Reconstructor; + } + + protected static void unlink(ReconstructorEntity entity){ + Tile other = world.tile(entity.link); + + if(other != null && other.block() instanceof Reconstructor){ + ReconstructorEntity oe = other.entity(); + if(oe.link == entity.tile.packedPosition()){ + oe.link = -1; + } + } + + entity.link = -1; + } + + @Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true) + public static void reconstructPlayer(Player player, Tile tile){ + ReconstructorEntity entity = tile.entity(); + + if(!checkValidTap(tile, entity, player)) return; + + entity.departing = true; + entity.current = player; + entity.solid = false; + entity.set(tile.drawx(), tile.drawy()); + entity.updateTime = 1f; + player.setDead(true); + player.setRespawning(true); + player.setRespawning(); + } + + @Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true) + public static void linkReconstructor(Player player, Tile tile, Tile other){ + //just in case the client has invalid data + if(!(tile.entity instanceof ReconstructorEntity) || !(other.entity instanceof ReconstructorEntity)) return; + + ReconstructorEntity entity = tile.entity(); + ReconstructorEntity oe = other.entity(); + + //called in main thread to prevent issues + threads.run(() -> { + unlink(entity); + unlink(oe); + + entity.link = other.packedPosition(); + oe.link = tile.packedPosition(); + }); + } + + @Remote(targets = Loc.both, called = Loc.server, in = In.blocks, forward = true) + public static void unlinkReconstructor(Player player, Tile tile, Tile other){ + //just in case the client has invalid data + if(!(tile.entity instanceof ReconstructorEntity) || !(other.entity instanceof ReconstructorEntity)) return; + + ReconstructorEntity entity = tile.entity(); + ReconstructorEntity oe = other.entity(); + + //called in main thread to prevent issues + threads.run(() -> { + unlink(entity); + unlink(oe); + }); + } + + public class ReconstructorEntity extends TileEntity{ + public Player current; + public float updateTime; + public float time; + public int link; + public boolean solid = true, departing; + + @Override + public void write(DataOutputStream stream) throws IOException { + stream.writeInt(link); + } + + @Override + public void read(DataInputStream stream) throws IOException { + link = stream.readInt(); + } + } +}