module artemisd.systems.intervalentityprocessingsystem;

import artemisd.aspect;
import artemisd.entity;
import artemisd.systems.intervalentitysystem;
import artemisd.utils.type;
import artemisd.utils.bag;

abstract class IntervalEntityProcessingSystem : IntervalEntitySystem 
{
    mixin TypeDecl;

    public this(Aspect aspect, float interval) 
    {
        super(aspect, interval);
    }

    protected void process(Entity e);

    protected override void processEntities(Bag!Entity entities) 
    {
        for (size_t i = 0, s = entities.size(); s > i; i++) 
        {
            process(entities.get(i));
        }
    }

    protected override bool checkProcessing() 
    {
        return true;
    }
}