Get Mechanical Pipe rendering working a bit better.

This commit is contained in:
Ben Spiers 2013-12-12 20:23:03 +00:00
parent 31f8566a1f
commit 98c8068a0f
22 changed files with 368 additions and 39 deletions

View file

@ -5,11 +5,19 @@ import net.minecraft.tileentity.TileEntity;
public enum TransmissionType
{
ENERGY,
FLUID,
GAS;
ENERGY(Size.SMALL),
FLUID(Size.LARGE),
GAS(Size.SMALL),
ITEM(Size.LARGE);
public static TransmissionType[] metaArray = {GAS, ENERGY, FLUID};
public Size transmitterSize;
private TransmissionType(Size size)
{
transmitterSize = size;
}
public static TransmissionType[] metaArray = {GAS, ENERGY, FLUID, ITEM};
public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type)
{
@ -48,4 +56,17 @@ public enum TransmissionType
return metaArray[meta];
return null;
}
public static enum Size
{
SMALL(6),
LARGE(8);
public int centreSize;
private Size(int size) {
centreSize = size;
}
}
}

View file

@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.Map;
import mekanism.api.transmitters.TransmissionType;
import mekanism.api.transmitters.TransmissionType.Size;
import mekanism.client.render.MekanismRenderer.DisplayInteger;
import mekanism.client.render.MekanismRenderer.Model3D;
import mekanism.common.multipart.PartMechanicalPipe;
@ -34,15 +35,9 @@ import codechicken.lib.vec.Vector3;
public class RenderPartTransmitter implements IIconRegister
{
public static RenderPartTransmitter INSTANCE;
public static Icon[] uniCableTextures = new Icon[2];
public static Icon[] mechPipeTextures = new Icon[2];
public static Icon[] pressTubeTextures = new Icon[2];
public static Icon sideTexture;
public static Map<TransmissionType, Icon[]> typeMap = new HashMap<TransmissionType, Icon[]>();
public static Map<String, CCModel> models;
public static Map<String, CCModel> small_models;
public static Map<String, CCModel> large_models;
public static Map<String, CCModel> cableContentsModels;
private static final int stages = 40;
@ -53,16 +48,25 @@ public class RenderPartTransmitter implements IIconRegister
static
{
models = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter.obj"), 7, null);
for(CCModel c : models.values())
small_models = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter_small.obj"), 7, null);
for(CCModel c : small_models.values())
{
c.apply(new Translation(.5, .5, .5));
c.computeLighting(LightModel.standardLightModel);
c.shrinkUVs(0.0005);
}
cableContentsModels = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitterEnergy.obj"), 7, null);
large_models = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter_large.obj"), 7, null);
for(CCModel c : large_models.values())
{
c.apply(new Translation(.5, .5, .5));
c.computeLighting(LightModel.standardLightModel);
c.shrinkUVs(0.0005);
}
cableContentsModels = CCModel.parseObjModels(new ResourceLocation("mekanism", "models/transmitter_contents.obj"), 7, null);
for(CCModel c : cableContentsModels.values())
{
@ -70,10 +74,6 @@ public class RenderPartTransmitter implements IIconRegister
c.computeLighting(LightModel.standardLightModel);
c.shrinkUVs(0.0005);
}
typeMap.put(TransmissionType.ENERGY, uniCableTextures);
typeMap.put(TransmissionType.FLUID, mechPipeTextures);
typeMap.put(TransmissionType.GAS, pressTubeTextures);
}
public static RenderPartTransmitter getInstance()
@ -355,8 +355,8 @@ public class RenderPartTransmitter implements IIconRegister
boolean connected = PartTransmitter.connectionMapContainsSide(transmitter.getAllCurrentConnections(), side);
String name = side.name().toLowerCase();
name += connected ? "Out" : "In";
Icon renderIcon = connected ? sideTexture : getIconForPart(transmitter);
renderPart(renderIcon, models.get(name), transmitter.x(), transmitter.y(), transmitter.z());
Icon renderIcon = connected ? transmitter.getSideIcon() : transmitter.getCenterIcon();
renderPart(renderIcon, getModelForPart(transmitter.getTransmitterSize(), name), transmitter.x(), transmitter.y(), transmitter.z());
}
public void renderEnergySide(ForgeDirection side, PartUniversalCable cable)
@ -385,22 +385,22 @@ public class RenderPartTransmitter implements IIconRegister
cc.render(0, cc.verts.length, new Translation(0, 0, 0), new IconTransformation(icon), new ColourMultiplier(colour));
}
public Icon getIconForPart(PartTransmitter<?> part)
{
Icon[] icons = typeMap.get(part.getTransmissionType());
return icons[part.isActive ? 1 : 0];
}
public CCModel getModelForPart(Size size, String name)
{
switch(size)
{
case SMALL: return small_models.get(name);
case LARGE: return large_models.get(name);
default: return small_models.get(name);
}
}
@Override
public void registerIcons(IconRegister register)
{
sideTexture = register.registerIcon("mekanism:models/TransmitterSide");
uniCableTextures[0] = register.registerIcon("mekanism:models/UniversalCable");
uniCableTextures[1] = uniCableTextures[0];
pressTubeTextures[0] = register.registerIcon("mekanism:models/PressurizedTube");
pressTubeTextures[1] = pressTubeTextures[0];
mechPipeTextures[0] = register.registerIcon("mekanism:models/MechanicalPipe");
mechPipeTextures[1] = register.registerIcon("mekanism:models/MechanicalPipeActive");
PartUniversalCable.registerIcons(register);
PartMechanicalPipe.registerIcons(register);
PartPressurizedTube.registerIcons(register);
}
@Override

