Added new transformer model

This commit is contained in:
Calclavia 2014-01-21 16:06:39 +08:00
parent 3dcd8fdc2f
commit 958cca3180
7 changed files with 49 additions and 341 deletions

View file

@ -39,29 +39,26 @@ public class RenderRIItem implements IItemRenderer
@Override @Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) public void renderItem(ItemRenderType type, ItemStack item, Object... data)
{ {
GL11.glPushMatrix();
if (item.getItem() instanceof ItemGear) if (item.getItem() instanceof ItemGear)
{ {
RenderGear.INSTANCE.renderInventory(null, 0, 0, null); RenderGear.INSTANCE.renderInventory(null, 0, 0, null);
} }
else if (item.getItem() instanceof ItemMultimeter) else if (item.getItem() instanceof ItemMultimeter)
{ {
GL11.glPushMatrix();
GL11.glRotatef(180, 0, 1, 0); GL11.glRotatef(180, 0, 1, 0);
GL11.glTranslated(0, -1, -0.7); GL11.glTranslated(0, -1, -0.7);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderMultimeter.TEXTURE); FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderMultimeter.TEXTURE);
RenderMultimeter.MODEL.render(0.0625f); RenderMultimeter.MODEL.render(0.0625f);
GL11.glPopMatrix();
} }
else if (item.getItem() instanceof ItemTransformer) else if (item.getItem() instanceof ItemTransformer)
{ {
GL11.glPushMatrix(); GL11.glTranslated(0, -0.2f, 0);
GL11.glRotatef(180, 0, 0, 1); RenderTransformer.INSTANCE.doRender();
GL11.glTranslated(0, -1, 0);
GL11.glScaled(0.9f, 0.9f, 0.9f);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderTransformer.TEXTURE);
RenderTransformer.MODEL.render(0.0625f);
GL11.glPopMatrix();
} }
GL11.glPopMatrix();
} }
} }

View file

