using System;
namespace UniRx
{
///
/// Notify boolean flag.
///
public class BooleanNotifier : IObservable
{
private readonly Subject boolTrigger = new();
private bool boolValue;
///
/// Setup initial flag.
///
public BooleanNotifier(bool initialValue = false)
{
Value = initialValue;
}
/// Current flag value
public bool Value
{
get => boolValue;
set
{
boolValue = value;
boolTrigger.OnNext(value);
}
}
///
/// Subscribe observer.
///
public IDisposable Subscribe(IObserver observer)
{
return boolTrigger.Subscribe(observer);
}
///
/// Set and raise true if current value isn't true.
///
public void TurnOn()
{
if (!Value) Value = true;
}
///
/// Set and raise false if current value isn't false.
///
public void TurnOff()
{
if (Value) Value = false;
}
///
/// Set and raise reverse value.
///
public void SwitchValue()
{
Value = !Value;
}
}
}