Omega mech implementation

This commit is contained in:
Anuken
2018-08-21 22:40:39 -04:00
parent 3bf72a1af6
commit e1f7c7b03d
21 changed files with 650 additions and 591 deletions

View File

@@ -26,7 +26,7 @@ allprojects {
appName = 'Mindustry' appName = 'Mindustry'
gdxVersion = '1.9.8' gdxVersion = '1.9.8'
roboVMVersion = '2.3.0' roboVMVersion = '2.3.0'
uCoreVersion = 'd30ec505beb78da25fea3a5aa78f79260f2fb65b' uCoreVersion = '7053ba9c265d9743593063080c1bf8ce243c3827'
getVersionString = { getVersionString = {
String buildVersion = getBuildVersion() String buildVersion = getBuildVersion()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 B

After

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 B

After

Width:  |  Height:  |  Size: 140 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 B

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 B

After

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 B

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -11,7 +11,7 @@ import io.anuke.mindustry.type.ContentList;
public class AmmoTypes implements ContentList{ public class AmmoTypes implements ContentList{
public static AmmoType bulletCopper, bulletDense, bulletThorium, bulletSilicon, bulletPyratite, public static AmmoType bulletCopper, bulletDense, bulletThorium, bulletSilicon, bulletPyratite,
shotgunTungsten, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite, weaponMissile, bulletMech, shotgunTungsten, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite, weaponMissile, weaponMissileSwarm, bulletMech,
flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge, flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge,
artilleryDense, artilleryPlastic, artilleryHoming, artilleryIncindiary, artilleryExplosive, artilleryDense, artilleryPlastic, artilleryHoming, artilleryIncindiary, artilleryExplosive,
basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid; basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid;
@@ -64,6 +64,12 @@ public class AmmoTypes implements ContentList{
reloadMultiplier = 1.2f; reloadMultiplier = 1.2f;
}}; }};
weaponMissileSwarm = new AmmoType(MissileBullets.swarm){{
shootEffect = BulletFx.hitBulletSmall;
smokeEffect = ShootFx.shootSmallSmoke;
reloadMultiplier = 1.2f;
}};
//bullets //bullets
bulletCopper = new AmmoType(Items.copper, StandardBullets.copper, 5){{ bulletCopper = new AmmoType(Items.copper, StandardBullets.copper, 5){{

View File

@@ -11,9 +11,7 @@ import io.anuke.mindustry.type.Upgrade;
public class Mechs implements ContentList{ public class Mechs implements ContentList{
public static Mech alpha, delta, tau, omega, dart, javelin, trident, halberd; public static Mech alpha, delta, tau, omega, dart, javelin, trident, halberd;
/** /**These are not new mechs, just re-assignments for convenience.*/
* These are not new mechs, just re-assignments for convenience.
*/
public static Mech starterDesktop, starterMobile; public static Mech starterDesktop, starterMobile;
@Override @Override
@@ -25,7 +23,6 @@ public class Mechs implements ContentList{
speed = 0.5f; speed = 0.5f;
boostSpeed = 0.85f; boostSpeed = 0.85f;
weapon = Weapons.blaster; weapon = Weapons.blaster;
trailColor = Palette.lightTrail;
maxSpeed = 4f; maxSpeed = 4f;
}}; }};
@@ -36,23 +33,37 @@ public class Mechs implements ContentList{
itemCapacity = 15; itemCapacity = 15;
armor = 30f; armor = 30f;
weaponOffsetX = -1; weaponOffsetX = -1;
itemCapacity = 15;
weaponOffsetY = -1; weaponOffsetY = -1;
weapon = Weapons.shockgun; weapon = Weapons.shockgun;
ammoCapacity = 50; trailColorTo = Color.valueOf("d3ddff");
trailColor = Color.valueOf("d3ddff");
maxSpeed = 5f; maxSpeed = 5f;
}}; }};
tau = new Mech("tau-mech", false){{ tau = new Mech("tau-mech", false){{
drillPower = 2; drillPower = 3;
speed = 0.5f; mineSpeed = 3f;
itemCapacity = 70;
speed = 0.44f;
drag = 0.35f;
boostSpeed = 0.8f;
weapon = Weapons.blaster;
maxSpeed = 5f; maxSpeed = 5f;
armor = 30f;
}}; }};
omega = new Mech("omega-mech", false){{ omega = new Mech("omega-mech", false){{
drillPower = 1; drillPower = 2;
speed = 0.4f; mineSpeed = 1.5f;
maxSpeed = 3f; itemCapacity = 50;
speed = 0.36f;
boostSpeed = 0.6f;
shake = 4f;
weaponOffsetX = 1;
weaponOffsetY = 0;
weapon = Weapons.swarmer;
maxSpeed = 3.5f;
armor = 70f;
}}; }};
dart = new Mech("dart-ship", true){{ dart = new Mech("dart-ship", true){{

View File

@@ -128,6 +128,7 @@ public class Recipes implements ContentList{
new Recipe(units, UpgradeBlocks.dartFactory, new ItemStack(Items.lead, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setDesktop(); //dart is desktop only, because it's the starter mobile ship new Recipe(units, UpgradeBlocks.dartFactory, new ItemStack(Items.lead, 150), new ItemStack(Items.silicon, 200), new ItemStack(Items.titanium, 240)).setDesktop(); //dart is desktop only, because it's the starter mobile ship
new Recipe(units, UpgradeBlocks.javelinFactory, new ItemStack(Items.lead, 200), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200)); new Recipe(units, UpgradeBlocks.javelinFactory, new ItemStack(Items.lead, 200), new ItemStack(Items.silicon, 250), new ItemStack(Items.titanium, 300), new ItemStack(Items.plastanium, 200));
new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.densealloy, 160), new ItemStack(Items.silicon, 220), new ItemStack(Items.titanium, 250)).setDesktop(); new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.densealloy, 160), new ItemStack(Items.silicon, 220), new ItemStack(Items.titanium, 250)).setDesktop();
new Recipe(units, UpgradeBlocks.omegaFactory, new ItemStack(Items.densealloy, 160), new ItemStack(Items.silicon, 220), new ItemStack(Items.titanium, 250)).setDesktop();
//new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.copper, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 30)); //new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.copper, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 30));

View File

@@ -33,6 +33,19 @@ public class Weapons implements ContentList{
ammo = AmmoTypes.weaponMissile; ammo = AmmoTypes.weaponMissile;
}}; }};
swarmer = new Weapon("swarmer"){{
length = 1.5f;
recoil = 4f;
reload = 60f;
shots = 4;
inaccuracy = 8f;
roundrobin = false;
roundrobin = true;
ejectEffect = Fx.none;
shake = 3f;
ammo = AmmoTypes.weaponMissileSwarm;
}};
chainBlaster = new Weapon("chain-blaster"){{ chainBlaster = new Weapon("chain-blaster"){{
length = 1.5f; length = 1.5f;
reload = 28f; reload = 28f;
@@ -82,14 +95,6 @@ public class Weapons implements ContentList{
ammo = AmmoTypes.bulletDense; ammo = AmmoTypes.bulletDense;
}}; }};
swarmer = new Weapon("swarmer"){{
length = 1.5f;
reload = 10f;
roundrobin = true;
ejectEffect = ShootFx.shellEjectSmall;
ammo = AmmoTypes.bulletPyratite;
}};
bomber = new Weapon("bomber"){{ bomber = new Weapon("bomber"){{
length = 0f; length = 0f;
width = 2f; width = 2f;

View File

@@ -1,5 +1,6 @@
package io.anuke.mindustry.content.bullets; package io.anuke.mindustry.content.bullets;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.content.fx.BulletFx; import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.entities.bullet.BulletType; import io.anuke.mindustry.entities.bullet.BulletType;
import io.anuke.mindustry.entities.bullet.MissileBulletType; import io.anuke.mindustry.entities.bullet.MissileBulletType;
@@ -7,7 +8,7 @@ import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.type.ContentList; import io.anuke.mindustry.type.ContentList;
public class MissileBullets extends BulletList implements ContentList{ public class MissileBullets extends BulletList implements ContentList{
public static BulletType explosive, incindiary, surge, javelin; public static BulletType explosive, incindiary, surge, javelin, swarm;
@Override @Override
public void load(){ public void load(){
@@ -65,5 +66,23 @@ public class MissileBullets extends BulletList implements ContentList{
despawneffect = BulletFx.blastExplosion; despawneffect = BulletFx.blastExplosion;
} }
}; };
swarm = new MissileBulletType(2.7f, 10, "missile"){
{
bulletWidth = 8f;
bulletHeight = 8f;
bulletShrink = 0f;
drag = -0.003f;
keepVelocity = false;
splashDamageRadius = 25f;
splashDamage = 15f;
lifetime = 120f;
trailColor = Color.GRAY;
backColor = Palette.bulletYellowBack;
frontColor = Palette.bulletYellow;
hiteffect = BulletFx.blastExplosion;
despawneffect = BulletFx.blastExplosion;
}
};
} }
} }

View File

@@ -179,7 +179,7 @@ public class BulletFx extends FxList implements ContentList{
}); });
missileTrail = new Effect(50, e -> { missileTrail = new Effect(50, e -> {
Draw.color(Palette.missileYellowBack); Draw.color(e.color);
Fill.circle(e.x, e.y, e.rotation * e.fout()); Fill.circle(e.x, e.y, e.rotation * e.fout());
Draw.reset(); Draw.reset();
}); });