@ -3,6 +3,7 @@ package resonantinduction.electrical.transformer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Icon; import net.minecraft.util.Icon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World; import net.minecraft.world.World;
import resonantinduction.core.Settings; import resonantinduction.core.Settings;
import resonantinduction.core.prefab.part.ItemMultipartBase; import resonantinduction.core.prefab.part.ItemMultipartBase;
@ -28,7 +29,10 @@ public class ItemTransformer extends ItemMultipartBase
if (part != null) if (part != null)
{ {
part.preparePlacement(side, itemStack.getItemDamage()); int l = MathHelper.floor_double((double) (player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
int facing = l == 0 ? 2 : (l == 1 ? 5 : (l == 2 ? 3 : (l == 3 ? 4 : 0)));
part.preparePlacement(facing, itemStack.getItemDamage());
} }
return part; return part;

View file

@ -1,150 +0,0 @@
package resonantinduction.electrical.transformer;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ModelTransformer extends ModelBase
{
// fields
ModelRenderer a;
ModelRenderer b;
ModelRenderer c;
ModelRenderer d;
ModelRenderer out2;
ModelRenderer out1;
ModelRenderer out3;
ModelRenderer out4;
ModelRenderer i;
ModelRenderer j;
ModelRenderer in1;
ModelRenderer in2;
ModelRenderer in3;
ModelRenderer in4;
public ModelTransformer()
{
textureWidth = 70;
textureHeight = 45;
a = new ModelRenderer(this, 0, 0);
a.addBox(-8F, 0F, -8F, 16, 2, 16);
a.setRotationPoint(0F, 22F, 0F);
a.setTextureSize(70, 45);
a.mirror = true;
setRotation(a, 0F, 0F, 0F);
b = new ModelRenderer(this, 0, 19);
b.addBox(0F, 0F, -2F, 3, 11, 4);
b.setRotationPoint(5F, 11F, 0F);
b.setTextureSize(70, 45);
b.mirror = true;
setRotation(b, 0F, 0F, 0F);
c = new ModelRenderer(this, 0, 19);
c.addBox(0F, 0F, -2F, 3, 11, 4);
c.setRotationPoint(-8F, 11F, 0F);
c.setTextureSize(70, 45);
c.mirror = true;
setRotation(c, 0F, 0F, 0F);
d = new ModelRenderer(this, 15, 19);
d.addBox(0F, 0F, -2F, 16, 1, 4);
d.setRotationPoint(-8F, 10F, 0F);
d.setTextureSize(70, 45);
d.mirror = true;
setRotation(d, 0F, 0F, 0F);
out2 = new ModelRenderer(this, 0, 35);
out2.addBox(0F, 0F, -3F, 5, 0, 6);
out2.setRotationPoint(-9F, 16F, 0F);
out2.setTextureSize(70, 45);
out2.mirror = true;
setRotation(out2, 0F, 0F, 0F);
out1 = new ModelRenderer(this, 0, 35);
out1.addBox(0F, 0F, -3F, 5, 0, 6);
out1.setRotationPoint(-9F, 15F, 0F);
out1.setTextureSize(70, 45);
out1.mirror = true;
setRotation(out1, 0F, 0F, 0F);
out3 = new ModelRenderer(this, 0, 35);
out3.addBox(0F, 0F, -3F, 5, 0, 6);
out3.setRotationPoint(-9F, 17F, 0F);
out3.setTextureSize(70, 45);
out3.mirror = true;
setRotation(out3, 0F, 0F, 0F);
out4 = new ModelRenderer(this, 0, 35);
out4.addBox(0F, 0F, -3F, 5, 0, 6);
out4.setRotationPoint(-9F, 18F, 0F);
out4.setTextureSize(70, 45);
out4.mirror = true;
setRotation(out4, 0F, 0F, 0F);
i = new ModelRenderer(this, 34, 35);
i.addBox(0F, 0F, -1F, 2, 5, 2);
i.setRotationPoint(-10F, 14F, 0F);
i.setTextureSize(70, 45);
i.mirror = true;
setRotation(i, 0F, 0F, 0F);
j = new ModelRenderer(this, 24, 35);
j.addBox(0F, 0F, -1F, 2, 5, 2);
j.setRotationPoint(8F, 14F, 0F);
j.setTextureSize(70, 45);
j.mirror = true;
setRotation(j, 0F, 0F, 0F);
in1 = new ModelRenderer(this, 0, 35);
in1.addBox(0F, 0F, -3F, 5, 0, 6);
in1.setRotationPoint(4F, 15F, 0F);
in1.setTextureSize(70, 45);
in1.mirror = true;
setRotation(in1, 0F, 0F, 0F);
in2 = new ModelRenderer(this, 0, 35);
in2.addBox(0F, 0F, -3F, 5, 0, 6);
in2.setRotationPoint(4F, 16F, 0F);
in2.setTextureSize(70, 45);
in2.mirror = true;
setRotation(in2, 0F, 0F, 0F);
in3 = new ModelRenderer(this, 0, 35);
in3.addBox(0F, 0F, -3F, 5, 0, 6);
in3.setRotationPoint(4F, 17F, 0F);
in3.setTextureSize(70, 45);
in3.mirror = true;
setRotation(in3, 0F, 0F, 0F);
in4 = new ModelRenderer(this, 0, 35);
in4.addBox(0F, 0F, -3F, 5, 0, 6);
in4.setRotationPoint(4F, 18F, 0F);
in4.setTextureSize(70, 45);
in4.mirror = true;
setRotation(in4, 0F, 0F, 0F);
}
public void render(float f5)
{
a.render(f5);
b.render(f5);
c.render(f5);
d.render(f5);
out2.render(f5);
out1.render(f5);
out3.render(f5);
out4.render(f5);
i.render(f5);
j.render(f5);
in1.render(f5);
in2.render(f5);
in3.render(f5);
in4.render(f5);
}
private void setRotation(ModelRenderer model, float x, float y, float z)
{
model.rotateAngleX = x;
model.rotateAngleY = y;
model.rotateAngleZ = z;
}
@Override
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
{
super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
}
}

View file

@ -12,6 +12,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.electrical.Electrical; import resonantinduction.electrical.Electrical;
import resonantinduction.electrical.wire.framed.RenderFramedWire;
import universalelectricity.api.electricity.IElectricalNetwork; import universalelectricity.api.electricity.IElectricalNetwork;
import universalelectricity.api.electricity.IVoltageInput; import universalelectricity.api.electricity.IVoltageInput;
import universalelectricity.api.electricity.IVoltageOutput; import universalelectricity.api.electricity.IVoltageOutput;
@ -20,6 +21,7 @@ import universalelectricity.api.energy.IEnergyInterface;
import universalelectricity.api.vector.VectorHelper; import universalelectricity.api.vector.VectorHelper;
import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput; import codechicken.lib.data.MCDataOutput;
import codechicken.lib.lighting.LazyLightMatrix;
import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Rotation; import codechicken.lib.vec.Rotation;
import codechicken.lib.vec.Transformation; import codechicken.lib.vec.Transformation;
@ -58,7 +60,8 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
public void preparePlacement(int side, int itemDamage) public void preparePlacement(int side, int itemDamage)
{ {
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1)); placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
face = (byte) side;
} }
@Override @Override
@ -141,7 +144,7 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
{ {
if (pass == 0) if (pass == 0)
{ {
RenderTransformer.render(this, pos.x, pos.y, pos.z); RenderTransformer.INSTANCE.render(this, pos.x, pos.y, pos.z);
} }
} }
@ -205,18 +208,9 @@ public class PartTransformer extends JCuboidPart implements JNormalOcclusion, TF
} }
else else
{ {
switch (this.face) return ForgeDirection.getOrientation(this.face - 2);
{
case 0:
return ForgeDirection.NORTH;
case 1:
return ForgeDirection.EAST;
case 2:
return ForgeDirection.SOUTH;
case 3:
return ForgeDirection.WEST;
}
} }
return ForgeDirection.NORTH; return ForgeDirection.NORTH;
} }

