TurnBasedStrategyCourse/Assets/Scripts/UI/UnitActionSystemUI.cs

65 lines
2.7 KiB
C#

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<ActionButtonUI> 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>();
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}";
}
}