You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRF/Scripts/UI/StyleSheet.cs

111 lines
2.5 KiB
C#

3 months ago
namespace SRF.UI
{
using System;
using System.Collections.Generic;
using System.Linq;
using Helpers;
using UnityEngine;
[Serializable]
public class Style
{
public Color ActiveColor = Color.white;
public Color DisabledColor = Color.white;
public Color HoverColor = Color.white;
public Sprite Image;
public Color NormalColor = Color.white;
public Style Copy()
{
var s = new Style();
s.CopyFrom(this);
return s;
}
public void CopyFrom(Style style)
{
Image = style.Image;
NormalColor = style.NormalColor;
HoverColor = style.HoverColor;
ActiveColor = style.ActiveColor;
DisabledColor = style.DisabledColor;
}
}
[Serializable]
public class StyleSheet : ScriptableObject
{
[SerializeField] private List<string> _keys = new List<string>();
[SerializeField] private List<Style> _styles = new List<Style>();
[SerializeField] public StyleSheet Parent;
public Style GetStyle(string key, bool searchParent = true)
{
var i = _keys.IndexOf(key);
if (i < 0)
{
if (searchParent && Parent != null)
{
return Parent.GetStyle(key);
}
return null;
}
return _styles[i];
}
#if UNITY_EDITOR
public int AddStyle(string key)
{
if (_keys.Contains(key))
{
throw new ArgumentException("key already exists");
}
_keys.Add(key);
_styles.Add(new Style());
return _keys.Count - 1;
}
public bool DeleteStyle(string key)
{
var i = _keys.IndexOf(key);
if (i < 0)
{
return false;
}
_keys.RemoveAt(i);
_styles.RemoveAt(i);
return true;
}
public IEnumerable<string> GetStyleKeys(bool includeParent = true)
{
if (Parent != null && includeParent)
{
return _keys.Union(Parent.GetStyleKeys());
}
return _keys.ToList();
}
[UnityEditor.MenuItem("Assets/Create/SRF/Style Sheet")]
public static void CreateStyleSheet()
{
var o = AssetUtil.CreateAsset<StyleSheet>();
AssetUtil.SelectAssetInProjectView(o);
}
#endif
}
}