1
0
mirror of https://github.com/Anuken/Mindustry.git synced 2024-09-20 21:08:42 +03:00

New metal floor / Selective floor attribute stats

This commit is contained in:
Anuken 2021-06-09 13:26:01 -04:00
parent adf6465029
commit b04c04f69f
9 changed files with 102 additions and 36 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

View File

@ -677,6 +677,7 @@ unit.nobuild = [scarlet]Unit can't build
lastaccessed = [lightgray]Last Accessed: {0}
block.unknown = [lightgray]???
stat.showinmap = <load map to show>
stat.description = Purpose
stat.input = Input
stat.output = Output
@ -1163,8 +1164,9 @@ block.spore-cluster.name = Spore Cluster
block.metal-floor.name = Metal Floor 1
block.metal-floor-2.name = Metal Floor 2
block.metal-floor-3.name = Metal Floor 3
block.metal-floor-5.name = Metal Floor 4
block.metal-floor-damaged.name = Metal Floor Damaged
block.metal-floor-4.name = Metal Floor 4
block.metal-floor-5.name = Metal Floor 5
block.metal-floor-damaged.name = Damaged Metal Floor
block.dark-panel-1.name = Dark Panel 1
block.dark-panel-2.name = Dark Panel 2
block.dark-panel-3.name = Dark Panel 3

View File

@ -351,3 +351,4 @@
63360=navanax|unit-navanax-ui
63354=payload-launch-pad|block-payload-launch-pad-ui
63353=silicon-arc-furnace|block-silicon-arc-furnace-ui
63352=metal-floor-4|block-metal-floor-4-ui

View File

