using System; using System.Collections.Generic; namespace Encompass { internal class MessageManager { private readonly TimeManager _timeManager; private readonly MessageStore _messageStore = new MessageStore(); public MessageManager(TimeManager timeManager) { _timeManager = timeManager; } internal void AddMessage(in TMessage message) where TMessage : struct { _messageStore.AddMessage(message); } internal void AddMessage(in TMessage message, double time) where TMessage : struct { _messageStore.AddMessage(message, time); } internal void AddMessageIgnoringTimeDilation(in TMessage message, double time) where TMessage : struct { _messageStore.AddMessageIgnoringTimeDilation(message, time); } internal void ClearMessages() { _messageStore.ClearAll(); } internal void ProcessDelayedMessages(double dt) { _messageStore.ProcessDelayedMessages(dt * _timeManager.TimeDilationFactor, dt); } internal ReadOnlySpan GetMessagesByType() where TMessage : struct { return _messageStore.All(); } internal bool Any() where TMessage : struct { return _messageStore.Any(); } internal ref readonly TMessage First() where TMessage : struct { return ref _messageStore.First(); } internal IEnumerable WithEntity(int entityID) where TMessage : struct, IHasEntity { return _messageStore.WithEntity(entityID); } internal ref readonly TMessage WithEntitySingular(int entityID) where TMessage : struct, IHasEntity { return ref _messageStore.FirstWithEntity(entityID); } internal bool SomeWithEntity(int entityID) where TMessage : struct, IHasEntity { return _messageStore.SomeWithEntity(entityID); } } }