You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
2.5 KiB

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<UIDocument>();
PreparePlayerPanels();
}
private List<VisualElement> 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);
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<Label>("go_" + sideHorizontal);
}
private void SetupGoButton(Side sideVertical, string sideHorizontal) {
var element = GetGoButton(sideVertical, sideHorizontal);
element.RegisterCallback<PointerDownEvent>(_ => buttonDown(sideVertical, sideHorizontal));
element.RegisterCallback<PointerUpEvent>(_ => buttonUp(sideVertical, sideHorizontal));
element.RegisterCallback<PointerLeaveEvent>(_ => buttonUp(sideVertical, sideHorizontal));
}
}