namespace DxMessaging.Core.Messages { using System; /// /// Used to specify general-purposes messages that are meant to be sent to a specific entity. /// /// /// TargetedMessages should be thought of as commands. Things like "EntityX, pick up this rock" or /// "EntityX, you successfully completed an active reload". /// Inheritance should be completely flat. Ie, TargetedMessages should be the direct parent of every implementer. /// public interface ITargetedMessage : IMessage { } /// /// No-alloc TargetedMessages. Derive from this type to not have your messages boxed (if they are structs). /// /// public readonly MyCoolStruct : ITargetedMessage{MyCoolStruct} /// /// /// Concrete type of the derived. Should be the derived type and nothing else. public interface ITargetedMessage : ITargetedMessage where T : ITargetedMessage { Type IMessage.MessageType => typeof(T); } }