New metal floor / Selective floor attribute stats
This commit is contained in:
19
core/src/mindustry/world/blocks/environment/MetalFloor.java
Normal file
19
core/src/mindustry/world/blocks/environment/MetalFloor.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
|
||||
Reference in New Issue
Block a user