rabidus-test/Assets/Plugins/QFSW/Quantum Console/Source/Scripts/QuantumTheme.cs

75 lines
2.8 KiB
C#

using QFSW.QC.Utilities;
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
namespace QFSW.QC
{
[CreateAssetMenu(fileName = "Untitled Theme", menuName = "Quantum Console/Theme")]
public class QuantumTheme : ScriptableObject
{
[SerializeField] public TMP_FontAsset Font = null;
[SerializeField] public Material PanelMaterial = null;
[SerializeField] public Color PanelColor = Color.white;
[SerializeField] public Color CommandLogColor = new Color(0, 1, 1);
[SerializeField] public Color SelectedSuggestionColor = new Color(1, 1, 0.55f);
[SerializeField] public Color SuggestionColor = Color.gray;
[SerializeField] public Color ErrorColor = Color.red;
[SerializeField] public Color WarningColor = new Color(1, 0.5f, 0);
[SerializeField] public Color SuccessColor = Color.green;
[SerializeField] public string TimestampFormat = "[{0}:{1}:{2}]";
[SerializeField] public Color DefaultReturnValueColor = Color.white;
[SerializeField] public List<TypeColorFormatter> TypeFormatters = new List<TypeColorFormatter>(0);
[SerializeField] public List<CollectionFormatter> CollectionFormatters = new List<CollectionFormatter>(0);
private T FindTypeFormatter<T>(List<T> formatters, Type type) where T : TypeFormatter
{
foreach (T formatter in formatters)
{
if (type == formatter.Type || type.IsGenericTypeOf(formatter.Type))
{
return formatter;
}
}
foreach (T formatter in formatters)
{
if (formatter.Type.IsAssignableFrom(type))
{
return formatter;
}
}
return null;
}
public string ColorizeReturn(string data, Type type)
{
TypeColorFormatter formatter = FindTypeFormatter(TypeFormatters, type);
if (formatter == null) { return data.ColorText(DefaultReturnValueColor); }
else { return data.ColorText(formatter.Color); }
}
public void GetCollectionFormatting(Type type, out string leftScoper, out string seperator, out string rightScoper)
{
CollectionFormatter formatter = FindTypeFormatter(CollectionFormatters, type);
if (formatter == null)
{
leftScoper = "[";
seperator = ",";
rightScoper = "]";
}
else
{
leftScoper = formatter.LeftScoper.Replace("\\n", "\n");
seperator = formatter.SeperatorString.Replace("\\n", "\n");
rightScoper = formatter.RightScoper.Replace("\\n", "\n");
}
}
}
}