diff --git a/annotations/src/main/resources/revisions/BlockUnitUnit/2.json b/annotations/src/main/resources/revisions/BlockUnitUnit/2.json new file mode 100644 index 0000000000..a73abd7000 --- /dev/null +++ b/annotations/src/main/resources/revisions/BlockUnitUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnit/2.json b/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnit/2.json new file mode 100644 index 0000000000..36a9e50333 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderCommanderMechMinerUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderLegsUnit/2.json b/annotations/src/main/resources/revisions/BuilderLegsUnit/2.json new file mode 100644 index 0000000000..f6efa6f663 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderLegsUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMechUnit/2.json b/annotations/src/main/resources/revisions/BuilderMechUnit/2.json new file mode 100644 index 0000000000..08f1b277b3 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMechUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMinerPayloadUnit/2.json b/annotations/src/main/resources/revisions/BuilderMinerPayloadUnit/2.json new file mode 100644 index 0000000000..025bfc439c --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMinerPayloadUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:payloads,type:arc.struct.Seq,size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMinerTrailUnit/2.json b/annotations/src/main/resources/revisions/BuilderMinerTrailUnit/2.json new file mode 100644 index 0000000000..d30cd7ad51 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMinerTrailUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BuilderMinerUnit/2.json b/annotations/src/main/resources/revisions/BuilderMinerUnit/2.json new file mode 100644 index 0000000000..d30cd7ad51 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMinerUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:plans,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/CommanderUnitWaterMove/2.json b/annotations/src/main/resources/revisions/CommanderUnitWaterMove/2.json new file mode 100644 index 0000000000..a73abd7000 --- /dev/null +++ b/annotations/src/main/resources/revisions/CommanderUnitWaterMove/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LegsUnit/2.json b/annotations/src/main/resources/revisions/LegsUnit/2.json new file mode 100644 index 0000000000..a73abd7000 --- /dev/null +++ b/annotations/src/main/resources/revisions/LegsUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MechUnit/2.json b/annotations/src/main/resources/revisions/MechUnit/2.json new file mode 100644 index 0000000000..b113f6564d --- /dev/null +++ b/annotations/src/main/resources/revisions/MechUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MinerUnit/2.json b/annotations/src/main/resources/revisions/MinerUnit/2.json new file mode 100644 index 0000000000..048458ea23 --- /dev/null +++ b/annotations/src/main/resources/revisions/MinerUnit/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/UnitEntity/2.json b/annotations/src/main/resources/revisions/UnitEntity/2.json new file mode 100644 index 0000000000..a73abd7000 --- /dev/null +++ b/annotations/src/main/resources/revisions/UnitEntity/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:deactivated,type:boolean,size:1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index c1bae6bf04..1c4a24cf93 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -600,6 +600,7 @@ bar.poweroutput = Power Output: {0} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} +bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Liquid bar.heat = Heat bar.power = Power diff --git a/core/src/mindustry/async/TeamIndexProcess.java b/core/src/mindustry/async/TeamIndexProcess.java index 03c2b5b9ed..c4dbede3a7 100644 --- a/core/src/mindustry/async/TeamIndexProcess.java +++ b/core/src/mindustry/async/TeamIndexProcess.java @@ -13,6 +13,7 @@ public class TeamIndexProcess implements AsyncProcess{ private QuadTree[] trees = new QuadTree[Team.all.length]; private int[] counts = new int[Team.all.length]; private int[][] typeCounts = new int[Team.all.length][0]; + private int[][] activeCounts = new int[Team.all.length][0]; public QuadTree tree(Team team){ if(trees[team.id] == null) trees[team.id] = new QuadTree<>(Vars.world.getQuadBounds(new Rect())); @@ -28,8 +29,11 @@ public class TeamIndexProcess implements AsyncProcess{ return typeCounts[team.id].length <= type.id ? 0 : typeCounts[team.id][type.id]; } - public void updateCount(Team team, UnitType type, int amount){ + public int countActive(Team team, UnitType type){ + return activeCounts[team.id].length <= type.id ? 0 : activeCounts[team.id][type.id]; + } + public void updateCount(Team team, UnitType type, int amount){ counts[team.id] += amount; if(typeCounts[team.id].length <= type.id){ typeCounts[team.id] = new int[Vars.content.units().size]; @@ -37,6 +41,13 @@ public class TeamIndexProcess implements AsyncProcess{ typeCounts[team.id][type.id] += amount; } + public void updateActiveCount(Team team, UnitType type, int amount){ + if(activeCounts[team.id].length <= type.id){ + activeCounts[team.id] = new int[Vars.content.units().size]; + } + activeCounts[team.id][type.id] += amount; + } + @Override public void reset(){ counts = new int[Team.all.length]; @@ -52,6 +63,7 @@ public class TeamIndexProcess implements AsyncProcess{ } Arrays.fill(typeCounts[team.id], 0); + Arrays.fill(activeCounts[team.id], 0); } Arrays.fill(counts, 0); @@ -60,6 +72,7 @@ public class TeamIndexProcess implements AsyncProcess{ tree(unit.team).insert(unit); updateCount(unit.team, unit.type(), 1); + if(!unit.deactivated) updateActiveCount(unit.team, unit.type(), 1); } } diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index 9966e29b1b..d32030775f 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -35,6 +35,10 @@ public class Units{ } public static int getCap(Team team){ + //wave team has no cap + if((team == state.rules.waveTeam && state.rules.waves) || (state.isCampaign() && team == state.rules.waveTeam)){ + return Integer.MAX_VALUE; + } return state.rules.unitCap + indexer.getExtraUnits(team); } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index eed909ab49..e4aac95a3a 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -32,7 +32,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I private UnitController controller; private UnitType type; - boolean spawnedByCore; + boolean spawnedByCore, deactivated; transient float timer1, timer2; @@ -118,6 +118,14 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I return controller instanceof AIController; } + public int count(){ + return teamIndex.countType(team, type); + } + + public int cap(){ + return Units.getCap(team); + } + private void setStats(UnitType type){ this.type = type; this.maxHealth = type.health; @@ -150,11 +158,10 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I teamIndex.updateCount(team, type, 1); //check if over unit cap - if(teamIndex.countType(team, type) > Units.getCap(team) - && !(team == state.rules.waveTeam && state.rules.waves) //can't be wave team on wave mode - && !(state.isCampaign() && team == state.rules.waveTeam)){ //can't be campaign wave team - Fx.unitCapKill.at(this); - kill(); + if(count() > cap() && !spawnedByCore){ + deactivated = true; + }else{ + teamIndex.updateActiveCount(team, type, 1); } } @@ -175,8 +182,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I @Override public void update(){ + //activate the unit when possible + if(!net.client() && deactivated && teamIndex.countActive(team, type) < Units.getCap(team)){ + teamIndex.updateActiveCount(team, type, 1); + deactivated = false; + } - type.update(base()); + if(!deactivated) type.update(base()); drag = type.drag * (isGrounded() ? (floorOn().dragMultiplier) : 1f); @@ -236,10 +248,15 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I } //AI only updates on the server - if(!net.client() && !dead){ + if(!net.client() && !dead && !deactivated){ controller.updateUnit(); } + //do not control anything when deactivated + if(deactivated){ + controlWeapons(false, false); + } + //remove units spawned by the core if(spawnedByCore && !isPlayer()){ Call.unitDespawn(base()); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index b2862ad9a1..e92b3d1961 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -233,7 +233,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ }else if(unit == null){ //just clear the unit (is this used?) player.clearUnit(); //make sure it's AI controlled, so players can't overwrite each other - }else if(unit.isAI() && unit.team == player.team()){ + }else if(unit.isAI() && unit.team == player.team() && !unit.deactivated){ player.unit(unit); Time.run(Fx.unitSpirit.lifetime, () -> Fx.unitControl.at(unit.x, unit.y, 0f, unit)); if(!player.dead()){ @@ -310,7 +310,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } if(controlledType != null && player.dead()){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.deactivated); if(unit != null){ Call.unitControl(player, unit); @@ -320,7 +320,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void checkUnit(){ if(controlledType != null){ - Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType); + Unit unit = Units.closest(player.team(), player.x, player.y, u -> !u.isPlayer() && u.type() == controlledType && !u.deactivated); if(unit == null && controlledType == UnitTypes.block){ unit = world.buildWorld(player.x, player.y) instanceof ControlBlock ? ((ControlBlock)world.buildWorld(player.x, player.y)).unit() : null; } @@ -843,7 +843,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public @Nullable Unit selectedUnit(){ - Unit unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, Unit::isAI); + Unit unit = Units.closest(player.team(), Core.input.mouseWorld().x, Core.input.mouseWorld().y, 40f, u -> u.isAI() && !u.deactivated); if(unit != null){ unit.hitbox(Tmp.r1); Tmp.r1.grow(6f); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 5cb29f133c..501ad22c6d 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -112,7 +112,7 @@ public class UnitType extends UnlockableContent{ public void update(Unit unit){ if(abilities.size > 0){ - for(mindustry.entities.abilities.Ability a : abilities){ + for(Ability a : abilities){ a.update(unit); } } @@ -135,10 +135,20 @@ public class UnitType extends UnlockableContent{ bars.row(); if(state.rules.unitAmmo){ - bars.add(new Bar("blocks.ammo", Pal.ammo, () -> (float)unit.ammo / ammoCapacity)); + bars.add(new Bar("blocks.ammo", Pal.ammo, () -> unit.ammo / ammoCapacity)); bars.row(); } }).growX(); + + table.row(); + if(unit.deactivated){ + table.table(d -> { + d.left(); + + d.label(() -> Core.bundle.format("bar.limitreached", unit.count(), unit.cap(), Fonts.getUnicodeStr(name))); + }).left().visible(() -> unit.deactivated); + } + } @Override @@ -271,6 +281,10 @@ public class UnitType extends UnlockableContent{ unit.trns(-legOffset.x, -legOffset.y); } + if(unit.deactivated){ + drawDeactive(unit); + } + if(abilities.size > 0){ for(Ability a : abilities){ a.draw(unit); @@ -279,6 +293,16 @@ public class UnitType extends UnlockableContent{ } } + public void drawDeactive(Unit unit){ + Draw.color(Color.scarlet); + Draw.alpha(0.8f); + + float size = 8f; + Draw.rect(Icon.warning.getRegion(), unit.x, unit.y, size, size); + + Draw.reset(); + } + public void drawPayload(T unit){ if(unit.hasPayload()){ Payload pay = unit.payloads().first();