View file

@ -1,6 +1,8 @@
package resonantinduction.electrical.transformer; package resonantinduction.electrical.transformer;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@ -20,145 +22,37 @@ import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class RenderTransformer public class RenderTransformer
{ {
public static final ModelTransformer MODEL = new ModelTransformer(); public static final RenderTransformer INSTANCE = new RenderTransformer();
public static final WavefrontObject MODEL_OBJ = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "transformer.obj");
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "transformer.png");
public static void render(PartTransformer part, double x, double y, double z) public static final WavefrontObject MODEL = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "transformer.obj");
{ public static final ResourceLocation TEXTURE_COIL = new ResourceLocation(Reference.DOMAIN, Reference.BLOCK_TEXTURE_DIRECTORY + "models/wire.png");
String status = LanguageUtility.getLocal((part.stepUp() ? "tooltip.transformer.stepUp" : "tooltip.transformer.stepDown")); public static final ResourceLocation TEXTURE_STONE = new ResourceLocation(Reference.BLOCK_TEXTURE_DIRECTORY + "stone.png");
public static final ResourceLocation TEXTURE_IRON = new ResourceLocation(Reference.BLOCK_TEXTURE_DIRECTORY + "iron_block.png");
EntityPlayer player = Minecraft.getMinecraft().thePlayer; public void doRender()
MovingObjectPosition movingPosition = player.rayTrace(5, 1f); {
GL11.glScalef(0.5f, 0.5f, 0.5f);
if (movingPosition != null) FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_COIL);
{ GL11.glColor4f(0.72f, .45f, 0.2f, 1);
if (new Vector3(part.x(), part.y(), part.z()).equals(new Vector3(movingPosition))) MODEL.renderOnly("InsulatorLayerHigh", "InsulatorLayerMed", "InsulatorLayerLow");
{ MODEL.renderOnly("OuterWindingConnector", "OuterWindingHigh", "OuterWindingMed", "OuterWindingLow");
RenderUtility.renderFloatingText(status, (float) (x + 0.5), (float) (y - 1), (float) (z + 0.5)); MODEL.renderOnly("InnerWindingConnector", "InnerWindingHigh", "InnerWindingMed", "InnerWindingLow");
}
GL11.glColor4f(1, 1, 1, 1);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_IRON);
MODEL.renderOnly("core");
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_STONE);
MODEL.renderOnly("base");
} }
public void render(PartTransformer part, double x, double y, double z)
{
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
GL11.glScalef(1.0F, -1F, -1F); RenderUtility.rotateFaceBlockToSide(part.placementSide);
RenderUtility.rotateBlockBasedOnDirection(part.getFacing());
switch (part.placementSide) doRender();
{
case DOWN:
switch (part.face)
{
case 0:
GL11.glRotatef(90, 0, 1, 0);
break;
case 1:
GL11.glRotatef(180, 0, 1, 0);
break;
case 2:
GL11.glRotatef(-90, 0, 1, 0);
break;
case 3:
break;
}
break;
case UP:
GL11.glRotatef(180, 0, 0, 1);
GL11.glTranslatef(0, -2, 0);
switch (part.face)
{
case 0:
GL11.glRotatef(90, 0, 1, 0);
break;
case 1:
GL11.glRotatef(180, 0, 1, 0);
break;
case 2:
GL11.glRotatef(-90, 0, 1, 0);
break;
case 3:
break;
}
break;
case NORTH:
GL11.glRotatef(90, 1, 0, 0);
GL11.glTranslatef(0, -1, -1);
switch (part.face)
{
case 0:
GL11.glRotatef(90, 0, 1, 0);
break;
case 1:
GL11.glRotatef(180, 0, 1, 0);
break;
case 2:
GL11.glRotatef(-90, 0, 1, 0);
break;
case 3:
break;
}
break;
case SOUTH:
GL11.glRotatef(-90, 1, 0, 0);
GL11.glTranslatef(0, -1, 1);
switch (part.face)
{
case 0:
GL11.glRotatef(-90, 0, 1, 0);
break;
case 1:
break;
case 2:
GL11.glRotatef(90, 0, 1, 0);
break;
case 3:
GL11.glRotatef(180, 0, 1, 0);
break;
}
break;
case WEST:
GL11.glRotatef(90, 0, 0, 1);
GL11.glTranslatef(1, -1, 0);
switch (part.face)
{
case 0:
break;
case 1:
GL11.glRotatef(90, 0, 1, 0);
break;
case 2:
GL11.glRotatef(180, 0, 1, 0);
break;
case 3:
GL11.glRotatef(-90, 0, 1, 0);
break;
}
break;
case EAST:
GL11.glRotatef(-90, 0, 0, 1);
GL11.glTranslatef(-1, -1, 0);
switch (part.face)
{
case 0:
GL11.glRotatef(180, 0, 1, 0);
break;
case 1:
GL11.glRotatef(-90, 0, 1, 0);
break;
case 2:
break;
case 3:
GL11.glRotatef(90, 0, 1, 0);
break;
}
break;
}
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE);
//GL11.glScalef(0.5f, 0.5f, 0.5f);
//MODEL_OBJ.renderAll();
MODEL.render(0.0625F);
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
} }

