From 01b431801dcb183fff3ef93d05bc620ce2ecd589 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 2 Dec 2017 00:29:44 -0500 Subject: [PATCH] Increased number of save slots, UI colors tweaked --- .../sprites/ui/button-map-down.9.png | Bin 205 -> 207 bytes .../sprites/ui/button-map-over.9.png | Bin 205 -> 207 bytes core/assets/maps/caves.png | Bin 5492 -> 5397 bytes core/assets/maps/sinkhole.png | Bin 7589 -> 7466 bytes core/assets/maps/volcano.png | Bin 8966 -> 8100 bytes core/assets/ui/uiskin.json | 3 +- core/src/io/anuke/mindustry/Vars.java | 4 +- core/src/io/anuke/mindustry/core/Control.java | 12 ++- core/src/io/anuke/mindustry/core/UI.java | 9 +- .../anuke/mindustry/entities/effect/Fx.java | 10 ++ .../io/anuke/mindustry/ui/FloatingDialog.java | 4 +- .../io/anuke/mindustry/ui/LevelDialog.java | 4 +- .../src/io/anuke/mindustry/ui/LoadDialog.java | 24 ++++- .../mindustry/ui/MindustryKeybindDialog.java | 4 +- .../mindustry/ui/MindustrySettingsDialog.java | 4 +- .../io/anuke/mindustry/world/Generator.java | 4 +- core/src/io/anuke/mindustry/world/Tile.java | 1 + core/src/io/anuke/mindustry/world/World.java | 18 ++++ .../types/distribution/PowerBooster.java | 51 ++++++++++ .../blocks/types/production/Generator.java | 87 +++++++----------- 20 files changed, 161 insertions(+), 78 deletions(-) diff --git a/core/assets-raw/sprites/ui/button-map-down.9.png b/core/assets-raw/sprites/ui/button-map-down.9.png index 2b8810da55573d6c478b98a363e97af79ac5f9dc..00441b4c4c1968dad01da20619ae9260cea517d2 100644 GIT binary patch delta 101 zcmX@hc%E^B11}E~E3+lfwK!b{28O(ezNWs0lae2_7_9rhxX>i);tJQrV!cra#vbVj yJvXE#?vQF)>}bA6nECMDOU28Nu8zNX$2Qy;V#th;C-wKe0)qQGu9T?FG9uZLSs wuSX2;!HWx|?{zjly!SYKv7>pG;9mxY`expb2TtyO2{eYm)78&qol`;+08P~=kN^Mx diff --git a/core/assets-raw/sprites/ui/button-map-over.9.png b/core/assets-raw/sprites/ui/button-map-over.9.png index aae6c254f3ee60c6174017088cfa2aa191e7d4b8..d16031fafa7a7599ab702dd9f62b570092edf462 100644 GIT binary patch delta 101 zcmX@hc%E^B11}E~E3-*ay3zy&28O(ezNWs0lae2_7_9rhxX>i);tJQrV!cra#vbVj yJvXE#?vQF)>}bA6nECMDFDI-3 delta 99 zcmX@lc$RU3123n90GC3@HIXe03=BCFeNDY5raovfSa;DvYHP-oMSmdKI;Vst0B(UN@c;k- diff --git a/core/assets/maps/caves.png b/core/assets/maps/caves.png index 9ddb274fbfde04b8ede5aca589cadd4ac23e2717..1f8e2f66d80db15906494ad4f04721f8bcb4080d 100644 GIT binary patch delta 5172 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 O05CVTGN~|fjr||*&7!IR delta 5240 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 delta 7137 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 XRh}VhauH>y00000NkvXXu0mjfv6z3$ diff --git a/core/assets/maps/volcano.png b/core/assets/maps/volcano.png index ec51f382af53b7d6bc6ef9391d1519b58802438a..97aca5a6ade1825e21f7ccd43435f35792ff1b0e 100644 GIT binary patch literal 8100 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 z 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 gGP?5@`7c2H4i~F98D spawnpoints = new Array<>(); + boolean shouldUpdateItems = false; float respawntime; @@ -399,7 +400,7 @@ public class Control extends Module{ public void addItem(Item item, int amount){ items.put(item, items.get(item, 0)+amount); - ui.updateItems(); + shouldUpdateItems = true; } public boolean hasItems(ItemStack[] items){ @@ -415,13 +416,13 @@ public class Control extends Module{ public void removeItem(ItemStack req){ items.put(req.item, items.get(req.item, 0)-req.amount); - ui.updateItems(); + shouldUpdateItems = true; } public void removeItems(ItemStack... reqs){ for(ItemStack req : reqs) items.put(req.item, items.get(req.item, 0)-req.amount); - ui.updateItems(); + shouldUpdateItems = true; } public ObjectMap getItems(){ @@ -471,6 +472,11 @@ public class Control extends Module{ } } + if(shouldUpdateItems && Timers.get("updateItems", 8)){ + ui.updateItems(); + shouldUpdateItems = false; + } + if(!GameState.is(State.menu)){ if(Inputs.keyUp("pause") && (GameState.is(State.paused) || GameState.is(State.playing))){ diff --git a/core/src/io/anuke/mindustry/core/UI.java b/core/src/io/anuke/mindustry/core/UI.java index 83531cab22..cf96f2fc41 100644 --- a/core/src/io/anuke/mindustry/core/UI.java +++ b/core/src/io/anuke/mindustry/core/UI.java @@ -97,6 +97,7 @@ public class UI extends SceneModule{ Colors.put("missingitems", Color.SCARLET); Colors.put("health", Color.YELLOW); Colors.put("interact", Color.ORANGE); + Colors.put("accent", Color.valueOf("f4ba6e")); } protected void loadSkin(){ @@ -259,14 +260,14 @@ public class UI extends SceneModule{ loadingtable = new table("loadDim"){{ get().setTouchable(Touchable.enabled); get().addImage("white").growX() - .height(3f).pad(4f).growX().units(Unit.dp).get().setColor(Color.ORANGE); + .height(3f).pad(4f).growX().units(Unit.dp).get().setColor(Colors.get("accent")); row(); - new label("[orange]Loading..."){{ + new label("[accent]Loading..."){{ get().setName("namelabel"); }}.pad(10).units(Unit.dp); row(); get().addImage("white").growX() - .height(3f).pad(4f).growX().units(Unit.dp).get().setColor(Color.ORANGE); + .height(3f).pad(4f).growX().units(Unit.dp).get().setColor(Colors.get("accent")); }}.end().get(); loadingtable.setVisible(false); @@ -323,7 +324,7 @@ public class UI extends SceneModule{ } public void showLoading(){ - showLoading("[orange]Loading.."); + showLoading("[accent]Loading.."); } public void showLoading(String text){ diff --git a/core/src/io/anuke/mindustry/entities/effect/Fx.java b/core/src/io/anuke/mindustry/entities/effect/Fx.java index e6e8cc3d28..448f168fae 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Fx.java +++ b/core/src/io/anuke/mindustry/entities/effect/Fx.java @@ -143,6 +143,16 @@ public class Fx{ }); }), + laserspark = new Effect(14, e -> { + Angles.randLenVectors(e.id, 8, 1f + e.ifract()*11f, (x, y)->{ + float len = 1f+e.fract()*5f; + Draw.color(Color.WHITE, Color.CORAL, e.ifract()); + Draw.alpha(e.ifract()/1.3f); + Draw.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), len); + Draw.reset(); + }); + }), + shellsmoke = new Effect(20, e -> { Angles.randLenVectors(e.id, 8, 3f + e.ifract()*17f, (x, y)->{ float size = 2f+e.fract()*5f; diff --git a/core/src/io/anuke/mindustry/ui/FloatingDialog.java b/core/src/io/anuke/mindustry/ui/FloatingDialog.java index 559cfa63fe..66268d6b82 100644 --- a/core/src/io/anuke/mindustry/ui/FloatingDialog.java +++ b/core/src/io/anuke/mindustry/ui/FloatingDialog.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.ui; import com.badlogic.gdx.Input.Keys; -import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.utils.Align; import io.anuke.ucore.scene.ui.Dialog; @@ -14,7 +14,7 @@ public class FloatingDialog extends Dialog{ setFillParent(true); title().setAlignment(Align.center); getTitleTable().row(); - getTitleTable().addImage("white", Color.ORANGE) + getTitleTable().addImage("white", Colors.get("accent")) .growX().height(3f).pad(4f).units(Unit.dp); } diff --git a/core/src/io/anuke/mindustry/ui/LevelDialog.java b/core/src/io/anuke/mindustry/ui/LevelDialog.java index d29c01897c..180bc2469b 100644 --- a/core/src/io/anuke/mindustry/ui/LevelDialog.java +++ b/core/src/io/anuke/mindustry/ui/LevelDialog.java @@ -59,9 +59,9 @@ public class LevelDialog extends FloatingDialog{ } Table inset = new Table("pane-button"); - inset.add("[orange]"+map.name()).pad(3f).units(Unit.dp); + inset.add("[accent]"+map.name()).pad(3f).units(Unit.dp); inset.row(); - inset.add((StringSupplier)(()->"High Score: [orange]" + Settings.getInt("hiscore" + map.name()))) + inset.add((StringSupplier)(()->"High Score: [accent]" + Settings.getInt("hiscore" + map.name()))) .pad(3f).units(Unit.dp); inset.pack(); diff --git a/core/src/io/anuke/mindustry/ui/LoadDialog.java b/core/src/io/anuke/mindustry/ui/LoadDialog.java index 6f90cfc2f2..f1d8d69bfb 100644 --- a/core/src/io/anuke/mindustry/ui/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/LoadDialog.java @@ -8,13 +8,18 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.io.SaveIO; +import io.anuke.ucore.core.Core; +import io.anuke.ucore.core.Timers; import io.anuke.ucore.scene.ui.Label; +import io.anuke.ucore.scene.ui.ScrollPane; import io.anuke.ucore.scene.ui.TextButton; +import io.anuke.ucore.scene.ui.layout.Table; import io.anuke.ucore.scene.ui.layout.Unit; //TODO unified save/load dialogs public class LoadDialog extends FloatingDialog{ - + ScrollPane pane; + public LoadDialog(){ this("Load Game"); } @@ -26,6 +31,7 @@ public class LoadDialog extends FloatingDialog{ shown(() -> { setup(); + Timers.runTask(2f, ()-> Core.scene.setScrollFocus(pane)); }); addCloseButton(); @@ -36,12 +42,18 @@ public class LoadDialog extends FloatingDialog{ content().add("Select a save slot.").padBottom(2); content().row(); + + Table slots = new Table(); + pane = new ScrollPane(slots); + pane.setFadeScrollBars(false); + + slots.padRight(Unit.dp.inPixels(24)); for(int i = 0; i < Vars.saveSlots; i++){ final int slot = i; TextButton button = new TextButton("[orange]Slot " + (i + 1)); - button.pad(Unit.dp.inPixels(10)); + button.pad(Unit.dp.inPixels(12)); button.getLabelCell().top().left().growX(); button.row(); @@ -51,16 +63,18 @@ public class LoadDialog extends FloatingDialog{ ", Wave " + SaveIO.getWave(slot) + "\nLast Saved: " + SaveIO.getTimeString(i))); info.setAlignment(Align.center, Align.center); - button.add(info).padBottom(2).padTop(6); + button.add(info).padBottom(3).padTop(7); button.row(); //button.addImage("white", Color.GRAY) //.growX().height(3f).pad(4f).units(Unit.dp); button.row(); modifyButton(button, slot); - content().add(button).size(400, 86).units(Unit.dp).pad(2); - content().row(); + slots.add(button).size(404, 104).pad(4).units(Unit.dp); + slots.row(); } + + content().add(pane); } diff --git a/core/src/io/anuke/mindustry/ui/MindustryKeybindDialog.java b/core/src/io/anuke/mindustry/ui/MindustryKeybindDialog.java index 03aa115db4..928dd32644 100644 --- a/core/src/io/anuke/mindustry/ui/MindustryKeybindDialog.java +++ b/core/src/io/anuke/mindustry/ui/MindustryKeybindDialog.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.ui; import com.badlogic.gdx.Input.Keys; -import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.utils.Align; import io.anuke.ucore.scene.ui.Image; @@ -17,7 +17,7 @@ public class MindustryKeybindDialog extends KeybindDialog{ title().setAlignment(Align.center); getTitleTable().row(); getTitleTable().add(new Image("white")) - .growX().height(3f).pad(4f).units(Unit.dp).get().setColor(Color.ORANGE); + .growX().height(3f).pad(4f).units(Unit.dp).get().setColor(Colors.get("accent")); } @Override diff --git a/core/src/io/anuke/mindustry/ui/MindustrySettingsDialog.java b/core/src/io/anuke/mindustry/ui/MindustrySettingsDialog.java index f44cb95fb9..a22b4426d5 100644 --- a/core/src/io/anuke/mindustry/ui/MindustrySettingsDialog.java +++ b/core/src/io/anuke/mindustry/ui/MindustrySettingsDialog.java @@ -1,7 +1,7 @@ package io.anuke.mindustry.ui; import com.badlogic.gdx.Input.Keys; -import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.Colors; import com.badlogic.gdx.utils.Align; import io.anuke.ucore.scene.ui.Image; @@ -15,7 +15,7 @@ public class MindustrySettingsDialog extends SettingsDialog{ title().setAlignment(Align.center); getTitleTable().row(); getTitleTable().add(new Image("white")) - .growX().height(3f).pad(4f).units(Unit.dp).get().setColor(Color.ORANGE); + .growX().height(3f).pad(4f).units(Unit.dp).get().setColor(Colors.get("accent")); } @Override diff --git a/core/src/io/anuke/mindustry/world/Generator.java b/core/src/io/anuke/mindustry/world/Generator.java index 626be9cfc4..a1b29667be 100644 --- a/core/src/io/anuke/mindustry/world/Generator.java +++ b/core/src/io/anuke/mindustry/world/Generator.java @@ -77,7 +77,7 @@ public class Generator{ } if(floor == Blocks.stone || floor == Blocks.grass || floor == Blocks.blackstone || - floor == Blocks.snow){ + floor == Blocks.snow || floor == Blocks.sand){ if(Noise.nnoise(x, y, 8, 1) > 0.2){ floor = Blocks.iron; } @@ -107,7 +107,7 @@ public class Generator{ floor = Blocks.sand; } - if(floor == Blocks.grass && Mathf.chance(0.02) && block == Blocks.air){ + if(floor == Blocks.grass && Mathf.chance(0.03) && block == Blocks.air){ block = Blocks.shrub; } diff --git a/core/src/io/anuke/mindustry/world/Tile.java b/core/src/io/anuke/mindustry/world/Tile.java index 4f28bcaf75..a50e69984e 100644 --- a/core/src/io/anuke/mindustry/world/Tile.java +++ b/core/src/io/anuke/mindustry/world/Tile.java @@ -53,6 +53,7 @@ public class Tile{ return Bits.getLeftByte(blocks); } + /**Return relative rotation to a coordinate. Returns -1 if the coordinate is not near this tile.*/ public int relativeTo(int cx, int cy){ if(x == cx && y == cy - 1) return 1; if(x == cx && y == cy + 1) return 3; diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index e2891fd724..a5481b99b1 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -12,6 +12,8 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.ai.Pathfind; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.entities.effect.Fx; +import io.anuke.mindustry.resource.ItemStack; +import io.anuke.mindustry.resource.Recipe; import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Sounds; @@ -320,6 +322,22 @@ public class World extends Module{ if(tile == null) return; + Block block = tile.block(); + Recipe result = null; + + for(Recipe recipe : Recipe.values()){ + if(recipe.result == block){ + result = recipe; + break; + } + } + + if(result != null){ + for(ItemStack stack : result.requirements){ + Vars.control.addItem(stack.item, (int)(stack.amount * Vars.breakDropAmount)); + } + } + if(tile.block().drops != null){ Vars.control.addItem(tile.block().drops.item, tile.block().drops.amount); } 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 5f596b0edd..d06b209818 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,9 +1,14 @@ package io.anuke.mindustry.world.blocks.types.distribution; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.world.Tile; +import io.anuke.mindustry.world.blocks.types.PowerAcceptor; import io.anuke.mindustry.world.blocks.types.production.Generator; +import io.anuke.ucore.core.Timers; +import io.anuke.ucore.util.Mathf; public class PowerBooster extends Generator{ @@ -11,6 +16,7 @@ public class PowerBooster extends Generator{ super(name); drawRadius = true; explosive = false; + hasLasers = false; } @Override @@ -33,4 +39,49 @@ public class PowerBooster extends Generator{ return entity.power + 0.001f <= powerCapacity; } + + //TODO better distribution + protected void distributePower(Tile tile){ + if(!Timers.get(tile, "generate", powerTime)){ + return; + } + + PowerEntity p = tile.entity(); + + 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++){ + + if(x == 0 && y == 0){ + continue; + } + + if(Vector2.dst(x, y, 0, 0) < powerRange){ + Tile dest = Vars.world.tile(tile.x + x, tile.y + y); + if(dest != null && dest.block() instanceof PowerAcceptor && ((PowerAcceptor) dest.block()).acceptsPower(dest)){ + if(i == 1){ + PowerAcceptor block = (PowerAcceptor) dest.block(); + + float transmission = Math.min(flow, p.power); + + float amount = block.addPower(dest, transmission); + p.power -= amount; + }else{ + acceptors++; + } + } + } + } + } + + //TODO better distribution scheme + if(i == 0 && acceptors > 0){ + flow = Mathf.clamp(p.power / acceptors, 0f, powerSpeed / acceptors); + } + } + } } 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 fecfec5056..3f8a040353 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 @@ -25,6 +25,7 @@ public class Generator extends PowerBlock{ public float powerSpeed = 0.06f; public boolean explosive = true; public boolean drawRadius = false; + public boolean hasLasers = true; public Generator(String name) { super(name); @@ -80,7 +81,7 @@ public class Generator extends PowerBlock{ if(entity.power > powerSpeed){ Draw.alpha(1f); }else{ - Draw.alpha(0.75f); + Draw.alpha(0.5f); } for(int i = 0; i < laserDirections; i++){ @@ -97,9 +98,10 @@ public class Generator extends PowerBlock{ PowerEntity entity = tile.entity(); for(int i = 0; i < laserDirections; i++){ - Tile target = laserTarget(tile, (tile.getRotation() + i) - laserDirections/2); + int rot = (tile.getRotation() + i) - laserDirections/2; + Tile target = laserTarget(tile, rot); - if(target == null) continue; + if(target == null || isInterfering(target, rot)) continue; PowerAcceptor p = (PowerAcceptor) target.block(); if(p.acceptsPower(target) && entity.power >= powerSpeed){ @@ -108,7 +110,6 @@ public class Generator extends PowerBlock{ } } - } protected void drawLaserTo(Tile tile, int rotation){ @@ -116,19 +117,42 @@ public class Generator extends PowerBlock{ Tile target = laserTarget(tile, rotation); if(target != null){ - Tmp.v1.set(Angles.translation(rotation * 90, target.block().width * Vars.tilesize/2 + 2f)); + boolean interfering = isInterfering(target, rotation); + + Tmp.v1.set(Angles.translation(rotation * 90, target.block().width * Vars.tilesize/2 + 2f + + (interfering ? + Vector2.dst(tile.worldx(), tile.worldy(), target.worldx(), target.worldy()) / 2f - Vars.tilesize/2f - 1 : 0))); + Angles.translation(rotation * 90, width * Vars.tilesize/2 + 2f); - Draw.tint(Hue.mix(Color.GRAY, Color.WHITE, 0.902f + Mathf.sin(Timers.time(), 1.7f, 0.08f))); + if(!interfering){ + Draw.tint(Hue.mix(Color.GRAY, Color.WHITE, 0.904f + Mathf.sin(Timers.time(), 1.7f, 0.06f))); + }else{ + Draw.tint(Hue.mix(Color.SCARLET, Color.WHITE, 0.902f + Mathf.sin(Timers.time(), 1.7f, 0.08f))); + if(Mathf.chance(Timers.delta() * 0.033)){ + Effects.effect(Fx.laserspark, target.worldx() - Tmp.v1.x, target.worldy() - Tmp.v1.y); + } + } + + float r = interfering ? 0.8f : 0f; - float r = 0f; - - Draw.laser("laser", "laserend", tile.worldx() + Angles.x() + Mathf.range(r), tile.worldy() + Angles.y() + Mathf.range(r), + Draw.laser("laser", "laserend", tile.worldx() + Angles.x(), tile.worldy() + Angles.y(), target.worldx() - Tmp.v1.x + Mathf.range(r), target.worldy() - Tmp.v1.y + Mathf.range(r), 0.7f + Mathf.sin(Timers.time(), 2f, 0.1f * 0)); Draw.color(); } } + + protected boolean isInterfering(Tile target, int rotation){ + if(target.block() instanceof Generator){ + Generator other = (Generator)target.block(); + int relrot = (rotation + 2) % 4; + 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) @@ -150,50 +174,5 @@ public class Generator extends PowerBlock{ } return null; } - - //TODO better distribution - protected void distributePower(Tile tile){ - if(!Timers.get(tile, "generate", powerTime)){ - return; - } - - PowerEntity p = tile.entity(); - - 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++){ - - if(x == 0 && y == 0){ - continue; - } - - if(Vector2.dst(x, y, 0, 0) < powerRange){ - Tile dest = Vars.world.tile(tile.x + x, tile.y + y); - if(dest != null && dest.block() instanceof PowerAcceptor && ((PowerAcceptor) dest.block()).acceptsPower(dest)){ - if(i == 1){ - PowerAcceptor block = (PowerAcceptor) dest.block(); - - float transmission = Math.min(flow, p.power); - - float amount = block.addPower(dest, transmission); - p.power -= amount; - }else{ - acceptors++; - } - } - } - } - } - - //TODO better distribution scheme - if(i == 0 && acceptors > 0){ - flow = Mathf.clamp(p.power / acceptors, 0f, powerSpeed / acceptors); - } - } - } }