Definition of all bullet types listed on trello

This commit is contained in:
Anuken
2018-05-27 19:12:01 -04:00
parent 736552f3b1
commit 83c3a80766
13 changed files with 346 additions and 141 deletions

View File

@@ -1,5 +1,7 @@
package io.anuke.mindustry.content; package io.anuke.mindustry.content;
import io.anuke.mindustry.content.bullets.ShellBullets;
import io.anuke.mindustry.content.bullets.StandardBullets;
import io.anuke.mindustry.content.bullets.TurretBullets; import io.anuke.mindustry.content.bullets.TurretBullets;
import io.anuke.mindustry.content.fx.ShootFx; import io.anuke.mindustry.content.fx.ShootFx;
import io.anuke.mindustry.type.AmmoType; import io.anuke.mindustry.type.AmmoType;
@@ -8,91 +10,91 @@ public class AmmoTypes {
//TODO add definitions for all ammo types //TODO add definitions for all ammo types
public static final AmmoType public static final AmmoType
basicIron = new AmmoType(Items.iron, TurretBullets.basicIron, 5){{ basicIron = new AmmoType(Items.iron, StandardBullets.basicIron, 5){{
shootEffect = ShootFx.shootSmall; shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke; smokeEffect = ShootFx.shootSmallSmoke;
}}, }},
basicLead = new AmmoType(Items.lead, TurretBullets.basicIron, 5){{ basicLead = new AmmoType(Items.lead, StandardBullets.basicLead, 5){{
shootEffect = ShootFx.shootSmall; shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke; smokeEffect = ShootFx.shootSmallSmoke;
}}, }},
basicLeadFlak = new AmmoType(Items.lead, TurretBullets.basicIron, 5){{ standardLead = new AmmoType(AmmoItems.leadBullet, StandardBullets.standardLead, 5){{
shootEffect = ShootFx.shootSmall; shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke; smokeEffect = ShootFx.shootSmallSmoke;
}}, }},
standardLead = new AmmoType(AmmoItems.leadBullet, TurretBullets.basicIron, 5){{ standardArmorPiercing = new AmmoType(AmmoItems.armorPiercingBullet, StandardBullets.standardArmorPiercing, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
standardLeadFlak = new AmmoType(AmmoItems.leadBullet, TurretBullets.basicIron, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
compositeFlak = new AmmoType(AmmoItems.compositeFlak, TurretBullets.basicIron, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
standardArmorPiercing = new AmmoType(AmmoItems.armorPiercingBullet, TurretBullets.basicSteel, 5){{
shootEffect = ShootFx.shootBig; shootEffect = ShootFx.shootBig;
smokeEffect = ShootFx.shootBigSmoke; smokeEffect = ShootFx.shootBigSmoke;
}}, }},
homing = new AmmoType(AmmoItems.homingBullet, TurretBullets.basicSteel, 5){{ standardHoming = new AmmoType(AmmoItems.homingBullet, StandardBullets.standardHoming, 5){{
shootEffect = ShootFx.shootBig; shootEffect = ShootFx.shootBig;
smokeEffect = ShootFx.shootBigSmoke; smokeEffect = ShootFx.shootBigSmoke;
}}, }},
tracer = new AmmoType(AmmoItems.tracerBullet, TurretBullets.basicSteel, 5){{ standardTracer = new AmmoType(AmmoItems.tracerBullet, StandardBullets.standardTracer, 5){{
shootEffect = ShootFx.shootBig; shootEffect = ShootFx.shootBig;
smokeEffect = ShootFx.shootBigSmoke; smokeEffect = ShootFx.shootBigSmoke;
}}, }},
basicLeadFlak = new AmmoType(Items.lead, StandardBullets.basicLeadFlak, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
standardLeadFlak = new AmmoType(AmmoItems.leadBullet, StandardBullets.standardLeadFlak, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
compositeFlak = new AmmoType(AmmoItems.compositeFlak, StandardBullets.compositeFlak, 5){{
shootEffect = ShootFx.shootSmall;
smokeEffect = ShootFx.shootSmallSmoke;
}},
basicFlame = new AmmoType(Liquids.oil, TurretBullets.basicFlame, 0.3f){{ basicFlame = new AmmoType(Liquids.oil, TurretBullets.basicFlame, 0.3f){{
shootEffect = ShootFx.shootSmallFlame; shootEffect = ShootFx.shootSmallFlame;
}}, }},
basicLeadShell = new AmmoType(Items.lead, TurretBullets.basicLeadFragShell, 1){{ basicLeadShell = new AmmoType(Items.lead, ShellBullets.basicLeadShell, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
explosiveFragShell = new AmmoType(AmmoItems.explosiveShell, TurretBullets.basicLeadFragShell, 1){{ explosiveFragShell = new AmmoType(AmmoItems.explosiveShell, ShellBullets.explosiveShell, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
fragShell = new AmmoType(AmmoItems.fragShell, TurretBullets.basicLeadFragShell, 1){{ fragShell = new AmmoType(AmmoItems.fragShell, ShellBullets.fragShell, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
standardThoriumShell = new AmmoType(AmmoItems.thoriumShell, TurretBullets.basicLeadFragShell, 1){{ standardThoriumShell = new AmmoType(AmmoItems.thoriumShell, ShellBullets.thoriumShell, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
swarmMissile = new AmmoType(AmmoItems.swarmMissile, TurretBullets.basicLeadFragShell, 1){{ swarmMissile = new AmmoType(AmmoItems.swarmMissile, ShellBullets.swarmMissile, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
scytheMissile = new AmmoType(AmmoItems.scytheMissile, TurretBullets.basicLeadFragShell, 1){{ scytheMissile = new AmmoType(AmmoItems.scytheMissile, ShellBullets.scytheMissile, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
incendiaryMortar = new AmmoType(AmmoItems.incendiaryMortarShell, TurretBullets.basicLeadFragShell, 1){{ incendiaryMortar = new AmmoType(AmmoItems.incendiaryMortarShell, ShellBullets.incendiaryMortar, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},
surgeMortar = new AmmoType(AmmoItems.surgeMortarShell, TurretBullets.basicLeadFragShell, 1){{ surgeMortar = new AmmoType(AmmoItems.surgeMortarShell, ShellBullets.surgeMortar, 1){{
shootEffect = ShootFx.shootBig2; shootEffect = ShootFx.shootBig2;
smokeEffect = ShootFx.shootBigSmoke2; smokeEffect = ShootFx.shootBigSmoke2;
}}, }},

View File

@@ -15,7 +15,7 @@ public class WeaponBlocks{
public static Block public static Block
duo = new DoubleTurret("duo"){{ duo = new DoubleTurret("duo"){{
ammoTypes = new AmmoType[]{AmmoTypes.basicIron, AmmoTypes.basicLead, AmmoTypes.standardLead, AmmoTypes.tracer}; ammoTypes = new AmmoType[]{AmmoTypes.basicIron, AmmoTypes.basicLead, AmmoTypes.standardLead, AmmoTypes.standardTracer};
reload = 25f; reload = 25f;
restitution = 0.03f; restitution = 0.03f;
ammoUseEffect = ShootFx.shellEjectSmall; ammoUseEffect = ShootFx.shellEjectSmall;

View File

@@ -0,0 +1,166 @@
package io.anuke.mindustry.content.bullets;
import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.bullet.BasicBulletType;
import io.anuke.mindustry.entities.bullet.BulletType;
public class ShellBullets {
public static final BulletType
basicLeadShell = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
basicLeadShard = new BasicBulletType(3f, 0) {
{
drag = 0.1f;
hiteffect = Fx.none;
despawneffect = Fx.none;
hitsize = 4;
lifetime = 20f;
bulletWidth = 9f;
bulletHeight = 11f;
bulletShrink = 1f;
}
},
explosiveShell = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
explosiveShard = new BasicBulletType(3f, 0) {
{
drag = 0.1f;
hiteffect = Fx.none;
despawneffect = Fx.none;
hitsize = 4;
lifetime = 20f;
bulletWidth = 9f;
bulletHeight = 11f;
bulletShrink = 1f;
}
},
fragShell = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
fragShard = new BasicBulletType(3f, 0) {
{
drag = 0.1f;
hiteffect = Fx.none;
despawneffect = Fx.none;
hitsize = 4;
lifetime = 20f;
bulletWidth = 9f;
bulletHeight = 11f;
bulletShrink = 1f;
}
},
thoriumShell = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
thoriumShard = new BasicBulletType(3f, 0) {
{
drag = 0.1f;
hiteffect = Fx.none;
despawneffect = Fx.none;
hitsize = 4;
lifetime = 20f;
bulletWidth = 9f;
bulletHeight = 11f;
bulletShrink = 1f;
}
},
swarmMissile = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
scytheMissile = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
incendiaryMortar = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
surgeMortar = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadShard;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
};
}

View File

@@ -0,0 +1,71 @@
package io.anuke.mindustry.content.bullets;
import io.anuke.mindustry.entities.bullet.BasicBulletType;
import io.anuke.mindustry.entities.bullet.BulletType;
public class StandardBullets {
public static final BulletType
basicIron = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
basicLead = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
standardLead = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
standardArmorPiercing = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
standardHoming = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
standardTracer = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
basicLeadFlak = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
standardLeadFlak = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
compositeFlak = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
};
}

View File

@@ -1,31 +1,26 @@
package io.anuke.mindustry.content.bullets; package io.anuke.mindustry.content.bullets;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.GridPoint2;
import io.anuke.mindustry.content.Liquids; import io.anuke.mindustry.content.Liquids;
import io.anuke.mindustry.content.StatusEffects; import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.content.fx.BulletFx; import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.content.fx.EnvironmentFx; import io.anuke.mindustry.content.fx.EnvironmentFx;
import io.anuke.mindustry.content.fx.Fx; import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.bullet.BasicBulletType;
import io.anuke.mindustry.entities.bullet.Bullet; import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.bullet.LiquidBulletType;
import io.anuke.mindustry.entities.effect.DamageArea; import io.anuke.mindustry.entities.effect.DamageArea;
import io.anuke.mindustry.entities.effect.Fire; import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Lightning; import io.anuke.mindustry.entities.effect.Lightning;
import io.anuke.mindustry.entities.effect.Puddle;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Fill; import io.anuke.ucore.graphics.Fill;
import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world; import static io.anuke.mindustry.Vars.world;
public class TurretBullets { public class TurretBullets {
@@ -71,49 +66,6 @@ public class TurretBullets {
} }
}, },
basicIron = new BasicBulletType(3f, 5) {
{
bulletWidth = 7f;
bulletHeight = 9f;
}
},
basicSteel = new BasicBulletType(6f, 0) {
{
hiteffect = BulletFx.hitBulletBig;
knockback = 0.5f;
bulletWidth = 9f;
bulletHeight = 11f;
}
},
basicLeadFragShell = new BasicBulletType(3f, 0) {
{
hiteffect = BulletFx.flakExplosion;
knockback = 0.8f;
lifetime = 90f;
drag = 0.01f;
bulletWidth = bulletHeight = 9f;
fragBullet = basicLeadFrag;
bulletSprite = "frag";
bulletShrink = 0.1f;
}
},
basicLeadFrag = new BasicBulletType(3f, 0) {
{
drag = 0.1f;
hiteffect = Fx.none;
despawneffect = Fx.none;
hitsize = 4;
lifetime = 20f;
bulletWidth = 9f;
bulletHeight = 11f;
bulletShrink = 1f;
//todo scaling
}
},
basicFlame = new BulletType(2f, 0) { basicFlame = new BulletType(2f, 0) {
{ {
hitsize = 7f; hitsize = 7f;
@@ -165,20 +117,20 @@ public class TurretBullets {
} }
}, },
waterShot = new LiquidShot(Liquids.water) { waterShot = new LiquidBulletType(Liquids.water) {
{ {
status = StatusEffects.wet; status = StatusEffects.wet;
statusIntensity = 0.5f; statusIntensity = 0.5f;
knockback = 0.65f; knockback = 0.65f;
} }
}, },
cryoShot = new LiquidShot(Liquids.cryofluid) { cryoShot = new LiquidBulletType(Liquids.cryofluid) {
{ {
status = StatusEffects.freezing; status = StatusEffects.freezing;
statusIntensity = 0.5f; statusIntensity = 0.5f;
} }
}, },
lavaShot = new LiquidShot(Liquids.lava) { lavaShot = new LiquidBulletType(Liquids.lava) {
{ {
damage = 4; damage = 4;
speed = 1.9f; speed = 1.9f;
@@ -187,7 +139,7 @@ public class TurretBullets {
statusIntensity = 0.5f; statusIntensity = 0.5f;
} }
}, },
oilShot = new LiquidShot(Liquids.oil) { oilShot = new LiquidBulletType(Liquids.oil) {
{ {
speed = 2f; speed = 2f;
drag = 0.03f; drag = 0.03f;
@@ -203,49 +155,11 @@ public class TurretBullets {
} }
@Override @Override
public void draw(Bullet b) { public void draw(Bullet b) {}
}
@Override @Override
public void init(Bullet b) { public void init(Bullet b) {
Lightning.create(b.team, hiteffect, Palette.lancerLaser, damage, b.x, b.y, b.angle(), 30); Lightning.create(b.team, hiteffect, Palette.lancerLaser, damage, b.x, b.y, b.angle(), 30);
} }
}; };
private abstract static class LiquidShot extends BulletType{
Liquid liquid;
public LiquidShot(Liquid liquid) {
super(2.5f, 0);
this.liquid = liquid;
lifetime = 70f;
despawneffect = Fx.none;
hiteffect = BulletFx.hitLiquid;
drag = 0.01f;
knockback = 0.5f;
}
@Override
public void draw(Bullet b) {
Draw.color(liquid.color, Color.WHITE, b.fout() / 100f + Mathf.randomSeedRange(b.id, 0.1f));
Fill.circle(b.x, b.y, 0.5f + b.fout()*2.5f);
}
@Override
public void hit(Bullet b, float hitx, float hity) {
Effects.effect(hiteffect, liquid.color, hitx, hity);
Puddle.deposit(world.tileWorld(hitx, hity), liquid, 5f);
if(liquid.temperature <= 0.5f && liquid.flammability < 0.3f){
float intensity = 400f;
Fire.extinguish(world.tileWorld(hitx, hity), intensity);
for(GridPoint2 p : Geometry.d4){
Fire.extinguish(world.tileWorld(hitx + p.x*tilesize, hity + p.y*tilesize), intensity);
}
}
}
}
} }

View File

@@ -1,4 +0,0 @@
package io.anuke.mindustry.content.bullets;
public class UnitBullets {
}

View File

@@ -1,15 +0,0 @@
package io.anuke.mindustry.content.bullets;
import io.anuke.mindustry.entities.bullet.Bullet;
import io.anuke.mindustry.entities.bullet.BulletType;
public class WeaponBullets {
public static final BulletType
none = new BulletType(0f, 0) {
@Override
public void draw(Bullet b) {
}
};
}

View File

@@ -70,6 +70,11 @@ public class Player extends Unit implements BlockBuilder {
heal(); heal();
} }
@Override
public float getArmor() {
return 0f;
}
@Override @Override
public void onRemoteShoot(BulletType type, float x, float y, float rotation, short data) { public void onRemoteShoot(BulletType type, float x, float y, float rotation, short data) {
Weapon weapon = Upgrade.getByID(Bits.getLeftByte(data)); Weapon weapon = Upgrade.getByID(Bits.getLeftByte(data));

View File

@@ -178,6 +178,7 @@ public abstract class Unit extends SyncEntity implements SerializableEntity {
public void drawUnder(){} public void drawUnder(){}
public void drawOver(){} public void drawOver(){}
public abstract float getArmor();
public abstract boolean acceptsAmmo(Item item); public abstract boolean acceptsAmmo(Item item);
public abstract void addAmmo(Item item); public abstract void addAmmo(Item item);
public abstract float getMass(); public abstract float getMass();

View File

@@ -7,10 +7,16 @@ import io.anuke.ucore.core.Effects;
import io.anuke.ucore.entities.BaseBulletType; import io.anuke.ucore.entities.BaseBulletType;
public abstract class BulletType extends BaseBulletType<Bullet>{ public abstract class BulletType extends BaseBulletType<Bullet>{
/**Knockback in velocity.*/
public float knockback; public float knockback;
/**Whether this bullet hits tiles.*/
public boolean hitTiles = true; public boolean hitTiles = true;
/**Status effect applied on hit.*/
public StatusEffect status = StatusEffects.none; public StatusEffect status = StatusEffects.none;
/**Intensity of applied status effect in terms of duration.*/
public float statusIntensity = 0.5f; public float statusIntensity = 0.5f;
/**What fraction of armor is pierced, 0-1*/
public float armorPierce = 0f;
public BulletType(float speed, float damage){ public BulletType(float speed, float damage){
this.speed = speed; this.speed = speed;

View File

@@ -0,0 +1,53 @@
package io.anuke.mindustry.entities.bullet;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.GridPoint2;
import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Puddle;
import io.anuke.mindustry.type.Liquid;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Fill;
import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Mathf;
import static io.anuke.mindustry.Vars.tilesize;
import static io.anuke.mindustry.Vars.world;
public class LiquidBulletType extends BulletType {
Liquid liquid;
public LiquidBulletType(Liquid liquid) {
super(2.5f, 0);
this.liquid = liquid;
lifetime = 70f;
despawneffect = Fx.none;
hiteffect = BulletFx.hitLiquid;
drag = 0.01f;
knockback = 0.5f;
}
@Override
public void draw(Bullet b) {
Draw.color(liquid.color, Color.WHITE, b.fout() / 100f + Mathf.randomSeedRange(b.id, 0.1f));
Fill.circle(b.x, b.y, 0.5f + b.fout()*2.5f);
}
@Override
public void hit(Bullet b, float hitx, float hity) {
Effects.effect(hiteffect, liquid.color, hitx, hity);
Puddle.deposit(world.tileWorld(hitx, hity), liquid, 5f);
if(liquid.temperature <= 0.5f && liquid.flammability < 0.3f){
float intensity = 400f;
Fire.extinguish(world.tileWorld(hitx, hity), intensity);
for(GridPoint2 p : Geometry.d4){
Fire.extinguish(world.tileWorld(hitx + p.x*tilesize, hity + p.y*tilesize), intensity);
}
}
}
}

View File

@@ -55,6 +55,11 @@ public class BaseUnit extends Unit{
this.state.set(this, state); this.state.set(this, state);
} }
@Override
public float getArmor() {
return type.armor;
}
@Override @Override
public boolean acceptsAmmo(Item item) { public boolean acceptsAmmo(Item item) {
return type.ammo.containsKey(item) && inventory.canAcceptAmmo(type.ammo.get(item)); return type.ammo.containsKey(item) && inventory.canAcceptAmmo(type.ammo.get(item));

View File

@@ -44,6 +44,7 @@ public abstract class UnitType {
protected float maxVelocity = 5f; protected float maxVelocity = 5f;
protected float reload = 40f; protected float reload = 40f;
protected float retreatPercent = 0.2f; protected float retreatPercent = 0.2f;
protected float armor = 0f;
protected ObjectMap<Item, AmmoType> ammo = new ObjectMap<>(); protected ObjectMap<Item, AmmoType> ammo = new ObjectMap<>();
public UnitType(String name){ public UnitType(String name){