using System; using Robust.Shared.Player; using Robust.Shared.Serialization; namespace Robust.Shared.GameObjects { public interface IEntityEventSubscriber { } public delegate void EntityEventHandler(T ev); public delegate void EntityEventRefHandler(ref T ev); public delegate void EntitySessionEventHandler(T msg, EntitySessionEventArgs args); [Serializable, NetSerializable] public abstract class EntityEventArgs { } [Serializable, NetSerializable] public abstract class HandledEntityEventArgs : EntityEventArgs { /// /// If this message has already been "handled" by a previous system. /// public bool Handled { get; set; } } [Serializable, NetSerializable] public abstract class CancellableEntityEventArgs : EntityEventArgs { /// /// Whether this even has been cancelled. /// public bool Cancelled { get; private set; } /// /// Cancels the event. /// public void Cancel() => Cancelled = true; /// /// Uncancels the event. Don't call this unless you know what you're doing. /// public void Uncancel() => Cancelled = false; } public readonly struct EntitySessionEventArgs { public EntitySessionEventArgs(ICommonSession senderSession) { SenderSession = senderSession; } public ICommonSession SenderSession { get; } } internal readonly struct EntitySessionMessage { public EntitySessionMessage(EntitySessionEventArgs eventArgs, T message) { EventArgs = eventArgs; Message = message; } public EntitySessionEventArgs EventArgs { get; } public T Message { get; } public void Deconstruct(out EntitySessionEventArgs eventArgs, out T message) { eventArgs = EventArgs; message = Message; } } }