From 489154b92d331a52c70e9cf799430927427f8c7c Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 3 Aug 2013 15:09:08 -0400 Subject: [PATCH] Cached Tesla objects; improving performance --- src/resonantinduction/fx/FXElectricBolt.java | 15 ++++++++-- .../tesla/TileEntityTesla.java | 30 +++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/resonantinduction/fx/FXElectricBolt.java b/src/resonantinduction/fx/FXElectricBolt.java index 40fde6fa2..0a6e1638d 100644 --- a/src/resonantinduction/fx/FXElectricBolt.java +++ b/src/resonantinduction/fx/FXElectricBolt.java @@ -1,5 +1,13 @@ 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.Collections; import java.util.Comparator; @@ -271,6 +279,10 @@ public class FXElectricBolt extends EntityFX GL11.glDepthMask(false); 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); /** * Render the actual bolts. @@ -278,7 +290,6 @@ public class FXElectricBolt extends EntityFX tessellator.startDrawingQuads(); tessellator.setBrightness(15728880); 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); @@ -302,7 +313,7 @@ public class FXElectricBolt extends EntityFX float ry2 = (float) (endVec.y - interpPosY); 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(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); diff --git a/src/resonantinduction/tesla/TileEntityTesla.java b/src/resonantinduction/tesla/TileEntityTesla.java index 5429b32a5..d37ef45e9 100644 --- a/src/resonantinduction/tesla/TileEntityTesla.java +++ b/src/resonantinduction/tesla/TileEntityTesla.java @@ -42,6 +42,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe public final Set temporarilyBlacklist = new HashSet(); private final Set connectedTeslas = new HashSet(); + /** + * Caching + */ + private TileEntityTesla topCache = null; + private TileEntityTesla controlCache = null; + @Override 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))); this.transfer(-transferEnergy); - if (count++ > 2) + if (count++ > 1) { break; } @@ -221,6 +227,8 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe { this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } + + this.clearCache(); } @Override @@ -262,6 +270,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord) == 0; } + private void clearCache() + { + this.topCache = null; + this.controlCache = null; + } + @Override public void transfer(float transferEnergy) { @@ -284,7 +298,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe public int getRange() { - return Math.min(4 * (this.getHeight() - 1), 50); + return Math.min(5 * (this.getHeight() - 1), 50); } public void updatePositionStatus() @@ -313,6 +327,11 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe */ public TileEntityTesla getTopTelsa() { + if (this.topCache != null) + { + return this.topCache; + } + this.connectedTeslas.clear(); Vector3 checkPosition = new Vector3(this); TileEntityTesla returnTile = this; @@ -334,6 +353,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe checkPosition.y++; } + this.topCache = returnTile; return returnTile; } @@ -344,6 +364,11 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe */ public TileEntityTesla getControllingTelsa() { + if (this.controlCache != null) + { + return this.controlCache; + } + Vector3 checkPosition = new Vector3(this); TileEntityTesla returnTile = this; @@ -363,6 +388,7 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe checkPosition.y--; } + this.controlCache = returnTile; return returnTile; }