Anuken/Mindustry-Suggestions/issues/375

This commit is contained in:
Anuken
2020-08-04 10:00:24 -04:00
parent 8b83360fe5
commit 8dd4839f53
3 changed files with 22 additions and 31 deletions

View File

@@ -246,11 +246,13 @@ public class Blocks implements ContentList{
sand = new Floor("sand"){{ sand = new Floor("sand"){{
itemDrop = Items.sand; itemDrop = Items.sand;
playerUnmineable = true; playerUnmineable = true;
attributes.set(Attribute.oil, 0.7f);
}}; }};
darksand = new Floor("darksand"){{ darksand = new Floor("darksand"){{
itemDrop = Items.sand; itemDrop = Items.sand;
playerUnmineable = true; playerUnmineable = true;
attributes.set(Attribute.oil, 1.5f);
}}; }};
((ShallowLiquid)darksandTaintedWater).set(Blocks.taintedWater, Blocks.darksand); ((ShallowLiquid)darksandTaintedWater).set(Blocks.taintedWater, Blocks.darksand);
@@ -267,7 +269,8 @@ public class Blocks implements ContentList{
salt = new Floor("salt"){{ salt = new Floor("salt"){{
variants = 0; variants = 0;
attributes.set(Attribute.water, -0.2f); attributes.set(Attribute.water, -0.25f);
attributes.set(Attribute.oil, 0.3f);
}}; }};
snow = new Floor("snow"){{ snow = new Floor("snow"){{
@@ -355,7 +358,7 @@ public class Blocks implements ContentList{
shale = new Floor("shale"){{ shale = new Floor("shale"){{
variants = 3; variants = 3;
attributes.set(Attribute.oil, 0.15f); attributes.set(Attribute.oil, 1f);
}}; }};
shaleRocks = new StaticWall("shalerocks"){{ shaleRocks = new StaticWall("shalerocks"){{
@@ -1270,6 +1273,8 @@ public class Blocks implements ContentList{
size = 3; size = 3;
liquidCapacity = 30f; liquidCapacity = 30f;
attribute = Attribute.oil; attribute = Attribute.oil;
baseEfficiency = 0f;
itemUseTime = 60f;
consumes.item(Items.sand); consumes.item(Items.sand);
consumes.power(3f); consumes.power(3f);

View File

@@ -265,7 +265,8 @@ public class Block extends UnlockableContent{
return width; return width;
} }
public float sumAttribute(Attribute attr, int x, int y){ public float sumAttribute(@Nullable Attribute attr, int x, int y){
if(attr == null) return 0;
Tile tile = world.tile(x, y); Tile tile = world.tile(x, y);
if(tile == null) return 0; if(tile == null) return 0;
return tile.getLinkedTilesAs(this, tempTiles) return tile.getLinkedTilesAs(this, tempTiles)

View File

@@ -23,6 +23,7 @@ public class SolidPump extends Pump{
public Effect updateEffect = Fx.none; public Effect updateEffect = Fx.none;
public float updateEffectChance = 0.02f; public float updateEffectChance = 0.02f;
public float rotateSpeed = 1f; public float rotateSpeed = 1f;
public float baseEfficiency = 1f;
/** Attribute that is checked when calculating output. */ /** Attribute that is checked when calculating output. */
public @Nullable Attribute attribute; public @Nullable Attribute attribute;
@@ -36,7 +37,7 @@ public class SolidPump extends Pump{
@Override @Override
public void drawPlace(int x, int y, int rotation, boolean valid){ public void drawPlace(int x, int y, int rotation, boolean valid){
if(attribute != null){ if(attribute != null){
drawPlaceText(Core.bundle.formatFloat("bar.efficiency", Math.max(sumAttribute(attribute, x, y) + 1f, 0f) * 100 * percentSolid(x, y), 1), x, y, valid); drawPlaceText(Core.bundle.formatFloat("bar.efficiency", Math.max(sumAttribute(attribute, x, y) / size / size + baseEfficiency, 0f) * 100 * percentSolid(x, y), 1), x, y, valid);
} }
} }
@@ -56,22 +57,14 @@ public class SolidPump extends Pump{
stats.remove(BlockStat.output); stats.remove(BlockStat.output);
stats.add(BlockStat.output, result, 60f * pumpAmount, true); stats.add(BlockStat.output, result, 60f * pumpAmount, true);
if(attribute != null){ if(attribute != null){
stats.add(BlockStat.affinities, attribute); stats.add(baseEfficiency > 0.0001f ? BlockStat.affinities : BlockStat.tiles, attribute);
} }
} }
@Override @Override
public boolean canPlaceOn(Tile tile, Team team){ public boolean canPlaceOn(Tile tile, Team team){
if(isMultiblock()){ float sum = tile.getLinkedTilesAs(this, tempTiles).sumf(t -> canPump(t) ? baseEfficiency + (attribute != null ? t.floor().attributes.get(attribute) : 0f) : 0f);
for(Tile other : tile.getLinkedTilesAs(this, tempTiles)){ return sum > 0.00001f;
if(canPump(other)){
return true;
}
}
return false;
}else{
return canPump(tile);
}
} }
@Override @Override
@@ -88,6 +81,7 @@ public class SolidPump extends Pump{
public float warmup; public float warmup;
public float pumpTime; public float pumpTime;
public float boost; public float boost;
public float validTiles;
public float lastPump; public float lastPump;
@Override @Override
@@ -108,20 +102,7 @@ public class SolidPump extends Pump{
@Override @Override
public void updateTile(){ public void updateTile(){
float fraction = 0f; float fraction = Math.max(validTiles + boost + (attribute == null ? 0 : attribute.env()), 0);
if(isMultiblock()){
for(Tile other : tile.getLinkedTiles(tempTiles)){
if(canPump(other)){
fraction += 1f / (size * size);
}
}
}else{
if(canPump(tile)) fraction = 1f;
}
fraction += boost + (attribute == null ? 0 : attribute.env());
fraction = Math.max(fraction, 0);
if(cons.valid() && typeLiquid() < liquidCapacity - 0.001f){ if(cons.valid() && typeLiquid() < liquidCapacity - 0.001f){
float maxPump = Math.min(liquidCapacity - typeLiquid(), pumpAmount * delta() * fraction * efficiency()); float maxPump = Math.min(liquidCapacity - typeLiquid(), pumpAmount * delta() * fraction * efficiency());
@@ -144,8 +125,12 @@ public class SolidPump extends Pump{
public void onProximityUpdate(){ public void onProximityUpdate(){
super.onProximityAdded(); super.onProximityAdded();
if(attribute != null){ boost = sumAttribute(attribute, tile.x, tile.y) / size / size;
boost = sumAttribute(attribute, tile.x, tile.y); validTiles = 0f;
for(Tile other : tile.getLinkedTiles(tempTiles)){
if(canPump(other)){
validTiles += baseEfficiency / (size * size);
}
} }
} }