68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace Encompass
|
||
|
{
|
||
|
internal class MessageStore
|
||
|
{
|
||
|
private Dictionary<Type, TypedMessageStore> Stores = new Dictionary<Type, TypedMessageStore>(512);
|
||
|
|
||
|
private void RegisterMessageType<TMessage>() where TMessage : struct, IMessage
|
||
|
{
|
||
|
Stores.Add(typeof(TMessage), new TypedMessageStore<TMessage>());
|
||
|
}
|
||
|
|
||
|
private TypedMessageStore<TMessage> Lookup<TMessage>() where TMessage : struct, IMessage
|
||
|
{
|
||
|
if (!Stores.ContainsKey(typeof(TMessage))) { RegisterMessageType<TMessage>(); }
|
||
|
return Stores[typeof(TMessage)] as TypedMessageStore<TMessage>;
|
||
|
}
|
||
|
|
||
|
public void AddMessage<TMessage>(TMessage message) where TMessage : struct, IMessage
|
||
|
{
|
||
|
Lookup<TMessage>().Add(message);
|
||
|
}
|
||
|
|
||
|
public void AddMessage<TMessage>(TMessage message, double time) where TMessage : struct, IMessage
|
||
|
{
|
||
|
Lookup<TMessage>().Add(message, time);
|
||
|
}
|
||
|
|
||
|
public void AddMessageIgnoringTimeDilation<TMessage>(TMessage message, double time) where TMessage : struct, IMessage
|
||
|
{
|
||
|
Lookup<TMessage>().AddIgnoringTimeDilation(message, time);
|
||
|
}
|
||
|
|
||
|
public TMessage First<TMessage>() where TMessage : struct, IMessage
|
||
|
{
|
||
|
return Lookup<TMessage>().First();
|
||
|
}
|
||
|
|
||
|
public IEnumerable<TMessage> All<TMessage>() where TMessage : struct, IMessage
|
||
|
{
|
||
|
return Lookup<TMessage>().All();
|
||
|
}
|
||
|
|
||
|
public bool Any<TMessage>() where TMessage : struct, IMessage
|
||
|
{
|
||
|
return Lookup<TMessage>().Any();
|
||
|
}
|
||
|
|
||
|
public void ProcessDelayedMessages(double dilatedDelta, double realtimeDelta)
|
||
|
{
|
||
|
foreach (var store in Stores.Values)
|
||
|
{
|
||
|
store.ProcessDelayedMessages(dilatedDelta, realtimeDelta);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void ClearAll()
|
||
|
{
|
||
|
foreach (var store in Stores.Values)
|
||
|
{
|
||
|
store.Clear();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|