using System;
using EcsRx.Entities;
using EcsRx.Groups.Observable;
using EcsRx.Systems;
namespace EcsRx.Plugins.ReactiveSystems.Systems
{
///
/// React To LookupGroup systems are the more common ECS style system,
/// as they batch handle all applicable entities at once. This means
/// you do not react to individual entities and instead react at the
/// group level, be it every frame or time period.
///
///
/// This is the most common use case system, as it aligns with common
/// ECS paradigms, i.e a system which triggers every update and runs
/// on all applicable entities. If you need more control over individual
/// entity reactions etc then look at ReactToEntity/Data systems.
///
public interface IReactToGroupSystem : ISystem
{
///
/// Dictates when the group should be processed
///
/// The observable group to process
/// The observable chain containing the group
///
/// In most use cases you probably want to run this every update/interval
///
IObservable ReactToGroup(IObservableGroup observableGroup);
///
/// The processor for the entity
///
/// The entity to process
void Process(IEntity entity);
}
}