using System; using UnityEngine; using TMPro; // ПРОФИЛЬ: аватар, имя, ID, уровень и опыт, сила, королевство, все ресурсы, статистика. public class ProfilePanel : BasePanel { public static readonly Color[] AvatarColors = { new Color(0.3f, 0.45f, 0.8f), new Color(0.75f, 0.3f, 0.3f), new Color(0.3f, 0.65f, 0.4f), new Color(0.7f, 0.5f, 0.2f), new Color(0.55f, 0.35f, 0.7f), new Color(0.25f, 0.6f, 0.65f), }; protected override void Build(RectTransform root) { var d = GP.Data; var list = ScrollList(root); // --- Шапка: аватар + имя --- var head = UIKit.Card(list, UIKit.Theme.CardDark); var row = UIKit.Row(head, 150, 20); string letter = d.playerName.Length > 0 ? d.playerName.Substring(0, 1).ToUpper() : "?"; UIKit.Icon(row, AvatarColors[d.avatarIndex % AvatarColors.Length], letter, 150); var info = UIKit.Card(row, UIKit.Theme.CardDark, 0, 4); UIKit.Size(info, -1, -1, 1); var name = UIKit.Text(info, d.playerName, 40, UIKit.Theme.Text); name.fontStyle = FontStyles.Bold; UIKit.Text(info, "ID: " + d.playerId, 24, UIKit.Theme.TextDim); UIKit.Text(info, "Уровень " + d.level + " • " + GameData.ArenaLeague(d.arenaRating), 28, UIKit.Theme.Gold); var btns = UIKit.Row(head, 80, 12); var bName = UIKit.Button(btns, "Сменить имя", UIKit.Theme.Blue, () => UIKit.InputDialog("Имя командира", d.playerName, 16, v => { d.playerName = v; GP.MarkChanged(); UIKit.Toast("Имя изменено"); })); UIKit.Size(bName, -1, 80, 1); var bAva = UIKit.Button(btns, "Сменить аватар", UIKit.Theme.Gray, () => { d.avatarIndex = (d.avatarIndex + 1) % AvatarColors.Length; GP.MarkChanged(); }); UIKit.Size(bAva, -1, 80, 1); // --- Опыт --- var xpCard = UIKit.Card(list); bool max = d.level >= GameData.MaxPlayerLevel; int need = GameData.XpToNextLevel(d.level); UIKit.Text(xpCard, max ? "Максимальный уровень" : "Опыт до " + (d.level + 1) + " уровня", 26, UIKit.Theme.TextDim); UIKit.Bar(xpCard, max ? 1f : (float)d.xp / need, UIKit.Theme.Blue, 40, max ? "MAX" : d.xp + " / " + need); // --- Сила --- var power = UIKit.Card(list); var pt = UIKit.Text(power, "СИЛА: " + GP.TotalPower.ToString("N0"), 44, GameData.ResColor(ResourceType.Power), TextAlignmentOptions.Center); pt.fontStyle = FontStyles.Bold; UIKit.Text(power, "Армия " + GP.ArmyPower.ToString("N0") + " • Ратуша " + (GP.TownHallLevel * 100) + " • Здания " + (GP.BuildingsCount * 25), 24, UIKit.Theme.TextDim, TextAlignmentOptions.Center); // --- Королевство --- var kingdom = UIKit.Card(list); Header(kingdom, "Королевство"); KV(kingdom, "Ратуша", GP.TownHallLevel + " ур."); KV(kingdom, "Построено зданий", GP.BuildingsCount.ToString()); KV(kingdom, "Герой", d.heroLevel + " ур."); KV(kingdom, "Войска", GP.TotalTroops.ToString("N0")); KV(kingdom, "Этап кампании", d.battleStage.ToString()); // --- Ресурсы --- var res = UIKit.Card(list); Header(res, "Ресурсы"); foreach (ResourceType t in Enum.GetValues(typeof(ResourceType))) { if (t == ResourceType.Power) continue; var r = UIKit.Row(res, 56, 14); UIKit.Icon(r, GameData.ResColor(t), "", 40); var n = UIKit.Text(r, GameData.ResName(t), 28); UIKit.Size(n, -1, -1, 1); var v = UIKit.Text(r, Mathf.FloorToInt(GP.Res(t)).ToString("N0"), 28, UIKit.Theme.Gold, TextAlignmentOptions.Right); UIKit.Size(v, 260); } // --- Статистика --- var stats = UIKit.Card(list); Header(stats, "Статистика"); KV(stats, "Боёв выиграно / проиграно", d.battlesWon + " / " + d.battlesLost); KV(stats, "Карта мира: походов / побед", d.marchesSent + " / " + d.worldWins); KV(stats, "Рейтинг арены", d.arenaRating + " (" + GameData.ArenaLeague(d.arenaRating) + ")"); KV(stats, "Побед на арене", d.arenaWins + " из " + d.arenaFights); KV(stats, "Воинов обучено", d.troopsTrained.ToString("N0")); KV(stats, "Заданий выполнено", d.questsDone.ToString()); float total = 0; foreach (var c in d.collected) total += c; KV(stats, "Ресурсов собрано", GameData.Short(total)); KV(stats, "Дней в игре", d.daysPlayed.ToString()); KV(stats, "Играет с", new DateTime(d.firstLaunchTicks, DateTimeKind.Utc).ToLocalTime().ToString("dd.MM.yyyy")); } public static void Header(Transform parent, string text) { var t = UIKit.Text(parent, text, 32, UIKit.Theme.Gold); t.fontStyle = FontStyles.Bold; } public static void KV(Transform parent, string key, string value) { var r = UIKit.Row(parent, 50, 10); var k = UIKit.Text(r, key, 27, UIKit.Theme.TextDim); UIKit.Size(k, -1, -1, 1); var v = UIKit.Text(r, value, 27, UIKit.Theme.Text, TextAlignmentOptions.Right); UIKit.Size(v, 300); } }