2023-08-12 01:43:24 +08:00
|
|
|
|
namespace BITKit
|
|
|
|
|
{
|
|
|
|
|
public interface IOptional
|
|
|
|
|
{
|
|
|
|
|
bool Allow { get; }
|
|
|
|
|
object Value { get; }
|
|
|
|
|
}
|
|
|
|
|
public interface IOptional<T>
|
|
|
|
|
{
|
2023-10-02 23:24:56 +08:00
|
|
|
|
bool Allow { get; set; }
|
|
|
|
|
T Value { get; set; }
|
2023-08-12 01:43:24 +08:00
|
|
|
|
}
|
|
|
|
|
[System.Serializable]
|
2023-10-02 23:24:56 +08:00
|
|
|
|
public class Optional<T> : IOptional<T>
|
2023-08-12 01:43:24 +08:00
|
|
|
|
{
|
2023-08-23 01:59:40 +08:00
|
|
|
|
#if NET5_0_OR_GREATER
|
2023-08-12 01:43:24 +08:00
|
|
|
|
bool allow;
|
|
|
|
|
T value;
|
|
|
|
|
#else
|
2023-08-23 01:59:40 +08:00
|
|
|
|
[UnityEngine.SerializeField]
|
2023-08-12 01:43:24 +08:00
|
|
|
|
bool allow;
|
2023-08-23 01:59:40 +08:00
|
|
|
|
[UnityEngine.SerializeField]
|
2023-08-12 01:43:24 +08:00
|
|
|
|
T value;
|
|
|
|
|
#endif
|
|
|
|
|
public bool Allow { get => allow; set => allow = value;}
|
2023-10-02 23:24:56 +08:00
|
|
|
|
public T Value
|
|
|
|
|
{
|
|
|
|
|
get => value;
|
|
|
|
|
set=>this.value=value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetValueThenAllow(T newValue)
|
|
|
|
|
{
|
|
|
|
|
value = newValue;
|
|
|
|
|
allow = true;
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-12 01:43:24 +08:00
|
|
|
|
public void Clear()
|
|
|
|
|
{
|
|
|
|
|
Allow = false;
|
|
|
|
|
value = default;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static implicit operator T(Optional<T> self)
|
|
|
|
|
{
|
|
|
|
|
return self.value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|