#pragma once
#include "stdint.h"
#include <list>
#include <functional>

class TickSequencer {
public:
    TickSequencer();
    ~TickSequencer();

    void tick();
    void reset();
    void clear();

    void do_every_tick(uint32_t tick_count, std::function<void(void)> fn);
    void do_after_tick(uint32_t tick_count, std::function<void(void)> fn);

private:
    std::list<std::pair<uint32_t, std::function<void(void)> > > list;
    std::list<std::pair<uint32_t, std::function<void(void)> > >::iterator list_it;

    uint32_t tick_count;

    void do_nothing();
};