namespace UIWidgets
{
using System;
using UIWidgets.Attributes;
using UIWidgets.Styles;
using UnityEngine;
///
/// Base class for Slide Scale.
///
public abstract class SliderScaleBase : MonoBehaviourConditional, IStylable
{
[SerializeField]
[NestedInspector]
Scale scale;
///
/// Scale.
///
public Scale Scale
{
get
{
return scale;
}
set
{
if (scale != null)
{
scale.Clear();
}
scale = value;
UpdateScale();
}
}
[SerializeField]
string format = string.Empty;
///
/// Value format.
///
public string Format
{
get
{
return format;
}
set
{
if (format != value)
{
format = value;
UpdateScale();
}
}
}
Func formatter;
///
/// Custom value formatter.
///
public Func Formatter
{
get
{
return formatter;
}
set
{
if (formatter != value)
{
formatter = value;
UpdateScale();
}
}
}
RectTransform rectTransform;
///
/// RectTransform.
///
public RectTransform RectTransform
{
get
{
if (rectTransform == null)
{
rectTransform = transform as RectTransform;
}
return rectTransform;
}
}
Func value2MarkDataDelegate;
///
/// Delegate for the Value2MarkData method.
///
protected Func Value2MarkDataDelegate
{
get
{
if (value2MarkDataDelegate == null)
{
value2MarkDataDelegate = Value2MarkData;
}
return value2MarkDataDelegate;
}
}
bool isInited;
///
/// Process the start event.
///
protected virtual void Start()
{
Init();
}
///
/// Init this instance.
///
public virtual void Init()
{
if (isInited)
{
return;
}
isInited = true;
AddListeners();
UpdateScale();
}
///
/// Add listeners.
///
protected virtual void AddListeners()
{
Scale.OnChange += UpdateScale;
}
///
/// Remove listeners.
///
protected virtual void RemoveListeners()
{
Scale.OnChange -= UpdateScale;
}
///
/// Process the destroy event.
///
protected virtual void OnDestroy()
{
RemoveListeners();
}
///
/// Update scale.
///
public abstract void UpdateScale();
///
/// Convert value to label.
///
/// Value.
/// Label.
protected virtual string Value2Label(float value)
{
if (Formatter != null)
{
return Formatter(value);
}
return value.ToString(Format);
}
///
/// Convert value to mark data.
///
/// Value.
/// Mark data.
protected virtual Scale.MarkData Value2MarkData(float value)
{
var a = Value2Anchor(value);
return new Scale.MarkData(value, anchorMin: a, anchorMax: a, value2label: Value2Label);
}
///
/// Convert value to anchor.
///
/// Value.
/// Anchor.
protected abstract Vector2 Value2Anchor(float value);
#region IStylable implementation
///
public virtual bool SetStyle(Style style)
{
Scale.SetStyle(style);
return true;
}
///
public virtual bool GetStyle(Style style)
{
Scale.GetStyle(style);
return true;
}
#endregion
}
}