/** basic initializing of things that only need to be called once */
 public void initGame() {
   chatNode = draftLayout.getChatNode();
   tickerReel = draftLayout.getTickerReel();
   if (client != null) {
     cardsInHand = client.getHand();
     assignedRegion = client.getRegion();
   }
   if (testing) {
     CardDeck cardDeck = new CardDeck(EnumRegion.USA_MOUNTAIN);
     EnumPolicy[] deck = cardDeck.drawCards();
     draftLayout.getHand().setPolicies(deck);
     System.out.println(Arrays.deepToString(deck));
   }
   if (cardsInHand != null) {
     getDraftLayout()
         .getHand()
         .setPolicies(cardsInHand.toArray(new EnumPolicy[cardsInHand.size()]));
   }
   System.out.println(assignedRegion);
   getDraftLayout().getSummaryBar().setRegion(assignedRegion);
 }
  private void initTimer() {
    java.util.Timer timer = new java.util.Timer();
    ChatNode chatNodeDraft = draftLayout.getChatNode();
    ChatNode chatNodeVote = votingLayout.getChatNode();
    ChatManager chatManager = client.getChatManager();
    HandNode hand = getDraftLayout().getHand();
    TimerTask timerTask =
        new TimerTask() {
          boolean flag = false;

          @Override
          public void run() {
            Platform.runLater(
                () -> {
                  chatNodeDraft.setChatMessages(chatManager.getChat());
                  chatNodeVote.setChatMessages(chatManager.getChat());
                  if (needsHand() && client.getHand() != null && !client.getHand().isEmpty()) {

                    setCardsInHand(client.getHand());
                    cardsInHand = client.getHand();
                    hand.setPolicies(client.getHand().toArray(new EnumPolicy[cardsInHand.size()]));
                    System.out.println(
                        "please work "
                            + Arrays.toString(hand.getPolicies())
                            + Platform.isFxApplicationThread());
                  }
                  if (getDraftLayout().getHand().getPolicies() != null) {
                    chatNodeDraft.setHand(getDraftLayout().getHand().getPolicies());
                    chatNodeVote.setHand(getDraftLayout().getHand().getPolicies());
                  }
                  if (isDraftingPhase() && client.getServerState().equals(GameState.VOTING)) {
                    resetDraftingPhase();
                    switchScenes();
                  }
                  if (!isDraftingPhase()
                      && (client.getServerState().equals(GameState.DRAFTING)
                          || client.getServerState().equals(GameState.DRAWING))) {
                    resetVotingPhase();
                    switchScenes();
                  }
                  // if (client.getVotingCards() != null &&
                  // !getVotingLayout().hasReceivedCards())
                  // getVotingLayout().updateCardSpaces(client.getVotingCards());

                });
          }
        };

    timer.schedule(timerTask, 100, 1000);
  }
  @Override
  public void start(Stage primaryStage) {
    System.out.println("GUI.start()");
    EnumPolicy.load();
    EnumRegion.loadIcons();
    // TODO: THIS WILL BE REMOVED WHEN PHASE HANDLING IS FULLY IMPLEMENTED
    MapController.setCurrentController(GamePhaseMapController.class);
    this.primaryStage = primaryStage;
    primaryStage.setTitle("Starvation Evasion");

    // fills a list of all the product types

    // primaryStage.setMaxHeight(maxHeight);
    // primaryStage.setMinHeight(maxHeight);
    primaryStage.setResizable(true);

    Screen screen = Screen.getPrimary();
    Rectangle2D bounds = screen.getVisualBounds();

    primaryStage.setX(bounds.getMinX());
    primaryStage.setY(bounds.getMinY());
    primaryStage.setWidth(bounds.getWidth());
    primaryStage.setHeight(bounds.getHeight());

    boxHeight = primaryStage.getWidth() / DraftLayout.ROWS;
    boxWidth = primaryStage.getWidth() / DraftLayout.COLS;

    // instantiate helper classes
    imageGetter = new ImageGetter();
    popupManager = new PopupManager(this);
    graphManager = new GraphManager(this);

    // instantiate the DraftLayout
    draftLayout = new DraftLayout(this);
    votingLayout = new VotingLayout(this);
    // make a scene for displaying the game
    gameScene = new Scene(draftLayout);
    currentRoot = draftLayout;
    primaryStage.setScene(gameScene);

    primaryStage.show();

    primaryStage.setOnCloseRequest(
        arg0 -> {
          if (client != null) client.shutdown();
          Platform.exit();
        });

    initGame();
  }
 public GUI(Client client, LocalDataContainer localDataContainer) {
   super();
   this.client = client;
   this.localDataContainer = localDataContainer;
   assignedRegion = client.getRegion();
 }
 public GameState getServerGameState() {
   if (client != null) return client.getServerState();
   else return null;
 }
 @Override
 public void stop() {
   if (client != null) client.shutdown();
 }