using System;
using System.Reactive.Subjects;
using UnityEngine;
namespace Chernobyl.Unity.Event
{
///
/// An asset that acts as a source of events.
///
public interface IEventSource
{
///
/// The event to be triggered.
///
IObservable Observable { get; }
}
///
/// Interface for subject of events.
///
public interface IEventSubject
{
///
/// The subject of the events.
///
ISubject Subject { get; }
}
///
/// An asset that acts as a source of events.
///
public abstract class BaseEventSource : ScriptableObject, IEventSource, IEventSubject
{
///
protected BaseEventSource() : this(new Subject()) {}
///
protected BaseEventSource(ISubject subject) => Subject = subject;
///
/// The event to be triggered.
///
public IObservable Observable => Subject;
///
/// The subject of the events.
///
public ISubject Subject { get; }
}
}