encompass-cs/encompass-cs/Engines/ComponentMessageEmitter.cs

30 lines
1011 B
C#
Raw Normal View History

2019-07-18 21:02:57 +00:00
using System.Reflection;
namespace Encompass.Engines
{
internal class ComponentMessageEmitter<TComponent> : Engine where TComponent : struct, IComponent
{
public ComponentMessageEmitter() : base()
{
2019-07-19 01:20:38 +00:00
var writesAttribute = GetType().GetCustomAttribute<Sends>(false);
2019-07-18 21:02:57 +00:00
if (writesAttribute != null)
{
2019-07-19 01:20:38 +00:00
writesAttribute.sendTypes.Add(typeof(ComponentMessage<TComponent>));
2019-07-18 21:02:57 +00:00
}
2019-07-19 01:20:38 +00:00
sendTypes.Add(typeof(ComponentMessage<TComponent>));
2019-07-18 21:02:57 +00:00
}
public override void Update(double dt)
{
foreach (var (entity, componentID, component) in ReadComponentsFromWorld<TComponent>())
{
ComponentMessage<TComponent> componentMessage;
componentMessage.entity = entity;
componentMessage.componentID = componentID;
componentMessage.component = component;
EmitMessage(componentMessage);
}
}
}
}