OldBlueWater/BlueWater/Assets/PixelHeroes/Scripts/UI/LayerControls.cs

70 lines
2.9 KiB
C#
Raw Normal View History

2023-09-26 06:24:34 +00:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Assets.PixelHeroes.Scripts.UI
{
public class LayerControls : MonoBehaviour
{
public Button Prev;
public Button Next;
public Dropdown Dropdown;
public Button Hide;
public Button Paint;
public Slider Hue;
public Slider Saturation;
public Slider Brightness;
public Transform FixedColors;
public Action<Color> OnSelectFixedColor;
public void Start()
{
foreach (var button in FixedColors.GetComponentsInChildren<Button>())
{
button.onClick.AddListener(() => SelectFixedColor(button.targetGraphic.color));
}
var onPointerUp = new EventTrigger.Entry { eventID = EventTriggerType.PointerUp };
var onPointerExit = new EventTrigger.Entry { eventID = EventTriggerType.PointerExit };
onPointerUp.callback.AddListener(eventData => StartCoroutine(OnDropdownExpanded()));
onPointerExit.callback.AddListener(eventData => { if (Dropdown.GetComponentInChildren<ScrollRect>() != null) Dropdown.onValueChanged.Invoke(Dropdown.value); });
Dropdown.GetComponent<EventTrigger>().triggers = new List<EventTrigger.Entry> { onPointerUp, onPointerExit };
}
public void SelectFixedColor(Color color)
{
OnSelectFixedColor?.Invoke(color);
}
private IEnumerator OnDropdownExpanded()
{
yield return null;
var toggles = Dropdown.GetComponentsInChildren<Toggle>().ToList();
for (var i = 0; i < toggles.Count; i++)
{
var index = i;
var pointerEnter = new EventTrigger.Entry { eventID = EventTriggerType.PointerEnter };
var pointerClick = new EventTrigger.Entry { eventID = EventTriggerType.PointerClick };
var scroll = new EventTrigger.Entry { eventID = EventTriggerType.Scroll };
var scrollRect = Dropdown.GetComponentInChildren<ScrollRect>();
pointerEnter.callback.AddListener(eventData => Dropdown.onValueChanged.Invoke(index));
pointerClick.callback.AddListener(eventData => toggles.ForEach(j => Destroy(j.GetComponent<EventTrigger>())));
scroll.callback.AddListener(eventData => scrollRect.OnScroll(eventData as PointerEventData));
toggles[i].gameObject.AddComponent<EventTrigger>().triggers = new List<EventTrigger.Entry> { pointerEnter, pointerClick, scroll };
}
if (Dropdown.options.Count > 1)
{
Dropdown.GetComponentInChildren<ScrollRect>().verticalScrollbar.value = 1 - (float) Dropdown.value / (Dropdown.options.Count - 1);
}
}
}
}