Repository URL to install this package:
Version:
1.3.1 ▾
|
using System;
using UnityEditor;
using UnityEngine;
namespace Fluctio.FluctioSim.Utils.SerializableClasses
{
[Serializable]
public class SerializableTimeSpan : ISerializationCallbackReceiver, IFormattable
{
#region Info and constructor
[SerializeField] private double seconds;
public TimeSpan TimeSpan { get; private set; }
public SerializableTimeSpan(TimeSpan timeSpan)
{
TimeSpan = timeSpan;
seconds = TimeSpan.TotalSeconds;
}
#endregion
#region Cast operators
public static implicit operator TimeSpan(SerializableTimeSpan serializableTimeSpan)
{
return serializableTimeSpan.TimeSpan;
}
public static implicit operator SerializableTimeSpan(TimeSpan timeSpan)
{
return new SerializableTimeSpan(timeSpan);
}
#endregion
#region Serialization
public void OnBeforeSerialize()
{
seconds = TimeSpan.TotalSeconds;
}
public void OnAfterDeserialize()
{
TimeSpan = TimeSpan.FromSeconds(seconds);
}
#endregion
#region ToString
// ReSharper disable once SpecifyACultureInStringConversionExplicitly
public override string ToString() => TimeSpan.ToString();
public string ToString(string format, IFormatProvider formatProvider)
{
return TimeSpan.ToString(format, formatProvider);
}
#endregion
}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(SerializableTimeSpan))]
public class SerializableTimeSpanDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
var secondsProperty = property.FindPropertyRelative("seconds");
label.text = $"{label.text} (seconds)";
EditorGUI.PropertyField(position, secondsProperty, label);
}
}
#endif
}