using System; using System.Collections.Generic; using Actions; using TMPro; using UnityEngine; namespace UI { public class UnitActionSystemUI : MonoBehaviour { [SerializeField] private Transform ActionButtonPrefab; [SerializeField] private Transform ActionButtonContainerTransform; [SerializeField] private TextMeshProUGUI ActionPointsText; private List actionButtonUIList; private void Awake() => actionButtonUIList = new(); private void Start() { UnitActionSystem.Instance.OnSelectedUnitChanged += UnitActionSystem_OnSelectedUnitChanged; UnitActionSystem.Instance.OnSelectedActionChanged += UnitActionSystem_OnSelectedActionChanged; UnitActionSystem.Instance.OnActionStarted += UnitActionSystem_OnActionStarted; TurnSystem.Instance.OnTurnChanged += TurnSystem_OnTurnChanged; Unit.OnAnyActionPointsChanged += Unit_OnAnyActionPointsChanged; CreateUnitActionButtons(); UpdateActionPoints(); UpdateSelectedVisual(); } private void Unit_OnAnyActionPointsChanged(object sender, EventArgs e) => UpdateActionPoints(); private void TurnSystem_OnTurnChanged(object sender, EventArgs e) => UpdateActionPoints(); private void UnitActionSystem_OnActionStarted(object sender, EventArgs e) => UpdateActionPoints(); private void UnitActionSystem_OnSelectedActionChanged(object sender, EventArgs e) => UpdateSelectedVisual(); private void UnitActionSystem_OnSelectedUnitChanged(object sender, EventArgs e) { CreateUnitActionButtons(); UpdateActionPoints(); UpdateSelectedVisual(); } private void CreateUnitActionButtons() { foreach (Transform buttonTransform in ActionButtonContainerTransform) { Destroy(buttonTransform.gameObject); } actionButtonUIList.Clear(); foreach (BaseAction baseAction in UnitActionSystem.Instance.SelectedUnit.BaseActionArray) { Transform actionButtonTransform = Instantiate(ActionButtonPrefab, ActionButtonContainerTransform); ActionButtonUI actionButtonUI = actionButtonTransform.GetComponent(); actionButtonUI.SetBaseAction(baseAction); actionButtonUIList.Add(actionButtonUI); } } private void UpdateSelectedVisual() { foreach (ActionButtonUI actionButtonUI in actionButtonUIList) { actionButtonUI.UpdateSelectedVisual(); } } private void UpdateActionPoints() => ActionPointsText.text = $"Action Points: {UnitActionSystem.Instance.SelectedUnit.ActionPoints}"; } }