package mods.eln.transparentnode.turret; import mods.eln.item.EntitySensorFilterDescriptor; import mods.eln.misc.Direction; import mods.eln.misc.Utils; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElementInventory; import mods.eln.node.transparent.TransparentNodeElementRender; import mods.eln.node.transparent.TransparentNodeEntity; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class TurretRender extends TransparentNodeElementRender { private final TurretDescriptor descriptor; private final TurretMechanicsSimulation simulation; private final TransparentNodeElementInventory inventory = new TransparentNodeElementInventory(1, 1, this); EntitySensorFilterDescriptor filter = null; boolean filterIsSpare; float chargePower; public TurretRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) { super(tileEntity, descriptor); this.descriptor = (TurretDescriptor) descriptor; simulation = new TurretMechanicsSimulation(this.descriptor); } public float getTurretAngle() { return simulation.getTurretAngle(); } public float getGunPosition() { return simulation.getGunPosition(); } public float getGunElevation() { return simulation.getGunElevation(); } public boolean isShooting() { return simulation.isShooting(); } public boolean isEnabled() { return simulation.isEnabled(); } public void clientToggleFilterMeaning() { clientSendId(TurretElement.ToggleFilterMeaning); } public void clientSetChargePower(float power) { try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream stream = new DataOutputStream(bos); preparePacketForServer(stream); stream.writeByte(TurretElement.UnserializeChargePower); stream.writeFloat(power); sendPacketToServer(bos); } catch (IOException e) { e.printStackTrace(); } } @Override public void draw() { GL11.glPushMatrix(); front.glRotateXnRef(); descriptor.draw(this); GL11.glPopMatrix(); } @Override public void refresh(float deltaT) { super.refresh(deltaT); simulation.process(deltaT); } @Override public void networkUnserialize(DataInputStream stream) { super.networkUnserialize(stream); try { simulation.setTurretAngle(stream.readFloat()); simulation.setGunPosition(stream.readFloat()); simulation.setGunElevation(stream.readFloat()); simulation.setSeekMode(stream.readBoolean()); if (stream.readBoolean()) simulation.shoot(); simulation.setEnabled(stream.readBoolean()); ItemStack filterStack = Utils.unserialiseItemStack(stream); filter = (EntitySensorFilterDescriptor) EntitySensorFilterDescriptor.getDescriptor(filterStack); filterIsSpare = stream.readBoolean(); chargePower = stream.readFloat(); } catch (IOException e) { e.printStackTrace(); } } @Override public GuiScreen newGuiDraw(Direction side, EntityPlayer player) { return new TurretGui(player, inventory, this); } }