From aafe7fb74ad77bf2ba5806d339f27e8aedb34d9e Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 5 Dec 2017 12:21:08 -0500 Subject: [PATCH] Many bugfixes and tweaks --- android/AndroidManifest.xml | 4 +- .../io/anuke/mindustry/AndroidLauncher.java | 2 +- build.gradle | 2 +- core/assets/maps/maze.png | Bin 4298 -> 4315 bytes core/assets/shaders/shield.fragment | 5 +- core/src/io/anuke/mindustry/Vars.java | 2 +- core/src/io/anuke/mindustry/core/Control.java | 2 +- .../anuke/mindustry/entities/BulletType.java | 8 +- .../anuke/mindustry/entities/WaveCreator.java | 6 +- .../anuke/mindustry/entities/effect/EMP.java | 9 +- .../mindustry/entities/effect/Shield.java | 4 +- .../mindustry/entities/enemies/Enemy.java | 15 ++-- .../anuke/mindustry/input/AndroidInput.java | 15 ++++ .../io/anuke/mindustry/resource/Recipe.java | 2 +- .../ui/fragments/BlocksFragment.java | 5 +- .../mindustry/ui/fragments/HudFragment.java | 78 +++++++++++++----- core/src/io/anuke/mindustry/world/World.java | 2 +- .../world/blocks/DistributionBlocks.java | 14 ++-- .../world/blocks/ProductionBlocks.java | 8 +- .../world/blocks/types/LiquidBlock.java | 1 - .../blocks/types/defense/PowerTurret.java | 11 ++- .../blocks/types/defense/RepairTurret.java | 2 +- .../blocks/types/defense/ShieldBlock.java | 10 ++- .../world/blocks/types/defense/Turret.java | 4 +- .../blocks/types/distribution/Junction.java | 1 + .../types/distribution/PowerBooster.java | 2 +- .../blocks/types/production/Generator.java | 11 +-- desktop/mindustry-saves/2.mins | Bin 22400 -> 17024 bytes desktop/mindustry-saves/7.mins | Bin 39986 -> 3906 bytes html/webapp/html/logo.png | Bin 2416 -> 2472 bytes html/webapp/styles.css | 7 ++ 31 files changed, 143 insertions(+), 89 deletions(-) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index c2fca9ee65..97ccaace35 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,8 +1,8 @@ + android:versionCode="16" + android:versionName="3.0b" > diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 56d9e94a47..5c457088f3 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -51,7 +51,7 @@ public class AndroidLauncher extends AndroidApplication { Unit.dp.multiplier = 1f; } - Mindustry.args.add("-debug"); + //Mindustry.args.add("-debug"); initialize(new Mindustry(), config); } diff --git a/build.gradle b/build.gradle index fec2213330..6e977b8ab4 100644 --- a/build.gradle +++ b/build.gradle @@ -79,7 +79,7 @@ project(":core") { apply plugin: "java" dependencies { - // compile 'com.github.Anuken:ucore:61c43bf' + compile 'com.github.Anuken:ucore:92dc170f0e' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/assets/maps/maze.png b/core/assets/maps/maze.png index ffab959f20a902cd7edb4b2ded729d61f572365a..c71f782049573b0d2471fc94976a466f58c753b9 100644 GIT binary patch delta 80 zcmX@5cw2FT3O`$tx4R3&e-K=-clqRriV8fe0&02>&IIW*FbHI9^i5{s7X0gTi7%}p i|K9s=oA)sN;uX=ksaAHGcj0RWAn&pI+hmna_y?(*>)eH;*nH%Gi tnRp`qSF`b3+}=C;;okR~&oceu70KD4`DOK|r$Frt44$rjF6*2UngGHy9##MV diff --git a/core/assets/shaders/shield.fragment b/core/assets/shaders/shield.fragment index eed64e553c..c028303bad 100644 --- a/core/assets/shaders/shield.fragment +++ b/core/assets/shaders/shield.fragment @@ -5,6 +5,7 @@ precision mediump int; #define MAX_HITS 64 #define HIT_RADIUS 12.0 +#define ALPHA 0.18 uniform sampler2D u_texture; @@ -53,7 +54,7 @@ void main() { color *= 1.65; } - color.a = 0.18; + color.a = ALPHA; for(int i = 0; i < u_hitamount; i ++){ vec3 hit = u_hits[i]; @@ -62,7 +63,7 @@ void main() { if(abs(distance(vec2(hit.x, hit.y), coords - u_texsize/2.0) - rad) < 1.0){ color = mix(color, u_color* vec4(si, si, si, 1.0), (1.0 * fract)); - color.a = 0.18 + 0.82 *fract; + color.a = ALPHA + 0.82 *fract; } } } diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 3403d4d2cc..ad34385288 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -43,7 +43,7 @@ public class Vars{ //whether to draw chunk borders public static boolean debugChunks = false; //whether turrets have infinite ammo (only with debug) - public static boolean infiniteAmmo = true; + public static boolean infiniteAmmo = false; //whether to show paths of enemies public static boolean showPaths = true; //number of save slots-- increasing may lead to layout issues diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index c9eaab991a..b452f33964 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -115,7 +115,7 @@ public class Control extends Module{ player = new Player(); spawns = WaveCreator.getSpawns(); - WaveCreator.testWaves(1, 30); + //WaveCreator.testWaves(1, 30); } public void reset(){ diff --git a/core/src/io/anuke/mindustry/entities/BulletType.java b/core/src/io/anuke/mindustry/entities/BulletType.java index 698b8f35d2..9e6f2f46eb 100644 --- a/core/src/io/anuke/mindustry/entities/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/BulletType.java @@ -62,7 +62,7 @@ public abstract class BulletType extends BaseBulletType{ } } }, - emp = new BulletType(1.6f, 6){ + emp = new BulletType(1.6f, 8){ { lifetime = 50f; hitsize = 6f; @@ -89,7 +89,7 @@ public abstract class BulletType extends BaseBulletType{ public void removed(Bullet b){ Timers.run(5f, ()->{ - new EMP(b.x, b.y, b.damage).add(); + new EMP(b.x, b.y, b.getDamage()).add(); }); Effects.effect(Fx.empshockwave, b); Effects.shake(3f, 3f, b); @@ -132,7 +132,7 @@ public abstract class BulletType extends BaseBulletType{ DamageArea.damage(!(b.owner instanceof Enemy), b.x, b.y, 25f, (int)(damage * 2f/3f)); } }, - titanshell = new BulletType(1.8f, 40){ + titanshell = new BulletType(1.8f, 38){ { lifetime = 70f; hitsize = 15f; @@ -160,7 +160,7 @@ public abstract class BulletType extends BaseBulletType{ Effects.effect(Fx.shellsmoke, b); Effects.effect(Fx.shockwaveSmall, b); - DamageArea.damage(!(b.owner instanceof Enemy), b.x, b.y, 25f, (int)(damage * 2f/3f)); + DamageArea.damage(!(b.owner instanceof Enemy), b.x, b.y, 50f, (int)(damage * 2f/3f)); } }, yellowshell = new BulletType(1.2f, 20){ diff --git a/core/src/io/anuke/mindustry/entities/WaveCreator.java b/core/src/io/anuke/mindustry/entities/WaveCreator.java index 9833ccaf9b..11a1f69390 100644 --- a/core/src/io/anuke/mindustry/entities/WaveCreator.java +++ b/core/src/io/anuke/mindustry/entities/WaveCreator.java @@ -91,7 +91,7 @@ public class WaveCreator{ //boss wave new EnemySpawn(FortressEnemy.class){{ after = 16; - amount = 2; + amount = 1; spacing = 5; scaling = 1; }}, @@ -149,8 +149,8 @@ public class WaveCreator{ }}, new EnemySpawn(FortressEnemy.class){{ after = 12; - spacing = 3; - scaling = 5; + spacing = 4; + scaling = 6; }}, new EnemySpawn(HealerEnemy.class){{ scaling = 3; diff --git a/core/src/io/anuke/mindustry/entities/effect/EMP.java b/core/src/io/anuke/mindustry/entities/effect/EMP.java index a079c7d38d..b4b124e67c 100644 --- a/core/src/io/anuke/mindustry/entities/effect/EMP.java +++ b/core/src/io/anuke/mindustry/entities/effect/EMP.java @@ -50,14 +50,15 @@ public class EMP extends TimedEntity{ Tile tile = array.get(i); targets.add(tile); - if(tile.block() instanceof PowerAcceptor){ + if(tile != null && tile.block() instanceof PowerAcceptor){ PowerAcceptor p = (PowerAcceptor)tile.block(); - tile.entity.damage(damage*2); //extra damage p.setPower(tile, 0f); + tile.entity.damage(damage*2); //extra damage } - Effects.effect(Fx.empspark, tile.entity); - tile.entity.damage(damage); + //entity may be null here, after the block is dead! + Effects.effect(Fx.empspark, tile.worldx(), tile.worldy()); + if(tile.entity != null) tile.entity.damage(damage); } } diff --git a/core/src/io/anuke/mindustry/entities/effect/Shield.java b/core/src/io/anuke/mindustry/entities/effect/Shield.java index b62bfbdd41..7a3775d5f1 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Shield.java +++ b/core/src/io/anuke/mindustry/entities/effect/Shield.java @@ -18,6 +18,7 @@ import io.anuke.ucore.util.Mathf; public class Shield extends Entity{ public boolean active; public boolean hitPlayers = false; + public float radius = 0f; private float uptime = 0f; private final Tile tile; @@ -84,8 +85,7 @@ public class Shield extends Entity{ } float drawRadius(){ - ShieldBlock block = (ShieldBlock)tile.block(); - return (block.shieldRadius*2 + Mathf.sin(Timers.time(), 25f, 2f)) * uptime; + return (radius*2 + Mathf.sin(Timers.time(), 25f, 2f)); } public void removeDelay(){ diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 710f9e9152..bb7b703b97 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -5,13 +5,10 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; -import io.anuke.mindustry.entities.Bullet; -import io.anuke.mindustry.entities.BulletType; -import io.anuke.mindustry.entities.Player; +import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.effect.Fx; import io.anuke.mindustry.entities.effect.Shaders; import io.anuke.mindustry.world.Tile; -import io.anuke.ucore.UCore; import io.anuke.ucore.core.*; import io.anuke.ucore.entities.*; import io.anuke.ucore.util.Angles; @@ -103,6 +100,10 @@ public class Enemy extends DestructibleEntity{ } void updateTargeting(boolean nearCore){ + if(target != null && target instanceof TileEntity && ((TileEntity)target).dead){ + target = null; + } + if(Timers.get(this, "target", 15) && !nearCore){ target = Vars.world.findTileTarget(x, y, null, range, false); @@ -110,10 +111,8 @@ public class Enemy extends DestructibleEntity{ if(target == null){ target = Entities.getClosest(Entities.defaultGroup(), x, y, range, e -> e instanceof Player); } - } - - if(target instanceof Enemy){ - UCore.log(target); + }else if(nearCore){ + target = Vars.control.getCore().entity; } if(target != null && bullet != null){ diff --git a/core/src/io/anuke/mindustry/input/AndroidInput.java b/core/src/io/anuke/mindustry/input/AndroidInput.java index 9659f8e3ab..d11401a025 100644 --- a/core/src/io/anuke/mindustry/input/AndroidInput.java +++ b/core/src/io/anuke/mindustry/input/AndroidInput.java @@ -3,6 +3,7 @@ package io.anuke.mindustry.input; import static io.anuke.mindustry.Vars.*; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.InputAdapter; import com.badlogic.gdx.math.Vector2; @@ -10,7 +11,9 @@ import com.badlogic.gdx.math.Vector2; import io.anuke.mindustry.Vars; import io.anuke.mindustry.resource.ItemStack; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.Configurable; import io.anuke.ucore.core.Graphics; +import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.util.Mathf; @@ -82,6 +85,18 @@ public class AndroidInput extends InputAdapter{ } public static void doInput(){ + Tile cursor = selected(); + + //TODO test + if(Inputs.buttonUp(Buttons.LEFT) && cursor != null){ + Tile linked = cursor.isLinked() ? cursor.getLinked() : cursor; + if(linked != null && linked.block() instanceof Configurable){ + Vars.ui.showConfig(linked); + }else if(!Vars.ui.hasConfigMouse()){ + Vars.ui.hideConfig(); + } + } + if(Gdx.input.isTouched(0) && Mathf.near2d(lmousex, lmousey, Gdx.input.getX(0), Gdx.input.getY(0), Unit.dp.inPixels(50)) && !ui.hasMouse() /*&& (player.recipe == null || mode == PlaceMode.touch)*/){ diff --git a/core/src/io/anuke/mindustry/resource/Recipe.java b/core/src/io/anuke/mindustry/resource/Recipe.java index 22ccc746a5..6419b26a20 100644 --- a/core/src/io/anuke/mindustry/resource/Recipe.java +++ b/core/src/io/anuke/mindustry/resource/Recipe.java @@ -52,7 +52,7 @@ public enum Recipe{ titaniumpurifier(crafting, ProductionBlocks.titaniumpurifier, stack(Item.steel, 30), stack(Item.iron, 30)), oilrefinery(crafting, ProductionBlocks.oilrefinery, stack(Item.steel, 15), stack(Item.iron, 15)), stoneformer(crafting, ProductionBlocks.stoneformer, stack(Item.steel, 10), stack(Item.iron, 10)), - lavasmelter(crafting, ProductionBlocks.lavasmelter, stack(Item.steel, 20), stack(Item.iron, 20), stack(Item.titanium, 10)), + lavasmelter(crafting, ProductionBlocks.lavasmelter, stack(Item.steel, 30), stack(Item.titanium, 15)), stonedrill(production, ProductionBlocks.stonedrill, stack(Item.stone, 12)), irondrill(production, ProductionBlocks.irondrill, stack(Item.stone, 25)), diff --git a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java index 053ac5bc2f..d27b15fe24 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/BlocksFragment.java @@ -14,6 +14,7 @@ import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.resource.Section; import io.anuke.mindustry.ui.FloatingDialog; import io.anuke.ucore.core.Draw; +import io.anuke.ucore.graphics.Hue; import io.anuke.ucore.scene.builders.table; import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.*; @@ -105,7 +106,7 @@ public class BlocksFragment implements Fragment{ //image.setDisabled(!has); image.setChecked(player.recipe == r); image.setTouchable(canPlace ? Touchable.enabled : Touchable.disabled); - image.getImage().setColor(has ? Color.WHITE : Color.DARK_GRAY); + image.getImage().setColor(has ? Color.WHITE : Hue.lightness(0.33f)); }); if(i % rows == rows-1) @@ -195,7 +196,7 @@ public class BlocksFragment implements Fragment{ }).size(110, 50).pad(10f).units(Unit.dp); d.show(); - }).expandX().padLeft(4).top().right().size(36f, 40f).units(Unit.dp); + }).expandX().padLeft(4).top().right().size(42f, 46f).padTop(-2).units(Unit.dp); } diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 34cf66d8f5..9b93767d85 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -22,6 +22,7 @@ import io.anuke.ucore.scene.actions.Actions; import io.anuke.ucore.scene.builders.imagebutton; import io.anuke.ucore.scene.builders.label; import io.anuke.ucore.scene.builders.table; +import io.anuke.ucore.scene.event.Touchable; import io.anuke.ucore.scene.ui.Image; import io.anuke.ucore.scene.ui.Label; import io.anuke.ucore.scene.ui.layout.Cell; @@ -42,7 +43,7 @@ public class HudFragment implements Fragment{ new table(){{ left(); - defaults().size(66).units(Unit.dp).left(); + defaults().size(68).units(Unit.dp).left(); float isize = Unit.dp.inPixels(40); new imagebutton("icon-menu", isize, ()->{ @@ -64,6 +65,12 @@ public class HudFragment implements Fragment{ row(); + new table(){{ + addWaveTable(); + }}.fillX().end(); + + row(); + itemtable = new table("button").end().top().left().fillX().size(-1).get(); itemtable.setVisible(()-> control.getMode() != GameMode.sandbox); itemcell = get().getCell(itemtable); @@ -95,29 +102,16 @@ public class HudFragment implements Fragment{ //wave table... new table(){{ - atop(); - aright(); - float uheight = 72f; + if(!Vars.android){ + atop(); + aright(); + }else{ + abottom(); + aleft(); + } - new imagebutton("icon-play", Unit.dp.inPixels(30f), ()->{ - Vars.control.runWave(); - }).size(uheight).uniformY().units(Unit.dp) - .visible(()-> Vars.control.getMode() == GameMode.sandbox && Vars.control.getEnemiesRemaining() <= 0); - - new table("button"){{ - - new label(()->"[orange]Wave " + control.getWave()).scale(fontscale*2f).left(); - - row(); - - new label(()-> control.getEnemiesRemaining() > 0 ? - control.getEnemiesRemaining() + " Enemies remaining" : - (control.getTutorial().active() || Vars.control.getMode() == GameMode.sandbox) ? "waiting..." : "New wave in " + (int) (control.getWaveCountdown() / 60f)) - .minWidth(150); - - get().pad(Unit.dp.inPixels(12)); - }}.height(uheight).units(Unit.dp); + //addWaveTable(); visible(()->!GameState.is(State.menu)); }}.end(); @@ -166,6 +160,46 @@ public class HudFragment implements Fragment{ } } + private void addWaveTable(){ + float uheight = 66f; + + new table("button"){{ + aleft(); + new table(){{ + aleft(); + + new label(()->"[orange]Wave " + control.getWave()).scale(fontscale*1.5f).left(); + + row(); + + new label(()-> control.getEnemiesRemaining() > 0 ? + control.getEnemiesRemaining() + " enemies" : + (control.getTutorial().active() || Vars.control.getMode() == GameMode.sandbox) ? "waiting..." : "Wave in " + (int) (control.getWaveCountdown() / 60f)) + .minWidth(140).left(); + + get().pad(Unit.dp.inPixels(12)); + }}.left().padLeft(-6).end(); + + playButton(uheight); + //get().padTop(Unit.dp.inPixels(1)); + //get().padBottom(Unit.dp.inPixels(1)); + }}.height(uheight).units(Unit.dp).fillX().expandX().end(); + + } + + private void playButton(float uheight){ + new imagebutton("icon-play", Unit.dp.inPixels(30f), ()->{ + Vars.control.runWave(); + }).height(uheight).fillX().padTop(-8f).padBottom(-12f).padRight(-18f).padLeft(-10f).width(40f).units(Unit.dp).update(l->{ + boolean vis = Vars.control.getMode() == GameMode.sandbox && Vars.control.getEnemiesRemaining() <= 0; + boolean paused = GameState.is(State.paused) || !vis; + + l.setVisible(vis); + l.getStyle().imageUp = Core.skin.getDrawable(vis ? "icon-play" : "clear"); + l.setTouchable(!paused ? Touchable.enabled : Touchable.disabled); + }); + } + public void updateItems(){ itemtable.clear(); diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index 0c85042c11..ba31bbf780 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -278,7 +278,7 @@ public class World extends Module{ } } - if(Tmp.r2.overlaps(player.hitbox.getRect(player.x, player.y))){ + if(!Vars.android && Tmp.r2.overlaps(player.hitbox.getRect(player.x, player.y))){ return false; } diff --git a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java index 29d130b0c1..59818120dc 100644 --- a/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/DistributionBlocks.java @@ -15,6 +15,7 @@ public class DistributionBlocks{ }}, pulseconduit = new LiquidBlock("pulseconduit"){{ + formalName = "pulse conduit"; fullDescription = "Advanced liquid transport block. Transports liquids faster and stores more than standard conduits."; liquidCapacity = 16f; flowfactor = 4.9f; @@ -29,7 +30,6 @@ public class DistributionBlocks{ }}, conveyor = new Conveyor("conveyor"){{ - description = "Moves items."; fullDescription = "Basic item transport block. Moves items forward and automatically deposits them into turrets or crafters. " + "Rotatable. Can be used as a bridge over liquids for enemies and players."; }}, @@ -37,16 +37,13 @@ public class DistributionBlocks{ steelconveyor = new Conveyor("steelconveyor"){{ health = 55; speed = 0.04f; - description = "Moves items faster."; formalName = "steel conveyor"; fullDescription = "Advanced item transport block. Moves items faster than standard conveyors."; }}, - //TODO pulseconveyor = new Conveyor("poweredconveyor"){{ health = 75; speed = 0.09f; - description = "Moves items even faster."; formalName = "pulse conveyor"; fullDescription = "The ultimate item transport block. Moves items faster than steel conveyors."; }}, @@ -71,7 +68,6 @@ public class DistributionBlocks{ }}, liquidjunction = new LiquidJunction("liquidjunction"){{ formalName = "liquid junction"; - description = "Serves as a liquid junction."; fullDescription = "Acts as a bridge for two crossing conduits. Useful in situations with " + "two different conduits carrying different liquids to different locations."; }}, @@ -88,7 +84,7 @@ public class DistributionBlocks{ }}, powerlaser = new PowerLaser("powerlaser"){{ formalName = "power laser"; - description = "Transmits power with a laser."; + description = "Transmits power."; fullDescription = "Creates a laser that transmits power to the block in front of it. Does not generate any power itself. " + "Best used with generators or other lasers."; }}, @@ -103,16 +99,16 @@ public class DistributionBlocks{ formalName = "laser corner"; description = "Splits input power into 2 lasers."; fullDescription = "Laser that distributes power to two directions at once. " - + "Useful in situations where it is required to power multiple blocks from one generator, and a normal router is imprecise."; + + "Useful in situations where it is required to power multiple blocks from one generator, and a router is imprecise."; }}, teleporter = new Teleporter("teleporter"){{ - description = "[interact]Tap block to config[]\nTeleports items to others of the same color."; + description = "[interact]Tap block to config[]"; fullDescription = "Advanced item transport block. Teleporters input items to other teleporters of the same color." + " Does nothing if no teleporters of the same color exist. If multiple teleporters exist of the same color, a random one is selected." + " Tap and click the arrows to change color."; }}, sorter = new Sorter("sorter"){{ - description = "[interact]Tap block to config[]\nSorts input items by type."; + description = "[interact]Tap block to config[]"; fullDescription = "Sorts item by material type. Material to accept is indicated by the color in the block. " + "All items that match the sort material are outputted forward, everything else is outputted to the left and right."; }}; diff --git a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java index 1d120eb1eb..dc13a2b1d4 100644 --- a/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java +++ b/core/src/io/anuke/mindustry/world/blocks/ProductionBlocks.java @@ -78,7 +78,7 @@ public class ProductionBlocks{ liquidAmount = 18.99f; output = Item.coal; health = 50; - purifyTime = 60; + purifyTime = 50; description = "Converts stone + water to coal."; fullDescription = "A basic extractor block. Outputs coal when supplied with large amounts of water and stone."; } @@ -92,7 +92,7 @@ public class ProductionBlocks{ inputLiquid = Liquid.water; liquidAmount = 40f; liquidCapacity = 41f; - purifyTime = 80; + purifyTime = 60; output = Item.titanium; health = 70; description = "Converts iron + water to titanium."; @@ -106,7 +106,7 @@ public class ProductionBlocks{ inputLiquid = Liquid.oil; liquidAmount = 45f; liquidCapacity = 46f; - purifyTime = 70; + purifyTime = 60; output = Item.coal; health = 80; craftEffect = Fx.purifyoil; @@ -266,7 +266,7 @@ public class ProductionBlocks{ height = 3; health = 600; breaktime *= 2.3f; - description = "Generates power from uranium + water."; + //description = "Advanced generator."; fullDescription = "The ultimate power generator. Highly volatile. Generates power from uranium. Requires constant cooling in the form of water. " + "Will explode violently if insufficient amounts of coolant are supplied. "; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java index 75d958b932..346abac2b9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/LiquidBlock.java @@ -20,7 +20,6 @@ public class LiquidBlock extends Block implements LiquidAcceptor{ public LiquidBlock(String name) { super(name); - description = "Transports liquids."; rotate = true; update = true; } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/PowerTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/PowerTurret.java index 72c578a3ea..bed70e2aba 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/PowerTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/PowerTurret.java @@ -26,6 +26,11 @@ public class PowerTurret extends Turret implements PowerAcceptor{ ammo = null; } + @Override + public void postInit(){ + description = "[turretinfo]Uses power."; + } + @Override public void getStats(Array list){ super.getStats(list); @@ -33,12 +38,6 @@ public class PowerTurret extends Turret implements PowerAcceptor{ list.add("[powerinfo]Power/shot: " + Strings.toFixed(powerUsed, 1)); } - @Override - public void postInit(){ - super.postInit(); - description += "\n[powerinfo]Power/shot: " + Strings.toFixed(powerUsed, 1); - } - @Override public void drawPixelOverlay(Tile tile){ Vector2 offset = getPlaceOffset(); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java index c696738a36..e6d4102ff7 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/RepairTurret.java @@ -31,7 +31,7 @@ public class RepairTurret extends PowerTurret{ @Override public void postInit(){ - description = "[turretinfo]Range: " + (int)range + "\nPower/unit: "+powerUsed+"\n[description]Heals nearby tiles."; + description = "[powerinfo]Uses power[white]\nRepairs nearby blocks."; } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java index 3a08c576fd..75033ab71e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java @@ -11,16 +11,20 @@ import io.anuke.mindustry.world.blocks.types.PowerBlock; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Timers; import io.anuke.ucore.entities.BulletEntity; +import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Strings; public class ShieldBlock extends PowerBlock{ public float shieldRadius = 40f; - public float powerDrain = 0.006f; + public float powerDrain = 0.005f; public float powerPerDamage = 0.1f; + public float maxRadius = 40f; + public float radiusPowerScale = 7.5f; public ShieldBlock(String name) { super(name); voltage = powerDrain; + health = 100; } @Override @@ -42,7 +46,7 @@ public class ShieldBlock extends PowerBlock{ } if(entity.power > powerPerDamage){ - if(!entity.shield.active && entity.power > powerPerDamage * 8f){ + if(!entity.shield.active){ entity.shield.add(); } @@ -52,6 +56,8 @@ public class ShieldBlock extends PowerBlock{ entity.shield.removeDelay(); } } + + entity.shield.radius = Mathf.lerp(entity.shield.radius, Math.min(entity.power * radiusPowerScale, maxRadius), Timers.delta() * 0.05f); } diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java index e63681da52..63fa33a35e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/Turret.java @@ -66,8 +66,8 @@ public class Turret extends Block{ @Override public void postInit(){ - description = "[turretinfo]" + (ammo==null ? "" : "Ammo: " + ammo +"\n") - + "Range: " + (int)range; + if(ammo != null) + description = "[turretinfo]Ammo: " + ammo; } @Override 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 index 88edb0f11e..97a2b24ddb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Junction.java @@ -33,6 +33,7 @@ public class Junction extends Block{ @Override public boolean acceptItem(Item item, Tile dest, Tile source){ int dir = source.relativeTo(dest.x, dest.y); + if(dir == -1) return false; Tile to = dest.getNearby()[dir]; return to != null && to.block().acceptItem(item, to, dest); } 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 3fe032b493..5e2f665640 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 @@ -18,6 +18,7 @@ public class PowerBooster extends Generator{ super(name); explosive = false; hasLasers = false; + powerSpeed = 0.4f; } @Override @@ -69,7 +70,6 @@ public class PowerBooster extends Generator{ int acceptors = 0; float flow = 0f; - //TODO have two phases, where it checks nearby blocks first, then distributes it evenly for(int i = 0; i < 2; i++){ for(int x = -powerRange; x <= powerRange; x++){ for(int y = -powerRange; y <= powerRange; y++){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java index 6544cab0f8..94b2cef3d8 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/production/Generator.java @@ -24,7 +24,7 @@ public class Generator extends PowerBlock{ public int laserRange = 6; public int laserDirections = 4; - public float powerSpeed = 0.06f; + public float powerSpeed = 0.1f; public boolean explosive = true; public boolean hasLasers = true; public boolean outputOnly = false; @@ -196,22 +196,17 @@ public class Generator extends PowerBlock{ int relrot = (rotation + 2) % 4; if(other.hasLasers){ for(int i = 0; i < other.laserDirections; i ++){ - if(target.getRotation() + i - other.laserDirections/2 == (target.getRotation() + 2) % 4){ + if(Mathf.mod(target.getRotation() + i - other.laserDirections/2, 4) == relrot){ return true; } } } - if(other.hasLasers && Math.abs(target.getRotation() - relrot) <= other.laserDirections / 2){ - return true; - } } return false; } protected Tile laserTarget(Tile tile, int rotation){ - if(rotation < 0) - rotation += 4; - rotation %= 4; + rotation = Mathf.mod(rotation, 4); GridPoint2 point = Geometry.getD4Points()[rotation]; int i = 0; diff --git a/desktop/mindustry-saves/2.mins b/desktop/mindustry-saves/2.mins index 651006157e4c7385685e452009000e02da4565d6..3ee6521fdc2ffa54375e81b8f6086213d9bf3da6 100644 GIT binary patch literal 17024 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 dhZ=UHLyb06zoQOsl%ahOjgbEx_#_5X>&fT{oh literal 22400 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 diff --git a/desktop/mindustry-saves/7.mins b/desktop/mindustry-saves/7.mins index e9cf74f85349e9cec95e2beba2c1333885092cf3..e9bd698ec7002006a7e9d7b78bcaf4b4c943043c 100644 GIT binary patch literal 3906 zcmZwIYfw~W90u^0MXjbj)Q4&US{qn)7bUfY2`yB}BZNB|SdxN@7mOuP$P_ehiwj)_ z!7@^I*9&shaI6$Zgv3Z(U@;I>%t><6>O<3qX6j4dde1pL54P^ku=9JL|NH*Wdv1#m z;t3%_)>ulLyTlYBgh4qdgmUbpalw@-@5phkcx19LmZwdUU+WC=%NZ(+uD?U1o)YqF zaEhAAiIc@7WpD9zWvJ?Mh#V%0P-WZ9TT1_rxAmbxasFdb24gGqp-^_+^C|x31^O^V zDXFPbdhhKY9~RA)yGj?r5g~gC5hg@2Rq#BrTq9IC6)K@hUqDtE1+6qgyDdIOARd0)f4Mrw2cvLOZfG8H=cI+V2t z>ZbPDk=d3&nbdVE^9@w{sXlop(SwhYF=M~8AQaiJdRZ-PcST?FLR4VoCN>rbt=1>l56V*>`T7|W4%1R!xSMHyYl2C0a0WDV3el(_=c(^SSs$ihE{tW+)4MqQ}H zyw-hCVijbnh9W+N5~+=p^)pnbQ`@Ol>MZpK^(Pf^09{O!ol2)pQLlcE6)wtHgDi$h z{{q>!lYAZ7Jxo0gix zwRS3t3O|g_k%t4$O%|epWTx@#!5u{FS&BTIwkvaxb(SERRnG!$ro2Bh^n!MVxgzQ5 zj(>%S)3XHqiLp7=jmQ5lQxhTl6Q^`UJEe)|K45GL7{?sd8pum;JF2ZrzzL~&+<2y+ zxPJVFTro^V*0D>S-sQnd6&ECn50af@mrg3;I6EKLIxn8si$OkaaY57gpy|blUiDh9 zd3rCyW3tafN&G`eb_4d(*aQtzD_W4XQ`e}Q)F>4rUm^LC*M26IOP!(GsK{2VFrS82 zeGLtsfrhB$v&b^2DypIl)!g$?0cCDSHm?)P>w+9q8Fh?0bqVuUcSHNXhw7-b%gBl- z7nRzBYAY3c1=&kfIn_y3`Y^ACs;AO=QEi}_sg?=#VO|F{zaLq)AF8I329RY_Emx79 zptk*htckJ>B5S(_d4{1QRLcl5=XEIK2IQq0Df=j@_FK>gR5R5=)&GQf>35*TV^HH= M$Z;Q9`@63H05DCh0RR91 literal 39986 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 diff --git a/html/webapp/html/logo.png b/html/webapp/html/logo.png index d8c65984088157e29b1986a1775afda6845caa99..be1282d3c5c6126c657bc0e760c13588bec70521 100644 GIT binary patch literal 2472 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 span { + background-color: #e44d3c !important; + background-image: -moz-linear-gradient(top, #f4ba6e, #d29d58) !important; + background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f4ba6e),color-stop(1, #d29d58)) !important; + background-image: -webkit-linear-gradient(#f4ba6e, #d29d58) !important; +}