using System.Reflection;
namespace Encompass
{
///
/// A Spawner is a special type of Engine that runs a Spawn method in response to each Message it receives.
/// Spawners are useful for organizing the building of new Entities in your game.
///
public abstract class Spawner : Engine where TMessage : struct, IMessage
{
protected Spawner() : base()
{
var readsAttribute = GetType().GetCustomAttribute(false);
if (readsAttribute != null)
{
readsAttribute.readTypes.Add(typeof(TMessage));
}
receiveTypes.Add(typeof(TMessage));
}
public override void Update(double dt)
{
foreach (var message in ReadMessages())
{
Spawn(message);
}
}
protected abstract void Spawn(TMessage message);
}
}