Package mods.railcraft.client.render

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

/*
* 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 mods.railcraft.api.core.IPostConnection.ConnectStyle;
import mods.railcraft.api.signals.SignalAspect;
import mods.railcraft.client.render.RenderFakeBlock.RenderInfo;
import mods.railcraft.common.blocks.RailcraftBlocks;
import mods.railcraft.common.blocks.aesthetics.post.PostConnectionHelper;
import net.minecraft.block.Block;
import net.minecraft.world.IBlockAccess;
import net.minecraft.item.ItemStack;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import mods.railcraft.common.blocks.signals.BlockSignalRailcraft;
import mods.railcraft.common.blocks.signals.EnumSignal;
import mods.railcraft.common.blocks.signals.IDualHeadSignal;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;

public class RenderSignalDual implements ICombinedRenderer {

    private RenderInfo info = new RenderInfo();

    public RenderSignalDual() {
        info.texture = new IIcon[6];
        info.template = RailcraftBlocks.getBlockSignal();
    }

    @Override
    public void renderBlock(RenderBlocks renderblocks, IBlockAccess world, int x, int y, int z, Block block) {
        IDualHeadSignal tile = (IDualHeadSignal) world.getTileEntity(x, y, z);
        int facing = tile.getFacing().ordinal();
        float pix = RenderTools.PIXEL;
        float f = 3.0F * pix;
        float f1 = 13.0F * pix;
        info.setBlockBounds(f, 0, f, f1, 1, f1);
        info.texture[0] = BlockSignalRailcraft.texturesSignalDual[0];
        info.texture[1] = BlockSignalRailcraft.texturesSignalDual[0];
        info.texture[2] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[3] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[4] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[5] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[facing] = BlockSignalRailcraft.texturesSignalDual[2];
        RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);

        // Render Aspect
        info.setRenderSingleSide(facing);

        SignalAspect aspect = tile.getTopAspect();
        if (!aspect.isLit())
            aspect = SignalAspect.OFF;
        info.texture[facing] = BlockSignalRailcraft.texturesLampTop[aspect.getTextureIndex()];
        info.brightness = aspect.getTextureBrightness();
        RenderFakeBlock.renderBlock(info, world, x, y, z, info.brightness < 0 ? true : false, false);

        aspect = tile.getBottomAspect();
        if (!aspect.isLit())
            aspect = SignalAspect.OFF;
        info.texture[facing] = BlockSignalRailcraft.texturesLampBottom[aspect.getTextureIndex()];
        info.brightness = aspect.getTextureBrightness();
        RenderFakeBlock.renderBlock(info, world, x, y, z, info.brightness < 0 ? true : false, false);

        info.brightness = -1;
        info.setRenderAllSides();

        // Render Hood
        info.texture[facing] = BlockSignalRailcraft.texturesSignalDual[2];
        if (facing == 2 || facing == 3) {
            float temp = 13.0F * pix;
            if (facing == 2)
                temp = pix;
            for (int ii = 0; ii < 2; ii++) {
                info.setBlockBounds(6.0F * pix, 7.0F * pix + ii * 6.0F * pix, temp, 10.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
                info.setBlockBounds(5.0F * pix, 4.0F * pix + ii * 6.0F * pix, temp, 6.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
                info.setBlockBounds(10.0F * pix, 4.0F * pix + ii * 6.0F * pix, temp, 11.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
            }
        } else if (facing == 4 || facing == 5) {
            float temp = 13.0F * pix;
            if (facing == 4)
                temp = pix;
            for (int ii = 0; ii < 2; ii++) {
                info.setBlockBounds(temp, 7.0F * pix + ii * 6.0F * pix, 6.0F * pix, temp + 2.0F * pix, 8.0F * pix + ii * 6.0F * pix, 10.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
                info.setBlockBounds(temp, 4.0F * pix + ii * 6.0F * pix, 5.0F * pix, temp + 2.0F * pix, 8.0F * pix + ii * 6.0F * pix, 6.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
                info.setBlockBounds(temp, 4.0F * pix + ii * 6.0F * pix, 10.0F * pix, temp + 2.0F * pix, 8.0F * pix + ii * 6.0F * pix, 11.0F * pix);
                RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
            }
        }

        // Render Side Posts       
        boolean east_west = false;
        boolean north_south = false;
        boolean west = PostConnectionHelper.connect(world, x, y, z, ForgeDirection.WEST) != ConnectStyle.NONE;
        boolean east = PostConnectionHelper.connect(world, x, y, z, ForgeDirection.EAST) != ConnectStyle.NONE;
        boolean north = PostConnectionHelper.connect(world, x, y, z, ForgeDirection.NORTH) != ConnectStyle.NONE;
        boolean south = PostConnectionHelper.connect(world, x, y, z, ForgeDirection.SOUTH) != ConnectStyle.NONE;
        if (east || west)
            east_west = true;
        if (north || south)
            north_south = true;
        if (!east_west && !north_south)
            east_west = true;
        f = 0.4375F;
        f1 = 0.5625F;
        float f2 = 11 * pix;
        float f3 = 14 * pix;
        float f4 = west ? 0.0F : f;
        float f5 = east ? 1.0F : f1;
        float f6 = north ? 0.0F : f;
        float f7 = south ? 1.0F : f1;
        info.texture[0] = BlockSignalRailcraft.texturesSignalDual[3];
        info.texture[1] = BlockSignalRailcraft.texturesSignalDual[3];
        info.texture[2] = BlockSignalRailcraft.texturesSignalDual[4];
        info.texture[3] = BlockSignalRailcraft.texturesSignalDual[4];
        info.texture[4] = BlockSignalRailcraft.texturesSignalDual[4];
        info.texture[5] = BlockSignalRailcraft.texturesSignalDual[4];
        if (east_west) {
            info.setBlockBounds(f4, f2, f, f5, f3, f1);
            RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
        }
        if (north_south) {
            info.setBlockBounds(f, f2, f6, f1, f3, f7);
            RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
        }
        f2 = 5 * pix;
        f3 = 8 * pix;
        if (east_west) {
            info.setBlockBounds(f4, f2, f, f5, f3, f1);
            RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
        }
        if (north_south) {
            info.setBlockBounds(f, f2, f6, f1, f3, f7);
            RenderFakeBlock.renderBlock(info, world, x, y, z, true, false);
        }
    }

    @Override
    public void renderItem(RenderBlocks renderblocks, ItemStack item, ItemRenderType renderType) {
        EnumSignal signalType = EnumSignal.fromId(item.getItemDamage());
        float pix = RenderTools.PIXEL;
        float f = 3.0F * pix;
        float f1 = 13.0F * pix;

        GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glEnable(GL11.GL_BLEND);

        info.setBlockBounds(f, 0.0F, f, f1, 1.0F, f1);
        info.texture[0] = BlockSignalRailcraft.texturesSignalDual[0];
        info.texture[1] = BlockSignalRailcraft.texturesSignalDual[0];
        info.texture[2] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[3] = BlockSignalRailcraft.texturesSignalDual[2];
        info.texture[4] = BlockSignalRailcraft.texturesSignalDual[1];
        info.texture[5] = BlockSignalRailcraft.texturesSignalDual[1];
        RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1);
        info.texture[3] = BlockSignalRailcraft.texturesLampTop[signalType == EnumSignal.DUAL_HEAD_BLOCK_SIGNAL ? 0 : 2];
        RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1, 3);
        info.texture[3] = BlockSignalRailcraft.texturesLampBottom[signalType == EnumSignal.DUAL_HEAD_BLOCK_SIGNAL ? 2 : 0];
        RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1, 3);
        info.texture[3] = BlockSignalRailcraft.texturesSignalDual[2];
        float temp = 13.0F * pix;
        for (int ii = 0; ii < 2; ii++) {
            info.setBlockBounds(6.0F * pix, 7.0F * pix + ii * 6.0F * pix, temp, 10.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
            RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1);
            info.setBlockBounds(5.0F * pix, 4.0F * pix + ii * 6.0F * pix, temp, 6.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
            RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1);
            info.setBlockBounds(10.0F * pix, 4.0F * pix + ii * 6.0F * pix, temp, 11.0F * pix, 8.0F * pix + ii * 6.0F * pix, temp + 2.0F * pix);
            RenderFakeBlock.renderBlockOnInventory(renderblocks, info, 1);
        }

        GL11.glPopAttrib();
    }

}
TOP

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

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.