@Override
	public void update(Observable o, Object arg) {
		
		if(presenter.getClientModel().getServerModel().getPlayers().get(presenter.getPlayerInfo().getIndex()).getColor()!=null){
			getView().setLocalPlayerColor(CatanColor.valueOf(presenter.getClientModel().getServerModel().getPlayers().get(presenter.getPlayerInfo().getIndex()).getColor().toUpperCase()));
		}	
		
		List<Player> players = presenter.getClientModel().getServerModel().getPlayers();
		players.removeAll(Collections.singleton(null));
			
		if (numPlayers < players.size()) {
			for (int i = numPlayers; i < players.size(); i++) {
				getView().initializePlayer(players.get(i).getPlayerIndex(), 
						players.get(i).getName(), 
						CatanColor.valueOf(players.get(i).getColor().toUpperCase()));
			}
			
			numPlayers = players.size();
		}
		
		for(Player p : players){
			getView().updatePlayer(p.getPlayerIndex(), p.getVictoryPoints(), isPlayersTurn(p), ifLargestArmy(p), ifLongestRoad(p));									
		}

		
		if(presenter.getState().getStatus().equals("Playing") && presenter.isPlayersTurn()) {
			getView().updateGameState("Finish Turn", true);
		}
		else if (presenter.getState().getStatus().equals("Rolling") && presenter.isPlayersTurn()) {
			getView().updateGameState("Finish Turn", false);
		}
		else {
			getView().updateGameState("Waiting for other Players", false);
		}
		
	}