using UnityEngine;
using TMPro;
// ГЕРОЙ: уровень, характеристики, бонус к армии, прокачка за золото и еду, навыки.
// Предел уровня героя = Ратуша * 5 -- чтобы качать героя дальше, нужно улучшать Ратушу.
public class HeroPanel : BasePanel
{
protected override void Build(RectTransform root)
{
var d = GP.Data;
int lvl = d.heroLevel;
int maxLvl = GP.HeroMaxLevel;
var list = ScrollList(root);
// --- Портрет и уровень ---
var head = UIKit.Card(list, UIKit.Theme.CardDark);
var row = UIKit.Row(head, 180, 20);
UIKit.Icon(row, new Color(0.55f, 0.4f, 0.2f), "Г", 180);
var info = UIKit.Card(row, new Color(0, 0, 0, 0), 0, 6);
UIKit.Size(info, -1, -1, 1);
UIKit.Text(info, "Верховный командир", 36, UIKit.Theme.Gold).fontStyle = FontStyles.Bold;
UIKit.Text(info, "Уровень " + lvl + " / " + maxLvl, 30);
UIKit.Text(info, "Сила героя: " + GameData.HeroPower(lvl), 26, UIKit.Theme.TextDim);
UIKit.Bar(head, (float)lvl / GameData.HeroMaxLevel(10), UIKit.Theme.Gold, 24, "Прогресс к максимуму: " + lvl + " / " + GameData.HeroMaxLevel(10));
// --- Характеристики ---
var stats = UIKit.Card(list);
ProfilePanel.Header(stats, "Характеристики");
StatRow(stats, "Атака", GameData.HeroAttack(lvl), GameData.HeroAttack(lvl + 1));
StatRow(stats, "Защита", GameData.HeroDefense(lvl), GameData.HeroDefense(lvl + 1));
StatRow(stats, "Бонус к силе армии, %", GameData.HeroArmyBonusPercent(lvl), GameData.HeroArmyBonusPercent(lvl + 1));
StatRow(stats, "Сила героя", GameData.HeroPower(lvl), GameData.HeroPower(lvl + 1));
ProfilePanel.KV(stats, "Итоговый бонус армии", "+" + Mathf.RoundToInt(GP.ArmyBonus * 100) + "%");
// --- Улучшение ---
var up = UIKit.Card(list, UIKit.Theme.Card);
ProfilePanel.Header(up, "Улучшение");
if (lvl >= maxLvl)
{
UIKit.Text(up, "Достигнут предел уровня. Улучшите Ратушу до " + (GP.TownHallLevel + 1) +
" уровня, чтобы поднять предел до " + GameData.HeroMaxLevel(GP.TownHallLevel + 1) + ".", 28, UIKit.Theme.TextDim);
}
else
{
var cost = GameData.HeroUpgradeCost(lvl);
foreach (var c in cost)
{
bool enough = GP.Res(c.type) >= c.amount;
ProfilePanel.KV(up, GameData.ResName(c.type),
"" + c.amount.ToString("N0") + " / " +
Mathf.FloorToInt(GP.Res(c.type)).ToString("N0"));
}
bool can = GP.CanUpgradeHero;
var b = UIKit.Button(up, can ? "УЛУЧШИТЬ ДО " + (lvl + 1) + " УР." : "Не хватает ресурсов",
can ? UIKit.Theme.Green : UIKit.Theme.Gray, () => GP.UpgradeHero(), -1, 100, 32);
b.interactable = can;
}
// --- Навыки ---
var skills = UIKit.Card(list);
ProfilePanel.Header(skills, "Навыки");
for (int i = 0; i < GameData.HeroSkillNames.Length; i++)
{
bool has = GP.HasHeroSkill(i);
var r = UIKit.Row(skills, 70, 14);
UIKit.Icon(r, has ? UIKit.Theme.Gold : UIKit.Theme.Gray, (i + 1).ToString(), 56);
var t = UIKit.Text(r, GameData.HeroSkillNames[i], 26, has ? UIKit.Theme.Text : UIKit.Theme.TextDim);
UIKit.Size(t, -1, -1, 1);
UIKit.Size(UIKit.Text(r, has ? "Открыт" : "с " + GameData.HeroSkillLevels[i] + " ур.", 24,
has ? UIKit.Theme.Green : UIKit.Theme.TextDim, TextAlignmentOptions.Right), 140);
}
}
static void StatRow(Transform parent, string name, int now, int next)
{
ProfilePanel.KV(parent, name, now + " (+" + (next - now) + ")");
}
}