diff --git a/core/assets-raw/sprites/blocks/production/cyanogen-synthesizer-heat.png b/core/assets-raw/sprites/blocks/production/cyanogen-synthesizer-heat.png index 4a2f00108a..aa49eeb57d 100644 Binary files a/core/assets-raw/sprites/blocks/production/cyanogen-synthesizer-heat.png and b/core/assets-raw/sprites/blocks/production/cyanogen-synthesizer-heat.png differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index ee15a67d9e..7831f1c038 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1950,6 +1950,8 @@ public class Blocks implements ContentList{ tier = 4; size = 2; range = 3; //TODO make it 2? + + consumes.liquid(Liquids.hydrogen, 1f / 60f).boost(); }}; //TODO awful name @@ -1963,6 +1965,8 @@ public class Blocks implements ContentList{ size = 3; range = 6; laserWidth = 0.7f; + + consumes.liquid(Liquids.hydrogen, 2f / 60f).boost(); }}; //endregion diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 38f0c8708c..7f2a378a89 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -28,7 +28,7 @@ public class Items implements ContentList{ cost = 1.5f; }}; - graphite = new Item("graphite", Color.valueOf("b2c6d2")){{ + graphite = new Item("graphite", Color.valueOf("95abd9")){{ cost = 1f; }}; diff --git a/core/src/mindustry/world/blocks/production/BeamDrill.java b/core/src/mindustry/world/blocks/production/BeamDrill.java index 49d21f768d..0db270426b 100644 --- a/core/src/mindustry/world/blocks/production/BeamDrill.java +++ b/core/src/mindustry/world/blocks/production/BeamDrill.java @@ -13,6 +13,7 @@ import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; +import mindustry.ui.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -31,6 +32,8 @@ public class BeamDrill extends Block{ public int range = 5; public int tier = 1; public float laserWidth = 0.65f; + /** How many times faster the drill will progress when boosted by an optional consumer. */ + public float optionalBoostIntensity = 2f; public Color sparkColor = Color.valueOf("fd9e81"), glowColor = Color.white; public float glowIntensity = 0.2f, pulseIntensity = 0.07f; @@ -59,6 +62,14 @@ public class BeamDrill extends Block{ super.init(); } + @Override + public void setBars(){ + super.setBars(); + + bars.add("drillspeed", (BeamDrillBuild e) -> + new Bar(() -> Core.bundle.format("bar.drillspeed", Strings.fixed(e.lastDrillSpeed * 60, 2)), () -> Pal.ammo, () -> e.warmup)); + } + @Override public boolean outputsItems(){ return true; @@ -80,6 +91,15 @@ public class BeamDrill extends Block{ Draw.rect(topRegion, plan.drawx(), plan.drawy(), plan.rotation * 90); } + @Override + public void setStats(){ + super.setStats(); + + if(optionalBoostIntensity != 1){ + stats.add(Stat.boostEffect, optionalBoostIntensity, StatUnit.timesSpeed); + } + } + @Override public void drawPlace(int x, int y, int rotation, boolean valid){ Item item = null, invalidItem = null; @@ -166,6 +186,7 @@ public class BeamDrill extends Block{ public float time; public float warmup; + public float lastDrillSpeed; @Override public void drawSelect(){ @@ -188,7 +209,7 @@ public class BeamDrill extends Block{ warmup = Mathf.approachDelta(warmup, Mathf.num(consValid()), 1f / 60f); lastItem = null; boolean multiple = false; - int dx = Geometry.d4x(rotation), dy = Geometry.d4y(rotation); + int dx = Geometry.d4x(rotation), dy = Geometry.d4y(rotation), facingAmount = 0; //update facing tiles for(int p = 0; p < size; p++){ @@ -201,6 +222,7 @@ public class BeamDrill extends Block{ if(other.solid()){ Item drop = other.wallDrop(); if(drop != null && drop.hardness <= tier){ + facingAmount ++; if(lastItem != drop && lastItem != null){ multiple = true; } @@ -220,7 +242,15 @@ public class BeamDrill extends Block{ lastItem = null; } - time += edelta(); + float multiplier = 1f; + + if(cons.optionalValid()){ + multiplier *= optionalBoostIntensity; + } + + lastDrillSpeed = (facingAmount * multiplier * timeScale) / drillTime; + + time += edelta() * multiplier; if(time >= drillTime){ for(Tile tile : facing){