Added PowerType enum

This commit is contained in:
Anuken
2018-09-19 10:07:33 -04:00
parent af5b579a2f
commit 17cea4e274
6 changed files with 33 additions and 11 deletions

View File

@@ -12,6 +12,7 @@ import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.consumers.ConsumeItem; import io.anuke.mindustry.world.consumers.ConsumeItem;
import io.anuke.mindustry.world.consumers.ConsumeLiquid; import io.anuke.mindustry.world.consumers.ConsumeLiquid;
import io.anuke.mindustry.world.consumers.Consumers; import io.anuke.mindustry.world.consumers.Consumers;
import io.anuke.mindustry.world.meta.PowerType;
import io.anuke.mindustry.world.meta.Producers; import io.anuke.mindustry.world.meta.Producers;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
@@ -25,7 +26,7 @@ public abstract class BaseBlock extends MappableContent{
public boolean outputsLiquid = false; public boolean outputsLiquid = false;
public boolean singleLiquid = true; public boolean singleLiquid = true;
public boolean outputsPower = false; public PowerType powerType = PowerType.consumer;
public int itemCapacity; public int itemCapacity;
public float liquidCapacity = 10f; public float liquidCapacity = 10f;

View File

@@ -141,7 +141,7 @@ public class Block extends BaseBlock {
public void updatePowerGraph(Tile tile){ public void updatePowerGraph(Tile tile){
TileEntity entity = tile.entity(); TileEntity entity = tile.entity();
for(Tile other : entity.proximity()){ for(Tile other : getPowerConnections(tile, tempTiles)){
if(other.entity.power != null){ if(other.entity.power != null){
other.entity.power.graph.add(entity.power.graph); other.entity.power.graph.add(entity.power.graph);
} }
@@ -152,6 +152,16 @@ public class Block extends BaseBlock {
tile.entity.power.graph.remove(tile); tile.entity.power.graph.remove(tile);
} }
public Array<Tile> getPowerConnections(Tile tile, Array<Tile> out){
out.clear();
for(Tile other : tile.entity.proximity()){
if(other.entity.power != null && !(powerType == PowerType.consumer && other.block().powerType == PowerType.consumer)){
out.add(other);
}
}
return out;
}
public boolean isLayer(Tile tile){ public boolean isLayer(Tile tile){
return true; return true;
} }

View File

@@ -2,12 +2,13 @@ package io.anuke.mindustry.world.blocks.power;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.PowerBlock; import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.mindustry.world.meta.PowerType;
public class PowerDistributor extends PowerBlock{ public class PowerDistributor extends PowerBlock{
public PowerDistributor(String name){ public PowerDistributor(String name){
super(name); super(name);
outputsPower = true; powerType = PowerType.producer;
} }
@Override @Override

View File

@@ -1,14 +1,17 @@
package io.anuke.mindustry.world.blocks.power; package io.anuke.mindustry.world.blocks.power;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectSet; import com.badlogic.gdx.utils.ObjectSet;
import com.badlogic.gdx.utils.Queue; import com.badlogic.gdx.utils.Queue;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.util.Log; import io.anuke.mindustry.world.meta.PowerType;
import static io.anuke.mindustry.Vars.threads; import static io.anuke.mindustry.Vars.threads;
public class PowerGraph{ public class PowerGraph{
private final static Queue<Tile> queue = new Queue<>(); private final static Queue<Tile> queue = new Queue<>();
private final static Array<Tile> outArray1 = new Array<>();
private final static Array<Tile> outArray2 = new Array<>();
private final ObjectSet<Tile> producers = new ObjectSet<>(); private final ObjectSet<Tile> producers = new ObjectSet<>();
private final ObjectSet<Tile> consumers = new ObjectSet<>(); private final ObjectSet<Tile> consumers = new ObjectSet<>();
@@ -71,12 +74,11 @@ public class PowerGraph{
public void add(Tile tile){ public void add(Tile tile){
tile.entity.power.graph = this; tile.entity.power.graph = this;
all.add(tile); all.add(tile);
if(tile.block().outputsPower){ if(tile.block().powerType == PowerType.producer){
producers.add(tile); producers.add(tile);
}else{ }else if(tile.block().powerType == PowerType.consumer){
consumers.add(tile); consumers.add(tile);
} }
Log.info("New graph: {0} produce {1} consume {2} total", producers.size, consumers.size, all.size);
} }
public void remove(Tile tile){ public void remove(Tile tile){
@@ -88,8 +90,8 @@ public class PowerGraph{
producers.remove(tile); producers.remove(tile);
consumers.remove(tile); consumers.remove(tile);
for(Tile other : tile.entity.proximity()){ for(Tile other : tile.block().getPowerConnections(tile, outArray1)){
if(other.entity.power == null || (other.entity.power != null && other.entity.power.graph != null)) continue; if(other.entity.power == null || other.entity.power.graph != null) continue;
PowerGraph graph = new PowerGraph(); PowerGraph graph = new PowerGraph();
queue.clear(); queue.clear();
queue.addLast(other); queue.addLast(other);
@@ -97,7 +99,7 @@ public class PowerGraph{
Tile child = queue.removeFirst(); Tile child = queue.removeFirst();
child.entity.power.graph = graph; child.entity.power.graph = graph;
add(child); add(child);
for(Tile next : child.entity.proximity()){ for(Tile next : child.block().getPowerConnections(child, outArray2)){
if(next != tile && next.entity.power != null && next.entity.power.graph == null){ if(next != tile && next.entity.power != null && next.entity.power.graph == null){
queue.addLast(next); queue.addLast(next);
} }

View File

@@ -13,6 +13,7 @@ import io.anuke.mindustry.world.Edges;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.PowerBlock; import io.anuke.mindustry.world.blocks.PowerBlock;
import io.anuke.mindustry.world.meta.BlockStat; import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.PowerType;
import io.anuke.mindustry.world.meta.StatUnit; import io.anuke.mindustry.world.meta.StatUnit;
import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Settings;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
@@ -49,7 +50,7 @@ public class PowerNode extends PowerBlock{
layer = Layer.power; layer = Layer.power;
powerCapacity = 5f; powerCapacity = 5f;
configurable = true; configurable = true;
outputsPower = true; powerType = PowerType.bridge;
} }
@Remote(targets = Loc.both, called = Loc.server, forward = true) @Remote(targets = Loc.both, called = Loc.server, forward = true)

View File

@@ -0,0 +1,7 @@
package io.anuke.mindustry.world.meta;
public enum PowerType{
consumer,
producer,
bridge
}