state-sequencer.cpp 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "state-sequencer.h"
  2. #include "stdio.h"
  3. TickSequencer::TickSequencer() {
  4. }
  5. TickSequencer::~TickSequencer() {
  6. }
  7. void TickSequencer::tick() {
  8. if(tick_count == list_it->first) {
  9. tick_count = 0;
  10. list_it++;
  11. if(list_it == list.end()) {
  12. list_it = list.begin();
  13. }
  14. }
  15. list_it->second();
  16. tick_count++;
  17. }
  18. void TickSequencer::reset() {
  19. list_it = list.begin();
  20. tick_count = 0;
  21. }
  22. void TickSequencer::clear() {
  23. list.clear();
  24. reset();
  25. }
  26. void TickSequencer::do_every_tick(uint32_t tick_count, std::function<void(void)> fn) {
  27. list.push_back(std::make_pair(tick_count, fn));
  28. reset();
  29. }
  30. void TickSequencer::do_after_tick(uint32_t tick_count, std::function<void(void)> fn) {
  31. if(tick_count > 1) {
  32. list.push_back(
  33. std::make_pair(tick_count - 1, std::bind(&TickSequencer::do_nothing, this)));
  34. }
  35. list.push_back(std::make_pair(1, fn));
  36. reset();
  37. }
  38. void TickSequencer::do_nothing() {
  39. }