Aetheria/Assets/Scripts/UI/DropdownMenu.cs
Reinier Vens 4f19189244 Menu Screen + UI Restyle
Created menu screen
Created inventory tab with 2 cargo panes and properties panel
Updated the style of every UI prefab
Implemented Blurred UI material
Implemented UI shaders for map layers
Created Map tab (still needs input)
2020-12-14 02:56:35 +00:00

74 lines
2.1 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class DropdownMenu : MonoBehaviour
{
public Canvas Canvas;
public ClickCatcher CancelClickCatcher;
public PropertyButton OptionPrefab;
public RectTransform ContentRoot;
public float OptionHeight;
public float PaddingHeight;
private List<GameObject> _options = new List<GameObject>();
private void Start()
{
if (CancelClickCatcher != null)
CancelClickCatcher.OnClick += data =>
{
End();
};
}
private void End()
{
CancelClickCatcher.gameObject.SetActive(false);
gameObject.SetActive(false);
}
public void Clear()
{
// Destroy previous options
foreach(var option in _options)
Destroy(option);
_options.Clear();
}
public void AddOption(string text, Action action, bool selected = false, bool enabled = true)
{
var optionButton = Instantiate(OptionPrefab, ContentRoot);
optionButton.Label.text = text;
optionButton.Button.onClick.AddListener(() =>
{
action();
End();
});
optionButton.Button.interactable = enabled;
//optionButton.Button..CurrentState = !enabled ? FlatButtonState.Disabled : selected ? FlatButtonState.Selected : FlatButtonState.Unselected;
_options.Add(optionButton.gameObject);
}
public void Show(RectTransform parent)
{
var rect = transform as RectTransform;
var pivot = rect.pivot;
pivot.x = 0;
var scaleFactor = Canvas.scaleFactor;
var corners = new Vector3[4];
parent.GetWorldCorners(corners);
var pivotTop = corners[0].y > (PaddingHeight + _options.Count * OptionHeight) * scaleFactor;
pivot.y = pivotTop ? 1 : 0;
rect.pivot = pivot;
rect.sizeDelta = parent.sizeDelta;
rect.position = pivotTop ? corners[0] : corners[1];
CancelClickCatcher.gameObject.SetActive(true);
}
}