Files
2026-07-09 21:33:33 +02:00

66 lines
2.2 KiB
C#

using UnityEngine;
using UnityEngine.UIElements;
using VOID.Generic.Objects.Unit;
using VOID.Generic.Player;
namespace VOID.UserInterface.Game.Party
{
public class PartyUI : MonoBehaviour
{
public static PartyUI current { get; private set; }
// Visual Elements
private VisualElement _rootElement;
private PartyUnitUI _partyMainUnit;
private PartyUnitUI _partySubUnit;
private void Awake()
{
current = this;
var uiDocument = gameObject.GetComponent<UIDocument>();
var templateElement = uiDocument.rootVisualElement;
_rootElement = templateElement.Q("root-party");
// Find all important elements + initialize MainUnit element
_partyMainUnit = gameObject.AddComponent<PartyUnitUI>();
_partyMainUnit.Init(templateElement.Q("main-unit"));
// Find all important elements + initialize SubUnit element
_partySubUnit = gameObject.AddComponent<PartyUnitUI>();
_partySubUnit.Init(templateElement.Q("sub-unit"));
_rootElement.dataSource = this;
_rootElement.pickingMode = PickingMode.Position;
}
private void Start()
{
// This will set portrait active (highlight border) if it belong to currently active unit
PlayerController.current.OnActiveUnitChange += OnActiveUnitChange;
// Updating portraits of party unit when they change
PlayerController.current.OnMainUnitChange += OnMainUnitChange;
PlayerController.current.OnSubUnitChange += OnSubUnitChange;
}
private void OnActiveUnitChange(UnitObject unitObject)
{
_partyMainUnit.SetActive(_partyMainUnit.unit == unitObject);
_partySubUnit.SetActive(_partySubUnit.unit == unitObject);
}
private void OnMainUnitChange(UnitObject unitObject)
{
_partyMainUnit.SetUnit(unitObject);
}
private void OnSubUnitChange(UnitObject unitObject)
{
_partySubUnit.SetUnit(unitObject);
}
}
}