From eb4d2fc3a36cfdb42d945554565c2f714486ab72 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Feb 2022 20:39:22 -0500 Subject: [PATCH] Weapons parts for units / No logic on Erekir --- .../assets-raw/sprites/units/conquer-cell.png | Bin 1818 -> 1777 bytes .../assets-raw/sprites/units/conquer-glow.png | Bin 25023 -> 27148 bytes .../assets-raw/sprites/units/conquer.aseprite | Bin 14289 -> 8411 bytes core/assets-raw/sprites/units/conquer.png | Bin 6864 -> 7228 bytes .../units/weapons/conquer-weapon-glow.png | Bin 0 -> 13784 bytes .../sprites/units/weapons/conquer-weapon.png | Bin 3649 -> 4291 bytes .../units/weapons/vanquish-weapon-old.png | Bin 2226 -> 0 bytes core/assets/scripts/global.js | 8 +- core/src/mindustry/content/Blocks.java | 7 +- core/src/mindustry/content/UnitTypes.java | 24 ++-- .../mindustry/entities/part/RegionPart.java | 131 +++++++++++++++++ .../mindustry/entities/part/WeaponPart.java | 32 +++++ core/src/mindustry/mod/ClassMap.java | 121 +++++++++++++++- core/src/mindustry/mod/ContentParser.java | 8 ++ core/src/mindustry/type/UnitType.java | 22 +++ core/src/mindustry/type/Weapon.java | 52 ++++--- core/src/mindustry/world/draw/DrawTurret.java | 135 ++---------------- gradle.properties | 2 +- tools/src/mindustry/tools/Generators.java | 16 ++- 19 files changed, 390 insertions(+), 168 deletions(-) create mode 100644 core/assets-raw/sprites/units/weapons/conquer-weapon-glow.png delete mode 100644 core/assets-raw/sprites/units/weapons/vanquish-weapon-old.png create mode 100644 core/src/mindustry/entities/part/RegionPart.java create mode 100644 core/src/mindustry/entities/part/WeaponPart.java diff --git a/core/assets-raw/sprites/units/conquer-cell.png b/core/assets-raw/sprites/units/conquer-cell.png index e7e350d5ec5aa1fe1c6e099e15bc24318c1639bf..07d08e545fe8349e70a63d64a4e3c3f1713362bc 100644 GIT binary patch delta 1699 zcmbQm_mOvkp~-4b7srr_IdAV~Pnu&U!WLi^?P>P#&HiJv3$8u-^I<{)+XR+H6W5*l znHpZ|d-&?#iWQYU!V?R1CN^-_7i^wCe_mYQi7P*Dyne}=adB5--1_NOq05eCa&6kQ zUG=)n*A<0wM%X4{aZ%ztRV)k z>n*un7|qxm$ZYk*OJ3F}7bJF@>qVGBx-whI4pFf)WgIUyE({AZxUIb4ciYUhy1Z)V zEv5P=rWLkxEKm66?!a!bX0Mb_`?l|zey+hh@<^V$ z#3+7Ym)C2{EQfaP=PQ`+?iM_*TVj#zD`WA#e$DDI+r|Dot-Q+48jA zk2aWzo>_bFmQ=yPnrmTy&)>N(`BY&0?=&6GXBT;|HQns1=(UmJ4wnm_h2 zkj;t>U;WN9`OfYF?Je6?WBKMK*uBpBTYSu-DL{Mj=Y4Jma}M7u?D*$*ZmGfZIhN1m znr`+Pm!6f}@9}(rqLhBR!!z@U=>lhd&%K$Dw>P3(_mG^)nR%Z(61KhenR~t`z5h^q zutEK8^#!+`+Jg;#D=vsHz28y&e0I~#<+GkI*gL%k zs%2&CFEpLV$qy^H?Y{l1C--voxjU!Vu}ofir!M2~rhRFLHD|;KDlYJC3pQA}@Oy)q zxZlAg%jPlP3bA0FZ2d**LfRqC8FyA5Z!i-+C$rYS_VTuSzn0G~_!bs%>q@YEso=SJ zTwcGcUM^oIR#gAGV*hlfOY(o&U{QQw&$K+%S2L}i70V{Jr8@8Y_Q|GHXR!mPUf()r z+0&(kr*8y*<2zV%zwD@f_1B_~>NC@_kH&F&C5Q|$FBE$PMdhle$1yjNb3 z+Qzp$Vc-0QXVPYKntsYKo;6OfVEtUlG|Mc;f_1YjQ&rB6f@eZ!z6U(7J+#yD@Sf>a z`NHQ!ub0|6-`y{CjV(@Oq{_??t&}7EpMY_EgBKJl?hX z{%U{!>PTMYoty8k{%5GaI#H$kd-YcPk}cWd0gEc#_lN&fwmg1^$xGz@tM8|;Uwbx> zr#e?o@X5ErUe86|56{Fl{M@-@rKoViyeYTm?>v8VuhfOhyYF2}`1fsTy|nptJ?_WP zqVMTmtyf)d9AjPGQTwB>VK-sQ2sB4&SVL*s<`bowew>-T9o^I}?r+ zm+zl@*88K=)0&G@U#1>>q8Xl+UaVK|p|MwD;fupfo+Y}hTV6%aW0}km#hI~{Q}Lim zm-gR?&s__(9*X!Z%2ZqsdT3^K>AzVCmo{zwTWQ80zi*UC<7jpWj z7nNwhxnN8GdYjhwmvVC7iF2z>eDdw{)#J%=|1?#%GBkO*tlXFPXy;aUZlxJ6+pgc= wDz_l+?Wet8nK;#yBfjr6mj=ZW1UuCJXZoOWjv-tzIRqr)>FVdQ&MBb@0LLypxc~qF delta 1741 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 mZZc(myq|r}|B{(M>KE-_6&_{|pQaYz!qusfj7Y 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 diff --git a/core/assets-raw/sprites/units/weapons/conquer-weapon-glow.png b/core/assets-raw/sprites/units/weapons/conquer-weapon-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..0d00463db2664fb56c1a518bcf02c4074f1f26e9 GIT binary patch literal 13784 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 literal 3649 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 diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index bcc2247d9f..f4ebebe16f 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -107,6 +107,7 @@ importPackage(Packages.mindustry.net) importPackage(Packages.mindustry.service) importPackage(Packages.mindustry.type) importPackage(Packages.mindustry.type.ammo) +importPackage(Packages.mindustry.type.unit) importPackage(Packages.mindustry.type.weapons) importPackage(Packages.mindustry.type.weather) importPackage(Packages.mindustry.ui) @@ -121,6 +122,7 @@ importPackage(Packages.mindustry.world.blocks.defense.turrets) importPackage(Packages.mindustry.world.blocks.distribution) importPackage(Packages.mindustry.world.blocks.environment) importPackage(Packages.mindustry.world.blocks.experimental) +importPackage(Packages.mindustry.world.blocks.heat) importPackage(Packages.mindustry.world.blocks.legacy) importPackage(Packages.mindustry.world.blocks.liquid) importPackage(Packages.mindustry.world.blocks.logic) @@ -134,6 +136,7 @@ importPackage(Packages.mindustry.world.consumers) importPackage(Packages.mindustry.world.draw) importPackage(Packages.mindustry.world.meta) importPackage(Packages.mindustry.world.modules) +const AdminRequestEvent = Packages.mindustry.game.EventType.AdminRequestEvent const PlayerIpUnbanEvent = Packages.mindustry.game.EventType.PlayerIpUnbanEvent const PlayerIpBanEvent = Packages.mindustry.game.EventType.PlayerIpBanEvent const PlayerUnbanEvent = Packages.mindustry.game.EventType.PlayerUnbanEvent @@ -141,10 +144,12 @@ const PlayerBanEvent = Packages.mindustry.game.EventType.PlayerBanEvent const PlayerLeave = Packages.mindustry.game.EventType.PlayerLeave const PlayerConnect = Packages.mindustry.game.EventType.PlayerConnect const PlayerJoin = Packages.mindustry.game.EventType.PlayerJoin +const PlayerConnectionConfirmed = Packages.mindustry.game.EventType.PlayerConnectionConfirmed const ConnectPacketEvent = Packages.mindustry.game.EventType.ConnectPacketEvent const ConnectionEvent = Packages.mindustry.game.EventType.ConnectionEvent const UnitChangeEvent = Packages.mindustry.game.EventType.UnitChangeEvent const UnitUnloadEvent = Packages.mindustry.game.EventType.UnitUnloadEvent +const UnitSpawnEvent = Packages.mindustry.game.EventType.UnitSpawnEvent const UnitCreateEvent = Packages.mindustry.game.EventType.UnitCreateEvent const UnitDrownEvent = Packages.mindustry.game.EventType.UnitDrownEvent const UnitDestroyEvent = Packages.mindustry.game.EventType.UnitDestroyEvent @@ -178,6 +183,7 @@ const SectorInvasionEvent = Packages.mindustry.game.EventType.SectorInvasionEven const SectorLoseEvent = Packages.mindustry.game.EventType.SectorLoseEvent const WorldLoadEvent = Packages.mindustry.game.EventType.WorldLoadEvent const FileTreeInitEvent = Packages.mindustry.game.EventType.FileTreeInitEvent +const MusicRegisterEvent = Packages.mindustry.game.EventType.MusicRegisterEvent const ClientLoadEvent = Packages.mindustry.game.EventType.ClientLoadEvent const ContentInitEvent = Packages.mindustry.game.EventType.ContentInitEvent const BlockInfoEvent = Packages.mindustry.game.EventType.BlockInfoEvent @@ -191,8 +197,8 @@ const PlayEvent = Packages.mindustry.game.EventType.PlayEvent const DisposeEvent = Packages.mindustry.game.EventType.DisposeEvent const ServerLoadEvent = Packages.mindustry.game.EventType.ServerLoadEvent const ClientCreateEvent = Packages.mindustry.game.EventType.ClientCreateEvent -const SaveWriteEvent = Packages.mindustry.game.EventType.SaveWriteEvent const SaveLoadEvent = Packages.mindustry.game.EventType.SaveLoadEvent +const SaveWriteEvent = Packages.mindustry.game.EventType.SaveWriteEvent const MapPublishEvent = Packages.mindustry.game.EventType.MapPublishEvent const MapMakeEvent = Packages.mindustry.game.EventType.MapMakeEvent const ResizeEvent = Packages.mindustry.game.EventType.ResizeEvent diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6fa79887f1..8348aea868 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -7,6 +7,7 @@ import mindustry.*; import mindustry.entities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; +import mindustry.entities.part.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -3648,7 +3649,7 @@ public class Blocks{ }}; switchBlock = new SwitchBlock("switch"){{ - requirements(Category.logic, with(Items.graphite, 5)); + requirements(Category.logic, with(Items.graphite, 5, Items.copper, 5)); }}; microProcessor = new LogicBlock("micro-processor"){{ @@ -3683,13 +3684,13 @@ public class Blocks{ }}; memoryCell = new MemoryBlock("memory-cell"){{ - requirements(Category.logic, with(Items.graphite, 30, Items.silicon, 30)); + requirements(Category.logic, with(Items.graphite, 30, Items.silicon, 30, Items.copper, 30)); memoryCapacity = 64; }}; memoryBank = new MemoryBlock("memory-bank"){{ - requirements(Category.logic, with(Items.graphite, 80, Items.silicon, 80, Items.phaseFabric, 30)); + requirements(Category.logic, with(Items.graphite, 80, Items.silicon, 80, Items.phaseFabric, 30, Items.copper, 30)); memoryCapacity = 512; size = 2; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index d9c6c431b3..f47f4049b5 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -11,6 +11,8 @@ import mindustry.entities.*; import mindustry.entities.abilities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; +import mindustry.entities.part.*; +import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -2432,10 +2434,10 @@ public class UnitTypes{ vanquish = new TankUnitType("vanquish"){{ hitSize = 28f; treadPullOffset = 4; - speed = 0.6f; + speed = 0.63f; health = 9000; armor = 20f; - areaDamage = 12f; + areaDamage = 13f; treadRects = new Rect[]{new Rect(22, 16, 28, 130)}; weapons.add(new Weapon("vanquish-weapon"){{ @@ -2513,18 +2515,24 @@ public class UnitTypes{ weapons.add(new Weapon("conquer-weapon"){{ layerOffset = 0.0001f; reload = 120f; - shootY = 71f / 4f; + shootY = 32.5f; shake = 5f; recoil = 4f; rotate = true; rotateSpeed = 0.6f; mirror = false; x = 0f; - shadow = 32f; - y = -8f; + y = -2f; + shadow = 50f; heatColor = Color.valueOf("f9350f"); cooldownTime = 80f; + parts.add(new RegionPart("-glow"){{ + color = Color.red; + blending = Blending.additive; + outline = mirror = false; + }}); + bullet = new BasicBulletType(8f, 110){{ sprite = "missile-large"; width = 9.5f; @@ -2545,9 +2553,9 @@ public class UnitTypes{ }}); //TODO could change color when shooting - //decals.add(new UnitDecal("conquer-glow", Pal.turretHeat.cpy(), Blending.additive){{ - // layer = -1f; - //}}); + decals.add(new UnitDecal("conquer-glow", Color.red, Blending.additive){{ + layer = -1f; + }}); }}; //endregion diff --git a/core/src/mindustry/entities/part/RegionPart.java b/core/src/mindustry/entities/part/RegionPart.java new file mode 100644 index 0000000000..b0a9e834b0 --- /dev/null +++ b/core/src/mindustry/entities/part/RegionPart.java @@ -0,0 +1,131 @@ +package mindustry.entities.part; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.struct.*; +import arc.util.*; +import mindustry.graphics.*; + +public class RegionPart extends WeaponPart{ + public String suffix = ""; + public TextureRegion heat; + public TextureRegion[] regions = {}; + public TextureRegion[] outlines = {}; + + /** If true, turret reload is used as the measure of progress. Otherwise, warmup is used. */ + public boolean useReload = true; + /** If true, parts are mirrored across the turret. Requires -1 and -2 regions. */ + public boolean mirror = true; + /** If true, an outline is drawn under the part. */ + public boolean outline = true; + /** If true, the layer is overridden to be under the turret itself. */ + public boolean under = false; + /** If true, the base + outline regions are drawn. Set to false for heat-only regions. */ + public boolean drawRegion = true; + /** If true, progress is inverted. */ + public boolean invert = false; + public Blending blending = Blending.normal; + public boolean useProgressHeat = false; + public Interp interp = Interp.linear; + public float layer = -1; + public float outlineLayerOffset = -0.01f; + public float rotation, rotMove; + public float x, y, moveX, moveY; + public float oscMag = 0f, oscScl = 7f; + public boolean oscAbs = false; + public @Nullable Color color; + public Color heatColor = Pal.turretHeat.cpy(); + + public RegionPart(String region){ + this.suffix = region; + } + + public RegionPart(){ + } + + @Override + public void draw(PartParams params){ + float z = Draw.z(); + if(layer > 0){ + Draw.z(layer); + } + float prevZ = layer > 0 ? layer : z; + float progress = useReload ? 1f - params.reload : params.warmup; + + if(oscMag > 0) progress += oscAbs ? Mathf.absin(oscScl, oscMag) : Mathf.sin(oscScl, oscMag); + if(invert) progress = 1f - progress; + + progress = interp.apply(progress); + int len = mirror ? 2 : 1; + + for(int i = 0; i < len; i++){ + //can be null + var region = drawRegion ? regions[Math.min(i, regions.length - 1)] : null; + float sign = i == 1 ? -1 : 1; + Tmp.v1.set((x + moveX * progress) * sign, y + moveY * progress).rotate((params.rotation - 90)); + + float + rx = params.x + Tmp.v1.x, + ry = params.y + Tmp.v1.y, + rot = i * sign + rotMove * progress * sign + params.rotation - 90; + + Draw.xscl = i == 0 ? 1 : -1; + + if(outline && drawRegion){ + Draw.z(prevZ + outlineLayerOffset); + Draw.rect(outlines[i], rx, ry, rot); + Draw.z(prevZ); + } + + if(drawRegion && region.found()){ + if(color != null) Draw.color(color); + Draw.blend(blending); + Draw.rect(region, rx, ry, rot); + Draw.blend(); + if(color != null) Draw.color(); + } + + if(heat.found()){ + Drawf.additive(heat, heatColor.write(Tmp.c1).a((useProgressHeat ? params.warmup : params.heat) * heatColor.a), rx, ry, rot, Layer.turretHeat); + } + + Draw.xscl = 1f; + } + + Draw.z(z); + } + + @Override + public void load(String name){ + if(under) layer = Layer.turret - 0.0001f; + + if(drawRegion){ + //TODO l/r + if(mirror && turretShading){ + regions = new TextureRegion[]{ + Core.atlas.find(name + suffix + "1"), + Core.atlas.find(name + suffix + "2") + }; + + outlines = new TextureRegion[]{ + Core.atlas.find(name + suffix + "1-outline"), + Core.atlas.find(name + suffix + "2-outline") + }; + }else{ + regions = new TextureRegion[]{Core.atlas.find(name + suffix)}; + outlines = new TextureRegion[]{Core.atlas.find(name + suffix + "-outline")}; + } + } + + heat = Core.atlas.find(name + suffix + "-heat"); + } + + @Override + public void getOutlines(Seq out){ + if(outline && drawRegion){ + out.addAll(regions); + } + } +} \ No newline at end of file diff --git a/core/src/mindustry/entities/part/WeaponPart.java b/core/src/mindustry/entities/part/WeaponPart.java new file mode 100644 index 0000000000..b02c86158f --- /dev/null +++ b/core/src/mindustry/entities/part/WeaponPart.java @@ -0,0 +1,32 @@ +package mindustry.entities.part; + +import arc.graphics.g2d.*; +import arc.struct.*; + +public abstract class WeaponPart{ + public static final PartParams params = new PartParams(); + + /** If true, turret shading is used. Don't touch this, it is set up in unit/block init()! */ + public boolean turretShading; + + public abstract void draw(PartParams params); + public abstract void load(String name); + public void getOutlines(Seq out){} + + /** Parameters for drawing a part in draw(). */ + public static class PartParams{ + //TODO document + public float warmup, reload, heat; + public float x, y, rotation; + + public PartParams set(float warmup, float reload, float heat, float x, float y, float rotation){ + this.warmup = warmup; + this.reload = reload; + this.heat = heat; + this.x = x; + this.y = y; + this.rotation = rotation; + return this; + } + } +} diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index 72e3834f14..0780d9e45f 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -1,36 +1,46 @@ package mindustry.mod; import arc.struct.*; -import mindustry.world.blocks.payloads.*; - /** Generated class. Maps simple class names to concrete classes. For use in JSON mods. */ @SuppressWarnings("deprecation") public class ClassMap{ public static final ObjectMap> classes = new ObjectMap<>(); static{ + classes.put("AssemblerAI", mindustry.ai.types.AssemblerAI.class); classes.put("BuilderAI", mindustry.ai.types.BuilderAI.class); + classes.put("CargoAI", mindustry.ai.types.CargoAI.class); classes.put("DefenderAI", mindustry.ai.types.DefenderAI.class); classes.put("FlyingAI", mindustry.ai.types.FlyingAI.class); + classes.put("FlyingFollowAI", mindustry.ai.types.FlyingFollowAI.class); classes.put("FormationAI", mindustry.ai.types.FormationAI.class); classes.put("GroundAI", mindustry.ai.types.GroundAI.class); classes.put("HugAI", mindustry.ai.types.HugAI.class); classes.put("LogicAI", mindustry.ai.types.LogicAI.class); classes.put("MinerAI", mindustry.ai.types.MinerAI.class); + classes.put("MissileAI", mindustry.ai.types.MissileAI.class); classes.put("RepairAI", mindustry.ai.types.RepairAI.class); classes.put("SuicideAI", mindustry.ai.types.SuicideAI.class); classes.put("Ability", mindustry.entities.abilities.Ability.class); + classes.put("ArmorPlateAbility", mindustry.entities.abilities.ArmorPlateAbility.class); classes.put("EnergyFieldAbility", mindustry.entities.abilities.EnergyFieldAbility.class); classes.put("ForceFieldAbility", mindustry.entities.abilities.ForceFieldAbility.class); + classes.put("LiquidExplodeAbility", mindustry.entities.abilities.LiquidExplodeAbility.class); + classes.put("LiquidRegenAbility", mindustry.entities.abilities.LiquidRegenAbility.class); classes.put("MoveLightningAbility", mindustry.entities.abilities.MoveLightningAbility.class); + classes.put("RegenAbility", mindustry.entities.abilities.RegenAbility.class); classes.put("RepairFieldAbility", mindustry.entities.abilities.RepairFieldAbility.class); + classes.put("ShieldArcAbility", mindustry.entities.abilities.ShieldArcAbility.class); classes.put("ShieldRegenFieldAbility", mindustry.entities.abilities.ShieldRegenFieldAbility.class); classes.put("StatusFieldAbility", mindustry.entities.abilities.StatusFieldAbility.class); + classes.put("SuppressionFieldAbility", mindustry.entities.abilities.SuppressionFieldAbility.class); classes.put("UnitSpawnAbility", mindustry.entities.abilities.UnitSpawnAbility.class); classes.put("ArtilleryBulletType", mindustry.entities.bullet.ArtilleryBulletType.class); classes.put("BasicBulletType", mindustry.entities.bullet.BasicBulletType.class); classes.put("BombBulletType", mindustry.entities.bullet.BombBulletType.class); classes.put("BulletType", mindustry.entities.bullet.BulletType.class); + classes.put("ContinuousBulletType", mindustry.entities.bullet.ContinuousBulletType.class); + classes.put("ContinuousFlameBulletType", mindustry.entities.bullet.ContinuousFlameBulletType.class); classes.put("ContinuousLaserBulletType", mindustry.entities.bullet.ContinuousLaserBulletType.class); classes.put("EmpBulletType", mindustry.entities.bullet.EmpBulletType.class); classes.put("FireBulletType", mindustry.entities.bullet.FireBulletType.class); @@ -45,17 +55,25 @@ public class ClassMap{ classes.put("RailBulletType", mindustry.entities.bullet.RailBulletType.class); classes.put("SapBulletType", mindustry.entities.bullet.SapBulletType.class); classes.put("ShrapnelBulletType", mindustry.entities.bullet.ShrapnelBulletType.class); + classes.put("SpaceLiquidBulletType", mindustry.entities.bullet.SpaceLiquidBulletType.class); classes.put("ExplosionEffect", mindustry.entities.effect.ExplosionEffect.class); classes.put("MultiEffect", mindustry.entities.effect.MultiEffect.class); classes.put("ParticleEffect", mindustry.entities.effect.ParticleEffect.class); + classes.put("RadialEffect", mindustry.entities.effect.RadialEffect.class); classes.put("WaveEffect", mindustry.entities.effect.WaveEffect.class); + classes.put("WrapEffect", mindustry.entities.effect.WrapEffect.class); classes.put("Objectives", mindustry.game.Objectives.class); classes.put("Objective", mindustry.game.Objectives.Objective.class); + classes.put("OnPlanet", mindustry.game.Objectives.OnPlanet.class); + classes.put("OnSector", mindustry.game.Objectives.OnSector.class); classes.put("Produce", mindustry.game.Objectives.Produce.class); classes.put("Research", mindustry.game.Objectives.Research.class); classes.put("SectorComplete", mindustry.game.Objectives.SectorComplete.class); classes.put("AmmoType", mindustry.type.AmmoType.class); + classes.put("BlockSeq", mindustry.type.BlockSeq.class); + classes.put("BlockStack", mindustry.type.BlockStack.class); classes.put("Category", mindustry.type.Category.class); + classes.put("CellLiquid", mindustry.type.CellLiquid.class); classes.put("ErrorContent", mindustry.type.ErrorContent.class); classes.put("Item", mindustry.type.Item.class); classes.put("ItemSeq", mindustry.type.ItemSeq.class); @@ -70,12 +88,18 @@ public class ClassMap{ classes.put("SectorPreset", mindustry.type.SectorPreset.class); classes.put("StatusEffect", mindustry.type.StatusEffect.class); classes.put("TransitionHandler", mindustry.type.StatusEffect.TransitionHandler.class); + classes.put("TeamEntry", mindustry.type.TeamEntry.class); classes.put("UnitType", mindustry.type.UnitType.class); + classes.put("UnitEngine", mindustry.type.UnitType.UnitEngine.class); classes.put("Weapon", mindustry.type.Weapon.class); classes.put("Weather", mindustry.type.Weather.class); classes.put("WeatherEntry", mindustry.type.Weather.WeatherEntry.class); classes.put("ItemAmmoType", mindustry.type.ammo.ItemAmmoType.class); classes.put("PowerAmmoType", mindustry.type.ammo.PowerAmmoType.class); + classes.put("MissileUnitType", mindustry.type.unit.MissileUnitType.class); + classes.put("NeoplasmUnitType", mindustry.type.unit.NeoplasmUnitType.class); + classes.put("TankUnitType", mindustry.type.unit.TankUnitType.class); + classes.put("BuildWeapon", mindustry.type.weapons.BuildWeapon.class); classes.put("PointDefenseWeapon", mindustry.type.weapons.PointDefenseWeapon.class); classes.put("RepairBeamWeapon", mindustry.type.weapons.RepairBeamWeapon.class); classes.put("HealBeamMount", mindustry.type.weapons.RepairBeamWeapon.HealBeamMount.class); @@ -95,6 +119,10 @@ public class ClassMap{ classes.put("AcceleratorBuild", mindustry.world.blocks.campaign.Accelerator.AcceleratorBuild.class); classes.put("LaunchPad", mindustry.world.blocks.campaign.LaunchPad.class); classes.put("LaunchPadBuild", mindustry.world.blocks.campaign.LaunchPad.LaunchPadBuild.class); + classes.put("BuildTurret", mindustry.world.blocks.defense.BuildTurret.class); + classes.put("BuildTurretBuild", mindustry.world.blocks.defense.BuildTurret.BuildTurretBuild.class); + classes.put("DirectionalForceProjector", mindustry.world.blocks.defense.DirectionalForceProjector.class); + classes.put("DirectionalForceProjectorBuild", mindustry.world.blocks.defense.DirectionalForceProjector.DirectionalForceProjectorBuild.class); classes.put("Door", mindustry.world.blocks.defense.Door.class); classes.put("DoorBuild", mindustry.world.blocks.defense.Door.DoorBuild.class); classes.put("ForceProjector", mindustry.world.blocks.defense.ForceProjector.class); @@ -103,6 +131,8 @@ public class ClassMap{ classes.put("MendBuild", mindustry.world.blocks.defense.MendProjector.MendBuild.class); classes.put("OverdriveProjector", mindustry.world.blocks.defense.OverdriveProjector.class); classes.put("OverdriveBuild", mindustry.world.blocks.defense.OverdriveProjector.OverdriveBuild.class); + classes.put("RegenProjector", mindustry.world.blocks.defense.RegenProjector.class); + classes.put("RegenProjectorBuild", mindustry.world.blocks.defense.RegenProjector.RegenProjectorBuild.class); classes.put("ShockMine", mindustry.world.blocks.defense.ShockMine.class); classes.put("ShockMineBuild", mindustry.world.blocks.defense.ShockMine.ShockMineBuild.class); classes.put("Thruster", mindustry.world.blocks.defense.Thruster.class); @@ -111,6 +141,10 @@ public class ClassMap{ classes.put("WallBuild", mindustry.world.blocks.defense.Wall.WallBuild.class); classes.put("BaseTurret", mindustry.world.blocks.defense.turrets.BaseTurret.class); classes.put("BaseTurretBuild", mindustry.world.blocks.defense.turrets.BaseTurret.BaseTurretBuild.class); + classes.put("ContinuousLiquidTurret", mindustry.world.blocks.defense.turrets.ContinuousLiquidTurret.class); + classes.put("LiquidTurretBuild", mindustry.world.blocks.defense.turrets.ContinuousLiquidTurret.LiquidTurretBuild.class); + classes.put("ContinuousTurret", mindustry.world.blocks.defense.turrets.ContinuousTurret.class); + classes.put("ContinuousTurretBuild", mindustry.world.blocks.defense.turrets.ContinuousTurret.ContinuousTurretBuild.class); classes.put("ItemTurret", mindustry.world.blocks.defense.turrets.ItemTurret.class); classes.put("ItemEntry", mindustry.world.blocks.defense.turrets.ItemTurret.ItemEntry.class); classes.put("ItemTurretBuild", mindustry.world.blocks.defense.turrets.ItemTurret.ItemTurretBuild.class); @@ -118,6 +152,8 @@ public class ClassMap{ classes.put("LaserTurretBuild", mindustry.world.blocks.defense.turrets.LaserTurret.LaserTurretBuild.class); classes.put("LiquidTurret", mindustry.world.blocks.defense.turrets.LiquidTurret.class); classes.put("LiquidTurretBuild", mindustry.world.blocks.defense.turrets.LiquidTurret.LiquidTurretBuild.class); + classes.put("PayloadTurret", mindustry.world.blocks.defense.turrets.PayloadTurret.class); + classes.put("PayloadTurretBuild", mindustry.world.blocks.defense.turrets.PayloadTurret.PayloadTurretBuild.class); classes.put("PointDefenseTurret", mindustry.world.blocks.defense.turrets.PointDefenseTurret.class); classes.put("PointDefenseBuild", mindustry.world.blocks.defense.turrets.PointDefenseTurret.PointDefenseBuild.class); classes.put("PowerTurret", mindustry.world.blocks.defense.turrets.PowerTurret.class); @@ -136,6 +172,12 @@ public class ClassMap{ classes.put("ChainedBuilding", mindustry.world.blocks.distribution.ChainedBuilding.class); classes.put("Conveyor", mindustry.world.blocks.distribution.Conveyor.class); classes.put("ConveyorBuild", mindustry.world.blocks.distribution.Conveyor.ConveyorBuild.class); + classes.put("DirectionBridge", mindustry.world.blocks.distribution.DirectionBridge.class); + classes.put("DirectionBridgeBuild", mindustry.world.blocks.distribution.DirectionBridge.DirectionBridgeBuild.class); + classes.put("DirectionLiquidBridge", mindustry.world.blocks.distribution.DirectionLiquidBridge.class); + classes.put("DuctBridgeBuild", mindustry.world.blocks.distribution.DirectionLiquidBridge.DuctBridgeBuild.class); + classes.put("DirectionalUnloader", mindustry.world.blocks.distribution.DirectionalUnloader.class); + classes.put("DirectionalUnloaderBuild", mindustry.world.blocks.distribution.DirectionalUnloader.DirectionalUnloaderBuild.class); classes.put("Duct", mindustry.world.blocks.distribution.Duct.class); classes.put("DuctBuild", mindustry.world.blocks.distribution.Duct.DuctBuild.class); classes.put("DuctBridge", mindustry.world.blocks.distribution.DuctBridge.class); @@ -152,30 +194,39 @@ public class ClassMap{ classes.put("DriverBulletData", mindustry.world.blocks.distribution.MassDriver.DriverBulletData.class); classes.put("DriverState", mindustry.world.blocks.distribution.MassDriver.DriverState.class); classes.put("MassDriverBuild", mindustry.world.blocks.distribution.MassDriver.MassDriverBuild.class); + classes.put("OverflowDuct", mindustry.world.blocks.distribution.OverflowDuct.class); + classes.put("DuctRouterBuild", mindustry.world.blocks.distribution.OverflowDuct.DuctRouterBuild.class); classes.put("OverflowGate", mindustry.world.blocks.distribution.OverflowGate.class); classes.put("OverflowGateBuild", mindustry.world.blocks.distribution.OverflowGate.OverflowGateBuild.class); - classes.put("PayloadConveyor", PayloadConveyor.class); - classes.put("PayloadConveyorBuild", PayloadConveyor.PayloadConveyorBuild.class); - classes.put("PayloadRouter", PayloadRouter.class); - classes.put("PayloadRouterBuild", PayloadRouter.PayloadRouterBuild.class); + classes.put("PayloadConveyor", mindustry.world.blocks.distribution.PayloadConveyor.class); + classes.put("PayloadConveyorBuild", mindustry.world.blocks.distribution.PayloadConveyor.PayloadConveyorBuild.class); + classes.put("PayloadRouter", mindustry.world.blocks.distribution.PayloadRouter.class); + classes.put("PayloadRouterBuild", mindustry.world.blocks.distribution.PayloadRouter.PayloadRouterBuild.class); classes.put("Router", mindustry.world.blocks.distribution.Router.class); classes.put("RouterBuild", mindustry.world.blocks.distribution.Router.RouterBuild.class); classes.put("Sorter", mindustry.world.blocks.distribution.Sorter.class); classes.put("SorterBuild", mindustry.world.blocks.distribution.Sorter.SorterBuild.class); classes.put("StackConveyor", mindustry.world.blocks.distribution.StackConveyor.class); classes.put("StackConveyorBuild", mindustry.world.blocks.distribution.StackConveyor.StackConveyorBuild.class); + classes.put("StackRouter", mindustry.world.blocks.distribution.StackRouter.class); + classes.put("StackRouterBuild", mindustry.world.blocks.distribution.StackRouter.StackRouterBuild.class); classes.put("AirBlock", mindustry.world.blocks.environment.AirBlock.class); classes.put("Cliff", mindustry.world.blocks.environment.Cliff.class); classes.put("DoubleOverlayFloor", mindustry.world.blocks.environment.DoubleOverlayFloor.class); classes.put("EmptyFloor", mindustry.world.blocks.environment.EmptyFloor.class); classes.put("Floor", mindustry.world.blocks.environment.Floor.class); + classes.put("UpdateRenderState", mindustry.world.blocks.environment.Floor.UpdateRenderState.class); classes.put("OreBlock", mindustry.world.blocks.environment.OreBlock.class); classes.put("OverlayFloor", mindustry.world.blocks.environment.OverlayFloor.class); classes.put("Prop", mindustry.world.blocks.environment.Prop.class); + classes.put("SeaBush", mindustry.world.blocks.environment.SeaBush.class); + classes.put("Seaweed", mindustry.world.blocks.environment.Seaweed.class); classes.put("ShallowLiquid", mindustry.world.blocks.environment.ShallowLiquid.class); classes.put("SpawnBlock", mindustry.world.blocks.environment.SpawnBlock.class); classes.put("StaticTree", mindustry.world.blocks.environment.StaticTree.class); classes.put("StaticWall", mindustry.world.blocks.environment.StaticWall.class); + classes.put("SteamVent", mindustry.world.blocks.environment.SteamVent.class); + classes.put("TallBlock", mindustry.world.blocks.environment.TallBlock.class); classes.put("TreeBlock", mindustry.world.blocks.environment.TreeBlock.class); classes.put("WobbleProp", mindustry.world.blocks.environment.WobbleProp.class); classes.put("BlockForge", mindustry.world.blocks.experimental.BlockForge.class); @@ -184,6 +235,12 @@ public class ClassMap{ classes.put("BlockLoaderBuild", mindustry.world.blocks.experimental.BlockLoader.BlockLoaderBuild.class); classes.put("BlockUnloader", mindustry.world.blocks.experimental.BlockUnloader.class); classes.put("BlockUnloaderBuild", mindustry.world.blocks.experimental.BlockUnloader.BlockUnloaderBuild.class); + classes.put("HeatBlock", mindustry.world.blocks.heat.HeatBlock.class); + classes.put("HeatConductor", mindustry.world.blocks.heat.HeatConductor.class); + classes.put("HeatConductorBuild", mindustry.world.blocks.heat.HeatConductor.HeatConductorBuild.class); + classes.put("HeatConsumer", mindustry.world.blocks.heat.HeatConsumer.class); + classes.put("HeatProducer", mindustry.world.blocks.heat.HeatProducer.class); + classes.put("HeatProducerBuild", mindustry.world.blocks.heat.HeatProducer.HeatProducerBuild.class); classes.put("LegacyBlock", mindustry.world.blocks.legacy.LegacyBlock.class); classes.put("LegacyMechPad", mindustry.world.blocks.legacy.LegacyMechPad.class); classes.put("LegacyMechPadBuild", mindustry.world.blocks.legacy.LegacyMechPad.LegacyMechPadBuild.class); @@ -223,6 +280,8 @@ public class ClassMap{ classes.put("Payload", mindustry.world.blocks.payloads.Payload.class); classes.put("PayloadBlock", mindustry.world.blocks.payloads.PayloadBlock.class); classes.put("PayloadBlockBuild", mindustry.world.blocks.payloads.PayloadBlock.PayloadBlockBuild.class); + classes.put("PayloadConveyor", mindustry.world.blocks.payloads.PayloadConveyor.class); + classes.put("PayloadConveyorBuild", mindustry.world.blocks.payloads.PayloadConveyor.PayloadConveyorBuild.class); classes.put("PayloadDeconstructor", mindustry.world.blocks.payloads.PayloadDeconstructor.class); classes.put("PayloadDeconstructorBuild", mindustry.world.blocks.payloads.PayloadDeconstructor.PayloadDeconstructorBuild.class); classes.put("PayloadLoader", mindustry.world.blocks.payloads.PayloadLoader.class); @@ -231,6 +290,8 @@ public class ClassMap{ classes.put("PayloadDriverBuild", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadDriverBuild.class); classes.put("PayloadDriverState", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadDriverState.class); classes.put("PayloadMassDriverData", mindustry.world.blocks.payloads.PayloadMassDriver.PayloadMassDriverData.class); + classes.put("PayloadRouter", mindustry.world.blocks.payloads.PayloadRouter.class); + classes.put("PayloadRouterBuild", mindustry.world.blocks.payloads.PayloadRouter.PayloadRouterBuild.class); classes.put("PayloadSource", mindustry.world.blocks.payloads.PayloadSource.class); classes.put("PayloadSourceBuild", mindustry.world.blocks.payloads.PayloadSource.PayloadSourceBuild.class); classes.put("PayloadUnloader", mindustry.world.blocks.payloads.PayloadUnloader.class); @@ -240,9 +301,13 @@ public class ClassMap{ classes.put("UnitPayload", mindustry.world.blocks.payloads.UnitPayload.class); classes.put("Battery", mindustry.world.blocks.power.Battery.class); classes.put("BatteryBuild", mindustry.world.blocks.power.Battery.BatteryBuild.class); + classes.put("BeamNode", mindustry.world.blocks.power.BeamNode.class); + classes.put("BeamNodeBuild", mindustry.world.blocks.power.BeamNode.BeamNodeBuild.class); classes.put("BurnerGenerator", mindustry.world.blocks.power.BurnerGenerator.class); classes.put("BurnerGeneratorBuild", mindustry.world.blocks.power.BurnerGenerator.BurnerGeneratorBuild.class); classes.put("ConditionalConsumePower", mindustry.world.blocks.power.ConditionalConsumePower.class); + classes.put("ConsumeGenerator", mindustry.world.blocks.power.ConsumeGenerator.class); + classes.put("ConsumeGeneratorBuild", mindustry.world.blocks.power.ConsumeGenerator.ConsumeGeneratorBuild.class); classes.put("DecayGenerator", mindustry.world.blocks.power.DecayGenerator.class); classes.put("DynamicConsumePower", mindustry.world.blocks.power.DynamicConsumePower.class); classes.put("ImpactReactor", mindustry.world.blocks.power.ImpactReactor.class); @@ -273,6 +338,8 @@ public class ClassMap{ classes.put("AttributeSmelterBuild", mindustry.world.blocks.production.AttributeSmelter.AttributeSmelterBuild.class); classes.put("BeamDrill", mindustry.world.blocks.production.BeamDrill.class); classes.put("BeamDrillBuild", mindustry.world.blocks.production.BeamDrill.BeamDrillBuild.class); + classes.put("BurstDrill", mindustry.world.blocks.production.BurstDrill.class); + classes.put("BurstDrillBuild", mindustry.world.blocks.production.BurstDrill.BurstDrillBuild.class); classes.put("Cultivator", mindustry.world.blocks.production.Cultivator.class); classes.put("CultivatorBuild", mindustry.world.blocks.production.Cultivator.CultivatorBuild.class); classes.put("Drill", mindustry.world.blocks.production.Drill.class); @@ -283,8 +350,12 @@ public class ClassMap{ classes.put("GenericCrafterBuild", mindustry.world.blocks.production.GenericCrafter.GenericCrafterBuild.class); classes.put("GenericSmelter", mindustry.world.blocks.production.GenericSmelter.class); classes.put("SmelterBuild", mindustry.world.blocks.production.GenericSmelter.SmelterBuild.class); + classes.put("HeatCrafter", mindustry.world.blocks.production.HeatCrafter.class); + classes.put("HeatCrafterBuild", mindustry.world.blocks.production.HeatCrafter.HeatCrafterBuild.class); classes.put("Incinerator", mindustry.world.blocks.production.Incinerator.class); classes.put("IncineratorBuild", mindustry.world.blocks.production.Incinerator.IncineratorBuild.class); + classes.put("ItemIncinerator", mindustry.world.blocks.production.ItemIncinerator.class); + classes.put("ItemIncineratorBuild", mindustry.world.blocks.production.ItemIncinerator.ItemIncineratorBuild.class); classes.put("LiquidConverter", mindustry.world.blocks.production.LiquidConverter.class); classes.put("LiquidConverterBuild", mindustry.world.blocks.production.LiquidConverter.LiquidConverterBuild.class); classes.put("PayloadAcceptor", mindustry.world.blocks.production.PayloadAcceptor.class); @@ -297,6 +368,8 @@ public class ClassMap{ classes.put("SingleBlockProducerBuild", mindustry.world.blocks.production.SingleBlockProducer.SingleBlockProducerBuild.class); classes.put("SolidPump", mindustry.world.blocks.production.SolidPump.class); classes.put("SolidPumpBuild", mindustry.world.blocks.production.SolidPump.SolidPumpBuild.class); + classes.put("WallCrafter", mindustry.world.blocks.production.WallCrafter.class); + classes.put("WallCrafterBuild", mindustry.world.blocks.production.WallCrafter.WallCrafterBuild.class); classes.put("ItemSource", mindustry.world.blocks.sandbox.ItemSource.class); classes.put("ItemSourceBuild", mindustry.world.blocks.sandbox.ItemSource.ItemSourceBuild.class); classes.put("ItemVoid", mindustry.world.blocks.sandbox.ItemVoid.class); @@ -314,27 +387,63 @@ public class ClassMap{ classes.put("StorageBuild", mindustry.world.blocks.storage.StorageBlock.StorageBuild.class); classes.put("Unloader", mindustry.world.blocks.storage.Unloader.class); classes.put("UnloaderBuild", mindustry.world.blocks.storage.Unloader.UnloaderBuild.class); + classes.put("ContainerStat", mindustry.world.blocks.storage.Unloader.UnloaderBuild.ContainerStat.class); classes.put("CommandCenter", mindustry.world.blocks.units.CommandCenter.class); classes.put("CommandBuild", mindustry.world.blocks.units.CommandCenter.CommandBuild.class); classes.put("Reconstructor", mindustry.world.blocks.units.Reconstructor.class); classes.put("ReconstructorBuild", mindustry.world.blocks.units.Reconstructor.ReconstructorBuild.class); classes.put("RepairPoint", mindustry.world.blocks.units.RepairPoint.class); classes.put("RepairPointBuild", mindustry.world.blocks.units.RepairPoint.RepairPointBuild.class); + classes.put("UnitAssembler", mindustry.world.blocks.units.UnitAssembler.class); + classes.put("AssemblerUnitPlan", mindustry.world.blocks.units.UnitAssembler.AssemblerUnitPlan.class); + classes.put("UnitAssemblerBuild", mindustry.world.blocks.units.UnitAssembler.UnitAssemblerBuild.class); + classes.put("YeetData", mindustry.world.blocks.units.UnitAssembler.YeetData.class); + classes.put("UnitAssemblerModule", mindustry.world.blocks.units.UnitAssemblerModule.class); + classes.put("UnitAssemblerModuleBuild", mindustry.world.blocks.units.UnitAssemblerModule.UnitAssemblerModuleBuild.class); classes.put("UnitBlock", mindustry.world.blocks.units.UnitBlock.class); classes.put("UnitBuild", mindustry.world.blocks.units.UnitBlock.UnitBuild.class); + classes.put("UnitCargoLoader", mindustry.world.blocks.units.UnitCargoLoader.class); + classes.put("UnitTransportSourceBuild", mindustry.world.blocks.units.UnitCargoLoader.UnitTransportSourceBuild.class); + classes.put("UnitCargoUnloadPoint", mindustry.world.blocks.units.UnitCargoUnloadPoint.class); + classes.put("UnitCargoUnloadPointBuild", mindustry.world.blocks.units.UnitCargoUnloadPoint.UnitCargoUnloadPointBuild.class); classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class); classes.put("UnitFactoryBuild", mindustry.world.blocks.units.UnitFactory.UnitFactoryBuild.class); classes.put("UnitPlan", mindustry.world.blocks.units.UnitFactory.UnitPlan.class); classes.put("DrawAnimation", mindustry.world.draw.DrawAnimation.class); classes.put("DrawArcSmelter", mindustry.world.draw.DrawArcSmelter.class); classes.put("DrawBlock", mindustry.world.draw.DrawBlock.class); + classes.put("DrawBlurSpin", mindustry.world.draw.DrawBlurSpin.class); + classes.put("DrawBubbles", mindustry.world.draw.DrawBubbles.class); classes.put("DrawCells", mindustry.world.draw.DrawCells.class); + classes.put("DrawCircles", mindustry.world.draw.DrawCircles.class); + classes.put("DrawCrucibleFlame", mindustry.world.draw.DrawCrucibleFlame.class); classes.put("DrawCultivator", mindustry.world.draw.DrawCultivator.class); classes.put("DrawGlow", mindustry.world.draw.DrawGlow.class); + classes.put("DrawGlowRegion", mindustry.world.draw.DrawGlowRegion.class); + classes.put("DrawHeatInput", mindustry.world.draw.DrawHeatInput.class); + classes.put("DrawHeatOutput", mindustry.world.draw.DrawHeatOutput.class); + classes.put("DrawHeatRegion", mindustry.world.draw.DrawHeatRegion.class); classes.put("DrawLiquid", mindustry.world.draw.DrawLiquid.class); + classes.put("DrawLiquidOutputs", mindustry.world.draw.DrawLiquidOutputs.class); + classes.put("DrawLiquidRegion", mindustry.world.draw.DrawLiquidRegion.class); + classes.put("DrawLiquidTile", mindustry.world.draw.DrawLiquidTile.class); classes.put("DrawMixer", mindustry.world.draw.DrawMixer.class); + classes.put("DrawMulti", mindustry.world.draw.DrawMulti.class); + classes.put("DrawMultiWeave", mindustry.world.draw.DrawMultiWeave.class); + classes.put("DrawPartial", mindustry.world.draw.DrawPartial.class); + classes.put("DrawParticles", mindustry.world.draw.DrawParticles.class); + classes.put("DrawPistons", mindustry.world.draw.DrawPistons.class); + classes.put("DrawPulseShape", mindustry.world.draw.DrawPulseShape.class); + classes.put("DrawPump", mindustry.world.draw.DrawPump.class); + classes.put("DrawRegion", mindustry.world.draw.DrawRegion.class); classes.put("DrawRotator", mindustry.world.draw.DrawRotator.class); + classes.put("DrawShape", mindustry.world.draw.DrawShape.class); + classes.put("DrawSideRegion", mindustry.world.draw.DrawSideRegion.class); classes.put("DrawSmelter", mindustry.world.draw.DrawSmelter.class); + classes.put("DrawSpikes", mindustry.world.draw.DrawSpikes.class); + classes.put("DrawTurbines", mindustry.world.draw.DrawTurbines.class); + classes.put("DrawTurret", mindustry.world.draw.DrawTurret.class); + classes.put("DrawWarmupRegion", mindustry.world.draw.DrawWarmupRegion.class); classes.put("DrawWeave", mindustry.world.draw.DrawWeave.class); classes.put("Block", mindustry.world.Block.class); } diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index a3241be6a9..a50d8a3f1c 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -24,6 +24,7 @@ import mindustry.entities.Units.*; import mindustry.entities.abilities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; +import mindustry.entities.part.*; import mindustry.game.*; import mindustry.game.Objectives.*; import mindustry.gen.*; @@ -128,6 +129,13 @@ public class ContentParser{ readFields(result, data); return result; }); + put(WeaponPart.class, (type, data) -> { + var bc = resolve(data.getString("type", ""), RegionPart.class); + data.remove("type"); + var result = make(bc); + readFields(result, data); + return result; + }); put(Sound.class, (type, data) -> { if(fieldOpt(Sounds.class, data) != null) return fieldOpt(Sounds.class, data); if(Vars.headless) return new Sound(); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index fde9584440..3889719f73 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -583,10 +583,32 @@ public class UnitType extends UnlockableContent{ } } + public void getRegionsToOutline(Seq out){ + for(Weapon weapon : weapons){ + for(var part : weapon.parts){ + part.getOutlines(out); + } + } + } + @Override public void createIcons(MultiPacker packer){ super.createIcons(packer); + var toOutline = new Seq(); + getRegionsToOutline(toOutline); + + for(var region : toOutline){ + if(region instanceof AtlasRegion atlas){ + String regionName = atlas.name; + Pixmap outlined = Pixmaps.outline(Core.atlas.getPixmap(region), outlineColor, outlineRadius); + + if(Core.settings.getBool("linear", true)) Pixmaps.bleed(outlined); + + packer.add(PageType.main, regionName + "-outline", outlined); + } + } + //currently does not create outlines for legs or base regions due to older mods having them outlined by default if(outlines){ diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 655482523a..c5cd032830 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -14,6 +14,7 @@ import mindustry.audio.*; import mindustry.content.*; import mindustry.entities.*; import mindustry.entities.bullet.*; +import mindustry.entities.part.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -125,6 +126,8 @@ public class Weapon implements Cloneable{ public float shootStatusDuration = 60f * 5f; /** whether this weapon should fire when its owner dies */ public boolean shootOnDeath = false; + /** extra animated parts */ + public Seq parts = new Seq<>(); public Weapon(String name){ this.name = name; @@ -163,13 +166,9 @@ public class Weapon implements Cloneable{ wx = unit.x + Angles.trnsx(rotation, x, y) + Angles.trnsx(weaponRotation, 0, -mount.recoil), wy = unit.y + Angles.trnsy(rotation, x, y) + Angles.trnsy(weaponRotation, 0, -mount.recoil); - if(outlineRegion.found()){ - Draw.rect(outlineRegion, - wx, wy, - outlineRegion.width * Draw.scl * -Mathf.sign(flipSprite), - outlineRegion.height * Draw.scl, - weaponRotation); - } + Draw.xscl = -Mathf.sign(flipSprite); + Draw.rect(outlineRegion, wx, wy, weaponRotation); + Draw.xscl = 1f; Draw.z(z); } @@ -195,24 +194,37 @@ public class Weapon implements Cloneable{ drawOutline(unit, mount); } - Draw.rect(region, - wx, wy, - region.width * Draw.scl * -Mathf.sign(flipSprite), - region.height * Draw.scl, - weaponRotation); + Draw.xscl = -Mathf.sign(flipSprite); + + Draw.rect(region, wx, wy, weaponRotation); if(heatRegion.found() && mount.heat > 0){ Draw.color(heatColor, mount.heat); Draw.blend(Blending.additive); - Draw.rect(heatRegion, - wx, wy, - heatRegion.width * Draw.scl * -Mathf.sign(flipSprite), - heatRegion.height * Draw.scl, - weaponRotation); + Draw.rect(heatRegion, wx, wy, weaponRotation); Draw.blend(); Draw.color(); } + if(parts.size > 0){ + //TODO does it need an outline? + /* + if(outline.found()){ + //draw outline under everything when parts are involved + Draw.z(Layer.turret - 0.01f); + Draw.rect(outline, build.x + tb.recoilOffset.x, build.y + tb.recoilOffset.y, tb.drawrot()); + Draw.z(Layer.turret); + }*/ + + var params = WeaponPart.params.set(0f, Mathf.clamp(mount.reload / reload), mount.heat, wx, wy, weaponRotation + 90); + + for(var part : parts){ + part.draw(params); + } + } + + Draw.xscl = 1f; + Draw.z(z); } @@ -445,6 +457,12 @@ public class Weapon implements Cloneable{ region = Core.atlas.find(name); heatRegion = Core.atlas.find(name + "-heat"); outlineRegion = Core.atlas.find(name + "-outline"); + + //TODO outlinedRegions + for(var part : parts){ + part.turretShading = false; + part.load(name); + } } } diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index dc8d483119..952a4c7613 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -1,11 +1,11 @@ package mindustry.world.draw; import arc.*; -import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.struct.*; import arc.util.*; +import mindustry.entities.part.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.type.*; @@ -17,7 +17,7 @@ import mindustry.world.blocks.defense.turrets.Turret.*; public class DrawTurret extends DrawBlock{ protected static final Rand rand = new Rand(); - public Seq parts = new Seq<>(); + public Seq parts = new Seq<>(); public String basePrefix = ""; /** Overrides the liquid to draw in the liquid region. */ public @Nullable Liquid liquidDraw; @@ -59,13 +59,16 @@ public class DrawTurret extends DrawBlock{ if(parts.size > 0){ if(outline.found()){ + //draw outline under everything when parts are involved Draw.z(Layer.turret - 0.01f); Draw.rect(outline, build.x + tb.recoilOffset.x, build.y + tb.recoilOffset.y, tb.drawrot()); Draw.z(Layer.turret); } + var params = WeaponPart.params.set(build.warmup(), tb.progress(), tb.heat, tb.x + tb.recoilOffset.x, tb.y + tb.recoilOffset.y, tb.rotation); + for(var part : parts){ - part.draw(tb); + part.draw(params); } } } @@ -102,7 +105,8 @@ public class DrawTurret extends DrawBlock{ base = Core.atlas.find(block.name + "-base"); for(var part : parts){ - part.load(block); + part.turretShading = true; + part.load(block.name); } //TODO test this for mods, e.g. exotic @@ -116,127 +120,4 @@ public class DrawTurret extends DrawBlock{ TextureRegion showTop = preview.found() ? preview : block.region; return top.found() ? new TextureRegion[]{base, showTop, top} : new TextureRegion[]{base, showTop}; } - - public static class RegionPart extends TurretPart{ - public String suffix = ""; - public TextureRegion heat; - public TextureRegion[] regions; - public TextureRegion[] outlines; - - /** If true, turret reload is used as the measure of progress. Otherwise, warmup is used. */ - public boolean useReload = true; - /** If true, parts are mirrored across the turret. Requires -1 and -2 regions. */ - public boolean mirror = true; - /** If true, an outline is drawn under the part. */ - public boolean outline = true; - /** If true, the layer is overridden to be under the turret itself. */ - public boolean under = false; - /** If true, the base + outline regions are drawn. Set to false for heat-only regions. */ - public boolean drawRegion = true; - /** If true, progress is inverted. */ - public boolean invert = false; - public boolean useProgressHeat = false; - public Interp interp = Interp.linear; - public float layer = -1; - public float outlineLayerOffset = -0.01f; - public float rotation, rotMove; - public float x, y, moveX, moveY; - public float oscMag = 0f, oscScl = 7f; - public boolean oscAbs = false; - public Color heatColor = Pal.turretHeat.cpy(); - - public RegionPart(String region){ - this.suffix = region; - } - - public RegionPart(){ - } - - @Override - public void draw(TurretBuild build){ - float z = Draw.z(); - if(layer > 0){ - Draw.z(layer); - } - float prevZ = layer > 0 ? layer : z; - - float progress = useReload ? 1f - build.progress() : build.warmup(); - - if(oscMag > 0) progress += oscAbs ? Mathf.absin(oscScl, oscMag) : Mathf.sin(oscScl, oscMag); - if(invert) progress = 1f - progress; - - progress = interp.apply(progress); - - for(int i = 0; i < regions.length; i++){ - //can be null if drawRegion == false - var region = regions[i]; - float sign = i == 1 ? -1 : 1; - Tmp.v1.set((x + moveX * progress) * sign, y + moveY * progress).rotate((build.rotation - 90)); - - float - rx = build.x + Tmp.v1.x + build.recoilOffset.x, - ry = build.y + Tmp.v1.y + build.recoilOffset.y, - rot = i * sign + rotMove * progress * sign + build.rotation - 90; - - Draw.xscl = i == 0 ? 1 : -1; - - if(outline && drawRegion){ - Draw.z(prevZ + outlineLayerOffset); - Draw.rect(outlines[i], rx, ry, rot); - Draw.z(prevZ); - } - - if(drawRegion && region.found()){ - Draw.rect(region, rx, ry, rot); - } - - if(heat.found()){ - Drawf.additive(heat, heatColor.write(Tmp.c1).a((useProgressHeat ? build.warmup() : build.heat) * heatColor.a), rx, ry, rot, Layer.turretHeat); - } - - Draw.xscl = 1f; - } - - Draw.z(z); - } - - @Override - public void load(Block block){ - if(under) layer = Layer.turret - 0.0001f; - - if(drawRegion){ - if(mirror){ - regions = new TextureRegion[]{ - Core.atlas.find(block.name + suffix + "1"), - Core.atlas.find(block.name + suffix + "2") - }; - - outlines = new TextureRegion[]{ - Core.atlas.find(block.name + suffix + "1-outline"), - Core.atlas.find(block.name + suffix + "2-outline") - }; - }else{ - regions = new TextureRegion[]{Core.atlas.find(block.name + suffix)}; - outlines = new TextureRegion[]{Core.atlas.find(block.name + suffix + "-outline")}; - } - }else{ - regions = new TextureRegion[1]; - } - - heat = Core.atlas.find(block.name + suffix + "-heat"); - } - - @Override - public void getOutlines(Seq out){ - if(outline && drawRegion){ - out.addAll(regions); - } - } - } - - public static abstract class TurretPart{ - public abstract void draw(TurretBuild build); - public abstract void load(Block block); - public void getOutlines(Seq out){} - } } diff --git a/gradle.properties b/gradle.properties index be0907b8dd..8d36b34f7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=ed731441e1 +archash=680252597e diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index 77d182c8c4..c974cdc12d 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -329,11 +329,9 @@ public class Generators{ } } - if(toOutline != null){ - for(TextureRegion region : toOutline){ - Pixmap pix = get(region).outline(block.outlineColor, block.outlineRadius); - save(pix, ((GenRegion)region).name + "-outline"); - } + for(TextureRegion region : toOutline){ + Pixmap pix = get(region).outline(block.outlineColor, block.outlineRadius); + save(pix, ((GenRegion)region).name + "-outline"); } if(regions.length == 0){ @@ -502,6 +500,14 @@ public class Generators{ } }; + Seq toOutline = new Seq<>(); + type.getRegionsToOutline(toOutline); + + for(TextureRegion region : toOutline){ + Pixmap pix = get(region).outline(type.outlineColor, type.outlineRadius); + save(pix, ((GenRegion)region).name + "-outline"); + } + Seq weapons = type.weapons; weapons.each(Weapon::load); weapons.removeAll(w -> !w.region.found());