From 6e210f0730b062f42b69f8adaf763f902fb91939 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 5 Feb 2014 19:26:57 -0500 Subject: [PATCH] Model positioning --- .../render/item/ItemRenderingHandler.java | 24 +- .../model/ModelAdvancedSolarGenerator.java | 331 ++++++++++-------- .../render/AdvancedSolarGenerator.png | Bin 8914 -> 8666 bytes 3 files changed, 192 insertions(+), 163 deletions(-) diff --git a/common/mekanism/client/render/item/ItemRenderingHandler.java b/common/mekanism/client/render/item/ItemRenderingHandler.java index b7de94d06..a070ccd04 100644 --- a/common/mekanism/client/render/item/ItemRenderingHandler.java +++ b/common/mekanism/client/render/item/ItemRenderingHandler.java @@ -373,20 +373,28 @@ public class ItemRenderingHandler implements IItemRenderer } else if(item.getItem() instanceof ItemAtomicDisassembler) { + GL11.glScalef(1.4F, 1.4F, 1.4F); + GL11.glRotatef(180, 0.0F, 0.0F, 1.0F); + if(type == ItemRenderType.EQUIPPED) { - GL11.glRotatef(40, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-45, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(50, 1.0F, 0.0F, 0.0F); + GL11.glScalef(2.0F, 2.0F, 2.0F); + GL11.glTranslatef(0.0F, -0.4F, 0.4F); } - - if(type == ItemRenderType.INVENTORY) + else if(type == ItemRenderType.INVENTORY) { - + GL11.glRotatef(225, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(45, -1.0F, 0.0F, -1.0F); + GL11.glScalef(0.6F, 0.6F, 0.6F); + GL11.glTranslatef(0.0F, -0.2F, 0.0F); + } + else { + GL11.glRotatef(45, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, -0.7F, 0.0F); } - GL11.glRotatef(180, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(40, 0.0F, 1.0F, 0.0F); - GL11.glScalef(1.4F, 1.4F, 1.4F); - GL11.glTranslatef(0.0F, -0.7F, 0.0F); Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "AtomicDisassembler.png")); atomicDisassembler.render(0.0625F); } diff --git a/common/mekanism/generators/client/model/ModelAdvancedSolarGenerator.java b/common/mekanism/generators/client/model/ModelAdvancedSolarGenerator.java index 449a7577c..8aa049e7c 100644 --- a/common/mekanism/generators/client/model/ModelAdvancedSolarGenerator.java +++ b/common/mekanism/generators/client/model/ModelAdvancedSolarGenerator.java @@ -1,7 +1,9 @@ package mekanism.generators.client.model; +import mekanism.client.render.MekanismRenderer; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelAdvancedSolarGenerator extends ModelBase { @@ -15,34 +17,36 @@ public class ModelAdvancedSolarGenerator extends ModelBase ModelRenderer base; ModelRenderer outputbox; ModelRenderer outputboxbottom; - ModelRenderer beam; + ModelRenderer basebeam; ModelRenderer connectorbox; - ModelRenderer panelpole; - ModelRenderer Shape5; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape8; - ModelRenderer bar; + ModelRenderer panelpivotbar; ModelRenderer bar1; ModelRenderer bar2; ModelRenderer bar3; - ModelRenderer Shape9; - ModelRenderer Shape10; - ModelRenderer Shape11; - ModelRenderer Shape12; - ModelRenderer Shape13; - ModelRenderer Shape14; - ModelRenderer Shape15; - ModelRenderer Shape16; - ModelRenderer Shape17; - ModelRenderer Shape18; - ModelRenderer Shape19; - + ModelRenderer bar4; + ModelRenderer Panel1; + ModelRenderer Panel2; + ModelRenderer Panel3; + ModelRenderer Panel4; + ModelRenderer Panel5; + ModelRenderer Panel6; + ModelRenderer Panel7; + ModelRenderer Panel8; + ModelRenderer Panel9; + ModelRenderer Panel10; + ModelRenderer Panel11; + ModelRenderer Panel12; + ModelRenderer Inputlight; + ModelRenderer light1; + ModelRenderer light2; + ModelRenderer light3; + ModelRenderer light4; + public ModelAdvancedSolarGenerator() { textureWidth = 128; textureHeight = 64; - + foot1 = new ModelRenderer(this, 16, 30); foot1.addBox(16F, 13F, -2F, 6, 1, 4); foot1.setRotationPoint(0F, 0F, 0F); @@ -81,8 +85,8 @@ public class ModelAdvancedSolarGenerator extends ModelBase foot3side.setTextureSize(128, 64); foot3side.mirror = true; setRotation(foot3side, 0F, 0F, 0F); - smallfoot = new ModelRenderer(this, 38, 33); - smallfoot.addBox(-0.5F, 22F, 5F, 1, 2, 1); + smallfoot = new ModelRenderer(this, 38, 32); + smallfoot.addBox(-0.5F, 21F, 5F, 1, 3, 1); smallfoot.setRotationPoint(0F, 0F, 0F); smallfoot.setTextureSize(128, 64); smallfoot.mirror = true; @@ -94,151 +98,163 @@ public class ModelAdvancedSolarGenerator extends ModelBase base.mirror = true; setRotation(base, 0F, 0F, 0F); outputbox = new ModelRenderer(this, 36, 36); - outputbox.addBox(-4F, 18F, 4F, 8, 7, 4); + outputbox.addBox(-4F, 16F, 4F, 8, 8, 4); outputbox.setRotationPoint(0F, -4F, 0F); outputbox.setTextureSize(128, 64); outputbox.mirror = true; setRotation(outputbox, 0F, 0F, 0F); outputboxbottom = new ModelRenderer(this, 42, 31); - outputboxbottom.addBox(-2F, 21F, 4F, 4, 1, 4); + outputboxbottom.addBox(-2F, 20F, 4F, 4, 1, 4); outputboxbottom.setRotationPoint(0F, 0F, 0F); outputboxbottom.setTextureSize(128, 64); outputboxbottom.mirror = true; setRotation(outputboxbottom, 0F, 0F, 0F); - beam = new ModelRenderer(this, 0, 14); - beam.addBox(-2F, -19F, -2F, 4, 29, 4); - beam.setRotationPoint(0F, 0F, 0F); - beam.setTextureSize(128, 64); - beam.mirror = true; - setRotation(beam, 0F, 0F, 0F); + basebeam = new ModelRenderer(this, 0, 14); + basebeam.addBox(-2F, -19F, -2F, 4, 29, 4); + basebeam.setRotationPoint(0F, 0F, 0F); + basebeam.setTextureSize(128, 64); + basebeam.mirror = true; + setRotation(basebeam, 0F, 0F, 0F); connectorbox = new ModelRenderer(this, 14, 47); connectorbox.addBox(-2.5F, -21F, -2.5F, 5, 3, 5); connectorbox.setRotationPoint(0F, 0F, 0F); connectorbox.setTextureSize(128, 64); connectorbox.mirror = true; setRotation(connectorbox, 0F, 0F, 0F); - panelpole = new ModelRenderer(this, 0, 0); - panelpole.addBox(-15F, -20.5F, -0.5F, 30, 2, 1); - panelpole.setRotationPoint(0F, 0F, 0F); - panelpole.setTextureSize(128, 64); - panelpole.mirror = true; - setRotation(panelpole, 0F, 0F, 0F); - Shape5 = new ModelRenderer(this, 70, 10); - Shape5.addBox(3F, -21F, -23.8F, 10, 1, 16); - Shape5.setRotationPoint(0F, 0F, 0F); - Shape5.setTextureSize(128, 64); - Shape5.mirror = true; - setRotation(Shape5, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 70, 10); - Shape6.addBox(-13F, -21F, -23.8F, 10, 1, 16); - Shape6.setRotationPoint(0F, 0F, 0F); - Shape6.setTextureSize(128, 64); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 70, 10); - Shape7.addBox(-13F, -21F, 7.8F, 10, 1, 16); - Shape7.setRotationPoint(0F, 0F, 0F); - Shape7.setTextureSize(128, 64); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape8 = new ModelRenderer(this, 70, 10); - Shape8.addBox(3F, -21F, 7.8F, 10, 1, 16); - Shape8.setRotationPoint(0F, 0F, 0F); - Shape8.setTextureSize(128, 64); - Shape8.mirror = true; - setRotation(Shape8, 0F, 0F, 0F); - bar = new ModelRenderer(this, 60, 30); - bar.addBox(12.7F, -20.5F, -16F, 1, 1, 33); - bar.setRotationPoint(0F, 0F, 0F); - bar.setTextureSize(128, 64); - bar.mirror = true; - setRotation(bar, 0F, 0F, 0F); + panelpivotbar = new ModelRenderer(this, 0, 0); + panelpivotbar.addBox(-15F, -20.5F, -0.5F, 30, 2, 1); + panelpivotbar.setRotationPoint(0F, 0F, 0F); + panelpivotbar.setTextureSize(128, 64); + panelpivotbar.mirror = true; + setRotation(panelpivotbar, 0F, 0F, 0F); bar1 = new ModelRenderer(this, 60, 30); - bar1.addBox(2.6F, -20.5F, -16F, 1, 1, 33); + bar1.addBox(12.7F, -20.5F, -16F, 1, 1, 33); bar1.setRotationPoint(0F, 0F, 0F); bar1.setTextureSize(128, 64); bar1.mirror = true; setRotation(bar1, 0F, 0F, 0F); bar2 = new ModelRenderer(this, 60, 30); - bar2.addBox(-3.6F, -20.5F, -16F, 1, 1, 33); + bar2.addBox(2.6F, -20.5F, -16F, 1, 1, 33); bar2.setRotationPoint(0F, 0F, 0F); bar2.setTextureSize(128, 64); bar2.mirror = true; setRotation(bar2, 0F, 0F, 0F); bar3 = new ModelRenderer(this, 60, 30); - bar3.addBox(-13.7F, -20.5F, -16F, 1, 1, 33); + bar3.addBox(-3.6F, -20.5F, -16F, 1, 1, 33); bar3.setRotationPoint(0F, 0F, 0F); bar3.setTextureSize(128, 64); bar3.mirror = true; setRotation(bar3, 0F, 0F, 0F); - Shape9 = new ModelRenderer(this, 16, 8); - Shape9.addBox(3F, -21F, -6.5F, 10, 1, 13); - Shape9.setRotationPoint(0F, 0F, 0F); - Shape9.setTextureSize(128, 64); - Shape9.mirror = true; - setRotation(Shape9, 0F, 0F, 0F); - Shape10 = new ModelRenderer(this, 16, 8); - Shape10.addBox(-13F, -21F, -6.5F, 10, 1, 13); - Shape10.setRotationPoint(0F, 0F, 0F); - Shape10.setTextureSize(128, 64); - Shape10.mirror = true; - setRotation(Shape10, 0F, 0F, 0F); - Shape11 = new ModelRenderer(this, 70, 10); - Shape11.addBox(13.5F, -21F, 7.8F, 10, 1, 16); - Shape11.setRotationPoint(0F, 0F, 0F); - Shape11.setTextureSize(128, 64); - Shape11.mirror = true; - setRotation(Shape11, 0F, 0F, 0F); - Shape12 = new ModelRenderer(this, 16, 8); - Shape12.addBox(13.5F, -21F, -6.5F, 10, 1, 13); - Shape12.setRotationPoint(0F, 0F, 0F); - Shape12.setTextureSize(128, 64); - Shape12.mirror = true; - setRotation(Shape12, 0F, 0F, 0F); - Shape13 = new ModelRenderer(this, 70, 10); - Shape13.addBox(13.5F, -21F, -23.8F, 10, 1, 16); - Shape13.setRotationPoint(0F, 0F, 0F); - Shape13.setTextureSize(128, 64); - Shape13.mirror = true; - setRotation(Shape13, 0F, 0F, 0F); - Shape14 = new ModelRenderer(this, 70, 10); - Shape14.addBox(-23.5F, -21F, -23.8F, 10, 1, 16); - Shape14.setRotationPoint(0F, 0F, 0F); - Shape14.setTextureSize(128, 64); - Shape14.mirror = true; - setRotation(Shape14, 0F, 0F, 0F); - Shape15 = new ModelRenderer(this, 16, 8); - Shape15.addBox(-23.5F, -21F, -6.5F, 10, 1, 13); - Shape15.setRotationPoint(0F, 0F, 0F); - Shape15.setTextureSize(128, 64); - Shape15.mirror = true; - setRotation(Shape15, 0F, 0F, 0F); - Shape16 = new ModelRenderer(this, 70, 10); - Shape16.addBox(-23.5F, -21F, 7.8F, 10, 1, 16); - Shape16.setRotationPoint(0F, 0F, 0F); - Shape16.setTextureSize(128, 64); - Shape16.mirror = true; - setRotation(Shape16, 0F, 0F, 0F); - Shape17 = new ModelRenderer(this, 70, 10); - Shape17.addBox(13.5F, -21F, 7.8F, 10, 1, 16); - Shape17.setRotationPoint(0F, 0F, 0F); - Shape17.setTextureSize(128, 64); - Shape17.mirror = true; - setRotation(Shape17, 0F, 0F, 0F); - Shape18 = new ModelRenderer(this, 16, 8); - Shape18.addBox(13.5F, -21F, -6.5F, 10, 1, 13); - Shape18.setRotationPoint(0F, 0F, 0F); - Shape18.setTextureSize(128, 64); - Shape18.mirror = true; - setRotation(Shape18, 0F, 0F, 0F); - Shape19 = new ModelRenderer(this, 70, 10); - Shape19.addBox(13.5F, -21F, -23.8F, 10, 1, 16); - Shape19.setRotationPoint(0F, 0F, 0F); - Shape19.setTextureSize(128, 64); - Shape19.mirror = true; - setRotation(Shape19, 0F, 0F, 0F); + bar4 = new ModelRenderer(this, 60, 30); + bar4.addBox(-13.7F, -20.5F, -16F, 1, 1, 33); + bar4.setRotationPoint(0F, 0F, 0F); + bar4.setTextureSize(128, 64); + bar4.mirror = true; + setRotation(bar4, 0F, 0F, 0F); + Panel1 = new ModelRenderer(this, 70, 10); + Panel1.addBox(13.5F, -21F, -23.8F, 10, 1, 16); + Panel1.setRotationPoint(0F, 0F, 0F); + Panel1.setTextureSize(128, 64); + Panel1.mirror = true; + setRotation(Panel1, 0F, 0F, 0F); + Panel2 = new ModelRenderer(this, 16, 8); + Panel2.addBox(13.5F, -21F, -6.5F, 10, 1, 13); + Panel2.setRotationPoint(0F, 0F, 0F); + Panel2.setTextureSize(128, 64); + Panel2.mirror = true; + setRotation(Panel2, 0F, 0F, 0F); + Panel3 = new ModelRenderer(this, 70, 10); + Panel3.addBox(13.5F, -21F, 7.8F, 10, 1, 16); + Panel3.setRotationPoint(0F, 0F, 0F); + Panel3.setTextureSize(128, 64); + Panel3.mirror = true; + setRotation(Panel3, 0F, 0F, 0F); + Panel4 = new ModelRenderer(this, 70, 10); + Panel4.addBox(3F, -21F, -23.8F, 10, 1, 16); + Panel4.setRotationPoint(0F, 0F, 0F); + Panel4.setTextureSize(128, 64); + Panel4.mirror = true; + setRotation(Panel4, 0F, 0F, 0F); + Panel5 = new ModelRenderer(this, 16, 8); + Panel5.addBox(3F, -21F, -6.5F, 10, 1, 13); + Panel5.setRotationPoint(0F, 0F, 0F); + Panel5.setTextureSize(128, 64); + Panel5.mirror = true; + setRotation(Panel5, 0F, 0F, 0F); + Panel6 = new ModelRenderer(this, 70, 10); + Panel6.addBox(3F, -21F, 7.8F, 10, 1, 16); + Panel6.setRotationPoint(0F, 0F, 0F); + Panel6.setTextureSize(128, 64); + Panel6.mirror = true; + setRotation(Panel6, 0F, 0F, 0F); + Panel7 = new ModelRenderer(this, 70, 10); + Panel7.addBox(-13F, -21F, -23.8F, 10, 1, 16); + Panel7.setRotationPoint(0F, 0F, 0F); + Panel7.setTextureSize(128, 64); + Panel7.mirror = true; + setRotation(Panel7, 0F, 0F, 0F); + Panel8 = new ModelRenderer(this, 16, 8); + Panel8.addBox(-13F, -21F, -6.5F, 10, 1, 13); + Panel8.setRotationPoint(0F, 0F, 0F); + Panel8.setTextureSize(128, 64); + Panel8.mirror = true; + setRotation(Panel8, 0F, 0F, 0F); + Panel9 = new ModelRenderer(this, 70, 10); + Panel9.addBox(-13F, -21F, 7.8F, 10, 1, 16); + Panel9.setRotationPoint(0F, 0F, 0F); + Panel9.setTextureSize(128, 64); + Panel9.mirror = true; + setRotation(Panel9, 0F, 0F, 0F); + Panel10 = new ModelRenderer(this, 70, 10); + Panel10.addBox(-23.5F, -21F, -23.8F, 10, 1, 16); + Panel10.setRotationPoint(0F, 0F, 0F); + Panel10.setTextureSize(128, 64); + Panel10.mirror = true; + setRotation(Panel10, 0F, 0F, 0F); + Panel11 = new ModelRenderer(this, 16, 8); + Panel11.addBox(-23.5F, -21F, -6.5F, 10, 1, 13); + Panel11.setRotationPoint(0F, 0F, 0F); + Panel11.setTextureSize(128, 64); + Panel11.mirror = true; + setRotation(Panel11, 0F, 0F, 0F); + Panel12 = new ModelRenderer(this, 70, 10); + Panel12.addBox(-23.5F, -21F, 7.8F, 10, 1, 16); + Panel12.setRotationPoint(0F, 0F, 0F); + Panel12.setTextureSize(128, 64); + Panel12.mirror = true; + setRotation(Panel12, 0F, 0F, 0F); + Inputlight = new ModelRenderer(this, 5, 6); + Inputlight.addBox(-1F, 15F, 7.2F, 2, 2, 1); + Inputlight.setRotationPoint(0F, 0F, 0F); + Inputlight.setTextureSize(128, 64); + Inputlight.mirror = true; + setRotation(Inputlight, 0F, 0F, 0F); + light1 = new ModelRenderer(this, 5, 4); + light1.addBox(3.2F, 15F, 6F, 1, 2, 1); + light1.setRotationPoint(0F, 0F, 0F); + light1.setTextureSize(128, 64); + light1.mirror = true; + setRotation(light1, 0F, 0F, 0F); + light2 = new ModelRenderer(this, 5, 4); + light2.addBox(-4.2F, 15F, 6F, 1, 2, 1); + light2.setRotationPoint(0F, 0F, 0F); + light2.setTextureSize(128, 64); + light2.mirror = true; + setRotation(light2, 0F, 0F, 0F); + light3 = new ModelRenderer(this, 5, 4); + light3.addBox(3.2F, 15F, 2F, 1, 2, 3); + light3.setRotationPoint(0F, 0F, 0F); + light3.setTextureSize(128, 64); + light3.mirror = true; + setRotation(light3, 0F, 0F, 0F); + light4 = new ModelRenderer(this, 5, 4); + light4.addBox(-4.2F, 15F, 2F, 1, 2, 3); + light4.setRotationPoint(0F, 0F, 0F); + light4.setTextureSize(128, 64); + light4.mirror = true; + setRotation(light4, 0F, 0F, 0F); } - + public void render(float size) { foot1.render(size); @@ -251,30 +267,35 @@ public class ModelAdvancedSolarGenerator extends ModelBase base.render(size); outputbox.render(size); outputboxbottom.render(size); - beam.render(size); + basebeam.render(size); connectorbox.render(size); - panelpole.render(size); - Shape5.render(size); - Shape6.render(size); - Shape7.render(size); - Shape8.render(size); - bar.render(size); + panelpivotbar.render(size); bar1.render(size); bar2.render(size); bar3.render(size); - Shape9.render(size); - Shape10.render(size); - Shape11.render(size); - Shape12.render(size); - Shape13.render(size); - Shape14.render(size); - Shape15.render(size); - Shape16.render(size); - Shape17.render(size); - Shape18.render(size); - Shape19.render(size); + bar4.render(size); + Panel1.render(size); + Panel2.render(size); + Panel3.render(size); + Panel4.render(size); + Panel5.render(size); + Panel6.render(size); + Panel7.render(size); + Panel8.render(size); + Panel9.render(size); + Panel10.render(size); + Panel11.render(size); + Panel12.render(size); + + MekanismRenderer.glowOn(); + Inputlight.render(size); + light1.render(size); + light2.render(size); + light3.render(size); + light4.render(size); + MekanismRenderer.glowOff(); } - + private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/resources/assets/mekanism/render/AdvancedSolarGenerator.png b/resources/assets/mekanism/render/AdvancedSolarGenerator.png index 707098ce7b9f4f1113ead6e7784c180afede331f..8e50de4f7ae4390a68d739446c25e7eab6aed68b 100644 GIT binary patch delta 5968 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