using System; using System.Collections.Generic; using System.Linq; using Game; using UnityEngine; 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 pixelHeight = Dimensions.Singleton.PanelHeightPixels; PlayerPanel(Side.Top).style.height = PlayerPanel(Side.Bottom).style.height = new Length(pixelHeight, LengthUnit.Pixel); SetupGoButton(Side.Top, "left"); SetupGoButton(Side.Top, "right"); SetupGoButton(Side.Bottom, "left"); SetupGoButton(Side.Bottom, "right"); } public delegate void ButtonDown(Side verticalSide, string horizontalSide); public delegate void ButtonUp(Side side, string direction); public ButtonDown buttonDown; public ButtonUp buttonUp; private Label GetGoButton(Side sideVertical, string sideHorizontal) { return PlayerPanel(sideVertical).Q