using UnityEngine;
using UnityEngine.UI;
///
/// 玩家技能系统(召唤师技能)
/// 管理技能释放和冷却
///
public class PlayerSkillSystem : MonoBehaviour
{
public static PlayerSkillSystem Instance { get; private set; }
[Header("战术增益加成倍率")]
public float cooldownMultiplier = 1f; // 冷却缩减倍率 (如 0.9 = CD 缩减 10%)
public float powerMultiplier = 1f; // 威力加成倍率 (如 1.15 = 效果提升 15%)
[Header("技能1:群体治疗")]
public Button skill1Button;
public Text skill1CooldownText;
public float skill1Cooldown = 20f;
public float skill1HealAmount = 100f;
private float skill1RemainingCooldown = 0f;
[Header("技能1特效配置")]
public GameObject cureBallPrefab; // 飞球预制体 (Assets/Prefabs/特效/飞球/cureBall.prefab)
public GameObject healNovaPrefab; // 治疗冲击波预制体 (Assets/TJGeneratorLibEffects/Prefabs/Interactive/Healing/HealNova.prefab)
public Transform castStartTransform; // 技能施放起点 (如未指定默认摄像机下方或召唤师位置)
public Vector3 castTargetPosition = new Vector3(0f, 0.1f, -9f); // 我方阵地中心落地点
[Header("技能2:全屏AOE")]
public Button skill2Button;
public Text skill2CooldownText;
public float skill2Cooldown = 20f;
public float skill2Damage = 80f;
private float skill2RemainingCooldown = 0f;
[Header("技能2特效配置")]
public GameObject lightningStrikePrefab; // 落雷击中特效 (Assets/TJGeneratorLibEffects/Prefabs/Combat/Explosions/LightningExplosion/LightningExplosionBlue.prefab)
public GameObject lightningNovaPrefab; // 雷暴全屏光环特效 (Assets/TJGeneratorLibEffects/Prefabs/Combat/Nova/Lightning/NovaLightningBlue.prefab)
private void Awake()
{
Instance = this;
}
private void Start()
{
// 自动从场景或父节点绑定技能按钮与图标引用
EnsureSkillUIReferences();
// 从 PlayerData 加载玩家装备的 2 个召唤师技能图标
LoadEquippedSkillIcons();
// 绑定按钮点击事件
if (skill1Button != null)
{
skill1Button.onClick.AddListener(UseSkill1);
}
if (skill2Button != null)
{
skill2Button.onClick.AddListener(UseSkill2);
}
}
private void EnsureSkillUIReferences()
{
var canvas = GameObject.Find("TowerDefenseCanvas");
if (canvas == null) return;
var skillsPanel = canvas.transform.Find("BottomUI/SkillsPanel");
if (skillsPanel == null) return;
if (skill1Button == null && skillsPanel.childCount > 0)
{
var item1 = skillsPanel.GetChild(0);
skill1Button = item1.GetComponent