package pneumaticCraft.client.model; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import pneumaticCraft.common.tileentity.TileEntityVacuumPump; import pneumaticCraft.lib.Textures; public class ModelVacuumPump extends ModelBase implements IBaseModel{ // fields ModelRenderer Left1; ModelRenderer Left2; ModelRenderer Left3; ModelRenderer Left4; ModelRenderer Right1; ModelRenderer Right2; ModelRenderer Right3; ModelRenderer Right4; ModelRenderer TurbineCase; ModelRenderer Base; ModelRenderer Platform; ModelRenderer Leg1; ModelRenderer Leg2; ModelRenderer Leg3; ModelRenderer Leg4; ModelRenderer Top; ModelRenderer Blade; public ModelVacuumPump(){ textureWidth = 64; textureHeight = 64; Left1 = new ModelRenderer(this, 0, 0); Left1.addBox(0F, 0F, 0F, 6, 1, 2); Left1.setRotationPoint(2F, 14F, -1F); Left1.setTextureSize(64, 64); Left1.mirror = true; setRotation(Left1, 0F, 0F, 0F); Left2 = new ModelRenderer(this, 0, 0); Left2.addBox(0F, 0F, 0F, 6, 1, 2); Left2.setRotationPoint(2F, 17F, -1F); Left2.setTextureSize(64, 64); Left2.mirror = true; setRotation(Left2, 0F, 0F, 0F); Left3 = new ModelRenderer(this, 0, 0); Left3.addBox(0F, 0F, 0F, 5, 2, 1); Left3.setRotationPoint(3F, 15F, -2F); Left3.setTextureSize(64, 64); Left3.mirror = true; setRotation(Left3, 0F, 0F, 0F); Left4 = new ModelRenderer(this, 0, 0); Left4.addBox(0F, 0F, 0F, 5, 2, 1); Left4.setRotationPoint(3F, 15F, 1F); Left4.setTextureSize(64, 64); Left4.mirror = true; setRotation(Left4, 0F, 0F, 0F); Right1 = new ModelRenderer(this, 0, 0); Right1.addBox(0F, 0F, 0F, 6, 1, 2); Right1.setRotationPoint(-8F, 14F, -1F); Right1.setTextureSize(64, 64); Right1.mirror = true; setRotation(Right1, 0F, 0F, 0F); Right2 = new ModelRenderer(this, 0, 0); Right2.addBox(0F, 0F, 0F, 6, 1, 2); Right2.setRotationPoint(-8F, 17F, -1F); Right2.setTextureSize(64, 64); Right2.mirror = true; setRotation(Right2, 0F, 0F, 0F); Right3 = new ModelRenderer(this, 0, 0); Right3.addBox(0F, 0F, 0F, 5, 2, 1); Right3.setRotationPoint(-8F, 15F, -2F); Right3.setTextureSize(64, 64); Right3.mirror = true; setRotation(Right3, 0F, 0F, 0F); Right4 = new ModelRenderer(this, 0, 0); Right4.addBox(0F, 0F, 0F, 5, 2, 1); Right4.setRotationPoint(-8F, 15F, 1F); Right4.setTextureSize(64, 64); Right4.mirror = true; setRotation(Right4, 0F, 0F, 0F); TurbineCase = new ModelRenderer(this, 0, 19); TurbineCase.addBox(0F, 0F, 0F, 1, 4, 1); TurbineCase.setRotationPoint(-0.5F, 14.1F, 0F); TurbineCase.setTextureSize(64, 64); TurbineCase.mirror = true; setRotation(TurbineCase, 0F, 0F, 0F); Base = new ModelRenderer(this, 0, 33); Base.addBox(0F, 0F, 0F, 14, 1, 14); Base.setRotationPoint(-7F, 23F, -7F); Base.setTextureSize(64, 64); Base.mirror = true; setRotation(Base, 0F, 0F, 0F); Platform = new ModelRenderer(this, 0, 0); Platform.addBox(0F, 0F, 0F, 6, 1, 12); Platform.setRotationPoint(-3F, 18F, -6F); Platform.setTextureSize(64, 64); Platform.mirror = true; setRotation(Platform, 0F, 0F, 0F); Leg1 = new ModelRenderer(this, 0, 48); Leg1.addBox(0F, 0F, 0F, 1, 6, 1); Leg1.setRotationPoint(-2F, 18F, 4F); Leg1.setTextureSize(64, 64); Leg1.mirror = true; setRotation(Leg1, 0F, 0F, 0.5759587F); Leg2 = new ModelRenderer(this, 0, 48); Leg2.addBox(0F, 0F, 0F, 1, 6, 1); Leg2.setRotationPoint(-2F, 18F, -5F); Leg2.setTextureSize(64, 64); Leg2.mirror = true; setRotation(Leg2, 0F, 0F, 0.5759587F); Leg3 = new ModelRenderer(this, 0, 48); Leg3.addBox(0F, 0F, 0F, 1, 6, 1); Leg3.setRotationPoint(1.4F, 18.7F, 4F); Leg3.setTextureSize(64, 64); Leg3.mirror = true; setRotation(Leg3, 0F, 0F, -0.5759587F); Leg4 = new ModelRenderer(this, 0, 48); Leg4.addBox(0F, 0F, 0F, 1, 6, 1); Leg4.setRotationPoint(1.4F, 18.7F, -5F); Leg4.setTextureSize(64, 64); Leg4.mirror = true; setRotation(Leg4, 0F, 0F, -0.5759587F); Top = new ModelRenderer(this, 0, 19); Top.addBox(0F, 0F, 0F, 6, 1, 12); Top.setRotationPoint(-3F, 13F, -6F); Top.setTextureSize(64, 64); Top.mirror = true; setRotation(Top, 0F, 0F, 0F); Blade = new ModelRenderer(this, 0, 0); Blade.addBox(0F, 0F, 0F, 1, 4, 2); Blade.setRotationPoint(-0.5F, 14F, -3F); Blade.setTextureSize(64, 64); Blade.mirror = true; setRotation(Blade, 0F, 0F, 0F); } @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){ super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5, entity); Left1.render(f5); Left2.render(f5); Left3.render(f5); Left4.render(f5); Right1.render(f5); Right2.render(f5); Right3.render(f5); Right4.render(f5); TurbineCase.render(f5); Base.render(f5); Platform.render(f5); Leg1.render(f5); Leg2.render(f5); Leg3.render(f5); Leg4.render(f5); Top.render(f5); Blade.render(f5); } public void renderModel(float size, float rotation){ Left1.render(size); Left2.render(size); Left3.render(size); Left4.render(size); Right1.render(size); Right2.render(size); Right3.render(size); Right4.render(size); Base.render(size); Platform.render(size); Leg1.render(size); Leg2.render(size); Leg3.render(size); Leg4.render(size); rotation++; int bladeCount = 3; // rotation = 0; GL11.glPushMatrix(); GL11.glTranslated(0, 0, 3D / 16D); for(int i = 0; i < bladeCount; i++) { GL11.glPushMatrix(); GL11.glRotated(-rotation * 2 + (i + 0.5D) / bladeCount * 360, 0, 1, 0); GL11.glTranslated(0, 0, 1D / 16D); Blade.render(size); GL11.glPopMatrix(); } GL11.glPopMatrix(); GL11.glRotated(180, 0, 1, 0); GL11.glPushMatrix(); GL11.glTranslated(0, 0, 3D / 16D); for(int i = 0; i < bladeCount; i++) { GL11.glPushMatrix(); GL11.glRotated(rotation * 2 + (double)i / (double)bladeCount * 360, 0, 1, 0); GL11.glTranslated(0, 0, 1D / 16D); Blade.render(size); GL11.glPopMatrix(); } GL11.glPopMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glColor4d(0.5D, 0.5D, 0.5D, 1.0D); int casePoints = 20; GL11.glPushMatrix(); for(int i = 0; i < casePoints; i++) { GL11.glPushMatrix(); GL11.glTranslated(0, 0, 3F / 16F); GL11.glRotated((double)i / (double)casePoints * 275D - 130, 0, 1, 0); GL11.glTranslated(0, 0, 2.5F / 16F); TurbineCase.render(size); GL11.glPopMatrix(); } GL11.glRotated(180, 0, 1, 0); for(int i = 0; i < casePoints; i++) { GL11.glPushMatrix(); GL11.glTranslated(0, 0, 3F / 16F); GL11.glRotated((double)i / (double)casePoints * 275D - 130, 0, 1, 0); GL11.glTranslated(0, 0, 2.5F / 16F); TurbineCase.render(size); GL11.glPopMatrix(); } GL11.glPopMatrix(); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glColor4d(1, 1, 1, 0.3D); Top.render(size); GL11.glDisable(GL11.GL_BLEND); drawPlusAndMinus(); GL11.glEnable(GL11.GL_TEXTURE_2D); } private void drawPlusAndMinus(){ double scale = 0.05D; GL11.glPushMatrix(); GL11.glTranslated(0.26D, 13.95D / 16D, 0); GL11.glRotated(90, 1, 0, 0); GL11.glScaled(scale, scale, scale); GL11.glColor4d(0, 1, 0, 1); Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_LINES); tess.addVertex(-1, 0, 0); tess.addVertex(1, 0, 0); tess.addVertex(0, -1, 0); tess.addVertex(0, 1, 0); tess.draw(); GL11.glTranslated(-0.52D / scale, 0, 0); GL11.glColor4d(1, 0, 0, 1); tess.startDrawing(GL11.GL_LINES); tess.addVertex(-1, 0, 0); tess.addVertex(1, 0, 0); tess.draw(); GL11.glPopMatrix(); } private void setRotation(ModelRenderer model, float x, float y, float z){ model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } @Override public void renderStatic(float size, TileEntity te){ } @Override public ResourceLocation getModelTexture(TileEntity tile){ return Textures.MODEL_VACUUM_PUMP; } @Override public boolean rotateModelBasedOnBlockMeta(){ return true; } @Override public void renderDynamic(float size, TileEntity te, float partialTicks){ if(te instanceof TileEntityVacuumPump) { GL11.glRotated(-90, 0, 1, 0); TileEntityVacuumPump tile = (TileEntityVacuumPump)te; renderModel(size, tile.oldRotation + (tile.rotation - tile.oldRotation) * partialTicks); } else { renderModel(size, 0); } } }