private void startGame() {
    // Start clock
    gameClock.start();

    // Queue customers
    for (Customer c : shop.getCustomers())
      shop.getLog().addLog(c.getName() + " enters the building");

    new Thread(
            new Runnable() {

              @Override
              public void run() {
                for (Customer c : shop.getCustomers()) {
                  game.addCustomer();
                  try {
                    Thread.sleep(300);
                  } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                  }
                }

                return;
              }
            })
        .start();

    // Status
    updateStatus();
  }
  private void updateStatus() {
    logLabel.setText(shop.getLog().getMessages());

    statusLabel.setText(
        String.format(
            "Total Customers: %d\nTotal Employees: %d\n\nRegister Til: %s\nOrders Proccessed: %d",
            shop.getCustomers().size(),
            shop.getEmployees().size(),
            moneyFormat.format(shop.getRegister().getTil().getTotal()),
            shop.getOrders().size()));
  }
  private void checkoutWindow() {
    // Check for errors
    if (shop.getActiveCashier() == null) {
      showError("You must choose an active cashier");
      return;
    } else if (shop.getActiveCashier().getPatience() < 1) {
      showError("Cashier is out of patience");
      return;
    }

    this.subManager.setScene(new CheckoutState(this.subManager, shop).scene);
    this.subManager.getStage().show();
  }
  private void stockerWindow() {
    if (shop.getActiveStocker() == null) {
      showError("You must choose an active stocker");
      return;
    }

    this.subManager.setScene(new StockerState(this.subManager, shop).scene);
    this.subManager.getStage().show();
  }
  public GameState(StateManager sm) {
    super(sm);
    shop = new Shop();
    game = new ShopSimulation(shop);
    gameClock = new GameClock();

    gameClock.setListener(
        new GameClock.GameClockListener() {
          @Override
          public void crappyHourBegins() {
            game.startCrappyHour();
            Platform.runLater(() -> shop.getLog().addLog("The chaos has begun.."));
          }

          @Override
          public void shopClosed() {

            Platform.runLater(() -> endGame());
          }
        });

    // Check if game closed
    sm.getStage().setOnCloseRequest(e -> stageClosed());

    statusLabel = new Label();
    shop.setListener(this);

    moneyFormat = NumberFormat.getCurrencyInstance();

    // Setup basic panes + contents
    BorderPane rootPane = new BorderPane();
    rootPane.setStyle("-fx-background-color: #474F53;");

    rootPane.setTop(new VBox(initMenu(), initStatusBar()));

    rootPane.setBottom(initGame());

    startGame();

    scene = new Scene(rootPane);
    setupStyle();
    setupSubWindow();
  }