Multi-liquid sublimate
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package mindustry.world.blocks.defense.turrets;
|
||||
|
||||
import arc.struct.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.entities.bullet.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.consumers.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
public class ContinuousLiquidTurret extends ContinuousTurret{
|
||||
public ObjectMap<Liquid, BulletType> ammoTypes = new ObjectMap<>();
|
||||
public float liquidConsumed = 1f / 60f;
|
||||
|
||||
public ContinuousLiquidTurret(String name){
|
||||
super(name);
|
||||
acceptCoolant = false;
|
||||
hasLiquids = true;
|
||||
//TODO
|
||||
loopSound = Sounds.minebeam;
|
||||
shootSound = Sounds.none;
|
||||
smokeEffect = Fx.none;
|
||||
shootEffect = Fx.none;
|
||||
}
|
||||
|
||||
/** Initializes accepted ammo map. Format: [liquid1, bullet1, liquid2, bullet2...] */
|
||||
public void ammo(Object... objects){
|
||||
ammoTypes = ObjectMap.of(objects);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStats(){
|
||||
super.setStats();
|
||||
|
||||
stats.remove(Stat.ammo);
|
||||
stats.add(Stat.ammo, StatValues.ammo(ammoTypes));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
//TODO use ammoMultiplier here?
|
||||
consumes.add(new ConsumeLiquidFilter(i -> ammoTypes.containsKey(i), liquidConsumed){
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.liquids.currentAmount() >= use(build);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(Stats stats){
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
super.init();
|
||||
}
|
||||
|
||||
public class LiquidTurretBuild extends ContinuousTurretBuild{
|
||||
|
||||
@Override
|
||||
public boolean shouldActiveSound(){
|
||||
return wasShooting && enabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTile(){
|
||||
unit.ammo(unit.type().ammoCapacity * liquids.currentAmount() / liquidCapacity);
|
||||
|
||||
super.updateTile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BulletType useAmmo(){
|
||||
//does not consume ammo upon firing
|
||||
return peekAmmo();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BulletType peekAmmo(){
|
||||
return ammoTypes.get(liquids.current());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Building source, Item item){
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptLiquid(Building source, Liquid liquid){
|
||||
return ammoTypes.get(liquid) != null &&
|
||||
(liquids.current() == liquid ||
|
||||
((!ammoTypes.containsKey(liquids.current()) || liquids.get(liquids.current()) <= 1f / ammoTypes.get(liquids.current()).ammoMultiplier + 0.001f)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package mindustry.world.blocks.defense.turrets;
|
||||
|
||||
import arc.math.*;
|
||||
import arc.struct.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.entities.bullet.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.logic.*;
|
||||
@@ -10,7 +11,7 @@ import mindustry.world.meta.*;
|
||||
|
||||
/** A turret that fires a continuous beam bullet with no reload or coolant necessary. The bullet only disappears when the turret stops shooting. */
|
||||
public class ContinuousTurret extends Turret{
|
||||
public BulletType shootType;
|
||||
public BulletType shootType = Bullets.standardCopper;
|
||||
|
||||
public ContinuousTurret(String name){
|
||||
super(name);
|
||||
@@ -81,7 +82,7 @@ public class ContinuousTurret extends Turret{
|
||||
heat = 1f;
|
||||
recoil = recoilAmount;
|
||||
|
||||
if(isShooting()){
|
||||
if(isShooting() && hasAmmo()){
|
||||
bullet.time = bullet.lifetime * bullet.type.optimalLifeFract * shootWarmup;
|
||||
}
|
||||
}
|
||||
@@ -106,9 +107,8 @@ public class ContinuousTurret extends Turret{
|
||||
return;
|
||||
}
|
||||
|
||||
if((consValid() || cheating()) && !charging){
|
||||
BulletType type = peekAmmo();
|
||||
shoot(type);
|
||||
if(consValid() && !charging){
|
||||
shoot(peekAmmo());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -137,9 +137,9 @@ public class LiquidTurret extends Turret{
|
||||
|
||||
@Override
|
||||
public boolean acceptLiquid(Building source, Liquid liquid){
|
||||
return ammoTypes.get(liquid) != null
|
||||
&& (liquids.current() == liquid || (ammoTypes.containsKey(liquid)
|
||||
&& (!ammoTypes.containsKey(liquids.current()) || liquids.get(liquids.current()) <= 1f / ammoTypes.get(liquids.current()).ammoMultiplier + 0.001f)));
|
||||
return ammoTypes.get(liquid) != null &&
|
||||
(liquids.current() == liquid ||
|
||||
((!ammoTypes.containsKey(liquids.current()) || liquids.get(liquids.current()) <= 1f / ammoTypes.get(liquids.current()).ammoMultiplier + 0.001f)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -349,6 +349,10 @@ public class StatValues{
|
||||
sep(bt, Core.bundle.format("bullet.lightning", type.lightning, type.lightningDamage < 0 ? type.damage : type.lightningDamage));
|
||||
}
|
||||
|
||||
if(type.pierceArmor){
|
||||
sep(bt, "@bullet.armorpierce");
|
||||
}
|
||||
|
||||
if(type.status != StatusEffects.none){
|
||||
sep(bt, (type.status.minfo.mod == null ? type.status.emoji() : "") + "[stat]" + type.status.localizedName);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user