Files

110 lines
5.5 KiB
C#
Raw Permalink Normal View History

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);
}
}