private void PrintPlayerStats(int dX, int dY, CellSurface surface) { surface.Print(dX, dY, "Stats:"); var stats = Enum.GetValues(typeof(PlayerStats)).Cast <PlayerStats>().ToArray(); var maxLength = stats.Select(TextHelper.GetStatName).Select(name => name.Length).Max(); for (var index = 0; index < stats.Length; index++) { var stat = stats[index]; var pureValue = Player.GetPureStat(stat); var bonusValue = Player.Equipment.GetStatsBonus(stat); var name = TextHelper.GetStatName(stat); var y = dY + 2 + index; surface.Print(dX, y, name); var bonusText = new StyledLine { pureValue.ToString() }; if (bonusValue != 0) { var bonusSymbol = bonusValue > 0 ? "+" : "-"; var bonusColor = bonusValue > 0 ? TextHelper.PositiveValueColor : TextHelper.NegativeValueColor; bonusText.Add(" ("); bonusText.Add($"{bonusSymbol}{bonusValue}", bonusColor); bonusText.Add(")"); } surface.PrintStyledText(dX + maxLength + 1, y, bonusText.ToColoredString(DefaultBackground)); } var xPos = dX + maxLength + 10; surface.PrintStyledText(xPos, dY + 2, new StyledLine { "Max Health ", new StyledString(Player.MaxHealth.ToString(), TextHelper.HealthColor) }.ToColoredString(DefaultBackground)); surface.PrintStyledText(xPos, dY + 3, new StyledLine { "Max Mana ", new StyledString(Player.MaxMana.ToString(), TextHelper.ManaColor) }.ToColoredString(DefaultBackground)); surface.PrintStyledText(xPos, dY + 4, new StyledLine { "Mana Regeneration ", new StyledString(Player.ManaRegeneration.ToString(), TextHelper.ManaRegenerationColor) }.ToColoredString(DefaultBackground)); surface.PrintStyledText(xPos, dY + 5, new StyledLine { "Dodge Chance ", $"{Player.DodgeChance}%" }.ToColoredString(DefaultBackground)); surface.PrintStyledText(dX, dY + 4 + stats.Length, new StyledLine { $"Level: {Player.Level}" }.ToColoredString(DefaultBackground)); surface.PrintStyledText(dX, dY + 5 + stats.Length, new StyledLine { "XP: ", new StyledString($"{Player.Experience} / {Player.GetXpToLevelUp()}", TextHelper.XpColor) }.ToColoredString(DefaultBackground)); }