Implemented more armor blocks and liquid router

This commit is contained in:
Anuken
2017-09-21 22:56:53 -04:00
parent 41c6f90ca3
commit 465c4b39f3
12 changed files with 215 additions and 114 deletions

View File

@@ -14,6 +14,8 @@ public enum Recipe{
ironwall(distribution, Blocks.ironwall, stack(Item.iron, 5)),
steelwall(distribution, Blocks.steelwall, stack(Item.steel, 5)),
titaniumwall(distribution, Blocks.titaniumwall, stack(Item.titanium, 5)),
duriumwall(distribution, Blocks.diriumwall, stack(Item.dirium, 5)),
compositewall(distribution, Blocks.compositewall, stack(Item.dirium, 5), stack(Item.titanium, 5), stack(Item.steel, 5), stack(Item.iron, 5)),
conveyor(distribution, ProductionBlocks.conveyor, stack(Item.stone, 1)),
fastconveyor(distribution, ProductionBlocks.steelconveyor, stack(Item.steel, 1)),
router(distribution, ProductionBlocks.router, stack(Item.stone, 3)),
@@ -43,8 +45,11 @@ public enum Recipe{
coalpurifier(production, ProductionBlocks.coalpurifier, stack(Item.steel, 20), stack(Item.iron, 20)),
conduit(distribution, ProductionBlocks.conduit, stack(Item.steel, 1)),
liquidrouter(distribution, ProductionBlocks.liquidrouter, stack(Item.steel, 5)),
pump(production, ProductionBlocks.pump, stack(Item.steel, 20));
public Block result;
public ItemStack[] requirements;
public Section section;

View File

@@ -108,7 +108,15 @@ public class Blocks{
}},
titaniumwall = new Wall("titaniumwall"){{
health = 140;
health = 150;
formalName = "titanium wall";
}},
diriumwall = new Wall("duriumwall"){{
health = 190;
formalName = "dirium wall";
}},
compositewall = new Wall("compositewall"){{
health = 270;
formalName = "composite wall";
}};
}

View File

@@ -1,10 +1,6 @@
package io.anuke.mindustry.world.blocks;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.Inventory;
import io.anuke.mindustry.Renderer;
import io.anuke.mindustry.Vars;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.resource.Liquid;
@@ -43,6 +39,10 @@ public class ProductionBlocks{
}},
liquidrouter = new LiquidRouter("liquidrouter"){{
}},
conveyor = new Conveyor("conveyor"){{
}},
@@ -53,49 +53,7 @@ public class ProductionBlocks{
formalName = "steel conveyor";
}},
router = new Block("router"){
private ObjectMap<Tile, Byte> lastmap = new ObjectMap<>();
int maxitems = 20;
{
update = true;
solid = true;
}
@Override
public void update(Tile tile){
if(Timers.get(tile, 2) && tile.entity.totalItems() > 0){
if(lastmap.get(tile, (byte)-1) != tile.rotation)
tryDump(tile, tile.rotation, null);
tile.rotation ++;
tile.rotation %= 4;
}
}
@Override
public void handleItem(Tile tile, Item item, Tile source){
super.handleItem(tile, item, source);
lastmap.put(tile, (byte)tile.relativeTo(source.x, source.y));
}
@Override
public boolean accept(Item item, Tile dest, Tile source){
int items = dest.entity.totalItems();
return items < maxitems;
}
@Override
public void drawPixelOverlay(Tile tile){
float fract = (float)tile.entity.totalItems()/maxitems;
Renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 13, fract);
}
@Override
public String description(){
return "Split input materials into 3 directions.";
}
router = new Router("router"){
},
junction = new Block("junction"){

View File

@@ -75,7 +75,7 @@ public class Conduit extends Block{
if(flow <= 0f || entity.liquidAmount < flow) return;
if(other.acceptLiquid(next, tile, liquid, flow)){
other.addLiquid(next, tile, liquid, flow);
other.handleLiquid(next, tile, liquid, flow);
entity.liquidAmount -= flow;
}
}
@@ -87,7 +87,7 @@ public class Conduit extends Block{
return entity.liquidAmount + amount < liquidCapacity && (entity.liquid == liquid || entity.liquidAmount <= 0.01f);
}
public void addLiquid(Tile tile, Tile source, Liquid liquid, float amount){
public void handleLiquid(Tile tile, Tile source, Liquid liquid, float amount){
ConduitEntity entity = tile.entity();
entity.liquid = liquid;
entity.liquidAmount += amount;

View File

@@ -0,0 +1,51 @@
package io.anuke.mindustry.world.blocks.types;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.resource.Liquid;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Draw;
import io.anuke.ucore.core.Timers;
public class LiquidRouter extends Conduit{
private ObjectMap<Tile, Byte> lastmap = new ObjectMap<>();
public LiquidRouter(String name) {
super(name);
rotate = false;
solid = true;
}
@Override
public void update(Tile tile){
ConduitEntity entity = tile.entity();
if(Timers.get(tile, 2) && entity.liquidAmount > 0){
if(lastmap.get(tile, (byte)-1) != tile.rotation){
tryMoveLiquid(tile, tile.getNearby()[tile.rotation]);
}
tile.rotation ++;
tile.rotation %= 4;
}
}
@Override
public void handleLiquid(Tile tile, Tile source, Liquid liquid, float amount){
super.handleLiquid(tile, source, liquid, amount);
lastmap.put(tile, (byte)tile.relativeTo(source.x, source.y));
}
@Override
public void draw(Tile tile){
ConduitEntity entity = tile.entity();
Draw.rect(name(), tile.worldx(), tile.worldy());
Draw.color(Color.ROYAL);
Draw.alpha(entity.liquidAmount / liquidCapacity);
Draw.rect("blank", tile.worldx(), tile.worldy(), 2, 2);
Draw.color();
}
}

View File

@@ -0,0 +1,58 @@
package io.anuke.mindustry.world.blocks.types;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.ObjectMap;
import io.anuke.mindustry.Renderer;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Timers;
public class Router extends Block{
private ObjectMap<Tile, Byte> lastmap = new ObjectMap<>();
int maxitems = 20;
public Router(String name) {
super(name);
update = true;
solid = true;
}
@Override
public void update(Tile tile){
if(Timers.get(tile, 2) && tile.entity.totalItems() > 0){
if(lastmap.get(tile, (byte)-1) != tile.rotation)
tryDump(tile, tile.rotation, null);
tile.rotation ++;
tile.rotation %= 4;
}
}
@Override
public void handleItem(Tile tile, Item item, Tile source){
super.handleItem(tile, item, source);
lastmap.put(tile, (byte)tile.relativeTo(source.x, source.y));
}
@Override
public boolean accept(Item item, Tile dest, Tile source){
int items = dest.entity.totalItems();
return items < maxitems;
}
@Override
public void drawPixelOverlay(Tile tile){
float fract = (float)tile.entity.totalItems()/maxitems;
Renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 13, fract);
}
@Override
public String description(){
return "Split input materials into 3 directions.";
}
}