package org.codecranachan.asteroidpush.base; import java.util.Collection; import org.codecranachan.asteroidpush.base.scenario.Player; import org.codecranachan.asteroidpush.base.scenario.Referee; import org.codecranachan.asteroidpush.base.scenario.Scenario; import org.codecranachan.asteroidpush.base.simulation.PhysicsEngine; import org.codecranachan.asteroidpush.base.simulation.Simulation; import org.codecranachan.asteroidpush.base.simulation.Timekeeper; import org.codecranachan.asteroidpush.base.ui.simulation.Viewport; import org.codecranachan.asteroidpush.base.ui.widget.Widget; import org.codecranachan.asteroidpush.base.visuals.Representation; public class GameInstance { private Timekeeper time; private Simulation simulation; private Referee referee; public GameInstance(PhysicsEngine engine) { simulation = new Simulation(engine); time = new Timekeeper(engine.getTimeStep()); referee = new Referee(); } public void addRealTime(int milliseconds) { referee.update(simulation, time.getGameTime()); time.addRealTime(milliseconds); simulation.stepToFrame(time.getGameTime()); } public void installScenario(Scenario scenario) { scenario.setUp(simulation, referee); } public Collection<Representation> getRepresentations() { return simulation.getRepresentations(); } public Widget getUi(Player player) { Viewport playerViewport = referee.getInterfaceFor(player); playerViewport.setRepresentations(simulation.getRepresentations()); return playerViewport; } }