encompass-cs/encompass-cs/MessageManager.cs

72 lines
2.2 KiB
C#
Raw Permalink Normal View History

2020-03-22 20:41:55 +00:00
using System;
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
internal void AddMessage<TMessage>(in TMessage message) where TMessage : struct
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
}
internal void AddMessage<TMessage>(in TMessage message, double time) where TMessage : struct
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
}
internal void AddMessageIgnoringTimeDilation<TMessage>(in TMessage message, double time) where TMessage : struct
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
internal ReadOnlySpan<TMessage> GetMessagesByType<TMessage>() where TMessage : struct
2019-12-06 20:01:56 +00:00
{
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
internal bool Any<TMessage>() where TMessage : struct
2019-12-06 20:01:56 +00:00
{
2020-03-20 07:09:57 +00:00
return _messageStore.Any<TMessage>();
2019-08-20 02:05:18 +00:00
}
internal ref readonly TMessage First<TMessage>() where TMessage : struct
2019-06-16 01:55:35 +00:00
{
2020-03-22 21:21:59 +00:00
return ref _messageStore.First<TMessage>();
2019-06-16 01:55:35 +00:00
}
internal IEnumerable<TMessage> WithEntity<TMessage>(int entityID) where TMessage : struct, IHasEntity
{
2020-03-20 07:09:57 +00:00
return _messageStore.WithEntity<TMessage>(entityID);
}
internal ref readonly TMessage WithEntitySingular<TMessage>(int entityID) where TMessage : struct, IHasEntity
{
2020-03-22 20:53:23 +00:00
return ref _messageStore.FirstWithEntity<TMessage>(entityID);
}
internal bool SomeWithEntity<TMessage>(int entityID) where TMessage : struct, IHasEntity
{
2020-03-20 07:09:57 +00:00
return _messageStore.SomeWithEntity<TMessage>(entityID);
}
2019-06-16 01:55:35 +00:00
}
}