Block display bar cleanup

This commit is contained in:
Anuken
2018-02-02 20:54:07 -05:00
parent aad61d94e6
commit d7dc46b5c0
19 changed files with 96 additions and 129 deletions

View File

@@ -1,9 +1,12 @@
package io.anuke.mindustry.ai;
import com.badlogic.gdx.ai.pfa.indexed.IndexedGraph;
/**An interface for an indexed graph that doesn't use allocations for connections.*/
public interface OptimizedGraph<N> extends IndexedGraph<N> {
public interface OptimizedGraph<N>{
/**This is used in the same way as getConnections(), but does not use Connection objects.*/
N[] connectionsOf(N node);
/** Returns the unique index of the given node.
* @param node the node whose index will be returned
* @return the unique index of the given node. */
int getIndex (N node);
}

View File

@@ -1,17 +1,10 @@
package io.anuke.mindustry.ai;
import com.badlogic.gdx.ai.pfa.Connection;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.world.Tile;
/**Tilegraph that ignores player-made tiles.*/
public class TileGraph implements OptimizedGraph<Tile> {
/**return nothing, as this isn't used*/
@Override
public Array<Connection<Tile>> getConnections(Tile fromNode){ return null; }
/**Used for the OptimizedPathFinder implementation.*/
@Override
public Tile[] connectionsOf(Tile node){
@@ -28,9 +21,4 @@ public class TileGraph implements OptimizedGraph<Tile> {
public int getIndex(Tile node){
return node.packedPosition();
}
@Override
public int getNodeCount(){
return world.width() * world.height();
}
}

View File

@@ -186,9 +186,7 @@ public class Control extends Module{
ui.restart.show();
Timers.runTask(30f, () -> {
state.set(State.menu);
});
Timers.runTask(30f, () -> state.set(State.menu));
});
}

View File

@@ -19,6 +19,7 @@ import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.input.InputHandler;
import io.anuke.mindustry.input.PlaceMode;
import io.anuke.mindustry.ui.fragments.ToolFragment;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.Blocks;
import io.anuke.mindustry.world.blocks.ProductionBlocks;
@@ -399,8 +400,27 @@ public class Renderer extends RendererModule{
if(tile.isLinked())
target = tile.getLinked();
if(target.entity != null)
drawHealth(target.drawx(), target.drawy() - 3f - target.block().height / 2f * tilesize, target.entity.health, target.entity.tile.block().health);
//if(target.entity != null)
// drawHealth(target.drawx(), target.drawy() - 3f - target.block().height / 2f * tilesize, target.entity.health, target.entity.tile.block().health);
if(target.entity != null) {
int bot = 0, top = 0;
for (BlockBar bar : tile.block().bars) {
float offset = Mathf.sign(bar.top) * (target.block().height / 2f * tilesize + 3f + 4f * ((bar.top ? top : bot))) +
(bar.top ? -1f : 0f);
float value = bar.value.get(target);
if(value <= -1f) continue;
drawBar(bar.color, target.drawx(), target.drawy() + offset, value);
if (bar.top)
top++;
else
bot++;
}
}
target.block().drawSelect(target);
}
@@ -434,6 +454,10 @@ public class Renderer extends RendererModule{
//TODO optimize!
public void drawBar(Color color, float x, float y, float fraction){
fraction = Mathf.clamp(fraction);
if(fraction > 0)
fraction = Mathf.clamp(fraction + 0.2f, 0.24f, 1f);
float len = 3;
float w = (int) (len * 2 * fraction) + 0.5f;

View File

@@ -291,7 +291,7 @@ public abstract class BulletType extends BaseBulletType<Bullet>{
Draw.reset();
}
},
flame = new BulletType(0.6f, 5){ //for turrets
flame = new BulletType(0.7f, 5){ //for turrets
public void draw(Bullet b){
Draw.color(Color.YELLOW, Color.SCARLET, b.time/lifetime);
float size = 6f-b.time/lifetime*5f;

View File

@@ -123,6 +123,10 @@ public class BlockLoader {
blockmap.put(defaultMap.get(string, -1), block);
}
for(Block block : Block.getAllBlocks()){
block.init();
}
Log.info("Total blocks loaded: {0}", Block.getAllBlocks().size);
}

View File

@@ -152,7 +152,6 @@ public class ChatFragment extends Table implements Fragment{
}
public void toggle(){
Log.info("open");
if(!chatOpen){
scene.setKeyboardFocus(chatfield);

View File

@@ -1,5 +1,6 @@
package io.anuke.mindustry.world;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
@@ -84,6 +85,8 @@ public class Block{
public Layer layer = null;
/**Extra layer to draw extra extra stuff on.*/
public Layer layer2 = null;
/**list of displayed block status bars. Defaults to health bar.*/
public Array<BlockBar> bars = Array.with(new BlockBar(Color.RED, false, tile -> tile.entity.health / (float)tile.block().health));
public Block(String name) {
this.name = name;
@@ -108,6 +111,7 @@ public class Block{
public void drawSelect(Tile tile){}
public void drawPlace(int x, int y, int rotation, boolean valid){}
public void placed(Tile tile){}
public void init(){}
public void tapped(Tile tile){}
public void buildTable(Tile tile, Table table) {}

View File

@@ -0,0 +1,19 @@
package io.anuke.mindustry.world;
import com.badlogic.gdx.graphics.Color;
public class BlockBar {
public final ValueSupplier value;
public final Color color;
public final boolean top;
public BlockBar(Color color, boolean top, ValueSupplier value) {
this.value = value;
this.color = color;
this.top = top;
}
public interface ValueSupplier{
float get(Tile tile);
}
}

View File

@@ -74,11 +74,12 @@ public class WeaponBlocks{
flameturret = new Turret("flameturret"){
{
range = 35f;
range = 45f;
reload = 5f;
bullet = BulletType.flame;
ammo = Item.coal;
health = 90;
inaccuracy = 4f;
}
},

View File

@@ -4,16 +4,13 @@ import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.util.Mathf;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import static io.anuke.mindustry.Vars.renderer;
import static io.anuke.mindustry.Vars.tilesize;
public abstract class PowerBlock extends Block implements PowerAcceptor{
public float powerCapacity = 10f;
public float voltage = 0.001f;
@@ -22,6 +19,8 @@ public abstract class PowerBlock extends Block implements PowerAcceptor{
super(name);
update = true;
solid = true;
bars.add(new BlockBar(Color.YELLOW, true, tile -> tile.<PowerEntity>entity().power / powerCapacity));
}
@Override
@@ -30,18 +29,6 @@ public abstract class PowerBlock extends Block implements PowerAcceptor{
list.add("[powerinfo]Power Capacity: " + powerCapacity);
}
@Override
public void drawSelect(Tile tile){
PowerEntity entity = tile.entity();
float fract = entity.power / powerCapacity;
if(fract > 0)
fract = Mathf.clamp(fract + 0.2f, 0.24f, 1f);
renderer.drawBar(Color.YELLOW, tile.drawx(),
tile.drawy() + tilesize * height/2f + 2, fract);
}
/**Tries adding all the power with no remainder, returns success.*/
public boolean tryAddPower(Tile tile, float amount){
PowerEntity entity = tile.entity();

View File

@@ -2,14 +2,13 @@ package io.anuke.mindustry.world.blocks.types.defense;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.types.PowerAcceptor;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
import java.io.DataInputStream;
@@ -23,6 +22,8 @@ public class PowerTurret extends Turret implements PowerAcceptor{
public PowerTurret(String name) {
super(name);
ammo = null;
bars.set(1, new BlockBar(Color.YELLOW, true, tile -> tile.<PowerTurretEntity>entity().power / powerCapacity));
}
@Override
@@ -37,18 +38,6 @@ public class PowerTurret extends Turret implements PowerAcceptor{
Draw.color(Color.GREEN);
Lines.dashCircle(tile.drawx(), tile.drawy(), range);
Draw.reset();
drawPowerBar(tile);
}
public void drawPowerBar(Tile tile){
PowerTurretEntity entity = tile.entity();
float fract = (float)entity.power / powerCapacity;
if(fract > 0)
fract = Mathf.clamp(fract, 0.24f, 1f);
renderer.drawBar(Color.YELLOW, tile.drawx(), tile.drawy() + 6, fract);
}
@Override

View File

@@ -75,8 +75,6 @@ public class RepairTurret extends PowerTurret{
Draw.color(Color.GREEN);
Lines.dashCircle(tile.worldx(), tile.worldy(), range);
Draw.reset();
drawPowerBar(tile);
}
@Override

View File

@@ -9,6 +9,7 @@ import io.anuke.mindustry.entities.enemies.Enemy;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Layer;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
@@ -56,6 +57,8 @@ public class Turret extends Block{
update = true;
solid = true;
layer = Layer.turret;
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.<TurretEntity>entity().ammo / maxammo));
}
@Override
@@ -101,14 +104,6 @@ public class Turret extends Block{
Draw.color(Color.GREEN);
Lines.dashCircle(tile.drawx(), tile.drawy(), range);
Draw.reset();
TurretEntity entity = tile.entity();
float fract = (float)entity.ammo/maxammo;
if(fract > 0)
fract = Mathf.clamp(fract, 0.24f, 1f);
renderer.drawBar(Color.GREEN, tile.drawx(), 2 + tile.drawy() + height/2f * tilesize, fract);
}
@Override

View File

@@ -2,10 +2,9 @@ package io.anuke.mindustry.world.blocks.types.distribution;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.util.Mathf;
@@ -18,6 +17,7 @@ public class Router extends Block{
super(name);
update = true;
solid = true;
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.totalItems()/capacity));
}
@Override
@@ -56,13 +56,5 @@ public class Router extends Block{
int items = tile.entity.totalItems();
return items < capacity;
}
@Override
public void drawSelect(Tile tile){
float fract = (float)tile.entity.totalItems()/capacity;
renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 6, fract);
}
}

View File

@@ -2,16 +2,14 @@ package io.anuke.mindustry.world.blocks.types.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
@@ -26,6 +24,8 @@ public class ItemPowerGenerator extends Generator{
public ItemPowerGenerator(String name) {
super(name);
outputOnly = true;
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.getItem(generateItem) / itemCapacity));
}
@Override
@@ -53,16 +53,6 @@ public class ItemPowerGenerator extends Generator{
}
}
@Override
public void drawSelect(Tile tile){
super.drawSelect(tile);
TileEntity entity = tile.entity;
//TODO maybe don't draw it due to clutter
renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 10, (float)entity.getItem(generateItem) / itemCapacity);
}
@Override
public boolean acceptItem(Item item, Tile tile, Tile source){
return item == generateItem && tile.entity.getItem(generateItem) < itemCapacity;

View File

@@ -2,11 +2,11 @@ package io.anuke.mindustry.world.blocks.types.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.resource.Liquid;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.types.LiquidBlock;
import io.anuke.ucore.core.Effects;
@@ -35,6 +35,8 @@ public class LiquidCrafter extends LiquidBlock{
solid = true;
health = 60;
liquidCapacity = 21f;
bars.add(new BlockBar(Color.GREEN, true, tile -> input == null ? -1f : (float)tile.entity.getItem(input) / itemCapacity));
}
@Override
@@ -79,15 +81,6 @@ public class LiquidCrafter extends LiquidBlock{
}
}
@Override
public void drawSelect(Tile tile){
if(input == null) return;
float fract = (float)tile.entity.getItem(input) / itemCapacity;
renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 6, fract);
}
@Override
public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){
return super.acceptLiquid(tile, source, liquid, amount) && liquid == inputLiquid;

View File

@@ -7,6 +7,7 @@ import io.anuke.mindustry.entities.effect.DamageArea;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.resource.Liquid;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
@@ -19,7 +20,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import static io.anuke.mindustry.Vars.*;
import static io.anuke.mindustry.Vars.tilesize;
public class NuclearReactor extends LiquidPowerGenerator{
protected final int timerFuel = timers++;
@@ -47,6 +48,9 @@ public class NuclearReactor extends LiquidPowerGenerator{
explosive = true;
powerCapacity = 80f;
powerSpeed = 0.5f;
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.getItem(generateItem) / itemCapacity));
bars.add(new BlockBar(Color.ORANGE, true, tile -> tile.<NuclearReactorEntity>entity().heat));
}
@Override
@@ -145,24 +149,6 @@ public class NuclearReactor extends LiquidPowerGenerator{
});
}
}
@Override
public void drawSelect(Tile tile){
super.drawSelect(tile);
NuclearReactorEntity entity = tile.entity();
renderer.drawBar(Color.GREEN, tile.drawx(), tile.drawy() + 6 +
height*tilesize/2f, (float)entity.getItem(generateItem) / itemCapacity);
Draw.reset();
float fract = entity.heat;
if(fract > 0)
fract = Mathf.clamp(fract + 0.2f, 0.24f, 1f);
renderer.drawBar(Color.ORANGE, tile.drawx(),
tile.drawy() + tilesize * height/2f + 10, fract);
}
@Override
public boolean acceptItem(Item item, Tile tile, Tile source){

View File

@@ -2,16 +2,16 @@ package io.anuke.mindustry.world.blocks.types.production;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Array;
import static io.anuke.mindustry.Vars.*;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.graphics.Fx;
import io.anuke.mindustry.resource.Item;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.BlockBar;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Strings;
@@ -36,6 +36,14 @@ public class Smelter extends Block{
update = true;
solid = true;
}
@Override
public void init(){
for(int i = 0; i < inputs.length; i ++){
final Item item = inputs[i];
bars.add(new BlockBar(Color.GREEN, true, tile -> (float)tile.entity.getItem(item)/capacity));
}
}
@Override
public void getStats(Array<String> list){
@@ -118,17 +126,6 @@ public class Smelter extends Block{
}
}
@Override
public void drawSelect(Tile tile){
//draw a separate bar for each requirement
for(int i = 0; i < inputs.length; i ++){
float fract = ((float)tile.entity.getItem(inputs[i]))/capacity;
renderer.drawBar(Color.GREEN, tile.worldx(), tile.worldy() + 6 + i*4, fract);
}
}
@Override
public TileEntity getEntity() {
return new CrafterEntity();