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

70 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using Sirenix.Utilities;
using UnityEngine;
using UnityEngine.UIElements;
using VOID.Generic.Objects.Unit;
using VOID.Generic.Player;
using VOID.UserInterface.Game.Party;
namespace VOID.UserInterface.Generic.Lobby
{
public class LobbyGameStarterUI : MonoBehaviour
{
public static LobbyGameStarterUI current { get; private set; }
// Visual Elements
private VisualElement _rootElement;
private VisualElement _offsetElement;
private VisualElement _unitsElement;
private Dictionary<UnitObject, UnitPortraitUI> _unitPortraits = new();
private void Awake()
{
current = this;
var uiDocument = gameObject.GetComponent<UIDocument>();
var templateElement = uiDocument.rootVisualElement;
_rootElement = templateElement.Q("root-lobby-game-starter");
_rootElement.dataSource = this;
_offsetElement = templateElement.Q("offset");
_unitsElement = templateElement.Q("units");
// Remove all placeholders
_unitsElement.Clear();
// Main party UI hidden because no unit selected - hide offset
_offsetElement.style.display = DisplayStyle.None;
}
private void Start()
{
PlayerController.current.OnMainUnitChange += OnMainUnitChange;
}
public void AddUnit(UnitObject unit, Action<UnitObject> onSelect)
{
var unitPortrait = new UnitPortraitUI();
unitPortrait.InitNew(_unitsElement);
unitPortrait.SetUnit(unit);
unitPortrait.OnClick += onSelect;
_unitPortraits.Add(unit, unitPortrait);
}
private void OnMainUnitChange(UnitObject unit)
{
// Show all available units to select
_unitPortraits.Values.ForEach(unitPortrait => unitPortrait.templateElement.style.display = DisplayStyle.Flex);
// Hide main unit portrait, it will be displayed in party ui
if (_unitPortraits.TryGetValue(unit, out var mainUnitPortrait))
mainUnitPortrait.templateElement.style.display = DisplayStyle.None;
// Party UI should have main unit set - show offset to prevent overlapping
_offsetElement.style.display = DisplayStyle.Flex;
}
}
}