Aetheria/Assets/Scripts/UI/FlatButton.cs
hyperion51 4eb83acb34 Infrastructure and Production
Added the ability to directly install blueprints onto hardpoints in the colony tab
Added the ability to customize production of factories
This stuff is still kinda buggy
2020-06-02 07:01:03 +01:00

106 lines
No EOL
3.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class FlatButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{
public event Action OnClick;
public float StateDamping;
// public RectTransform Tab;
public Image Fill;
public Image Outline;
public VerticalLayoutGroup LabelLayout;
public FlatButtonState CurrentState = FlatButtonState.Unselected;
public bool DisableClickWhenSelected = true;
public FlatButtonAppearance UnselectedAppearance;
public FlatButtonAppearance SelectedAppearance;
public FlatButtonAppearance HoverAppearance;
public FlatButtonAppearance ClickAppearance;
public FlatButtonAppearance DisabledAppearance;
private RectOffset _defaultPadding;
private float _currentPadding;
private void Start()
{
_defaultPadding = LabelLayout.padding;
_currentPadding = _defaultPadding.left;
}
public void OnPointerEnter(PointerEventData eventData)
{
if (CurrentState == FlatButtonState.Unselected)
CurrentState = FlatButtonState.Hover;
}
public void OnPointerExit(PointerEventData eventData)
{
if (CurrentState == FlatButtonState.Hover)
CurrentState = FlatButtonState.Unselected;
}
public void OnPointerClick(PointerEventData eventData)
{
if (CurrentState != FlatButtonState.Disabled && (!DisableClickWhenSelected || CurrentState != FlatButtonState.Selected))
{
Fill.color = ClickAppearance.FillColor;
Outline.color = ClickAppearance.OutlineColor;
OnClick?.Invoke();
}
}
private void Update()
{
FlatButtonAppearance appearance;
switch (CurrentState)
{
case FlatButtonState.Unselected:
appearance = UnselectedAppearance;
break;
case FlatButtonState.Selected:
appearance = SelectedAppearance;
break;
case FlatButtonState.Hover:
appearance = HoverAppearance;
break;
case FlatButtonState.Disabled:
appearance = DisabledAppearance;
break;
default:
appearance = new FlatButtonAppearance();
break;
}
Fill.color = Color.Lerp(Fill.color, appearance.FillColor, StateDamping * Time.deltaTime);
Outline.color = Color.Lerp(Outline.color, appearance.OutlineColor, StateDamping * Time.deltaTime);
_currentPadding = Mathf.Lerp(_currentPadding, appearance.LayoutPadding, StateDamping * Time.deltaTime);
LabelLayout.padding = new RectOffset
{
bottom = _defaultPadding.bottom,
top = _defaultPadding.top,
left = (int) _currentPadding,
right = (int) _currentPadding
};
}
}
public enum FlatButtonState
{
Unselected,
Selected,
Hover,
Disabled
}
[Serializable]
public struct FlatButtonAppearance
{
public Color FillColor;
public Color OutlineColor;
public int LayoutPadding;
}