Cached Tesla objects; improving performance

This commit is contained in:
Calclavia 2013-08-03 15:09:08 -04:00
parent 052f14c540
commit 489154b92d
2 changed files with 41 additions and 4 deletions

View file

@ -1,5 +1,13 @@
package resonantinduction.fx; package resonantinduction.fx;
import static org.lwjgl.opengl.GL11.GL_BLEND;
import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.GL_SMOOTH;
import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA;
import static org.lwjgl.opengl.GL11.glBlendFunc;
import static org.lwjgl.opengl.GL11.glEnable;
import static org.lwjgl.opengl.GL11.glShadeModel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@ -271,6 +279,10 @@ public class FXElectricBolt extends EntityFX
GL11.glDepthMask(false); GL11.glDepthMask(false);
GL11.glEnable(3042); GL11.glEnable(3042);
glShadeModel(GL_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
FMLClientHandler.instance().getClient().renderEngine.func_110577_a(TEXTURE); FMLClientHandler.instance().getClient().renderEngine.func_110577_a(TEXTURE);
/** /**
* Render the actual bolts. * Render the actual bolts.
@ -278,7 +290,6 @@ public class FXElectricBolt extends EntityFX
tessellator.startDrawingQuads(); tessellator.startDrawingQuads();
tessellator.setBrightness(15728880); tessellator.setBrightness(15728880);
Vector3 playerVector = new Vector3(sinYaw * -cosPitch, -cosSinPitch / cosYaw, cosYaw * cosPitch); Vector3 playerVector = new Vector3(sinYaw * -cosPitch, -cosSinPitch / cosYaw, cosYaw * cosPitch);
float voltage = this.particleAge >= 0 ? ((float) this.particleAge / (float) this.particleMaxAge) : 0.0F;
int renderlength = (int) ((this.particleAge + partialframe + (int) (this.boltLength * 3.0F)) / (int) (this.boltLength * 3.0F) * this.segmentCount); int renderlength = (int) ((this.particleAge + partialframe + (int) (this.boltLength * 3.0F)) / (int) (this.boltLength * 3.0F) * this.segmentCount);
@ -302,7 +313,7 @@ public class FXElectricBolt extends EntityFX
float ry2 = (float) (endVec.y - interpPosY); float ry2 = (float) (endVec.y - interpPosY);
float rz2 = (float) (endVec.z - interpPosZ); float rz2 = (float) (endVec.z - interpPosZ);
tessellator.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, (1.0F - voltage * 0.5f) * segment.alpha); tessellator.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, (1.0F - (this.particleAge >= 0 ? ((float) this.particleAge / (float) this.particleMaxAge) : 0.0F) * 0.6f) * segment.alpha);
tessellator.addVertexWithUV(rx2 - diffNext.x, ry2 - diffNext.y, rz2 - diffNext.z, 0.5D, 0.0D); tessellator.addVertexWithUV(rx2 - diffNext.x, ry2 - diffNext.y, rz2 - diffNext.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 - diffPrev.x, ry1 - diffPrev.y, rz1 - diffPrev.z, 0.5D, 0.0D); tessellator.addVertexWithUV(rx1 - diffPrev.x, ry1 - diffPrev.y, rz1 - diffPrev.z, 0.5D, 0.0D);
tessellator.addVertexWithUV(rx1 + diffPrev.x, ry1 + diffPrev.y, rz1 + diffPrev.z, 0.5D, 1.0D); tessellator.addVertexWithUV(rx1 + diffPrev.x, ry1 + diffPrev.y, rz1 + diffPrev.z, 0.5D, 1.0D);

View file

@ -42,6 +42,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
public final Set<TileEntityTesla> temporarilyBlacklist = new HashSet<TileEntityTesla>(); public final Set<TileEntityTesla> temporarilyBlacklist = new HashSet<TileEntityTesla>();
private final Set<TileEntityTesla> connectedTeslas = new HashSet<TileEntityTesla>(); private final Set<TileEntityTesla> connectedTeslas = new HashSet<TileEntityTesla>();
/**
* Caching
*/
private TileEntityTesla topCache = null;
private TileEntityTesla controlCache = null;
@Override @Override
public void initiate() public void initiate()
{ {
@ -139,7 +145,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f))); tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f)));
this.transfer(-transferEnergy); this.transfer(-transferEnergy);
if (count++ > 2) if (count++ > 1)
{ {
break; break;
} }
@ -221,6 +227,8 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
{ {
this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord);
} }
this.clearCache();
} }
@Override @Override
@ -262,6 +270,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord) == 0; return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord) == 0;
} }
private void clearCache()
{
this.topCache = null;
this.controlCache = null;
}
@Override @Override
public void transfer(float transferEnergy) public void transfer(float transferEnergy)
{ {
@ -284,7 +298,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
public int getRange() public int getRange()
{ {
return Math.min(4 * (this.getHeight() - 1), 50); return Math.min(5 * (this.getHeight() - 1), 50);
} }
public void updatePositionStatus() public void updatePositionStatus()
@ -313,6 +327,11 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
*/ */
public TileEntityTesla getTopTelsa() public TileEntityTesla getTopTelsa()
{ {
if (this.topCache != null)
{
return this.topCache;
}
this.connectedTeslas.clear(); this.connectedTeslas.clear();
Vector3 checkPosition = new Vector3(this); Vector3 checkPosition = new Vector3(this);
TileEntityTesla returnTile = this; TileEntityTesla returnTile = this;
@ -334,6 +353,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
checkPosition.y++; checkPosition.y++;
} }
this.topCache = returnTile;
return returnTile; return returnTile;
} }
@ -344,6 +364,11 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
*/ */
public TileEntityTesla getControllingTelsa() public TileEntityTesla getControllingTelsa()
{ {
if (this.controlCache != null)
{
return this.controlCache;
}
Vector3 checkPosition = new Vector3(this); Vector3 checkPosition = new Vector3(this);
TileEntityTesla returnTile = this; TileEntityTesla returnTile = this;
@ -363,6 +388,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
checkPosition.y--; checkPosition.y--;
} }
this.controlCache = returnTile;
return returnTile; return returnTile;
} }