View file

@ -0,0 +1,37 @@
package mekanism.client.render.mekanism.client.render;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.util.Icon;
public class PartTransmitterIcons {
private Icon sideIcon;
private Icon[] centerIcons;
public PartTransmitterIcons(int numCentres)
{
centerIcons = new Icon[numCentres];
}
public void registerCenterIcons(IconRegister register, String[] filenames)
{
for(int i=0; i<centerIcons.length; i++)
{
centerIcons[i] = register.registerIcon("mekanism:models/"+filenames[i]);
}
}
public void registerSideIcon(IconRegister register, String filename)
{
sideIcon = register.registerIcon("mekanism:models/"+filename);
}
public Icon getSideIcon()
{
return sideIcon;
}
public Icon getCenterIcon(int n)
{
return centerIcons[n];
}
}

View file

@ -65,6 +65,7 @@ import mekanism.common.item.ItemRobit;
import mekanism.common.item.ItemScubaTank;
import mekanism.common.item.ItemWalkieTalkie;
import mekanism.common.multipart.ItemPartTransmitter;
import mekanism.common.multipart.MultipartMekanism;
import mekanism.common.network.PacketConfigurationUpdate;
import mekanism.common.network.PacketConfiguratorState;
import mekanism.common.network.PacketDataRequest;
@ -1229,6 +1230,8 @@ public class Mekanism
//Register to receive subscribed events
MinecraftForge.EVENT_BUS.register(this);
new MultipartMekanism();
//Set up VoiceServerManager
if(voiceServerEnabled)

View file

