package mods.eln.sim.mna.component;
import mods.eln.sim.mna.RootSystem;
import mods.eln.sim.mna.SubSystem;
import mods.eln.sim.mna.state.State;
public abstract class Component {
SubSystem subSystem;
public IAbstractor abstractedBy;
public Component() {
//System.out.println("new " + this);
}
public void addedTo(SubSystem s) {
this.subSystem = s;
}
public SubSystem getSubSystem() {
if (isAbstracted()) return abstractedBy.getAbstractorSubSystem();
return subSystem;
}
public abstract void applyTo(SubSystem s);
public abstract State[] getConnectedStates();
public boolean canBeReplacedByInterSystem() {
return false;
}
public void breakConnection() {
}
public void returnToRootSystem(RootSystem root) {
root.addComponents.add(this);
}
public void dirty() {
if (abstractedBy != null) {
abstractedBy.dirty(this);
} else if (getSubSystem() != null) {
getSubSystem().invalidate();
}
}
public void quitSubSystem() {
subSystem = null;
}
public boolean isAbstracted() {
return abstractedBy != null;
}
public void onAddToRootSystem() {
}
public void onRemovefromRootSystem() {
}
}