public void performNextTurn() {

		if (hasAWinner()) {
			endGame();
			return;
		}
		
		if (turnQueue.isEmpty()) {
			refillTurnQueue();
		}
		
		onTurn = computeNextEntity();
		
		if (onTurn != null && !onTurn.isOnTurn() &&
		    (entities.containsKey(onTurn) || npcs.containsKey(onTurn))) {
			int token = generateToken();
			turnTokens.put(token, onTurn);

			onTurn.startNewTurn();

			if (entities.containsKey(onTurn)) {
				entities.get(onTurn).handleTurn(onTurn, token);
			} else {
				npcs.get(onTurn).handleTurn(onTurn, token);
			}
		} else {
			turnQueue.remove(onTurn);
			performNextTurn();
		}

	}