public FinalResultHud(ContentManager content, Director director, Scene scene, bool[] selectedPlayers) : base(content, director, scene) { playerCount = selectedPlayers.Where(s => s).Count(); playerScoreTextHudElements = new List <TextHudElement>(playerCount); Vector2 scale = new Vector2(1.5f, 1.5f); // Add player score to the Hud foreach (KeyValuePair <Player, Score> s in scene.Scores) { Func <object, string> textFunc = arg => s.Value.getScore().ToString(); Func <object, Color> colorFunc = arg => Color.White; TextHudElement currentPlayerScoreTextHudElement = new TextHudElement(this, fonts.Last(), textFunc, colorFunc, null, null, scale: scale); Vector3 playerScorePos = new Vector3(scene.FinalScorePos[(int)s.Key.playerIndex].Center.ToVector2(), 0f); Vector3 size = scene.CharacterWonPos[(int)s.Key.playerIndex].GetCenterPosition(); currentPlayerScoreTextHudElement.SetPosition(new Vector3(playerScorePos.X - 10, playerScorePos.Y - 20, 0)); playerScoreTextHudElements.Add(currentPlayerScoreTextHudElement); } hudElements.AddRange(playerScoreTextHudElements); }
public MatchHud(ContentManager content, Director director, Scene scene, bool[] selectedPlayers) : base(content, director, scene) { playerCount = 4; //scene.GetPlayers().Count; playerScoreTextHudElements = new List <TextHudElement>(playerCount); playerAmmoCount = new List <AmmoSpriteHudElement>(); playerAmmoSprites = new List <Sprite> [playerCount]; //Init SpriteHudElements matchUI = new List <SimpleSpriteHudElement>(); //Add Match UI for the selected players Actor actor; for (int i = 0; i < selectedPlayers.Length; i++) { if (selectedPlayers[i]) { actor = scene.MatchUiPos[i]; matchUI.Add(new SimpleSpriteHudElement(this, (Sprite)actor.getRepresentation())); } } //Add Match trasure count UI( assumes that Treasure UI is saved last in the tiled map) actor = scene.MatchUiPos[scene.MatchUiPos.Count - 1]; matchUI.Add(new SimpleSpriteHudElement(this, (Sprite)actor.getRepresentation())); //Init TextHudElements InitHudUIPositions(); InitAmmoCountSprites(); // Add player score to the Hud foreach (Player p in scene.GetPlayers()) { Func <object, string> textFunc = (object arg) => scene.Scores[p].getScore().ToString(); Func <object, Color> colorFunc = (object arg) => Color.Black; TextHudElement currentPlayerScoreTextHudElement = new TextHudElement(this, fonts.Last(), textFunc, colorFunc, null, null); currentPlayerScoreTextHudElement.SetPosition(new Vector3(playerScorePos[(int)p.playerIndex], 0)); playerScoreTextHudElements.Add(currentPlayerScoreTextHudElement); DefaultCharacter character = p.PossesedCharacters[0] as DefaultCharacter; if (character != null) { Func <Sprite> spriteFunc = () => { var ammoCount = ((DefaultCharacter)p.PossesedCharacters[0]).AmmoCount; if (ammoCount > 0) { Sprite playerAmmoSprite = playerAmmoSprites[(int)p.playerIndex][(int)ammoCount - 1]; Rectangle boundingBox = character.CharacterPhysics.BoundingBox; playerAmmoSprite.SetPosition(new Vector3(boundingBox.Center.X - 10, boundingBox.Top - 10, 0)); return(playerAmmoSprite); } return(null); }; AmmoSpriteHudElement currentPlayerAmmoHudElement = new AmmoSpriteHudElement(this, spriteFunc, null); playerAmmoCount.Add(currentPlayerAmmoHudElement); //...... } } //Add treasureCount to the Hud Func <object, string> treasureTextFunc = (object arg) => scene.TreasuresLeft.ToString(); Func <object, Color> treasureColorFunc = (object arg) => Color.IndianRed; TextHudElement treasureCount = new TextHudElement(this, fonts.Last(), treasureTextFunc, treasureColorFunc, null, null); treasureCount.SetPosition(new Vector3(treasureScorePos, 0f)); playerScoreTextHudElements.Add(treasureCount); hudElements.AddRange(matchUI); hudElements.AddRange(playerScoreTextHudElements); hudElements.AddRange(playerAmmoCount); }