From 430fe2fd0a26f306da5bb9fce38f1d2911db8265 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 19 Dec 2021 20:31:00 -0500 Subject: [PATCH] Unit assembly finalizations --- .../units/basic-assembler-module-in.png | Bin 0 -> 599 bytes .../units/basic-assembler-module-side1.png | Bin 0 -> 347 bytes .../units/basic-assembler-module-side2.png | Bin 0 -> 345 bytes .../units/basic-assembler-module-top.png | Bin 0 -> 1015 bytes .../blocks/units/basic-assembler-module.png | Bin 1375 -> 1379 bytes .../blocks/units/tank-assembler-in.png | Bin 1182 -> 1166 bytes core/assets/shaders/blockbuild.frag | 8 +-- core/src/mindustry/content/Blocks.java | 3 +- core/src/mindustry/content/Fx.java | 8 +++ .../world/blocks/units/UnitAssembler.java | 49 ++++++++++++++---- .../blocks/units/UnitAssemblerModule.java | 21 +++++++- gradle.properties | 2 +- 12 files changed, 75 insertions(+), 16 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png create mode 100644 core/assets-raw/sprites/blocks/units/basic-assembler-module-side1.png create mode 100644 core/assets-raw/sprites/blocks/units/basic-assembler-module-side2.png create mode 100644 core/assets-raw/sprites/blocks/units/basic-assembler-module-top.png diff --git a/core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png b/core/assets-raw/sprites/blocks/units/basic-assembler-module-in.png new file mode 100644 index 0000000000000000000000000000000000000000..f8427f0ba98993527d66ff96c50fbbe399178ba1 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>U=s9naSW-L z^Y+eOU*0YDW2xT9A>i~v?qe(RapyaeAiJ_BY;wmN&myRG=Airf9P}Lq&_6Z#iR%$o6u;||fDy=YJozRhx%BLWB z@Q~_(*QY-peEj^)#on*%I;TCimw)%&-q8Quys6gsF4MH9Prg>a2`gtf_Wh!0!^giS z>)`Jn1CIgdPSMkz>qoKJQqu{j?@Cpz;9yHxXQ~X7n#TaO`OW*RN7r9@VD# z?_M(~{V<5_5IlJ9Po3lEnkT%oc`8nCO4*YdX;jQ`Y`YbP0l+XkKhG+!v literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/units/basic-assembler-module-side1.png b/core/assets-raw/sprites/blocks/units/basic-assembler-module-side1.png new file mode 100644 index 0000000000000000000000000000000000000000..04e681b69bd18f6925e42b7b9323c76349255af8 GIT binary patch literal 347 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 Bg604K diff --git a/core/assets-raw/sprites/blocks/units/tank-assembler-in.png b/core/assets-raw/sprites/blocks/units/tank-assembler-in.png index 080596e1d6a100d0868e96a82fbdc484819055b5..d411cbd4cd4ca868a197c1a080dd4536e62b33a4 100644 GIT binary patch literal 1166 zcmW-hdrVVT9LH~gj`Aq9r5z5cv;~n2d2GxVaw1bt+ve?u~h2eJY{8bw|46*t#j_Y<+aZur!`Ev;1)_^a5-j!k3w9*eUBn?VrADP*YB z=gu>XH8LJXzDm?MGGKhqOCN;L)wVEB<2IIi$YE)KNhl@}JHMTU_A{j8I+R0`DBI;I zFR!9}(2Mfc2Ff-C%K9}xSalQS4KvEft0=v0qhvitNwuPkXhOMX6j1%qB1-la%DW6q z0*vg`VFQSCAqAhz;EK{%oLZbEM+Sv7or_{edC+GZE0kmBzwzgi@vkCPSfch;rg+OJ zV6mgl6O65O4);9uhZwDwE5#j_AfzmK0y9py(yIpRTcRO3#)vsLxmkuti1;+1`gEy3K{nnsr?iIPX%=j0VR< z$`0y4mj?cQ*JQ?{Bjw&;Y`z7f+A+0+ebpaGS7M}_-e^n^E&{Q;#dRQ7JpT!%^K%EJUsbucqG-u~eX~%L-w_m? z@$dn2^2J*i6j5oyiE9Qzp1#wr_z;z0&Uj53o-ad&lj28L(qv7G<`b9mn{v|9XK8>!pX?F10FN##r6$IfUmY~ zlPS3a6NH@cei4Ny%Dm@rQu%$sbQ|-?jpZ3!);d7~4xwN=`wQ*<*)eU6E}6uFqYix0 zrWc!IEL#2WRiKh_;k2Xc+xi{P50Wh)a` zY*S||uvv~2QgfPA9j=lKUXfBi%Ty9cdMdb=qmqRB2HWojw)-A$x@ETO30!^>yyi37 z#az&uYGysNoJzC7$ml91<=alQ0_NTJ+bSEak1JN!6vf*6v2Rj9 zQ)NltLACCJ6;PYM#DiKL#4*O;nt<$h3Zyy|NP^}dkj__u>>B}c?TK@Pts#)fF;-nr z0GZwiWM&Pg%Vpl? f>Hq%#5VZQI&+9wCoNf7`Fb6g9v5D{?H&^l>NBrWn delta 1148 zcmeC%N2KJNbcf6@l)U6q{Xr2qWRD)@-!^jl^n zm;BTJ?<+Wc`J(C2$#L;~R)dh>qW-fCs!A@^yBWP)I=1oEGf(Ldc&oyyA*guEgD*hI z>Bea;5P1sB)&#RPK?Z~#LRkg1_xwv$gcB=>~p8HhDrRFr};X7Le!TLqp{lyh+mG;El|MK*; zxzdqep#`To@{g-I<=kt_6nuDVhKt4a_Qec()72-ddvX3c|302y&7aMjFW)6vhBNs1 zgA9xLOZ=U(l+OH(Rhr}d$-Pija9W#p%jXlnbS%_Y+zK`qJf~P~{9009FJGc;;)d7dENh^!(iEA>5GdWrj_c%rny9a`o`Z} z`;KW!hk?*^V1P-q-UfQ7=RhgYYgNzffZnv_76f`Zt`!s@{Z7DOTxk9fsQkj@2|(p9 zTyFrCe^Dp_D(};)0g*XfKoOa%CX7iwEFHnN_v-C#M71qW+4Xlta-xpB`+>ct2}Rf2 zB};XB)PIWP{7mY%68m+!ir*s3!sSKyH`fy@9tteV6*Fu$axc#_%qyMV7%4@$gGi{+J$N z=YD3b>MF@yYjRWj-0z4N%Wvk*j63cW@B5wmo0-@z?^%=P|5gIIr+B;3p%w0GPTk!% z4JZ09 zKl1dGOU;CkonCb-=iBcSmRAW~Gbz67M?v<)4*utn9sKF9jFe~n*s!#+;Yho!FVOKa znPLhb6q}1LQw30QzIXX&r}0&YU2@rKPKYqE}XMP52S8+QQ*cbL%3YXxJv8 zV8kh)V1lkCP${=3qmX=*CC`K(7cS)ijlO0El>f3pO5x+e>Ha{es$JYbsoU;AsbHJ^ kd-l!$YYr|L7#K2M=_{K5Il1)9$$20VPgg&ebxsLQ04D70`~Uy| diff --git a/core/assets/shaders/blockbuild.frag b/core/assets/shaders/blockbuild.frag index 6009ea6e27..78cfd6e9c8 100644 --- a/core/assets/shaders/blockbuild.frag +++ b/core/assets/shaders/blockbuild.frag @@ -18,11 +18,13 @@ bool id(vec2 coords, vec4 base){ } bool cont(vec2 T, vec2 v){ - const float step = 3.0; + const float step = 3.5; vec4 base = texture2D(u_texture, T); return base.a > 0.1 && (id(T + vec2(0, step) * v, base) || id(T + vec2(0, -step) * v, base) || - id(T + vec2(step, 0) * v, base) || id(T + vec2(-step, 0) * v, base)); + id(T + vec2(step, 0) * v, base) || id(T + vec2(-step, 0) * v, base) || + id(T + vec2(step, step) * v, base) || id(T + vec2(step, -step) * v, base) || + id(T + vec2(-step, -step) * v, base) || id(T + vec2(-step, step) * v, base)); } void main(){ @@ -42,7 +44,7 @@ void main(){ gl_FragColor = v_color; }else if(dst > (1.0-u_progress) * (center.x)){ gl_FragColor = color; - }else if((dst + 1.0 > (1.0-u_progress) * (center.x)) && color.a > 0.1){ + }else if((dst + 2.0 > (1.0-u_progress) * (center.x)) && color.a > 0.1){ gl_FragColor = v_color; }else{ gl_FragColor = vec4(0.0); diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 179359cf38..8f15f5232e 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3322,7 +3322,7 @@ public class Blocks{ size = 5; droneType = UnitTypes.manifold; plans.add(new AssemblerUnitPlan(UnitTypes.vanquish, 60f * 5f, BlockStack.list(Blocks.thoriumWallLarge, 4, Blocks.duct, 2))); - consumes.power(1f); + consumes.power(2f); areaSize = 13; droneType = UnitTypes.assemblyDrone; @@ -3330,6 +3330,7 @@ public class Blocks{ basicAssemblerModule = new UnitAssemblerModule("basic-assembler-module"){{ requirements(Category.units, with(Items.graphite, 10)); + consumes.power(0.5f); size = 3; }}; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index c044c43915..1744b616d3 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -292,6 +292,14 @@ public class Fx{ Lines.poly(e.x, e.y, 4, 5f + e.fin() * 12f); }), + unitAssemble = new Effect(70, e -> { + if(!(e.data instanceof Unit unit)) return; + + alpha(e.fout()); + mixcol(Pal.accent, e.fout()); + rect(unit.type.fullIcon, unit.x, unit.y, unit.rotation - 90); + }).layer(Layer.flyingUnit + 5f), + padlaunch = new Effect(10, e -> { stroke(4f * e.fout()); color(Pal.accent); diff --git a/core/src/mindustry/world/blocks/units/UnitAssembler.java b/core/src/mindustry/world/blocks/units/UnitAssembler.java index 41ea60d383..32de299615 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssembler.java +++ b/core/src/mindustry/world/blocks/units/UnitAssembler.java @@ -95,6 +95,11 @@ public class UnitAssembler extends PayloadBlock{ Draw.rect(topRegion, plan.drawx(), plan.drawy()); } + @Override + public TextureRegion[] icons(){ + return new TextureRegion[]{region, sideRegion1, topRegion}; + } + @Override public void init(){ clipSize = Math.max(clipSize, (areaSize + size) * tilesize * 2); @@ -338,10 +343,10 @@ public class UnitAssembler extends PayloadBlock{ unit.set(spawn.x + Mathf.range(0.001f), spawn.y + Mathf.range(0.001f)); unit.rotation = 90f; //TODO annoying so nothing is created yet - //unit.add(); + unit.add(); progress = 0f; - Fx.spawn.at(unit); + Fx.unitAssemble.at(unit.x, unit.y, 0f, unit); blocks.clear(); } @@ -383,21 +388,43 @@ public class UnitAssembler extends PayloadBlock{ } Vec2 spawn = getUnitSpawn(); - - Draw.alpha(progress); + float sx = spawn.x, sy = spawn.y; var plan = plan(); - Draw.rect(plan.unit.fullIcon, spawn.x, spawn.y); + Draw.draw(Layer.blockBuilding, () -> { + Draw.color(Pal.accent, warmup); + + Shaders.blockbuild.region = plan.unit.fullIcon; + Shaders.blockbuild.time = Time.time; + //margin due to units not taking up whole region + Shaders.blockbuild.progress = Mathf.clamp(progress + 0.05f); + + Draw.rect(plan.unit.fullIcon, sx, sy); + Draw.flush(); + Draw.color(); + }); + + /* + Tmp.tr1.set(plan.unit.fullIcon); + Tmp.tr1.setY(Tmp.tr1.getY() + plan.unit.fullIcon.height * (1f - progress)); + + //TODO what if building animation + Draw.rect(Tmp.tr1, spawn.x, spawn.y + (Tmp.tr1.height/2f - plan.unit.fullIcon.height/2f) * Draw.scl, Tmp.tr1.width * Draw.scl, Tmp.tr1.height * Draw.scl); + Lines.stroke(1f, Pal.accent); + Draw.alpha(warmup); + Lines.lineAngleCenter(spawn.x, spawn.y - plan.unit.fullIcon.height/2f * Draw.scl + plan.unit.fullIcon.height * progress * Draw.scl, 0f, plan.unit.fullIcon.width * 0.9f * Draw.scl);*/ + + Draw.reset(); Draw.z(Layer.buildBeam); //draw unit outline Draw.mixcol(Tmp.c1.set(Pal.accent).lerp(Pal.remove, invalidWarmup), 1f); - Draw.alpha(0.8f + Mathf.absin(10f, 0.2f)); Draw.rect(plan.unit.fullIcon, spawn.x, spawn.y); - Draw.alpha(warmup * Draw.getColor().a); + //build beams do not draw when invalid + Draw.alpha(Math.min(1f - invalidWarmup, warmup)); //draw build beams for(var unit : units){ @@ -424,9 +451,11 @@ public class UnitAssembler extends PayloadBlock{ float outSize = plan.unit.hitSize + 9f; - //draw small square for area - Lines.stroke(2f, Tmp.c3.set(Pal.accent).lerp(Pal.remove, invalidWarmup).a(efficiency())); - Drawf.dashSquareBasic(spawn.x, spawn.y, outSize); + if(invalidWarmup > 0){ + //draw small square for area + Lines.stroke(2f, Tmp.c3.set(Pal.accent).lerp(Pal.remove, invalidWarmup).a(invalidWarmup)); + Drawf.dashSquareBasic(spawn.x, spawn.y, outSize); + } Draw.reset(); } diff --git a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java index 0ec38f6054..5522e00298 100644 --- a/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java +++ b/core/src/mindustry/world/blocks/units/UnitAssemblerModule.java @@ -3,6 +3,8 @@ package mindustry.world.blocks.units; import arc.graphics.g2d.*; import arc.util.*; import mindustry.*; +import mindustry.annotations.Annotations.*; +import mindustry.entities.units.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -14,6 +16,9 @@ import mindustry.world.meta.*; import static mindustry.Vars.*; public class UnitAssemblerModule extends PayloadBlock{ + public @Load("@-side1") TextureRegion sideRegion1; + public @Load("@-side2") TextureRegion sideRegion2; + public int tier = 1; public UnitAssemblerModule(String name){ @@ -38,6 +43,18 @@ public class UnitAssemblerModule extends PayloadBlock{ return getLink(team, tile.x, tile.y, rotation) != null; } + @Override + public void drawRequestRegion(BuildPlan plan, Eachable list){ + Draw.rect(region, plan.drawx(), plan.drawy()); + Draw.rect(plan.rotation >= 2 ? sideRegion2 : sideRegion1, plan.drawx(), plan.drawy(), plan.rotation * 90); + Draw.rect(topRegion, plan.drawx(), plan.drawy()); + } + + @Override + public TextureRegion[] icons(){ + return new TextureRegion[]{region, sideRegion1, topRegion}; + } + public @Nullable UnitAssemblerBuild getLink(Team team, int x, int y, int rotation){ var results = Vars.indexer.getFlagged(team, BlockFlag.unitAssembler).as(); @@ -73,6 +90,8 @@ public class UnitAssemblerModule extends PayloadBlock{ } } + Draw.rect(rotation >= 2 ? sideRegion2 : sideRegion1, x, y, rotdeg()); + Draw.z(Layer.blockOver); payRotation = rotdeg(); drawPayload(); @@ -109,7 +128,7 @@ public class UnitAssemblerModule extends PayloadBlock{ findLink(); } - if(moveInPayload() && link != null && link.moduleFits(block, x, y, rotation) && link.acceptPayload(this, payload)){ + if(moveInPayload() && link != null && link.moduleFits(block, x, y, rotation) && link.acceptPayload(this, payload) && consValid()){ link.yeetPayload(payload); payload = null; } diff --git a/gradle.properties b/gradle.properties index 58a8d51b9f..ac850c3659 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=15f2f63a9f +archash=309d2fc02d