#pragma once

#include <chrono>

struct StopWatch {
  std::chrono::high_resolution_clock::time_point start;
  
  StopWatch() {
    reset();
  }
  
  void reset() {
    start = std::chrono::high_resolution_clock::now();
  }
  
  unsigned long long milli() const {
    std::chrono::high_resolution_clock::time_point stop = std::chrono::high_resolution_clock::now();
    auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);
    return ms.count();
  }
  
  double sec() const {
    std::chrono::high_resolution_clock::time_point stop = std::chrono::high_resolution_clock::now();
    return std::chrono::duration<double>(stop - start).count();
  }
};

struct Every {
  StopWatch watch;
  double interval = 0, last = 0;

  Every( double iInterval ) : interval( iInterval ) {
  }

  bool isTime() {
    double now = watch.sec();
    double diff = now - last;
    bool istime = 0;
    if( diff > interval ) {
      istime = true;
      last = now;
    }
    return istime;
  }
};