From 93b625bab77d6917a0894362d846c003340657f6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 19 Dec 2021 12:38:52 -0500 Subject: [PATCH] decide on a head size --- .../blocks/units/tank-assembler-top.png | Bin 0 -> 2564 bytes .../sprites/blocks/units/tank-assembler.png | Bin 3979 -> 1023 bytes core/src/mindustry/graphics/Drawf.java | 8 ++++-- .../world/blocks/units/UnitAssembler.java | 27 ++++++++++++++---- .../blocks/units/UnitAssemblerModule.java | 3 +- 5 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/units/tank-assembler-top.png diff --git a/core/assets-raw/sprites/blocks/units/tank-assembler-top.png b/core/assets-raw/sprites/blocks/units/tank-assembler-top.png new file mode 100644 index 0000000000000000000000000000000000000000..93baebe80ac29680e1effa0092f342adc77002d1 GIT binary patch literal 2564 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 literal 3979 zcmV;64|MQ}P)005u}1^@s6i_d2*00001b5ch_0Itp) z=>Px^MM*?KRCt{2ox5&aM-qmMgaNHnVgngqpkU}gD>Cu}2o4+=27|#q1K~uL;V1AD z2r!%oj5lUL7#j$Sg&sf=MNS}1pn!lB5KNbfyn#`~;bC8@s{g*7IUgXHo?G`+f76$9 z`m*)%_+NiMe6&loIsE+E^uE&vPm851O)JM|BGN*pi(-4VTGOWwm$maTv!QGg5zP|L z)MA_em?exOY3{5|;-<1a{GVCEI3dAi`Sfg$AJ{YrEuC?fXcqZe83@$m3)h3I)tZQi zS{NP2u>4rY-|O_jQ?)>cpI_e!gp$wn!~aVEmX^3z12R3-gjW|gw7fo7zt8o(tTkax z`Igt`baio~eqT#?1te-)!eQWRN~i@XAJemh&L((Bj^@}Ia79z%3i$H+oKAM0sPlnn zj-}*~kGZP8m*m3 zKq8EUvG>O$lmxg%2}{Vw#9|bSacK#+e){>>KQ(W7{CHuisx@Ei=&SX;$F%(%ZFB5m zd3~;G)?8d&+`#gp!If`mD??PSIga)L$5{G=+F#Z2$Hg59L-L)ydFOn5LGS2v_u$^+ zj~~kmfz!51Xc-)Ee1{xfp3#}-^#|X4?M-`_Z;gCJ?*4HO#7*!JO>=Cm(vLqb=<4Fe zBp-8ldB50P1sua75>mbpp%`%dwDK_}nq!lIL^26ezd)$zipduuw}dG9q=aIT+WhC1 z&@3QPSVC0BT>(sykI5xrY55peOb~rfqP!BS`+#FyeL{4GPj;T%cES;!!jkey($vO(3{paffT{9@o^w4`N>3$@VaML`-V%g8QNBS9>!O@f? z6bXosZ}@!d^VaX*-uV|JhkQ(mgxdF_CDg_-Mh*#KcS4BdlTCRU;G`laajZMhXPguTCW2=e6*{QN!y=6$yee%V>Ef!#w8_x z$bsb6fBv}?-RF_cG1E51$G`oqdcBrZ0aHb)oqh~${-pA`RyMj2*MQQ=pqiR6w|qot z1&Ap8+UXN+2B}PBs0USmYy07zJDQU}=He*T`B=KL;r;BwdE_CEWVXs;IjJi@kl*C^y$# zik$c^KBrbhCIN?2)W;c+$anPonI%~$!veR;=lZ);`e-EIVJsnHlT7h-K*qN|;$-JZ zbJqZK;VY~bM6zJH7U-+_v>Q38YQWIq97`v(g_=-HsIXeOy`{mD=g=TjTN8=}49UmV zTei0CNkU0s^(3Jsue=g5wkwwuk$@8Un5iDtqA9GNB-Aio28)m|DxgL_Mk8Sl{XkPQ z)q#YXKC5pHcB+KIL5M{@4L`hWzti6OWC8?;b;nj$yn93=M>;MxK|W^FB@A652{ys# zJ?5Amp+QL~bw+$0Fjc}H z zrX(LT#rb?8q!L=!LYvnG%OsQ)h-IyBO;sh`ynC4RuEengvKR89Ep_p)n;F6Nq0 zPY?1Dc_yS&IZ9DGhOq@|(LqQp32O%~M2mM6Lez?-WObzILbOCe zt>=8Erxl#;Ml`82Po1tPXc`G|m<6AcM1+Z<2h8eW!3*`=zr z&AdzHCv|79F`{S3C+B-CpN-m|kf^+TM8?SoXbDlj z;v9vZ@|mUbgOIR>d_)P;u~Lt*X9>|w2(r)-pH(V9DH5h$=}6frWBYXXfcT#ll!O{e z4Fq}=Ic2*wD;D`qA3VMNcc%udA)$s+Q@MI>%1e&It?~`I*97NWfRaL~fxr|7Gp$|< zaxG+Y_5oXya7wjD&$W08zEzaoK}ahSw$`63#gx8xXbEriWtlUZjcPhp4K{6yG-gWQ zTRk1C75SJ_Tcp)Ksw?HS$oJ+zJR!9;`Iu5$q}4vGu-1D@5S@~5kxz1)21U=c$CPSu z#&SH@SVHw|m?1IwVizh;A3QZ3(-0fop$eh3P0Dk8@5SDJwBkuE=Md&maB9uRLv!S8 zj@Wa^bV`1Ph#pW|ot<29)#@5GSR#a{I_d z?|VceVk=o2F5SYJNGM<_`IufMoVt7rQo^W!IVUBA_KE3D!cCD+gG9pMCgru{V-|b+ z%@%B{`5IIEhkW|rscmZx%MMvmG&^L~4q(sJh@ER~xOzHPEAlb3gnDYmOe5hJl4iE{ z-heahv0ANzUVQp+dCv>+l>8wr$k$7Mt0hXr46%D|P(YM?$G`nNZKtKxdQqcEoR z?Rm$v81L%KGUrn#%hFoB&F2M6rraD0KdXg6Xz*>3*30+M=2Nm($a>q>R0B%qd;Rfa zKQ)7tUiXN$^2?X9>7v%vlxhK&*XOF&Pf5bw_lVXam5(By4Syqugla zW3-Nl1+>b?^eo|&wn&p;m5MmITT!$8CnCJvK<5S!^`%so2AxZJzN_^$Y*sWx-QuI!O~Sx zmc3z0W0kN6`J~^?dX7k}qKftbLo4EaE8#WkLXVz56Th|=Q=P}C`C<9)bfmVDqEWC$ zLXCVqG0$VXFCn6fCcX|Rk9y3_ z(XqAPZyp8rDq)NAF}}RjSjev_vy?%nd4o!#_+ceOTnCrr=8qruAtOZVY2cPw!ea>$ z10gM?eXoX4ETr)qzFrEVLV;X}MoH*;&h=Oi@*zJ% zf-5G{cuJldgKEuScS2Gnlm@1he8_%lsXp*9Hi#d(4`f#gdMnNEiJ7 zYjsnr$=hnRhJKf%L5K_Oz(mUO`kbz=F}reE^N=Gg^uX-u;)a%VE?Ow0{q9`B@P83` zhYLuglTgBNkGZRh8<>O^`9ixx5QVp_@Z|v|;jq8Cyp~BQW!$=z*IDSLRY}FeJe!& zXL)^Y5^2c6H($f@qQRAK&6;lOG<|KKu$X{EG6_S!R;h%R0(S-6di>NF*Y2X0L7G&; z(2qtUVM^CYD`C;oGGkvX)>KGpqt@i}eU_z=CEqO;qgaen`|aB1xcG6czAq^4r-TCB zqI{vxL`x{`F8E@Nx^khBuxJw;LR;wL=D20~hU99FwS86V@v0gm&2jYutF44K$&^q- zK3^KCHDT&NDHoEOuv-C%{tA3e`A&BaOf?Bo!dB&DViIP#6;~2Ozr`xw@NeyB9A2K? zlh^WHu&Z?Q5V~#Gbq$ChRld+;InwSGUro620%{3~R-$9yGcE~d0ToCDn plans = new Seq<>(4); @@ -137,6 +138,7 @@ public class UnitAssembler extends PayloadBlock{ AssemblerUnitPlan(){} } + /** hbgwerjhbagjegwg */ public static class YeetData{ public Vec2 target; public Block block; @@ -153,11 +155,13 @@ public class UnitAssembler extends PayloadBlock{ public Seq units = new Seq<>(); public Seq modules = new Seq<>(); public BlockSeq blocks = new BlockSeq(); - public float progress, warmup; + public float progress, warmup, droneWarmup; public float invalidWarmup = 0f; public int currentTier = 0; public boolean wasOccupied = false; + public float droneProgress, totalDroneProgress; + public Vec2 getUnitSpawn(){ float len = tilesize * (areaSize + size)/2f; float unitX = x + Geometry.d4x(rotation) * len, unitY = y + Geometry.d4y(rotation) * len; @@ -275,8 +279,10 @@ public class UnitAssembler extends PayloadBlock{ units.removeAll(u -> !u.isAdded() || u.dead || !(u.controller() instanceof AssemblerAI)); - //TODO build up units, don't spawn immediately in batches - if(efficiency() > 0 && units.size < dronesCreated){ + droneWarmup = Mathf.lerpDelta(droneWarmup, units.size < dronesCreated ? efficiency() : 0f, 0.1f); + totalDroneProgress += droneWarmup * Time.delta; + + if(units.size < dronesCreated && (droneProgress += edelta() / droneConstructTime) >= 1f){ var unit = droneType.create(team); if(unit instanceof BuildingTetherc bt){ bt.building(this); @@ -287,6 +293,7 @@ public class UnitAssembler extends PayloadBlock{ Fx.spawn.at(unit); units.add(unit); + droneProgress = 0f; } //TODO units should pick up and move payloads into position @@ -359,8 +366,15 @@ public class UnitAssembler extends PayloadBlock{ Draw.z(Layer.blockOver + 0.1f); - //TODO top? - //Draw.rect(topRegion, x, y); + Draw.rect(topRegion, x, y); + + //draw drone construction + if(droneWarmup > 0){ + //TODO draw it - better animation? + Draw.draw(Layer.blockOver + 0.2f, () -> { + Drawf.construct(this, droneType.fullIcon, Pal.accent, 0f, droneProgress, droneWarmup, totalDroneProgress, 14f); + }); + } Vec2 spawn = getUnitSpawn(); @@ -437,7 +451,8 @@ public class UnitAssembler extends PayloadBlock{ @Override public boolean acceptPayload(Building source, Payload payload){ var plan = plan(); - return this.payload == null && payload instanceof BuildPayload bp && plan.requirements.contains(b -> b.block == bp.block() && blocks.get(bp.block()) < b.amount); + return (this.payload == null || source instanceof UnitAssemblerModuleBuild) && + payload instanceof BuildPayload bp && plan.requirements.contains(b -> b.block == bp.block() && blocks.get(bp.block()) < b.amount); } @Override diff --git a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java index 201e4514a6..0ec38f6054 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java +++ b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java @@ -20,6 +20,7 @@ public class UnitAssemblerModule extends PayloadBlock{ super(name); rotate = true; rotateDraw = false; + acceptsPayload = true; } @Override @@ -81,7 +82,7 @@ public class UnitAssemblerModule extends PayloadBlock{ @Override public boolean acceptPayload(Building source, Payload payload){ - return link != null && this.payload == null && link.acceptPayload(source, payload); + return link != null && this.payload == null && link.acceptPayload(this, payload); } @Override