From 9663d1153f569e2f2aaa7802157e061166f3edb4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 15 Nov 2021 14:31:20 -0500 Subject: [PATCH] WIP electrolyzer + liquid fixes --- .../blocks/production/electrolyzer-bottom.png | Bin 0 -> 462 bytes .../blocks/production/electrolyzer-glow.png | Bin 0 -> 5642 bytes .../electrolyzer-hydrogen-output1.png | Bin 0 -> 548 bytes .../electrolyzer-hydrogen-output2.png | Bin 0 -> 543 bytes .../blocks/production/electrolyzer-liquid.png | Bin 0 -> 392 bytes .../production/electrolyzer-ozone-output1.png | Bin 0 -> 554 bytes .../production/electrolyzer-ozone-output2.png | Bin 0 -> 541 bytes .../blocks/production/electrolyzer-top.png | Bin 0 -> 302 bytes .../blocks/production/electrolyzer.png | Bin 0 -> 1240 bytes .../sprites/items/item-dormant-cyst.png | Bin 332 -> 341 bytes .../sprites/items/liquid-hydrogen.png | Bin 320 -> 324 bytes .../assets-raw/sprites/items/liquid-ozone.png | Bin 322 -> 323 bytes core/assets/icons/icons.properties | 2 + core/assets/logicids.dat | Bin 3315 -> 3328 bytes core/src/mindustry/content/Blocks.java | 43 +++++++++++- core/src/mindustry/content/Liquids.java | 9 +-- .../mindustry/entities/comp/BuildingComp.java | 5 +- core/src/mindustry/type/LiquidStack.java | 7 +- core/src/mindustry/world/Block.java | 4 +- .../src/mindustry/world/blocks/Autotiler.java | 9 ++- .../blocks/production/GenericCrafter.java | 51 +++++++++++++-- .../world/consumers/ConsumeLiquid.java | 1 + .../world/consumers/ConsumeLiquids.java | 4 +- .../src/mindustry/world/draw/DrawBubbles.java | 47 ++++++++++++++ core/src/mindustry/world/draw/DrawGlow.java | 3 +- .../mindustry/world/draw/DrawGlowRegion.java | 45 +++++++++++++ .../world/draw/DrawLiquidOutputs.java | 61 ++++++++++++++++++ .../world/draw/DrawLiquidRegion.java | 44 +++++++++++++ core/src/mindustry/world/draw/DrawMulti.java | 10 +++ core/src/mindustry/world/draw/DrawRegion.java | 42 ++++++++++++ 30 files changed, 364 insertions(+), 23 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-glow.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output1.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output2.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output1.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer-top.png create mode 100644 core/assets-raw/sprites/blocks/production/electrolyzer.png create mode 100644 core/src/mindustry/world/draw/DrawBubbles.java create mode 100644 core/src/mindustry/world/draw/DrawGlowRegion.java create mode 100644 core/src/mindustry/world/draw/DrawLiquidOutputs.java create mode 100644 core/src/mindustry/world/draw/DrawLiquidRegion.java create mode 100644 core/src/mindustry/world/draw/DrawRegion.java diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png b/core/assets-raw/sprites/blocks/production/electrolyzer-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4b6a2b8fa10ba52de5f54471a2bd0c9083c362 GIT binary patch literal 462 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z}VsG z;uumf=k49yg@+A9STAymr>MW%&!n2-T*lI$`ng$s;vI)-rOuW#lX7kc?~A{WKM((E zzCLAM-rAylB{x1E4^iTgFZna;B8PLk%zr~=!7_e}f5qRFa`u({NzQSNsD1e3cvSa> z9~VBJ-zf6%KJ#(=>-Raz<7NI!?N|O&Q}8GID~E1j%_*C^QN=aar2n$V&1FnrYmj6} zW0)}*8I=>IGv?);UCpCd9xhqtw&U2N)Om9S&uy)oo15NJ%oF?Kj^x9LrP^n$m1UB1 z|D>opB(~+ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-glow.png b/core/assets-raw/sprites/blocks/production/electrolyzer-glow.png new file mode 100644 index 0000000000000000000000000000000000000000..7d88560571964fa9eceb80e8ec9f124760d64270 GIT binary patch literal 5642 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 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output2.png b/core/assets-raw/sprites/blocks/production/electrolyzer-hydrogen-output2.png new file mode 100644 index 0000000000000000000000000000000000000000..11551ea7043a71387fc4047a3676c2af3bf1de16 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&zq`IONd*t~Cc3-ZFBEJv?DJM<;UHf1Bqw zHwNyzzcnj#uYRV`@-7YrD7bsK=O0sbsYRTaAQR8SHhrgtvp)}uD;`*O=wY`&g7LRl=pE^a=$gUMT_~JjS;cf`!c2zkD(V-0 zEwf=@IAB*8wM4}F@0NLCa(&ZVuLdxmHf^ldXY9G=@?c`>R1@dAs!ET2)2e5%S06}V z33#!y&6#0ooFGTQLU$IXkS^B~vJKuG8=B+~8r2B;IiFqAzgFdd+mGx=EEOdmSt=^N mvqW&uayYMU$OMfHfgj8%+7GtuS^Pf?B;x7n=d#Wzp$PzyzTpc1 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png b/core/assets-raw/sprites/blocks/production/electrolyzer-liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..0ecd1df73e0b500f0f9069b3ab900378ed2f0c83 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&!06=Z z;uumf=j|Quyu$`Ot`~RwzF%y-QjM|cnfqja%XCJ*)zKDPTYeQWGC;tNufLa9_m#`s zW#03u>|y`ojz5t~?fbq*&zDfld+ zN_-L!`h1VD@*J~(TMvImZuI*(Vaw6@a~%Qy7*}@h4{_JnTk-3W{#3zJdV5Yk(hn8% z(%W_Wk-n(l8&=a|?y7(*x*0cBot{kpFiB4F*ZB*oriaA%lf0u^)^1apmuj5HaQh;& z#RSO%6Q3~fJ!SvEFEvE~;x1IDMjmrtvKb4Bb~hPWFh2lUqKbZk44ofy`glX=O&!1%<| z#WAE}&f7bNeuoW2j(rqQNPmAzTA?&WTm9vsiKikZB()0}mfU0HYdDmmxoOUio9Fv{ zKmT8wyXZx2sm%TmF-8UmSg>p1SJs@X6+8QsST3|^@8e)xlNVJZ$P_U(9z^=C_@Ts- z@a^w6QJpte9$)_ZCY|4PeVX$f{a?>NUoV-rTPb|A;pN*WFRhPmW)Nz9_jH;7hr+=- zE?JHYUZ!38P7GRGLFCzud;w8XtcMflha7*oQ-aZL<Nr>ygltkY=WS#VxfgHmCOGkNX84;qdMr#G1xL%h+8r3U|2(pG zb=D|bCT$#E^St7gt8~_^%I3TbHDB}KuXBy27tem?cJTC1%ipX${R~Qf1cJKXf4J_# zEbf%|ac%&|8OB~iCZ!#$rbkrn1mwsr;8olvmcVynNn}dqzQY_54%&;DO&(i0Snp!q zGvOt}dKK${UrTKm7!H_yj94OaC+pac2+O#2%69{pPtQ6a>&@V1skk9EQptDX^lfV+ zZ=Gotydc4-aplcJfrg;90vrmCy#gExff_8Q_Z6~CNR(ol{ms-!=9_b8w9xB@sUNN% u;oDGJ$bMtbZsspdRsqH8Zjgv!V6ds@>c8XHcxc&gkcg+NpUXO@geCw|MBnNF literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png b/core/assets-raw/sprites/blocks/production/electrolyzer-ozone-output2.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1bdd0bdc8fca88f160d72d0b5c7a69633eb520 GIT binary patch literal 541 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z&Skr?@p`oR%Z3a-iZsVRl}C#?RB(@+@$os^4#X+ z@Sk!;gE8zme|!tW>RDitlQ+JFA#MNs z`v(vH%8R$ZczxdLy4k#)xfhqt%c?nX?Z;vN+`CdN8X~to=?ZcLEVy>Qub;t7w@u%P zVQSc6aYcvn76d|TjbmAuQg%GF-l{C1kZ4!4JdK6PgR09rn6+{iAPRnI+k`YZjdl%n6{Yx0Pjr30`DS*t@)>z85nYe zm%Dl`yzKuv^Xbouxe>gk8)Afad>1;9;mINw8RlX9B7k44ofy`glX=O&!0^J; z#WAE}&fA*@vzh}$TrYn9_5Xj4o0I1RlN(p&&ED$f$25Jn<9szn1}JzCzIHWx#no-O zx9j#^TQ&Rtz3W$*=X|tvTm6c`v%cjQgJ*fmsp=OO4@uAGEMRSwF^)F_qnRn{);VIi6EHOB+d9q)0%c{issxvuV0md)#qFTBX-_Py*aDSfs zRK`h`f?4}n=SE(;n7{tVlt5{PnSu+g94^T(v~##5o9NQ;#8&X%p&1M(A1lR2=A5o} hX01O1bu656zRSSS9N_ZOozog5=IQF^vd$@?2>|Uec+mg= literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/production/electrolyzer.png b/core/assets-raw/sprites/blocks/production/electrolyzer.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd56536828b1ab162a436e7e4db9546e8cec995 GIT binary patch literal 1240 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^SB=6kw0hE&XXd)Kf}#9Dyu zfvtRt^dx1aE$#}+cSHmav+iJBE_J1wNA7gl-_Uhh({1xkUYxz{^#ARTUzTmJ@b^FR z@$K*a+nJx-o>m{~?=sl^;_fX@dxz#j|NneSty*ZkJ@3c+d-nI&ZR0u=`dn-4Bo56# zp#niaq7|k*EEYJWu)|lmrhA{x>;29dt^Eo;V)`>%(&P0wL>#ysS67@!7(kjl!4PpqT%Xv1x==G&aQwB>G5*KP4z9d`}!6itn6QISpUMv zBozhc4R=?X2ZE9U)KlUb-SY(z6bxJ=hx3B-1qKblPYbdb!WT0{B^L;8VOa6mrC()Y@eU4; zA3+RyOy)<#n2Pv*FSPkp`7WrX#h$4_$>XrT;Dz&>+@`;1G0CNYgi6e%{$C+V(x}5 z4E-OfIcC-8sFfc&5hq}BA&Fi5V2b{V?T4oel=0ZhYA{Wm%+c^lL@e&lgmnTLepeYU z_<7#-<>PG#3u9-nxWjl(=*#~Zn^@+`Kiq%(iu}W3NvQ`$TUs4N4`)7i^NDC+J9M+l zVs>G5?y-fg^WJ78Gpvf>JHWy8si*QZyHUvGJsPT<^Q(^S`Ko*}$~&C>iu2DvmM4;* z58F=B*T1+%U_$yC{_jyThgotXI}hDDPh z{p4h&8Fx69s~s0VEEZ53`Nio`x%@sx(+mM#=FtbO*e? z&(#pjE>su6AhPi4b~T131zvj-hO7ST@26et`B2P|r)P4>Ca2J*$?Y8T5Qev z%sb(myRQ`IezpTESzQa*FSumXPTR~pO1!=gVlKzR)sl$uGf{?SH?_1RL1GB7YOc)I$ztaD0e0swa+9sK|R literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/items/item-dormant-cyst.png b/core/assets-raw/sprites/items/item-dormant-cyst.png index 5693bd3059fa539b95a055b9ec580b3646af92cc..263f7ea57fab9513210e7643cdba62ecce457acc 100644 GIT binary patch delta 301 zcmX@Zbd_m>VLiX6i(^Pc>)WZed`$)tZL14EF`c>BaL~2v@skI#HtjCwAIeI^sJz={ zP{7QtuJ<5HU1-hQ>)&&g4JVd2uYX$U^?!=gr}vT@W#>&_TXuEXY30ARtD0H(r#46{ ze-PkYp~#%Bx~JFaLC=vN(FG=cjdl;bID-YW1D;*I{rOo`bmZiE2@mtLYXx7sPRp9z zvcu!T{s&FhpC3PN9jsI({=@Cvlr}6)78&q Iol`;+06Fi7Q2+n{ delta 292 zcmcc0bcShyVLh9ti(^Pc>)R=Yd`%7luI|ZCSy${~ZteZzCe8i+fo;#c!`2tF-fZ3Y zfK4nc=75-X&!o9G|BJJ5*RkGg{Jv?ou~O}?k~xgO4}RXGxn=9eKMw!|3zzKxXyts`z*#_0@*;jelnCpTGI>;mF66 z4D>m*K60k3W|cQ`pY!OcVG=tqy}~k3_0){q8*WzO4ac6=?$>g0Srqvs=6WCJPUa7M z83nn#Z<*FR%sSG_TJC93d_crw@{D8 AY5)KL diff --git a/core/assets-raw/sprites/items/liquid-hydrogen.png b/core/assets-raw/sprites/items/liquid-hydrogen.png index 1cdc08913b170d790471eacfa7bb7b40ba563fad..cf55930c4249b954d884c03b99cf449c6578bfab 100644 GIT binary patch delta 284 zcmX@WbcAVwVf{Z(7srr@*0)pl3Nk4Qw2CXgeOR^Q&Jm|I2fEfAaPm2`zWueMaZf>5 z-`~`$l3&lpC~?1kyq4iWynNUuzZuWw?EF~hvCQ=9(McP{U34}{MLXU&7+1{8VkwZS z=eQ=yUe5n|K(U`M14F~`(EKvTd&2Hff za^5djnK52@S-_orzay>ji`1jAFQ=|Hop?U$PUp2HQ{85+_UzK_xUrJu;5LO#*QbQA t-BZ~W{eX3&%JZ%nOqK4Z_xX#Ke-p3Tx5?{+90LObgQu&X%Q~loCIFzMh5P^j delta 280 zcmX@Ybbx7sVf`;p7srr@*0)n_`Ir<1TG_jEzv`%kR4bf+(zwRMrhD7%4Wew3&!z_o ze^tGG;=u0;Wrh#e+eNnsPn%+FYIk%&RB+50$!NzLN^3WYwaCbrPIp+q9QRD-$hz;3 zpVkzcF2BOcz~FJ++On`q@rrzUi|VeKH{RLFeV0yN%V{d^yI@7V-=f$APs{23&4(Ex z8^oBR*RWlD!P)TZb7sDUa6`yE_bV(9R^DeakUbpUy|*Ll?DE5l@4c=xQ&+H^b|-W# zQ^w_mV$=2s-er1cx+dCCE1276es+m^(BwF&)O9MFn+_x|mtncdbUrRwNHSuwL|&t) o%j7whkL1o+M}4b}V*HR>CHP?BvosS+9~#-r!aei|k#i@FrpHPPQhQ4x{M` zW;afs&g3(F-V&7BaChNi^(NU&p~FEHRgC5QiaYA6`ZR7e1zoTI+#93d>wT)9#ho!v zwSk9mazl5e{jGME9sTEjwHGsHh*rA9GEDrX%W&PWX6q68z?FXsBVI3FmtM~F>UZ6n z=ylgv7%nHSk33kh_OgWI)U_+7u4bKh-E^n$TFz;1^HzIy>2};$$#QU;!lvs}LfG!9 rtcrfXx>4nMpG0$|`{{lDN&27 zvX}F}9#HJ(%fQg^`ROq~nf56k)FlHu_0+EIzMp%YJ9#yy`Sg091sv*u`UYn$r~5Z8 zW^iqgYKr1%j`+fI;P1~h=5x3mR-aIQ#nf>npK(Xu!_}&BE)ng2p9RW)wb?CvLC*W- zDl^6_FAKP{?{}m%evx_<_T|*orW4O+-RZoxWUAZD)t+6t9XD389Nea`>H3rqwtFhO qq93qsRC(StgQ?Q}^gjRcNMZY`Z&z*wFJ)k0VDNPHb6Mw<&;$SzPJfF4 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 650210e171..efd68836ba 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -441,3 +441,5 @@ 63265=oxide|item-oxide-ui 63264=oxygen|liquid-oxygen-ui 63263=hydrogen|liquid-hydrogen-ui +63262=electrolyzer|block-electrolyzer-ui +63261=ozone|liquid-ozone-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index f345a790b62cc598412c3692aaecf702c75329b6..2be980b92e3f1130eb5970f1332aad6cd668ab52 100644 GIT binary patch delta 47 zcmew?*&xNluyZ5R94=m-)ST4hlA`>a%Bs|&&2zb2nFKg8DpQK`(^K;pSo5p$^HKqY Cz7RnG delta 34 pcmZpW`Yg%Buwx_B9Inl4xLlY7+43tY(^K;pI5H|zit^J_^8m)+3xWUu diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6c0fc1209e..6d43933bef 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -60,7 +60,7 @@ public class Blocks implements ContentList{ //crafting siliconSmelter, siliconCrucible, siliconArcFurnace, kiln, graphitePress, plastaniumCompressor, multiPress, phaseWeaver, surgeSmelter, pyratiteMixer, blastMixer, cryofluidMixer, melter, separator, disassembler, sporePress, pulverizer, incinerator, coalCentrifuge, - oxidizer, heatReactor, carbideCrucible, + electrolyzer, oxidizer, heatReactor, carbideCrucible, cellSynthesisChamber, //sandbox @@ -935,6 +935,7 @@ public class Blocks implements ContentList{ craftTime = 30f; size = 2; hasPower = hasItems = hasLiquids = true; + rotatePlan = false; consumes.liquid(Liquids.oil, 0.1f); consumes.power(0.7f); @@ -946,10 +947,46 @@ public class Blocks implements ContentList{ consumes.power(0.50f); }}; + //TODO better name + electrolyzer = new GenericCrafter("electrolyzer"){{ + requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); + size = 3; + + craftTime = 10f; + rotate = true; + + liquidCapacity = 100f; + + consumes.liquid(Liquids.water, 1f); + consumes.power(2f); + + drawer = new DrawMulti( + new DrawRegion("-bottom"), + new DrawLiquidRegion(Liquids.water), + new DrawBubbles(Color.valueOf("7693e3")){{ + sides = 10; + recurrence = 3f; + spread = 6; + radius = 1.5f; + amount = 20; + }}, + new DrawRegion(), + new DrawLiquidOutputs(), + new DrawRegion("-top"), + new DrawGlowRegion(){{ + alpha = 0.5f; + color = new Color(1f, 0.22f, 0.22f); + }} + ); + iconOverride = new String[]{"-bottom", "", "-top"}; + + outputLiquids = LiquidStack.with(Liquids.ozone, 0.5f, Liquids.hydrogen, 0.5f); + liquidOutputDirections = new int[]{1, 3}; + }}; + oxidizer = new HeatProducer("oxidizer"){{ requirements(Category.crafting, with(Items.tungsten, 60, Items.graphite, 30)); - //TODO bigger? - size = 2; + size = 3; //TODO multi liquid output //converts oxygen (?) + beryllium into heat + oxide diff --git a/core/src/mindustry/content/Liquids.java b/core/src/mindustry/content/Liquids.java index 5f40b987cc..94db84a5e2 100644 --- a/core/src/mindustry/content/Liquids.java +++ b/core/src/mindustry/content/Liquids.java @@ -58,17 +58,18 @@ public class Liquids implements ContentList{ }}; //TODO reactivity, etc - ozone = new Liquid("ozone", Color.valueOf("bdd7ff")){{ + ozone = new Liquid("ozone", Color.valueOf("f099da")){{ gas = true; - barColor = Color.valueOf("97bdf7"); + barColor = Color.valueOf("d699f0"); explosiveness = 1f; flammability = 1f; }}; //TODO combustion - hydrogen = new Liquid("hydrogen", Color.valueOf("e8d1ff")){{ + hydrogen = new Liquid("hydrogen", Color.valueOf("97a5f7")){{ gas = true; - barColor = Color.valueOf("c599f0"); + barColor = Color.valueOf("7d8be0"); + flammability = 1f; }}; //TODO dicyanoacetylene diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 75fb1fe866..5332a455d8 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -567,6 +567,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, liquids.add(liquid, amount); } + //TODO entire liquid system is awful public void dumpLiquid(Liquid liquid){ dumpLiquid(liquid, 2f); } @@ -585,9 +586,9 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, for(int i = 0; i < proximity.size; i++){ incrementDump(proximity.size); - Building other = proximity.get((i + dump) % proximity.size); - if(outputDir != -1 && (relativeTo(other) + rotation) % 4 != outputDir) return; + Building other = proximity.get((i + dump) % proximity.size); + if(outputDir != -1 && (outputDir + rotation) % 4 != relativeTo(other)) continue; other = other.getLiquidDestination(self(), liquid); diff --git a/core/src/mindustry/type/LiquidStack.java b/core/src/mindustry/type/LiquidStack.java index 9250d24c8e..d233697302 100644 --- a/core/src/mindustry/type/LiquidStack.java +++ b/core/src/mindustry/type/LiquidStack.java @@ -1,6 +1,5 @@ package mindustry.type; -import arc.math.*; import arc.struct.*; import mindustry.content.*; @@ -38,7 +37,7 @@ public class LiquidStack implements Comparable{ public static LiquidStack[] mult(LiquidStack[] stacks, float amount){ LiquidStack[] copy = new LiquidStack[stacks.length]; for(int i = 0; i < copy.length; i++){ - copy[i] = new LiquidStack(stacks[i].liquid, Mathf.round(stacks[i].amount * amount)); + copy[i] = new LiquidStack(stacks[i].liquid, stacks[i].amount * amount); } return copy; } @@ -46,7 +45,7 @@ public class LiquidStack implements Comparable{ public static LiquidStack[] with(Object... items){ LiquidStack[] stacks = new LiquidStack[items.length / 2]; for(int i = 0; i < items.length; i += 2){ - stacks[i / 2] = new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).intValue()); + stacks[i / 2] = new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).floatValue()); } return stacks; } @@ -54,7 +53,7 @@ public class LiquidStack implements Comparable{ public static Seq list(Object... items){ Seq stacks = new Seq<>(items.length / 2); for(int i = 0; i < items.length; i += 2){ - stacks.add(new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).intValue())); + stacks.add(new LiquidStack((Liquid)items[i], ((Number)items[i + 1]).floatValue())); } return stacks; } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 76f20d8090..e05dff979f 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -90,6 +90,8 @@ public class Block extends UnlockableContent{ public boolean solidifes; /** whether this is rotatable */ public boolean rotate; + /** if set to plan, the plan region won't rotate when drawing */ + public boolean rotatePlan = true; /** number of different variant regions to use */ public int variants = 0; /** whether to draw a rotation arrow - this does not apply to lines of blocks */ @@ -544,7 +546,7 @@ public class Block extends UnlockableContent{ public void drawRequestRegion(BuildPlan plan, Eachable list){ TextureRegion reg = getRequestRegion(plan, list); - Draw.rect(reg, plan.drawx(), plan.drawy(), !rotate ? 0 : plan.rotation * 90); + Draw.rect(reg, plan.drawx(), plan.drawy(), !rotate || !rotatePlan ? 0 : plan.rotation * 90); if(plan.worldContext && player != null && teamRegion != null && teamRegion.found()){ if(teamRegions[player.team().id] == teamRegion) Draw.color(player.team().color); diff --git a/core/src/mindustry/world/blocks/Autotiler.java b/core/src/mindustry/world/blocks/Autotiler.java index 03e0b7e01a..d6b47c8f02 100644 --- a/core/src/mindustry/world/blocks/Autotiler.java +++ b/core/src/mindustry/world/blocks/Autotiler.java @@ -201,8 +201,13 @@ public interface Autotiler{ /** @return whether this tile is looking at the other tile, or the other tile is looking at this one. * If the other tile does not rotate, it is always considered to be facing this one. */ default boolean lookingAtEither(Tile tile, int rotation, int otherx, int othery, int otherrot, Block otherblock){ - return (Point2.equals(tile.x + Geometry.d4(rotation).x, tile.y + Geometry.d4(rotation).y, otherx, othery) - || (!otherblock.rotatedOutput(otherx, othery) || Point2.equals(otherx + Geometry.d4(otherrot).x, othery + Geometry.d4(otherrot).y, tile.x, tile.y))); + return + //block is facing the other + Point2.equals(tile.x + Geometry.d4(rotation).x, tile.y + Geometry.d4(rotation).y, otherx, othery) || + //does not output to rotated direction + !otherblock.rotatedOutput(otherx, othery) || + //other block is facing this one + Point2.equals(otherx + Geometry.d4(otherrot).x, othery + Geometry.d4(otherrot).y, tile.x, tile.y); } /** diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 17f66b7d61..86a535185e 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.production; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.struct.*; @@ -13,6 +14,7 @@ import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.consumers.*; import mindustry.world.draw.*; import mindustry.world.meta.*; @@ -38,6 +40,8 @@ public class GenericCrafter extends Block{ public boolean legacyReadWarmup = false; public DrawBlock drawer = new DrawBlock(); + /** If set, the icon is overridden to be these strings, in order. Each string is a suffix. */ + public String[] iconOverride = null; public GenericCrafter(String name){ super(name); @@ -48,6 +52,7 @@ public class GenericCrafter extends Block{ sync = true; ambientSoundVolume = 0.03f; flags = EnumSet.of(BlockFlag.factory); + drawArrow = false; } @Override @@ -69,13 +74,37 @@ public class GenericCrafter extends Block{ public void setBars(){ super.setBars(); - //set up liquid bars for multiple liquid outputs; TODO multiple inputs not yet supported due to inherent complexity - //TODO this will currently screw up input display if input liquids are available - no good way to fix that yet - if(outputLiquids != null && outputLiquids.length > 1){ + //set up liquid bars for multiple liquid outputs + //TODO this will currently screw up input display if input liquids are filters - no good way to fix that yet + if(outputLiquids != null && outputLiquids.length > 0){ bars.remove("liquid"); + Seq consumed = new Seq<>(); + + //find list of liquids consumed + if(consumes.has(ConsumeType.liquid)){ + var consl = consumes.get(ConsumeType.liquid); + if(consl instanceof ConsumeLiquid liq){ + consumed.add(liq.liquid); + }else if(consl instanceof ConsumeLiquids multi){ + for(var stack : multi.liquids){ + consumed.add(stack.liquid); + } + } + } + + //display consumed first + for(var liq : consumed){ + bars.add("liquid-consume-" + liq.name, entity -> new Bar( + () -> liq.localizedName, + liq::barColor, + () -> entity.liquids.get(liq) / liquidCapacity) + ); + } + + //then display output buffer for(var stack : outputLiquids){ - bars.add("liquid-" + stack.liquid.name, entity -> new Bar( + bars.add("liquid-output-" + stack.liquid.name, entity -> new Bar( () -> stack.liquid.localizedName, () -> stack.liquid.barColor(), () -> entity.liquids.get(stack.liquid) / liquidCapacity) @@ -84,6 +113,11 @@ public class GenericCrafter extends Block{ } } + @Override + public boolean rotatedOutput(int x, int y){ + return false; + } + @Override public void load(){ super.load(); @@ -93,13 +127,13 @@ public class GenericCrafter extends Block{ @Override public void init(){ - outputsLiquid = outputLiquid != null; if(outputItems == null && outputItem != null){ outputItems = new ItemStack[]{outputItem}; } if(outputLiquids == null && outputLiquid != null){ outputLiquids = new LiquidStack[]{outputLiquid}; } + outputsLiquid = outputLiquids != null; super.init(); } @@ -114,6 +148,13 @@ public class GenericCrafter extends Block{ @Override public TextureRegion[] icons(){ + if(iconOverride != null){ + var out = new TextureRegion[iconOverride.length]; + for(int i = 0; i < out.length; i++){ + out[i] = Core.atlas.find(name + iconOverride[i]); + } + return out; + } return drawer.icons(this); } diff --git a/core/src/mindustry/world/consumers/ConsumeLiquid.java b/core/src/mindustry/world/consumers/ConsumeLiquid.java index 4d499bda1d..7dc1e557ec 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquid.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquid.java @@ -9,6 +9,7 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; +//TODO replace with ConsumeLiquids public class ConsumeLiquid extends ConsumeLiquidBase{ public final Liquid liquid; diff --git a/core/src/mindustry/world/consumers/ConsumeLiquids.java b/core/src/mindustry/world/consumers/ConsumeLiquids.java index ddefd5d4ff..a38e4dc725 100644 --- a/core/src/mindustry/world/consumers/ConsumeLiquids.java +++ b/core/src/mindustry/world/consumers/ConsumeLiquids.java @@ -2,6 +2,7 @@ package mindustry.world.consumers; import arc.scene.ui.layout.*; import arc.struct.*; +import mindustry.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.ui.*; @@ -38,7 +39,7 @@ public class ConsumeLiquids extends Consume{ int i = 0; for(var stack : liquids){ c.add(new ReqImage(stack.liquid.uiIcon, - () -> build.liquids != null && build.liquids.get(stack.liquid) >= stack.amount * build.delta())).padRight(8); + () -> build.liquids.get(stack.liquid) >= stack.amount * build.delta())).size(Vars.iconMed).padRight(8); if(++i % 4 == 0) c.row(); } }).left(); @@ -63,6 +64,7 @@ public class ConsumeLiquids extends Consume{ @Override public void display(Stats stats){ + //TODO display is wrong stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(stats.timePeriod, stats.timePeriod >= 0, liquids)); } diff --git a/core/src/mindustry/world/draw/DrawBubbles.java b/core/src/mindustry/world/draw/DrawBubbles.java new file mode 100644 index 0000000000..7665ff6d25 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawBubbles.java @@ -0,0 +1,47 @@ +package mindustry.world.draw; + +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +public class DrawBubbles extends DrawBlock{ + public Color color = Color.valueOf("7457ce"); + + public int amount = 12, sides = 8; + public float strokeMin = 0.2f, spread = 3f, timeScl = 30f; + public float recurrence = 6f, radius = 3f; + + public DrawBubbles(Color color){ + this.color = color; + } + + public DrawBubbles(){ + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} + + @Override + public void draw(GenericCrafterBuild build){ + if(build.warmup <= 0.001f) return; + + Draw.color(color); + Draw.alpha(build.warmup); + + rand.setSeed(build.id); + for(int i = 0; i < amount; i++){ + float x = rand.range(spread), y = rand.range(spread); + float life = 1f - ((Time.time / timeScl + rand.random(recurrence)) % recurrence); + + if(life > 0){ + Lines.stroke(build.warmup * (life + strokeMin)); + Lines.poly(build.x + x, build.y + y, sides, (1f - life) * radius); + } + } + + Draw.color(); + } +} diff --git a/core/src/mindustry/world/draw/DrawGlow.java b/core/src/mindustry/world/draw/DrawGlow.java index 47748cad06..8db84eccb2 100644 --- a/core/src/mindustry/world/draw/DrawGlow.java +++ b/core/src/mindustry/world/draw/DrawGlow.java @@ -7,6 +7,7 @@ import mindustry.world.*; import mindustry.world.blocks.production.GenericCrafter.*; public class DrawGlow extends DrawBlock{ + public String suffix = "-top"; public float glowAmount = 0.9f, glowScale = 3f; public TextureRegion top; @@ -20,6 +21,6 @@ public class DrawGlow extends DrawBlock{ @Override public void load(Block block){ - top = Core.atlas.find(block.name + "-top"); + top = Core.atlas.find(block.name + suffix); } } diff --git a/core/src/mindustry/world/draw/DrawGlowRegion.java b/core/src/mindustry/world/draw/DrawGlowRegion.java new file mode 100644 index 0000000000..b9dc5511e6 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawGlowRegion.java @@ -0,0 +1,45 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.graphics.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawGlowRegion extends DrawBlock{ + public Blending blending = Blending.additive; + public String suffix = "-glow"; + public float alpha = 0.9f, glowScale = 3f; + public float layer = Layer.blockAdditive; + public Color color = Color.red.cpy(); + public TextureRegion top; + + @Override + public void draw(GenericCrafterBuild build){ + if(build.warmup <= 0.001f) return; + + float z = Draw.z(); + Draw.z(layer); + Draw.blend(blending); + Draw.color(color); + Draw.alpha(Mathf.absin(build.totalProgress, glowScale, alpha) * build.warmup); + Draw.rect(top, build.x, build.y); + Draw.reset(); + Draw.blend(); + Draw.z(z); + } + + @Override + public void load(Block block){ + top = Core.atlas.find(block.name + suffix); + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} +} diff --git a/core/src/mindustry/world/draw/DrawLiquidOutputs.java b/core/src/mindustry/world/draw/DrawLiquidOutputs.java new file mode 100644 index 0000000000..c650f6b524 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawLiquidOutputs.java @@ -0,0 +1,61 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** This must be used in conjunction with another DrawBlock; it only draws outputs. */ +public class DrawLiquidOutputs extends DrawBlock{ + public TextureRegion[][] liquidOutputRegions; + + @Override + public void draw(GenericCrafterBuild build){ + GenericCrafter crafter = (GenericCrafter)build.block; + if(crafter.outputLiquids == null) return; + + for(int i = 0; i < crafter.outputLiquids.length; i++){ + int side = i < crafter.liquidOutputDirections.length ? crafter.liquidOutputDirections[i] : -1; + if(side != -1){ + int realRot = (side + build.rotation) % 4; + Draw.rect(liquidOutputRegions[realRot > 1 ? 1 : 0][i], build.x, build.y, realRot * 90); + } + } + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + if(crafter.outputLiquids == null) return; + + for(int i = 0; i < crafter.outputLiquids.length; i++){ + int side = i < crafter.liquidOutputDirections.length ? crafter.liquidOutputDirections[i] : -1; + if(side != -1){ + int realRot = (side + plan.rotation) % 4; + Draw.rect(liquidOutputRegions[realRot > 1 ? 1 : 0][i], plan.drawx(), plan.drawy(), realRot * 90); + } + } + } + + @Override + public void load(Block block){ + GenericCrafter crafter = (GenericCrafter)block; + + if(crafter.outputLiquids == null) return; + + liquidOutputRegions = new TextureRegion[2][crafter.outputLiquids.length]; + for(int i = 0; i < crafter.outputLiquids.length; i++){ + for(int j = 1; j <= 2; j++){ + liquidOutputRegions[j - 1][i] = Core.atlas.find(block.name + "-" + crafter.outputLiquids[i].liquid.name + "-output" + j); + } + } + } + + //TODO + @Override + public TextureRegion[] icons(Block block){ + return super.icons(block); + } +} diff --git a/core/src/mindustry/world/draw/DrawLiquidRegion.java b/core/src/mindustry/world/draw/DrawLiquidRegion.java new file mode 100644 index 0000000000..ac2e1ce14f --- /dev/null +++ b/core/src/mindustry/world/draw/DrawLiquidRegion.java @@ -0,0 +1,44 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.graphics.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawLiquidRegion extends DrawBlock{ + public Liquid drawLiquid; + public TextureRegion liquid; + public String suffix = "-liquid"; + + public DrawLiquidRegion(Liquid drawLiquid){ + this.drawLiquid = drawLiquid; + } + + public DrawLiquidRegion(){ + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){} + + @Override + public void draw(GenericCrafterBuild build){ + + if(drawLiquid != null){ + Drawf.liquid(liquid, build.x, build.y, + build.liquids.get(drawLiquid) / build.block.liquidCapacity, + drawLiquid.color + ); + } + } + + @Override + public void load(Block block){ + liquid = Core.atlas.find(block.name + suffix); + } +} diff --git a/core/src/mindustry/world/draw/DrawMulti.java b/core/src/mindustry/world/draw/DrawMulti.java index 78262a2dd1..eeb9614b98 100644 --- a/core/src/mindustry/world/draw/DrawMulti.java +++ b/core/src/mindustry/world/draw/DrawMulti.java @@ -1,7 +1,10 @@ package mindustry.world.draw; import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; import mindustry.world.*; +import mindustry.world.blocks.production.*; import mindustry.world.blocks.production.GenericCrafter.*; /** combined several DrawBlocks into one */ @@ -24,6 +27,13 @@ public class DrawMulti extends DrawBlock{ } } + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + for(var draw : drawers){ + draw.drawPlan(crafter, plan, list); + } + } + @Override public void drawLight(GenericCrafterBuild build){ for(var draw : drawers){ diff --git a/core/src/mindustry/world/draw/DrawRegion.java b/core/src/mindustry/world/draw/DrawRegion.java new file mode 100644 index 0000000000..50206d5d10 --- /dev/null +++ b/core/src/mindustry/world/draw/DrawRegion.java @@ -0,0 +1,42 @@ +package mindustry.world.draw; + +import arc.*; +import arc.graphics.g2d.*; +import arc.util.*; +import mindustry.entities.units.*; +import mindustry.world.*; +import mindustry.world.blocks.production.*; +import mindustry.world.blocks.production.GenericCrafter.*; + +/** Not standalone. */ +public class DrawRegion extends DrawBlock{ + public TextureRegion region; + public String suffix = ""; + /** Any number <=0 disables layer changes. */ + public float layer = -1; + + public DrawRegion(String suffix){ + this.suffix = suffix; + } + + public DrawRegion(){ + } + + @Override + public void draw(GenericCrafterBuild build){ + float z = Draw.z(); + if(layer > 0) Draw.z(layer); + Draw.rect(region, build.x, build.y); + Draw.z(z); + } + + @Override + public void drawPlan(GenericCrafter crafter, BuildPlan plan, Eachable list){ + Draw.rect(region, plan.drawx(), plan.drawy()); + } + + @Override + public void load(Block block){ + region = Core.atlas.find(block.name + suffix); + } +}