Tweaking of lasers for packet-efficiency

This commit is contained in:
Ben Spiers 2014-07-22 22:34:19 +01:00
parent c66676dd55
commit 775ba68482
9 changed files with 66 additions and 97 deletions

View file

@ -34,7 +34,17 @@ public class LaserManager
((ILaserReceptor)tile).receiveLaserEnergy(energy, ForgeDirection.getOrientation(mop.sideHit));
}
}
}
}
public static void fireLaserClient(Coord4D from, ForgeDirection direction, World world)
{
Coord4D rangeFrom = from.getFromSide(direction, 1);
Coord4D to = from.getFromSide(direction, range);
MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(rangeFrom.xCoord, rangeFrom.yCoord, rangeFrom.zCoord), Vec3.createVectorHelper(to.xCoord, to.yCoord, to.zCoord));
if(mop != null)
{
Mekanism.proxy.renderLaser(world, from, new Coord4D(mop.blockX, mop.blockY, mop.blockZ), direction);
}
else
@ -42,4 +52,5 @@ public class LaserManager
Mekanism.proxy.renderLaser(world, from, to, direction);
}
}
}

View file

@ -591,10 +591,4 @@ public class ClientProxy extends CommonProxy
{
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityLaser(world, from, to, direction));
}
@Override
public boolean isClientSide()
{
return true;
}
}

View file

@ -28,7 +28,7 @@ public class EntityLaser extends EntityFX
particleRed = 1;
particleGreen = 0;
particleBlue = 0;
particleAlpha = 0.3F;
particleAlpha = 0.1F;
particleScale = 0.1F;
length = new Pos3D(end).distance(new Pos3D(start));
this.direction = direction;
@ -40,6 +40,8 @@ public class EntityLaser extends EntityFX
tessellator.draw();
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_POLYGON_BIT + GL11.GL_ENABLE_BIT);
GL11.glDisable(GL11.GL_CULL_FACE);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("mekanism", "particles/laser.png"));
float newX = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTick - interpPosX);
@ -81,6 +83,7 @@ public class EntityLaser extends EntityFX
tessellator.addVertexWithUV(particleScale, -length/2, 0, 1, 0);
tessellator.draw();
GL11.glPopAttrib();
GL11.glPopMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(MekanismRenderer.getBlocksTexture());

View file

@ -38,7 +38,6 @@ import mekanism.common.inventory.container.ContainerSalinationController;
import mekanism.common.inventory.container.ContainerSeismicVibrator;
import mekanism.common.inventory.container.ContainerTeleporter;
import mekanism.common.inventory.container.ContainerUpgradeManagement;
import mekanism.common.network.PacketLaserFire.LaserFireMessage;
import mekanism.common.tile.TileEntityAdvancedElectricMachine;
import mekanism.common.tile.TileEntityAdvancedFactory;
import mekanism.common.tile.TileEntityBin;
@ -475,13 +474,5 @@ public class CommonProxy
return context.getServerHandler().playerEntity;
}
public void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction)
{
Mekanism.packetHandler.sendToAllAround(new LaserFireMessage(from, to, direction), from.getTargetPoint(50D));
}
public boolean isClientSide()
{
return false;
}
public void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction) {}
}

View file

