using System.Collections.Generic; namespace Encompass { internal class MessageManager { private readonly TimeManager timeManager; private readonly MessageStore messageStore = new MessageStore(); public MessageManager(TimeManager timeManager) { this.timeManager = timeManager; } internal void AddMessage(TMessage message) where TMessage : struct, IMessage { messageStore.AddMessage(message); } internal void AddMessage(TMessage message, double time) where TMessage : struct, IMessage { messageStore.AddMessage(message, time); } internal void AddMessageIgnoringTimeDilation(TMessage message, double time) where TMessage : struct, IMessage { messageStore.AddMessageIgnoringTimeDilation(message, time); } internal void ClearMessages() { messageStore.ClearAll(); } internal void ProcessDelayedMessages(double dt) { messageStore.ProcessDelayedMessages(dt * timeManager.TimeDilationFactor, dt); } internal IEnumerable GetMessagesByType() where TMessage : struct, IMessage { return messageStore.All(); } internal bool Any() where TMessage : struct, IMessage { return messageStore.Any(); } internal TMessage First() where TMessage : struct, IMessage { return messageStore.First(); } internal IEnumerable WithEntity(int entityID) where TMessage : struct, IMessage, IHasEntity { return messageStore.WithEntity(entityID); } internal TMessage WithEntitySingular(int entityID) where TMessage : struct, IMessage, IHasEntity { var enumerator = messageStore.WithEntity(entityID).GetEnumerator(); enumerator.MoveNext(); return enumerator.Current; } internal bool SomeWithEntity(int entityID) where TMessage : struct, IMessage, IHasEntity { return messageStore.SomeWithEntity(entityID); } } }