/// <summary> /// Creates a new Player and then returnes them. /// </summary> public T createPlayer <T>(Vector3 playerStartPos) where T : IPlayer { if (this.getPlayerCount() >= this.maxPlayers) { throw new Exception("Can not have more than " + this.maxPlayers + " players!"); } T newPlayer = (T)GameObject.Instantiate(this.playerPrefab, playerStartPos, Quaternion.identity).GetComponent <IPlayer>(); newPlayer.getTransform().position = playerStartPos; // Locate an id to use for the player. int freeID = -1; for (int i = 0; i < this.getMaxPlayers(); i++) { if (this.players[i] == null) { freeID = i; break; } } this.players[freeID] = newPlayer; if (this.splitScreen) { this.updateSplitScreenCameraSetup(); } else { // Create the UI for the player. GameObject obj = GameObject.Instantiate(this.uiPrefab, this.uiLocations[freeID]); IPlayerUI ui = obj.GetComponent <IPlayerUI>(); obj.transform.position = this.uiLocations[freeID].position; ui.setPlayer(newPlayer); this.playerUIs[freeID] = null; } return(newPlayer); }