package net.minecraft.src;

/**
 * PowerCraft deco module renderer (iron frame + subtypes)
 * 
 * @author MightyPork
 * @copy (c) 2012
 * 
 */
public class PCde_Renderer {

	/** Iron frame block renderer */
	public static int decorativeBlockRenderer = 0;

	/**
	 * Render block by render type.<br>
	 * Works for swapTerrainRenderer and rotatedBoxRenderer
	 * 
	 * @param renderblocks block renderer
	 * @param blockAccess block access
	 * @param i x
	 * @param j y
	 * @param k z
	 * @param block the block
	 * @param rtype render type
	 * @return success
	 */
	public static boolean renderBlockByType(RenderBlocks renderblocks, IBlockAccess blockAccess, int i, int j, int k, Block block, int rtype) {
		if (rtype == decorativeBlockRenderer) { return renderBlockDecorative(renderblocks, blockAccess, i, j, k, block); }
		return false;
	}

	/**
	 * Render Deco block (must implement PC_ISwapTerrain)
	 * 
	 * @param renderblocks block renderer
	 * @param iblockaccess block access
	 * @param i x
	 * @param j y
	 * @param k z
	 * @param block the block
	 * @return success
	 */
	public static boolean renderBlockDecorative(RenderBlocks renderblocks, IBlockAccess iblockaccess, int i, int j, int k, Block block) {
		RenderEngine renderengine = ModLoader.getMinecraftInstance().renderEngine;
		Tessellator tessellator = Tessellator.instance;
		int meta = iblockaccess.getBlockMetadata(i, j, k);
		if (block instanceof PC_ISwapTerrain) {
			if (meta == 0) {
				block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);

				tessellator.draw();
				tessellator.startDrawingQuads();
				renderengine.bindTexture(renderengine.getTexture(((PC_ISwapTerrain) block).getTerrainFile()));

				boolean ao = renderblocks.enableAO;
				renderblocks.enableAO = false;

				boolean gf = RenderBlocks.cfgGrassFix;
				RenderBlocks.cfgGrassFix = false;

				float s = 0.1875F;

				// pillars
				block.setBlockBounds(0, 0, 0, s, 1, s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(1 - s, 0, 0, 1, 1, s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(0, 0, 1 - s, s, 1, 1);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(1 - s, 0, 1 - s, 1, 1, 1);
				renderblocks.renderStandardBlock(block, i, j, k);

				// x-sticks
				block.setBlockBounds(s, 0, 0, 1 - s, s, s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(s, 0, 1 - s, 1 - s, s, 1);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(s, 1 - s, 0, 1 - s, 1, s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(s, 1 - s, 1 - s, 1 - s, 1, 1);
				renderblocks.renderStandardBlock(block, i, j, k);

				// z-sticks
				block.setBlockBounds(0, 0, s, s, s, 1 - s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(0, 1 - s, s, s, 1, 1 - s);
				renderblocks.renderStandardBlock(block, i, j, k);

				block.setBlockBounds(1 - s, 0, s, 1, s, 1 - s);
				renderblocks.renderStandardBlock(block, i, j, k);
				block.setBlockBounds(1 - s, 1 - s, s, 1, 1, 1 - s);
				renderblocks.renderStandardBlock(block, i, j, k);

				RenderBlocks.cfgGrassFix = gf;
				renderblocks.enableAO = ao;

				tessellator.draw();
				tessellator.startDrawingQuads();
				renderengine.bindTexture(renderengine.getTexture("/terrain.png"));

				block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);

				return true;
			}
		}
		return false;
	}

	/**
	 * Render inv block using given render type.
	 * 
	 * @param renderblocks block renderer
	 * @param block the block
	 * @param meta metadata
	 * @param rtype render type
	 */
	public static void renderInvBlockByType(RenderBlocks renderblocks, Block block, int meta, int rtype) {
		if (rtype == decorativeBlockRenderer) {
			renderInvBlockDeco(renderblocks, block, meta);
		}
		return;
	}

	/**
	 * Render Deco block on inventory
	 * 
	 * @param renderblocks block renderer
	 * @param block the block
	 * @param meta metadata
	 */
	public static void renderInvBlockDeco(RenderBlocks renderblocks, Block block, int meta) {
		RenderEngine renderengine = ModLoader.getMinecraftInstance().renderEngine;
		if (block instanceof PC_ISwapTerrain) {
			renderengine.bindTexture(renderengine.getTexture(((PC_ISwapTerrain) block).getTerrainFile()));
			float s = 0.1875F;

			// pillars
			block.setBlockBounds(0, 0, 0, s, 1, s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(1 - s, 0, 0, 1, 1, s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(0, 0, 1 - s, s, 1, 1);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(1 - s, 0, 1 - s, 1, 1, 1);
			PC_Renderer.renderInvBox(renderblocks, block, 0);

			// x-sticks
			block.setBlockBounds(s, 0, 0, 1 - s, s, s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(s, 0, 1 - s, 1 - s, s, 1);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(s, 1 - s, 0, 1 - s, 1, s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(s, 1 - s, 1 - s, 1 - s, 1, 1);
			PC_Renderer.renderInvBox(renderblocks, block, 0);

			// z-sticks
			block.setBlockBounds(0, 0, s, s, s, 1 - s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(0, 1 - s, s, s, 1, 1 - s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);

			block.setBlockBounds(1 - s, 0, s, 1, s, 1 - s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);
			block.setBlockBounds(1 - s, 1 - s, s, 1, 1, 1 - s);
			PC_Renderer.renderInvBox(renderblocks, block, 0);

			block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);

			return;
		}

	}

}
