gather-and-defend/Assets/Scripts/Drag&Drop/UnitPlacementButton.cs
Felix Boucher 43f4c6a39e Linked resource management to unit creation
Problem :

Les unités et bâtiments ne coutaient rien à construire

Solution :

J'ai link le système de drag and drop au resource manager.

Note :

J'ai déshérité le ResourceManager de MonoBehaviour aussi, vu que c'est pas une fonctionalité qui nécessite d'être updaté par frame vraiment, c'est plus du stockage.

J'ai testé dans l'éditeur et tout semble fonctionel *fingers crossed*
2023-06-22 13:58:02 -04:00

57 lines
1.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Button))]
public abstract class UnitPlacementButton : MonoBehaviour, IPointerDownHandler
{
[SerializeField]
protected Material _outlineMaterial;
[SerializeField]
protected Sprite _detectionRangeSprite;
[SerializeField]
private int _wood;
[SerializeField]
private int _rock;
[SerializeField]
private int _food;
private Button _button;
[SerializeField]
private TMP_Text _foodLabel;
[SerializeField]
private TMP_Text _woodLabel;
[SerializeField]
private TMP_Text _rockLabel;
protected virtual void Start()
{
_button = GetComponent<Button>();
}
protected virtual void Update()
{
_button.interactable = ResourceManager.Instance.EnoughFor(_rock, _wood, _food);
SetTextFor(_foodLabel, _food);
SetTextFor(_rockLabel, _rock);
SetTextFor(_woodLabel, _wood);
}
void SetTextFor(TMP_Text label, int value)
{
label.transform.parent.gameObject.SetActive(value > 0);
label.text = "" + value;
}
public void OnPointerDown(PointerEventData eventData)
{
if (!_button.interactable) return;
var placeholder = Place();
placeholder.Rock = _rock;
placeholder.Wood = _wood;
placeholder.Food = _food;
}
protected abstract DraggablePlaceholder Place();
}