Add basic support for banner rendering

This commit is contained in:
Mike Primm 2021-06-26 18:15:20 -05:00
parent 049bbeda83
commit 31bbe96051
5 changed files with 58 additions and 9 deletions

View File

@ -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];
}
}

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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);