package mods.eln.transparentnode.electricalmachine;
import mods.eln.misc.*;
import mods.eln.misc.Obj3D.Obj3DPart;
import mods.eln.sim.ThermalLoadInitializer;
import mods.eln.sixnode.electricalcable.ElectricalCableDescriptor;
import net.minecraft.entity.item.EntityItem;
import org.lwjgl.opengl.GL11;
public class CompressorDescriptor extends ElectricalMachineDescriptor {
private float tyOn;
private float tyOff;
private Obj3DPart main;
private Obj3DPart move;
public CompressorDescriptor(String name, Obj3D obj, double nominalU, double nominalP, double maximalU,
ThermalLoadInitializer thermal, ElectricalCableDescriptor cable, RecipesList recipe) {
super(name, nominalU, nominalP, maximalU, thermal, cable, recipe);
if (obj != null) {
main = obj.getPart("main");
move = obj.getPart("move");
if (move != null) {
tyOn = move.getFloat("tyon");
tyOff = move.getFloat("tyoff");
}
}
}
class CompressorDescriptorHandle {
final RcInterpolator interpolator = new RcInterpolator(0.25f);
float itemCounter = 0f;
}
@Override
Object newDrawHandle() {
return new CompressorDescriptorHandle();
}
@Override
public float volumeForRunningSound(float processState, float powerFactor) {
if (processState < 0.1)
return 0f;
else if (processState < 0.3)
return super.volumeForRunningSound(processState, powerFactor) * (processState - 0.1f) * 5f;
else
return super.volumeForRunningSound(processState, powerFactor);
}
@Override
void draw(ElectricalMachineRender render, Object handleO, EntityItem inEntity, EntityItem outEntity,
float powerFactor, float processState) {
CompressorDescriptorHandle handle = (CompressorDescriptorHandle) handleO;
UtilsClient.drawEntityItem(inEntity, -0.35f, 0.04f, 0.3f, handle.itemCounter, 1f);
UtilsClient.drawEntityItem(outEntity, 0.35f, 0.04f, 0.3f, -handle.itemCounter + 139f, 1f);
main.draw();
GL11.glTranslatef(0f, tyOff + (float) Math.sqrt(handle.interpolator.get()) * (tyOn - tyOff), 0f);
move.draw();
}
@Override
void refresh(float deltaT, ElectricalMachineRender render, Object handleO, EntityItem inEntity, EntityItem outEntity, float powerFactor, float processState) {
CompressorDescriptorHandle handle = (CompressorDescriptorHandle) handleO;
handle.interpolator.setTarget(processState);
handle.interpolator.step(deltaT);
handle.itemCounter += deltaT * 90;
while (handle.itemCounter >= 360f) handle.itemCounter -= 360;
}
@Override
public boolean powerLrdu(Direction side, Direction front) {
return side != front && side != front.getInverse();
}
}