mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-04 15:27:19 +07:00
Improved stat system
This commit is contained in:
@ -22,11 +22,7 @@ import io.anuke.mindustry.input.CursorType;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.meta.BlockBars;
|
||||
import io.anuke.mindustry.world.meta.BlockFlag;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.meta.BlockStats;
|
||||
import io.anuke.mindustry.world.meta.*;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.graphics.Hue;
|
||||
@ -101,11 +97,11 @@ public class Block extends BaseBlock implements UnlockableContent{
|
||||
/**whether this block has instant transfer checking. used for calculations to prevent infinite loops.*/
|
||||
public boolean instantTransfer = false;
|
||||
/**The block group. Unless {@link #canReplace} is overriden, blocks in the same group can replace each other.*/
|
||||
public io.anuke.mindustry.world.meta.BlockGroup group = io.anuke.mindustry.world.meta.BlockGroup.none;
|
||||
public BlockGroup group = BlockGroup.none;
|
||||
/**list of displayed block status bars. Defaults to health bar.*/
|
||||
public io.anuke.mindustry.world.meta.BlockBars bars = new BlockBars();
|
||||
public BlockBars bars = new BlockBars();
|
||||
/**List of block stats.*/
|
||||
public io.anuke.mindustry.world.meta.BlockStats stats = new BlockStats();
|
||||
public BlockStats stats = new BlockStats();
|
||||
/**List of block flags. Used for AI indexing.*/
|
||||
public EnumSet<BlockFlag> flags;
|
||||
/**Whether to automatically set the entity to 'sleeping' when created.*/
|
||||
@ -218,12 +214,12 @@ public class Block extends BaseBlock implements UnlockableContent{
|
||||
}
|
||||
|
||||
public void setStats(){
|
||||
stats.add("size", size);
|
||||
stats.add("health", health);
|
||||
stats.add(BlockStat.size, "{0}x{0}", size);
|
||||
stats.add(BlockStat.health, health);
|
||||
|
||||
if(hasPower) stats.add("powercapacity", powerCapacity);
|
||||
if(hasLiquids) stats.add("liquidcapacity", liquidCapacity);
|
||||
if(hasItems) stats.add("capacity", itemCapacity);
|
||||
if(hasPower) stats.add(BlockStat.powerCapacity, powerCapacity);
|
||||
if(hasLiquids) stats.add(BlockStat.liquidCapacity, liquidCapacity);
|
||||
if(hasItems) stats.add(BlockStat.itemCapacity, itemCapacity);
|
||||
}
|
||||
|
||||
//TODO make this easier to config.
|
||||
|
@ -12,8 +12,8 @@ import io.anuke.ucore.graphics.Hue;
|
||||
import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
//TODO remove
|
||||
public class RepairTurret extends PowerTurret {
|
||||
protected float repairFrac = 1f / 135f;
|
||||
|
||||
@ -27,7 +27,7 @@ public class RepairTurret extends PowerTurret {
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
|
||||
stats.add("repairssecond", Strings.toFixed(60f/reload * repairFrac * 100, 1) + "%");
|
||||
//stats.add("repairssecond", Strings.toFixed(60f/reload * repairFrac * 100, 1) + "%");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -8,11 +8,11 @@ import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.entities.impl.BulletEntity;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import static io.anuke.mindustry.Vars.headless;
|
||||
import static io.anuke.mindustry.Vars.renderer;
|
||||
|
||||
//TODO remove
|
||||
public class ShieldBlock extends PowerBlock{
|
||||
public float shieldRadius = 40f;
|
||||
public float powerDrain = 0.005f;
|
||||
@ -29,9 +29,9 @@ public class ShieldBlock extends PowerBlock{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("powersecond", Strings.toFixed(powerDrain*60, 2));
|
||||
stats.add("powerdraindamage", Strings.toFixed(powerPerDamage, 2));
|
||||
stats.add("shieldradius", (int)shieldRadius);
|
||||
//stats.add("powersecond", Strings.toFixed(powerDrain*60, 2));
|
||||
//stats.add("powerdraindamage", Strings.toFixed(powerPerDamage, 2));
|
||||
//stats.add("shieldradius", (int)shieldRadius);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -6,11 +6,11 @@ import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import static io.anuke.mindustry.Vars.renderer;
|
||||
import static io.anuke.mindustry.Vars.tilesize;
|
||||
|
||||
//TODO remove
|
||||
public class ShieldedWallBlock extends PowerBlock{
|
||||
static final float hitTime = 18f;
|
||||
static final Color hitColor = Color.SKY.cpy().mul(1.2f);
|
||||
@ -44,7 +44,7 @@ public class ShieldedWallBlock extends PowerBlock{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("powerdraindamage", Strings.toFixed(powerPerDamage, 2));
|
||||
//stats.add("powerdraindamage", Strings.toFixed(powerPerDamage, 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,6 +16,7 @@ import io.anuke.mindustry.type.AmmoType;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Effects.Effect;
|
||||
import io.anuke.ucore.core.Graphics;
|
||||
@ -81,11 +82,10 @@ public abstract class Turret extends Block{
|
||||
if(ammo != null) stats.add("ammo", ammo);
|
||||
if(ammo != null) stats.add("ammocapacity", maxAmmo);
|
||||
if(ammo != null) stats.add("ammoitem", ammoMultiplier);*/
|
||||
stats.add("range", (int)range);
|
||||
stats.add("inaccuracy", (int)inaccuracy);
|
||||
//stats.add("damageshot", bullet.damage);
|
||||
stats.add("shotssecond", Strings.toFixed(60f/reload, 1));
|
||||
stats.add("shots", shots);
|
||||
stats.add(BlockStat.shootRange, (int)range);
|
||||
stats.add(BlockStat.inaccuracy, (int)inaccuracy);
|
||||
stats.add(BlockStat.reload, Strings.toFixed(60f/reload, 1));
|
||||
stats.add(BlockStat.shots, shots);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3,7 +3,7 @@ package io.anuke.mindustry.world.blocks.defense.turrets;
|
||||
import io.anuke.mindustry.type.AmmoType;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.defense.Turret;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
|
||||
public abstract class PowerTurret extends Turret {
|
||||
protected float powerUsed = 0.5f;
|
||||
@ -17,7 +17,8 @@ public abstract class PowerTurret extends Turret {
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("powershot", Strings.toFixed(powerUsed, 1));
|
||||
|
||||
stats.add(BlockStat.powerShot, powerUsed);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -7,8 +7,9 @@ import io.anuke.mindustry.entities.Unit;
|
||||
import io.anuke.mindustry.graphics.Layer;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.*;
|
||||
@ -43,6 +44,7 @@ public class Conveyor extends Block{
|
||||
group = BlockGroup.transportation;
|
||||
hasItems = true;
|
||||
autoSleep = true;
|
||||
itemCapacity = Math.round(tilesize/ itemSpace);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -51,7 +53,7 @@ public class Conveyor extends Block{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("itemspeedsecond", Strings.toFixed(speed * 60, 1));
|
||||
stats.add(BlockStat.itemSpeed, speed * 60);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,18 +1,17 @@
|
||||
package io.anuke.mindustry.world.blocks.power;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
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;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
@ -39,8 +38,9 @@ public class BurnerGenerator extends PowerGenerator {
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("powergenerationsecond", Strings.toFixed(powerOutput*60f, 2));
|
||||
stats.add("generationsecondsitem", Strings.toFixed(itemDuration/60f, 2));
|
||||
//TODO both of these depend on the item type, implement later
|
||||
//stats.add("powergenerationsecond", Strings.toFixed(powerOutput*60f, 2));
|
||||
//stats.add("generationsecondsitem", Strings.toFixed(itemDuration/60f, 2));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,7 +1,7 @@
|
||||
package io.anuke.mindustry.world.blocks.power;
|
||||
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.power.BurnerGenerator.BurnerEntity;
|
||||
@ -10,8 +10,8 @@ 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;
|
||||
|
||||
//TODO remove this class
|
||||
public class LiquidBurnerGenerator extends PowerGenerator {
|
||||
protected float minEfficiency = 0.2f;
|
||||
protected float powerPerLiquid = 0.13f;
|
||||
@ -29,8 +29,8 @@ public class LiquidBurnerGenerator extends PowerGenerator {
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("powerliquid", Strings.toFixed(powerPerLiquid, 2) + " power/liquid");
|
||||
stats.add("maxliquidsecond", Strings.toFixed(maxLiquidGenerate*60f, 2) + " liquid/s");
|
||||
//stats.add("powerliquid", Strings.toFixed(powerPerLiquid, 2) + " power/liquid");
|
||||
//stats.add("maxliquidsecond", Strings.toFixed(maxLiquidGenerate*60f, 2) + " liquid/s");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -2,20 +2,20 @@ package io.anuke.mindustry.world.blocks.power;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import io.anuke.mindustry.content.Items;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.entities.Damage;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.content.fx.ExplosionFx;
|
||||
import io.anuke.mindustry.entities.Damage;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
import io.anuke.ucore.util.Translator;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
@ -60,11 +60,8 @@ public class NuclearReactor extends LiquidBurnerGenerator {
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("inputitem", generateItem);
|
||||
stats.add("maxpowergenerationsecond", Strings.toFixed(powerMultiplier*60f, 2));
|
||||
|
||||
stats.remove("powerliquid");
|
||||
stats.remove("maxliquidsecond");
|
||||
stats.add(BlockStat.inputItem, generateItem.toString());
|
||||
stats.add(BlockStat.maxPowerGeneration, powerMultiplier*60f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -13,6 +13,7 @@ import io.anuke.mindustry.net.In;
|
||||
import io.anuke.mindustry.world.Edges;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
import io.anuke.ucore.core.Settings;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
@ -20,7 +21,6 @@ import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.graphics.Shapes;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
import io.anuke.ucore.util.Translator;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
@ -69,8 +69,8 @@ public class PowerDistributor extends PowerBlock{
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
|
||||
stats.add("lasertilerange", laserRange);
|
||||
stats.add("maxpowertransfersecond", Strings.toFixed(powerSpeed * 60, 2));
|
||||
stats.add(BlockStat.powerRange, laserRange);
|
||||
stats.add(BlockStat.powerTransferSpeed, powerSpeed * 60);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -4,21 +4,20 @@ import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.Liquids;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.graphics.Layer;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Effects.Effect;
|
||||
import io.anuke.ucore.core.Graphics;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
public class Drill extends Block{
|
||||
protected final static float hardnessDrillMultiplier = 50f;
|
||||
@ -105,8 +104,7 @@ public class Drill extends Block{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
//TODO this is misleading, change it
|
||||
stats.add("secondsitem", Strings.toFixed(drillTime/60, 1));
|
||||
//TODO add drill speed stats
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,22 +1,22 @@
|
||||
package io.anuke.mindustry.world.blocks.production;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.content.fx.Fx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
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;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
@ -56,10 +56,11 @@ public class GenericCrafter extends Block{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("maxitemssecond", Strings.toFixed(60f/craftTime, 1));
|
||||
if(inputLiquid != null) stats.add("inputliquid", inputLiquid + " x " + (int)(liquidUse * craftTime));
|
||||
if(inputItem != null) stats.add("inputitem", inputItem + " x " + inputItem.amount);
|
||||
stats.add("output", output);
|
||||
stats.add(BlockStat.craftSpeed, 60f/craftTime);
|
||||
stats.add(BlockStat.outputItem, output.toString());
|
||||
|
||||
if(inputLiquid != null) stats.add(BlockStat.inputLiquid, "{0} x {1}", inputLiquid, (int)(liquidUse * craftTime));
|
||||
if(inputItem != null) stats.add(BlockStat.inputItem, "{0} x {1}", inputItem, inputItem.amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,25 +1,26 @@
|
||||
package io.anuke.mindustry.world.blocks.production;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.PowerBlock;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
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.graphics.Fill;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class PowerSmelter extends PowerBlock {
|
||||
protected final int timerDump = timers++;
|
||||
@ -63,12 +64,13 @@ public class PowerSmelter extends PowerBlock {
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
//TODO input/outputs
|
||||
// stats.add("input", Arrays.toString(inputs));
|
||||
stats.add("powersecond", Strings.toFixed(powerUse *60f, 2));
|
||||
//stats.add("output", result);
|
||||
stats.add("maxoutputsecond", Strings.toFixed(60f/craftTime, 1));
|
||||
stats.add("inputcapacity", capacity);
|
||||
stats.add("outputcapacity", capacity);
|
||||
|
||||
stats.add(BlockStat.inputItems, Arrays.toString(inputs));
|
||||
stats.add(BlockStat.powerUse, powerUse * 60f);
|
||||
stats.add(BlockStat.outputItem, result.toString());
|
||||
stats.add(BlockStat.craftSpeed, 60f/craftTime);
|
||||
stats.add(BlockStat.inputItemCapacity, capacity);
|
||||
stats.add(BlockStat.outputItemCapacity, capacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -7,10 +7,10 @@ import io.anuke.mindustry.type.Liquid;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.LiquidBlock;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
public class Pump extends LiquidBlock{
|
||||
protected final Array<Tile> drawTiles = new Array<>();
|
||||
@ -34,7 +34,7 @@ public class Pump extends LiquidBlock{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("liquidsecond", Strings.toFixed(60f*pumpAmount, 1));
|
||||
stats.add(BlockStat.liquidOutput, 60f*pumpAmount);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,20 +1,20 @@
|
||||
package io.anuke.mindustry.world.blocks.production;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.content.fx.BlockFx;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.mindustry.world.meta.BlockStat;
|
||||
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.graphics.Fill;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@ -49,13 +49,14 @@ public class Smelter extends Block{
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
stats.add("input", Arrays.toString(inputs));
|
||||
stats.add("fuel", fuel);
|
||||
stats.add("output", result);
|
||||
stats.add("fuelduration", Strings.toFixed(burnDuration/60f, 1));
|
||||
stats.add("maxoutputsecond", Strings.toFixed(60f/craftTime, 1));
|
||||
stats.add("inputcapacity", capacity);
|
||||
stats.add("outputcapacity", capacity);
|
||||
|
||||
stats.add(BlockStat.inputFuel, fuel.toString());
|
||||
stats.add(BlockStat.fuelBurnTime, burnDuration/60f);
|
||||
stats.add(BlockStat.inputItems, Arrays.toString(inputs));
|
||||
stats.add(BlockStat.outputItem, result.toString());
|
||||
stats.add(BlockStat.craftSpeed, 60f/craftTime);
|
||||
stats.add(BlockStat.inputItemCapacity, capacity);
|
||||
stats.add(BlockStat.outputItemCapacity, capacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
44
core/src/io/anuke/mindustry/world/meta/BlockStat.java
Normal file
44
core/src/io/anuke/mindustry/world/meta/BlockStat.java
Normal file
@ -0,0 +1,44 @@
|
||||
package io.anuke.mindustry.world.meta;
|
||||
|
||||
/**Describes one type of stat for a block.*/
|
||||
public enum BlockStat {
|
||||
health(StatCategory.general),
|
||||
size(StatCategory.general),
|
||||
|
||||
itemCapacity(StatCategory.items),
|
||||
inputItemCapacity(StatCategory.items),
|
||||
outputItemCapacity(StatCategory.items),
|
||||
itemSpeed(StatCategory.items),
|
||||
|
||||
liquidCapacity(StatCategory.liquids),
|
||||
liquidOutput(StatCategory.liquids),
|
||||
|
||||
powerCapacity(StatCategory.power),
|
||||
powerUse(StatCategory.power),
|
||||
powerRange(StatCategory.power),
|
||||
powerTransferSpeed(StatCategory.power),
|
||||
maxPowerGeneration(StatCategory.power),
|
||||
|
||||
inputLiquid(StatCategory.crafting),
|
||||
inputItem(StatCategory.crafting),
|
||||
inputItems(StatCategory.crafting),
|
||||
inputFuel(StatCategory.crafting),
|
||||
fuelBurnTime(StatCategory.crafting),
|
||||
craftSpeed(StatCategory.crafting),
|
||||
outputItem(StatCategory.crafting),
|
||||
|
||||
shootRange(StatCategory.shooting),
|
||||
inaccuracy(StatCategory.shooting),
|
||||
shots(StatCategory.shooting),
|
||||
reload(StatCategory.shooting),
|
||||
powerShot(StatCategory.shooting),
|
||||
|
||||
;
|
||||
|
||||
|
||||
public final StatCategory category;
|
||||
|
||||
BlockStat(StatCategory category) {
|
||||
this.category = category;
|
||||
}
|
||||
}
|
@ -1,23 +1,72 @@
|
||||
package io.anuke.mindustry.world.meta;
|
||||
|
||||
import com.badlogic.gdx.utils.ObjectMap.Entry;
|
||||
import com.badlogic.gdx.utils.OrderedMap;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
import io.anuke.ucore.util.Log;
|
||||
import io.anuke.ucore.util.Strings;
|
||||
|
||||
/**Hold and organizes a list of block stats.*/
|
||||
public class BlockStats {
|
||||
private OrderedMap<String, Object> map = new OrderedMap<>();
|
||||
//TODO change back to true
|
||||
private static final boolean errorWhenMissing = false;
|
||||
|
||||
public void add(String label, Object value){
|
||||
if(!Bundles.has("text.blocks." + label)) throw new RuntimeException("No bundle entry for description label \"" + label + "\"!");
|
||||
if(map.containsKey(label)) throw new RuntimeException("Duplicate label entry: \"" +label + "\"");
|
||||
map.put(label, value);
|
||||
private OrderedMap<StatCategory, OrderedMap<BlockStat, String>> map = new OrderedMap<>();
|
||||
private boolean dirty;
|
||||
|
||||
/**Adds a single integer value with this stat.*/
|
||||
public void add(BlockStat stat, int value){
|
||||
add(stat, "" + value);
|
||||
}
|
||||
|
||||
public void remove(String label){
|
||||
Object o = map.remove(label);
|
||||
if(o == null) throw new RuntimeException("No label entry found with name \"" + label + "\"!");
|
||||
/**Adds a single float value with this stat, formatted to 2 decimal places.*/
|
||||
public void add(BlockStat stat, float value){
|
||||
add(stat, Strings.toFixed(value, 2));
|
||||
}
|
||||
|
||||
public OrderedMap<String, Object> getMap() {
|
||||
/**Adds a formatted string with this stat.*/
|
||||
public void add(BlockStat stat, String format, Object... arguments){
|
||||
if(!Bundles.has("text.blocks." + stat.name())){
|
||||
if(!errorWhenMissing){
|
||||
Log.err("Warning: No bundle entry for stat type \"" + stat + "\"!");
|
||||
}else{
|
||||
throw new RuntimeException("No bundle entry for stat type \"" + stat + "\"!");
|
||||
}
|
||||
}
|
||||
|
||||
if(map.containsKey(stat.category) && map.get(stat.category).containsKey(stat)){
|
||||
throw new RuntimeException("Duplicate stat entry: \"" +stat + "\"");
|
||||
}
|
||||
|
||||
if(!map.containsKey(stat.category)){
|
||||
map.put(stat.category, new OrderedMap<>());
|
||||
}
|
||||
|
||||
map.get(stat.category).put(stat, Strings.formatArgs(format, arguments));
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
public void remove(BlockStat stat){
|
||||
if(!map.containsKey(stat.category) || !map.get(stat.category).containsKey(stat)){
|
||||
throw new RuntimeException("No stat entry found: \"" + stat + "\"!");
|
||||
}
|
||||
|
||||
map.get(stat.category).remove(stat);
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
public OrderedMap<StatCategory, OrderedMap<BlockStat, String>> toMap() {
|
||||
//sort stats by index if they've been modified
|
||||
if(dirty) {
|
||||
map.orderedKeys().sort();
|
||||
for (Entry<StatCategory, OrderedMap<BlockStat, String>> entry : map.entries()) {
|
||||
entry.value.orderedKeys().sort();
|
||||
}
|
||||
|
||||
dirty = false;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
11
core/src/io/anuke/mindustry/world/meta/StatCategory.java
Normal file
11
core/src/io/anuke/mindustry/world/meta/StatCategory.java
Normal file
@ -0,0 +1,11 @@
|
||||
package io.anuke.mindustry.world.meta;
|
||||
|
||||
/**A specific category for a stat.*/
|
||||
public enum StatCategory {
|
||||
general,
|
||||
power,
|
||||
liquids,
|
||||
items,
|
||||
crafting,
|
||||
shooting
|
||||
}
|
Reference in New Issue
Block a user