From a138b7b9a8886e6ff5fd00b3b12c696406c5f6a5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 1 Feb 2022 23:21:57 -0500 Subject: [PATCH] Better leg unit death explosion --- .../assets-raw/sprites/units/conquer.aseprite | Bin 14141 -> 14289 bytes core/src/mindustry/content/Fx.java | 17 ++++++++++- core/src/mindustry/content/Planets.java | 1 - .../mindustry/entities/LegDestroyData.java | 15 ++++++++++ .../src/mindustry/entities/comp/LegsComp.java | 28 +++++++++++++++++- .../src/mindustry/entities/comp/UnitComp.java | 2 +- core/src/mindustry/game/Schematics.java | 15 ++++------ .../maps/generators/BaseGenerator.java | 2 +- core/src/mindustry/type/Planet.java | 4 --- 9 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 core/src/mindustry/entities/LegDestroyData.java diff --git a/core/assets-raw/sprites/units/conquer.aseprite b/core/assets-raw/sprites/units/conquer.aseprite index a867d6e0c0f1525df77452b8c747e555b490f31b..277e406fa93b7fe2b3016b6acbbcf94ab342d768 100644 GIT binary patch delta 5202 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 delta 5053 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 { + if(!(e.data instanceof LegDestroyData data)) return; + rand.setSeed(e.id); + + e.lifetime = rand.random(70f, 130f); + + Tmp.v1.trns(rand.random(360f), rand.random(data.region.width / 8f) * e.finpow()); + float ox = Tmp.v1.x, oy = Tmp.v1.y; + + alpha(e.foutpowdown()); + + stroke(data.region.height * scl); + line(data.region, data.a.x + ox, data.a.y + oy, data.b.x + ox, data.b.y + oy, false); + }).layer(Layer.groundUnit + 5f); } diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 42fe36b87d..ef25688f35 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -52,7 +52,6 @@ public class Planets{ landCloudColor = Color.valueOf("ed6542"); atmosphereColor = Color.valueOf("f07218"); defaultEnv = Env.scorching | Env.terrestrial; - drillOverlay = Blocks.air; startSector = 10; atmosphereRadIn = 0.02f; atmosphereRadOut = 0.3f; diff --git a/core/src/mindustry/entities/LegDestroyData.java b/core/src/mindustry/entities/LegDestroyData.java new file mode 100644 index 0000000000..32994c0aaa --- /dev/null +++ b/core/src/mindustry/entities/LegDestroyData.java @@ -0,0 +1,15 @@ +package mindustry.entities; + +import arc.graphics.g2d.*; +import arc.math.geom.*; + +public class LegDestroyData{ + public Vec2 a, b; + public TextureRegion region; + + public LegDestroyData(Vec2 a, Vec2 b, TextureRegion region){ + this.a = a; + this.b = b; + this.region = region; + } +} diff --git a/core/src/mindustry/entities/comp/LegsComp.java b/core/src/mindustry/entities/comp/LegsComp.java index 89d88e8710..ccd3be83b2 100644 --- a/core/src/mindustry/entities/comp/LegsComp.java +++ b/core/src/mindustry/entities/comp/LegsComp.java @@ -15,6 +15,8 @@ import mindustry.graphics.*; import mindustry.type.*; import mindustry.world.blocks.environment.*; +import static mindustry.Vars.*; + @Component abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ private static final Vec2 straightVec = new Vec2(); @@ -57,6 +59,31 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ resetLegs(1f); } + @MethodPriority(-1) + @Override + public void destroy(){ + if(!isAdded() || Vars.headless) return; + + float legExplodeRad = type.legRegion.height / 4f / 1.45f; + + //create effects for legs being destroyed + for(int i = 0; i < legs.length; i++){ + Leg l = legs[i]; + + Vec2 base = legOffset(Tmp.v1, i).add(x, y); + + Tmp.v2.set(l.base).sub(l.joint).inv().setLength(type.legExtension); + + for(Vec2 vec : new Vec2[]{base, l.joint, l.base}){ + Damage.dynamicExplosion(vec.x, vec.y, 0f, 0f, 0f, legExplodeRad, state.rules.damageExplosions, false, team, type.deathExplosionEffect); + } + + Fx.legDestroy.at(base.x, base.y, 0f, new LegDestroyData(base.cpy(), l.joint, type.legRegion)); + Fx.legDestroy.at(l.joint.x, l.joint.y, 0f, new LegDestroyData(l.joint.cpy().add(Tmp.v2), l.base, type.legBaseRegion)); + + } + } + public void resetLegs(){ resetLegs(type.legLength); } @@ -89,7 +116,6 @@ abstract class LegsComp implements Posc, Rotc, Hitboxc, Flyingc, Unitc{ baseRotation = rotation; } - float rot = baseRotation; float legLength = type.legLength; //set up initial leg positions diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index adbf8b349f..8c5f626906 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -506,7 +506,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I float power = item().charge * Mathf.pow(stack().amount, 1.11f) * 160f; if(!spawnedByCore){ - Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect); + Damage.dynamicExplosion(x, y, flammability, explosiveness, power, (bounds() + type.legLength/1.7f) / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect); }else{ type.deathExplosionEffect.at(x, y, bounds() / 2f / 8f); } diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 88d6123233..b390c2deb9 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -30,7 +30,6 @@ import mindustry.world.blocks.ConstructBlock.*; import mindustry.world.blocks.distribution.*; import mindustry.world.blocks.legacy.*; import mindustry.world.blocks.power.*; -import mindustry.world.blocks.production.*; import mindustry.world.blocks.sandbox.*; import mindustry.world.blocks.storage.*; import mindustry.world.blocks.storage.CoreBlock.*; @@ -421,20 +420,20 @@ public class Schematics implements Loadable{ /** Places the last launch loadout at the coordinates and fills it with the launch resources. */ public static void placeLaunchLoadout(int x, int y){ - placeLoadout(universe.getLastLoadout(), x, y, state.rules.defaultTeam, state.rules.sector == null ? Blocks.air : state.rules.sector.planet.drillOverlay); + placeLoadout(universe.getLastLoadout(), x, y, state.rules.defaultTeam); if(world.tile(x, y).build == null) throw new RuntimeException("No core at loadout coordinates!"); world.tile(x, y).build.items.add(universe.getLaunchResources()); } public static void placeLoadout(Schematic schem, int x, int y){ - placeLoadout(schem, x, y, state.rules.defaultTeam, Blocks.oreCopper); + placeLoadout(schem, x, y, state.rules.defaultTeam); } - public static void placeLoadout(Schematic schem, int x, int y, Team team, Block resource){ - placeLoadout(schem, x, y, team, resource, true); + public static void placeLoadout(Schematic schem, int x, int y, Team team){ + placeLoadout(schem, x, y, team, true); } - public static void placeLoadout(Schematic schem, int x, int y, Team team, Block resource, boolean check){ + public static void placeLoadout(Schematic schem, int x, int y, Team team, boolean check){ Stile coreTile = schem.tiles.find(s -> s.block instanceof CoreBlock); Seq seq = new Seq<>(); if(coreTile == null) throw new IllegalArgumentException("Loadout schematic has no core tile!"); @@ -465,10 +464,6 @@ public class Schematics implements Loadable{ tile.build.configureAny(config); } - if(st.block instanceof Drill && resource != Blocks.air){ - tile.getLinkedTiles(t -> t.setOverlay(resource)); - } - if(tile.build instanceof CoreBuild cb){ state.teams.registerCore(cb); } diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index d6e698e886..6bc9f78315 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -56,7 +56,7 @@ public class BaseGenerator{ for(Tile tile : cores){ tile.clearOverlay(); - Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, coreschem.required instanceof Item ? bases.ores.get((Item)coreschem.required) : Blocks.oreCopper, false); + Schematics.placeLoadout(coreschem.schematic, tile.x, tile.y, team, false); //fill core with every type of item (even non-material) Building entity = tile.build; diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 7864cca54e..e4f1cd62ad 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -9,14 +9,12 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; import arc.util.noise.*; -import mindustry.content.*; import mindustry.content.TechTree.*; import mindustry.ctype.*; import mindustry.graphics.*; import mindustry.graphics.g3d.*; import mindustry.graphics.g3d.PlanetGrid.*; import mindustry.maps.generators.*; -import mindustry.world.*; import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -68,8 +66,6 @@ public class Planet extends UnlockableContent{ public boolean accessible = true; /** Environment flags for sectors on this planet. */ public int defaultEnv = Env.terrestrial | Env.spores | Env.groundOil | Env.groundWater | Env.oxygen; - /** Default block placed under drills upon launching. */ - public Block drillOverlay = Blocks.oreCopper; /** If true, a day/night cycle is simulated. */ public boolean updateLighting = true; /** Day/night cycle parameters. */