diff --git a/core/src/mindustry/entities/units/UnitDecal.java b/core/src/mindustry/entities/units/UnitDecal.java new file mode 100644 index 0000000000..62a12e3c29 --- /dev/null +++ b/core/src/mindustry/entities/units/UnitDecal.java @@ -0,0 +1,25 @@ +package mindustry.entities.units; + +import arc.graphics.*; +import mindustry.graphics.*; + +/** A sprite drawn in addition to the base unit sprites. */ +public class UnitDecal{ + public String region = "error"; + public float x, y, rotation; + public float layer = Layer.flyingUnit + 1f; + public float xScale = 1f, yScale = 1f; + public Color color = Color.white; + + public UnitDecal(String region, float x, float y, float rotation, float layer, Color color){ + this.region = region; + this.x = x; + this.y = y; + this.rotation = rotation; + this.layer = layer; + this.color = color; + } + + public UnitDecal(){ + } +} diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index af06cc2087..1ee3c7a345 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -77,6 +77,8 @@ public class UnitType extends UnlockableContent{ public Effect fallEffect = Fx.fallSmoke; public Effect fallThrusterEffect = Fx.fallSmoke; public Effect deathExplosionEffect = Fx.dynamicExplosion; + /** Additional sprites that are drawn with the unit. */ + public Seq decals = new Seq<>(); public Seq abilities = new Seq<>(); /** Flags to target based on priority. Null indicates that the closest target should be found. The closest enemy core is used as a fallback. */ public BlockFlag[] targetFlags = {null}; @@ -565,6 +567,18 @@ public class UnitType extends UnlockableContent{ unit.trns(-legOffset.x, -legOffset.y); } + if(decals.size > 0){ + float base = unit.rotation - 90; + for(var d : decals){ + Draw.z(d.layer); + Draw.scl(d.xScale, d.yScale); + Draw.color(d.color); + Draw.rect(d.region, unit.x + Angles.trnsx(base, d.x, d.y), unit.y + Angles.trnsy(base, d.x, d.y), base + d.rotation); + } + Draw.reset(); + Draw.z(z); + } + if(unit.abilities.size > 0){ for(Ability a : unit.abilities){ Draw.reset(); @@ -849,4 +863,5 @@ public class UnitType extends UnlockableContent{ } //endregion + } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 91a1dcf9da..cc105257d3 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -537,7 +537,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ //sector notifications & search c.top().right(); - c.defaults().width(280f); + c.defaults().width(290f); c.button(bundle.get("sectorlist") + (attacked == 0 ? "" : "\n[red]⚠[lightgray] " + bundle.format("sectorlist.attacked", "[red]" + attacked + "[]")), @@ -585,6 +585,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ for(Sector sec : all){ if(sec.hasBase() && (searchText.isEmpty() || sec.name().toLowerCase().contains(searchText.toLowerCase()))){ con.button(t -> { + t.marginRight(10f); t.left(); t.defaults().growX();