package mods.eln.transparentnode.solarpanel;
import mods.eln.cable.CableRenderDescriptor;
import mods.eln.cable.CableRenderType;
import mods.eln.misc.Direction;
import mods.eln.misc.LRDU;
import mods.eln.misc.LRDUMask;
import mods.eln.misc.RcInterpolator;
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 java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
public class SolarPanelRender extends TransparentNodeElementRender {
public SolarPanelDescriptor descriptor;
private CableRenderType renderPreProcess;
public SolarPanelRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) {
super(tileEntity, descriptor);
this.descriptor = (SolarPanelDescriptor) descriptor;
}
RcInterpolator interpol = new RcInterpolator(1f);
boolean boot = true;
@Override
public void draw() {
renderPreProcess = drawCable(Direction.YN, descriptor.cableRender, eConn, renderPreProcess);
descriptor.draw((float) (interpol.get() * 180 / Math.PI - 90), front);
}
@Override
public void refresh(float deltaT) {
float alpha;
if (hasTracker == false) {
alpha = (float) descriptor.alphaTrunk(pannelAlphaSyncValue);
} else {
alpha = (float) descriptor.alphaTrunk(SolarPannelSlowProcess.getSolarAlpha(tileEntity.getWorldObj()));
}
interpol.setTarget(alpha);
if (boot) {
boot = false;
interpol.setValueFromTarget();
}
interpol.step(deltaT);
}
@Override
public CableRenderDescriptor getCableRender(Direction side, LRDU lrdu) {
return descriptor.cableRender;
}
public boolean pannelAlphaSyncNew = false;
public float pannelAlphaSyncValue = -1234;
public boolean hasTracker;
LRDUMask eConn = new LRDUMask();
@Override
public void networkUnserialize(DataInputStream stream) {
super.networkUnserialize(stream);
try {
hasTracker = stream.readBoolean();
float pannelAlphaIncoming = stream.readFloat();
if (pannelAlphaIncoming != pannelAlphaSyncValue) {
pannelAlphaSyncValue = pannelAlphaIncoming;
pannelAlphaSyncNew = true;
}
eConn.deserialize(stream);
renderPreProcess = null;
} catch (IOException e) {
e.printStackTrace();
}
}
public void clientSetPannelAlpha(float value) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream stream = new DataOutputStream(bos);
preparePacketForServer(stream);
stream.writeByte(SolarPanelElement.unserializePannelAlpha);
stream.writeFloat(value);
sendPacketToServer(bos);
} catch (IOException e) {
e.printStackTrace();
}
}
TransparentNodeElementInventory inventory = new TransparentNodeElementInventory(1, 64, this);
@Override
public GuiScreen newGuiDraw(Direction side, EntityPlayer player) {
return new SolarPannelGuiDraw(player, inventory, this);
}
@Override
public boolean cameraDrawOptimisation() {
return false;
}
}