diff options
Diffstat (limited to 'ihl/model/FlexibleCableItemRender.java')
| -rw-r--r-- | ihl/model/FlexibleCableItemRender.java | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/ihl/model/FlexibleCableItemRender.java b/ihl/model/FlexibleCableItemRender.java new file mode 100644 index 0000000..86b53ee --- /dev/null +++ b/ihl/model/FlexibleCableItemRender.java @@ -0,0 +1,226 @@ +package ihl.model;
+
+import ic2.core.block.RenderBlockDefault;
+import ihl.datanet.DataCableItem;
+import ihl.items_blocks.FlexibleCableItem;
+import ihl.items_blocks.IHLItemBlock;
+import ihl.model.IHLModelRenderer;
+import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityClientPlayerMP;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.GLAllocation;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import org.lwjgl.opengl.GL11;
+
+public class FlexibleCableItemRender implements IItemRenderer
+{
+ private ModelTube model;
+ private ModelTube modelThin;
+ private ModelTube modelLong;
+ private ModelTube modelThinLong;
+ private final int segmentsAmount=19;
+ private final float spiralStepAngle=1f;
+ private final float scale=1/32f;
+ private final int[] displayListCache = new int[4];
+
+public FlexibleCableItemRender()
+{
+ float vOffset=16f;
+ int longFragmensSize=24;
+ model=new ModelTube(null, 0, 0, -2F, -3F, -2F+vOffset, 4, 6, 4,0f, 0.5f,0.99f, ForgeDirection.UP);
+ modelLong=new ModelTube(null, 0, 0, -2F, -3F, -2F+vOffset, 4, longFragmensSize, 4,0f, 0f,0.99f, ForgeDirection.UP);
+ modelThin=new ModelTube(null, 0, 0, -1F, -3F, -1F+vOffset, 2, 6, 2,0f, 0.5f,0.99f, ForgeDirection.UP);
+ modelThinLong=new ModelTube(null, 0, 0, -1F, -3F, -1F+vOffset, 2, longFragmensSize, 2,0f, 0.5f,0.99f, ForgeDirection.UP);
+}
+
+@Override
+public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ switch (type) {
+ case ENTITY:
+ return true;
+ case EQUIPPED:
+ return true;
+ case EQUIPPED_FIRST_PERSON:
+ return true;
+ case INVENTORY:
+ return true;
+ default:
+ return false;
+ }
+}
+
+@Override
+public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ return true;
+}
+
+@Override
+public void renderItem(ItemRenderType type, ItemStack stack, Object... data) {
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glScalef(1F, -1F, -1F);
+ switch (type) {
+ case ENTITY:
+ GL11.glTranslatef(0,-1.0F,0);
+ this.rendercoil(stack);
+ break;
+ case EQUIPPED:
+ GL11.glTranslatef(0.25F,-2F,-0.75F);
+ this.rendercoil(stack);
+ break;
+ case EQUIPPED_FIRST_PERSON:
+ RenderPlayer var25;
+ EntityClientPlayerMP var3 = Minecraft.getMinecraft().thePlayer;
+ Minecraft.getMinecraft().getTextureManager().bindTexture(var3.getLocationSkin());
+ var25 = (RenderPlayer)RenderManager.instance.getEntityRenderObject(Minecraft.getMinecraft().thePlayer);
+ GL11.glRotatef(135F, 1.0F, 0.0F, 0.0F);
+ GL11.glRotatef(35F, 0.0F, 1.0F, 0.0F);
+ var25.renderFirstPersonArm(Minecraft.getMinecraft().thePlayer);
+ GL11.glRotatef(-35F, 0.0F, 1.0F, 0.0F);
+ GL11.glRotatef(-135F, 1.0F, 0.0F, 0.0F);
+ GL11.glTranslatef(0.0F,0.2F,0F);
+ GL11.glTranslatef(-0.25F,-1.0F,0F);
+ this.rendercoil(stack);
+ break;
+ case INVENTORY:
+ GL11.glTranslatef(0.0F,-0.2F,0F);
+ this.rendercoil(stack);
+ break;
+ default:
+ }
+ GL11.glPopMatrix();
+ }
+
+ private void rendercoil(ItemStack stack)
+ {
+ int type = this.getCableType(stack);
+ if (this.displayListCache[type] != 0)
+ {
+ GL11.glCallList(displayListCache[type]);
+ }
+ else
+ {
+
+ this.displayListCache[type]=GLAllocation.generateDisplayLists(1);
+ GL11.glNewList(displayListCache[type], 4864 /*GL_COMPILE*/);
+
+ GL11.glDisable(GL11.GL_TEXTURE_2D);
+ int saMax=this.segmentsAmount*2+this.segmentsAmount/2;
+ for(int i=0; i<=saMax;i++)
+ {
+ GL11.glRotatef(-spiralStepAngle, 0f, 0f, 1f);
+ GL11.glRotatef(360f/this.segmentsAmount, 1f, 0f, 0f);
+ GL11.glTranslatef(0.004f,0f,0f);
+ GL11.glRotatef(spiralStepAngle, 0f, 0f, 1f);
+ if(((FlexibleCableItem)stack.getItem()).isDataCable)
+ {
+ GL11.glColor3f(1f,0.2f, 0f);
+ }
+ else
+ {
+ GL11.glColor3f(1f,1f, 1f);
+ }
+ if(i==0)
+ {
+ if(isNoInsulation(stack))
+ {
+ if(FlexibleCableItem.instance.yellowColoredWires.contains(FlexibleCableItem.instance.getMaterial(stack)))
+ {
+ GL11.glColor3f(1f,0.75f, 0.1f);
+ }
+ else
+ {
+ GL11.glColor3f(0.65f,0.65f, 0.67f);
+ }
+ this.modelThinLong.render(Tessellator.instance, scale);
+
+ }
+ else
+ {
+ this.modelLong.render(Tessellator.instance, scale);
+ }
+ }
+ else if(i==saMax)
+ {
+ GL11.glTranslatef(0.0F,-0.55F,0F);
+ if(isNoInsulation(stack))
+ {
+ if(FlexibleCableItem.instance.yellowColoredWires.contains(FlexibleCableItem.instance.getMaterial(stack)))
+ {
+ GL11.glColor3f(1f,0.75f, 0.1f);
+ }
+ else
+ {
+ GL11.glColor3f(0.65f,0.65f, 0.67f);
+ }
+ this.modelThinLong.render(Tessellator.instance, scale);
+
+ }
+ else
+ {
+ this.modelLong.render(Tessellator.instance, scale);
+ }
+ GL11.glTranslatef(0.0F,0.55F,0F);
+ }
+ else
+ {
+ if(isNoInsulation(stack))
+ {
+ if(FlexibleCableItem.instance.yellowColoredWires.contains(FlexibleCableItem.instance.getMaterial(stack)))
+ {
+ GL11.glColor3f(1f,0.75f, 0.1f);
+ }
+ else
+ {
+ GL11.glColor3f(0.65f,0.65f, 0.67f);
+ }
+ this.modelThin.render(Tessellator.instance, scale);
+
+ }
+ else
+ {
+ this.model.render(Tessellator.instance, scale);
+ }
+ }
+ }
+ GL11.glEnable(GL11.GL_TEXTURE_2D);
+ GL11.glEndList();
+ }
+ }
+
+ private int getCableType(ItemStack stack)
+ {
+ if(((FlexibleCableItem)stack.getItem()).isDataCable)
+ {
+ return 3;
+ }
+ else if(isNoInsulation(stack))
+ {
+ if(FlexibleCableItem.instance.yellowColoredWires.contains(FlexibleCableItem.instance.getMaterial(stack)))
+ {
+ return 1;
+ }
+ else
+ {
+ return 2;
+ }
+ }
+ return 0;
+ }
+
+ private boolean isNoInsulation(ItemStack stack)
+ {
+ return stack.stackTagCompound!=null && FlexibleCableItem.instance.getInsulationMaterial(stack).equals("null") && !((FlexibleCableItem)stack.getItem()).isDataCable;
+ }
+}
\ No newline at end of file |
