From ceca58d5f9e0e9653420db9ac473ae898e1cb817 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Wed, 7 Aug 2013 22:27:34 -0400 Subject: [PATCH] Made EM Contractor render straight beams, less lag --- src/resonantinduction/ClientProxy.java | 4 +- src/resonantinduction/CommonProxy.java | 13 ++++- .../contractor/TileEntityEMContractor.java | 22 +++----- src/resonantinduction/fx/FXElectricBolt.java | 52 +++++++++++-------- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/src/resonantinduction/ClientProxy.java b/src/resonantinduction/ClientProxy.java index 996aab0d..949387be 100644 --- a/src/resonantinduction/ClientProxy.java +++ b/src/resonantinduction/ClientProxy.java @@ -90,11 +90,11 @@ public class ClientProxy extends CommonProxy } @Override - public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b) + public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b, boolean split) { if (world.isRemote) { - FMLClientHandler.instance().getClient().effectRenderer.addEffect(new FXElectricBolt(world, start, target).setColor(r, g, b)); + FMLClientHandler.instance().getClient().effectRenderer.addEffect(new FXElectricBolt(world, start, target, split).setColor(r, g, b)); } } } diff --git a/src/resonantinduction/CommonProxy.java b/src/resonantinduction/CommonProxy.java index 073f8831..b850459c 100644 --- a/src/resonantinduction/CommonProxy.java +++ b/src/resonantinduction/CommonProxy.java @@ -52,16 +52,26 @@ public class CommonProxy implements IGuiHandler return false; } - public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b) + public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b, boolean split) { } + public void renderElectricShock(World world, Vector3 start, Vector3 target, float r, float g, float b) + { + this.renderElectricShock(world, start, target, r, g, b, true); + } + public void renderElectricShock(World world, Vector3 start, Vector3 target, Vector3 color) { this.renderElectricShock(world, start, target, (float) color.x, (float) color.y, (float) color.z); } + public void renderElectricShock(World world, Vector3 start, Vector3 target, Vector3 color, boolean split) + { + this.renderElectricShock(world, start, target, (float) color.x, (float) color.y, (float) color.z, split); + } + public void renderElectricShock(World world, Vector3 start, Vector3 target) { renderElectricShock(world, start, target, 0.55f, 0.7f, 1f); @@ -71,4 +81,5 @@ public class CommonProxy implements IGuiHandler { return false; } + } diff --git a/src/resonantinduction/contractor/TileEntityEMContractor.java b/src/resonantinduction/contractor/TileEntityEMContractor.java index b7935694..f848da56 100644 --- a/src/resonantinduction/contractor/TileEntityEMContractor.java +++ b/src/resonantinduction/contractor/TileEntityEMContractor.java @@ -138,8 +138,8 @@ public class TileEntityEMContractor extends TileEntityAdvanced implements IPacke } } - int renderFrequency = ResonantInduction.proxy.isFancy() ? 1 + this.worldObj.rand.nextInt(2) : 10 + this.worldObj.rand.nextInt(2); - boolean renderBeam = this.ticks % renderFrequency == 0 && this.linked != null && !this.linked.isInvalid() && this.linked.suck != this.suck; + final int renderFrequency = ResonantInduction.proxy.isFancy() ? 1 + this.worldObj.rand.nextInt(2) : 10 + this.worldObj.rand.nextInt(2); + final boolean renderBeam = this.ticks % renderFrequency == 0 && this.linked != null && !this.linked.isInvalid() && this.linked.suck != this.suck; if (!this.suck) { @@ -147,21 +147,17 @@ public class TileEntityEMContractor extends TileEntityAdvanced implements IPacke { if (renderBeam) { - ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(this).translate(new Vector3(this.getDirection())).translate(0.5), TileEntityTesla.dyeColors[dyeID]); + ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(this).translate(new Vector3(this.getDirection())).translate(0.5), TileEntityTesla.dyeColors[dyeID], false); } if (this.pathfinder != null) { - Vector3 lastTurn = null; - ForgeDirection lastDirection = null; - for (int i = 0; i < this.pathfinder.results.size(); i++) { Vector3 result = this.pathfinder.results.get(i).clone(); if (TileEntityEMContractor.canBePath(this.worldObj, result)) { - // TODO: RENDER BEAMS ONLY ON CHANGE. SAVE CALCULATIONS! if (i - 1 >= 0) { Vector3 prevResult = this.pathfinder.results.get(i - 1).clone(); @@ -171,13 +167,7 @@ public class TileEntityEMContractor extends TileEntityAdvanced implements IPacke if (renderBeam) { - ResonantInduction.proxy.renderElectricShock(this.worldObj, prevResult.clone().translate(0.5), result.clone().translate(0.5), TileEntityTesla.dyeColors[dyeID]); - } - - if (lastTurn == null || direction != lastDirection) - { - lastTurn = result; - lastDirection = direction; + ResonantInduction.proxy.renderElectricShock(this.worldObj, prevResult.clone().translate(0.5), result.clone().translate(0.5), TileEntityTesla.dyeColors[dyeID], false); } AxisAlignedBB bounds = AxisAlignedBB.getAABBPool().getAABB(result.x, result.y, result.z, result.x + 1, result.y + 1, result.z + 1); @@ -203,7 +193,7 @@ public class TileEntityEMContractor extends TileEntityAdvanced implements IPacke { if (renderBeam) { - ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(this).translate(new Vector3(this.getDirection())).translate(0.5), TileEntityTesla.dyeColors[dyeID]); + ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(this).translate(new Vector3(this.getDirection())).translate(0.5), TileEntityTesla.dyeColors[dyeID], false); } this.pathfinder = null; @@ -214,7 +204,7 @@ public class TileEntityEMContractor extends TileEntityAdvanced implements IPacke { if (renderBeam) { - ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(entityItem), TileEntityTesla.dyeColors[dyeID]); + ResonantInduction.proxy.renderElectricShock(this.worldObj, new Vector3(this).translate(0.5), new Vector3(entityItem), TileEntityTesla.dyeColors[dyeID], false); } this.moveEntity(entityItem, this.getDirection(), new Vector3(this)); diff --git a/src/resonantinduction/fx/FXElectricBolt.java b/src/resonantinduction/fx/FXElectricBolt.java index 041b6c92..91540992 100644 --- a/src/resonantinduction/fx/FXElectricBolt.java +++ b/src/resonantinduction/fx/FXElectricBolt.java @@ -60,7 +60,7 @@ public class FXElectricBolt extends EntityFX private int maxSplitID; private Random rand; - public FXElectricBolt(World world, Vector3 startVec, Vector3 targetVec) + public FXElectricBolt(World world, Vector3 startVec, Vector3 targetVec, boolean doSplits) { super(world, startVec.x, startVec.y, startVec.z); @@ -79,39 +79,47 @@ public class FXElectricBolt extends EntityFX this.complexity = 2f; this.boltWidth = 0.05f; this.boltLength = this.start.distance(this.end); - this.setUp(); + this.setUp(doSplits); + } + + public FXElectricBolt(World world, Vector3 startVec, Vector3 targetVec) + { + this(world, startVec, targetVec, true); } /** * Calculate all required segments of the entire bolt. */ - private void setUp() + private void setUp(boolean doSplits) { this.segments.add(new BoltSegment(this.start, this.end)); this.recalculate(); - double offsetRatio = this.boltLength * this.complexity; - this.split(2, offsetRatio / 10, 0.7f, 0.1f, 20 / 2); - this.split(2, offsetRatio / 15, 0.5f, 0.1f, 25 / 2); - this.split(2, offsetRatio / 25, 0.5f, 0.1f, 28 / 2); - this.split(2, offsetRatio / 38, 0.5f, 0.1f, 30 / 2); - this.split(2, offsetRatio / 55, 0, 0, 0); - this.split(2, offsetRatio / 70, 0, 0, 0); - this.recalculate(); - - Collections.sort(this.segments, new Comparator() + if (doSplits) { - public int compare(BoltSegment bolt1, BoltSegment bolt2) - { - return Float.compare(bolt2.alpha, bolt1.alpha); - } + double offsetRatio = this.boltLength * this.complexity; + this.split(2, offsetRatio / 10, 0.7f, 0.1f, 20 / 2); + this.split(2, offsetRatio / 15, 0.5f, 0.1f, 25 / 2); + this.split(2, offsetRatio / 25, 0.5f, 0.1f, 28 / 2); + this.split(2, offsetRatio / 38, 0.5f, 0.1f, 30 / 2); + this.split(2, offsetRatio / 55, 0, 0, 0); + this.split(2, offsetRatio / 70, 0, 0, 0); + this.recalculate(); - @Override - public int compare(Object obj1, Object obj2) + Collections.sort(this.segments, new Comparator() { - return compare((BoltSegment) obj1, (BoltSegment) obj2); - } - }); + public int compare(BoltSegment bolt1, BoltSegment bolt2) + { + return Float.compare(bolt2.alpha, bolt1.alpha); + } + + @Override + public int compare(Object obj1, Object obj2) + { + return compare((BoltSegment) obj1, (BoltSegment) obj2); + } + }); + } } public FXElectricBolt setColor(float r, float g, float b)