2020-12-03 14:16:36 +00:00
# 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 ;
2020-12-03 15:29:22 +00:00
Paddle : : Paddle ( Pinetime : : Applications : : DisplayApp * app , Pinetime : : Components : : LittleVgl & lvgl ) : Screen ( app ) , lvgl { lvgl } {
2020-12-03 14:16:36 +00:00
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 ;
}