@ -27,8 +27,6 @@ public class BlockIndexer{
private static final Rect rect = new Rect();
private static boolean returnBool = false;
private final IntSet intSet = new IntSet();
private int quadWidth, quadHeight;
/** Stores all ore quadrants on the map. Maps ID to qX to qY to a list of tiles with that ore. */
@ -41,9 +39,9 @@ public class BlockIndexer{
private Seq<Team> activeTeams = new Seq<>(Team.class);
/** Maps teams to a map of flagged tiles by flag. */
private TileArray[][] flagMap = new TileArray[Team.all.length][BlockFlag.all.length];
/** Counts whether a certain floor is present in the world upon load. */
private boolean[] blocksPresent;
/** Empty set used for returning. */
private TileArray emptySet = new TileArray();
/** Array used for returning and reusing. */
private Seq<Tile> returnArray = new Seq<>();
/** Array used for returning and reusing. */
@ -74,6 +72,7 @@ public class BlockIndexer{
ores = new IntSeq[content.items().size][][];
quadWidth = Mathf.ceil(world.width() / (float)quadrantSize);
quadHeight = Mathf.ceil(world.height() / (float)quadrantSize);
blocksPresent = new boolean[content.blocks().size];
for(Tile tile : world.tiles){
process(tile);
@ -153,6 +152,12 @@ public class BlockIndexer{
seq.removeValue(pos);
}
}
}
/** @return whether a certain block is anywhere on this map. */
public boolean isBlockPresent(Block block){
return blocksPresent != null && blocksPresent[block.id];
}
private TileArray[] getFlagged(Team team){
@ -383,6 +388,12 @@ public class BlockIndexer{
}
data.buildings.insert(tile.build);
}
if(!tile.block().isStatic()){
blocksPresent[tile.floorID()] = true;
blocksPresent[tile.overlayID()] = true;
}
blocksPresent[tile.blockID()] = true;
}
public static class TileArray implements Iterable<Tile>{

View File

@ -40,7 +40,7 @@ public class Blocks implements ContentList{
dacite,
stoneWall, dirtWall, sporeWall, iceWall, daciteWall, sporePine, snowPine, pine, shrubs, whiteTree, whiteTreeDead, sporeCluster,
iceSnow, sandWater, darksandWater, duneWall, sandWall, moss, sporeMoss, shale, shaleWall, shaleBoulder, sandBoulder, daciteBoulder, boulder, snowBoulder, basaltBoulder, grass, salt,
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall,
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor4, metalFloor5, basalt, magmarock, hotrock, snowWall, saltWall,
darkPanel1, darkPanel2, darkPanel3, darkPanel4, darkPanel5, darkPanel6, darkMetal,
pebbles, tendrils,
@ -410,32 +410,24 @@ public class Blocks implements ContentList{
wall = sporeWall;
}};
metalFloor = new Floor("metal-floor"){{
metalFloor = new MetalFloor("metal-floor"){{
variants = 0;
attributes.set(Attribute.water, -1f);
}};
metalFloorDamaged = new Floor("metal-floor-damaged"){{
variants = 3;
}};
metalFloorDamaged = new MetalFloor("metal-floor-damaged", 3);
metalFloor2 = new Floor("metal-floor-2"){{
variants = 0;
}};
metalFloor2 = new MetalFloor("metal-floor-2");
metalFloor3 = new MetalFloor("metal-floor-3");
metalFloor4 = new MetalFloor("metal-floor-4");
metalFloor5 = new MetalFloor("metal-floor-5");
metalFloor3 = new Floor("metal-floor-3"){{
variants = 0;
}};
metalFloor5 = new Floor("metal-floor-5"){{
variants = 0;
}};
darkPanel1 = new Floor("dark-panel-1"){{ variants = 0; }};
darkPanel2 = new Floor("dark-panel-2"){{ variants = 0; }};
darkPanel3 = new Floor("dark-panel-3"){{ variants = 0; }};
darkPanel4 = new Floor("dark-panel-4"){{ variants = 0; }};
darkPanel5 = new Floor("dark-panel-5"){{ variants = 0; }};
darkPanel6 = new Floor("dark-panel-6"){{ variants = 0; }};
darkPanel1 = new MetalFloor("dark-panel-1");
darkPanel2 = new MetalFloor("dark-panel-2");
darkPanel3 = new MetalFloor("dark-panel-3");
darkPanel4 = new MetalFloor("dark-panel-4");
darkPanel5 = new MetalFloor("dark-panel-5");
darkPanel6 = new MetalFloor("dark-panel-6");
darkMetal = new StaticWall("dark-metal");

View File

@ -67,7 +67,7 @@ public class ContentInfoDialog extends BaseDialog{
for(Stat stat : map.keys()){
table.table(inset -> {
inset.left();
inset.add("[lightgray]" + stat.localized() + ":[] ").left();
inset.add("[lightgray]" + stat.localized() + ":[] ").left().top();
Seq<StatValue> arr = map.get(stat);
for(StatValue value : arr){
value.display(inset);

View File

@ -0,0 +1,19 @@
package mindustry.world.blocks.environment;
import mindustry.world.meta.*;
/** Class for quickly defining a floor with no water and no variants. Offers no new functionality. */
public class MetalFloor extends Floor{
public MetalFloor(String name){
super(name);
variants = 0;
attributes.set(Attribute.water, -1);
}
public MetalFloor(String name, int variants){
super(name);
this.variants = variants;
attributes.set(Attribute.water, -1);
}
}

View File

@ -8,10 +8,12 @@ import arc.scene.ui.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.content.*;
import mindustry.ctype.*;
import mindustry.entities.bullet.*;
import mindustry.gen.*;
import mindustry.maps.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*;
@ -117,6 +119,51 @@ public class StatValues{
);
}
public static StatValue floors(Attribute attr, boolean floating, float scale, boolean startZero){
return table -> table.table(c -> {
Runnable[] rebuild = {null};
Map[] lastMap = {null};
rebuild[0] = () -> {
c.clearChildren();
c.left();
if(state.isGame()){
var blocks = Vars.content.blocks()
.select(block -> block instanceof Floor f && indexer.isBlockPresent(block) && f.attributes.get(attr) != 0 && !(f.isLiquid && !floating))
.<Floor>as().with(s -> s.sort(f -> f.attributes.get(attr)));
if(blocks.any()){
int i = 0;
for(var block : blocks){
floorEfficiency(block, block.attributes.get(attr) * scale, startZero).display(c);
if(++i % 5 == 0){
c.row();
}
}
}else{
c.add("@none.found");
}
}else{
c.add("@stat.showinmap");
}
};
rebuild[0].run();
//rebuild when map changes.
c.update(() -> {
Map current = state.isGame() ? state.map : null;
if(current != lastMap[0]){
rebuild[0].run();
lastMap[0] = current;
}
});
});
}
public static StatValue blocks(Boolf<Block> pred){
return blocks(content.blocks().select(pred));
}

View File

@ -3,9 +3,7 @@ package mindustry.world.meta;
import arc.struct.ObjectMap.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.type.*;
import mindustry.world.blocks.environment.*;
/** Hold and organizes a list of block stats. */
public class Stats{
@ -68,11 +66,7 @@ public class Stats{
}
public void add(Stat stat, Attribute attr, boolean floating, float scale, boolean startZero){
for(var block : Vars.content.blocks()
.select(block -> block instanceof Floor f && f.attributes.get(attr) != 0 && !(f.isLiquid && !floating))
.<Floor>as().with(s -> s.sort(f -> f.attributes.get(attr)))){
add(stat, StatValues.floorEfficiency(block, block.attributes.get(attr) * scale, startZero));
}
add(stat, StatValues.floors(attr, floating, scale, startZero));
}
/** Adds a single string value with this stat. */