blob: 49e7e91daa1d7e4b2cd222b7acebec5a000f092b [file] [log] [blame] [edit]
#include <string>
#include <cstring>
#include <memory>
#include <cstdlib>
#include "timer-test.hpp"
/*
TODO: This example is really dry, how can we make it awesome?
Without making it so complicated that it fails to elucidate its point.
*/
using namespace blit;
const uint16_t screen_width = 320;
const uint16_t screen_height = 240;
blit::Timer timer_count;
uint32_t count;
void timer_count_update(blit::Timer &t){
count++;
// Instead of using loops we're going to stop the timer in our callback
// In this case it will count to ten and then stop.
// But you could depend upon any condition to stop the timer.
if(count == 10) {
t.stop();
}
}
void init() {
blit::set_screen_mode(blit::ScreenMode::hires);
// Timers must be initialized
// In this case we want our timer to call the `timer_count_update` function
// very 1000ms, or 1 second. We also want it to loop indefinitely.
// We can pass -1 to loop indefinitely, or just nothing at all since -1
// is the default.
timer_count.init(timer_count_update, 1000, -1);
// Next we probably want to start our timer!
timer_count.start();
}
int tick_count = 0;
void render(uint32_t time_ms) {
screen.pen = Pen(20, 30, 40);
screen.clear();
// Fancy title bar, nothing to see here.
screen.pen = Pen(255, 255, 255);
screen.rectangle(Rect(0, 0, 320, 14));
screen.pen = Pen(0, 0, 0);
screen.text("Timer Test", minimal_font, Point(5, 4));
// Since our timer callback is updating our `count` variable
// we can just display it on the screen and watch it tick up!
screen.pen = Pen(255, 255, 255);
screen.text("Count: " + std::to_string(count), minimal_font, Point(120, 100));
// `is_running()` is a handy shorthand for checking the timer state
if(timer_count.is_running()) {
screen.text("Timer running...", minimal_font, Point(120, 110));
} else {
screen.text("Timer stopped!", minimal_font, Point(120, 110));
screen.text("Press A to restart.", minimal_font, Point(120, 120));
}
}
void update(uint32_t time_ms) {
// `is_stopped()` works too!
if (blit::buttons & blit::Button::A && timer_count.is_stopped()) {
count = 0;
timer_count.start();
}
}