Search in sources :

Example 6 with TextureTransformation

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;
}
Also used : AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) Arrays(java.util.Arrays) Textures(logisticspipes.textures.Textures) Item(net.minecraft.item.Item) ItemOverrideList(net.minecraft.client.renderer.block.model.ItemOverrideList) Matrix4f(javax.vecmath.Matrix4f) ModelResourceLocation(net.minecraft.client.renderer.block.model.ModelResourceLocation) MinecraftForgeClient(net.minecraftforge.client.MinecraftForgeClient) Side(net.minecraftforge.fml.relauncher.Side) Map(java.util.Map) CoreUnroutedPipe(logisticspipes.pipes.basic.CoreUnroutedPipe) LogisticsRenderPipe(logisticspipes.renderer.LogisticsRenderPipe) ItemCameraTransforms(net.minecraft.client.renderer.block.model.ItemCameraTransforms) PipeBlockRequestTable(logisticspipes.pipes.PipeBlockRequestTable) I3DOperation(logisticspipes.proxy.object3d.interfaces.I3DOperation) VertexFormat(net.minecraft.client.renderer.vertex.VertexFormat) LogisticsBlockGenericPipe(logisticspipes.pipes.basic.LogisticsBlockGenericPipe) Collection(java.util.Collection) IModelState(net.minecraftforge.common.model.IModelState) BakedQuad(net.minecraft.client.renderer.block.model.BakedQuad) IModel(net.minecraftforge.client.model.IModel) List(java.util.List) SimpleServiceLocator(logisticspipes.proxy.SimpleServiceLocator) CoreRoutedPipe(logisticspipes.pipes.basic.CoreRoutedPipe) PipeRenderState(logisticspipes.renderer.state.PipeRenderState) ItemLogisticsPipe(logisticspipes.items.ItemLogisticsPipe) IBakedModel(net.minecraft.client.renderer.block.model.IBakedModel) IModel3D(logisticspipes.proxy.object3d.interfaces.IModel3D) IExtendedBlockState(net.minecraftforge.common.property.IExtendedBlockState) LPTranslation(logisticspipes.proxy.object3d.operation.LPTranslation) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) LPUVTransformationList(logisticspipes.proxy.object3d.operation.LPUVTransformationList) Function(java.util.function.Function) ArrayList(java.util.ArrayList) ICustomModelLoader(net.minecraftforge.client.model.ICustomModelLoader) Lists(com.google.common.collect.Lists) IResourceManager(net.minecraft.client.resources.IResourceManager) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) TextureAtlasSprite(net.minecraft.client.renderer.texture.TextureAtlasSprite) PerspectiveMapWrapper(net.minecraftforge.client.model.PerspectiveMapWrapper) TextureMap(net.minecraft.client.renderer.texture.TextureMap) EnumFacing(net.minecraft.util.EnumFacing) LPUVScale(logisticspipes.proxy.object3d.operation.LPUVScale) Maps(com.google.common.collect.Maps) BlockRenderLayer(net.minecraft.util.BlockRenderLayer) IBlockState(net.minecraft.block.state.IBlockState) LPBlocks(logisticspipes.LPBlocks) ForgeRegistries(net.minecraftforge.fml.common.registry.ForgeRegistries) ResourceLocation(net.minecraft.util.ResourceLocation) TextureTransformation(logisticspipes.proxy.object3d.interfaces.TextureTransformation) LPScale(logisticspipes.proxy.object3d.operation.LPScale) Cache(com.google.common.cache.Cache) Collections(java.util.Collections) IModel3D(logisticspipes.proxy.object3d.interfaces.IModel3D) LPUVScale(logisticspipes.proxy.object3d.operation.LPUVScale) TextureAtlasSprite(net.minecraft.client.renderer.texture.TextureAtlasSprite) EnumFacing(net.minecraft.util.EnumFacing) ArrayList(java.util.ArrayList) CoreRoutedPipe(logisticspipes.pipes.basic.CoreRoutedPipe) LPUVTransformationList(logisticspipes.proxy.object3d.operation.LPUVTransformationList) LPTranslation(logisticspipes.proxy.object3d.operation.LPTranslation) PipeBlockRequestTable(logisticspipes.pipes.PipeBlockRequestTable) TextureTransformation(logisticspipes.proxy.object3d.interfaces.TextureTransformation) LPScale(logisticspipes.proxy.object3d.operation.LPScale)

Example 7 with TextureTransformation

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();
    }
}
Also used : TextureTransformation(logisticspipes.proxy.object3d.interfaces.TextureTransformation) IExtendedBlockState(net.minecraftforge.common.property.IExtendedBlockState) ArrayList(java.util.ArrayList)

Aggregations

TextureTransformation (logisticspipes.proxy.object3d.interfaces.TextureTransformation)7 ArrayList (java.util.ArrayList)6 EnumFacing (net.minecraft.util.EnumFacing)5 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)5 Lists (com.google.common.collect.Lists)4 List (java.util.List)4 Map (java.util.Map)4 Nonnull (javax.annotation.Nonnull)4 I3DOperation (logisticspipes.proxy.object3d.interfaces.I3DOperation)4 IModel3D (logisticspipes.proxy.object3d.interfaces.IModel3D)4 LPScale (logisticspipes.proxy.object3d.operation.LPScale)4 LPTranslation (logisticspipes.proxy.object3d.operation.LPTranslation)4 BakedQuad (net.minecraft.client.renderer.block.model.BakedQuad)4 TextureMap (net.minecraft.client.renderer.texture.TextureMap)4 VertexFormat (net.minecraft.client.renderer.vertex.VertexFormat)4 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)4 Side (net.minecraftforge.fml.relauncher.Side)4 Arrays (java.util.Arrays)3 Collections (java.util.Collections)3 HashMap (java.util.HashMap)3