package mods.eln.sixnode.electricaltimeout;
import mods.eln.misc.INBTTReady;
import mods.eln.sim.IProcess;
import mods.eln.sound.SoundCommand;
import net.minecraft.nbt.NBTTagCompound;
public class ElectricalTimeoutProcess implements IProcess, INBTTReady {
ElectricalTimeoutElement element;
boolean inputState = false;
int tickCounter = 0;
public ElectricalTimeoutProcess(ElectricalTimeoutElement element) {
this.element = element;
}
@Override
public void process(double time) {
boolean oldInputState = inputState;
if (inputState) {
if (element.inputGate.stateLow()) inputState = false;
} else {
if (element.inputGate.stateHigh()) inputState = true;
}
if (inputState) {
element.timeOutCounter = element.timeOutValue;
}
if (element.timeOutCounter != 0.0) {
element.outputGateProcess.state(true);
if (!inputState) element.timeOutCounter -= time;
if (element.timeOutCounter < 0.0) element.timeOutCounter = 0.0;
if (!inputState && ++tickCounter % 200 == 0)
element.play(new SoundCommand(element.descriptor.tickSound).mulVolume(element.descriptor.tickVolume, 1f).verySmallRange());
} else {
element.outputGateProcess.state(false);
}
if (inputState != oldInputState) {
element.needPublish();
}
}
@Override
public void readFromNBT(NBTTagCompound nbt, String str) {
inputState = nbt.getBoolean(str + "SProcinputState");
}
@Override
public void writeToNBT(NBTTagCompound nbt, String str) {
nbt.setBoolean(str + "SProcinputState", inputState);
}
}