@ -13,9 +13,6 @@ public interface ITileNetwork
{
/**
* Receive and manage a packet's data.
* @param network
* @param packet
* @param player
* @param dataStream
*/
public void handlePacketData(ByteBuf dataStream) throws Exception;

View file

@ -33,8 +33,6 @@ import mekanism.common.network.PacketJetpackData;
import mekanism.common.network.PacketJetpackData.JetpackDataMessage;
import mekanism.common.network.PacketKey;
import mekanism.common.network.PacketKey.KeyMessage;
import mekanism.common.network.PacketLaserFire;
import mekanism.common.network.PacketLaserFire.LaserFireMessage;
import mekanism.common.network.PacketLogisticalSorterGui;
import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage;
import mekanism.common.network.PacketNewFilter;
@ -120,7 +118,6 @@ public class PacketHandler
netHandler.registerMessage(PacketPortableTankState.class, PortableTankStateMessage.class, 25, Side.SERVER);
netHandler.registerMessage(PacketContainerEditMode.class, ContainerEditModeMessage.class, 26, Side.SERVER);
netHandler.registerMessage(PacketFlamethrowerActive.class, FlamethrowerActiveMessage.class, 27, Side.SERVER);
netHandler.registerMessage(PacketLaserFire.class, LaserFireMessage.class, 28, Side.CLIENT);
}
/**

View file

@ -1,71 +0,0 @@
package mekanism.common.network;
import mekanism.api.Coord4D;
import mekanism.common.IRedstoneControl.RedstoneControl;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.network.PacketLaserFire.LaserFireMessage;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.util.ForgeDirection;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
public class PacketLaserFire implements IMessageHandler<LaserFireMessage, IMessage>
{
@Override
public IMessage onMessage(LaserFireMessage message, MessageContext context)
{
EntityPlayer player = PacketHandler.getPlayer(context);
if(Mekanism.proxy.isClientSide())
{
Mekanism.proxy.renderLaser(player.worldObj, message.from, message.to, message.direction);
}
return null;
}
public static class LaserFireMessage implements IMessage
{
public Coord4D from;
public Coord4D to;
public ForgeDirection direction;
public LaserFireMessage() {}
public LaserFireMessage(Coord4D from, Coord4D to, ForgeDirection direction)
{
this.from = from;
this.to = to;
this.direction = direction;
}
@Override
public void toBytes(ByteBuf dataStream)
{
dataStream.writeInt(from.xCoord);
dataStream.writeInt(from.yCoord);
dataStream.writeInt(from.zCoord);
dataStream.writeInt(from.dimensionId);
dataStream.writeInt(to.xCoord);
dataStream.writeInt(to.yCoord);
dataStream.writeInt(to.zCoord);
dataStream.writeInt(to.dimensionId);
dataStream.writeInt(direction.ordinal());
}
@Override
public void fromBytes(ByteBuf dataStream)
{
from = Coord4D.read(dataStream);
to = Coord4D.read(dataStream);
direction = ForgeDirection.getOrientation(dataStream.readInt());
}
}
}

View file

@ -9,6 +9,7 @@ import mekanism.api.gas.GasStack;
import mekanism.api.transmitters.IGridTransmitter;
import mekanism.common.EnergyNetwork;
import mekanism.common.FluidNetwork;
import mekanism.common.Mekanism;
import mekanism.common.PacketHandler;
import mekanism.common.network.PacketTransmitterUpdate.TransmitterUpdateMessage;
import net.minecraft.entity.player.EntityPlayer;

View file

@ -1,15 +1,23 @@
package mekanism.common.tile;
import java.util.ArrayList;
import mekanism.api.Coord4D;
import mekanism.api.lasers.LaserManager;
import mekanism.common.Mekanism;
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.ForgeDirection;
import io.netty.buffer.ByteBuf;
public class TileEntityLaser extends TileEntityElectricBlock
{
public static final double LASER_ENERGY = 50000;
public boolean on;
public TileEntityLaser()
{
super("Laser", 100000);
@ -21,10 +29,48 @@ public class TileEntityLaser extends TileEntityElectricBlock
{
super.onUpdate();
if(getEnergy() >= LASER_ENERGY)
if(worldObj.isRemote)
{
LaserManager.fireLaser(Coord4D.get(this), ForgeDirection.getOrientation(facing), LASER_ENERGY, worldObj);
setEnergy(getEnergy()-LASER_ENERGY);
if(on)
{
LaserManager.fireLaserClient(Coord4D.get(this), ForgeDirection.getOrientation(facing), worldObj);
}
}
else
{
if(getEnergy() >= LASER_ENERGY)
{
if(!on)
{
on = true;
Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D));
}
LaserManager.fireLaser(Coord4D.get(this), ForgeDirection.getOrientation(facing), LASER_ENERGY, worldObj);
setEnergy(getEnergy() - LASER_ENERGY);
}
else if(on)
{
on = false;
Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D));
}
}
}
@Override
public ArrayList getNetworkedData(ArrayList data)
{
super.getNetworkedData(data);
data.add(on);
return data;
}
@Override
public void handlePacketData(ByteBuf dataStream)
{
super.handlePacketData(dataStream);
on = dataStream.readBoolean();
}
}