Implemented new spawnlist
Before Width: | Height: | Size: 315 B After Width: | Height: | Size: 323 B |
BIN
core/assets-raw/sprites/weapons/chain-blaster-equip.png
Normal file
After Width: | Height: | Size: 318 B |
BIN
core/assets-raw/sprites/weapons/flakgun-equip.png
Normal file
After Width: | Height: | Size: 348 B |
BIN
core/assets-raw/sprites/weapons/flamethrower-equip.png
Normal file
After Width: | Height: | Size: 353 B |
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 126 KiB |
@ -30,6 +30,8 @@ public class WaveSpawner {
|
|||||||
|
|
||||||
public WaveSpawner(){
|
public WaveSpawner(){
|
||||||
Events.on(WorldLoadEvent.class, this::reset);
|
Events.on(WorldLoadEvent.class, this::reset);
|
||||||
|
|
||||||
|
WaveCreator.testWaves(0, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void write(DataOutput output) throws IOException{
|
public void write(DataOutput output) throws IOException{
|
||||||
@ -77,14 +79,16 @@ public class WaveSpawner {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int addGround = groundGroups - groundSpawns.size, addFly = flyGroups - flySpawns.size;
|
||||||
|
|
||||||
//add extra groups if the total exceeds it
|
//add extra groups if the total exceeds it
|
||||||
for (int i = 0; i < groundGroups - groundSpawns.size; i++) {
|
for (int i = 0; i < addGround; i++) {
|
||||||
GroundSpawn spawn = new GroundSpawn();
|
GroundSpawn spawn = new GroundSpawn();
|
||||||
findLocation(spawn);
|
findLocation(spawn);
|
||||||
groundSpawns.add(spawn);
|
groundSpawns.add(spawn);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < flyGroups - flySpawns.size; i++) {
|
for (int i = 0; i < addFly; i++) {
|
||||||
FlyerSpawn spawn = new FlyerSpawn();
|
FlyerSpawn spawn = new FlyerSpawn();
|
||||||
findLocation(spawn);
|
findLocation(spawn);
|
||||||
flySpawns.add(spawn);
|
flySpawns.add(spawn);
|
||||||
|
@ -10,7 +10,7 @@ import io.anuke.mindustry.type.ContentList;
|
|||||||
|
|
||||||
public class AmmoTypes implements ContentList {
|
public class AmmoTypes implements ContentList {
|
||||||
public static AmmoType bulletTungsten, bulletLead, bulletCarbide, bulletThorium, bulletSilicon, bulletThermite,
|
public static AmmoType bulletTungsten, bulletLead, bulletCarbide, bulletThorium, bulletSilicon, bulletThermite,
|
||||||
shotgunTungsten, bombExplosive, bombIncendiary,
|
shotgunTungsten, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite,
|
||||||
flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge,
|
flakLead, flakExplosive, flakPlastic, flakSurge, missileExplosive, missileIncindiary, missileSurge,
|
||||||
artilleryCarbide, artilleryThorium, artilleryPlastic, artilleryHoming, artilleryIncindiary,
|
artilleryCarbide, artilleryThorium, artilleryPlastic, artilleryHoming, artilleryIncindiary,
|
||||||
basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid;
|
basicFlame, lancerLaser, lightning, spectreLaser, meltdownLaser, fuseShotgun, oil, water, lava, cryofluid;
|
||||||
@ -18,6 +18,38 @@ public class AmmoTypes implements ContentList {
|
|||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
|
|
||||||
|
//weapon specific
|
||||||
|
|
||||||
|
shotgunTungsten = new AmmoType(Items.tungsten, WeaponBullets.tungstenShotgun, 2) {{
|
||||||
|
shootEffect = ShootFx.shootBig;
|
||||||
|
smokeEffect = ShootFx.shootBigSmoke;
|
||||||
|
recoil = 1f;
|
||||||
|
}};
|
||||||
|
|
||||||
|
shellCarbide = new AmmoType(Items.carbide, WeaponBullets.shellCarbide, 2) {{
|
||||||
|
shootEffect = ShootFx.shootBig;
|
||||||
|
smokeEffect = ShootFx.shootBigSmoke;
|
||||||
|
}};
|
||||||
|
|
||||||
|
bombExplosive = new AmmoType(Items.blastCompound, WeaponBullets.bombExplosive, 3) {{
|
||||||
|
shootEffect = Fx.none;
|
||||||
|
smokeEffect = Fx.none;
|
||||||
|
}};
|
||||||
|
|
||||||
|
bombIncendiary = new AmmoType(Items.thermite, WeaponBullets.bombIncendiary, 3) {{
|
||||||
|
shootEffect = Fx.none;
|
||||||
|
smokeEffect = Fx.none;
|
||||||
|
}};
|
||||||
|
|
||||||
|
bombOil = new AmmoType(Items.coal, WeaponBullets.bombOil, 3) {{
|
||||||
|
shootEffect = Fx.none;
|
||||||
|
smokeEffect = Fx.none;
|
||||||
|
}};
|
||||||
|
|
||||||
|
flamerThermite = new AmmoType(Items.thermite, TurretBullets.basicFlame, 3) {{
|
||||||
|
shootEffect = ShootFx.shootSmallFlame;
|
||||||
|
}};
|
||||||
|
|
||||||
//bullets
|
//bullets
|
||||||
|
|
||||||
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 5) {{
|
bulletLead = new AmmoType(Items.lead, StandardBullets.lead, 5) {{
|
||||||
@ -56,24 +88,6 @@ public class AmmoTypes implements ContentList {
|
|||||||
inaccuracy = 3f;
|
inaccuracy = 3f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//shotgun (delta mech)
|
|
||||||
|
|
||||||
shotgunTungsten = new AmmoType(Items.tungsten, WeaponBullets.tungstenShotgun, 2) {{
|
|
||||||
shootEffect = ShootFx.shootBig;
|
|
||||||
smokeEffect = ShootFx.shootBigSmoke;
|
|
||||||
recoil = 1f;
|
|
||||||
}};
|
|
||||||
|
|
||||||
bombExplosive = new AmmoType(Items.blastCompound, WeaponBullets.bombExplosive, 3) {{
|
|
||||||
shootEffect = Fx.none;
|
|
||||||
smokeEffect = Fx.none;
|
|
||||||
}};
|
|
||||||
|
|
||||||
bombIncendiary = new AmmoType(Items.thermite, WeaponBullets.bombIncendiary, 3) {{
|
|
||||||
shootEffect = Fx.none;
|
|
||||||
smokeEffect = Fx.none;
|
|
||||||
}};
|
|
||||||
|
|
||||||
//flak
|
//flak
|
||||||
|
|
||||||
flakLead = new AmmoType(Items.lead, FlakBullets.lead, 5) {{
|
flakLead = new AmmoType(Items.lead, FlakBullets.lead, 5) {{
|
||||||
|
@ -71,6 +71,9 @@ public class Recipes implements ContentList{
|
|||||||
new Recipe(crafting, CraftingBlocks.blastMixer, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 60), new ItemStack(Items.carbide, 40));
|
new Recipe(crafting, CraftingBlocks.blastMixer, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 60), new ItemStack(Items.carbide, 40));
|
||||||
new Recipe(crafting, CraftingBlocks.cryofluidmixer, new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 90));
|
new Recipe(crafting, CraftingBlocks.cryofluidmixer, new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 80), new ItemStack(Items.titanium, 90));
|
||||||
|
|
||||||
|
new Recipe(crafting, CraftingBlocks.melter, new ItemStack(Items.tungsten, 60), new ItemStack(Items.lead, 70), new ItemStack(Items.carbide, 90));
|
||||||
|
new Recipe(crafting, CraftingBlocks.incinerator, new ItemStack(Items.carbide, 10), new ItemStack(Items.lead, 30));
|
||||||
|
|
||||||
//processing
|
//processing
|
||||||
new Recipe(crafting, CraftingBlocks.biomatterCompressor, new ItemStack(Items.lead, 70), new ItemStack(Items.silicon, 60));
|
new Recipe(crafting, CraftingBlocks.biomatterCompressor, new ItemStack(Items.lead, 70), new ItemStack(Items.silicon, 60));
|
||||||
new Recipe(crafting, CraftingBlocks.separator, new ItemStack(Items.tungsten, 60), new ItemStack(Items.carbide, 50));
|
new Recipe(crafting, CraftingBlocks.separator, new ItemStack(Items.tungsten, 60), new ItemStack(Items.carbide, 50));
|
||||||
@ -113,7 +116,7 @@ public class Recipes implements ContentList{
|
|||||||
//new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.tungsten, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 30));
|
//new Recipe(units, UpgradeBlocks.deltaFactory, new ItemStack(Items.tungsten, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 30));
|
||||||
|
|
||||||
//actual unit related stuff
|
//actual unit related stuff
|
||||||
new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.tungsten, 30), new ItemStack(Items.lead, 50), new ItemStack(Items.silicon, 80));
|
new Recipe(units, UnitBlocks.droneFactory, new ItemStack(Items.tungsten, 50), new ItemStack(Items.lead, 90), new ItemStack(Items.silicon, 130));
|
||||||
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
||||||
new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ public class UnitTypes implements ContentList {
|
|||||||
maxVelocity = 0.8f;
|
maxVelocity = 0.8f;
|
||||||
ammoCapacity = 0;
|
ammoCapacity = 0;
|
||||||
range = 50f;
|
range = 50f;
|
||||||
|
health = 45;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
scout = new UnitType("scout", Scout.class, Scout::new){{
|
scout = new UnitType("scout", Scout.class, Scout::new){{
|
||||||
@ -25,7 +26,8 @@ public class UnitTypes implements ContentList {
|
|||||||
speed = 0.2f;
|
speed = 0.2f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
range = 40f;
|
range = 40f;
|
||||||
weapon = Weapons.blaster;
|
weapon = Weapons.chainBlaster;
|
||||||
|
health = 70;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
titan = new UnitType("titan", Titan.class, Titan::new){{
|
titan = new UnitType("titan", Titan.class, Titan::new){{
|
||||||
@ -33,7 +35,8 @@ public class UnitTypes implements ContentList {
|
|||||||
speed = 0.18f;
|
speed = 0.18f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
range = 10f;
|
range = 10f;
|
||||||
weapon = Weapons.shockgun;
|
weapon = Weapons.chainBlaster;
|
||||||
|
health = 260;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
vtol = new UnitType("vtol", Vtol.class, Vtol::new){{
|
vtol = new UnitType("vtol", Vtol.class, Vtol::new){{
|
||||||
@ -45,7 +48,7 @@ public class UnitTypes implements ContentList {
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
monsoon = new UnitType("monsoon", Monsoon.class, Monsoon::new){{
|
monsoon = new UnitType("monsoon", Monsoon.class, Monsoon::new){{
|
||||||
health = 300;
|
health = 230;
|
||||||
speed = 0.2f;
|
speed = 0.2f;
|
||||||
maxVelocity = 1.5f;
|
maxVelocity = 1.5f;
|
||||||
drag = 0.01f;
|
drag = 0.01f;
|
||||||
|
@ -9,7 +9,7 @@ import io.anuke.mindustry.type.Upgrade;
|
|||||||
import io.anuke.mindustry.type.Weapon;
|
import io.anuke.mindustry.type.Weapon;
|
||||||
|
|
||||||
public class Weapons implements ContentList {
|
public class Weapons implements ContentList {
|
||||||
public static Weapon blaster, shockgun, sapper, swarmer, bomber;
|
public static Weapon blaster, chainBlaster, shockgun, sapper, swarmer, bomber, flakgun, flamethrower;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
@ -22,6 +22,14 @@ public class Weapons implements ContentList {
|
|||||||
setAmmo(AmmoTypes.bulletLead);
|
setAmmo(AmmoTypes.bulletLead);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
chainBlaster = new Weapon("chain-blaster") {{
|
||||||
|
length = 1.5f;
|
||||||
|
reload = 20f;
|
||||||
|
roundrobin = true;
|
||||||
|
ejectEffect = ShootFx.shellEjectSmall;
|
||||||
|
setAmmo(AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletTungsten, AmmoTypes.bulletSilicon, AmmoTypes.bulletThorium);
|
||||||
|
}};
|
||||||
|
|
||||||
shockgun = new Weapon("shockgun") {{
|
shockgun = new Weapon("shockgun") {{
|
||||||
length = 1f;
|
length = 1f;
|
||||||
reload = 50f;
|
reload = 50f;
|
||||||
@ -34,6 +42,27 @@ public class Weapons implements ContentList {
|
|||||||
setAmmo(AmmoTypes.shotgunTungsten);
|
setAmmo(AmmoTypes.shotgunTungsten);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
flakgun = new Weapon("flakgun") {{
|
||||||
|
length = 1f;
|
||||||
|
reload = 70f;
|
||||||
|
roundrobin = true;
|
||||||
|
shots = 1;
|
||||||
|
inaccuracy = 3f;
|
||||||
|
recoil = 3f;
|
||||||
|
velocityRnd = 0.1f;
|
||||||
|
ejectEffect = ShootFx.shellEjectMedium;
|
||||||
|
setAmmo(AmmoTypes.shellCarbide);
|
||||||
|
}};
|
||||||
|
|
||||||
|
flamethrower = new Weapon("flamethrower") {{
|
||||||
|
length = 1f;
|
||||||
|
reload = 14f;
|
||||||
|
roundrobin = true;
|
||||||
|
recoil = 1f;
|
||||||
|
ejectEffect = Fx.none;
|
||||||
|
setAmmo(AmmoTypes.flamerThermite);
|
||||||
|
}};
|
||||||
|
|
||||||
sapper = new Weapon("sapper") {{
|
sapper = new Weapon("sapper") {{
|
||||||
length = 1.5f;
|
length = 1.5f;
|
||||||
reload = 12f;
|
reload = 12f;
|
||||||
@ -58,7 +87,7 @@ public class Weapons implements ContentList {
|
|||||||
ejectEffect = Fx.none;
|
ejectEffect = Fx.none;
|
||||||
velocityRnd = 1f;
|
velocityRnd = 1f;
|
||||||
inaccuracy = 40f;
|
inaccuracy = 40f;
|
||||||
setAmmo(AmmoTypes.bombExplosive, AmmoTypes.bombIncendiary);
|
setAmmo(AmmoTypes.bombExplosive, AmmoTypes.bombIncendiary, AmmoTypes.bombOil);
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
package io.anuke.mindustry.content.bullets;
|
package io.anuke.mindustry.content.bullets;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.graphics.Color;
|
||||||
|
import io.anuke.mindustry.content.Liquids;
|
||||||
|
import io.anuke.mindustry.content.fx.BlockFx;
|
||||||
import io.anuke.mindustry.content.fx.BulletFx;
|
import io.anuke.mindustry.content.fx.BulletFx;
|
||||||
import io.anuke.mindustry.entities.bullet.BasicBulletType;
|
import io.anuke.mindustry.entities.bullet.BasicBulletType;
|
||||||
import io.anuke.mindustry.entities.bullet.BombBulletType;
|
import io.anuke.mindustry.entities.bullet.BombBulletType;
|
||||||
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.effect.Fire;
|
import io.anuke.mindustry.entities.effect.Fire;
|
||||||
|
import io.anuke.mindustry.entities.effect.Puddle;
|
||||||
import io.anuke.mindustry.graphics.Palette;
|
import io.anuke.mindustry.graphics.Palette;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
@ -13,7 +17,7 @@ import io.anuke.ucore.util.Mathf;
|
|||||||
import static io.anuke.mindustry.Vars.world;
|
import static io.anuke.mindustry.Vars.world;
|
||||||
|
|
||||||
public class WeaponBullets extends BulletList {
|
public class WeaponBullets extends BulletList {
|
||||||
public static BulletType tungstenShotgun, bombExplosive, bombIncendiary;
|
public static BulletType tungstenShotgun, bombExplosive, bombIncendiary, bombOil, shellCarbide;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load() {
|
public void load() {
|
||||||
@ -58,5 +62,38 @@ public class WeaponBullets extends BulletList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bombOil = new BombBulletType(3f, 3f, "shell"){
|
||||||
|
{
|
||||||
|
bulletWidth = 8f;
|
||||||
|
bulletHeight = 12f;
|
||||||
|
hiteffect = BlockFx.pulverize;
|
||||||
|
backColor = new Color(0x4f4f4fff);
|
||||||
|
frontColor = Color.GRAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void hit(Bullet b, float x, float y) {
|
||||||
|
super.hit(b, x, y);
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++) {
|
||||||
|
Tile tile = world.tileWorld(x + Mathf.range(8f), y + Mathf.range(8f));
|
||||||
|
Puddle.deposit(tile, Liquids.oil, 5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
shellCarbide = new BasicBulletType(3.4f, 20, "bullet") {
|
||||||
|
{
|
||||||
|
bulletWidth = 10f;
|
||||||
|
bulletHeight = 12f;
|
||||||
|
bulletShrink = 0.4f;
|
||||||
|
lifetime = 40f;
|
||||||
|
drag = 0.025f;
|
||||||
|
fragBullets = 5;
|
||||||
|
hiteffect = BulletFx.flakExplosion;
|
||||||
|
fragBullet = tungstenShotgun;
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -179,6 +179,8 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
|
|||||||
//effects-only code
|
//effects-only code
|
||||||
if(amount >= maxLiquid/2f && updateTime <= 0f){
|
if(amount >= maxLiquid/2f && updateTime <= 0f){
|
||||||
Units.getNearby(rect.setSize(Mathf.clamp(amount/(maxLiquid/1.5f))*10f).setCenter(x, y), unit -> {
|
Units.getNearby(rect.setSize(Mathf.clamp(amount/(maxLiquid/1.5f))*10f).setCenter(x, y), unit -> {
|
||||||
|
if(unit.isFlying()) return;
|
||||||
|
|
||||||
unit.getHitbox(rect2);
|
unit.getHitbox(rect2);
|
||||||
if(!rect.overlaps(rect2)) return;
|
if(!rect.overlaps(rect2)) return;
|
||||||
|
|
||||||
|
@ -155,7 +155,7 @@ public abstract class GroundUnit extends BaseUnit {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readSave(DataInput stream) throws IOException{
|
public void readSave(DataInput stream) throws IOException{
|
||||||
weapon = Upgrade.getByID(weapon.id);
|
weapon = Upgrade.getByID(stream.readByte());
|
||||||
super.readSave(stream);
|
super.readSave(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ public abstract class GroundUnit extends BaseUnit {
|
|||||||
state.set(resupply);
|
state.set(resupply);
|
||||||
}else if(target != null){
|
}else if(target != null){
|
||||||
if(core != null){
|
if(core != null){
|
||||||
if(dst > inventory.getAmmo().getRange() * 0.7f){
|
if(dst > inventory.getAmmo().getRange() * 0.5f){
|
||||||
moveToCore();
|
moveToCore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,8 +8,6 @@ import io.anuke.mindustry.type.ItemStack;
|
|||||||
import io.anuke.mindustry.type.StatusEffect;
|
import io.anuke.mindustry.type.StatusEffect;
|
||||||
import io.anuke.mindustry.type.Weapon;
|
import io.anuke.mindustry.type.Weapon;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.state;
|
|
||||||
|
|
||||||
/**A spawn group defines spawn information for a specific type of unit, with optional extra information like
|
/**A spawn group defines spawn information for a specific type of unit, with optional extra information like
|
||||||
* weapon equipped, ammo used, and status effects.
|
* weapon equipped, ammo used, and status effects.
|
||||||
* Each spawn group can have multiple sub-groups spawned in different areas of the map.*/
|
* Each spawn group can have multiple sub-groups spawned in different areas of the map.*/
|
||||||
@ -50,7 +48,7 @@ public class SpawnGroup {
|
|||||||
if(wave < begin || wave > end || (wave - begin) % spacing != 0){
|
if(wave < begin || wave > end || (wave - begin) % spacing != 0){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
float scaling = this.unitScaling * state.difficulty.enemyScaling;
|
float scaling = this.unitScaling;
|
||||||
|
|
||||||
return Math.min(unitAmount-1 + Math.max((int)((wave / spacing) / scaling), 1), max);
|
return Math.min(unitAmount-1 + Math.max((int)((wave / spacing) / scaling), 1), max);
|
||||||
}
|
}
|
||||||
@ -75,7 +73,7 @@ public class SpawnGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(effect != null){
|
if(effect != null){
|
||||||
unit.applyEffect(effect, 1f);
|
unit.applyEffect(effect, 10000f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(items != null){
|
if(items != null){
|
||||||
|
@ -2,7 +2,9 @@ package io.anuke.mindustry.game;
|
|||||||
|
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
import io.anuke.mindustry.content.Items;
|
import io.anuke.mindustry.content.Items;
|
||||||
|
import io.anuke.mindustry.content.StatusEffects;
|
||||||
import io.anuke.mindustry.content.UnitTypes;
|
import io.anuke.mindustry.content.UnitTypes;
|
||||||
|
import io.anuke.mindustry.content.Weapons;
|
||||||
import io.anuke.mindustry.type.ItemStack;
|
import io.anuke.mindustry.type.ItemStack;
|
||||||
|
|
||||||
public class WaveCreator{
|
public class WaveCreator{
|
||||||
@ -10,24 +12,149 @@ public class WaveCreator{
|
|||||||
public static Array<SpawnGroup> getSpawns(){
|
public static Array<SpawnGroup> getSpawns(){
|
||||||
return Array.with(
|
return Array.with(
|
||||||
new SpawnGroup(UnitTypes.scout){{
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
end = 5;
|
end = 8;
|
||||||
}},
|
unitScaling = 2;
|
||||||
|
|
||||||
new SpawnGroup(UnitTypes.titan){{
|
|
||||||
begin = 6;
|
|
||||||
}},
|
|
||||||
|
|
||||||
new SpawnGroup(UnitTypes.scout){{
|
|
||||||
begin = 6;
|
|
||||||
items = new ItemStack(Items.thermite, 100);
|
|
||||||
}},
|
}},
|
||||||
|
|
||||||
new SpawnGroup(UnitTypes.vtol){{
|
new SpawnGroup(UnitTypes.vtol){{
|
||||||
|
begin = 4;
|
||||||
|
end = 6;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 11;
|
||||||
|
unitScaling = 2;
|
||||||
|
spacing = 2;
|
||||||
|
max = 4;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.titan){{
|
||||||
begin = 8;
|
begin = 8;
|
||||||
|
spacing = 3;
|
||||||
|
unitScaling = 2;
|
||||||
|
|
||||||
|
end = 30;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 10;
|
||||||
|
unitScaling = 2;
|
||||||
|
unitAmount = 1;
|
||||||
|
spacing = 2;
|
||||||
|
ammoItem = Items.tungsten;
|
||||||
|
end = 30;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.titan){{
|
||||||
|
begin = 28;
|
||||||
|
spacing = 3;
|
||||||
|
unitScaling = 2;
|
||||||
|
weapon = Weapons.flamethrower;
|
||||||
|
end = 40;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.titan){{
|
||||||
|
begin = 45;
|
||||||
|
spacing = 3;
|
||||||
|
unitScaling = 2;
|
||||||
|
weapon = Weapons.flamethrower;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.titan){{
|
||||||
|
begin = 120;
|
||||||
|
spacing = 2;
|
||||||
|
unitScaling = 3;
|
||||||
|
unitAmount = 5;
|
||||||
|
weapon = Weapons.flakgun;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.vtol){{
|
||||||
|
begin = 14;
|
||||||
|
unitScaling = 2;
|
||||||
|
spacing = 2;
|
||||||
|
|
||||||
|
end = 39;
|
||||||
|
max = 7;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 82;
|
||||||
|
spacing = 3;
|
||||||
|
unitAmount = 4;
|
||||||
|
groupAmount = 2;
|
||||||
|
unitScaling = 3;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
ammoItem = Items.silicon;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 41;
|
||||||
|
spacing = 5;
|
||||||
|
unitAmount = 1;
|
||||||
|
unitScaling = 3;
|
||||||
|
effect = StatusEffects.shielded;
|
||||||
|
ammoItem = Items.thorium;
|
||||||
|
max = 10;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 25;
|
||||||
|
spacing = 3;
|
||||||
|
unitAmount = 4;
|
||||||
|
groupAmount = 2;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
items = new ItemStack(Items.blastCompound, 60);
|
||||||
|
end = 60;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.scout){{
|
||||||
|
begin = 42;
|
||||||
|
spacing = 3;
|
||||||
|
unitAmount = 4;
|
||||||
|
groupAmount = 2;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
items = new ItemStack(Items.thermite, 100);
|
||||||
|
end = 130;
|
||||||
}},
|
}},
|
||||||
|
|
||||||
new SpawnGroup(UnitTypes.monsoon){{
|
new SpawnGroup(UnitTypes.monsoon){{
|
||||||
begin = 16;
|
begin = 35;
|
||||||
|
ammoItem = Items.blastCompound;
|
||||||
|
unitAmount = 2;
|
||||||
|
unitScaling = 3;
|
||||||
|
max = 8;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.vtol){{
|
||||||
|
begin = 50;
|
||||||
|
unitAmount = 4;
|
||||||
|
unitScaling = 3;
|
||||||
|
spacing = 5;
|
||||||
|
groupAmount = 2;
|
||||||
|
effect = StatusEffects.overdrive;
|
||||||
|
max = 8;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.monsoon){{
|
||||||
|
begin = 53;
|
||||||
|
ammoItem = Items.thermite;
|
||||||
|
unitAmount = 2;
|
||||||
|
unitScaling = 3;
|
||||||
|
spacing = 4;
|
||||||
|
max = 8;
|
||||||
|
end = 74;
|
||||||
|
}},
|
||||||
|
|
||||||
|
new SpawnGroup(UnitTypes.monsoon){{
|
||||||
|
begin = 53;
|
||||||
|
ammoItem = Items.coal;
|
||||||
|
unitAmount = 2;
|
||||||
|
unitScaling = 3;
|
||||||
|
spacing = 4;
|
||||||
|
max = 8;
|
||||||
|
end = 74;
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -38,11 +165,21 @@ public class WaveCreator{
|
|||||||
System.out.print(i+": ");
|
System.out.print(i+": ");
|
||||||
int total = 0;
|
int total = 0;
|
||||||
for(SpawnGroup spawn : spawns){
|
for(SpawnGroup spawn : spawns){
|
||||||
int a = spawn.getUnitsSpawned(i);
|
int a = spawn.getUnitsSpawned(i) * spawn.getGroupsSpawned(i);
|
||||||
total += a;
|
total += a;
|
||||||
|
|
||||||
if(a > 0){
|
if(a > 0){
|
||||||
System.out.print(a+"x" + spawn.type.name);
|
System.out.print(a+"x" + spawn.type.name);
|
||||||
|
|
||||||
|
if(spawn.weapon != null){
|
||||||
|
System.out.print(":" + spawn.weapon.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(spawn.ammoItem != null){
|
||||||
|
System.out.print(":" + spawn.ammoItem.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.print(" ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.print(" (" + total + ")");
|
System.out.print(" (" + total + ")");
|
||||||
|
@ -78,8 +78,14 @@ public class Generators {
|
|||||||
image.draw(type.legRegion, true, false);
|
image.draw(type.legRegion, true, false);
|
||||||
image.draw(type.region);
|
image.draw(type.region);
|
||||||
|
|
||||||
image.draw(type.weapon.equipRegion, -(int)type.weaponOffsetX, (int)type.weaponOffsetY, false, false);
|
image.draw(type.weapon.equipRegion,
|
||||||
image.draw(type.weapon.equipRegion, (int)type.weaponOffsetX, (int)type.weaponOffsetY, true, false);
|
-(int)type.weaponOffsetX + (image.width() - type.weapon.equipRegion.getRegionWidth())/2,
|
||||||
|
(int)type.weaponOffsetY - (image.height() - type.weapon.equipRegion.getRegionHeight())/2,
|
||||||
|
false, false);
|
||||||
|
image.draw(type.weapon.equipRegion,
|
||||||
|
(int)type.weaponOffsetX + (image.width() - type.weapon.equipRegion.getRegionWidth())/2,
|
||||||
|
(int)type.weaponOffsetY - (image.height() - type.weapon.equipRegion.getRegionHeight())/2,
|
||||||
|
true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
image.save("unit-icon-" + type.name);
|
image.save("unit-icon-" + type.name);
|
||||||
|