diff options
Diffstat (limited to 'src/displayapp/screens/Paddle.cpp')
-rw-r--r-- | src/displayapp/screens/Paddle.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp new file mode 100644 index 00000000..94833adc --- /dev/null +++ b/src/displayapp/screens/Paddle.cpp @@ -0,0 +1,100 @@ +#include "Paddle.h" +#include "../DisplayApp.h" +#include "../LittleVgl.h" + +using namespace Pinetime::Applications::Screens; +extern lv_font_t jetbrains_mono_extrabold_compressed; +extern lv_font_t jetbrains_mono_bold_20; + +Paddle::Paddle(Pinetime::Applications::DisplayApp *app, Pinetime::Components::LittleVgl& lvgl) : Screen(app){ + app->SetTouchMode(DisplayApp::TouchModes::Polling); + + points = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(points, "0"); + lv_obj_align(points, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 0); + + paddle.header.always_zero = 0; + paddle.header.w = 4; + paddle.header.h = 60; + paddle.data_size = 60 * 4 * LV_COLOR_SIZE / 8; + paddle.header.cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED; + paddle.data = paddle_map; + paddle_image = lv_img_create(lv_scr_act(), NULL); + lv_img_set_src(paddle_image, &paddle); + + ball.header.always_zero = 0; + ball.header.w = 24; + ball.header.h = 24; + ball.data_size = 24 * 24 * LV_COLOR_SIZE / 8; + ball.header.cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED; + ball.data = ball_map; + ball_image = lv_img_create(lv_scr_act(), NULL); + lv_img_set_src(ball_image, &ball); +} + +Paddle::~Paddle() { + // Reset the touchmode + app->SetTouchMode(DisplayApp::TouchModes::Gestures); + lv_obj_clean(lv_scr_act()); +} + +bool Paddle::Refresh() { + + if((counter++ % 5) == 0){ + + counter = 0; + + ball_x += dx; + ball_y += dy; + + lv_obj_set_pos(ball_image, ball_x, ball_y); + + //checks if it has touched the sides (floor and ceiling) + if(ball_y <= 0 || ball_y >= 215){ + dy *= -1; + } + + //checks if it has touched the side (left side) + if(ball_x >= 215){ + dx *= -1; + } + + //checks if it is in the position of the paddle + if(ball_y >= (y_paddle_bottom + 16) && ball_y <= (y_paddle_top - 8)){ + if(ball_x >= 0 && ball_x < 4){ + lv_obj_set_pos(ball_image, 5, ball_y); + dx *= -1; + score++; + } + } + + //checks if it has gone behind the paddle + else if(ball_x <= -40){ + ball_x = 107; + ball_y = 107; + score = 0; + } + sprintf(Val, "%d", score); + lv_label_set_text(points, Val); + } + return running; +} + +bool Paddle::OnButtonPushed() { + running = false; + return true; +} + + +bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return true; +} + +bool Paddle::OnTouchEvent(uint16_t x, uint16_t y) { + + lv_obj_set_pos(paddle_image, 0, y - 30); // sets the center paddle pos. (30px offset) with the the y_coordinate of the finger and defaults the x_coordinate to 0 + y_paddle_top = y - 30; // refreshes the upper extreme of the paddle + y_paddle_bottom = y + 30; // refreshes the lower extreme of the paddle + + return true; +} |