diff --git a/core/assets-raw/sprites/blocks/oil.png b/core/assets-raw/sprites/blocks/oil.png new file mode 100644 index 0000000000..fc632673d3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/oil.png differ diff --git a/core/assets-raw/sprites/blocks/oiledge.png b/core/assets-raw/sprites/blocks/oiledge.png new file mode 100644 index 0000000000..cd971062a4 Binary files /dev/null and b/core/assets-raw/sprites/blocks/oiledge.png differ diff --git a/core/assets-raw/sprites/ui/icon-power.png b/core/assets-raw/sprites/ui/icon-power.png new file mode 100644 index 0000000000..bc8282d39a Binary files /dev/null and b/core/assets-raw/sprites/ui/icon-power.png differ diff --git a/core/assets/maps/delta.png b/core/assets/maps/delta.png index e1522308a8..8cde6f4a3a 100644 Binary files a/core/assets/maps/delta.png and b/core/assets/maps/delta.png differ diff --git a/core/assets/sprites/sprites.atlas b/core/assets/sprites/sprites.atlas index 4a3d88586e..54cf98a71d 100644 --- a/core/assets/sprites/sprites.atlas +++ b/core/assets/sprites/sprites.atlas @@ -41,133 +41,133 @@ blocks/coal2 index: -1 blocks/coal3 rotate: false - xy: 397, 324 + xy: 393, 372 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coaldrill rotate: false - xy: 397, 314 + xy: 471, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalgenerator rotate: false - xy: 397, 304 + xy: 481, 443 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/coalpurifier rotate: false - xy: 397, 294 + xy: 469, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/compositewall rotate: false - xy: 397, 284 + xy: 469, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduit rotate: false - xy: 457, 451 + xy: 479, 433 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitbottom rotate: false - xy: 457, 441 + xy: 469, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduitliquid rotate: false - xy: 457, 431 + xy: 479, 423 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conduittop rotate: false - xy: 457, 421 + xy: 479, 413 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyor rotate: false - xy: 457, 411 + xy: 389, 276 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/conveyormove rotate: false - xy: 117, 4 + xy: 389, 266 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/core rotate: false - xy: 230, 62 + xy: 389, 256 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/cross rotate: false - xy: 230, 52 + xy: 389, 246 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/crucible rotate: false - xy: 230, 42 + xy: 389, 236 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/deepwater rotate: false - xy: 228, 32 + xy: 117, 4 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt1 rotate: false - xy: 409, 402 + xy: 230, 62 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt2 rotate: false - xy: 405, 392 + xy: 230, 52 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirt3 rotate: false - xy: 405, 382 + xy: 230, 42 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/dirtblock rotate: false - xy: 405, 372 + xy: 228, 32 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -181,63 +181,63 @@ blocks/dirtedge index: -1 blocks/doubleturret rotate: false - xy: 105, 2 + xy: 471, 453 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/drill rotate: false - xy: 371, 224 + xy: 409, 402 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/duriumwall rotate: false - xy: 371, 214 + xy: 405, 392 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/flameturret rotate: false - xy: 204, 34 + xy: 457, 435 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/grass1 rotate: false - xy: 381, 226 + xy: 403, 372 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass2 rotate: false - xy: 381, 216 + xy: 397, 362 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grass3 rotate: false - xy: 381, 206 + xy: 397, 352 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock rotate: false - xy: 471, 455 + xy: 397, 342 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/grassblock2 rotate: false - xy: 481, 455 + xy: 397, 332 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -251,56 +251,56 @@ blocks/grassedge index: -1 blocks/iron1 rotate: false - xy: 487, 445 + xy: 407, 342 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron2 rotate: false - xy: 467, 415 + xy: 407, 332 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/iron3 rotate: false - xy: 477, 425 + xy: 407, 322 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/irondrill rotate: false - xy: 487, 435 + xy: 407, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/ironwall rotate: false - xy: 477, 415 + xy: 407, 302 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/junction rotate: false - xy: 487, 425 + xy: 407, 292 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/laserturret rotate: false - xy: 140, 26 + xy: 385, 310 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/lava rotate: false - xy: 487, 415 + xy: 413, 372 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -314,322 +314,336 @@ blocks/lavaedge index: -1 blocks/liquidrouter rotate: false - xy: 501, 453 + xy: 417, 362 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/machineturret rotate: false - xy: 152, 26 + xy: 385, 298 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/megarepairturret rotate: false - xy: 164, 26 + xy: 385, 286 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/mortarturret rotate: false - xy: 176, 26 + xy: 128, 26 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 blocks/mossblock rotate: false - xy: 497, 433 + xy: 417, 342 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 blocks/mossstone rotate: false - xy: 497, 433 + xy: 417, 342 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/omnidrill +blocks/oil rotate: false - xy: 497, 413 + xy: 417, 322 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/plasmaturret - rotate: false - xy: 188, 26 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/pump - rotate: false - xy: 132, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/repairturret - rotate: false - xy: 393, 394 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/rock - rotate: false - xy: 152, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/rock2 - rotate: false - xy: 162, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/rock2shadow - rotate: false - xy: 172, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/rockshadow - rotate: false - xy: 182, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/router - rotate: false - xy: 127, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/shadow - rotate: false - xy: 393, 382 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/shieldgenerator - rotate: false - xy: 137, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/shotgunturret - rotate: false - xy: 393, 370 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/shrub - rotate: false - xy: 147, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/shrubshadow - rotate: false - xy: 157, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/smelter - rotate: false - xy: 167, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/sniperturret - rotate: false - xy: 397, 358 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/steelconveyor - rotate: false - xy: 177, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/steelconveyormove - rotate: false - xy: 192, 16 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/steelwall - rotate: false - xy: 187, 6 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/stone +blocks/oiledge rotate: false xy: 375, 236 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 -blocks/stone1 +blocks/omnidrill rotate: false - xy: 197, 6 + xy: 417, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stone2 +blocks/plasmaturret rotate: false - xy: 415, 392 + xy: 140, 26 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/pump + rotate: false + xy: 417, 292 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stone3 +blocks/repairturret rotate: false - xy: 415, 382 + xy: 152, 26 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/rock + rotate: false + xy: 371, 214 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stoneblock +blocks/rock2 rotate: false - xy: 415, 372 + xy: 381, 226 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stoneblock2 +blocks/rock2shadow rotate: false - xy: 409, 362 + xy: 381, 216 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stoneblock3 +blocks/rockshadow rotate: false - xy: 409, 352 + xy: 371, 204 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stonedrill +blocks/router rotate: false - xy: 409, 342 + xy: 381, 206 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/stoneedge +blocks/shadow + rotate: false + xy: 164, 26 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/shieldgenerator + rotate: false + xy: 391, 226 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/shotgunturret + rotate: false + xy: 176, 26 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/shrub + rotate: false + xy: 391, 216 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/shrubshadow + rotate: false + xy: 391, 206 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/smelter + rotate: false + xy: 491, 443 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/sniperturret + rotate: false + xy: 188, 26 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/steelconveyor + rotate: false + xy: 489, 433 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/steelconveyormove + rotate: false + xy: 489, 423 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/steelwall + rotate: false + xy: 489, 413 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/stone rotate: false xy: 357, 220 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 -blocks/stonewall +blocks/stone1 rotate: false - xy: 409, 332 + xy: 495, 453 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titanium1 +blocks/stone2 rotate: false - xy: 407, 322 + xy: 122, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titanium2 +blocks/stone3 rotate: false - xy: 407, 312 + xy: 132, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titanium3 +blocks/stoneblock rotate: false - xy: 407, 302 + xy: 142, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titaniumdrill +blocks/stoneblock2 rotate: false - xy: 407, 292 + xy: 152, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titaniumpurifier +blocks/stoneblock3 rotate: false - xy: 407, 282 + xy: 162, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titaniumshieldwall +blocks/stonedrill rotate: false - xy: 419, 362 + xy: 172, 16 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 -blocks/titaniumwall - rotate: false - xy: 419, 352 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/turret - rotate: false - xy: 397, 346 - size: 10, 10 - orig: 10, 10 - offset: 0, 0 - index: -1 -blocks/water - rotate: false - xy: 419, 332 - size: 8, 8 - orig: 8, 8 - offset: 0, 0 - index: -1 -blocks/wateredge +blocks/stoneedge rotate: false xy: 357, 206 size: 12, 12 orig: 12, 12 offset: 0, 0 index: -1 +blocks/stonewall + rotate: false + xy: 182, 16 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titanium1 + rotate: false + xy: 127, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titanium2 + rotate: false + xy: 137, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titanium3 + rotate: false + xy: 147, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titaniumdrill + rotate: false + xy: 157, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titaniumpurifier + rotate: false + xy: 167, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titaniumshieldwall + rotate: false + xy: 177, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/titaniumwall + rotate: false + xy: 192, 16 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/turret + rotate: false + xy: 393, 394 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +blocks/water + rotate: false + xy: 197, 6 + size: 8, 8 + orig: 8, 8 + offset: 0, 0 + index: -1 +blocks/wateredge + rotate: false + xy: 457, 447 + size: 12, 12 + orig: 12, 12 + offset: 0, 0 + index: -1 blocks/waveturret rotate: false - xy: 397, 334 + xy: 393, 382 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -811,42 +825,42 @@ enemies/tankenemy-t3 index: -1 icon-coal rotate: false - xy: 491, 455 + xy: 397, 322 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-dirium rotate: false - xy: 467, 445 + xy: 397, 312 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-iron rotate: false - xy: 467, 435 + xy: 397, 302 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-steel rotate: false - xy: 477, 445 + xy: 397, 292 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-stone rotate: false - xy: 467, 425 + xy: 407, 362 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 icon-titanium rotate: false - xy: 477, 435 + xy: 407, 352 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -867,7 +881,7 @@ laserend index: -1 player rotate: false - xy: 122, 16 + xy: 417, 302 size: 8, 8 orig: 8, 8 offset: 0, 0 @@ -1000,49 +1014,56 @@ ui/icon-close-over index: -1 ui/icon-cursor rotate: false - xy: 216, 34 + xy: 483, 453 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-defense rotate: false - xy: 385, 358 + xy: 457, 423 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-distribution rotate: false - xy: 385, 346 + xy: 457, 411 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-menu rotate: false - xy: 385, 334 + xy: 105, 2 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-pause rotate: false - xy: 385, 322 + xy: 204, 34 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-play rotate: false - xy: 385, 310 + xy: 216, 34 + size: 10, 10 + orig: 10, 10 + offset: 0, 0 + index: -1 +ui/icon-power + rotate: false + xy: 385, 358 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-production rotate: false - xy: 385, 298 + xy: 385, 346 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1063,14 +1084,14 @@ ui/icon-rotate-arrow index: -1 ui/icon-settings rotate: false - xy: 385, 286 + xy: 385, 334 size: 10, 10 orig: 10, 10 offset: 0, 0 index: -1 ui/icon-touch rotate: false - xy: 128, 26 + xy: 385, 322 size: 10, 10 orig: 10, 10 offset: 0, 0 @@ -1133,21 +1154,21 @@ ui/scroll-knob-vertical index: -1 ui/selection rotate: false - xy: 422, 409 + xy: 117, 1 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ui/separator rotate: false - xy: 117, 1 + xy: 120, 1 size: 1, 1 orig: 1, 1 offset: 0, 0 index: -1 ui/slider rotate: false - xy: 419, 402 + xy: 228, 154 size: 1, 8 orig: 1, 8 offset: 0, 0 @@ -1220,35 +1241,35 @@ weapons/blaster index: -1 weapons/flamer rotate: false - xy: 371, 204 + xy: 405, 382 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/mortar rotate: false - xy: 497, 443 + xy: 417, 352 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/multigun rotate: false - xy: 497, 423 + xy: 417, 332 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/railgun rotate: false - xy: 142, 16 + xy: 371, 224 size: 8, 8 orig: 8, 8 offset: 0, 0 index: -1 weapons/triblaster rotate: false - xy: 419, 342 + xy: 187, 6 size: 8, 8 orig: 8, 8 offset: 0, 0 diff --git a/core/assets/sprites/sprites.png b/core/assets/sprites/sprites.png index dd44cce56d..5a6f224dd3 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/EffectCreator.java b/core/src/io/anuke/mindustry/EffectCreator.java index cc7974382e..e8c578863f 100644 --- a/core/src/io/anuke/mindustry/EffectCreator.java +++ b/core/src/io/anuke/mindustry/EffectCreator.java @@ -50,6 +50,14 @@ public class EffectCreator{ Draw.reset(); }); + Effects.create("oilbubble", 64f, e -> { + Draw.color(Color.DARK_GRAY); + float scl = 0.25f; + Draw.thick(1f - Mathf.clamp(e.ifract() - (1f-scl)) * (1f/scl)); + Draw.circle(e.x, e.y, e.ifract()*3f); + Draw.reset(); + }); + Effects.create("shellexplosion", 15, e -> { Draw.thickness(1.3f - e.ifract()); Draw.color(Hue.mix(Color.WHITE, Color.ORANGE, e.ifract())); diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index c4f0c2932d..e068013c67 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -7,9 +7,7 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.io.Formatter; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; -import io.anuke.mindustry.world.blocks.WeaponBlocks; +import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Timers; import io.anuke.ucore.modules.ModuleCore; @@ -29,15 +27,17 @@ public class Mindustry extends ModuleCore { } }; + //always initialize blocks in this order, otherwise there are ID errors + public Class[] blockClasses = new Class[]{ + Blocks.class, + DefenseBlocks.class, + DistributionBlocks.class, + ProductionBlocks.class, + WeaponBlocks.class + }; @Override public void init(){ - //always initialize blocks in this order, otherwise there are ID errors - Blocks.dirt.getClass(); - ProductionBlocks.coaldrill.getClass(); - WeaponBlocks.turret.getClass(); - - module(Vars.control = new Control()); module(Vars.renderer = new Renderer()); module(Vars.ui = new UI()); diff --git a/core/src/io/anuke/mindustry/Tutorial.java b/core/src/io/anuke/mindustry/Tutorial.java index 7a2710f2fa..321c295976 100644 --- a/core/src/io/anuke/mindustry/Tutorial.java +++ b/core/src/io/anuke/mindustry/Tutorial.java @@ -6,9 +6,7 @@ import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Weapon; import io.anuke.mindustry.world.*; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; -import io.anuke.mindustry.world.blocks.WeaponBlocks; +import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.builders.button; import io.anuke.ucore.scene.builders.label; @@ -198,7 +196,7 @@ public class Tutorial{ blockRotation = 1; blockPlaceX = 0; blockPlaceY = -1; - targetBlock = ProductionBlocks.conveyor; + targetBlock = DistributionBlocks.conveyor; text = "Use [orange][[R][] to rotate the conveyor to face [orange]forwards[], then place it in the [yellow]marked location[] using the [orange][[left mouse button][]."; } }, @@ -211,7 +209,7 @@ public class Tutorial{ blockRotation = 1; blockPlaceX = 0; blockPlaceY = -1; - targetBlock = ProductionBlocks.conveyor; + targetBlock = DistributionBlocks.conveyor; text = "Use the [orange][[rotate button][] to rotate the conveyor to face [orange]forwards[], drag it into position with one finger, then place it in the [yellow]marked location[] using the [orange][[checkmark][]."; } }, @@ -286,9 +284,9 @@ public class Tutorial{ void onSwitch(){ for(int flip : new int[]{1, -1}){ - World.tile(World.core.x + flip, World.core.y - 1).setBlock(ProductionBlocks.conveyor, 2 * flip); - World.tile(World.core.x + flip*2, World.core.y - 1).setBlock(ProductionBlocks.conveyor, 2 * flip); - World.tile(World.core.x + flip*2, World.core.y - 2).setBlock(ProductionBlocks.conveyor, 1); + World.tile(World.core.x + flip, World.core.y - 1).setBlock(DistributionBlocks.conveyor, 2 * flip); + World.tile(World.core.x + flip*2, World.core.y - 1).setBlock(DistributionBlocks.conveyor, 2 * flip); + World.tile(World.core.x + flip*2, World.core.y - 2).setBlock(DistributionBlocks.conveyor, 1); World.tile(World.core.x + flip*2, World.core.y - 3).setFloor(Blocks.stone); World.tile(World.core.x + flip*2, World.core.y - 3).setBlock(ProductionBlocks.stonedrill); @@ -452,7 +450,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = ProductionBlocks.conduit; + targetBlock = DistributionBlocks.conduit; blockPlaceX = 5; blockPlaceY = -2; blockRotation = 2; @@ -470,7 +468,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = ProductionBlocks.conduit; + targetBlock = DistributionBlocks.conduit; blockPlaceX = 4; blockPlaceY = -2; blockRotation = 1; @@ -487,7 +485,7 @@ public class Tutorial{ canForward = false; showBlock = true; canPlace = true; - targetBlock = ProductionBlocks.conduit; + targetBlock = DistributionBlocks.conduit; blockPlaceX = 4; blockPlaceY = -1; blockRotation = 1; @@ -530,14 +528,14 @@ public class Tutorial{ } for(int i = 0; i < 3; i ++){ - World.tile(World.core.x + 4 - 1 - i, World.core.y).setBlock(ProductionBlocks.conveyor, 2); + World.tile(World.core.x + 4 - 1 - i, World.core.y).setBlock(DistributionBlocks.conveyor, 2); } - World.tile(World.core.x + 2, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 0); - World.tile(World.core.x + 3, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 0); - World.tile(World.core.x + 4, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 3); - World.tile(World.core.x + 5, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 2); - World.tile(World.core.x + 6, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 2); + World.tile(World.core.x + 2, World.core.y + 1).setBlock(DistributionBlocks.conveyor, 0); + World.tile(World.core.x + 3, World.core.y + 1).setBlock(DistributionBlocks.conveyor, 0); + World.tile(World.core.x + 4, World.core.y + 1).setBlock(DistributionBlocks.conveyor, 3); + World.tile(World.core.x + 5, World.core.y + 1).setBlock(DistributionBlocks.conveyor, 2); + World.tile(World.core.x + 6, World.core.y + 1).setBlock(DistributionBlocks.conveyor, 2); } }, diff --git a/core/src/io/anuke/mindustry/ai/Pathfind.java b/core/src/io/anuke/mindustry/ai/Pathfind.java index 27240ebe7d..9ce31fe13f 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfind.java +++ b/core/src/io/anuke/mindustry/ai/Pathfind.java @@ -53,7 +53,8 @@ public class Pathfind{ } static public void updatePath(){ - if(paths.size == 0){ + if(paths.size == 0 || paths.size != World.spawnpoints.size){ + paths.clear(); pathSequences = new Tile[World.spawnpoints.size][0]; for(int i = 0; i < World.spawnpoints.size; i ++){ SmoothGraphPath path = new SmoothGraphPath(); diff --git a/core/src/io/anuke/mindustry/resource/Liquid.java b/core/src/io/anuke/mindustry/resource/Liquid.java index 6a42de36db..faf4a1ac65 100644 --- a/core/src/io/anuke/mindustry/resource/Liquid.java +++ b/core/src/io/anuke/mindustry/resource/Liquid.java @@ -5,7 +5,8 @@ import com.badlogic.gdx.graphics.Color; public enum Liquid{ water(Color.ROYAL), plasma(Color.CORAL), - lava(Color.valueOf("ed5334")); + lava(Color.valueOf("ed5334")), + oil(Color.valueOf("292929")); public final Color color; diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index cfc43ca4d5..e42538d32c 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -5,22 +5,20 @@ import static io.anuke.mindustry.resource.Section.*; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.world.Block; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; -import io.anuke.mindustry.world.blocks.WeaponBlocks; +import io.anuke.mindustry.world.blocks.*; public enum Recipe{ - stonewall(distribution, Blocks.stonewall, stack(Item.stone, 2)), - ironwall(distribution, Blocks.ironwall, stack(Item.iron, 2)), - steelwall(distribution, Blocks.steelwall, stack(Item.steel, 2)), - titaniumwall(distribution, Blocks.titaniumwall, stack(Item.titanium, 2)), - duriumwall(distribution, Blocks.diriumwall, stack(Item.dirium, 2)), - compositewall(distribution, Blocks.compositewall, stack(Item.dirium, 2), stack(Item.titanium, 2), stack(Item.steel, 2), stack(Item.iron, 2)), - titaniumshieldwall(distribution, Blocks.titaniumshieldwall, stack(Item.titanium, 2)), - conveyor(distribution, ProductionBlocks.conveyor, stack(Item.stone, 1)), - fastconveyor(distribution, ProductionBlocks.steelconveyor, stack(Item.steel, 1)), - router(distribution, ProductionBlocks.router, stack(Item.stone, 2)), - junction(distribution, ProductionBlocks.junction, stack(Item.iron, 2)), + stonewall(distribution, DefenseBlocks.stonewall, stack(Item.stone, 2)), + ironwall(distribution, DefenseBlocks.ironwall, stack(Item.iron, 2)), + steelwall(distribution, DefenseBlocks.steelwall, stack(Item.steel, 2)), + titaniumwall(distribution, DefenseBlocks.titaniumwall, stack(Item.titanium, 2)), + duriumwall(distribution, DefenseBlocks.diriumwall, stack(Item.dirium, 2)), + compositewall(distribution, DefenseBlocks.compositewall, stack(Item.dirium, 2), stack(Item.titanium, 2), stack(Item.steel, 2), stack(Item.iron, 2)), + titaniumshieldwall(distribution, DefenseBlocks.titaniumshieldwall, stack(Item.titanium, 2)), + conveyor(distribution, DistributionBlocks.conveyor, stack(Item.stone, 1)), + fastconveyor(distribution, DistributionBlocks.steelconveyor, stack(Item.steel, 1)), + router(distribution, DistributionBlocks.router, stack(Item.stone, 2)), + junction(distribution, DistributionBlocks.junction, stack(Item.iron, 2)), turret(defense, WeaponBlocks.turret, stack(Item.stone, 4)), dturret(defense, WeaponBlocks.doubleturret, stack(Item.stone, 7)), @@ -33,10 +31,10 @@ public enum Recipe{ teslaturret(defense, WeaponBlocks.teslaturret, stack(Item.steel, 10), stack(Item.titanium, 15), stack(Item.dirium, 15)), plasmaturret(defense, WeaponBlocks.plasmaturret, stack(Item.steel, 10), stack(Item.titanium, 10), stack(Item.dirium, 15)), - healturret(defense, WeaponBlocks.repairturret, stack(Item.iron, 30)), - megahealturret(defense, WeaponBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), + healturret(defense, DefenseBlocks.repairturret, stack(Item.iron, 30)), + megahealturret(defense, DefenseBlocks.megarepairturret, stack(Item.iron, 20), stack(Item.steel, 30)), - drill(production, ProductionBlocks.stonedrill, stack(Item.stone, 16)), + stonedrill(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), irondrill(production, ProductionBlocks.irondrill, stack(Item.stone, 25)), coaldrill(production, ProductionBlocks.coaldrill, stack(Item.stone, 25), stack(Item.iron, 40)), titaniumdrill(production, ProductionBlocks.titaniumdrill, stack(Item.iron, 40), stack(Item.steel, 40)), @@ -45,11 +43,12 @@ public enum Recipe{ coalpurifier(production, ProductionBlocks.coalpurifier, stack(Item.steel, 10), stack(Item.iron, 10)), titaniumpurifier(production, ProductionBlocks.titaniumpurifier, stack(Item.steel, 30), stack(Item.iron, 30)), omnidrill(production, ProductionBlocks.omnidrill, stack(Item.titanium, 10), stack(Item.dirium, 10)), - coalgenerator(production, ProductionBlocks.coalgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), - shieldgenerator(production, WeaponBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), - conduit(distribution, ProductionBlocks.conduit, stack(Item.steel, 1)), - liquidrouter(distribution, ProductionBlocks.liquidrouter, stack(Item.steel, 2)), + coalgenerator(power, ProductionBlocks.coalgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), + shieldgenerator(power, DefenseBlocks.shieldgenerator, stack(Item.titanium, 10), stack(Item.dirium, 10)), + + conduit(distribution, DistributionBlocks.conduit, stack(Item.steel, 1)), + liquidrouter(distribution, DistributionBlocks.liquidrouter, stack(Item.steel, 2)), pump(production, ProductionBlocks.pump, stack(Item.steel, 10)); public Block result; diff --git a/core/src/io/anuke/mindustry/resource/Section.java b/core/src/io/anuke/mindustry/resource/Section.java index b6c673bc36..06da625c1f 100644 --- a/core/src/io/anuke/mindustry/resource/Section.java +++ b/core/src/io/anuke/mindustry/resource/Section.java @@ -1,5 +1,5 @@ package io.anuke.mindustry.resource; public enum Section{ - defense, production, distribution; + defense, production, distribution, power; } diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index fcd29d407f..37d810dd23 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -23,7 +23,8 @@ public class Generator{ Hue.rgb(110, 80, 30), Blocks.dirt, Hue.rgb(160, 120, 70), Blocks.dirtblock, Hue.rgb(100, 100, 100), Blocks.stoneblock, - Color.valueOf("ed5334"), Blocks.lava + Color.valueOf("ed5334"), Blocks.lava, + Color.valueOf("292929"), Blocks.oil ); /**Returns world size.*/ diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index 649abfc252..fbc6d4188d 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -11,9 +11,7 @@ import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Vars; import io.anuke.mindustry.ai.Pathfind; import io.anuke.mindustry.entities.TileEntity; -import io.anuke.mindustry.world.blocks.Blocks; -import io.anuke.mindustry.world.blocks.ProductionBlocks; -import io.anuke.mindustry.world.blocks.WeaponBlocks; +import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Graphics; import io.anuke.ucore.entities.Entities; import io.anuke.ucore.entities.Entity; @@ -166,28 +164,36 @@ public class World{ static void setDefaultBlocks(){ int x = core.x, y = core.y; - set(x, y-1, ProductionBlocks.conveyor, 1); - set(x, y-2, ProductionBlocks.conveyor, 1); - set(x, y-3, ProductionBlocks.conveyor, 1); - set(x, y-4, ProductionBlocks.stonedrill, 0); - //just in case - tiles[x][y-4].setFloor(Blocks.stone); + set(x, y-1, DistributionBlocks.conveyor, 1); + set(x, y-2, DistributionBlocks.conveyor, 1); + set(x, y-3, DistributionBlocks.conveyor, 1); - - tiles[x+2][y-2].setFloor(Blocks.stone); - set(x+2, y-2, ProductionBlocks.stonedrill, 0); - set(x+2, y-1, ProductionBlocks.conveyor, 1); - set(x+2, y, WeaponBlocks.turret, 0); - - tiles[x-2][y-2].setFloor(Blocks.stone); - set(x-2, y-2, ProductionBlocks.stonedrill, 0); - set(x-2, y-1, ProductionBlocks.conveyor, 1); - set(x-2, y, WeaponBlocks.turret, 0); + for(int i = 0; i < 2; i ++){ + int d = Mathf.sign(i-0.5f); + + set(x+2*d, y-2, ProductionBlocks.stonedrill, d); + set(x+2*d, y-1, DistributionBlocks.conveyor, 1); + set(x+2*d, y, DistributionBlocks.conveyor, 1); + set(x+2*d, y+1, WeaponBlocks.doubleturret, 0); + + set(x+1*d, y-3, DistributionBlocks.conveyor, 2*d); + set(x+2*d, y-3, DistributionBlocks.conveyor, 2*d); + set(x+2*d, y-4, DistributionBlocks.conveyor, 1); + set(x+2*d, y-5, DistributionBlocks.conveyor, 1); + //set(x+2*d, y-6, DistributionBlocks.conveyor, 1); + + //set(x+3*d, y-6, ProductionBlocks.stonedrill, 0); + set(x+3*d, y-5, ProductionBlocks.stonedrill, 0); + set(x+3*d, y-4, ProductionBlocks.stonedrill, 0); + set(x+3*d, y-3, ProductionBlocks.stonedrill, 0); + } } static void set(int x, int y, Block type, int rot){ - tiles[x][y].setBlock(type); - tiles[x][y].rotation = (byte)rot; + if(type == ProductionBlocks.stonedrill){ + tiles[x][y].setFloor(Blocks.stone); + } + tiles[x][y].setBlock(type, rot); } public static int getSeed(){ diff --git a/core/src/io/anuke/mindustry/world/blocks/Blocks.java b/core/src/io/anuke/mindustry/world/blocks/Blocks.java index 29837b81f4..ed87cfb4dc 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/Blocks.java @@ -1,13 +1,13 @@ package io.anuke.mindustry.world.blocks; +import io.anuke.mindustry.GameState; +import io.anuke.mindustry.GameState.State; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.Floor; -import io.anuke.mindustry.world.blocks.types.Wall; -import io.anuke.mindustry.world.blocks.types.defense.ShieldedWallBlock; import io.anuke.ucore.core.Effects; import io.anuke.ucore.util.Mathf; @@ -20,7 +20,8 @@ public class Blocks{ //update floor blocks for effects, if needed public void draw(Tile tile){ - tile.floor().update(tile); + if(!GameState.is(State.paused)) + tile.floor().update(tile); } }, @@ -49,12 +50,27 @@ public class Blocks{ Effects.effect("lava", tile.worldx() + Mathf.range(5f), tile.worldy() + Mathf.range(5f)); } - if(Mathf.chance(0.004)){ + if(Mathf.chance(0.003)){ Effects.effect("lavabubble", tile.worldx() + Mathf.range(3f), tile.worldy() + Mathf.range(3f)); } } }, + oil = new Floor("oil"){ + { + vary = false; + solid = true; + liquidDrop = Liquid.oil; + } + + @Override + public void update(Tile tile){ + if(Mathf.chance(0.0025)){ + Effects.effect("oilbubble", tile.worldx() + Mathf.range(2f), tile.worldy() + Mathf.range(2f)); + } + } + }, + stone = new Floor("stone"){{ drops = new ItemStack(Item.stone, 1); }}, @@ -121,37 +137,5 @@ public class Blocks{ dirtblock = new Block("dirtblock"){{ solid = true; - }}, - - stonewall = new Wall("stonewall"){{ - health = 50; - formalName = "stone wall"; - }}, - - ironwall = new Wall("ironwall"){{ - health = 80; - formalName = "iron wall"; - }}, - - steelwall = new Wall("steelwall"){{ - health = 110; - formalName = "steel wall"; - }}, - - titaniumwall = new Wall("titaniumwall"){{ - health = 150; - formalName = "titanium wall"; - }}, - diriumwall = new Wall("duriumwall"){{ - health = 190; - formalName = "dirium wall"; - }}, - compositewall = new Wall("compositewall"){{ - health = 270; - formalName = "composite wall"; - }}, - titaniumshieldwall = new ShieldedWallBlock("titaniumshieldwall"){{ - health = 150; - formalName = "shielded wall"; }}; } diff --git a/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java new file mode 100644 index 0000000000..2d4e1a554f --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/DefenseBlocks.java @@ -0,0 +1,66 @@ +package io.anuke.mindustry.world.blocks; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.Wall; +import io.anuke.mindustry.world.blocks.types.defense.RepairTurret; +import io.anuke.mindustry.world.blocks.types.defense.ShieldBlock; +import io.anuke.mindustry.world.blocks.types.defense.ShieldedWallBlock; + +public class DefenseBlocks{ + + public static final Block + + stonewall = new Wall("stonewall"){{ + health = 50; + formalName = "stone wall"; + }}, + + ironwall = new Wall("ironwall"){{ + health = 80; + formalName = "iron wall"; + }}, + + steelwall = new Wall("steelwall"){{ + health = 110; + formalName = "steel wall"; + }}, + + titaniumwall = new Wall("titaniumwall"){{ + health = 150; + formalName = "titanium wall"; + }}, + diriumwall = new Wall("duriumwall"){{ + health = 190; + formalName = "dirium wall"; + }}, + compositewall = new Wall("compositewall"){{ + health = 270; + formalName = "composite wall"; + }}, + titaniumshieldwall = new ShieldedWallBlock("titaniumshieldwall"){{ + health = 150; + formalName = "shielded wall"; + }}, + + repairturret = new RepairTurret("repairturret"){ + { + formalName = "heal turret"; + range = 30; + reload = 40f; + health = 60; + } + }, + + megarepairturret = new RepairTurret("megarepairturret"){ + { + formalName = "heal turret II"; + range = 44; + reload = 20f; + health = 90; + } + }, + + shieldgenerator = new ShieldBlock("shieldgenerator"){ + //TODO + }; +} diff --git a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java new file mode 100644 index 0000000000..c94b88ddb8 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java @@ -0,0 +1,42 @@ +package io.anuke.mindustry.world.blocks; + +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.blocks.types.LiquidBlock; +import io.anuke.mindustry.world.blocks.types.distribution.*; + +public class DistributionBlocks{ + + public static final Block + + conduit = new LiquidBlock("conduit"){{ + + }}, + + liquidrouter = new LiquidRouter("liquidrouter"){{ + formalName = "liquid router"; + }}, + + conveyor = new Conveyor("conveyor"){{ + + }}, + + steelconveyor = new Conveyor("steelconveyor"){{ + health = 55; + speed = 0.04f; + formalName = "steel conveyor"; + }}, + + //TODO + poweredconveyor = new Conveyor("poweredconveyor"){{ + health = 90; + speed = 0.09f; + formalName = "powered conveyor"; + }}, + + router = new Router("router"){ + }, + + junction = new Junction("junction"){ + + }; +} diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index 4ce4551523..89397d847f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -5,8 +5,6 @@ import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.types.*; -import io.anuke.mindustry.world.blocks.types.distribution.*; import io.anuke.mindustry.world.blocks.types.production.*; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; @@ -37,65 +35,10 @@ public class ProductionBlocks{ } }, - conduit = new LiquidBlock("conduit"){{ - - }}, - pump = new Pump("pump"){{ }}, - liquidrouter = new LiquidRouter("liquidrouter"){{ - formalName = "liquid router"; - }}, - - conveyor = new Conveyor("conveyor"){{ - - }}, - - steelconveyor = new Conveyor("steelconveyor"){{ - health = 55; - speed = 0.04f; - formalName = "steel conveyor"; - }}, - - router = new Router("router"){ - }, - - junction = new Block("junction"){ - { - update = true; - solid = true; - } - - @Override - public void handleItem(Tile tile, Item item, Tile source){ - int dir = source.relativeTo(tile.x, tile.y); - dir = (dir+4)%4; - Tile to = tile.getNearby()[dir]; - - Timers.run(15, ()->{ - if(to == null || to.entity == null) return; - to.block().handleItem(to, item, tile); - }); - - } - - @Override - public boolean acceptItem(Item item, Tile dest, Tile source){ - int dir = source.relativeTo(dest.x, dest.y); - dir = (dir+4)%4; - Tile to = dest.getNearby()[dir]; - //uncomment the junction bit to disable giving items to other junctions - return to != null /*&& to.block() != junction*/ && to.block().acceptItem(item, to, dest); - } - - @Override - public String description(){ - return "Serves as a conveyor junction."; - } - }, - smelter = new Crafter("smelter"){ { health = 70; @@ -214,7 +157,6 @@ public class ProductionBlocks{ generateAmount = 4f; powerCapacity = 40f; } - }; - + } ; } diff --git a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java index 767abf694f..bee5847c79 100644 --- a/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/WeaponBlocks.java @@ -8,7 +8,8 @@ import io.anuke.mindustry.entities.effect.TeslaOrb; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; -import io.anuke.mindustry.world.blocks.types.defense.*; +import io.anuke.mindustry.world.blocks.types.defense.LaserTurret; +import io.anuke.mindustry.world.blocks.types.defense.Turret; import io.anuke.ucore.core.Timers; import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Mathf; @@ -162,27 +163,5 @@ public class WeaponBlocks{ health = 180; ammoMultiplier = 40; } - }, - - repairturret = new RepairTurret("repairturret"){ - { - formalName = "heal turret"; - range = 30; - reload = 40f; - health = 60; - } - }, - - megarepairturret = new RepairTurret("megarepairturret"){ - { - formalName = "heal turret II"; - range = 50; - reload = 20f; - health = 90; - } - }, - - shieldgenerator = new ShieldBlock("shieldgenerator"){ - }; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java new file mode 100644 index 0000000000..5ac79878cc --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java @@ -0,0 +1,43 @@ +package io.anuke.mindustry.world.blocks.types.distribution; + +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.world.Block; +import io.anuke.mindustry.world.Tile; +import io.anuke.ucore.core.Timers; + +public class Junction extends Block{ + + public Junction(String name) { + super(name); + update = true; + solid = true; + } + + @Override + public void handleItem(Tile tile, Item item, Tile source){ + int dir = source.relativeTo(tile.x, tile.y); + dir = (dir+4)%4; + Tile to = tile.getNearby()[dir]; + + Timers.run(15, ()->{ + if(to == null || to.entity == null) return; + to.block().handleItem(to, item, tile); + }); + + } + + @Override + public boolean acceptItem(Item item, Tile dest, Tile source){ + int dir = source.relativeTo(dest.x, dest.y); + dir = (dir+4)%4; + Tile to = dest.getNearby()[dir]; + //uncomment the junction bit to disable giving items to other junctions + return to != null /*&& to.block() != junction*/ && to.block().acceptItem(item, to, dest); + } + + @Override + public String description(){ + return "Serves as a conveyor junction."; + } + +} diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java index 60bf9537c0..be394233c0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/PowerBooster.java @@ -1,5 +1,12 @@ package io.anuke.mindustry.world.blocks.types.distribution; -public class PowerBooster{ +import io.anuke.mindustry.world.blocks.types.PowerBlock; + +public class PowerBooster extends PowerBlock{ + + //TODO + public PowerBooster(String name) { + super(name); + } } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java new file mode 100644 index 0000000000..7e10391c7e --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Sorter.java @@ -0,0 +1,41 @@ +package io.anuke.mindustry.world.blocks.types.distribution; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.resource.Item; +import io.anuke.mindustry.world.Tile; + +//TODO +public class Sorter extends Junction{ + + public Sorter(String name) { + super(name); + } + + public boolean acceptItem(Item item, Tile tile, Tile source){ + SorterEntity entity = tile.entity(); + return super.acceptItem(item, tile, source) && item == entity.sortItem; + } + + @Override + public TileEntity getEntity(){ + return new SorterEntity(); + } + + public static class SorterEntity extends TileEntity{ + public Item sortItem = Item.stone; + + @Override + public void write(DataOutputStream stream) throws IOException{ + stream.writeByte(sortItem.ordinal()); + } + + @Override + public void read(DataInputStream stream) throws IOException{ + sortItem = Item.values()[stream.readByte()]; + } + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java new file mode 100644 index 0000000000..563eeac9a1 --- /dev/null +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -0,0 +1,36 @@ +package io.anuke.mindustry.world.blocks.types.distribution; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.world.Block; + +//TODO +public class Teleporter extends Block{ + public static final int colors = 4; + + public Teleporter(String name) { + super(name); + } + + @Override + public TileEntity getEntity(){ + return new TeleporterEntity(); + } + + public static class TeleporterEntity extends TileEntity{ + public byte color = 0; + + @Override + public void write(DataOutputStream stream) throws IOException{ + stream.writeByte(color); + } + + @Override + public void read(DataInputStream stream) throws IOException{ + color = stream.readByte(); + } + } +} diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java index e827d1b71e..4141851dad 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/LiquidPowerGenerator.java @@ -1,5 +1,10 @@ package io.anuke.mindustry.world.blocks.types.production; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Liquid; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.LiquidBlock; @@ -15,7 +20,7 @@ public class LiquidPowerGenerator extends LiquidBlock{ @Override public void update(Tile tile){ - LiquidEntity entity = tile.entity(); + LiquidPowerEntity entity = tile.entity(); if(entity.liquidAmount >= generateAmount){ entity.liquidAmount -= generateAmount; @@ -27,4 +32,25 @@ public class LiquidPowerGenerator extends LiquidBlock{ public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){ return liquid == generateLiquid && super.acceptLiquid(tile, source, liquid, amount); } + + @Override + public TileEntity getEntity(){ + return new LiquidPowerEntity(); + } + + public static class LiquidPowerEntity extends LiquidEntity{ + public float power; + + @Override + public void write(DataOutputStream stream) throws IOException{ + super.write(stream); + stream.writeFloat(power); + } + + @Override + public void read(DataInputStream stream) throws IOException{ + super.read(stream); + power = stream.readFloat(); + } + } } diff --git a/desktop/mindustry-saves/0.mins b/desktop/mindustry-saves/0.mins index dc050ee814..f2880eda20 100644 Binary files a/desktop/mindustry-saves/0.mins and b/desktop/mindustry-saves/0.mins differ