From 7c028ffcb863f16986f04bc9fa2cc511492b6307 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 13:56:12 -0400 Subject: [PATCH] Experimental positional spawn support / WIP map --- core/assets/maps/coastline.msav | Bin 22176 -> 22312 bytes core/assets/maps/navalFortress.msav | Bin 0 -> 20998 bytes core/src/mindustry/ai/WaveSpawner.java | 22 ++++++++++----- core/src/mindustry/content/SectorPresets.java | 3 +- core/src/mindustry/editor/WaveInfoDialog.java | 26 +++++++++++++++++- core/src/mindustry/game/SpawnGroup.java | 10 ++++++- core/src/mindustry/maps/SectorDamage.java | 8 +++++- .../mindustry/maps/filters/BlendFilter.java | 4 +-- 8 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 core/assets/maps/navalFortress.msav diff --git a/core/assets/maps/coastline.msav b/core/assets/maps/coastline.msav index 66c343f4d67d26d64b754e1c7c800f0d80250645..91e8c1db83f3f49b3e4ee4cfa85f61fae5d87762 100644 GIT binary patch literal 22312 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 T{@P;yZ#@0*;5Yt16XRNw;1yrg literal 22176 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%0DOholAK>X+KG_AKSlY`FW1*fSym= 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 literal 0 HcmV?d00001 diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 276b86bb26..82d695fc83 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -56,7 +56,7 @@ public class WaveSpawner{ public void spawnEnemies(){ spawning = true; - eachGroundSpawn((spawnX, spawnY, doShockwave) -> { + eachGroundSpawn(-1, (spawnX, spawnY, doShockwave) -> { if(doShockwave){ doShockwave(spawnX, spawnY); } @@ -70,7 +70,7 @@ public class WaveSpawner{ if(group.type.flying){ float spread = margin / 1.5f; - eachFlyerSpawn((spawnX, spawnY) -> { + eachFlyerSpawn(group.spawn, (spawnX, spawnY) -> { for(int i = 0; i < spawned; i++){ Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1); unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread)); @@ -80,7 +80,7 @@ public class WaveSpawner{ }else{ float spread = tilesize * 2; - eachGroundSpawn((spawnX, spawnY, doShockwave) -> { + eachGroundSpawn(group.spawn, (spawnX, spawnY, doShockwave) -> { for(int i = 0; i < spawned; i++){ Tmp.v1.rnd(spread); @@ -102,12 +102,14 @@ public class WaveSpawner{ } public void eachGroundSpawn(Intc2 cons){ - eachGroundSpawn((x, y, shock) -> cons.get(World.toTile(x), World.toTile(y))); + eachGroundSpawn(-1, (x, y, shock) -> cons.get(World.toTile(x), World.toTile(y))); } - private void eachGroundSpawn(SpawnConsumer cons){ + private void eachGroundSpawn(int filterPos, SpawnConsumer cons){ if(state.hasSpawns()){ for(Tile spawn : spawns){ + if(filterPos != -1 && filterPos != spawn.pos()) continue; + cons.accept(spawn.worldx(), spawn.worldy(), true); } } @@ -115,6 +117,8 @@ public class WaveSpawner{ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){ Building firstCore = state.teams.playerCores().first(); for(Building core : state.rules.waveTeam.cores()){ + if(filterPos != -1 && filterPos != core.pos()) continue; + Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2); boolean valid = false; @@ -147,8 +151,10 @@ public class WaveSpawner{ } } - private void eachFlyerSpawn(Floatc2 cons){ + private void eachFlyerSpawn(int filterPos, Floatc2 cons){ for(Tile tile : spawns){ + if(filterPos != -1 && filterPos != tile.pos()) continue; + float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y); float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize; float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin); @@ -158,6 +164,8 @@ public class WaveSpawner{ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){ for(Building core : state.rules.waveTeam.data().cores){ + if(filterPos != -1 && filterPos != core.pos()) continue; + cons.get(core.x, core.y); } } @@ -171,7 +179,7 @@ public class WaveSpawner{ public int countFlyerSpawns(){ tmpCount = 0; - eachFlyerSpawn((x, y) -> tmpCount ++); + eachFlyerSpawn(-1, (x, y) -> tmpCount ++); return tmpCount; } diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index b1f0796a29..7c86779dc9 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -70,9 +70,8 @@ public class SectorPresets implements ContentList{ difficulty = 5; }}; - //TODO - if(false) navalFortress = new SectorPreset("navalFortress", serpulo, 216){{ + //TODO AI or not? useAI = true; difficulty = 8; }}; diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index d6588b3279..10c4751bd7 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -3,6 +3,7 @@ package mindustry.editor; import arc.*; import arc.graphics.*; import arc.math.*; +import arc.math.geom.*; import arc.scene.event.*; import arc.scene.style.*; import arc.scene.ui.*; @@ -316,7 +317,30 @@ public class WaveInfoDialog extends BaseDialog{ t.check("@waves.guardian", b -> { group.effect = (b ? StatusEffects.boss : null); buildGroups(); - }).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f); + }).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f).row(); + + //spawn positions are clunky and thus experimental for now + if(experimental){ + t.table(a -> { + a.add("spawn at "); + + a.field(group.spawn == -1 ? "" : Point2.x(group.spawn) + "", TextFieldFilter.digitsOnly, text -> { + if(Strings.canParsePositiveInt(text)){ + group.spawn = Point2.pack(Strings.parseInt(text), Point2.y(group.spawn)); + Log.info(group.spawn); + } + }).width(70f); + + a.add(","); + + a.field(group.spawn == -1 ? "" : Point2.y(group.spawn) + "", TextFieldFilter.digitsOnly, text -> { + if(Strings.canParsePositiveInt(text)){ + group.spawn = Point2.pack(Point2.x(group.spawn), Strings.parseInt(text)); + Log.info(group.spawn); + } + }).width(70f); + }).padBottom(8f).padTop(-8f).row(); + } } }).width(340f).pad(8); diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index c814f0a925..79bf5164eb 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -36,10 +36,12 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ public float unitScaling = never; /** Shield points that this unit has. */ public float shields = 0f; - /** How much shields get increased per wave. */ + /** How much shields get increased by per wave. */ public float shieldScaling = 0f; /** Amount of enemies spawned initially, with no scaling */ public int unitAmount = 1; + /** If not -1, the unit will only spawn in spawnpoints with these packed coordinates. */ + public int spawn = -1; /** Seq of payloads that this unit will spawn with. */ public @Nullable Seq payloads; /** Status effect applied to the spawned unit. Null to disable. */ @@ -55,6 +57,10 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ //serialization use only } + public boolean canSpawn(int position){ + return spawn == -1 || spawn == position; + } + /** @return amount of units spawned on a specific wave. */ public int getSpawned(int wave){ if(spacing == 0) spacing = 1; @@ -111,6 +117,7 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling); if(unitAmount != 1) json.writeValue("amount", unitAmount); if(effect != null) json.writeValue("effect", effect.name); + if(spawn != -1) json.writeValue("spawn", spawn); if(payloads != null && payloads.size > 0){ json.writeValue("payloads", payloads.map(u -> u.name).toArray(String.class)); } @@ -130,6 +137,7 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ shields = data.getFloat("shields", 0); shieldScaling = data.getFloat("shieldScaling", 0); unitAmount = data.getInt("amount", 1); + spawn = data.getInt("spawn", -1); if(data.has("payloads")){ payloads = Seq.with(json.readValue(String[].class, data.get("payloads"))).map(s -> content.getByName(ContentType.unit, s)); } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 2b1c9995e3..9fd2f0d247 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -321,14 +321,20 @@ public class SectorDamage{ var reg = new LinearRegression(); SpawnGroup bossGroup = null; Seq waveDps = new Seq<>(), waveHealth = new Seq<>(); + int groundSpawns = Math.max(spawner.countFlyerSpawns(), 1), airSpawns = Math.max(spawner.countGroundSpawns(), 1); for(int wave = state.wave; wave < state.wave + 10; wave ++){ float sumWaveDps = 0f, sumWaveHealth = 0f; for(SpawnGroup group : state.rules.spawns){ + //calculate the amount of spawn points used + //if there's a spawn position override, there is only one potential place they spawn + //assume that all overridden positions are valid, should always be true in properly designed campaign maps + int spawnCount = group.spawn != -1 ? 1 : group.type.flying ? airSpawns : groundSpawns; + float healthMult = 1f + Mathf.clamp(group.type.armor / 20f); StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect); - int spawned = group.getSpawned(wave); + int spawned = group.getSpawned(wave) * spawnCount; //save the boss group if(group.effect == StatusEffects.boss){ bossGroup = group; diff --git a/core/src/mindustry/maps/filters/BlendFilter.java b/core/src/mindustry/maps/filters/BlendFilter.java index 7f0d319df9..773459d75a 100644 --- a/core/src/mindustry/maps/filters/BlendFilter.java +++ b/core/src/mindustry/maps/filters/BlendFilter.java @@ -8,7 +8,7 @@ import static mindustry.maps.filters.FilterOption.*; public class BlendFilter extends GenerateFilter{ float radius = 2f; - Block block = Blocks.stone, floor = Blocks.ice, ignore = Blocks.air; + Block block = Blocks.sand, floor = Blocks.sandWater, ignore = Blocks.air; @Override public FilterOption[] options(){ @@ -16,7 +16,7 @@ public class BlendFilter extends GenerateFilter{ new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f), new BlockOption("block", () -> block, b -> block = b, anyOptional), new BlockOption("floor", () -> floor, b -> floor = b, anyOptional), - new BlockOption("ignore", () -> ignore, b -> ignore = b, floorsOptional) + new BlockOption("ignore", () -> ignore, b -> ignore = b, anyOptional) }; }