Files

79 lines
4.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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),
"<color=" + (enough ? "#9be59b" : "#ff7a7a") + ">" + c.amount.ToString("N0") + "</color> / " +
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 + " <color=#9be59b>(+" + (next - now) + ")</color>");
}
}