package mods.eln.transparentnode.electricalmachine;
import mods.eln.cable.CableRenderType;
import mods.eln.misc.Direction;
import mods.eln.misc.LRDUMask;
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 mods.eln.sound.LoopedSound;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import org.lwjgl.opengl.GL11;
import java.io.DataInputStream;
import java.io.IOException;
public class ElectricalMachineRender extends TransparentNodeElementRender {
private final TransparentNodeElementInventory inventory;
final ElectricalMachineDescriptor descriptor;
private final Object drawHandle;
private CableRenderType connectionType;
private final LRDUMask eConn = new LRDUMask();
private EntityItem inEntity;
private EntityItem outEntity;
float powerFactor;
float processState;
private float processStatePerSecond;
float UFactor;
public ElectricalMachineRender(TransparentNodeEntity tileEntity, final TransparentNodeDescriptor descriptor) {
super(tileEntity, descriptor);
this.descriptor = (ElectricalMachineDescriptor) descriptor;
inventory = new ElectricalMachineInventory(2 + this.descriptor.outStackCount, 64, this);
drawHandle = this.descriptor.newDrawHandle();
if (this.descriptor.runningSound != null) {
addLoopedSound(new LoopedSound(this.descriptor.runningSound, coordonate(), ISound.AttenuationType.LINEAR) {
@Override
public float getPitch() {
return powerFactor;
}
@Override
public float getVolume() {
return ElectricalMachineRender.this.descriptor.volumeForRunningSound(processState, powerFactor);
}
});
}
}
@Override
public void draw() {
GL11.glPushMatrix();
front.glRotateXnRef();
descriptor.draw(this, drawHandle, inEntity, outEntity, powerFactor, processState);
GL11.glPopMatrix();
if (descriptor.drawCable())
connectionType = drawCable(front.down(), descriptor.getPowerCableRender(), eConn, connectionType);
}
@Override
public void refresh(float deltaT) {
super.refresh(deltaT);
processState += processStatePerSecond * deltaT;
if (processState > 1f) processState = 1f;
descriptor.refresh(deltaT, this, drawHandle, inEntity, outEntity, powerFactor, processState);
}
@Override
public boolean cameraDrawOptimisation() {
return false;
}
@Override
public GuiScreen newGuiDraw(Direction side, EntityPlayer player) {
return new ElectricalMachineGuiDraw(player, inventory, this);
}
@Override
public void networkUnserialize(DataInputStream stream) {
super.networkUnserialize(stream);
try {
powerFactor = stream.readByte() / 64f;
inEntity = unserializeItemStackToEntityItem(stream, inEntity);
outEntity = unserializeItemStackToEntityItem(stream, outEntity);
processState = stream.readFloat();
processStatePerSecond = stream.readFloat();
eConn.deserialize(stream);
UFactor = stream.readFloat();
connectionType = null;
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void notifyNeighborSpawn() {
super.notifyNeighborSpawn();
connectionType = null;
}
}