From a80d0cc457eca4f5fd4d07796cb803acb999c5ca Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 21 Oct 2020 14:10:28 -0400 Subject: [PATCH] Fixed #3053 --- core/assets/bundles/bundle.properties | 10 ++++++ core/src/mindustry/content/UnitTypes.java | 10 +++--- .../mindustry/entities/abilities/Ability.java | 6 ++++ ...ldAbility.java => RepairFieldAbility.java} | 6 ++-- ...lity.java => ShieldRegenFieldAbility.java} | 6 ++-- .../entities/abilities/UnitSpawnAbility.java | 6 ++++ core/src/mindustry/logic/LExecutor.java | 3 +- core/src/mindustry/maps/SectorDamage.java | 2 +- core/src/mindustry/type/UnitType.java | 31 ++++++++++++++++--- .../mindustry/ui/dialogs/PlanetDialog.java | 2 +- core/src/mindustry/world/meta/Stat.java | 3 ++ core/src/mindustry/world/meta/StatUnit.java | 1 + 12 files changed, 68 insertions(+), 18 deletions(-) rename core/src/mindustry/entities/abilities/{HealFieldAbility.java => RepairFieldAbility.java} (86%) rename core/src/mindustry/entities/abilities/{ShieldFieldAbility.java => ShieldRegenFieldAbility.java} (86%) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 3e88aef2e1..f7a3a6dcfe 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -640,6 +640,15 @@ stat.speed = Speed stat.buildspeed = Build Speed stat.minespeed = Mine Speed stat.minetier = Mine Tier +stat.payloadcapacity = Payload Capacity +stat.commandlimit = Command Limit +stat.abilities = Abilities + +ability.forcefield = Force Field +ability.repairfield = Repair Field +ability.statusfield = Status Field +ability.unitspawn = {0} Factory +ability.shieldregenfield = Shield Regen Field bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -680,6 +689,7 @@ bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier bullet.reload = [stat]{0}[lightgray]x fire rate unit.blocks = blocks +unit.blockssquared = blocks² unit.powersecond = power units/second unit.liquidsecond = liquid units/second unit.itemssecond = items/second diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index f7ba45b156..509f0ea805 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -276,7 +276,7 @@ public class UnitTypes implements ContentList{ armor = 1f; commandLimit = 8; - abilities.add(new HealFieldAbility(10f, 60f * 4, 60f)); + abilities.add(new RepairFieldAbility(10f, 60f * 4, 60f)); ammoType = AmmoTypes.power; weapons.add(new Weapon("heal-weapon"){{ @@ -305,7 +305,7 @@ public class UnitTypes implements ContentList{ mineSpeed = 5f; commandLimit = 8; - abilities.add(new ShieldFieldAbility(20f, 40f, 60f * 5, 60f)); + abilities.add(new ShieldRegenFieldAbility(20f, 40f, 60f * 5, 60f)); ammoType = AmmoTypes.power; weapons.add(new Weapon("heal-shotgun-weapon"){{ @@ -1161,7 +1161,7 @@ public class UnitTypes implements ContentList{ mineTier = 2; mineSpeed = 3.5f; - abilities.add(new HealFieldAbility(5f, 60f * 5, 50f)); + abilities.add(new RepairFieldAbility(5f, 60f * 5, 50f)); weapons.add(new Weapon("heal-weapon-mount"){{ top = false; @@ -1318,7 +1318,7 @@ public class UnitTypes implements ContentList{ ammoCapacity = 1300; ammoResupplyAmount = 20; - abilities.add(new ForceFieldAbility(140f, 4f, 7000f, 60f * 8), new HealFieldAbility(130f, 60f * 2, 140f)); + abilities.add(new ForceFieldAbility(140f, 4f, 7000f, 60f * 8), new RepairFieldAbility(130f, 60f * 2, 140f)); }}; //endregion @@ -1430,7 +1430,7 @@ public class UnitTypes implements ContentList{ trailY = -9f; trailScl = 1.5f; - abilities.add(new ShieldFieldAbility(20f, 40f, 60f * 4, 60f)); + abilities.add(new ShieldRegenFieldAbility(20f, 40f, 60f * 4, 60f)); weapons.add(new Weapon("large-artillery"){{ reload = 65f; diff --git a/core/src/mindustry/entities/abilities/Ability.java b/core/src/mindustry/entities/abilities/Ability.java index 466bfc1980..cb6e94547b 100644 --- a/core/src/mindustry/entities/abilities/Ability.java +++ b/core/src/mindustry/entities/abilities/Ability.java @@ -1,5 +1,6 @@ package mindustry.entities.abilities; +import arc.*; import mindustry.gen.*; public abstract class Ability implements Cloneable{ @@ -14,4 +15,9 @@ public abstract class Ability implements Cloneable{ throw new RuntimeException("java sucks", e); } } + + /** @return localized ability name; mods should override this. */ + public String localized(){ + return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase()); + } } diff --git a/core/src/mindustry/entities/abilities/HealFieldAbility.java b/core/src/mindustry/entities/abilities/RepairFieldAbility.java similarity index 86% rename from core/src/mindustry/entities/abilities/HealFieldAbility.java rename to core/src/mindustry/entities/abilities/RepairFieldAbility.java index 90f800ec84..8df0a96e2c 100644 --- a/core/src/mindustry/entities/abilities/HealFieldAbility.java +++ b/core/src/mindustry/entities/abilities/RepairFieldAbility.java @@ -5,7 +5,7 @@ import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; -public class HealFieldAbility extends Ability{ +public class RepairFieldAbility extends Ability{ public float amount = 1, reload = 100, range = 60; public Effect healEffect = Fx.heal; public Effect activeEffect = Fx.healWaveDynamic; @@ -13,9 +13,9 @@ public class HealFieldAbility extends Ability{ protected float timer; protected boolean wasHealed = false; - HealFieldAbility(){} + RepairFieldAbility(){} - public HealFieldAbility(float amount, float reload, float range){ + public RepairFieldAbility(float amount, float reload, float range){ this.amount = amount; this.reload = reload; this.range = range; diff --git a/core/src/mindustry/entities/abilities/ShieldFieldAbility.java b/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java similarity index 86% rename from core/src/mindustry/entities/abilities/ShieldFieldAbility.java rename to core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java index 739751f6c1..8af8d2390a 100644 --- a/core/src/mindustry/entities/abilities/ShieldFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java @@ -5,7 +5,7 @@ import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; -public class ShieldFieldAbility extends Ability{ +public class ShieldRegenFieldAbility extends Ability{ public float amount = 1, max = 100f, reload = 100, range = 60; public Effect applyEffect = Fx.shieldApply; public Effect activeEffect = Fx.shieldWave; @@ -13,9 +13,9 @@ public class ShieldFieldAbility extends Ability{ protected float timer; protected boolean applied = false; - ShieldFieldAbility(){} + ShieldRegenFieldAbility(){} - public ShieldFieldAbility(float amount, float max, float reload, float range){ + public ShieldRegenFieldAbility(float amount, float max, float reload, float range){ this.amount = amount; this.max = max; this.reload = reload; diff --git a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java index 74140114d9..95eb3bcf5b 100644 --- a/core/src/mindustry/entities/abilities/UnitSpawnAbility.java +++ b/core/src/mindustry/entities/abilities/UnitSpawnAbility.java @@ -1,5 +1,6 @@ package mindustry.entities.abilities; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; @@ -56,4 +57,9 @@ public class UnitSpawnAbility extends Ability{ }); } } + + @Override + public String localized(){ + return Core.bundle.format("ability.unitspawn", type.localizedName); + } } diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 6b4f9ced0a..be029c2305 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -437,8 +437,9 @@ public class LExecutor{ ai.plan.set(x, y, rot, block); ai.plan.config = null; + builder.clearBuilding(); + if(ai.plan.tile() != null){ - builder.clearBuilding(); builder.updateBuilding(true); builder.addBuild(ai.plan); } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index b084f75c10..eaa42a8293 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -265,7 +265,7 @@ public class SectorDamage{ sumHealth += unit.health*healthMult + unit.shield; sumDps += unit.type.dpsEstimate; - if(unit.abilities.find(a -> a instanceof HealFieldAbility) instanceof HealFieldAbility h){ + if(unit.abilities.find(a -> a instanceof RepairFieldAbility) instanceof RepairFieldAbility h){ sumRps += h.amount / h.reload * 60f; } }else{ diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 43d5f05bd9..f7d5877b90 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -199,13 +199,29 @@ public class UnitType extends UnlockableContent{ stats.add(Stat.speed, speed); stats.add(Stat.itemCapacity, health); stats.add(Stat.range, (int)(maxRange / tilesize), StatUnit.blocks); + stats.add(Stat.commandLimit, commandLimit); //TODO abilities, maybe try something like DPS + if(abilities.any()){ + var unique = new ObjectSet(); + + for(Ability a : abilities){ + if(unique.add(a.localized())){ + stats.add(Stat.abilities, a.localized()); + } + } + } + if(inst instanceof Minerc && mineTier >= 1){ stats.addPercent(Stat.mineSpeed, mineSpeed); stats.add(Stat.mineTier, new BlockFilterValue(b -> b instanceof Floor f && f.itemDrop != null && f.itemDrop.hardness <= mineTier && !f.playerUnmineable)); } - if(inst instanceof Builderc) stats.addPercent(Stat.buildSpeed, buildSpeed); + if(inst instanceof Builderc){ + stats.addPercent(Stat.buildSpeed, buildSpeed); + } + if(inst instanceof Payloadc){ + stats.add(Stat.payloadCapacity, (payloadCapacity / (tilesize * tilesize)), StatUnit.blocksSquared); + } } @CallSuper @@ -231,10 +247,17 @@ public class UnitType extends UnlockableContent{ //set up default range if(range < 0){ range = Float.MAX_VALUE; - maxRange = 0f; for(Weapon weapon : weapons){ - range = Math.min(range, weapon.bullet.range() + hitSize /2f); - maxRange = Math.max(maxRange, weapon.bullet.range() + hitSize /2f); + range = Math.min(range, weapon.bullet.range() + hitSize / 2f); + maxRange = Math.max(maxRange, weapon.bullet.range() + hitSize / 2f); + } + } + + if(maxRange < 0){ + maxRange = 0f; + + for(Weapon weapon : weapons){ + maxRange = Math.max(maxRange, weapon.bullet.range() + hitSize / 2f); } } diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index d14314977b..22e4747bcd 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -128,7 +128,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ boolean canSelect(Sector sector){ if(mode == select) return sector.hasBase(); - return sector.near().contains(Sector::hasBase)//(sector.tile.v.within(launchSector.tile.v, (launchRange + 0.5f) * planets.planet.sectorApproxRadius*2) //within range + return sector.hasBase() || sector.near().contains(Sector::hasBase)//(sector.tile.v.within(launchSector.tile.v, (launchRange + 0.5f) * planets.planet.sectorApproxRadius*2) //within range || (sector.preset != null && sector.preset.unlocked()); //is an unlocked preset } diff --git a/core/src/mindustry/world/meta/Stat.java b/core/src/mindustry/world/meta/Stat.java index 94e4c17b2c..2a8d88a7d1 100644 --- a/core/src/mindustry/world/meta/Stat.java +++ b/core/src/mindustry/world/meta/Stat.java @@ -22,9 +22,12 @@ public enum Stat{ buildSpeed, mineSpeed, mineTier, + payloadCapacity, + commandLimit, baseDeflectChance, lightningChance, lightningDamage, + abilities, itemCapacity(StatCat.items), itemsMoved(StatCat.items), diff --git a/core/src/mindustry/world/meta/StatUnit.java b/core/src/mindustry/world/meta/StatUnit.java index 42825f0379..b2a866be3e 100644 --- a/core/src/mindustry/world/meta/StatUnit.java +++ b/core/src/mindustry/world/meta/StatUnit.java @@ -9,6 +9,7 @@ import java.util.*; */ public enum StatUnit{ blocks, + blocksSquared, powerSecond, liquidSecond, itemsSecond,