package com.lyndir.omicron.cli; import com.google.common.base.Preconditions; import com.lyndir.lanterna.view.OmicronWindow; import com.lyndir.omicron.api.*; import java.util.*; import javax.annotation.Nonnull; /** * <i>10 07, 2012</i> * * @author lhunath */ public class OmicronCLI { private static final OmicronCLI omicron = new OmicronCLI(); private final Builders builders = new Builders(); private final PlayerKey localKey = new PlayerKey(); private final List<String> log = new LinkedList<>(); private final Collection<GameListener> gameListeners = new HashSet<>(); private final OmicronWindow window = new OmicronWindow(); private IGameController gameController; private IPlayer localPlayer; private boolean running; @SuppressWarnings("ProhibitedExceptionDeclared") public static void main(final String... arguments) { new OmicronCLIAppender().start(); omicron.start(); } public static OmicronCLI get() { return omicron; } private OmicronCLI() { } private void start() { Preconditions.checkState( !isRunning(), "This omicron CLI is already running." ); setRunning( true ); window.start(); } public OmicronWindow getWindow() { return window; } public Optional<IGameController> getGameController() { return Optional.ofNullable( gameController ); } public void setGameController(@Nonnull final IGameController gameController) { Preconditions.checkState( this.gameController == null, "Cannot assign a new game controller, one has already been assigned." ); this.gameController = gameController; for (final GameListener gameListener : gameListeners) gameController.addGameListener( gameListener ); } public Optional<IPlayer> getLocalPlayer() { return Optional.ofNullable( localPlayer ); } public void setLocalPlayer(final IPlayer localPlayer) { Preconditions.checkState( this.localPlayer == null, "Cannot assign a new local player, one has already been assigned." ); this.localPlayer = localPlayer; } public PlayerKey getLocalKey() { return localKey; } public Collection<String> getLog() { return log; } public Builders getBuilders() { return builders; } public void addGameListener(final GameListener gameListener) { gameListeners.add( gameListener ); if (gameController != null) gameController.addGameListener( gameListener ); } public boolean isRunning() { return running; } public void setRunning(final boolean running) { this.running = running; } }