Anuken/Mindustry-Suggestions/issues/375
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user