use of logisticspipes.proxy.object3d.interfaces.TextureTransformation in project LogisticsPipes by RS485.
the class LogisticsNewPipeModel method generatePipeRenderList.
private List<RenderEntry> generatePipeRenderList() {
ArrayList<RenderEntry> objectsToRender = new ArrayList<>();
if (getPipe() == null) {
System.out.println("'" + key + "' does not result in pipe");
} else if (getPipe() instanceof PipeBlockRequestTable) {
TextureTransformation icon = SimpleServiceLocator.cclProxy.createIconTransformer((TextureAtlasSprite) Textures.LOGISTICS_REQUEST_TABLE_NEW);
LogisticsNewSolidBlockWorldRenderer.BlockRotation rotation = LogisticsNewSolidBlockWorldRenderer.BlockRotation.ZERO;
// Draw
objectsToRender.add(new RenderEntry(LogisticsNewSolidBlockWorldRenderer.block.get(rotation), icon));
for (LogisticsNewSolidBlockWorldRenderer.CoverSides side : LogisticsNewSolidBlockWorldRenderer.CoverSides.values()) {
objectsToRender.add(new RenderEntry(LogisticsNewSolidBlockWorldRenderer.texturePlate_Outer.get(side).get(rotation), icon));
}
} else if (getPipe().getSpecialRenderer() != null) {
getPipe().getSpecialRenderer().renderToList(null, objectsToRender);
AxisAlignedBB[] bb = new AxisAlignedBB[1];
bb[0] = new AxisAlignedBB(0.5, 0.5, 0.5, 0.5, 0.5, 0.5);
objectsToRender.forEach(it -> bb[0] = bb[0].union(it.getModel().bounds().toAABB()));
double size = Math.max(Math.max(bb[0].maxX - bb[0].minX, bb[0].maxY - bb[0].minY), bb[0].maxZ - bb[0].minZ);
objectsToRender.replaceAll(it -> {
RenderEntry content = it.clone(new I3DOperation[] { new LPUVTransformationList(BASE_TEXTURE_TRANSFORM) });
content.getModel().apply(new LPScale(0.95 / size));
return content;
});
bb[0] = new AxisAlignedBB(0.5, 0.5, 0.5, 0.5, 0.5, 0.5);
objectsToRender.forEach(it -> bb[0] = bb[0].union(it.getModel().bounds().toAABB()));
objectsToRender.forEach(it -> it.getModel().apply(new LPTranslation(0.5 - (bb[0].maxX + bb[0].minX) / 2, 0.5 - (bb[0].maxY + bb[0].minY) / 2, 0.5 - (bb[0].maxZ + bb[0].minZ) / 2)));
} else {
if (getPipe() instanceof CoreRoutedPipe) {
int red = 0;
boolean toggle = Math.random() < 0.5;
for (LogisticsNewRenderPipe.Corner corner : LogisticsNewRenderPipe.Corner.values()) {
final int fred = red;
final boolean ftoggle = toggle;
LogisticsNewRenderPipe.corners_M.get(corner).stream().map(model -> new RenderEntry(model, ftoggle && (fred % 4 == 0 || fred % 4 == 3) || !ftoggle && (fred % 4 == 1 || fred % 4 == 2) ? LogisticsNewRenderPipe.inactiveTexture : LogisticsNewRenderPipe.basicPipeTexture)).forEach(objectsToRender::add);
red++;
if (red > 3) {
red -= 4;
toggle = !toggle;
}
}
} else {
Arrays.stream(LogisticsNewRenderPipe.Corner.values()).flatMap(corner -> LogisticsNewRenderPipe.corners_M.get(corner).stream().map(model -> new RenderEntry(model, LogisticsNewRenderPipe.basicPipeTexture))).forEach(objectsToRender::add);
}
for (LogisticsNewRenderPipe.Edge edge : LogisticsNewRenderPipe.Edge.values()) {
objectsToRender.add(new RenderEntry(LogisticsNewRenderPipe.edges.get(edge), LogisticsNewRenderPipe.basicPipeTexture));
}
// ArrayList<Pair<CCModel, IconTransformation>> objectsToRender2 = new ArrayList<Pair<CCModel, IconTransformation>>();
for (EnumFacing dir : EnumFacing.VALUES) {
for (IModel3D model : LogisticsNewRenderPipe.texturePlate_Outer.get(dir)) {
TextureTransformation icon = Textures.LPnewPipeIconProvider.getIcon(getPipe().getTextureIndex());
if (icon != null) {
objectsToRender.add(new RenderEntry(model, new LPUVTransformationList(new LPUVScale(12f / 16, 12f / 16), icon)));
}
}
}
}
return objectsToRender;
}
use of logisticspipes.proxy.object3d.interfaces.TextureTransformation in project LogisticsPipes by RS485.
the class LogisticsNewPipeModel method generatePipeRenderList.
private List<RenderEntry> generatePipeRenderList(IBlockState blockstate) {
List<RenderEntry> objectsToRender = new ArrayList<>();
if (blockstate.getValue(LogisticsBlockGenericPipe.modelTypeProperty) == LogisticsBlockGenericPipe.PipeRenderModel.REQUEST_TABLE) {
TextureTransformation icon = SimpleServiceLocator.cclProxy.createIconTransformer((TextureAtlasSprite) Textures.LOGISTICS_REQUEST_TABLE_NEW);
LogisticsNewSolidBlockWorldRenderer.BlockRotation rotation = LogisticsNewSolidBlockWorldRenderer.BlockRotation.getRotation(blockstate.getValue(LogisticsBlockGenericPipe.rotationProperty));
// Draw
objectsToRender.add(new RenderEntry(LogisticsNewSolidBlockWorldRenderer.block.get(rotation), icon));
for (LogisticsNewSolidBlockWorldRenderer.CoverSides side : LogisticsNewSolidBlockWorldRenderer.CoverSides.values()) {
if (!blockstate.getValue(LogisticsBlockGenericPipe.connectionPropertys.get(side.getDir(rotation)))) {
objectsToRender.add(new RenderEntry(LogisticsNewSolidBlockWorldRenderer.texturePlate_Outer.get(side).get(rotation), icon));
}
}
} else if (blockstate instanceof IExtendedBlockState) {
IExtendedBlockState lpState = (IExtendedBlockState) blockstate;
objectsToRender = lpState.getValue(LogisticsBlockGenericPipe.propertyRenderList);
}
if (objectsToRender != null) {
return objectsToRender;
} else {
return Collections.emptyList();
}
}
Aggregations