From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- ihl/model/FlexibleCableItemRender.java | 226 +++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 ihl/model/FlexibleCableItemRender.java (limited to 'ihl/model/FlexibleCableItemRender.java') 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 -- cgit v1.2.3