@ -7,9 +7,12 @@ import mekanism.api.Object3D;
import mekanism.api.transmitters.ITransmitter;
import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.client.render.mekanism.client.render.PartTransmitterIcons;
import mekanism.common.FluidNetwork;
import mekanism.common.PipeUtils;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
@ -25,6 +28,7 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
{
/** The fake tank used for fluid transfer calculations. */
public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME);
public static PartTransmitterIcons pipeIcons;
@Override
public String getType()
@ -32,7 +36,25 @@ public class PartMechanicalPipe extends PartTransmitter<FluidNetwork> implements
return "mekanism:mechanical_pipe";
}
@Override
public static void registerIcons(IconRegister register){
pipeIcons = new PartTransmitterIcons(2);
pipeIcons.registerCenterIcons(register, new String[]{"MechanicalPipe", "MechanicalPipeActive"});
pipeIcons.registerSideIcon(register, "MechanicalPipeSide");
}
@Override
public Icon getCenterIcon()
{
return pipeIcons.getCenterIcon(isActive ? 1 : 0);
}
@Override
public Icon getSideIcon()
{
return pipeIcons.getSideIcon();
}
@Override
public TransmissionType getTransmissionType()
{
return TransmissionType.FLUID;

View file

@ -11,18 +11,42 @@ import mekanism.api.gas.IGasAcceptor;
import mekanism.api.transmitters.ITransmitter;
import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.client.render.mekanism.client.render.PartTransmitterIcons;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Icon;
import net.minecraftforge.common.ForgeDirection;
public class PartPressurizedTube extends PartTransmitter<GasNetwork>
{
public static PartTransmitterIcons tubeIcons;
@Override
public String getType()
{
return "mekanism:pressurized_tube";
}
@Override
public static void registerIcons(IconRegister register)
{
tubeIcons = new PartTransmitterIcons(1);
tubeIcons.registerCenterIcons(register, new String[]{"PressurizedTube"});
tubeIcons.registerSideIcon(register, "TransmitterSideSmall");
}
@Override
public Icon getCenterIcon()
{
return tubeIcons.getCenterIcon(0);
}
@Override
public Icon getSideIcon()
{
return tubeIcons.getSideIcon();
}
@Override
public TransmissionType getTransmissionType()
{
return TransmissionType.GAS;

View file

@ -12,12 +12,15 @@ import mekanism.api.Object3D;
import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.ITransmitter;
import mekanism.api.transmitters.TransmissionType;
import mekanism.api.transmitters.TransmissionType.Size;
import mekanism.api.transmitters.TransmitterNetworkRegistry;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.client.render.mekanism.client.render.PartTransmitterIcons;
import mekanism.common.ITileNetwork;
import mekanism.common.Mekanism;
import mekanism.common.item.ItemConfigurator;
import net.minecraft.client.particle.EffectRenderer;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@ -80,6 +83,16 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends TM
return null;
}
}
public Size getTransmitterSize()
{
return getTransmissionType().transmitterSize;
}
public abstract Icon getCenterIcon();
public abstract Icon getSideIcon();
@Override
public void bind(TileMultipart t)
@ -271,13 +284,13 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> extends TM
@Override
public Icon getBreakingIcon(Object subPart, int side)
{
return RenderPartTransmitter.getInstance().getIconForPart(this);
return getCenterIcon();
}
@Override
public Icon getBrokenIcon(int side)
{
return RenderPartTransmitter.getInstance().getIconForPart(this);
return getCenterIcon();
}
@Override

View file

@ -15,6 +15,9 @@ import codechicken.lib.vec.Vector3;
import codechicken.multipart.TileMultipart;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mekanism.client.render.mekanism.client.render.PartTransmitterIcons;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.util.Icon;
import universalelectricity.core.block.IConductor;
import universalelectricity.core.block.IElectrical;
import universalelectricity.core.electricity.ElectricityPack;
@ -48,6 +51,9 @@ import cpw.mods.fml.relauncher.SideOnly;
public class PartUniversalCable extends PartTransmitter<EnergyNetwork> implements IEnergySink, IEnergyHandler, IElectrical
{
public static PartTransmitterIcons cableIcons;
public PartUniversalCable()
{
super();
@ -59,6 +65,25 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork> implement
return "mekanism:universal_cable";
}
public static void registerIcons(IconRegister register)
{
cableIcons = new PartTransmitterIcons(1);
cableIcons.registerCenterIcons(register, new String[]{"UniversalCable"});
cableIcons.registerSideIcon(register, "TransmitterSideSmall");
}
@Override
public Icon getCenterIcon()
{
return cableIcons.getCenterIcon(0);
}
@Override
public Icon getSideIcon()
{
return cableIcons.getSideIcon();
}
@Override
public TransmissionType getTransmissionType()
{

View file

@ -0,0 +1,184 @@
# Blender v2.66 (sub 1) OBJ File: 'transmitter_large.blend'
# www.blender.org
g downOut
v -0.250000 -0.250000 -0.250000
v -0.250000 -0.500000 -0.250000
v -0.250000 -0.500000 0.250000
v -0.250000 -0.250000 0.250000
v 0.250000 -0.250000 -0.250000
v 0.250000 -0.500000 -0.250000
v 0.250000 -0.500000 0.250000
v 0.250000 -0.250000 0.250000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
vn 0.000000 0.000000 -1.000000
vn -0.000000 0.000000 1.000000
vn -1.000000 -0.000000 0.000000
vn 1.000000 0.000000 0.000000
s off
f 5/1/1 6/2/1 2/3/1 1/4/1
f 7/3/2 8/4/2 4/1/2 3/2/2
f 1/1/3 2/2/3 3/3/3 4/4/3
f 8/1/4 7/2/4 6/3/4 5/4/4
g upOut
v 0.250000 0.250000 -0.250000
v 0.250000 0.500000 -0.250000
v 0.250000 0.500000 0.250000
v 0.250000 0.250000 0.250000
v -0.250000 0.250000 -0.250000
v -0.250000 0.500000 -0.250000
v -0.250000 0.500000 0.250000
v -0.250000 0.250000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.250000
s off
f 13/5/1 14/6/1 10/7/1 9/8/1
f 15/7/2 16/8/2 12/5/2 11/6/2
f 9/5/4 10/6/4 11/7/4 12/8/4
f 16/5/3 15/6/3 14/7/3 13/8/3
g southOut
v 0.250000 -0.250000 0.250000
v 0.250000 -0.250000 0.500000
v -0.250000 -0.250000 0.500000
v -0.250000 -0.250000 0.250000
v 0.250000 0.250000 0.250000
v 0.250000 0.250000 0.500000
v -0.250000 0.250000 0.500000
v -0.250000 0.250000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.250000
vn 1.000000 0.000000 -0.000001
vn -1.000000 0.000000 0.000001
vn 0.000000 -1.000000 0.000000
vn 0.000000 1.000000 0.000000
s off
f 21/9/5 22/10/5 18/11/5 17/12/5
f 23/11/6 24/12/6 20/9/6 19/10/6
f 17/9/7 18/10/7 19/11/7 20/12/7
f 24/9/8 23/10/8 22/11/8 21/12/8
g westOut
v -0.250000 -0.250000 0.250000
v -0.500000 -0.250000 0.250000
v -0.500000 -0.250000 -0.250000
v -0.250000 -0.250000 -0.250000
v -0.250000 0.250000 0.250000
v -0.500000 0.250000 0.250000
v -0.500000 0.250000 -0.250000
v -0.250000 0.250000 -0.250000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
s off
f 29/13/2 30/14/2 26/15/2 25/16/2
f 31/15/1 32/16/1 28/13/1 27/14/1
f 25/13/7 26/14/7 27/15/7 28/16/7
f 32/13/8 31/14/8 30/15/8 29/16/8
g northOut
v -0.250000 -0.250000 -0.250000
v -0.250000 -0.250000 -0.500000
v 0.250000 -0.250000 -0.500000
v 0.250000 -0.250000 -0.250000
v -0.250000 0.250000 -0.250000
v -0.250000 0.250000 -0.500000
v 0.250000 0.250000 -0.500000
v 0.250000 0.250000 -0.250000
vt 0.000000 0.750000
vt 0.000000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
s off
f 37/17/3 38/18/3 34/19/3 33/20/3
f 39/19/4 40/20/4 36/17/4 35/18/4
f 33/17/7 34/18/7 35/19/7 36/20/7
f 40/17/8 39/18/8 38/19/8 37/20/8
g eastOut
v 0.250000 -0.250000 -0.250000
v 0.500000 -0.250000 -0.250000
v 0.500000 -0.250000 0.250000
v 0.250000 -0.250000 0.250000
v 0.250000 0.250000 -0.250000
v 0.500000 0.250000 -0.250000
v 0.500000 0.250000 0.250000
v 0.250000 0.250000 0.250000
vt 1.000000 0.250000
vt 1.000000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.250000
s off
f 45/21/1 46/22/1 42/23/1 41/24/1
f 47/23/2 48/24/2 44/21/2 43/22/2
f 41/21/7 42/22/7 43/23/7 44/24/7
f 48/21/8 47/22/8 46/23/8 45/24/8
g southIn
v 0.250000 -0.250000 0.250000
v -0.250000 -0.250000 0.250000
v 0.250000 0.250000 0.250000
v -0.250000 0.250000 0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 49/25/2 51/26/2 52/27/2 50/28/2
g westIn
v -0.250000 -0.250000 0.250000
v -0.250000 -0.250000 -0.250000
v -0.250000 0.250000 0.250000
v -0.250000 0.250000 -0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 53/29/3 55/30/3 56/31/3 54/32/3
g northIn
v -0.250000 -0.250000 -0.250000
v 0.250000 -0.250000 -0.250000
v -0.250000 0.250000 -0.250000
v 0.250000 0.250000 -0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 57/33/1 59/34/1 60/35/1 58/36/1
g eastIn
v 0.250000 0.250000 -0.250000
v 0.250000 0.250000 0.250000
v 0.250000 -0.250000 -0.250000
v 0.250000 -0.250000 0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 63/37/4 61/38/4 62/39/4 64/40/4
g upIn
v 0.250000 0.250000 0.250000
v -0.250000 0.250000 0.250000
v -0.250000 0.250000 -0.250000
v 0.250000 0.250000 -0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 65/41/8 68/42/8 67/43/8 66/44/8
g downIn
v -0.250000 -0.250000 0.250000
v -0.250000 -0.250000 -0.250000
v 0.250000 -0.250000 -0.250000
v 0.250000 -0.250000 0.250000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
s off
f 69/45/7 70/46/7 71/47/7 72/48/7

Binary file not shown.

After

(image error) Size: 1.4 KiB

Binary file not shown.

After

(image error) Size: 608 B

Binary file not shown.

After

(image error) Size: 244 B

Binary file not shown.

Before

(image error) Size: 1.8 KiB

After

(image error) Size: 1.6 KiB

Binary file not shown.

Before

(image error) Size: 1.8 KiB

After

(image error) Size: 1.6 KiB

Binary file not shown.

After

(image error) Size: 242 B

Binary file not shown.

After

(image error) Size: 1.6 KiB

Binary file not shown.

After

(image error) Size: 249 B