diff --git a/src/main.c b/src/main.c index cb279c5..f831629 100644 --- a/src/main.c +++ b/src/main.c @@ -60,8 +60,8 @@ timing_timer score_timer = {0, 100, 0}; // timer to update score timing_timer simple_enemy_spawn_timer = {0, 500, 0}; // timer to spawn a new simple enemy timing_timer complex_enemy_spawn_timer = {0, 2000, 0}; // timer to spawn a new complex enemy -timing_timer start_color_switch_timer = {0, 500, 0}; // timer to switch color on the start menu -SceBool start_color_set; // boolean to track if the title text should be colored or not +timing_timer start_color_switch_timer = {0, 500, 0}; // timer to switch color on the start menu +SceBool color_switch_value; // boolean to track if the title text should be colored or not ENEMY_SPRITE enemies[ENEMY_MAX_AMOUNT]; uint32_t enemy_count; @@ -70,6 +70,10 @@ int score; float player_x, player_y, radius; +uint8_t ship_color_select_colors[3] = {255, 0, 255}; // colors to select ship +uint8_t menu_background_color[3] = {0, 255, 255}; +char menu_background_color_index; // 1 or -1, is used to cycle between the colors of the menu + /** * @brief should be called when an unhandlable exception or error occurs. Triggers coredump. * @@ -97,7 +101,13 @@ void init_variables() player_y = 500; radius = 5.0; score = 0; - start_color_set = SCE_FALSE; + color_switch_value = SCE_FALSE; + ship_color_select_colors[0] = 0; + ship_color_select_colors[1] = 255; + ship_color_select_colors[2] = 255; + menu_background_color[0] = 0; + menu_background_color[1] = 255; + menu_background_color_index = 1; } // ################################################################ @@ -351,7 +361,7 @@ void update_start() if (start_color_switch_timer.elapsed) { - start_color_set = !start_color_set; + color_switch_value = !color_switch_value; start_color_switch_timer.elapsed = 0; } @@ -360,6 +370,8 @@ void update_start() { current_state = MENU; menu_switch_input_delay_timer.elapsed = 0; + player_x = 700; + player_y = 300; } } @@ -367,10 +379,27 @@ void update_menu() { timing_update_timer(&menu_switch_input_delay_timer, deltaTime); timing_check_timer_elapsed(&menu_switch_input_delay_timer); + if (menu_background_color[0] == 254 || menu_background_color[0] == 1) + { + menu_background_color[0] += menu_background_color_index; + menu_background_color[1] -= menu_background_color_index; + } + else + { + menu_background_color[0] += menu_background_color_index * 2; + menu_background_color[1] -= menu_background_color_index * 2; + } + + if (menu_background_color[0] == 0 || menu_background_color[1] == 0) + menu_background_color_index = -menu_background_color_index; if (cross_pressed) if (menu_switch_input_delay_timer.elapsed) + { current_state = GAME; + player_x = SCREEN_WIDTH / 2; + player_y = 500; + } } void update_game() @@ -541,7 +570,7 @@ void draw_start() { unsigned int text_color; unsigned int background_color; - if (start_color_set == SCE_TRUE) + if (color_switch_value == SCE_TRUE) { text_color = COLOR_BLACK; background_color = COLOR_CYAN; @@ -551,22 +580,31 @@ void draw_start() background_color = COLOR_BLACK; text_color = COLOR_CYAN; } - drawing_draw_window_filled(SCREEN_WIDTH/2 - 300 / 2, 50, 300, 100, "Game Title", pgf, text_color); - vita2d_pgf_draw_text(pgf, SCREEN_WIDTH/2 - 300 / 2 + 47, 50 + 70, background_color, 2.0, "Cybershot"); + drawing_draw_window_filled(SCREEN_WIDTH / 2 - 300 / 2, 50, 300, 100, "Game Title", pgf, background_color); + vita2d_pgf_draw_text(pgf, SCREEN_WIDTH / 2 - 300 / 2 + 47, 50 + 70, text_color, 2.0, "Cybershot"); - drawing_draw_window_filled(600, 400, 226, 80, "Message", pgf, SECONDARY_BORDER_COLOR); + drawing_draw_window_filled(600, 400, 226, 80, "Message", pgf, SECONDARY_BORDER_COLOR); // width: 28 pixels for each character vita2d_pgf_draw_text(pgf, 622, 457, COLOR_BLACK, 1.2f, "Press X to start"); - } void draw_menu() { - vita2d_pvf_draw_text(pvf, 700, 80, RGBA8(0, 255, 0, 255), 1.0f, "menu sletjes"); + drawing_draw_window_filled(SCREEN_WIDTH / 2 - 212 / 2, 50, 212, 100, "Window Title", pgf, RGBA8(menu_background_color[0], menu_background_color[1], menu_background_color[2], 255)); + vita2d_pgf_draw_text(pgf, SCREEN_WIDTH / 2 - 212 / 2 + 47, 50 + 70, COLOR_BLACK, 2.0, "Menu"); + drawing_draw_window_filled(600, 400, 226, 80, "Message", pgf, SECONDARY_BORDER_COLOR); // width: 28 pixels for each character + vita2d_pgf_draw_text(pgf, 622, 457, COLOR_BLACK, 1.2f, "Press X to start"); + drawing_draw_window_filled(100, 200, 356, 120, "WIP", pgf, RGBA8(255, 0, 0, 255)); // width: 28 pixels for each character + vita2d_pgf_draw_text(pgf, 122, 257, COLOR_BLACK, 1.2f, "Menu will be\nadded later"); + + //draw warning triangle + drawing_draw_triangle(320, 240, 280, 300, 360, 300, 3, COLOR_BLACK); + drawing_draw_vline(320-1.5, 255, 30, 6, COLOR_BLACK); + vita2d_draw_rectangle(320-1.5, 290, 6, 6, COLOR_BLACK); } void draw_game() { - sprites_draw_player(player_x, player_y, PLAYER_SCALE); + sprites_draw_player(player_x, player_y, PLAYER_SCALE, RGBA8(ship_color_select_colors[0], ship_color_select_colors[1], ship_color_select_colors[2], 255)); for (int i = 0; i < 255; i++) { @@ -585,7 +623,6 @@ void draw_game() sprintf(score_text, "%07d", score); vita2d_pgf_draw_text(pgf, 42, 97, COLOR_BLACK, 1.2f, score_text); - char title_text[40]; sprintf(title_text, "CYBERSHOT_PSVITA - FPS: %d", timing_get_fps(deltaTime)); diff --git a/src/sprites/sprites.c b/src/sprites/sprites.c index 6f6b91d..9931f84 100644 --- a/src/sprites/sprites.c +++ b/src/sprites/sprites.c @@ -20,7 +20,7 @@ void sprites_draw_smoke_circle(SMOKE_PARTICLE *smoke_particle) } } -void sprites_draw_player(float x, float y, float scale) +void sprites_draw_player(float x, float y, float scale,unsigned int color) { // bounding box: x -/+ 2.0 * scale, y - 5.0 * scale @@ -30,15 +30,15 @@ void sprites_draw_player(float x, float y, float scale) vita2d_draw_line(x, y + random_size, x + 1.0 * scale, y, RGBA8(255, 0, 0, 200)); //left side - vita2d_draw_line(x - 2.0 * scale, y, x + 2.0 * scale, y, SHIP_PRIMARY_COLOR); - vita2d_draw_line(x - 2.0 * scale, y, x - 1.0 * scale, y - 2.0 * scale, SHIP_PRIMARY_COLOR); - vita2d_draw_line(x - 1.0 * scale, y - 2.0 * scale, x - 1.0 * scale, y - 4.0 * scale, SHIP_PRIMARY_COLOR); - vita2d_draw_line(x - 1.0 * scale, y - 4.0 * scale, x, y - 5.0 * scale, SHIP_PRIMARY_COLOR); + vita2d_draw_line(x - 2.0 * scale, y, x + 2.0 * scale, y, color); + vita2d_draw_line(x - 2.0 * scale, y, x - 1.0 * scale, y - 2.0 * scale, color); + vita2d_draw_line(x - 1.0 * scale, y - 2.0 * scale, x - 1.0 * scale, y - 4.0 * scale, color); + vita2d_draw_line(x - 1.0 * scale, y - 4.0 * scale, x, y - 5.0 * scale, color); //right side - vita2d_draw_line(x, y - 5.0 * scale, x + 1.0 * scale, y - 4.0 * scale, SHIP_PRIMARY_COLOR); - vita2d_draw_line(x + 1.0 * scale, y - 4.0 * scale, x + 1.0 * scale, y - 2.0 * scale, SHIP_PRIMARY_COLOR); - vita2d_draw_line(x + 1.0 * scale, y - 2.0 * scale, x + 2.0 * scale, y, SHIP_PRIMARY_COLOR); + vita2d_draw_line(x, y - 5.0 * scale, x + 1.0 * scale, y - 4.0 * scale, color); + vita2d_draw_line(x + 1.0 * scale, y - 4.0 * scale, x + 1.0 * scale, y - 2.0 * scale, color); + vita2d_draw_line(x + 1.0 * scale, y - 2.0 * scale, x + 2.0 * scale, y, color); } void sprites_draw_enemy(ENEMY_SPRITE *enemy) diff --git a/src/sprites/sprites.h b/src/sprites/sprites.h index df0d2a0..7772652 100644 --- a/src/sprites/sprites.h +++ b/src/sprites/sprites.h @@ -98,8 +98,9 @@ void sprites_draw_bullet(BULLET *bullet); * @param x the x position of the player * @param y the y position of the player * @param scale the scale of the ship + * @param color the color of the ship (rgb array) */ -void sprites_draw_player(float x, float y, float scale); +void sprites_draw_player(float x, float y, float scale, unsigned int color); /** * @brief draws a smoke particle diff --git a/src/toolbox/drawing.c b/src/toolbox/drawing.c index 3b5d356..fd0fd31 100644 --- a/src/toolbox/drawing.c +++ b/src/toolbox/drawing.c @@ -61,4 +61,46 @@ void drawing_draw_window_filled(float x, float y, float width, float heigth, con { drawing_draw_window_clear(x, y, width, heigth, title_text, pgf); vita2d_draw_rectangle(x + 10, y + 30, width - 20, heigth - 40, color); -} \ No newline at end of file +} + +void drawing_draw_triangle(float x0, float y0, float x1, float y1, float x2, float y2, int thiccness, unsigned int color) +{ + for (int i = 0; i < thiccness; i++) + { + vita2d_draw_line(x0, y0 + i, x1, y1 + i, color); + vita2d_draw_line(x1, y1 + i, x2, y2 + i, color); + vita2d_draw_line(x2, y2 + i, x0, y0 + i, color); + } +} + +void drawing_draw_triangle_filled(float x0, float y0, float x1, float y1, float x2, float y2, unsigned int color) +{ + vita2d_draw_line(x0, y0, x1, y1, color); + vita2d_draw_line(x1, y1, x2, y2, color); + vita2d_draw_line(x2, y2, x0, y0, color); + + float x_start = x0; + float y_start = y0; + float x_end = x1; + float y_end = y1; + SceBool start_done = SCE_FALSE; + SceBool end_done = SCE_FALSE; + + //something is not right with y_start + while (start_done == SCE_FALSE && end_done == SCE_FALSE) + { + if (x_start < x2) + x_start += 1.0; + if (y_start < y2) + y_start += 1.0; + if (x_end < x2) + x_end += 1.0; + if (y_end < y2) + y_end += 1.0; + if (x_start >= x2 && y_start >= y2) + start_done = SCE_TRUE; + if (x_end >= x2 && y_end >= x2) + end_done = SCE_TRUE; + vita2d_draw_line(x_start, y_start, x_end, y_end, color); + } +} diff --git a/src/toolbox/drawing.h b/src/toolbox/drawing.h index 30bdec6..258eea7 100644 --- a/src/toolbox/drawing.h +++ b/src/toolbox/drawing.h @@ -79,4 +79,31 @@ void drawing_draw_window_clear(float x, float y, float width, float heigth, cons */ void drawing_draw_window_filled(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf, unsigned int color); +/** + * @brief draws an open triangle with the given parameters + * + * @param x0 the top x position + * @param y0 the top y position + * @param x1 the left x position + * @param y1 the left y position + * @param x2 the right x position + * @param y2 the right y position + * @param thiccness the width of the line of the triangle + * @param color the color to draw the triangle with + */ +void drawing_draw_triangle(float x0, float y0, float x1, float y1, float x2, float y2, int thiccness, unsigned int color); + +/** + * @brief draws a filled triangle + * + * @param x0 the top x position + * @param y0 the top y position + * @param x1 the left x position + * @param y1 the left y position + * @param x2 the right x position + * @param y2 the right y position + * @param color the color of the triangle + */ +void drawing_draw_triangle_filled(float x0, float y0, float x1, float y1, float x2, float y2, unsigned int color); + #endif // !DRAWING_H