This commit is contained in:
parent
01e7e4e35e
commit
6f913eb234
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using Cysharp.Threading.Tasks;
|
||||||
|
|
||||||
namespace BITKit
|
namespace BITKit
|
||||||
{
|
{
|
||||||
|
@ -70,6 +71,22 @@ namespace BITKit
|
||||||
return Allow ? Value : other.Invoke();
|
return Allow ? Value : other.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async UniTask<T> IfNotAllowAsync(Func<UniTask<T>> func)
|
||||||
|
{
|
||||||
|
return Allow ? Value : await func.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async UniTask<T> SetValueThenAllowAsync(Func<UniTask<T>> func)
|
||||||
|
{
|
||||||
|
if (Allow)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
value = await func.Invoke();
|
||||||
|
allow = true;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
public void SetValueThenAllow(T newValue)
|
public void SetValueThenAllow(T newValue)
|
||||||
{
|
{
|
||||||
value = newValue;
|
value = newValue;
|
||||||
|
|
|
@ -9,19 +9,37 @@ namespace BITKit
|
||||||
}
|
}
|
||||||
public interface IWrapper<T>:IWrapper
|
public interface IWrapper<T>:IWrapper
|
||||||
{
|
{
|
||||||
|
public Action<T, T> OnValueChanged { get; set; }
|
||||||
public T Value { get; set; }
|
public T Value { get; set; }
|
||||||
}
|
}
|
||||||
public class ValueWrapper<T> : IWrapper<T>
|
public class ValueWrapper<T> : IWrapper<T>
|
||||||
{
|
{
|
||||||
public T Value { get; set; }=default;
|
public Action<T, T> OnValueChanged { get; set; }
|
||||||
public object Obj { get => Value; set => Value = (T)value; }
|
|
||||||
|
public T Value
|
||||||
|
{
|
||||||
|
get => _value;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
var prev = _value;
|
||||||
|
_value = value;
|
||||||
|
OnValueChanged?.Invoke(prev,value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private T _value = typeof(T) == typeof(string) ? string.Empty.As<T>() : Activator.CreateInstance<T>();
|
||||||
|
public object Obj
|
||||||
|
{
|
||||||
|
get => Value;
|
||||||
|
set => Value = (T)value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PropertyWrapper<T> : IWrapper<T>
|
public class PropertyWrapper<T> : IWrapper<T>
|
||||||
{
|
{
|
||||||
private readonly PropertyInfo _field;
|
private readonly PropertyInfo _field;
|
||||||
private readonly object _target;
|
private readonly object _target;
|
||||||
public event Action<T, T> OnValueChanged;
|
public Action<T, T> OnValueChanged { get; set; }
|
||||||
public PropertyWrapper(PropertyInfo field, object target)
|
public PropertyWrapper(PropertyInfo field, object target)
|
||||||
{
|
{
|
||||||
_field = field;
|
_field = field;
|
||||||
|
@ -40,8 +58,8 @@ namespace BITKit
|
||||||
|
|
||||||
public object Obj
|
public object Obj
|
||||||
{
|
{
|
||||||
get => _field.GetValue(_target);
|
get => Value;
|
||||||
set => _field.SetValue(_target, value);
|
set => Value = (T)value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class FieldWrapper<T> : IWrapper<T>
|
public class FieldWrapper<T> : IWrapper<T>
|
||||||
|
@ -53,16 +71,23 @@ namespace BITKit
|
||||||
_field = field;
|
_field = field;
|
||||||
_target = target ?? throw new ArgumentNullException(nameof(target));
|
_target = target ?? throw new ArgumentNullException(nameof(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Action<T, T> OnValueChanged { get; set; }
|
||||||
|
|
||||||
public T Value
|
public T Value
|
||||||
{
|
{
|
||||||
get => (T)_field.GetValue(_target);
|
get => (T)_field.GetValue(_target);
|
||||||
set => _field.SetValue(_target, value);
|
set
|
||||||
|
{
|
||||||
|
OnValueChanged?.Invoke(Value, value);
|
||||||
|
_field.SetValue(_target, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public object Obj
|
public object Obj
|
||||||
{
|
{
|
||||||
get => _field.GetValue(_target);
|
get => Value;
|
||||||
set => _field.SetValue(_target, value);
|
set => Value = (T)value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class FuncWrapper<T> : IWrapper<T>
|
public class FuncWrapper<T> : IWrapper<T>
|
||||||
|
@ -74,6 +99,9 @@ namespace BITKit
|
||||||
_get = get;
|
_get = get;
|
||||||
_set = set;
|
_set = set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Action<T, T> OnValueChanged { get; set; }
|
||||||
|
|
||||||
public T Value
|
public T Value
|
||||||
{
|
{
|
||||||
get => _get();
|
get => _get();
|
||||||
|
@ -82,8 +110,8 @@ namespace BITKit
|
||||||
|
|
||||||
public object Obj
|
public object Obj
|
||||||
{
|
{
|
||||||
get => _get();
|
get => Value;
|
||||||
set => _set((T)value);
|
set => Value = (T)value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue