From ddadbab74d781aa3e1f80ea8a98c04d54f2b2e26 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 8 Nov 2022 16:52:12 -0500 Subject: [PATCH] Canvas block blending --- .../sprites/blocks/logic/canvas-corner1.png | Bin 0 -> 174 bytes .../sprites/blocks/logic/canvas-corner2.png | Bin 0 -> 174 bytes .../sprites/blocks/logic/canvas-side1.png | Bin 0 -> 366 bytes .../sprites/blocks/logic/canvas-side2.png | Bin 0 -> 395 bytes core/src/mindustry/mod/Mod.java | 1 + core/src/mindustry/type/Planet.java | 2 +- .../world/blocks/logic/CanvasBlock.java | 49 ++++++++++++++++-- 7 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/logic/canvas-corner1.png create mode 100644 core/assets-raw/sprites/blocks/logic/canvas-corner2.png create mode 100644 core/assets-raw/sprites/blocks/logic/canvas-side1.png create mode 100644 core/assets-raw/sprites/blocks/logic/canvas-side2.png diff --git a/core/assets-raw/sprites/blocks/logic/canvas-corner1.png b/core/assets-raw/sprites/blocks/logic/canvas-corner1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c02a574b92f9fa77a574d7e43544faba0ce4d07 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|GCW-zLn`LH zy=utS;K0LjV9xpAfFswU{>)ig=dbOkZ7paV%vy9bm2-&;Q>pQr^t)w$*M{%?H=BRv z@{LP)6XqQgnpnbo?xC^}TY;>dQY6FeT~nTi+n4NR0ve43_LnlOoxskG4kf^7t KpUXO@geCwq`Z*W? literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/logic/canvas-corner2.png b/core/assets-raw/sprites/blocks/logic/canvas-corner2.png new file mode 100644 index 0000000000000000000000000000000000000000..351ae9dd57e783aaefa41d64489fd5764f40cea2 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|GCW-zLn`LH zy=utS;K0LjV9xt3V)Iq5ZBydjm7;w<^QVg6Sm|Lt*Kf92by zL?54I){raf?Q)6NqP^ck;y~$-jugf%zOnP-|6ceCasU$ebB*x}qhR;}5!VYKQBPMt Jmvv4FO#rxbI(7g6 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/logic/canvas-side1.png b/core/assets-raw/sprites/blocks/logic/canvas-side1.png new file mode 100644 index 0000000000000000000000000000000000000000..cb99ffcea052aface3b152d198acc74589388327 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zH9TD$Ln`LH zovkQz$U%TbTE@TQe73`JUtk2V3W;(Kv9>2Ka1vGzn{aBGnHMKaqFi9rG$Qw1$+zCSXVHw z@ML_&kQLNm)i4V#v{CGW>EiVb>m(U33qwtr!MS5@oqQXH5lej5u5U2f+VGOI<5PlG zLg!M3*Q*N>YgrStdRMSD$!51zR!BJr=f7RWQn=xQ|f-=K4)f>5eO+R1dY=~R9 eb&3ArKa3Nf+j;BXlbj60due;?=0DQ2ws|v5V=AgN5HZlxZnF=RP4ST)QNSirYH4KB2X_06j%+6m$ReNG@57k6#? z$yp%N5|kE%$oa7RapeeL57_ixJD&0PJ|-W32R;5}Ol=Wd8}@OfuW4V{^VMPw$O7+z zJ$YT#VoVEk4!SX%@!lZB@HkpQf~#Q%7xS~j0mrIj&b2U0R%!gvKP z)Z5x{{rU1$ThbL7P6>6Tz3Y5gTe~DWM4f)W(*2 literal 0 HcmV?d00001 diff --git a/core/src/mindustry/mod/Mod.java b/core/src/mindustry/mod/Mod.java index 4b1e8c45e7..d56ea9d526 100644 --- a/core/src/mindustry/mod/Mod.java +++ b/core/src/mindustry/mod/Mod.java @@ -5,6 +5,7 @@ import arc.util.*; import mindustry.*; public abstract class Mod{ + /** @return the config file for this plugin, as the file 'mods/[plugin-name]/config.json'.*/ public Fi getConfig(){ return Vars.mods.getConfig(this); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 90c2efa2df..4d05c58f55 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -234,7 +234,7 @@ public class Planet extends UnlockableContent{ return (orbitOffset + universe.secondsf() / (orbitTime / 360f)) % 360f; } - /** Calulates rotation on own axis based on universe time.*/ + /** Calculates rotation on own axis based on universe time.*/ public float getRotation(){ //tidally locked planets always face toward parents if(tidalLock){ diff --git a/core/src/mindustry/world/blocks/logic/CanvasBlock.java b/core/src/mindustry/world/blocks/logic/CanvasBlock.java index 9d1b445630..6f4ab93e1f 100644 --- a/core/src/mindustry/world/blocks/logic/CanvasBlock.java +++ b/core/src/mindustry/world/blocks/logic/CanvasBlock.java @@ -13,6 +13,7 @@ import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import arc.util.io.*; +import mindustry.annotations.Annotations.*; import mindustry.gen.*; import mindustry.ui.*; import mindustry.world.*; @@ -26,6 +27,12 @@ public class CanvasBlock extends Block{ public int bitsPerPixel; public IntIntMap colorToIndex = new IntIntMap(); + public @Load("@-side1") TextureRegion side1; + public @Load("@-side2") TextureRegion side2; + + public @Load("@-corner1") TextureRegion corner1; + public @Load("@-corner2") TextureRegion corner2; + public CanvasBlock(String name){ super(name); @@ -55,6 +62,7 @@ public class CanvasBlock extends Block{ public class CanvasBuild extends Building{ public @Nullable Texture texture; public byte[] data = new byte[Mathf.ceil(canvasSize * canvasSize * bitsPerPixel / 8f)]; + public int blending; public void updateTexture(){ if(headless) return; @@ -113,15 +121,48 @@ public class CanvasBlock extends Block{ } } + @Override + public void onProximityUpdate(){ + super.onProximityUpdate(); + + blending = 0; + for(int i = 0; i < 4; i++){ + if(blends(world.tile(tile.x + Geometry.d4[i].x * size, tile.y + Geometry.d4[i].y * size))) blending |= (1 << i); + } + } + + boolean blends(Tile other){ + return other != null && other.build != null && other.build.block == block && other.build.tileX() == other.x && other.build.tileY() == other.y; + } + @Override public void draw(){ - super.draw(); + if(blending == 0){ + super.draw(); + } if(texture == null){ updateTexture(); } Tmp.tr1.set(texture); - Draw.rect(Tmp.tr1, x, y, size * tilesize - padding, size * tilesize - padding); + float pad = blending == 0 ? padding : 0f; + + Draw.rect(Tmp.tr1, x, y, size * tilesize - pad, size * tilesize - pad); + for(int i = 0; i < 4; i ++){ + if((blending & (1 << i)) == 0){ + Draw.rect(i >= 2 ? side2 : side1, x, y, i * 90); + + if((blending & (1 << ((i + 1) % 4))) != 0){ + Draw.rect(i >= 2 ? corner2 : corner1, x, y, i * 90); + } + + if((blending & (1 << (Mathf.mod(i - 1, 4)))) != 0){ + Draw.yscl = -1f; + Draw.rect(i >= 2 ? corner2 : corner1, x, y, i * 90); + Draw.yscl = 1f; + } + } + } } @Override @@ -143,9 +184,7 @@ public class CanvasBlock extends Block{ int[] curColor = {palette[0]}; boolean[] modified = {false}; - dialog.resized(() -> { - dialog.hide(); - }); + dialog.resized(dialog::hide); dialog.cont.table(Tex.pane, body -> { body.stack(new Element(){