package StevensLevel.parts; import StevensLevel.listeners.ScreenChangeListener; import StevensLevel.State; import StevensLevel.WithStateImpl; import StevensLevel.events.ScreenChange; import StevensLevel.listeners.PartInteractionListener; import interaction.ExperimentInteractionListener; import screens.AbstractScreen; import static StevensLevel.EventBusHelper.*; /** * Represents a part/fragment of an Experiment, an Experiment (like a presentation) is broken up into different groups of 'parts'. Each runnable as long as in correct state. * * @author Tristan Goffman(tgoffman@gmail.com) Aug 4, 2011 */ public abstract class ExperimentPart<ScreenClass extends AbstractScreen> extends ExperimentModel{ public abstract Class<ScreenClass> getScreenClass(); /** * When run is called notify listeners that a new screen needs to be displayed */ @Override public void run(){ super.run(); pb(this, ScreenChangeListener.class).changeScreen(new ScreenChange(getScreenClass())); } /** * Items to setup before an ExperimentPart is run. setup gets called by ExperimentControl * before run */ public void setup() { } }