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