public GameState(MapConfiguration mapConfig, List<PlayerData> players) { map = mapConfig.createMap(this); this.players = new HashMap<Integer, Player>(); timerTick = 0; this.races = new ArrayList<Race>(); for (int i = 0; i < players.size(); i++) { Race r = null; try { r = (Race) Configuration.copyConfiguration(players.get(i).getRace()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } if (r == null) throw new RuntimeException("Error copying race"); this.races.add(r); Node[] startNodes = {map.getStartNode(players.get(i).getStartingSlot() - 1)}; Player p = new Player(this, startNodes, r, players.get(i).getName(), i); this.players.put(i, p); } // TODO this dummy player is for debugging purposes Race r = null; int i = this.players.size(); try { r = (Race) Configuration.copyConfiguration(players.get(0).getRace()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } if (r == null) throw new RuntimeException("Error copying race"); this.races.add(r); Node[] nodes = this.getMap().getNodes(); List<Node> dummyStartNodes = new ArrayList<Node>(); for (Node n : nodes) if (n.getOwner() == null) dummyStartNodes.add(n); Player dummyPlayer = new Player(this, dummyStartNodes.toArray(new Node[0]), r, "dummy PLayer", i); this.players.put(i, dummyPlayer); }