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 zcmV;U23+}?4)G0;F*K`5L_t(|obBCflAJaa22eU%NjBl^zs8$z*5dr|kYEOo1fr3y z&iQ3mbxp(7{dlN(OcRlDERlc*)n((Yj$?ua`Pirp9Rsva+`& z*F5#8aUR83NF8Enp6k>&pF(`fJ@?T(=c#cSMVRuNW~O<{sd2eKo?d{b{rLFMG;dH^ zx6*NmXy`^;Ho%|Xz9l~|nAhd(LI3&w{l9n>1GMKYb z13KhNA00An1ynHW+Y0DbFlQqMbhs53%ytOqv7uI0Fxw-b`-YjVEe$5mIU0|VW^soI zr(pI+KnFOiy&6o1w)ZLhS!FHyA?^@+&MmonOt&=MBe$+2AK45U&e8!F(7HTx?K8}Zlx{iq0xFo#*$ZfHFlSK$8se}v70j){+8S`deAZU| z&)nY`^b+W2WM{&Dwu6~f4yF>oIPgm;Y$gz za$8%_qk&s~KKcOnEO(qr$DhVUIWLLMH~|0v000000000000000008Xr5Tp&uhZ}n` z-+k2in1ZZqJ#}2;)ThpAim`C?z7CC3k2>d3h)+4MLf1IgsdGL>nDQECrg6?w=Q5#R z$B?6>VR#?o5;&Yce?C5brk)nA0os-tpPVu7S;#|&^?+@?H{(n&9co=ytL`~t+`Diq zw6`T)4xV5>>uUXT#yEmdE0goSM!{^u*>Q;ePR^w;=bSm`9)j79Gj+`wzewkxAsR1d zK;}1Cmk`YRo!MY+y;yfG!X7ltp7V%cw(Crt&x~h}!iQ5Zf7>UZ+d_v^F#92(Uv=Mz zd*_>i*{7Q4puL}WcD?7UIWs4iZKyd8z0cfs8&1KDOF)0=GMs`LpMZ9F&RO#}O~Gtm z?m1}0-#)uqSiv0Ar~&O}K?QScBL=jKg%nJtX}o}TIU%$rm}AHtzbF?cbRSN^9Lq=n z?K+%-Ii^tpf7)$01#@g81hmU=3MSJOKcLMw?|Pk`m&gmWsJ zh!D(kO6q1}=$GNcDVXmgpk;;*r(nLHfaV)EoPzlr0nIaHI0f^00-82lI0dsE0(xw? zaOM)s_fY43!nr}iyq9`!6V4Uabv{GgzY@*`e+}|1_5Yo4e$p6iFb@A4vJmT;KMm0y zV*~&I001?NcpW6;x~t!-PfvSU4I{a;->d#HFRNiBclUd>KXkNf7f_;kN55D3BRR+1 z0!kF`>i5gn*5;lJdu<*OP%w2%_xumHT6JVZ{+n>45*}WRj)4Sf%VE*={ ze;YT~E(_!4Tiz|zei2_eBG ziYxtC^NOJ=;S@}wX(6Ch!kK$@{+eLYva|hpHVBc7^=Uj8X1wE%)iM5(@R;<>d)3nG|Aw%6aa9-v5<&xsmBU?Z?N5 zMRS9_^pV`sM}-!i+

xR0s!i-0t%Z52yyEjbQS(}fM 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 V^(x3Bz-(2Bo|chjwYo#t{{Yk2)Gh!3 literal 25023 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 diff --git a/core/assets-raw/sprites/units/conquer.aseprite b/core/assets-raw/sprites/units/conquer.aseprite index 277e406fa93b7fe2b3016b6acbbcf94ab342d768..e1a86d06503499e562449e3114fe7e224d8d4fb4 100644 GIT binary patch delta 1412 zcmYL}e^ioJ7{_1Hww<-s++1Y|^Hd(EW=*l$bot17gW#A7&r{zo$M9kn--`9w}o=)rj^L)O~_uPBWeeQFw zE^qP}YSLGTD%qCe3jpxSRv-%ifUUxE<}nNc9!T=la3S~_z`A%QBa7*Su!pbPD-+ms zJ%H1BSw$~AcM;ERk0{M;*Bhbr?f|gG7ig1ht8;gAYm4>V=Eb*rZ01nFn*afDpt z0@MP9H!{Ak&q%sw^>feITb4n}`69eAse<{{v%tix^!=abLI$Pg8Po{- z1Yu`ECsYqd28GUoyoa~bOh`gAiNugu5WV!EMTzKWcCNuxy#hanoRfk)JwMbmKvif- z|750X({bHImCU5H*e_Zad-viKrEEW)z!BC<*?>pm!6J&+QVe-kulv{$b_iWgB-w{3$WHdq55?G7iup^znQlLOv9nK0YegZqV;)DYzvsrp+tsINoSRfWe5S zHwdCc{gt}!`4XFOWqCguL|6iM!_&0_n`jf)!RkZ4Mx_ z#)}mY{qH}~n5HsJ?!Is`RtL;LxboH#Z2#G@Hg#8j? zh@BHFhqLkWKWH-@w(%0>pOQ{(gzeB%qaLRa9%f5Fm`;C8!z}zVJ_c=c?QlkyU@8Rt z`32ic=HvK8>~oko$O^lH-MDJ)f~nXMT@T+8wgWxXOeBx7YbpivRa5aGFS|~5IBPY5 zSLJP{2Xhoch^@A$pY%0}9bO`+znP#D3J9;UW+{IFb zS^T>ZG_Hcc{+do4 zGiCX3-~brejTtJ5A*mf+yuP2{n`J?Iy#*ir&|OLJpS`A1<&br*s%C<}{i;fpOeV5< z9SOXX^Y1Yjm6E+{sdFu(59YilX9S~@Ge=UKC1sf)?cAI?L^3ArOkBQqJu>fQkE@=5 zen9+h2#}Au1>8BCxzsgpOp2*3L@~7Du{u&8;IkQzn z)v8_TnVTwoZ+a9{A;2ha7~{b*-$1oYjxB3B9y~uSVPYo3=VGZIe)8;%Dx;Z6c6{<N2p5|qh*6;4?V crQRySnhTY8bmq%06!KGU@pW$t2y8|D2iOPL_5c6? delta 7293 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 AssI20 diff --git a/core/assets-raw/sprites/units/conquer.png b/core/assets-raw/sprites/units/conquer.png index aa349920a55b8b4062be062424d5c4f72a262d61..d7f4c333eb106f937fce20c3a0d8a407f59ee9b0 100644 GIT binary patch literal 7228 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 literal 6864 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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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 XJyTZGVh*gk7N8)bB3&bC8ub4FNbI^Y literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/weapons/conquer-weapon.png b/core/assets-raw/sprites/units/weapons/conquer-weapon.png index 7a8ecca09b6d078585cd8eebc05fb9eaaa71c885..32aad4fecdeb0f68aedf4772eb4077340c750acf 100644 GIT binary patch literal 4291 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 hxBs5%|Hrz 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());