110 lines
5.5 KiB
C#
110 lines
5.5 KiB
C#
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);
|
||
}
|
||
}
|