#pragma once

#include <Array.h>
#include <Critical.h>

#include "TickWorker.h"

class TickOrganizer : public virtual Framework::ReferenceCounter
{
private:
    int workerCount;
    TickWorker** workers;
    Framework::Array<Tickable*> tickSources;
    TickQueue* queue;
    Framework::Critical sourceCs;

public:
    TickOrganizer();
    ~TickOrganizer();

    void nextTick();

    void addTickSource(Tickable* zObj);
    void removeTickSource(Tickable* zObj);

    void exitAndWait();
};