2019-06-16 01:55:35 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
namespace Encompass
|
|
|
|
{
|
|
|
|
internal class MessageManager
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
private readonly TimeManager _timeManager;
|
|
|
|
private readonly MessageStore _messageStore = new MessageStore();
|
2019-11-21 22:22:10 +00:00
|
|
|
|
|
|
|
public MessageManager(TimeManager timeManager)
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_timeManager = timeManager;
|
2019-11-21 22:22:10 +00:00
|
|
|
}
|
2019-08-20 02:05:18 +00:00
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal void AddMessage<TMessage>(TMessage message) where TMessage : struct, IMessage
|
2019-06-16 01:55:35 +00:00
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_messageStore.AddMessage(message);
|
2019-06-16 01:55:35 +00:00
|
|
|
}
|
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal void AddMessage<TMessage>(TMessage message, double time) where TMessage : struct, IMessage
|
2019-07-29 05:25:34 +00:00
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_messageStore.AddMessage(message, time);
|
2019-07-29 05:25:34 +00:00
|
|
|
}
|
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal void AddMessageIgnoringTimeDilation<TMessage>(TMessage message, double time) where TMessage : struct, IMessage
|
2019-08-20 02:05:18 +00:00
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_messageStore.AddMessageIgnoringTimeDilation(message, time);
|
2019-07-29 02:17:00 +00:00
|
|
|
}
|
|
|
|
|
2019-06-16 01:55:35 +00:00
|
|
|
internal void ClearMessages()
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_messageStore.ClearAll();
|
2019-06-16 01:55:35 +00:00
|
|
|
}
|
|
|
|
|
2019-08-20 02:05:18 +00:00
|
|
|
internal void ProcessDelayedMessages(double dt)
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
_messageStore.ProcessDelayedMessages(dt * _timeManager.TimeDilationFactor, dt);
|
2019-12-06 20:01:56 +00:00
|
|
|
}
|
2019-11-21 22:22:10 +00:00
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal IEnumerable<TMessage> GetMessagesByType<TMessage>() where TMessage : struct, IMessage
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
return _messageStore.All<TMessage>();
|
2019-12-06 20:01:56 +00:00
|
|
|
}
|
2019-11-21 22:22:10 +00:00
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal bool Any<TMessage>() where TMessage : struct, IMessage
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
return _messageStore.Any<TMessage>();
|
2019-08-20 02:05:18 +00:00
|
|
|
}
|
|
|
|
|
2019-12-06 20:01:56 +00:00
|
|
|
internal TMessage First<TMessage>() where TMessage : struct, IMessage
|
2019-06-16 01:55:35 +00:00
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
return _messageStore.First<TMessage>();
|
2019-06-16 01:55:35 +00:00
|
|
|
}
|
2019-12-30 04:36:23 +00:00
|
|
|
|
|
|
|
internal IEnumerable<TMessage> WithEntity<TMessage>(int entityID) where TMessage : struct, IMessage, IHasEntity
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
return _messageStore.WithEntity<TMessage>(entityID);
|
2019-12-30 04:36:23 +00:00
|
|
|
}
|
2020-01-13 22:59:18 +00:00
|
|
|
|
2020-03-17 02:00:42 +00:00
|
|
|
internal TMessage WithEntitySingular<TMessage>(int entityID) where TMessage : struct, IMessage, IHasEntity
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
var enumerator = _messageStore.WithEntity<TMessage>(entityID).GetEnumerator();
|
2020-03-17 02:00:42 +00:00
|
|
|
enumerator.MoveNext();
|
|
|
|
return enumerator.Current;
|
|
|
|
}
|
|
|
|
|
2020-01-13 22:59:18 +00:00
|
|
|
internal bool SomeWithEntity<TMessage>(int entityID) where TMessage : struct, IMessage, IHasEntity
|
|
|
|
{
|
2020-03-20 07:09:57 +00:00
|
|
|
return _messageStore.SomeWithEntity<TMessage>(entityID);
|
2020-01-13 22:59:18 +00:00
|
|
|
}
|
2019-06-16 01:55:35 +00:00
|
|
|
}
|
|
|
|
}
|