package mods.eln.sim.mna.component; import mods.eln.misc.INBTTReady; import mods.eln.sim.mna.SubSystem; import mods.eln.sim.mna.misc.ISubSystemProcessI; import mods.eln.sim.mna.state.CurrentState; import mods.eln.sim.mna.state.State; import net.minecraft.nbt.NBTTagCompound; public class Inductor extends Bipole implements ISubSystemProcessI, INBTTReady { String name; private double l = 0; double ldt; private CurrentState currentState = new CurrentState(); public Inductor(String name) { this.name = name; } public Inductor(String name, State aPin, State bPin) { super(aPin, bPin); this.name = name; } @Override public double getCurrent() { return currentState.state; } public double getL() { return l; } public void setL(double l) { this.l = l; dirty(); } public double getE() { final double i = getCurrent(); return i * i * l / 2; } @Override public void applyTo(SubSystem s) { ldt = -l / s.getDt(); s.addToA(aPin, currentState, 1); s.addToA(bPin, currentState, -1); s.addToA(currentState, aPin, 1); s.addToA(currentState, bPin, -1); s.addToA(currentState, currentState, ldt); } @Override public void simProcessI(SubSystem s) { s.addToI(currentState, ldt * currentState.state); } @Override public void quitSubSystem() { subSystem.states.remove(getCurrentState()); subSystem.removeProcess(this); super.quitSubSystem(); } @Override public void addedTo(SubSystem s) { super.addedTo(s); s.addState(getCurrentState()); s.addProcess(this); } public CurrentState getCurrentState() { return currentState; } @Override public void readFromNBT(NBTTagCompound nbt, String str) { str += name; currentState.state = (nbt.getDouble(str + "Istate")); } @Override public void writeToNBT(NBTTagCompound nbt, String str) { str += name; nbt.setDouble(str + "Istate", currentState.state); } public void resetStates() { currentState.state = 0; } }