From 31bbe9605100695f14f76fcda7f109b709054130 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sat, 26 Jun 2021 18:15:20 -0500 Subject: [PATCH] Add basic support for banner rendering --- .../dynmap/hdmap/renderer/CuboidRenderer.java | 32 ++++++++++++++++--- .../org/dynmap/utils/PatchDefinition.java | 9 ++++-- DynmapCore/src/main/resources/models_1.txt | 5 ++- DynmapCore/src/main/resources/texture_1.txt | 19 +++++++++++ .../dynmap/renderer/RenderPatchFactory.java | 2 +- 5 files changed, 58 insertions(+), 9 deletions(-) diff --git a/DynmapCore/src/main/java/org/dynmap/hdmap/renderer/CuboidRenderer.java b/DynmapCore/src/main/java/org/dynmap/hdmap/renderer/CuboidRenderer.java index 9f2a000b..d3bfc14f 100644 --- a/DynmapCore/src/main/java/org/dynmap/hdmap/renderer/CuboidRenderer.java +++ b/DynmapCore/src/main/java/org/dynmap/hdmap/renderer/CuboidRenderer.java @@ -17,7 +17,7 @@ import org.dynmap.renderer.RenderPatchFactory.SideVisible; * Each crossed-patch is provided with two corner offsets within the cube (xmin,ymin,zmin) and (xmax,ymax,zmax), and a single patch index (default is 0) */ public class CuboidRenderer extends CustomRenderer { - private RenderPatch[] model; + private RenderPatch[][] models; private int textureCount; private static final int[] crossedPatchDefault = { 0 }; @@ -84,9 +84,32 @@ public class CuboidRenderer extends CustomRenderer { CustomRenderer.addBox(rpf, list, xmin, xmax, ymin, ymax, zmin, zmax, patches); } } - } - model = list.toArray(new RenderPatch[list.size()]); + } + RenderPatch[] model = list.toArray(new RenderPatch[list.size()]); + String rotlist = custparm.get("rotlist"); // See if we have a rotation list + if (rotlist != null) { + String[] pidx = rotlist.split(":"); // Get list + models = new RenderPatch[pidx.length][]; + for (int idx = 0; idx < pidx.length; idx++) { + int rot = Integer.parseInt(pidx[idx]); + + models[idx] = new RenderPatch[model.length]; + if (rot != 0) { + for (int i = 0; i < model.length; i++) { + models[idx][i] = rpf.getRotatedPatch(model[i], 0, rot, 0, -1); + } + } + else { + models[idx] = model; + } + } + } + else { + models = new RenderPatch[1][]; + models[0] = model; + } + return true; } @@ -97,6 +120,7 @@ public class CuboidRenderer extends CustomRenderer { @Override public RenderPatch[] getRenderPatchList(MapDataContext ctx) { - return model; + int idx = ctx.getBlockType().stateIndex; + return models[idx % models.length]; } } diff --git a/DynmapCore/src/main/java/org/dynmap/utils/PatchDefinition.java b/DynmapCore/src/main/java/org/dynmap/utils/PatchDefinition.java index 903a5703..839f543a 100644 --- a/DynmapCore/src/main/java/org/dynmap/utils/PatchDefinition.java +++ b/DynmapCore/src/main/java/org/dynmap/utils/PatchDefinition.java @@ -61,8 +61,11 @@ public class PatchDefinition implements RenderPatch { /** * Construct patch, based on rotation of existing patch clockwise by N * 90 degree steps - * @param orig - * @param rotate_cnt + * @param orig - original patch to copy and rotate + * @param rotatex - x rotation in degrees + * @param rotatey - y rotation in degrees + * @param rotatez - z rotation in degrees + * @param textureindex - texture index for new patch (-1 = use same as original patch) */ PatchDefinition(PatchDefinition orig, int rotatex, int rotatey, int rotatez, int textureindex) { Vector3D vec = new Vector3D(orig.x0, orig.y0, orig.z0); @@ -81,7 +84,7 @@ public class PatchDefinition implements RenderPatch { vmaxatumax = orig.vmaxatumax; vminatumax = orig.vminatumax; sidevis = orig.sidevis; - this.textureindex = textureindex; + this.textureindex = (textureindex < 0) ? orig.textureindex : textureindex; u = new Vector3D(); v = new Vector3D(); update(); diff --git a/DynmapCore/src/main/resources/models_1.txt b/DynmapCore/src/main/resources/models_1.txt index ab46a112..5daca36a 100644 --- a/DynmapCore/src/main/resources/models_1.txt +++ b/DynmapCore/src/main/resources/models_1.txt @@ -1293,6 +1293,10 @@ boxblock:id=conduit,xmin=0.3125,xmax=0.6875,ymin=0.3125,ymax=0.6875,zmin=0.3125, # Brown huge mushroom customblock:id=red_mushroom_block,id=brown_mushroom_block,class=org.dynmap.hdmap.renderer.MushroomStateRenderer +# Banners +customblock:id=white_banner,id=orange_banner,id=magenta_banner,id=light_blue_banner,id=yellow_banner,id=lime_banner,id=pink_banner,id=gray_banner,id=light_gray_banner,id=cyan_banner,id=purple_banner,id=blue_banner,id=brown_banner,id=green_banner,id=red_banner,id=black_banner,data=0-15,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0.46:0:0.46/0.54:1.0:0.54/0:0:0:0:0:0,cuboid1=0:0.96:0.46/1.0:1.0:0.54/0:0:0:0:0:0,cuboid2=0:0.25:0.54/1.0:1.0:0.58/1:1:1:1:1:1,rotlist=0:22:45:68:90:112:135:158:180:202:225:248:270:292:315:338 +customblock:id=white_wall_banner,id=orange_wall_banner,id=magenta_wall_banner,id=light_blue_wall_banner,id=yellow_wall_banner,id=lime_wall_banner,id=pink_wall_banner,id=gray_wall_banner,id=light_gray_wall_banner,id=cyan_wall_banner,id=purple_wall_banner,id=blue_wall_banner,id=brown_wall_banner,id=green_wall_banner,id=red_wall_banner,id=black_wall_banner,data=0-3,class=org.dynmap.hdmap.renderer.CuboidRenderer,cuboid0=0:0.83:0.96/1.0:0.875:1.0/0:0:0:0:0:0,cuboid1=0:0.0:0.92/1.0:0.875:0.96/1:1:1:1:1:1,rotlist=0:180:270:90 + # 1.13.1 blocks # Dead tube coral @@ -1679,4 +1683,3 @@ patchblock:id=bubble_column [1.17-]boxblock:id=moss_carpet,ymax=0.0625 # Pointed dripstone [1.17-]patchblock:id=pointed_dripstone,patch0=VertX1Z0ToX0Z1,patch1=VertX1Z0ToX0Z1@90 - diff --git a/DynmapCore/src/main/resources/texture_1.txt b/DynmapCore/src/main/resources/texture_1.txt index 4d5e0f07..5a5ef1d2 100644 --- a/DynmapCore/src/main/resources/texture_1.txt +++ b/DynmapCore/src/main/resources/texture_1.txt @@ -2080,6 +2080,24 @@ block:id=fire_coral,patch0-1=0:fire_coral,transparency=TRANSPARENT # Horn coral block:id=horn_coral,patch0-1=0:horn_coral,transparency=TRANSPARENT +# Banners +block:id=white_banner,id=white_wall_banner,data=*,patch0=0:oak_planks,patch1=0:white_wool,transparency=TRANSPARENT +block:id=orange_banner,id=orange_wall_banner,data=*,patch0=0:oak_planks,patch1=0:orange_wool,transparency=TRANSPARENT +block:id=magenta_banner,id=magenta_wall_banner,data=*,patch0=0:oak_planks,patch1=0:magenta_wool,transparency=TRANSPARENT +block:id=light_blue_banner,id=light_blue_wall_banner,data=*,patch0=0:oak_planks,patch1=0:light_blue_wool,transparency=TRANSPARENT +block:id=yellow_banner,id=yellow_wall_banner,data=*,patch0=0:oak_planks,patch1=0:yellow_wool,transparency=TRANSPARENT +block:id=lime_banner,id=lime_wall_banner,data=*,patch0=0:oak_planks,patch1=0:lime_wool,transparency=TRANSPARENT +block:id=pink_banner,id=pink_wall_banner,data=*,patch0=0:oak_planks,patch1=0:pink_wool,transparency=TRANSPARENT +block:id=gray_banner,id=gray_wall_banner,data=*,patch0=0:oak_planks,patch1=0:gray_wool,transparency=TRANSPARENT +block:id=light_gray_banner,id=light_gray_wall_banner,data=*,patch0=0:oak_planks,patch1=0:light_gray_wool,transparency=TRANSPARENT +block:id=cyan_banner,id=cyan_wall_banner,data=*,patch0=0:oak_planks,patch1=0:cyan_wool,transparency=TRANSPARENT +block:id=purple_banner,id=purple_wall_banner,data=*,patch0=0:oak_planks,patch1=0:purple_wool,transparency=TRANSPARENT +block:id=blue_banner,id=blue_wall_banner,data=*,patch0=0:oak_planks,patch1=0:blue_wool,transparency=TRANSPARENT +block:id=brown_banner,id=brown_wall_banner,data=*,patch0=0:oak_planks,patch1=0:brown_wool,transparency=TRANSPARENT +block:id=green_banner,id=green_wall_banner,data=*,patch0=0:oak_planks,patch1=0:green_wool,transparency=TRANSPARENT +block:id=red_banner,id=red_wall_banner,data=*,patch0=0:oak_planks,patch1=0:red_wool,transparency=TRANSPARENT +block:id=black_banner,id=black_wall_banner,data=*,patch0=0:oak_planks,patch1=0:black_wool,transparency=TRANSPARENT + # Dead tube coral [1.13.1-]block:id=dead_tube_coral,patch0-1=0:dead_tube_coral,transparency=TRANSPARENT @@ -2101,6 +2119,7 @@ block:id=horn_coral,patch0-1=0:horn_coral,transparency=TRANSPARENT [-1.13.2]block:id=wall_sign,patch0=0,patch1=1,patch2=2,patch3=3,patch4=4,patch5=5,transparency=TRANSPARENT,txtid=sign + [1.14-]texture:id=cornflower [1.14-]texture:id=wither_rose [1.14-]texture:id=lily_of_the_valley diff --git a/DynmapCoreAPI/src/main/java/org/dynmap/renderer/RenderPatchFactory.java b/DynmapCoreAPI/src/main/java/org/dynmap/renderer/RenderPatchFactory.java index b58d2a39..0db8915b 100644 --- a/DynmapCoreAPI/src/main/java/org/dynmap/renderer/RenderPatchFactory.java +++ b/DynmapCoreAPI/src/main/java/org/dynmap/renderer/RenderPatchFactory.java @@ -94,7 +94,7 @@ public interface RenderPatchFactory { * @param xrot - degrees to rotate around X * @param yrot - degrees to rotate around Y * @param zrot - degrees to rotate around Z - * @param textureidx - texture index to be used for rotated patch + * @param textureidx - texture index to be used for rotated patch (-1 means same as original patch) * @return patch requested */ public RenderPatch getRotatedPatch(RenderPatch patch, int xrot, int yrot, int zrot, int textureidx);