diff --git a/annotations/src/main/java/mindustry/annotations/Annotations.java b/annotations/src/main/java/mindustry/annotations/Annotations.java index 501c255d2e..88bd457e05 100644 --- a/annotations/src/main/java/mindustry/annotations/Annotations.java +++ b/annotations/src/main/java/mindustry/annotations/Annotations.java @@ -98,6 +98,8 @@ public class Annotations{ boolean serialize() default true; /** Whether to generate IO code. This is for advanced usage only. */ boolean genio() default true; + /** Whether I made a massive mistake by merging two different class branches */ + boolean legacy() default false; } /** Indicates an internal interface for entity components. */ diff --git a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java index 1cd5f7c4e5..8eba0ec683 100644 --- a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java +++ b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java @@ -240,7 +240,6 @@ public class EntityProcess extends BaseProcessor{ //look at each definition for(Selement type : allDefs){ EntityDef ann = type.annotation(EntityDef.class); - boolean isFinal = ann.isFinal(); //all component classes (not interfaces) Seq components = allComponents(type); @@ -274,6 +273,10 @@ public class EntityProcess extends BaseProcessor{ name += "Entity"; } + if(ann.legacy()){ + name += "Legacy" + Strings.capitalize(type.name()); + } + //skip double classes if(usedNames.containsKey(name)){ extraNames.get(usedNames.get(name), ObjectSet::new).add(type.name()); diff --git a/annotations/src/main/resources/revisions/quad/3.json b/annotations/src/main/resources/revisions/quad/3.json new file mode 100644 index 0000000000..d091179927 --- /dev/null +++ b/annotations/src/main/resources/revisions/quad/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index 002c52a75c..98f4874779 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -2,17 +2,13 @@ package mindustry.ai.types; import arc.math.*; import arc.math.geom.*; -import arc.struct.*; import arc.util.*; import mindustry.ai.formations.*; import mindustry.entities.units.*; import mindustry.gen.*; -import mindustry.type.*; -import mindustry.world.*; import mindustry.world.blocks.storage.CoreBlock.*; public class FormationAI extends AIController implements FormationMember{ - private static Seq tiles = new Seq<>(); public Unit leader; private Vec3 target = new Vec3(); @@ -30,9 +26,8 @@ public class FormationAI extends AIController implements FormationMember{ @Override public void updateUnit(){ - UnitType type = unit.type; - if(leader.dead){ + if(leader == null || leader.dead){ unit.resetController(); return; } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index c5dcea0d42..53757ee04b 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -33,7 +33,10 @@ public class UnitTypes implements ContentList{ public static @EntityDef({Unitc.class, Legsc.class, Builderc.class}) UnitType spiroct, arkyid, toxopid; //air (no special traits) - public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra, mono; + public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra; + + //air, legacy mining + public static @EntityDef(value = {Unitc.class}, legacy = true) UnitType mono; //air + building + mining public static @EntityDef({Unitc.class, Builderc.class}) UnitType poly; @@ -42,13 +45,13 @@ public class UnitTypes implements ContentList{ public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class}) UnitType mega; //air + building + payload - public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class}) UnitType quad; + public static @EntityDef(value = {Unitc.class, Builderc.class, Payloadc.class}, legacy = true) UnitType quad; //air + building + payload public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class, AmmoDistributec.class}) UnitType oct; //air + building + mining - public static @EntityDef({Unitc.class, Builderc.class,}) UnitType alpha, beta, gamma; + public static @EntityDef({Unitc.class, Builderc.class}) UnitType alpha, beta, gamma; //water public static @EntityDef({Unitc.class, WaterMovec.class}) UnitType risso, minke, bryde, sei, omura;