public void AddNewPlayer(PlayerIdentifier player, int score) { MyContract.RequireArgumentNotNull(player, "player"); MyContract.RequireField( !ScoreElement.ContainsKey(player.PlayerID), "does not already contain an entry for player " + player.ToString(), "ScoreElement" ); Debug.Log( "ScoreboardUIManager: Adding new element [" + player.ToString() + " -> " + score + "]" ); GameObject NewScoreUiElement; string DisplayName = "[Uninitialised]"; if (player.PlayerID == LocalPlayerId) { NewScoreUiElement = Instantiate(LocalPlayerScoreUiElementPrefab); DisplayName = player.ToString() + " (Me)"; } else { NewScoreUiElement = Instantiate(ScoreUiElementPrefab); DisplayName = player.ToString(); } NewScoreUiElement.transform.SetParent(UiElementListParent, false); ScoreUiElementManager ElementManager = NewScoreUiElement.GetComponent <ScoreUiElementManager>(); // This is programmer/compile-time error if it occurs // as in, this shouldn't be needed in production code MyContract.RequireFieldNotNull(ElementManager, "ScoreUiElementManager"); ElementManager.Initialise(DisplayName, score); NewScoreUiElement.SetActive(true); ScoreUiElements.Add(ElementManager); SortScoreElements(); ScoreElement.Add(player.PlayerID, ElementManager); }
public int CompareTo(object obj) { if (obj == null) { return(1); } ScoreUiElementManager otherManager = obj as ScoreUiElementManager; if (otherManager != null) { return(this.score.CompareTo(otherManager.score)); } else { throw new ArgumentException("Object is not a ScoreUiElementManager"); } }
public void RemovePlayer(PlayerIdentifier player) { MyContract.RequireArgumentNotNull(player, "player"); MyContract.RequireField( ScoreElement.ContainsKey(player.PlayerID), "Contains an entry for player " + player.ToString(), "ScoreElement" ); ScoreUiElementManager ElementManager = ScoreElement[player.PlayerID]; ScoreElement.Remove(player.PlayerID); ScoreUiElements.Remove(ElementManager); // If needed this can be optimised by pooling the // score ui elements, // so when a player is removed they are deactivated, // then when a new player is added they try to reactivate // an old slot before instantiating a new one. Destroy(ElementManager.gameObject); //SortScoreElements(); should remain sorted }