diff --git a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java index 0c07378e87..4e75d2e6f9 100644 --- a/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java +++ b/annotations/src/main/java/mindustry/annotations/impl/SerializeProcess.java @@ -21,7 +21,7 @@ public class SerializeProcess extends BaseProcessor{ /** Target class name. */ private static final String className = "Serialization"; /** Name of the base package to put all the generated classes. */ - private static final String data = "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"; + private static final String data = "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"; @Override public void process(RoundEnvironment env) throws Exception{ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 8eb97c7124..e1570ea8ef 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -655,6 +655,7 @@ setting.difficulty.name = Difficulty: setting.screenshake.name = Screen Shake setting.effects.name = Display Effects setting.destroyedblocks.name = Display Destroyed Blocks +setting.blockstatus.name = Display Block Status setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.coreselect.name = Allow Schematic Cores setting.sensitivity.name = Controller Sensitivity @@ -702,6 +703,7 @@ keybind.press = Press a key... keybind.press.axis = Press an axis or key... keybind.screenshot.name = Map Screenshot keybind.toggle_power_lines.name = Toggle Power Lasers +keybind.toggle_block_status.name = Toggle Block Statuses keybind.move_x.name = Move X keybind.move_y.name = Move Y keybind.mouse_move.name = Follow Mouse diff --git a/core/src/mindustry/entities/def/TileComp.java b/core/src/mindustry/entities/def/TileComp.java index 4ae1b85ab0..7e2198b65d 100644 --- a/core/src/mindustry/entities/def/TileComp.java +++ b/core/src/mindustry/entities/def/TileComp.java @@ -324,7 +324,6 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc{ } public void dumpLiquid(Liquid liquid){ - Array proximity = proximity(); int dump = rotation(); for(int i = 0; i < proximity.size; i++){ @@ -336,7 +335,7 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc{ float ofract = other.liquids().get(liquid) / other.block().liquidCapacity; float fract = liquids().get(liquid) / block.liquidCapacity; - if(ofract < fract) moveLiquid(other, (fract - ofract) * block.liquidCapacity / 2f, liquid); + if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / 2f, liquid); } } @@ -346,16 +345,14 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc{ return true; } - //TODO why does this exist? - /* - public void tryMoveLiquid(Tilec next, float amount, Liquid liquid){ + public void transferLiquid(Tilec next, float amount, Liquid liquid){ float flow = Math.min(next.block().liquidCapacity - next.liquids().get(liquid) - 0.001f, amount); - if(next.acceptLiquid(liquid, flow)){ - next.handleLiquid(liquid, flow); + if(next.acceptLiquid(this, liquid, flow)){ + next.handleLiquid(this, liquid, flow); liquids().remove(liquid, flow); } - }*/ + } public float moveLiquid(Tilec next, boolean leak, Liquid liquid){ return moveLiquid(next, leak ? 1.5f : 100, liquid); @@ -562,6 +559,19 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc{ return shouldConsume(); } + public void drawStatus(){ + if(block.consumes.any()){ + float brcx = tile.drawx() + (block.size * tilesize / 2f) - (tilesize / 2f); + float brcy = tile.drawy() - (block.size * tilesize / 2f) + (tilesize / 2f); + + Draw.color(Pal.gray); + Fill.square(brcx, brcy, 2.5f, 45); + Draw.color(cons.status().color); + Fill.square(brcx, brcy, 1.5f, 45); + Draw.color(); + } + } + public void drawLayer(){ } diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 31afa7744e..4122820f7e 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -33,8 +33,8 @@ public class BlockRenderer implements Disposable{ private FrameBuffer shadows = new FrameBuffer(2, 2); private FrameBuffer fog = new FrameBuffer(2, 2); private Array outArray2 = new Array<>(); - private Array outArray = new Array<>(); private Array shadowEvents = new Array<>(); + private boolean displayStatus = false; public BlockRenderer(){ @@ -177,6 +177,7 @@ public class BlockRenderer implements Disposable{ /** Process all blocks to draw. */ public void processBlocks(){ + displayStatus = Core.settings.getBool("blockstatus"); iterateidx = 0; int avgx = (int)(camera.position.x / tilesize); @@ -257,6 +258,7 @@ public class BlockRenderer implements Disposable{ } Block block = request.tile.block(); + boolean isEnd = (request.layer == Layer.block && block.layer == null) || request.layer == block.layer; if(request.layer == Layer.block){ block.drawBase(request.tile); @@ -274,6 +276,10 @@ public class BlockRenderer implements Disposable{ }else if(request.layer == block.layer2){ block.drawLayer2(request.tile); } + + if(isEnd && request.tile.entity != null && displayStatus && block.consumes.any()){ + request.tile.entity.drawStatus(); + } } } diff --git a/core/src/mindustry/input/Binding.java b/core/src/mindustry/input/Binding.java index 664c30a2cb..0648fc0a7a 100644 --- a/core/src/mindustry/input/Binding.java +++ b/core/src/mindustry/input/Binding.java @@ -47,7 +47,8 @@ public enum Binding implements KeyBind{ minimap(KeyCode.M), toggle_menus(KeyCode.C), screenshot(KeyCode.P), - toggle_power_lines(KeyCode.F7), + toggle_power_lines(KeyCode.F5), + toggle_block_status(KeyCode.F6), player_list(KeyCode.TAB, "multiplayer"), chat(KeyCode.ENTER), chat_history_prev(KeyCode.UP), diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 02d40f84ea..b3af0c6293 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -463,6 +463,10 @@ public class DesktopInput extends InputHandler{ mode = none; } + if(Core.input.keyTap(Binding.toggle_block_status)){ + Core.settings.putSave("blockstatus", !Core.settings.getBool("blockstatus")); + } + if(Core.input.keyTap(Binding.toggle_power_lines)){ if(Core.settings.getInt("lasersopacity") == 0){ Core.settings.put("lasersopacity", Core.settings.getInt("preferredlaseropacity", 100)); diff --git a/core/src/mindustry/maps/planet/TODOPlanetGenerator.java b/core/src/mindustry/maps/planet/TODOPlanetGenerator.java index a2f518d404..5379252665 100644 --- a/core/src/mindustry/maps/planet/TODOPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/TODOPlanetGenerator.java @@ -214,7 +214,7 @@ public class TODOPlanetGenerator extends PlanetGenerator{ FloatArray frequencies = new FloatArray(); for(int i = 0; i < ores.size; i++){ - frequencies.add(rand.random(-0.05f, 0.05f)); + frequencies.add(rand.random(-0.02f, 0.08f)); } pass((x, y) -> { diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 0515062d0c..7f3d886bf0 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -318,6 +318,7 @@ public class SettingsMenuDialog extends SettingsDialog{ graphics.checkPref("effects", true); graphics.checkPref("destroyedblocks", true); + graphics.checkPref("blockstatus", false); graphics.checkPref("playerchat", true); graphics.checkPref("minimap", !mobile); graphics.checkPref("position", false); diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index e30cb14e92..f9285e86e6 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -37,7 +37,7 @@ public class LiquidTurret extends Turret{ consumes.add(new ConsumeLiquidFilter(i -> ammoTypes.containsKey(i), 1f){ @Override public boolean valid(Tilec entity){ - return !((TurretEntity)entity).ammo.isEmpty(); + return entity.liquids().total() > 0.001f; } @Override diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index be4c0b48af..38c4e2381c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -254,7 +254,6 @@ public abstract class Turret extends Block{ if(alternate){ float i = (shotCounter % shots) - shots/2f + (((shots+1)%2) / 2f); - Log.info(i); tr.trns(rotation - 90, spread * i + Mathf.range(xRand), size * tilesize / 2); bullet(type, rotation + Mathf.range(inaccuracy)); diff --git a/core/src/mindustry/world/consumers/Consumers.java b/core/src/mindustry/world/consumers/Consumers.java index 4f0df357dc..a5aff9f277 100644 --- a/core/src/mindustry/world/consumers/Consumers.java +++ b/core/src/mindustry/world/consumers/Consumers.java @@ -16,6 +16,10 @@ public class Consumers{ public final Bits itemFilters = new Bits(Vars.content.items().size); public final Bits liquidfilters = new Bits(Vars.content.liquids().size); + public boolean any(){ + return results != null && results.length > 0; + } + public void init(){ results = Structs.filter(Consume.class, map, m -> m != null); optionalResults = Structs.filter(Consume.class, map, m -> m != null && m.isOptional()); diff --git a/core/src/mindustry/world/meta/BlockStatus.java b/core/src/mindustry/world/meta/BlockStatus.java new file mode 100644 index 0000000000..fa939ec8c7 --- /dev/null +++ b/core/src/mindustry/world/meta/BlockStatus.java @@ -0,0 +1,16 @@ +package mindustry.world.meta; + +import arc.graphics.*; +import mindustry.graphics.*; + +public enum BlockStatus{ + active(Color.valueOf("5ce677")), + noOutput(Color.orange), + noInput(Pal.remove); + + public final Color color; + + BlockStatus(Color color){ + this.color = color; + } +} diff --git a/core/src/mindustry/world/modules/ConsumeModule.java b/core/src/mindustry/world/modules/ConsumeModule.java index f67122eea9..67fc49a881 100644 --- a/core/src/mindustry/world/modules/ConsumeModule.java +++ b/core/src/mindustry/world/modules/ConsumeModule.java @@ -2,7 +2,8 @@ package mindustry.world.modules; import arc.util.io.*; import mindustry.gen.*; -import mindustry.world.consumers.Consume; +import mindustry.world.consumers.*; +import mindustry.world.meta.*; public class ConsumeModule extends BlockModule{ private boolean valid, optionalValid; @@ -12,6 +13,18 @@ public class ConsumeModule extends BlockModule{ this.entity = entity; } + public BlockStatus status(){ + if(!entity.shouldConsume()){ + return BlockStatus.noOutput; + } + + if(!valid || !entity.productionValid()){ + return BlockStatus.noInput; + } + + return BlockStatus.active; + } + public void update(){ //everything is valid here if(entity.tile().isEnemyCheat()){ diff --git a/gradle.properties b/gradle.properties index 5875b3b243..4383da152e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=c1e97cab1dd143cf49d3c694a6a2e150f742e291 +archash=0cae533620f20846febba83e19f531c337204d44