View file

@ -8,6 +8,7 @@ import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import calclavia.lib.render.RenderUtility;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -22,11 +23,9 @@ public class RenderGear
public void renderInventory(Block block, int metadata, int modelID, RenderBlocks renderer) public void renderInventory(Block block, int metadata, int modelID, RenderBlocks renderer)
{ {
GL11.glPushMatrix();
GL11.glRotatef(90, 1, 0, 0); GL11.glRotatef(90, 1, 0, 0);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE);
MODEL.renderAll(); MODEL.renderAll();
GL11.glPopMatrix();
} }
public void renderDynamic(PartGear part, double x, double y, double z, float frame) public void renderDynamic(PartGear part, double x, double y, double z, float frame)
@ -34,40 +33,14 @@ public class RenderGear
GL11.glPushMatrix(); GL11.glPushMatrix();
// Center the model first. // Center the model first.
GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f); GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f);
GL11.glPushMatrix(); GL11.glPushMatrix();
switch (part.placementSide) RenderUtility.rotateFaceBlockToSide(part.placementSide);
{
case DOWN:
GL11.glTranslatef(0, -0.45f, 0);
break;
case UP:
GL11.glTranslatef(0, 0.45f, 0);
break;
case NORTH:
GL11.glTranslatef(0, 0, -0.45f);
GL11.glRotatef(90, 1, 0, 0);
break;
case SOUTH:
GL11.glTranslatef(0, 0, 0.45f);
GL11.glRotatef(-90, 1, 0, 0);
break;
case WEST:
GL11.glTranslatef(-0.45f, 0, 0);
GL11.glRotatef(90, 0, 0, 1);
break;
case EAST:
GL11.glTranslatef(0.45f, 0, 0);
GL11.glRotatef(-90, 0, 0, 1);
break;
}
GL11.glRotatef((float) Math.toDegrees(part.isClockwise() ? part.getNetwork().getRotation() : -part.getNetwork().getRotation()), 0, 1, 0); GL11.glRotatef((float) Math.toDegrees(part.isClockwise() ? part.getNetwork().getRotation() : -part.getNetwork().getRotation()), 0, 1, 0);
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE);
MODEL.renderAll(); MODEL.renderAll();
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glPopMatrix(); GL11.glPopMatrix();
} }

View file

@ -5,6 +5,7 @@ import static org.lwjgl.opengl.GL11.glPushMatrix;
import static org.lwjgl.opengl.GL11.glRotatef; import static org.lwjgl.opengl.GL11.glRotatef;
import static org.lwjgl.opengl.GL11.glScalef; import static org.lwjgl.opengl.GL11.glScalef;
import static org.lwjgl.opengl.GL11.glTranslatef; import static org.lwjgl.opengl.GL11.glTranslatef;
import calclavia.lib.render.RenderUtility;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
@ -35,12 +36,7 @@ public class RenderGrinderWheel extends TileEntitySpecialRenderer
glTranslatef((float) x + 0.5F, (float) y + 0.5f, (float) z + 0.5F); glTranslatef((float) x + 0.5F, (float) y + 0.5f, (float) z + 0.5F);
glScalef(0.51f, 0.51f, 0.51f); glScalef(0.51f, 0.51f, 0.51f);
if (tile.getDirection().ordinal() < 2) RenderUtility.rotateBlockBasedOnDirection(tile.getDirection());
glRotatef(90, 1, 0, 0);
else if (tile.getDirection().ordinal() == 2 || tile.getDirection().ordinal() == 3)
glRotatef(90, 0, 1, 0);
else if (tile.getDirection().ordinal() == 4 || tile.getDirection().ordinal() == 5)
glRotatef(180, 0, 1, 0);
glRotatef((float) Math.toDegrees(tile.getNetwork().getRotation()) * (tile.isClockwise() ? 1 : -1), 0, 0, 1); glRotatef((float) Math.toDegrees(tile.getNetwork().getRotation()) * (tile.isClockwise() ? 1 : -1), 0, 0, 1);