71 lines
1.8 KiB
C++
Raw Normal View History

/*
* ------------------------------------------------------------
* | Made by RocketGod |
* | Find me at https://betaskynet.com |
* | Argh matey! |
* ------------------------------------------------------------
*/
#include "ui_snake.hpp"
namespace ui::external_app::snake {
#include "snake.cpp"
SnakeView::SnakeView(NavigationView& nav)
: nav_{nav} {
add_children({&dummy});
game_timer.attach(&game_timer_check, 1.0 / 5.0);
}
void SnakeView::on_show() {
}
void SnakeView::paint(Painter& painter) {
(void)painter;
if (!initialized) {
initialized = true;
std::srand(LPC_RTC->CTIME0);
init_game();
}
}
void SnakeView::frame_sync() {
check_game_timer();
set_dirty();
}
bool SnakeView::on_key(const KeyEvent key) {
if (key == KeyEvent::Select) {
if (game_state == STATE_MENU || game_state == STATE_GAME_OVER) {
game_state = STATE_PLAYING;
init_game();
}
} else if (game_state == STATE_PLAYING) {
if (key == KeyEvent::Left) {
if (snake_dx == 0) {
snake_dx = -1;
snake_dy = 0;
}
} else if (key == KeyEvent::Right) {
if (snake_dx == 0) {
snake_dx = 1;
snake_dy = 0;
}
} else if (key == KeyEvent::Up) {
if (snake_dy == 0) {
snake_dx = 0;
snake_dy = -1;
}
} else if (key == KeyEvent::Down) {
if (snake_dy == 0) {
snake_dx = 0;
snake_dy = 1;
}
}
}
set_dirty();
return true;
}
} // namespace ui::external_app::snake