Meltdown prototype

This commit is contained in:
Anuken
2018-09-14 10:29:34 -04:00
parent 1290d1e9d4
commit d878ad2e7e
14 changed files with 876 additions and 837 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

After

Width:  |  Height:  |  Size: 635 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

@@ -35,7 +35,7 @@ public class Recipes implements ContentList{
new Recipe(defense, DefenseBlocks.surgeWallLarge, new ItemStack(Items.surgealloy, 12 * 4)); new Recipe(defense, DefenseBlocks.surgeWallLarge, new ItemStack(Items.surgealloy, 12 * 4));
//projectors //projectors
new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); new Recipe(defense, DefenseBlocks.mendProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 50), new ItemStack(Items.silicon, 250));
new Recipe(defense, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); new Recipe(defense, DefenseBlocks.overdriveProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));
new Recipe(defense, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250)); new Recipe(defense, DefenseBlocks.forceProjector, new ItemStack(Items.lead, 200), new ItemStack(Items.densealloy, 150), new ItemStack(Items.titanium, 150), new ItemStack(Items.silicon, 250));

View File

@@ -57,7 +57,7 @@ public class CraftingBlocks extends BlockList implements ContentList{
plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor"){{ plastaniumCompressor = new PlastaniumCompressor("plastanium-compressor"){{
hasItems = true; hasItems = true;
liquidCapacity = 60f; liquidCapacity = 60f;
craftTime = 80f; craftTime = 60f;
output = Items.plastanium; output = Items.plastanium;
itemCapacity = 30; itemCapacity = 30;
size = 2; size = 2;
@@ -67,7 +67,7 @@ public class CraftingBlocks extends BlockList implements ContentList{
updateEffect = BlockFx.plasticburn; updateEffect = BlockFx.plasticburn;
consumes.liquid(Liquids.oil, 0.25f); consumes.liquid(Liquids.oil, 0.25f);
consumes.power(0.25f); consumes.power(0.3f);
consumes.item(Items.titanium, 2); consumes.item(Items.titanium, 2);
}}; }};

View File

