use of logisticspipes.proxy.object3d.operation.LPTranslation in project LogisticsPipes by RS485.
the class LogisticsNewSolidBlockWorldRenderer method computeRotated.
private static Map<BlockRotation, IModel3D> computeRotated(IModel3D m) {
m.apply(new LPUVScale(1, 0.75));
Map<BlockRotation, IModel3D> map = new HashMap<>();
for (BlockRotation rot : BlockRotation.values()) {
IModel3D model = m.copy();
switch(rot.getInteger()) {
case 0:
model.apply(LPRotation.sideOrientation(0, 3));
model.apply(new LPTranslation(0, 0, 1));
break;
case 1:
model.apply(LPRotation.sideOrientation(0, 1));
model.apply(new LPTranslation(1, 0, 0));
break;
case 2:
break;
case 3:
model.apply(LPRotation.sideOrientation(0, 2));
model.apply(new LPTranslation(1, 0, 1));
break;
}
model.computeNormals();
model.computeStandardLighting();
map.put(rot, model);
}
return map;
}
use of logisticspipes.proxy.object3d.operation.LPTranslation in project LogisticsPipes by RS485.
the class LogisticsNewSolidBlockWorldRenderer method renderWorldBlock.
public void renderWorldBlock(IBlockAccess world, LogisticsSolidTileEntity blockTile, RenderBlocks renderer, int x, int y, int z) {
Tessellator tess = Tessellator.instance;
SimpleServiceLocator.cclProxy.getRenderState().reset();
SimpleServiceLocator.cclProxy.getRenderState().setUseNormals(true);
SimpleServiceLocator.cclProxy.getRenderState().setAlphaOverride(0xff);
BlockRotation rotation = BlockRotation.ZERO;
int brightness = 0;
IIconTransformation icon;
if (blockTile != null) {
BlockRotation.getRotation(blockTile.getRotation());
brightness = new DoubleCoordinates(blockTile).getBlock(world).getMixedBrightnessForBlock(world, blockTile.xCoord, blockTile.yCoord, blockTile.zCoord);
icon = SimpleServiceLocator.cclProxy.createIconTransformer(LogisticsSolidBlock.getNewIcon(world, blockTile.xCoord, blockTile.yCoord, blockTile.zCoord));
} else {
brightness = LogisticsPipes.LogisticsSolidBlock.getMixedBrightnessForBlock(world, x, y, z);
icon = SimpleServiceLocator.cclProxy.createIconTransformer(LogisticsSolidBlock.getNewIcon(world, x, y, z));
}
tess.setColorOpaque_F(1F, 1F, 1F);
tess.setBrightness(brightness);
//Draw
LogisticsNewSolidBlockWorldRenderer.block.get(rotation).render(new LPTranslation(x, y, z), icon);
if (blockTile != null) {
DoubleCoordinates pos = new DoubleCoordinates(blockTile);
for (CoverSides side : CoverSides.values()) {
boolean render = true;
DoubleCoordinates newPos = CoordinateUtils.sum(pos, side.getDir(rotation));
TileEntity sideTile = newPos.getTileEntity(blockTile.getWorldObj());
if (sideTile instanceof LogisticsTileGenericPipe) {
LogisticsTileGenericPipe tilePipe = (LogisticsTileGenericPipe) sideTile;
if (tilePipe.renderState.pipeConnectionMatrix.isConnected(side.getDir(rotation).getOpposite())) {
render = false;
}
}
if (render) {
LogisticsNewSolidBlockWorldRenderer.texturePlate_Outer.get(side).get(rotation).render(new LPTranslation(x, y, z), icon);
LogisticsNewSolidBlockWorldRenderer.texturePlate_Inner.get(side).get(rotation).render(new LPTranslation(x, y, z), icon);
}
}
}
}
use of logisticspipes.proxy.object3d.operation.LPTranslation in project LogisticsPipes by RS485.
the class CurveTubeRenderer method loadModels.
public static void loadModels() {
try {
Map<String, IModel3D> pipePartModels = SimpleServiceLocator.cclProxy.parseObjModels(LogisticsPipes.class.getResourceAsStream("/logisticspipes/models/HSTube-Turn_result.obj"), 7, new LPScale(1 / 100f));
//tubeTurnMounts
for (TurnDirection turn : TurnDirection.values()) {
CurveTubeRenderer.tubeTurnBase.put(turn, new ArrayList<>());
}
pipePartModels.entrySet().stream().filter(entry -> entry.getKey().startsWith("Lane ") || entry.getKey().contains(" Lane ") || entry.getKey().endsWith(" Lane")).forEach(entry -> {
CurveTubeRenderer.tubeTurnBase.get(TurnDirection.SOUTH_WEST).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(0.0, 0.0, 0.0)).apply(new LPRotation(-Math.PI / 2, 0, 1, 0))));
CurveTubeRenderer.tubeTurnBase.get(TurnDirection.EAST_SOUTH).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(0.0, 0.0, 1.0))));
CurveTubeRenderer.tubeTurnBase.get(TurnDirection.NORTH_EAST).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(-1.0, 0.0, 1.0)).apply(new LPRotation(Math.PI / 2, 0, 1, 0))));
CurveTubeRenderer.tubeTurnBase.get(TurnDirection.WEST_NORTH).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(-1.0, 0.0, 0.0)).apply(new LPRotation(Math.PI, 0, 1, 0))));
});
if (CurveTubeRenderer.tubeTurnBase.get(TurnDirection.NORTH_EAST).size() != 4) {
throw new RuntimeException("Couldn't load Tube Lanes. Only loaded " + CurveTubeRenderer.tubeTurnBase.get(TurnDirection.NORTH_EAST).size());
}
for (TurnDirection turn : TurnDirection.values()) {
CurveTubeRenderer.tubeCurve.put(turn, SimpleServiceLocator.cclProxy.combine(CurveTubeRenderer.tubeTurnBase.get(turn)));
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
use of logisticspipes.proxy.object3d.operation.LPTranslation in project LogisticsPipes by RS485.
the class GainTubeRenderer method loadModels.
public static void loadModels() {
try {
Map<String, IModel3D> pipePartModels = SimpleServiceLocator.cclProxy.parseObjModels(LogisticsPipes.class.getResourceAsStream("/logisticspipes/models/HSTube-Gain_result.obj"), 7, new LPScale(1 / 100f));
//tubeTurnMounts
for (TubeGainRenderOrientation turn : TubeGainRenderOrientation.values()) {
GainTubeRenderer.tubeTurnBase.put(turn, new ArrayList<>());
}
pipePartModels.entrySet().stream().filter(entry -> entry.getKey().startsWith("Lane ") || entry.getKey().contains(" Lane ") || entry.getKey().endsWith(" Lane")).forEach(entry -> {
GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.EAST).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(0.0, 0.0, 0.0)).apply(new LPRotation(-Math.PI / 2, 0, 1, 0))));
GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.NORTH).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(0.0, 0.0, 1.0))));
GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.WEST).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(-1.0, 0.0, 1.0)).apply(new LPRotation(Math.PI / 2, 0, 1, 0))));
GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.SOUTH).add(LogisticsNewRenderPipe.compute(entry.getValue().twoFacedCopy().apply(new LPTranslation(-1.0, 0.0, 0.0)).apply(new LPRotation(Math.PI, 0, 1, 0))));
});
if (GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.NORTH).size() != 4) {
throw new RuntimeException("Couldn't load Tube Lanes. Only loaded " + GainTubeRenderer.tubeTurnBase.get(TubeGainRenderOrientation.NORTH).size());
}
for (TubeGainRenderOrientation turn : TubeGainRenderOrientation.values()) {
GainTubeRenderer.tubeGain.put(turn, SimpleServiceLocator.cclProxy.combine(GainTubeRenderer.tubeTurnBase.get(turn)));
}
} catch (Throwable e) {
throw new RuntimeException(e);
}
}
use of logisticspipes.proxy.object3d.operation.LPTranslation in project LogisticsPipes by RS485.
the class LogisticsNewPipeWorldRenderer method renderWorldBlock.
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
Tessellator tess = Tessellator.instance;
TileEntity tile = world.getTileEntity(x, y, z);
LogisticsTileGenericPipe pipeTile = (LogisticsTileGenericPipe) tile;
PipeRenderState renderState = pipeTile.renderState;
if (pipeTile.pipe instanceof PipeBlockRequestTable) {
if (LogisticsPipeWorldRenderer.renderPass != 0) {
return false;
}
IIconProvider icons = pipeTile.getPipeIcons();
if (icons == null) {
return false;
}
if (requestBlock == null || true) {
requestBlock = new HashMap<>();
for (BlockRotation rot : BlockRotation.values()) {
requestBlock.put(rot, LogisticsNewSolidBlockWorldRenderer.block.get(rot).copy().apply(new LPScale(0.999)).apply(new LPTranslation(0.0005, 0.0005, 0.0005)));
}
}
SimpleServiceLocator.cclProxy.getRenderState().reset();
SimpleServiceLocator.cclProxy.getRenderState().setUseNormals(true);
SimpleServiceLocator.cclProxy.getRenderState().setAlphaOverride(0xff);
BlockRotation rotation = BlockRotation.getRotation(((PipeBlockRequestTable) pipeTile.pipe).getRotation());
int brightness = new DoubleCoordinates(x, y, z).getBlock(world).getMixedBrightnessForBlock(world, x, y, z);
tess.setColorOpaque_F(1F, 1F, 1F);
tess.setBrightness(brightness);
IIconTransformation icon = SimpleServiceLocator.cclProxy.createIconTransformer(Textures.LOGISTICS_REQUEST_TABLE_NEW);
requestBlock.get(rotation).render(new LPTranslation(x, y, z), icon);
for (CoverSides side : CoverSides.values()) {
if (!pipeTile.renderState.pipeConnectionMatrix.isConnected(side.getDir(rotation))) {
LogisticsNewSolidBlockWorldRenderer.texturePlate_Outer.get(side).get(rotation).render(new LPTranslation(x, y, z), icon);
LogisticsNewSolidBlockWorldRenderer.texturePlate_Inner.get(side).get(rotation).render(new LPTranslation(x, y, z), icon);
}
}
return true;
}
boolean hasRendered = false;
tess.addTranslation(0.00002F, 0.00002F, 0.00002F);
renderer.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
if (pipeTile.tilePart.hasPipePluggable(dir)) {
IBCPipePluggable p = pipeTile.tilePart.getBCPipePluggable(dir);
p.renderPluggable(renderer, dir, LogisticsPipeWorldRenderer.renderPass, x, y, z);
hasRendered = true;
}
}
tess.addTranslation(-0.00002F, -0.00002F, -0.00002F);
boolean[] solidSides = new boolean[6];
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
DoubleCoordinates pos = CoordinateUtils.add(new DoubleCoordinates((TileEntity) pipeTile), dir);
Block blockSide = pos.getBlock(pipeTile.getWorldObj());
if (blockSide != null && blockSide.isSideSolid(pipeTile.getWorldObj(), pos.getXInt(), pos.getYInt(), pos.getZInt(), dir.getOpposite()) && !renderState.pipeConnectionMatrix.isConnected(dir)) {
solidSides[dir.ordinal()] = true;
}
}
if (!Arrays.equals(solidSides, renderState.solidSidesCache)) {
renderState.solidSidesCache = solidSides.clone();
renderState.cachedRenderer = null;
}
if (hasRendered) {
block.setBlockBounds(0, 0, 0, 0, 0, 0);
renderer.setRenderBoundsFromBlock(block);
renderer.renderStandardBlock(block, x, y, z);
block.setBlockBounds(0, 0, 0, 1, 1, 1);
}
return hasRendered;
}
Aggregations