Tweaking of lasers for packet-efficiency
This commit is contained in:
parent
c66676dd55
commit
775ba68482
9 changed files with 66 additions and 97 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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) {}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue