using System; using System.Collections.Generic; using System.Linq; using Game; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.UIElements; public class GameUI : MonoBehaviour { private UIDocument document; public static GameUI Singleton; private void Awake() { Singleton = this; document = GetComponent(); PreparePlayerPanels(); } private List PlayerPanels => document.rootVisualElement.Children().Where(e => e.ClassListContains("player_panel")).ToList(); public VisualElement PlayerPanel(Side side) { return side switch { Side.Top => PlayerPanels[0], Side.Bottom => PlayerPanels[1], _ => throw new ArgumentOutOfRangeException(nameof(side), side, null) }; } public static VisualElement AddModification(VisualElement playerPanel, ActiveModification modification) { VisualElement listElement = ModsList(playerPanel, modification.Properties.type); VisualElement newElement = new() { style = { backgroundImage = Background.FromSprite(modification.Properties.image) } }; listElement.Add(newElement); return newElement; } private static VisualElement ModsList(VisualElement player, ModType type) { return type switch { ModType.Buff => player.Children().First(e => e.ClassListContains("mods_list")), ModType.Nerf => player.Children().Last(e => e.ClassListContains("mods_list")), _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; } private void PreparePlayerPanels() { float heightPercentage = Dimensions.Singleton.panelHeightPercentage; PlayerPanel(Side.Top).style.height = PlayerPanel(Side.Bottom).style.height = Length.Percent(heightPercentage); SetupButtons(Side.Top); SetupButtons(Side.Bottom); } public delegate void ButtonDown(Side side, string direction); public delegate void ButtonUp(Side side, string direction); public ButtonDown buttonDown; public ButtonUp buttonUp; private void SetupButtons(Side side) { Button btnLeft = PlayerPanel(side).Q