Files
daluandou/Assets/Script/SummonCardButton.cs
T
huadexuan f93d69d8ee ```
docs(clipboard): 添加剪贴板功能相关图片资源

添加了两个剪贴板功能的截图文件,用于文档说明和功能展示。
```
2026-09-09 23:59:15 +08:00

154 lines
3.3 KiB
C#

using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Button))]
public class SummonCardButton : MonoBehaviour
{
[Header("角色数据")]
public CharacterData characterData;
[Header("卡槽配置")]
[Min(1)]
public int summonSlot = 1;
[Header("UI 引用")]
public Image cooldownMask;
public Text cooldownText;
public Image cardIcon;
public Text characterNameText;
public Text manaCostText;
private Button button;
private MainCharacterCombat combat;
private float cooldownTimer;
private bool isOnCooldown;
private void Awake()
{
button = GetComponent<Button>();
combat = FindObjectOfType<MainCharacterCombat>();
button.onClick.AddListener(OnClick);
isOnCooldown = false;
cooldownTimer = 0f;
UpdateCardUI();
UpdateCooldownUI();
}
private void OnDestroy()
{
if (button != null)
{
button.onClick.RemoveListener(OnClick);
}
}
private void Update()
{
if (isOnCooldown)
{
cooldownTimer -= Time.deltaTime;
if (cooldownTimer <= 0f)
{
isOnCooldown = false;
cooldownTimer = 0f;
}
UpdateCooldownUI();
}
UpdateButtonState();
}
public void OnClick()
{
if (isOnCooldown || characterData == null)
{
return;
}
if (combat == null)
{
combat = FindObjectOfType<MainCharacterCombat>();
}
if (combat != null && combat.RequestSummon(summonSlot))
{
StartCooldown();
}
}
private void StartCooldown()
{
if (characterData != null)
{
isOnCooldown = true;
cooldownTimer = characterData.cooldownTime;
UpdateCooldownUI();
}
}
private void UpdateCooldownUI()
{
if (cooldownMask != null)
{
cooldownMask.fillAmount = isOnCooldown ? (cooldownTimer / GetCooldownTime()) : 0f;
cooldownMask.enabled = isOnCooldown;
}
if (cooldownText != null)
{
cooldownText.text = isOnCooldown ? Mathf.CeilToInt(cooldownTimer).ToString() : "";
cooldownText.enabled = isOnCooldown;
}
}
private void UpdateButtonState()
{
if (button == null)
{
return;
}
button.interactable = !isOnCooldown && CanAfford();
}
private bool CanAfford()
{
if (ManaSystem.Instance == null || characterData == null)
{
return false;
}
return ManaSystem.Instance.CurrentManaInt >= characterData.manaCost;
}
private float GetCooldownTime()
{
return characterData != null ? characterData.cooldownTime : 5f;
}
private void UpdateCardUI()
{
if (characterData == null)
{
return;
}
if (cardIcon != null && characterData.cardIcon != null)
{
cardIcon.sprite = characterData.cardIcon;
}
if (characterNameText != null)
{
characterNameText.text = characterData.characterName;
}
if (manaCostText != null)
{
manaCostText.text = characterData.manaCost.ToString();
}
}
}