gather-and-defend/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs
Ader_Alisma 8ec062892a Added Unit Tooltip (#6)
Affiche un Tooltip d'une unité quand on hover sur l'unité
Inclus description et stats de l'unité

Co-authored-by: Ader Alisma 01 <adeder22@hotmail.com>
Reviewed-on: #6
Reviewed-by: EliaGingras1 <william-gin1@hotmail.com>
2025-05-30 19:05:03 +00:00

90 lines
2.6 KiB
C#

using GatherAndDefend.Events;
using System.Collections;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public abstract class UnitPlacementButton : PlacementButton, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField]
protected Sprite _detectionRangeSprite;
[SerializeField]
protected UnitCard _unitCardInformation;
[SerializeField]
private TMP_Text _foodLabel;
[SerializeField]
private TMP_Text _woodLabel;
[SerializeField]
private TMP_Text _rockLabel;
[SerializeField]
protected Image _cooldownIndicator;
protected bool _lockedByCooldown;
protected override void Start()
{
base.Start();
}
protected override void Update()
{
base.Update();
SetTextFor(_foodLabel, _unitCardInformation.Food);
SetTextFor(_rockLabel, _unitCardInformation.Rock);
SetTextFor(_woodLabel, _unitCardInformation.Wood);
}
void SetTextFor(TMP_Text label, int value)
{
label.transform.parent.gameObject.SetActive(value > 0);
label.text = "" + value;
}
public override void OnPointerDown(PointerEventData eventData)
{
base.OnPointerDown(eventData);
if (Placeholder is UnitPlaceholder placeHolder)
{
placeHolder.Rock = _unitCardInformation.Rock;
placeHolder.Wood = _unitCardInformation.Wood;
placeHolder.Food = _unitCardInformation.Food;
placeHolder.WasPlaced += HandleCooldown;
}
}
private void HandleCooldown(UnitPlaceholder unitPlaceholder)
{
unitPlaceholder.WasPlaced -= HandleCooldown;
StartCoroutine(HandleCooldownCoroutine());
IEnumerator HandleCooldownCoroutine()
{
var countDown = 0f;
_lockedByCooldown = true;
_cooldownIndicator.gameObject.SetActive(true);
while (countDown < _unitCardInformation.CooldownInSeconds)
{
countDown += Time.deltaTime;
var percentDone = countDown / _unitCardInformation.CooldownInSeconds;
_cooldownIndicator.fillAmount = 1 - percentDone;
yield return null;
}
_cooldownIndicator.gameObject.SetActive(false);
_lockedByCooldown = false;
}
}
protected override bool CanPlace()
{
return base.CanPlace() && !_lockedByCooldown;
}
public virtual void OnPointerEnter(PointerEventData eventData){}
public virtual void OnPointerExit(PointerEventData eventData){}
}