@@ -19,7 +19,7 @@ public class LiquidBlocks extends BlockList implements ContentList{
rotaryPump = new Pump("rotary-pump"){{ rotaryPump = new Pump("rotary-pump"){{
shadow = "shadow-rounded-2"; shadow = "shadow-rounded-2";
pumpAmount = 0.25f; pumpAmount = 0.2f;
consumes.power(0.015f); consumes.power(0.015f);
liquidCapacity = 30f; liquidCapacity = 30f;
powerCapacity = 20f; powerCapacity = 20f;
@@ -30,7 +30,7 @@ public class LiquidBlocks extends BlockList implements ContentList{
thermalPump = new Pump("thermal-pump"){{ thermalPump = new Pump("thermal-pump"){{
shadow = "shadow-rounded-2"; shadow = "shadow-rounded-2";
pumpAmount = 0.55f; pumpAmount = 0.3f;
consumes.power(0.03f); consumes.power(0.03f);
liquidCapacity = 40f; liquidCapacity = 40f;
hasPower = true; hasPower = true;

View File

@@ -22,7 +22,7 @@ public class PowerBlocks extends BlockList implements ContentList{
thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{ thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{
maxLiquidGenerate = 0.5f; maxLiquidGenerate = 0.5f;
powerCapacity = 40f; powerCapacity = 40f;
powerPerLiquid = 1.5f; powerPerLiquid = 1f;
generateEffect = BlockFx.redgeneratespark; generateEffect = BlockFx.redgeneratespark;
size = 2; size = 2;
}}; }};

View File

@@ -216,7 +216,7 @@ public class TurretBlocks extends BlockList implements ContentList{
spectre = new DoubleTurret("spectre"){{ spectre = new DoubleTurret("spectre"){{
ammoTypes = new AmmoType[]{AmmoTypes.bulletDenseBig, AmmoTypes.bulletPyratiteBig, AmmoTypes.bulletThoriumBig}; ammoTypes = new AmmoType[]{AmmoTypes.bulletDenseBig, AmmoTypes.bulletPyratiteBig, AmmoTypes.bulletThoriumBig};
reload = 4f; reload = 6f;
coolantMultiplier = 0.5f; coolantMultiplier = 0.5f;
maxCoolantUsed = 1.5f; maxCoolantUsed = 1.5f;
restitution = 0.1f; restitution = 0.1f;
@@ -236,12 +236,16 @@ public class TurretBlocks extends BlockList implements ContentList{
meltdown = new LaserTurret("meltdown"){{ meltdown = new LaserTurret("meltdown"){{
shootType = AmmoTypes.meltdownLaser; shootType = AmmoTypes.meltdownLaser;
shootEffect = ShootFx.shootBigSmoke2;
shootCone = 40f; shootCone = 40f;
recoil = 4f;
size = 4; size = 4;
shootShake = 2f;
powerUsed = 10f; powerUsed = 10f;
range = 140f; range = 160f;
reload = 60f; reload = 130f;
shootDuration = 60f; firingMoveFract = 0.25f;
shootDuration = 180f;
powerCapacity = 50f; powerCapacity = 50f;
}}; }};
} }

View File

@@ -20,10 +20,7 @@ import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.blocks.distribution.MassDriver.DriverBulletData; import io.anuke.mindustry.world.blocks.distribution.MassDriver.DriverBulletData;
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.*;
import io.anuke.ucore.graphics.Fill;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.graphics.Shapes;
import io.anuke.ucore.util.Angles; import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
@@ -161,14 +158,16 @@ public class TurretBullets extends BulletList implements ContentList{
} }
}; };
meltdownLaser = new BulletType(0.001f, 140){ meltdownLaser = new BulletType(0.001f, 20){
Color[] colors = {Palette.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Palette.lancerLaser, Color.WHITE}; Color tmpColor = new Color();
Color[] colors = {Color.valueOf("ec745855"), Color.valueOf("ec7458aa"), Color.valueOf("ff9c5a"), Color.WHITE};
float[] tscales = {1f, 0.7f, 0.5f, 0.2f}; float[] tscales = {1f, 0.7f, 0.5f, 0.2f};
float[] lenscales = {1f, 1.1f, 1.13f, 1.14f}; float[] strokes = {2f, 1.5f, 1f, 0.3f};
float length = 100f; float[] lenscales = {1f, 1.12f, 1.15f, 1.17f};
float length = 200f;
{ {
hiteffect = BulletFx.hitLancer; hiteffect = BulletFx.hitMeltdown;
despawneffect = Fx.none; despawneffect = Fx.none;
hitsize = 4; hitsize = 4;
lifetime = 16f; lifetime = 16f;
@@ -177,19 +176,31 @@ public class TurretBullets extends BulletList implements ContentList{
@Override @Override
public void update(Bullet b){ public void update(Bullet b){
Damage.collideLine(b, b.getTeam(), hiteffect, b.x, b.y, b.angle(), length); if(b.timer.get(1, 5f)){
Damage.collideLine(b, b.getTeam(), hiteffect, b.x, b.y, b.angle(), length);
}
Effects.shake(1f, 1f, b.x, b.y);
}
@Override
public void hit(Bullet b, float hitx, float hity){
Effects.effect(hiteffect, colors[2], hitx, hity);
if(Mathf.chance(0.4)){
Fire.create(world.tileWorld(hitx, hity));
}
} }
@Override @Override
public void draw(Bullet b){ public void draw(Bullet b){
float baseLen = length * b.fout(); float baseLen = (length) * b.fout();
Lines.lineAngle(b.x, b.y, b.angle(), baseLen); Lines.lineAngle(b.x, b.y, b.angle(), baseLen);
for(int s = 0; s < 3; s++){ for(int s = 0; s < colors.length; s++){
Draw.color(colors[s]); Draw.color(tmpColor.set(colors[s]).mul(1f + Mathf.absin(Timers.time(), 1f, 0.1f)));
for(int i = 0; i < tscales.length; i++){ for(int i = 0; i < tscales.length; i++){
Lines.stroke(7f * b.fout() * (s == 0 ? 1.5f : s == 1 ? 1f : 0.3f) * tscales[i]); vector.trns(b.angle() + 180f, (lenscales[i] - 1f) * 35f);
Lines.lineAngle(b.x, b.y, b.angle(), baseLen * lenscales[i]); Lines.stroke((9f + Mathf.absin(Timers.time(), 0.8f, 1.5f)) * b.fout() * strokes[s] * tscales[i]);
Lines.lineAngle(b.x + vector.x, b.y + vector.y, b.angle(), baseLen * lenscales[i], CapStyle.none);
} }
} }
Draw.reset(); Draw.reset();

View File

@@ -11,7 +11,7 @@ import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
public class BulletFx extends FxList implements ContentList{ public class BulletFx extends FxList implements ContentList{
public static Effect hitBulletSmall, hitFuse, hitBulletBig, hitFlameSmall, hitLiquid, hitLaser, hitLancer, despawn, flakExplosion, blastExplosion, plasticExplosion, public static Effect hitBulletSmall, hitFuse, hitBulletBig, hitFlameSmall, hitLiquid, hitLaser, hitLancer, hitMeltdown, despawn, flakExplosion, blastExplosion, plasticExplosion,
artilleryTrail, incendTrail, missileTrail, absorb, flakExplosionBig, plasticExplosionFlak; artilleryTrail, incendTrail, missileTrail, absorb, flakExplosionBig, plasticExplosionFlak;
@Override @Override
@@ -101,6 +101,18 @@ public class BulletFx extends FxList implements ContentList{
Draw.reset(); Draw.reset();
}); });
hitMeltdown = new Effect(12, e -> {
Draw.color(Palette.meltdownHit);
Lines.stroke(e.fout() * 2f);
Angles.randLenVectors(e.id, 6, e.finpow() * 18f, e.rotation, 360f, (x, y) -> {
float ang = Mathf.atan2(x, y);
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
});
Draw.reset();
});
hitLaser = new Effect(8, e -> { hitLaser = new Effect(8, e -> {
Draw.color(Color.WHITE, Palette.heal, e.fin()); Draw.color(Color.WHITE, Palette.heal, e.fin());
Lines.stroke(0.5f + e.fout()); Lines.stroke(0.5f + e.fout());

View File

@@ -238,19 +238,20 @@ public interface BuilderTrait extends Entity{
/**Do not call directly.*/ /**Do not call directly.*/
default void updateMining(Unit unit){ default void updateMining(Unit unit){
Tile tile = getMineTile(); Tile tile = getMineTile();
TileEntity core = unit.getClosestCore();
if(tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || !unit.inventory.canAcceptItem(tile.floor().drops.item)){ if(core == null || tile.block() != Blocks.air || unit.distanceTo(tile.worldx(), tile.worldy()) > mineDistance || !unit.inventory.canAcceptItem(tile.floor().drops.item)){
setMineTile(null); setMineTile(null);
}else{ }else{
Item item = tile.floor().drops.item; Item item = tile.floor().drops.item;
unit.rotation = Mathf.slerpDelta(unit.rotation, unit.angleTo(tile.worldx(), tile.worldy()), 0.4f); unit.rotation = Mathf.slerpDelta(unit.rotation, unit.angleTo(tile.worldx(), tile.worldy()), 0.4f);
if(unit.inventory.canAcceptItem(item) && if(core.items.get(item) < core.tile.block().getMaximumAccepted(core.tile, item) &&
Mathf.chance(Timers.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){ Mathf.chance(Timers.delta() * (0.06 - item.hardness * 0.01) * getMinePower())){
Call.transferItemToUnit(item,
tile.worldx() + Mathf.range(tilesize / 2f), Call.transferItemTo(item, 1,
tile.worldy() + Mathf.range(tilesize / 2f), tile.worldx() + Mathf.range(tilesize / 2f),
unit); tile.worldy() + Mathf.range(tilesize / 2f), core.tile);
} }
if(Mathf.chance(0.06 * Timers.delta())){ if(Mathf.chance(0.06 * Timers.delta())){

View File

@@ -13,6 +13,8 @@ public class Palette{
missileYellow = Color.valueOf("ffd2ae"), missileYellow = Color.valueOf("ffd2ae"),
missileYellowBack = Color.valueOf("e58956"), missileYellowBack = Color.valueOf("e58956"),
meltdownHit = Color.valueOf("ffb98b"),
plastaniumBack = Color.valueOf("d8d97f"), plastaniumBack = Color.valueOf("d8d97f"),
plastaniumFront = Color.valueOf("fffac6"), plastaniumFront = Color.valueOf("fffac6"),

View File

@@ -27,6 +27,8 @@ public class LaserTurret extends PowerTurret{
entity.bullet.setRotation(entity.rotation); entity.bullet.setRotation(entity.rotation);
entity.bullet.set(tile.drawx() + tr.x, tile.drawy() + tr.y); entity.bullet.set(tile.drawx() + tr.x, tile.drawy() + tr.y);
entity.bullet.time(0f); entity.bullet.time(0f);
entity.heat = 1f;
entity.recoil = recoil;
entity.bulletLife -= Timers.delta(); entity.bulletLife -= Timers.delta();
if(entity.bulletLife <= 0f){ if(entity.bulletLife <= 0f){
entity.bullet = null; entity.bullet = null;
@@ -49,7 +51,7 @@ public class LaserTurret extends PowerTurret{
protected void turnToTarget(Tile tile, float targetRot){ protected void turnToTarget(Tile tile, float targetRot){
LaserTurretEntity entity = tile.entity(); LaserTurretEntity entity = tile.entity();
entity.rotation = Angles.moveToward(entity.rotation, targetRot, rotatespeed * entity.delta() * (entity.bulletLife <= 0f ? firingMoveFract : 1f)); entity.rotation = Angles.moveToward(entity.rotation, targetRot, rotatespeed * entity.delta() * (entity.bulletLife > 0f ? firingMoveFract : 1f));
} }
@Override @Override