gather-and-defend/Assets/Scripts/UnitTree/UpgradePlacementButton.cs
William fd002a54a8 Remove includes preventing build (#20)
Reviewed-on: #20
Co-authored-by: William <william-gin1@hotmail.com>
Co-committed-by: William <william-gin1@hotmail.com>
2025-11-09 15:39:42 +00:00

146 lines
4.6 KiB
C#

using System;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class UpgradePlacementButton : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler
{
private Button _button;
[SerializeField]
private TMP_Text _foodLabel;
[SerializeField]
private TMP_Text _woodLabel;
[SerializeField]
private TMP_Text _rockLabel;
[SerializeField]
private Image _backgroundImage;
[SerializeField]
private Image _unitArt;
[SerializeField]
private GameObject _buttonContainer;
[SerializeField]
private GameObject _prefab;
[SerializeField]
protected UnitCard _unitCardInformation;
[SerializeField]
protected Sprite _rangeSprite;
private GameObject _unitGameObject;
private Canvas _canvas;
private static GameObject _outline;
public Button Button => _button;
void Start()
{
_button = GetComponent<Button>();
if (_unitCardInformation == null)
{
Destroy(gameObject);
}
}
void Update()
{
if (_unitCardInformation != null)
{
_button.interactable = CanUse();
if (CanUse())
{
_backgroundImage.color = Color.green;
}
else
{
_backgroundImage.color = Color.red;
}
}
}
private bool CanUse()
{
return ResourceManager.Instance.EnoughFor(_unitCardInformation.Rock, _unitCardInformation.Wood, _unitCardInformation.Food);
}
void SetTextFor(TMP_Text label, int value)
{
label.transform.parent.gameObject.SetActive(value > 0);
label.text = "" + value;
}
public void OnPointerClick(PointerEventData eventData)
{
if (CanUse())
{
//Change parent GameObject
Vector3 instantiatePosition = _unitGameObject.transform.position;
Instantiate(_prefab, instantiatePosition, Quaternion.identity, _canvas.transform);
ResourceManager resourceManager = ResourceManager.Instance;
resourceManager.Remove(_unitCardInformation.Rock, _unitCardInformation.Wood, _unitCardInformation.Food);
Destroy(_unitGameObject);
Destroy(_buttonContainer);
HideTooltip();
}
}
public void Initialize(UnitUpgrade unitUpgrade, GameObject parentGameObject, Canvas canvas)
{
Debug.Log(unitUpgrade.name);
_unitCardInformation = unitUpgrade.UpgradeUnitCard;
SetTextFor(_foodLabel, _unitCardInformation.Food);
SetTextFor(_woodLabel, _unitCardInformation.Wood);
SetTextFor(_rockLabel, _unitCardInformation.Rock);
_prefab = unitUpgrade.UpgradePrefab;
_unitGameObject = parentGameObject;
_canvas = canvas;
_unitArt.sprite = unitUpgrade.UpgradeCardArt;
if (_outline == null && _unitGameObject.TryGetComponent(out House currentBuilding))
{
_outline = new GameObject("Outline");
var rend = _outline.AddComponent<SpriteRenderer>();
rend.sprite = _rangeSprite;
rend.sortingLayerName = "Character";
rend.sortingOrder = 1;
rend.color = new Color(1, 1, 1, 0.2f);
}
}
public void OnPointerEnter(PointerEventData eventData)
{
Ally allyObj = _prefab.GetComponent<Ally>();
TooltipManager.Instance.ShowTooltip(_unitCardInformation, allyObj.Hp.ToString(), allyObj.AttackDamage.ToString(), allyObj.AttackInterval.ToString());
if (_prefab.TryGetComponent(out ProductionBuilding hoveredBuilding))
{
if (_unitGameObject.TryGetComponent(out House currentBuilding))
{
var range = hoveredBuilding.Range * 2 + 1;
currentBuilding.RangeOutline.size = new Vector2(range, range);
foreach (var rend in currentBuilding.GetAllComponents<SpriteRenderer>())
{
_outline.SetActive(true);
_outline.transform.SetParent(currentBuilding.transform);
_outline.transform.localPosition = new Vector3();
_outline.transform.localScale = currentBuilding.RangeOutline.size;
rend.material.SetColor("_OutlineColor", Color.blue);
}
}
}
}
public void OnPointerExit(PointerEventData eventData)
{
HideTooltip();
if (_outline)
{
_outline.SetActive(false);
}
}
private void HideTooltip()
{
TooltipManager.Instance.HideToolTip();
}
}