View File

@@ -50,12 +50,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
private static final float liftoffBoost = 0.2f; private static final float liftoffBoost = 0.2f;
//region instance variables, constructor //region instance variables, constructor
public float baseRotation;
public float baseRotation;
public float pointerX, pointerY; public float pointerX, pointerY;
public String name = "name"; public String name = "name";
public String uuid, usid; public String uuid, usid;
public boolean isAdmin, isTransferring, isShooting, isBoosting, isMobile; public boolean isAdmin, isTransferring, isShooting, isBoosting, isAlt, isMobile;
public float boostHeat; public float boostHeat;
public boolean achievedFlight; public boolean achievedFlight;
public Color color = new Color(); public Color color = new Color();
@@ -300,7 +300,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
Draw.rect(mech.legRegion, Draw.rect(mech.legRegion,
x + Angles.trnsx(baseRotation, ft * i + boostTrnsY, -boostTrnsX * i), x + Angles.trnsx(baseRotation, ft * i + boostTrnsY, -boostTrnsX * i),
y + Angles.trnsy(baseRotation, ft * i + boostTrnsY, -boostTrnsX * i), y + Angles.trnsy(baseRotation, ft * i + boostTrnsY, -boostTrnsX * i),
12f * i, 12f - Mathf.clamp(ft * i, 0, 2), baseRotation - 90 + boostAng * i); mech.legRegion.getRegionWidth() * i, mech.legRegion.getRegionHeight() - Mathf.clamp(ft * i, 0, 2), baseRotation - 90 + boostAng * i);
} }
Draw.rect(mech.baseRegion, x, y, baseRotation - 90); Draw.rect(mech.baseRegion, x, y, baseRotation - 90);
@@ -316,10 +316,10 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
for(int i : Mathf.signs){ for(int i : Mathf.signs){
float tra = rotation - 90, trY = -mech.weapon.getRecoil(this, i > 0) + mech.weaponOffsetY; float tra = rotation - 90, trY = -mech.weapon.getRecoil(this, i > 0) + mech.weaponOffsetY;
float w = i > 0 ? -12 : 12; float w = i > 0 ? -mech.weapon.equipRegion.getRegionWidth() : mech.weapon.equipRegion.getRegionWidth();
Draw.rect(mech.weapon.equipRegion, Draw.rect(mech.weapon.equipRegion,
x + Angles.trnsx(tra, mech.weaponOffsetX * i, trY), x + Angles.trnsx(tra, mech.weaponOffsetX * i, trY),
y + Angles.trnsy(tra, mech.weaponOffsetX * i, trY), w, 12, rotation - 90); y + Angles.trnsy(tra, mech.weaponOffsetX * i, trY), w, mech.weapon.equipRegion.getRegionHeight(), rotation - 90);
} }
float backTrns = 4f, itemSize = 5f; float backTrns = 4f, itemSize = 5f;
@@ -496,11 +496,17 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
} }
if(boostHeat <= liftoffBoost + 0.05f && achievedFlight){ if(boostHeat <= liftoffBoost + 0.05f && achievedFlight){
if(tile != null) Effects.effect(UnitFx.unitLand, tile.floor().minimapColor, x, y, tile.floor().isLiquid ? 1f : 0.5f); if(tile != null){
if(mech.shake > 1f){
Effects.shake(mech.shake, mech.shake, this);
}
Effects.effect(UnitFx.unitLand, tile.floor().minimapColor, x, y, tile.floor().isLiquid ? 1f : 0.5f);
}
achievedFlight = false; achievedFlight = false;
} }
isBoosting = Inputs.keyDown("dash") && !mech.flying; isBoosting = Inputs.keyDown("dash") && !mech.flying;
isAlt = Inputs.keyDown("ability") && !mech.flying;
//if player is in solid block //if player is in solid block
if(tile != null && tile.solid()){ if(tile != null && tile.solid()){

View File

@@ -3,8 +3,8 @@ package io.anuke.mindustry.entities.bullet;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.entities.Units; import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.entities.traits.TargetTrait;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers; import io.anuke.ucore.core.Timers;
@@ -70,7 +70,7 @@ public class BasicBulletType extends BulletType{
super.update(b); super.update(b);
if(homingPower > 0.0001f){ if(homingPower > 0.0001f){
Unit target = Units.getClosestEnemy(b.getTeam(), b.x, b.y, homingRange, unit -> true); TargetTrait target = Units.getClosestTarget(b.getTeam(), b.x, b.y, homingRange);
if(target != null){ if(target != null){
b.getVelocity().setAngle(Angles.moveToward(b.getVelocity().angle(), b.angleTo(target), homingPower * Timers.delta())); b.getVelocity().setAngle(Angles.moveToward(b.getVelocity().angle(), b.angleTo(target), homingPower * Timers.delta()));
} }

View File

@@ -1,10 +1,14 @@
package io.anuke.mindustry.entities.bullet; package io.anuke.mindustry.entities.bullet;
import com.badlogic.gdx.graphics.Color;
import io.anuke.mindustry.content.fx.BulletFx; import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.graphics.Palette;
import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Mathf;
public class MissileBulletType extends BasicBulletType{ public class MissileBulletType extends BasicBulletType{
protected Color trailColor = Palette.missileYellowBack;
public MissileBulletType(float speed, float damage, String bulletSprite){ public MissileBulletType(float speed, float damage, String bulletSprite){
super(speed, damage, bulletSprite); super(speed, damage, bulletSprite);
@@ -17,8 +21,8 @@ public class MissileBulletType extends BasicBulletType{
public void update(Bullet b){ public void update(Bullet b){
super.update(b); super.update(b);
if(b.timer.get(0, 4f)){ if(Mathf.chance(Timers.delta() * 0.2)){
Effects.effect(BulletFx.missileTrail, b.x, b.y, 2f); Effects.effect(BulletFx.missileTrail, trailColor, b.x, b.y, 2f);
} }
} }
} }

View File

@@ -24,6 +24,7 @@ public class DefaultKeybinds{
//"shoot", Input.MOUSE_LEFT, //"shoot", Input.MOUSE_LEFT,
"rotate", new Axis(Input.SCROLL), "rotate", new Axis(Input.SCROLL),
"dash", Input.SHIFT_LEFT, "dash", Input.SHIFT_LEFT,
"ability", Input.SPACE,
"drop_unit", Input.SHIFT_LEFT, "drop_unit", Input.SHIFT_LEFT,
new Category("view"), new Category("view"),
"zoom_hold", Input.CONTROL_LEFT, "zoom_hold", Input.CONTROL_LEFT,

View File

@@ -18,6 +18,7 @@ public class Mech extends Upgrade implements UnlockableContent{
public float boostSpeed = 0.75f; public float boostSpeed = 0.75f;
public float drag = 0.4f; public float drag = 0.4f;
public float mass = 1f; public float mass = 1f;
public float shake = 0f;
public float armor = 1f; public float armor = 1f;
public float mineSpeed = 1f; public float mineSpeed = 1f;
@@ -26,14 +27,12 @@ public class Mech extends Upgrade implements UnlockableContent{
public float buildPower = 1f; public float buildPower = 1f;
public Color trailColor = Palette.boostFrom; public Color trailColor = Palette.boostFrom;
public Color trailColorTo = Palette.boostTo; public Color trailColorTo = Palette.boostTo;
public int itemCapacity = 30;
public float weaponOffsetX, weaponOffsetY; public float weaponOffsetX, weaponOffsetY;
public Weapon weapon = Weapons.blaster; public Weapon weapon = Weapons.blaster;
public int itemCapacity = 30;
public int ammoCapacity = 100;
public TextureRegion baseRegion, legRegion, region, iconRegion; public TextureRegion baseRegion, legRegion, region, iconRegion;
public Mech(String name, boolean flying){ public Mech(String name, boolean flying){

View File

@@ -257,7 +257,7 @@ public class Tile implements PosTrait, TargetTrait{
if(link == 0){ if(link == 0){
return (block.destructible || block.breakable || block.update); return (block.destructible || block.breakable || block.update);
}else{ }else{
return getLinked().breakable(); return getLinked() != this && getLinked().breakable();
} }
} }