Package mods.railcraft.client.render

Source Code of mods.railcraft.client.render.RenderTrack

/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.client.render;

import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import net.minecraft.block.Block;
import net.minecraft.world.IBlockAccess;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import mods.railcraft.api.tracks.ITrackInstance;
import mods.railcraft.api.tracks.ITrackSwitch;
import mods.railcraft.common.blocks.RailcraftBlocks;
import mods.railcraft.common.blocks.tracks.TileTrack;
import mods.railcraft.common.blocks.tracks.TrackGated;
import net.minecraft.block.BlockRailBase;
import net.minecraft.init.Blocks;

public class RenderTrack implements ISimpleBlockRenderingHandler {

    @Override
    public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {
    }

    @Override
    public boolean shouldRender3DInInventory(int modelId) {
        return false;
    }

    @Override
    public int getRenderId() {
        return RailcraftBlocks.getBlockTrack().getRenderType();
    }

    @Override
    public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderblocks) {
        int meta = ((BlockRailBase) block).getBasicRailMetadata(world, null, x, y, z);

        IIcon icon;
        TileEntity tile = world.getTileEntity(x, y, z);
        ITrackInstance track = null;
        if (tile instanceof TileTrack) {
            track = ((TileTrack) tile).getTrackInstance();
            icon = renderblocks.getIconSafe(track.getIcon());
        } else {
            icon = Blocks.rail.getIcon(0, 0);
        }

        if (renderblocks.hasOverrideBlockTexture()) {
            icon = renderblocks.overrideBlockTexture;
        }

        float minU = icon.getMinU();
        float minV = icon.getMinV();
        float maxU = icon.getMaxU();
        float maxV = icon.getMaxV();
        double pix = 0.0625D;
        double vertX1 = x + 1;
        double vertX2 = x + 1;
        double vertX3 = x + 0;
        double vertX4 = x + 0;
        double vertZ1 = z + 0;
        double vertZ2 = z + 1;
        double vertZ3 = z + 1;
        double vertZ4 = z + 0;
        double vertY1 = y + pix;
        double vertY2 = y + pix;
        double vertY3 = y + pix;
        double vertY4 = y + pix;
        if (meta != 1 && meta != 2 && meta != 3 && meta != 7) {
            if (meta == 8) {
                vertX1 = vertX2 = x + 0;
                vertX3 = vertX4 = x + 1;
                vertZ1 = vertZ4 = z + 1;
                vertZ2 = vertZ3 = z + 0;
            } else if (meta == 9) {
                vertX1 = vertX4 = x + 0;
                vertX2 = vertX3 = x + 1;
                vertZ1 = vertZ2 = z + 0;
                vertZ3 = vertZ4 = z + 1;
            }
        } else {
            vertX1 = vertX4 = x + 1;
            vertX2 = vertX3 = x + 0;
            vertZ1 = vertZ2 = z + 1;
            vertZ3 = vertZ4 = z + 0;
        }
        if (meta != 2 && meta != 4) {
            if (meta == 3 || meta == 5) {
                vertY2++;
                vertY3++;
            }
        } else {
            vertY1++;
            vertY4++;
        }

        if (track != null) {
            if (track instanceof ITrackSwitch) {
                ITrackSwitch switchTrack = (ITrackSwitch) track;
                if (switchTrack.isMirrored()) {
                    float temp = minU;
                    minU = maxU;
                    maxU = temp;
                    temp = minV;
                    minV = maxV;
                    maxV = temp;
                }
            } else if (track instanceof TrackGated) {
                renderGatedTrack(renderblocks, (TrackGated) track, x, y, z, meta);
            }
        }

        Tessellator tess = Tessellator.instance;
        tess.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
        tess.setColorOpaque_F(1.0F, 1.0F, 1.0F);

        tess.addVertexWithUV(vertX1, vertY1, vertZ1, maxU, minV);
        tess.addVertexWithUV(vertX2, vertY2, vertZ2, maxU, maxV);
        tess.addVertexWithUV(vertX3, vertY3, vertZ3, minU, maxV);
        tess.addVertexWithUV(vertX4, vertY4, vertZ4, minU, minV);
        tess.addVertexWithUV(vertX4, vertY4, vertZ4, minU, minV);
        tess.addVertexWithUV(vertX3, vertY3, vertZ3, minU, maxV);
        tess.addVertexWithUV(vertX2, vertY2, vertZ2, maxU, maxV);
        tess.addVertexWithUV(vertX1, vertY1, vertZ1, maxU, minV);

        return true;
    }

    private static void renderGatedTrack(RenderBlocks render, TrackGated track, int i, int j, int k, int meta) {
        boolean open = track.isGateOpen();
        Block gate = Blocks.fence_gate;
        if (meta == 0) {
            float f = 0.0F;
            float f8 = 0.125F;
            float f4 = 0.4375F;
            float f12 = 0.5625F;
            gate.setBlockBounds(f, 0.3125F, f4, f8, 1.0F, f12);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            f = 0.875F;
            f8 = 1.0F;
            gate.setBlockBounds(f, 0.3125F, f4, f8, 1.0F, f12);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        } else {
            float f1 = 0.4375F;
            float f9 = 0.5625F;
            float f5 = 0.0F;
            float f13 = 0.125F;
            gate.setBlockBounds(f1, 0.3125F, f5, f9, 1.0F, f13);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            f5 = 0.875F;
            f13 = 1.0F;
            gate.setBlockBounds(f1, 0.3125F, f5, f9, 1.0F, f13);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        }
        if (!open) {
            if (meta == 0) {
                float f2 = 0.375F;
                float f10 = 0.5F;
                float f6 = 0.4375F;
                float f14 = 0.5625F;
                gate.setBlockBounds(f2, 0.375F, f6, f10, 0.9375F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f2 = 0.5F;
                f10 = 0.625F;
                gate.setBlockBounds(f2, 0.375F, f6, f10, 0.9375F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f2 = 0.625F;
                f10 = 0.875F;
                gate.setBlockBounds(f2, 0.375F, f6, f10, 0.5625F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                gate.setBlockBounds(f2, 0.75F, f6, f10, 0.9375F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f2 = 0.125F;
                f10 = 0.375F;
                gate.setBlockBounds(f2, 0.375F, f6, f10, 0.5625F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                gate.setBlockBounds(f2, 0.75F, f6, f10, 0.9375F, f14);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
            } else {
                float f3 = 0.4375F;
                float f11 = 0.5625F;
                float f7 = 0.375F;
                float f15 = 0.5F;
                gate.setBlockBounds(f3, 0.375F, f7, f11, 0.9375F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f7 = 0.5F;
                f15 = 0.625F;
                gate.setBlockBounds(f3, 0.375F, f7, f11, 0.9375F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f7 = 0.625F;
                f15 = 0.875F;
                gate.setBlockBounds(f3, 0.375F, f7, f11, 0.5625F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                gate.setBlockBounds(f3, 0.75F, f7, f11, 0.9375F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                f7 = 0.125F;
                f15 = 0.375F;
                gate.setBlockBounds(f3, 0.375F, f7, f11, 0.5625F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
                gate.setBlockBounds(f3, 0.75F, f7, f11, 0.9375F, f15);
                RenderTools.renderStandardBlock(render, gate, i, j, k);
            }
        } else if (meta == 1 && !track.isReversed()) {
            gate.setBlockBounds(0.8125F, 0.375F, 0.0F, 0.9375F, 0.9375F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.8125F, 0.375F, 0.875F, 0.9375F, 0.9375F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.5625F, 0.375F, 0.0F, 0.8125F, 0.5625F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.5625F, 0.375F, 0.875F, 0.8125F, 0.5625F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.5625F, 0.75F, 0.0F, 0.8125F, 0.9375F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.5625F, 0.75F, 0.875F, 0.8125F, 0.9375F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        } else if (meta == 1 && track.isReversed()) {
            gate.setBlockBounds(0.0625F, 0.375F, 0.0F, 0.1875F, 0.9375F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.0625F, 0.375F, 0.875F, 0.1875F, 0.9375F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.1875F, 0.375F, 0.0F, 0.4375F, 0.5625F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.1875F, 0.375F, 0.875F, 0.4375F, 0.5625F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.1875F, 0.75F, 0.0F, 0.4375F, 0.9375F, 0.125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.1875F, 0.75F, 0.875F, 0.4375F, 0.9375F, 1.0F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        } else if (meta == 0 && track.isReversed()) {
            gate.setBlockBounds(0.0F, 0.375F, 0.8125F, 0.125F, 0.9375F, 0.9375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.375F, 0.8125F, 1.0F, 0.9375F, 0.9375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.0F, 0.375F, 0.5625F, 0.125F, 0.5625F, 0.8125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.375F, 0.5625F, 1.0F, 0.5625F, 0.8125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.0F, 0.75F, 0.5625F, 0.125F, 0.9375F, 0.8125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.75F, 0.5625F, 1.0F, 0.9375F, 0.8125F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        } else if (meta == 0 && !track.isReversed()) {
            gate.setBlockBounds(0.0F, 0.375F, 0.0625F, 0.125F, 0.9375F, 0.1875F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.375F, 0.0625F, 1.0F, 0.9375F, 0.1875F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.0F, 0.375F, 0.1875F, 0.125F, 0.5625F, 0.4375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.375F, 0.1875F, 1.0F, 0.5625F, 0.4375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.0F, 0.75F, 0.1875F, 0.125F, 0.9375F, 0.4375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
            gate.setBlockBounds(0.875F, 0.75F, 0.1875F, 1.0F, 0.9375F, 0.4375F);
            RenderTools.renderStandardBlock(render, gate, i, j, k);
        }
        gate.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
    }

}
TOP

Related Classes of mods.railcraft.client.render.RenderTrack

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.