Large cliff crusher block / Erekir ammo tweaks / Android file chooser fixes
This commit is contained in:
@@ -239,6 +239,8 @@ public class Turret extends ReloadTurret{
|
||||
public float heatReq;
|
||||
public float[] sideHeat = new float[4];
|
||||
|
||||
float lastRangeChange;
|
||||
|
||||
@Override
|
||||
public float estimateDps(){
|
||||
if(!hasAmmo()) return 0f;
|
||||
@@ -316,6 +318,11 @@ public class Turret extends ReloadTurret{
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public float fogRadius(){
|
||||
return (range + (hasAmmo() ? peekAmmo().rangeChange : 0f)) / tilesize * fogRadiusMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float progress(){
|
||||
return Mathf.clamp(reloadCounter / reload);
|
||||
@@ -415,6 +422,14 @@ public class Turret extends ReloadTurret{
|
||||
//turret always reloads regardless of whether it's targeting something
|
||||
updateReload();
|
||||
|
||||
if(state.rules.fog){
|
||||
float newRange = hasAmmo() ? peekAmmo().rangeChange : 0f;
|
||||
if(newRange != lastRangeChange){
|
||||
lastRangeChange = newRange;
|
||||
fogControl.forceUpdate(team, this);
|
||||
}
|
||||
}
|
||||
|
||||
if(hasAmmo()){
|
||||
if(Float.isNaN(reloadCounter)) reloadCounter = 0;
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import mindustry.graphics.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.consumers.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
@@ -30,6 +31,8 @@ public class WallCrafter extends Block{
|
||||
|
||||
/** Time to produce one item at 100% efficiency. */
|
||||
public float drillTime = 150f;
|
||||
/** How many times faster the drill will progress when boosted by liquid. */
|
||||
public float liquidBoostIntensity = 1.6f;
|
||||
/** Effect randomly played while drilling. */
|
||||
public Effect updateEffect = Fx.mineWallSmall;
|
||||
public float updateEffectChance = 0.02f;
|
||||
@@ -39,6 +42,14 @@ public class WallCrafter extends Block{
|
||||
|
||||
public Item output = Items.sand;
|
||||
|
||||
public float boostItemUseTime = 120f;
|
||||
/** How many times faster the drill will progress when boosted by items. Note: Using item and liquid boosters at once is not supported. */
|
||||
public float itemBoostIntensity = 1.6f;
|
||||
public @Nullable Consume itemConsumer;
|
||||
public boolean hasLiquidBooster;
|
||||
|
||||
public final int timerUse = timers ++;
|
||||
|
||||
public WallCrafter(String name){
|
||||
super(name);
|
||||
|
||||
@@ -67,6 +78,31 @@ public class WallCrafter extends Block{
|
||||
stats.add(Stat.output, output);
|
||||
stats.add(Stat.tiles, StatValues.blocks(attribute, floating, 1f, true, false));
|
||||
stats.add(Stat.drillSpeed, 60f / drillTime * size, StatUnit.itemsSecond);
|
||||
|
||||
boolean consItems = itemConsumer != null;
|
||||
|
||||
if(consItems) stats.timePeriod = boostItemUseTime;
|
||||
|
||||
if(consItems && itemConsumer instanceof ConsumeItems coni){
|
||||
stats.remove(Stat.booster);
|
||||
stats.add(Stat.booster, StatValues.itemBoosters("{0}" + StatUnit.timesSpeed.localized(), stats.timePeriod, itemBoostIntensity, 0f, coni.items, i -> Structs.contains(coni.items, s -> s.item == i)));
|
||||
}
|
||||
|
||||
if(liquidBoostIntensity != 1 && findConsumer(f -> f instanceof ConsumeLiquidBase && f.booster) instanceof ConsumeLiquidBase consBase){
|
||||
stats.remove(Stat.booster);
|
||||
stats.add(Stat.booster,
|
||||
StatValues.speedBoosters("{0}" + StatUnit.timesSpeed.localized(),
|
||||
consBase.amount,
|
||||
liquidBoostIntensity, false, consBase::consumes)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
super.init();
|
||||
|
||||
hasLiquidBooster = findConsumer(f -> f instanceof ConsumeLiquidBase && f.booster) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -151,6 +187,7 @@ public class WallCrafter extends Block{
|
||||
super.updateTile();
|
||||
|
||||
boolean cons = shouldConsume();
|
||||
boolean itemValid = itemConsumer != null && itemConsumer.efficiency(this) > 0;
|
||||
|
||||
warmup = Mathf.approachDelta(warmup, Mathf.num(efficiency > 0), 1f / 40f);
|
||||
float dx = Geometry.d4x(rotation) * 0.5f, dy = Geometry.d4y(rotation) * 0.5f;
|
||||
@@ -164,7 +201,11 @@ public class WallCrafter extends Block{
|
||||
dest.block().mapColor
|
||||
);
|
||||
}
|
||||
}, null);
|
||||
}, null) * Mathf.lerp(1f, liquidBoostIntensity, hasLiquidBooster ? optionalEfficiency : 0f) * (itemValid ? itemBoostIntensity : 1f);
|
||||
|
||||
if(itemValid && eff * efficiency > 0 && timer(timerUse, boostItemUseTime)){
|
||||
consume();
|
||||
}
|
||||
|
||||
lastEfficiency = eff * timeScale * efficiency;
|
||||
|
||||
@@ -173,16 +214,16 @@ public class WallCrafter extends Block{
|
||||
time %= drillTime;
|
||||
}
|
||||
|
||||
totalTime += edelta() * warmup;
|
||||
totalTime += edelta() * warmup * (eff <= 0f ? 0f : 1f);
|
||||
|
||||
if(timer(timerDump, dumpTime)){
|
||||
dump();
|
||||
dump(output);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldConsume(){
|
||||
return items.total() < itemCapacity;
|
||||
return items.get(output) < itemCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,4 +50,9 @@ public class ConsumeLiquid extends ConsumeLiquidBase{
|
||||
public void display(Stats stats){
|
||||
stats.add(booster ? Stat.booster : Stat.input, liquid, amount * 60f, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean consumes(Liquid liquid){
|
||||
return liquid == this.liquid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.*;
|
||||
|
||||
public abstract class ConsumeLiquidBase extends Consume{
|
||||
@@ -16,4 +17,6 @@ public abstract class ConsumeLiquidBase extends Consume{
|
||||
public void apply(Block block){
|
||||
block.hasLiquids = true;
|
||||
}
|
||||
|
||||
public abstract boolean consumes(Liquid liquid);
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
if(ed <= 0.00000001f) return 0f;
|
||||
return liq != null ? Math.min(build.liquids.get(liq) / (amount * ed * multiplier.get(build)), 1f) : 0f;
|
||||
}
|
||||
|
||||
|
||||
public @Nullable Liquid getConsumed(Building build){
|
||||
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){
|
||||
return build.liquids.current();
|
||||
@@ -74,4 +74,9 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
public void display(Stats stats){
|
||||
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(filter, amount * 60f, true));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean consumes(Liquid liquid){
|
||||
return filter.get(liquid);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user