package nars.lab.launcher;
import nars.util.EventEmitter.EventObserver;
import nars.util.Events;
import nars.storage.Memory;
import nars.NAR;
import nars.gui.NARSwing;
/**
* Game event-loop interface for NARS sensory and motor interaction
*/
abstract public class NARGame implements EventObserver {
public final NAR nar;
private int cyclesPerFrame;
public NARSwing sw;
public NARGame(NAR nar) {
this.nar = nar;
//if (nar.memory.param.getTiming()!=Memory.Timing.Simulation)
// throw new RuntimeException(this + " requires NAR use Simulation timing");
nar.memory.event.on(Events.FrameEnd.class, this);
sw=new NARSwing(nar);
}
abstract public void init();
abstract public void cycle();
public void start(float fps, int cyclesPerFrame) {
this.cyclesPerFrame = cyclesPerFrame;
nar.start((long)(1000.0f / fps));
}
public void stop() {
nar.stop();
}
@Override
public void event(Class event, Object[] arguments) {
if (event == Events.FrameEnd.class) {
cycle();
}
}
}