package net.onedaybeard.dominatrix.demo; import static net.onedaybeard.dominatrix.util.Disposer.free; import lombok.Getter; import lombok.Setter; import net.onedaybeard.dominatrix.demo.event.CommandEvent; import net.onedaybeard.dominatrix.demo.system.EventSystem; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.scenes.scene2d.Event; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Disposable; public enum Director implements Disposable { instance; @Getter private final SpriteBatch spriteBatch; @Getter private Screen screen; private AssetManager assetManager; @Setter @Getter private EventSystem eventSystem; private Array<Screen> screenStack; private Director() { spriteBatch = new SpriteBatch(); assetManager = new AssetManager(); Assets.loadAssetManager(assetManager); } public void setScreen(Screen screen) { this.screen = screen; screen.resume(); } public void update() { assert screen != null : "No screen to direct."; screen.render(Gdx.graphics.getDeltaTime()); } @Override public void dispose() { if (screen != null) free(screen); free(spriteBatch); free(assetManager); assetManager = null; } public void send(Event event) { eventSystem.send(event); } public void send(CommandEvent.Type type) { eventSystem.send(type, 0); } public void send(CommandEvent.Type type, float value) { eventSystem.send(type, value); } public void send(CommandEvent.Type type, int value) { eventSystem.send(type, value); } }