/*
* This file is part of Spoutcraft (http://wiki.getspout.org/).
*
* Spoutcraft is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Spoutcraft is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.getspout.spout.gui;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import net.minecraft.src.ItemStack;
import net.minecraft.src.RenderHelper;
import net.minecraft.src.Block;
import net.minecraft.src.RenderManager;
import org.getspout.spout.client.SpoutClient;
import org.lwjgl.opengl.GL11;
public class GenericItemWidget extends GenericWidget implements ItemWidget{
protected int material = -1;
protected short data = -1;
protected int depth = 8;
protected final RenderItemCustom renderer;
protected ItemStack toRender = null;
public GenericItemWidget() {
renderer = new RenderItemCustom();
renderer.setRenderManager(RenderManager.instance);
}
public int getNumBytes() {
return super.getNumBytes() + 10;
}
public int getVersion() {
return super.getVersion() + 0;
}
@Override
public void readData(DataInputStream input) throws IOException {
super.readData(input);
this.setTypeId(input.readInt());
this.setData(input.readShort());
this.setDepth(input.readInt());
}
@Override
public void writeData(DataOutputStream output) throws IOException {
super.writeData(output);
output.writeInt(getTypeId());
output.writeShort(getData());
output.writeInt(getDepth());
}
public ItemWidget setTypeId(int id) {
this.material = id;
return this;
}
public int getTypeId() {
return material;
}
public ItemWidget setData(short data) {
this.data = data;
return this;
}
public short getData() {
return data;
}
public ItemWidget setDepth(int depth) {
this.depth = depth;
return this;
}
public int getDepth() {
return depth;
}
public ItemWidget setHeight(int height) {
super.setHeight(height);
return this;
}
public ItemWidget setWidth(int width) {
super.setWidth(width);
return this;
}
@Override
public WidgetType getType() {
return WidgetType.ItemWidget;
}
@Override
public void render() {
if (toRender == null){
if (getTypeId() > 0) {
if (getData() > -1){
toRender = new ItemStack(getTypeId(), 1, getData());
}
else {
toRender = new ItemStack(getTypeId(), 1, 0);
}
}
}
if (toRender != null) {
GL11.glDepthFunc(515);
RenderHelper.enableStandardItemLighting();
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_COLOR_MATERIAL);
GL11.glDisable(GL11.GL_LIGHTING);
double oldX = 1;
double oldY = 1;
double oldZ = 1;
Block block = null;
if (getTypeId() < 255) {
block = Block.blocksList[getTypeId()];
oldX = block.maxX;
oldY = block.maxY;
oldZ = block.maxZ;
block.maxX = block.maxX * (width / 8);
block.maxY = block.maxY * (height / 8);
block.maxZ = block.maxZ * (getDepth() / 8);
}
else {
renderer.setScale(1 + (getWidth() / 200D), 1 + (getHeight() / 200D), 1);
}
GL11.glPushMatrix();
GL11.glTranslatef((float) getScreenX(), (float) getScreenY(), 0);
GL11.glScalef((float) (screen.getWidth() / 427f), (float) (screen.getHeight() / 240f), 1);
renderer.renderItemIntoGUI(SpoutClient.getHandle().fontRenderer, SpoutClient.getHandle().renderEngine, toRender, 0, 0);
GL11.glPopMatrix();
if (getTypeId() < 255){
block.maxX = oldX;
block.maxY = oldY;
block.maxZ = oldZ;
}
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_LIGHTING);
RenderHelper.disableStandardItemLighting();
}
}
}