Improved battery rendering
|
@ -12,7 +12,7 @@ public class BatteryNetwork extends Network<BatteryNetwork, TileBattery>
|
||||||
|
|
||||||
for (TileBattery battery : this.getConnectors())
|
for (TileBattery battery : this.getConnectors())
|
||||||
{
|
{
|
||||||
totalEnergy += battery.getEnergy(null);
|
totalEnergy += battery.energy.getEnergy();
|
||||||
}
|
}
|
||||||
|
|
||||||
int amountOfNodes = this.getConnectors().size() - exclusion.length;
|
int amountOfNodes = this.getConnectors().size() - exclusion.length;
|
||||||
|
@ -30,11 +30,11 @@ public class BatteryNetwork extends Network<BatteryNetwork, TileBattery>
|
||||||
{
|
{
|
||||||
if (battery == firstNode)
|
if (battery == firstNode)
|
||||||
{
|
{
|
||||||
battery.setEnergy(null, totalPerBatteryRemainder);
|
battery.energy.setEnergy(totalPerBatteryRemainder);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
battery.setEnergy(null, totalPerBattery);
|
battery.energy.setEnergy(totalPerBattery);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ package resonantinduction.electrical.battery;
|
||||||
|
|
||||||
import static org.lwjgl.opengl.GL11.glPopMatrix;
|
import static org.lwjgl.opengl.GL11.glPopMatrix;
|
||||||
import static org.lwjgl.opengl.GL11.glPushMatrix;
|
import static org.lwjgl.opengl.GL11.glPushMatrix;
|
||||||
|
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 net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
||||||
|
@ -18,6 +19,7 @@ import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
import resonantinduction.core.Reference;
|
import resonantinduction.core.Reference;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
|
import calclavia.lib.render.RenderUtility;
|
||||||
import cpw.mods.fml.client.FMLClientHandler;
|
import cpw.mods.fml.client.FMLClientHandler;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
@ -31,7 +33,6 @@ public class RenderBattery extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
public static final ResourceLocation TEXTURE_CAP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_base_cap_tex.png");
|
public static final ResourceLocation TEXTURE_CAP = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_base_cap_tex.png");
|
||||||
public static final ResourceLocation TEXTURE_CASE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_case_tex.png");
|
public static final ResourceLocation TEXTURE_CASE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_case_tex.png");
|
||||||
public static final ResourceLocation TEXTURE_LEVELS = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_levels.png");
|
|
||||||
public static final WavefrontObject MODEL = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "battery/battery.obj");
|
public static final WavefrontObject MODEL = (WavefrontObject) AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "battery/battery.obj");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -41,52 +42,88 @@ public class RenderBattery extends TileEntitySpecialRenderer
|
||||||
{
|
{
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F);
|
glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F);
|
||||||
glScalef(0.46f, 0.46f, 0.46f);
|
glScalef(0.5f, 0.5f, 0.5f);
|
||||||
GL11.glRotatef(90 * i, 0, 1, 0);
|
|
||||||
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
ForgeDirection dir = ForgeDirection.getOrientation(i);
|
||||||
|
|
||||||
|
switch (dir)
|
||||||
|
{
|
||||||
|
case NORTH:
|
||||||
|
glRotatef(0, 0, 1, 0);
|
||||||
|
break;
|
||||||
|
case SOUTH:
|
||||||
|
glRotatef(180, 0, 1, 0);
|
||||||
|
break;
|
||||||
|
case WEST:
|
||||||
|
glRotatef(90, 0, 1, 0);
|
||||||
|
break;
|
||||||
|
case EAST:
|
||||||
|
glRotatef(-90, 0, 1, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we're rendering in the world:
|
||||||
|
*/
|
||||||
if (t.worldObj != null)
|
if (t.worldObj != null)
|
||||||
{
|
{
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_LEVELS);
|
TileBattery tile = (TileBattery) t;
|
||||||
MODEL.renderPart("Battery");
|
|
||||||
|
|
||||||
// Render top and bottom
|
|
||||||
//if (!(new Vector3(t).translate(dir).getTileEntity(t.worldObj) instanceof TileBattery))
|
|
||||||
{
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
|
||||||
|
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_" + (int) (((double) tile.energy.getEnergy() / (double) tile.energy.getEnergyCapacity()) * 10) + ".png");
|
||||||
MODEL.renderPart("CapCorner");
|
MODEL.renderPart("Battery");
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
|
||||||
MODEL.renderPart("BaseCorner");
|
// Render top and bottom
|
||||||
}
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
||||||
|
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
|
MODEL.renderPart("CapCorner");
|
||||||
|
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
|
MODEL.renderPart("BaseCorner");
|
||||||
|
|
||||||
// If quadrant with one external neighbor
|
// If quadrant with one external neighbor
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
||||||
|
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
MODEL.renderPart("CapEdge");
|
MODEL.renderPart("CapEdge");
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
MODEL.renderPart("BaseEdge");
|
MODEL.renderPart("BaseEdge");
|
||||||
|
|
||||||
// if quadrant with three external neighbors //can't have quadrant with 2 external
|
/*
|
||||||
// neighbors in rectangular prism
|
* If quadrant with three external neighbors //can't have quadrant with 2 external
|
||||||
|
* neighbors in rectangular prism
|
||||||
|
*/
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
if (!(new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
MODEL.renderPart("CapInterior");
|
MODEL.renderPart("CapInterior");
|
||||||
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
if (!(new Vector3(t).translate(ForgeDirection.DOWN).getTileEntity(t.worldObj) instanceof TileBattery))
|
||||||
MODEL.renderPart("BaseInterior");
|
MODEL.renderPart("BaseInterior");
|
||||||
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE);
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE);
|
||||||
|
|
||||||
|
if (tile.getInputDirections().contains(dir))
|
||||||
|
{
|
||||||
|
GL11.glColor3f(0, 0.294f, 0.498f);
|
||||||
|
}
|
||||||
|
else if (tile.getOutputDirections().contains(dir))
|
||||||
|
{
|
||||||
|
GL11.glColor3f(1, 0.478f, 0.01f);
|
||||||
|
}
|
||||||
|
|
||||||
MODEL.renderPart("BatteryCase");
|
MODEL.renderPart("BatteryCase");
|
||||||
|
|
||||||
|
GL11.glColor3f(1, 1, 1);
|
||||||
|
|
||||||
if (new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)
|
if (new Vector3(t).translate(ForgeDirection.UP).getTileEntity(t.worldObj) instanceof TileBattery)
|
||||||
MODEL.renderPart("VertConnector");
|
MODEL.renderPart("VertConnector");
|
||||||
}else
|
|
||||||
{
|
|
||||||
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
|
||||||
MODEL.renderAll();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO: Fix energy level.
|
||||||
|
RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/bat_level_0.png");
|
||||||
|
MODEL.renderPart("Battery");
|
||||||
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CAP);
|
||||||
|
MODEL.renderOnly("CapCorner", "BaseCorner", "CapEdge", "BaseEdge", "CapInterior", "BaseInterior");
|
||||||
|
FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE_CASE);
|
||||||
|
MODEL.renderOnly("BatteryCase");
|
||||||
|
}
|
||||||
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
package resonantinduction.electrical.battery;
|
package resonantinduction.electrical.battery;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.network.packet.Packet;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.core.ResonantInduction;
|
import resonantinduction.core.ResonantInduction;
|
||||||
import resonantinduction.mechanical.network.IMechanical;
|
|
||||||
import universalelectricity.api.UniversalElectricity;
|
import universalelectricity.api.UniversalElectricity;
|
||||||
import universalelectricity.api.electricity.IVoltageInput;
|
import universalelectricity.api.electricity.IVoltageInput;
|
||||||
import universalelectricity.api.electricity.IVoltageOutput;
|
import universalelectricity.api.electricity.IVoltageOutput;
|
||||||
|
@ -23,8 +21,6 @@ import calclavia.lib.prefab.tile.TileElectrical;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
import cpw.mods.fml.common.network.PacketDispatcher;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A modular battery.
|
* A modular battery.
|
||||||
*
|
*
|
||||||
|
@ -40,11 +36,7 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
|
|
||||||
private BatteryNetwork network;
|
private BatteryNetwork network;
|
||||||
|
|
||||||
public Set<EntityPlayer> playersUsing = new HashSet<EntityPlayer>();
|
public boolean markUpdate = false;
|
||||||
|
|
||||||
public float clientEnergy;
|
|
||||||
public int clientCells;
|
|
||||||
public float clientMaxEnergy;
|
|
||||||
|
|
||||||
public TileBattery()
|
public TileBattery()
|
||||||
{
|
{
|
||||||
|
@ -74,7 +66,7 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
energy.setCapacity(getEnergyForTier(getBlockMetadata()));
|
energy.setCapacity(getEnergyForTier(getBlockMetadata()));
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
|
TileEntity tile = new Vector3(this).translate(dir).getTileEntity(this.worldObj);
|
||||||
|
|
||||||
if (tile instanceof TileBattery)
|
if (tile instanceof TileBattery)
|
||||||
{
|
{
|
||||||
|
@ -84,6 +76,7 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
|
|
||||||
this.energy.setMaxTransfer(DEFAULT_WATTAGE * this.getNetwork().getConnectors().size());
|
this.energy.setMaxTransfer(DEFAULT_WATTAGE * this.getNetwork().getConnectors().size());
|
||||||
this.getNetwork().redistribute();
|
this.getNetwork().redistribute();
|
||||||
|
markUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +91,11 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
{
|
{
|
||||||
this.getNetwork().redistribute();
|
this.getNetwork().redistribute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (markUpdate && ticks % 5 == 0)
|
||||||
|
{
|
||||||
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,6 +104,7 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
{
|
{
|
||||||
long returnValue = super.onReceiveEnergy(from, receive, doReceive);
|
long returnValue = super.onReceiveEnergy(from, receive, doReceive);
|
||||||
this.getNetwork().redistribute();
|
this.getNetwork().redistribute();
|
||||||
|
markUpdate = true;
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,23 +113,29 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
{
|
{
|
||||||
long returnValue = super.onExtractEnergy(from, extract, doExtract);
|
long returnValue = super.onExtractEnergy(from, extract, doExtract);
|
||||||
this.getNetwork().redistribute();
|
this.getNetwork().redistribute();
|
||||||
|
markUpdate = true;
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateClient()
|
@Override
|
||||||
|
public Packet getDescriptionPacket()
|
||||||
{
|
{
|
||||||
PacketDispatcher.sendPacketToAllPlayers(ResonantInduction.PACKET_TILE.getPacket(this, getPacketData(0).toArray()));
|
return ResonantInduction.PACKET_TILE.getPacket(this, getPacketData(0).toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
|
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
|
||||||
{
|
{
|
||||||
|
energy.setEnergy(data.readLong());
|
||||||
|
ioMap = data.readShort();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ArrayList getPacketData(int type)
|
public ArrayList getPacketData(int type)
|
||||||
{
|
{
|
||||||
ArrayList data = new ArrayList();
|
ArrayList data = new ArrayList();
|
||||||
|
data.add(energy.getEnergy());
|
||||||
|
data.add((short) ioMap);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +164,7 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
||||||
{
|
{
|
||||||
TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
|
TileEntity tile = new Vector3(this).translate(dir).getTileEntity(this.worldObj);
|
||||||
|
|
||||||
if (tile instanceof TileBattery)
|
if (tile instanceof TileBattery)
|
||||||
{
|
{
|
||||||
|
@ -201,4 +206,11 @@ public class TileBattery extends TileElectrical implements IConnector<BatteryNet
|
||||||
{
|
{
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setIO(ForgeDirection dir, int type)
|
||||||
|
{
|
||||||
|
super.setIO(dir, type);
|
||||||
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
After Width: | Height: | Size: 737 B |
After Width: | Height: | Size: 736 B |
After Width: | Height: | Size: 608 B |
After Width: | Height: | Size: 719 B |
After Width: | Height: | Size: 703 B |
After Width: | Height: | Size: 694 B |
After Width: | Height: | Size: 686 B |
After Width: | Height: | Size: 674 B |
After Width: | Height: | Size: 661 B |
After Width: | Height: | Size: 641 B |
After Width: | Height: | Size: 633 B |
Before Width: | Height: | Size: 209 B |