From d8ee862125d29daad3b9d895c074df84d7c51f62 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 23 May 2020 11:53:49 -0400 Subject: [PATCH] Functional payload factories --- .../blocks/units/crawler-factory-top.png | Bin 793 -> 0 bytes .../sprites/blocks/units/crawler-factory.png | Bin 430 -> 0 bytes .../blocks/units/draug-factory-top.png | Bin 801 -> 0 bytes .../sprites/blocks/units/draug-factory.png | Bin 430 -> 0 bytes .../sprites/blocks/units/factory-out.png | Bin 641 -> 651 bytes .../sprites/blocks/units/fortress-factory.png | Bin 955 -> 0 bytes .../sprites/blocks/units/ghoul-factory.png | Bin 956 -> 0 bytes .../blocks/units/phantom-factory-top.png | Bin 880 -> 0 bytes .../sprites/blocks/units/phantom-factory.png | Bin 430 -> 0 bytes .../blocks/units/spirit-factory-top.png | Bin 883 -> 0 bytes .../sprites/blocks/units/spirit-factory.png | Bin 430 -> 0 bytes .../sprites/blocks/units/titan-factory.png | Bin 953 -> 0 bytes .../blocks/units/wraith-factory-top.png | Bin 882 -> 0 bytes .../sprites/blocks/units/wraith-factory.png | Bin 430 -> 0 bytes core/src/mindustry/content/UnitTypes.java | 6 +- core/src/mindustry/entities/comp/PosComp.java | 4 + .../src/mindustry/entities/comp/TileComp.java | 30 ++++++- .../world/blocks/units/UnitFactory.java | 76 +++++++++++------- 18 files changed, 83 insertions(+), 33 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/units/crawler-factory-top.png delete mode 100644 core/assets-raw/sprites/blocks/units/crawler-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/draug-factory-top.png delete mode 100644 core/assets-raw/sprites/blocks/units/draug-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/fortress-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/ghoul-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/phantom-factory-top.png delete mode 100644 core/assets-raw/sprites/blocks/units/phantom-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/spirit-factory-top.png delete mode 100644 core/assets-raw/sprites/blocks/units/spirit-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/titan-factory.png delete mode 100644 core/assets-raw/sprites/blocks/units/wraith-factory-top.png delete mode 100644 core/assets-raw/sprites/blocks/units/wraith-factory.png diff --git a/core/assets-raw/sprites/blocks/units/crawler-factory-top.png b/core/assets-raw/sprites/blocks/units/crawler-factory-top.png deleted file mode 100644 index e517f1b7ea8a8474e68d324eae72870a371b1158..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 793 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE$UaUi??p8>)(=i|J|#va&qVIdvVHDxHJj<3vUQ&65prl$XT!4F!8`Q zCb4}gjg`MR{x~vdHA-@?`B2SyW_SOgbXEl+p@l2|qN%cgS;p9P)%?CFr&7x|jqZ8d?Bi>CP0-08121s&j{4kN}frE!6*X9p#jGF=?wn`*Dv}JnIt$4I( zMr(Z4nUK>DWq4)_BtFn(IwY)Q$+5NNZH{5A7f+?XtHYd$mDWy9+xzubJ#f`btWYZBzthD(qfI+&IqG>eH3& zkKz)q3hnsXk`=1hVD)ct+x_l@2gSL8u02=Zewui)KkU@nsa?TsXKykKUlW`uc;HaJ z>Wb@p1#TRj2bCY{3i&*jjrj3bX4Si2^TH37+-q!gXPF|jHmo9~>FEXcq=(T=Ue`Yy zTKv$U_Qhf5^Bf5(71Iu`X?fBJN=_n`3~q<`Cwa|ih`)U!hJk^B!PC{xWt~$(696r< BY3~34 diff --git a/core/assets-raw/sprites/blocks/units/crawler-factory.png b/core/assets-raw/sprites/blocks/units/crawler-factory.png deleted file mode 100644 index c421ec3d416e78d76b3da5851c247749d52f8458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE~)y=};M$bg6S z!W@3Lca0WI#~sedG|cRr-RQ6?Wa_bvb0^&TD8EPaMSYO>W2=`%d-pEeWk2ts)>%d+ zr9TWV&K}1v{}h#c$UVVXvBTFDIvCfqU03R0SRsG! zEq|p+~MZ}3?OiT$D!Y}HL@XYwbx_@+uvNz z7`$}XE@a$MyH}BM$=S0D8MesYQ)I}xePO`Idb$Lir`7K>}lhO zN&=a~a6wYx&*{KDa{Xosf^{xz&Ov7ki?biDOgxv?JSj|YMdG=%#hbwNvcs3e1XmRQ zI=y3$DvR%rEC&ABD_5EORJc9J`JTvF;W8oTM-pR&(}kR$$&5WAmMsPhmMsAc*&GiU arg7xYYn!d{+hA)v$VyLFKbLh*2~7Z5AFXBp diff --git a/core/assets-raw/sprites/blocks/units/draug-factory-top.png b/core/assets-raw/sprites/blocks/units/draug-factory-top.png deleted file mode 100644 index 20dccd2958219a16af80d74bef5b8921be9974f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE!BPcx90KK1f0E5IW??u;zy~15ZnAJmcqY5ACuUG+JagHq87T zvR{{h#ffpg$H#DnlKZv{#vH8`i;iU1zjpFvRFrKf_Q||Xd=8H5@{1X_1Xf*% zVE8&i;$u031IOF`i}4J~a*P+Gg|+@M9$<0W$e`eO!Kab2!KqS;;gF<`H-A&vzu>Y^ z_5}fLehmSy!kkY$Viw?-RqLC1^t!+%OGnN_mo76;DAiBU+sA&eN;k~JLZi*jgT>6i zzxoKHT#Zzts6+dsV8;p5Jl6i;W0}v8E-7td=V-V!X3?MAv*G{dpHi1_inwKJm(w1Z zq0Dj4F-$gnK@EfEKSrl(Q`@{cCOpa)Xqpy%OXs4bqA&LsnX+@AZXTKaTzY=s9@Q32 z22IaR!8Wss4Hy+1PjEHp^`2$uQAlA~u!>iSp-NyAV}Q7OJVOt|9J3v{^LFnHVTkzX z&z>O068TY%;ZBpnCZ0`?_A<=SZ(bpobhMhuz}TrrH0|hmCXelsNk`W+cx;!pk=Blz zZOL_$@B2N0Ndk#SvKd-bT$Y>{@$6jqD3U=@(=cV;xk-zJTCQokh{wAy_-vSTq+j97 zoJW0+PRlk-&Cu=4S6tIouDx%KUZgOCxAn0JkGhZU((SzN#G$<}Vy3vK4R>Pt$EDm$ z&6l%sv=?_C6inK@`gYryuMqCMq}nwYuQSz`(%Z>FVdQ&MBb@ E0OY|~)y=};M$bg6S z!W@3Lca0WI#~sedG|cRr-RQ6?Wa_bvb0^&TD8EPaMSYO>W2=`%d-pEeWk2ts)>%d+ zr9TWV&K}1v{}h#c$UVVXvBTFDIvCfqU03R0SRsG! zEq|p+~MZ}3?OiT$D!Y}HL@XYwbx_@+uvNz z7`$}XE@a$MyH}BM$=S0D8MesYQ)I}xePO`Idb$Lir`7K>}lhO zN&=a~a6wYx&*{KDa{Xosf^{xz&Ov7ki?biDOgxv?JSj|YMdG=%#hbwNvcs3e1XmRQ zI=y3$DvR%rEC&ABD_5EORJc9J`JTvF;W8oTM-pR&(}kR$$&5WAmMsPhmMsAc*&GiU arg7xYYn!d{+hA)v$VyLFKbLh*2~7Z5AFXBp diff --git a/core/assets-raw/sprites/blocks/units/factory-out.png b/core/assets-raw/sprites/blocks/units/factory-out.png index d7eccee9c4575cfaef9d63fe10cf13757538aaa6..4553a690ddad34a6adb0657d364bbb637eb2a312 100644 GIT binary patch delta 613 zcmZowIQ2K|kn-N)9qF32_D@BU zy7Ac?Ly_t{j$AK6><%O+lhlaY_-p*P2kxvxK{vb^z< z+}F}@SAsj<>42V3tG;4F@v}qI1vY4UgOv2l`k=~^nFy z3{pE;8^YQc7tBm&$ViuFkg{T5aNUsS0)r3(1B1*@b~)aF4b|TJ_AxLpFnGH9xvX delta 603 zcmeBXZDgHbSa0p=;uumf=j~iyzrzLsZuSE1jjG~}s^3>swa76RnocX2zNsr@&7TS( zYvalLwy(BYwdnoTG9mSCEDRv<{m9Fjopu%SNA?z3#jl&x!oc44L6zmrx!fN@Ol3=X z;++oU^|b0MCWtRPG+p4r+?^j(SxQnhYd9J2uHcM!auCm|KRjLFf{gbMA*NYLyzx#B z#@AZ@|Nh+DAhw1#ei3U zgW4O|bUbJLmSgOl!By$W$0QZh7JJ!Nae<-pi>=AbOjZHX`&t;v1s?D)&2eln<|tre zJg0C#lEq^3x3UsT!TL{MD?KfDPWiN8dD_BhDiKSke)SIDabAD@e>?e4aTo50EGVtI z5EajMXOZ31hFJ$Td3q=x5DHP_)I8Q;>M!T2bx&CzU?V^(2%C{Q3J#jv`C=b?9J{V|5qksecw z=gj(L!n9=90;5)aRbhp*?9+5>G%rd7TuOFY_Wd_w@)FSt%>0ZmcP&`l$dHcVmy!dY zZg4S48Mnl1GcxjOI@{k_+&OV3*KdPFVdQ&MBb@03)sd%K!iX diff --git a/core/assets-raw/sprites/blocks/units/fortress-factory.png b/core/assets-raw/sprites/blocks/units/fortress-factory.png deleted file mode 100644 index 75d2917c9228891ea1f7b9d4d6d3ef331dbca684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 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 diff --git a/core/assets-raw/sprites/blocks/units/phantom-factory.png b/core/assets-raw/sprites/blocks/units/phantom-factory.png deleted file mode 100644 index c421ec3d416e78d76b3da5851c247749d52f8458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE~)y=};M$bg6S z!W@3Lca0WI#~sedG|cRr-RQ6?Wa_bvb0^&TD8EPaMSYO>W2=`%d-pEeWk2ts)>%d+ zr9TWV&K}1v{}h#c$UVVXvBTFDIvCfqU03R0SRsG! zEq|p+~MZ}3?OiT$D!Y}HL@XYwbx_@+uvNz z7`$}XE@a$MyH}BM$=S0D8MesYQ)I}xePO`Idb$Lir`7K>}lhO zN&=a~a6wYx&*{KDa{Xosf^{xz&Ov7ki?biDOgxv?JSj|YMdG=%#hbwNvcs3e1XmRQ zI=y3$DvR%rEC&ABD_5EORJc9J`JTvF;W8oTM-pR&(}kR$$&5WAmMsPhmMsAc*&GiU arg7xYYn!d{+hA)v$VyLFKbLh*2~7Z5AFXBp diff --git a/core/assets-raw/sprites/blocks/units/spirit-factory-top.png b/core/assets-raw/sprites/blocks/units/spirit-factory-top.png deleted file mode 100644 index fe0bf57a173ba329923baa3c0c333713d263bcf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEELn>~)oo(%R)Ih*> zZ$#D+p$ImoDJCT$A|W{)U92pu6V>gH&)ZpU=Qp9_3774oVxj)y$;)kQ?DW^am%qF1 z-`YIZ9d7@#v**X_Cta@V|FZDy_80#ek;lt2?6kHeYfRn$*0;@|?q02BA9jhii;^Lj@Ec z>IWFb*Z4b09yAu}o7JZKVfUoj zEc?w?dK9VHL=^{guM_&C<}j%sj4^uu)<@bp2`UeJm|oenbG`7inBA~#|9_@5?ug3| zwxzCn=BL`w`oEZIi^7RR=^P&1O(#rF97^Y0u5epu6>scM)qC(AX^(`mN$ znR_*YtOf_Yn&drSq;|RI?2F<2;F8U`Z|Z|q|JyYm{UW;K}qqEgP8I|=^55rLmw~oRb^mcVDNPHb6Mw<&;$T;wtraw diff --git a/core/assets-raw/sprites/blocks/units/spirit-factory.png b/core/assets-raw/sprites/blocks/units/spirit-factory.png deleted file mode 100644 index c421ec3d416e78d76b3da5851c247749d52f8458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE~)y=};M$bg6S z!W@3Lca0WI#~sedG|cRr-RQ6?Wa_bvb0^&TD8EPaMSYO>W2=`%d-pEeWk2ts)>%d+ zr9TWV&K}1v{}h#c$UVVXvBTFDIvCfqU03R0SRsG! zEq|p+~MZ}3?OiT$D!Y}HL@XYwbx_@+uvNz z7`$}XE@a$MyH}BM$=S0D8MesYQ)I}xePO`Idb$Lir`7K>}lhO zN&=a~a6wYx&*{KDa{Xosf^{xz&Ov7ki?biDOgxv?JSj|YMdG=%#hbwNvcs3e1XmRQ zI=y3$DvR%rEC&ABD_5EORJc9J`JTvF;W8oTM-pR&(}kR$$&5WAmMsPhmMsAc*&GiU arg7xYYn!d{+hA)v$VyLFKbLh*2~7Z5AFXBp diff --git a/core/assets-raw/sprites/blocks/units/titan-factory.png b/core/assets-raw/sprites/blocks/units/titan-factory.png deleted file mode 100644 index a112348ba153d47f9b0bb8186deef65a9fdce63a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^S>8$4YcLn>~)y=z-^$AE`5 zVV=Hb@DH(>GKx$4CwRVPUg9S@KPOrAREAm9Bqq7Kj@ns?snH@I*M^ID3a<5)*(Kk4cB3fc5e`A|tX_ee%Tk;2TPG~^4L3p=?s{1-UaWZ%5u@0#!1)1N+lx;J{=Kf7Nw;kOt6 zoWR$7f3=IypDuj4%D~N%a#xd4iAgXr zU8{kIv2%qstHYD;g>6;SSU*v%?et}G?z0E8nR8SRe{j0?U^!!iAfu`MM79J~mM0?FS`DHC7mDvZG=KPtA<_Kd z%)A$y8CL9CxVZD>YX3u583p_g9p^8SUduOu$2El2fyebu{p2kdFY&#M2ry+h5^>>X zc%}5(^^SgyQEXbT?rdi0f44OEO0U%34;v0Gzw$ZC?PDg(@bN*amaBt~} zJ<^fAOUmB#K;ML|_3tWUFa21_xNXwUhbJE2+Vatxe?hE_cf)}P)d~U)3@i!^j1|IZ z=3gXtFRT&Zt`T?~;PN1Vh5a!T`(q24w8kH(FJCT04WsGOf+b9_79K%oBXV(^xO$ z+?D4l=-;5!koLNcqaoDDJoAug$Ro3mL)+z;R2rLEn@lQJys3P#raGNtgNRxNOXi0F zO`f$u@^XR?JZmO!Okz;@>=E^B-kr-eGoK1NE5z_JSj~L?i6N?G6@y;9BS%XY!>!pH zw4F>De9cSz(^orf(0h?G@7`0vLxwYpvs$h)o)dVtIdi$|1vY!-Ly>wvr*N!zknWU` zew?`>O!J4Nz^%oLnJ;Lu+6yiG+Q;ai+>rP|ol%Ohr|Ey;AJ$%*O*i}g+H7WEU|{fc L^>bP0l+XkKRNS1& diff --git a/core/assets-raw/sprites/blocks/units/wraith-factory-top.png b/core/assets-raw/sprites/blocks/units/wraith-factory-top.png deleted file mode 100644 index adf5e632856343e7223731a51668b6784525f0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 882 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE~)oo(%R)Ih*> zZxJ)AzUSrS@(2AN}9Gw>m;ewc>#w=fn@rS-$l>mxGGPhc2Opd;P8QTo+VC9)03t{1&&RLG+43 z#$JB%F$_Mw63C+Qo7fMHQ8R=@!m5y z-%ow8tBR?wVY?T{PL3ZXj0Y}sx2g*Z20A&omGj6_8n6EN>{FvLa`J73JV@u0^ zj~OO+FP#*M5!_X|`+p|Gn#{>Sd%_(ev}CqQ zBt5icIwbBacsfz+UX-O*G~f4x8%-R{`GOPT1YX*DZc}MHw3%tylp_-gSBbi+a^|ix zsQ&CKa)3pfvrc8#w$(=xe%5u*@c|^I=h4#ZaTJpe`DQq&hU_X>c!;;p8T1_@ODE<3&X3=@=WvMzHVi@ z@c2`ku=ZUUmS2C`Tb5t{8+FoG`{+btvHw5&O_hw9B7Q_Q8P{I3|DX8qwWf;jJ*9)6 ze)=aqylrXn>*{wN*2B;3cQgbFDITm=-C)f0^C!Qa!>L6k75M@xmmjuH4Y2vp!{FBR q+=EYhVa0<;#*UT_=E$Cw{5xk196xUKImW=iz~JfX=d#Wzp$Pyo2ZId& diff --git a/core/assets-raw/sprites/blocks/units/wraith-factory.png b/core/assets-raw/sprites/blocks/units/wraith-factory.png deleted file mode 100644 index c421ec3d416e78d76b3da5851c247749d52f8458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE~)y=};M$bg6S z!W@3Lca0WI#~sedG|cRr-RQ6?Wa_bvb0^&TD8EPaMSYO>W2=`%d-pEeWk2ts)>%d+ zr9TWV&K}1v{}h#c$UVVXvBTFDIvCfqU03R0SRsG! zEq|p+~MZ}3?OiT$D!Y}HL@XYwbx_@+uvNz z7`$}XE@a$MyH}BM$=S0D8MesYQ)I}xePO`Idb$Lir`7K>}lhO zN&=a~a6wYx&*{KDa{Xosf^{xz&Ov7ki?biDOgxv?JSj|YMdG=%#hbwNvcs3e1XmRQ zI=y3$DvR%rEC&ABD_5EORJc9J`JTvF;W8oTM-pR&(}kR$$&5WAmMsPhmMsAc*&GiU arg7xYYn!d{+hA)v$VyLFKbLh*2~7Z5AFXBp diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 2ca4ee0c87..4d2e1a2614 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -258,15 +258,15 @@ public class UnitTypes implements ContentList{ alpha = new UnitType("alpha"){{ flying = true; mineSpeed = 2f; + buildSpeed = 0.5f; drag = 0.05f; mass = 2f; speed = 2.4f; rotateSpeed = 15f; accel = 0.1f; range = 70f; - itemCapacity = 70; + itemCapacity = 30; health = 400; - buildSpeed = 0.85f; engineOffset = 6f; hitsize = 8f; @@ -292,7 +292,7 @@ public class UnitTypes implements ContentList{ range = 70f; itemCapacity = 70; health = 400; - buildSpeed = 0.4f; + buildSpeed = 0.6f; engineOffset = 6.5f; hitsize = 8f; }}; diff --git a/core/src/mindustry/entities/comp/PosComp.java b/core/src/mindustry/entities/comp/PosComp.java index 2822c72021..df114ae81f 100644 --- a/core/src/mindustry/entities/comp/PosComp.java +++ b/core/src/mindustry/entities/comp/PosComp.java @@ -27,6 +27,10 @@ abstract class PosComp implements Position{ set(this.x + x, this.y + y); } + void trns(Position pos){ + trns(pos.getX(), pos.getY()); + } + int tileX(){ return Vars.world.toTile(x); } diff --git a/core/src/mindustry/entities/comp/TileComp.java b/core/src/mindustry/entities/comp/TileComp.java index bbf4b3910a..2e2f4a3729 100644 --- a/core/src/mindustry/entities/comp/TileComp.java +++ b/core/src/mindustry/entities/comp/TileComp.java @@ -197,6 +197,11 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree return tile.absoluteRelativeTo(cx, cy); } + public @Nullable Tile frontLarge(){ + int trns = block.size/2 + 1; + return tile.getNearby(Geometry.d4(rotation()).x * trns, Geometry.d4(rotation()).y * trns); + } + public @Nullable Tilec front(){ return nearby((rotation() + 4) % 4); } @@ -217,6 +222,10 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree return tile.pos(); } + public float rotdeg(){ + return tile.rotation() * 90; + } + public int rotation(){ return tile.rotation(); } @@ -345,13 +354,30 @@ abstract class TileComp implements Posc, Teamc, Healthc, Tilec, Timerc, QuadTree } + /** - * Tries dumping a payload. + * Tries moving a payload forwards. + * @param todump payload to dump. + * @return whether the payload was moved successfully + */ + public boolean movePayload(@NonNull Payload todump){ + int trns = block.size/2 + 1; + Tile next = tile.getNearby(Geometry.d4(rotation()).x * trns, Geometry.d4(rotation()).y * trns); + + if(next != null && next.entity != null && next.entity.team() == team() && next.entity.acceptPayload(this, todump)){ + next.entity.handlePayload(this, todump); + return true; + } + + return false; + } + + /** + * Tries dumping a payload to any adjacent block. * @param todump payload to dump. * @return whether the payload was moved successfully */ public boolean dumpPayload(@NonNull Payload todump){ - Array proximity = proximity(); int dump = rotation(); if(proximity.size == 0) return false; diff --git a/core/src/mindustry/world/blocks/units/UnitFactory.java b/core/src/mindustry/world/blocks/units/UnitFactory.java index b24eeabc0a..9f0dc9ed24 100644 --- a/core/src/mindustry/world/blocks/units/UnitFactory.java +++ b/core/src/mindustry/world/blocks/units/UnitFactory.java @@ -7,12 +7,11 @@ import arc.math.*; import arc.scene.style.*; import arc.scene.ui.layout.*; import arc.struct.*; -import arc.util.*; import arc.util.ArcAnnotate.*; +import arc.util.*; import arc.util.io.*; import mindustry.*; import mindustry.annotations.Annotations.*; -import mindustry.content.*; import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.game.EventType.*; @@ -29,7 +28,7 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; public class UnitFactory extends Block{ - public float launchVelocity = 5f; + public float payloadSpeed = 0.5f; public @Load(value = "@-top", fallback = "factory-top") TextureRegion topRegion; public @Load(value = "@-out", fallback = "factory-out") TextureRegion outRegion; public int[] capacities; @@ -128,31 +127,13 @@ public class UnitFactory extends Block{ public class UnitFactoryEntity extends TileEntity{ public int currentPlan = -1; - public float progress, time, speedScl; - public @Nullable Payload payload; + public float progress, time, speedScl, payloadPos; + public @Nullable UnitPayload payload; public float fraction(){ return currentPlan == -1 ? 0 : progress / plans[currentPlan].time; } - public void spawned(){ - progress = 0f; - - Effects.shake(2f, 3f, this); - Fx.producesmoke.at(this); - - if(!net.client() && currentPlan != -1){ - UnitPlan plan = plans[currentPlan]; - Unitc unit = plan.unit.create(team); - unit.set(x, y ); - unit.add(); - unit.rotation(90); - unit.vel().y = launchVelocity + Mathf.range(1f); - unit.vel().x = Mathf.range(1f); - Events.fire(new UnitCreateEvent(unit)); - } - } - @Override public void buildConfiguration(Table table){ Array units = Array.with(plans).map(u -> u.unit); @@ -200,7 +181,7 @@ public class UnitFactory extends Block{ Shaders.build.time = -time / 20f; Draw.shader(Shaders.build); - Draw.rect(region, x, y); + Draw.rect(region, x, y, rotation() * 90 - 90); Draw.shader(); Draw.color(Pal.accent); @@ -212,14 +193,39 @@ public class UnitFactory extends Block{ }); } + Draw.z(Layer.blockOver); + if(payload != null){ - payload.draw(x, y, rotation() * 90); + payload.draw( + x + Angles.trnsx(rotation() * 90, payloadPos), + y + Angles.trnsy(rotation() * 90, payloadPos), + rotation() * 90 + ); } - Draw.z(Layer.blockOver); + Draw.z(Layer.blockOver + 0.1f); + Draw.rect(topRegion, x, y); } + public void spawned(){ + progress = 0f; + + if(!net.client() && payload != null){ + Unitc unit = payload.unit; + unit.set(x, y); + + unit.rotation(rotation() * 90); + unit.vel().trns(rotation() * 90, payloadSpeed * 2f).add(Mathf.range(0.1f), Mathf.range(0.1f)); + unit.trns(Tmp.v1.trns(rotation() * 90, size * tilesize/2f)); + unit.trns(unit.vel()); + unit.add(); + Events.fire(new UnitCreateEvent(unit)); + } + + payload = null; + } + @Override public void updateTile(){ if(currentPlan < 0 || currentPlan >= plans.length){ @@ -235,16 +241,30 @@ public class UnitFactory extends Block{ } if(payload != null){ + payloadPos += edelta() * payloadSpeed; + if(payloadPos >= size * tilesize/2f){ + payloadPos = size * tilesize/2f; + Tile front = frontLarge(); + if(front != null && front.entity != null && front.block().outputsPayload){ + if(movePayload(payload)){ + payload = null; + } + }else if(front != null && !front.solid()){ + //create unit + Call.onUnitFactorySpawn(tile); + } + } } - if(currentPlan != -1 && payload != null){ + if(currentPlan != -1 && payload == null){ UnitPlan plan = plans[currentPlan]; if(progress >= plan.time && Units.canCreate(team)){ progress = 0f; - this.payload = new UnitPayload(plan.unit.create(team)); + payloadPos = 0f; + payload = new UnitPayload(plan.unit.create(team)); consume(); }