[ADD] variables and functions for drawing selectable windows for #2 and #9

This commit is contained in:
SemvdH
2021-11-01 22:53:38 +01:00
parent b5ab811116
commit ff10b371dc
3 changed files with 100 additions and 4 deletions

View File

@@ -25,8 +25,22 @@ Made by Sem van der Hoeven
#define SCREEN_WIDTH 960
#define SIMPLE_ENEMY_MAX_AMOUNT 20
#define ENEMY_MAX_AMOUNT 40
#define BULLET_MARGIN 5.0 // extra hitbox space to make sure bullets hit
#define MENU_SWITCH_DELAY 50 // delay in ms for when a menu screen is switched.
#define BULLET_MARGIN 5.0 // extra hitbox space to make sure bullets hit
#define MENU_SWITCH_DELAY 50 // delay in ms for when a menu screen is switched.
#define MENU_LEFT_RIGHT_NONE 0 // not left or right pressed
#define MENU_LEFT_RIGHT_LEFT 1 // left pressed
#define MENU_LEFT_RIGHT_RIGHT 2 // right pressed
/*
menu windows:
|--------| |------------| |-----|
|tutorial| |color select| |start|
|--------| |------------| |-----|
*/
#define MENU_WINDOW_TUTORIAL 0
#define MENU_WINDOW_COLOR_SELECT 1
#define MENU_WINDOW_START 2
typedef enum
{
@@ -36,6 +50,13 @@ typedef enum
GAMEOVER
} game_state;
typedef enum
{
NONE,
SHIP_SELECT,
HOW_TO_PLAY
} menu_window_state;
uint8_t running, drawing_circle;
game_state current_state = START;
@@ -70,10 +91,15 @@ int score;
float player_x, player_y, radius;
// ----------menu-----------
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
menu_window_state menu_active_window;
uint8_t menu_selected_window; // 0 is how to play, 1 is ship color select, 2 is game
uint8_t menu_left_right_pressed; // 0 is none, 1 is left, 2 is right
/**
* @brief should be called when an unhandlable exception or error occurs. Triggers coredump.
*
@@ -108,6 +134,9 @@ void init_variables()
menu_background_color[0] = 0;
menu_background_color[1] = 255;
menu_background_color_index = 1;
menu_active_window = NONE;
menu_selected_window = 0;
menu_left_right_pressed = 0;
}
// ################################################################
@@ -400,6 +429,25 @@ void update_menu()
player_x = SCREEN_WIDTH / 2;
player_y = 500;
}
if (menu_switch_input_delay_timer.elapsed)
{
if (menu_left_right_pressed == MENU_LEFT_RIGHT_LEFT) // left
{
menu_selected_window -= 1;
if (menu_selected_window < MENU_WINDOW_TUTORIAL)
menu_selected_window = MENU_WINDOW_START;
menu_left_right_pressed = MENU_LEFT_RIGHT_NONE;
}
if (menu_left_right_pressed == MENU_LEFT_RIGHT_RIGHT) // right
{
menu_selected_window += 1;
if (menu_selected_window > MENU_WINDOW_START)
menu_selected_window = MENU_WINDOW_TUTORIAL;
menu_left_right_pressed = MENU_LEFT_RIGHT_NONE;
}
}
}
void update_game()
@@ -544,6 +592,11 @@ void update()
if (pad.buttons & SCE_CTRL_CROSS)
cross_pressed = 1;
if (pad.buttons & SCE_CTRL_LEFT)
menu_left_right_pressed = MENU_LEFT_RIGHT_LEFT;
if (pad.buttons & SCE_CTRL_RIGHT)
menu_left_right_pressed = MENU_LEFT_RIGHT_RIGHT;
ctrl_input_get_leftstick(&pad, &left_stick);
// ctrl_input_get_rightstick(&pad, &right_stick);
@@ -598,6 +651,7 @@ void draw_start()
void draw_menu()
{
// TODO add windows for tutorial and color select, and make "press x to start" window just a "start" window
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

View File

@@ -29,8 +29,18 @@ void drawing_draw_vline(float x0, float y0, float height, int thiccness, unsigne
void drawing_draw_window_clear(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf)
{
drawing_draw_rectangle_open(x, y, width, heigth, 10, MAIN_BORDER_COLOR);
drawing_draw_hline(x, y + 10, width, 20, MAIN_BORDER_COLOR);
drawing_draw_window(x,y,width,heigth,title_text,pgf,MAIN_BORDER_COLOR);
}
void drawing_draw_window_selected(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf)
{
drawing_draw_window(x,y,width,heigth,title_text,pgf,SELECTED_BORDER_COLOR);
}
void drawing_draw_window(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf, unsigned int border_color)
{
drawing_draw_rectangle_open(x, y, width, heigth, 10, border_color);
drawing_draw_hline(x, y + 10, width, 20, border_color);
for (int i = 0; i < 3; i++)
{
int box_x = width - 22 * i - 30 + x;
@@ -63,6 +73,12 @@ void drawing_draw_window_filled(float x, float y, float width, float heigth, con
vita2d_draw_rectangle(x + 10, y + 30, width - 20, heigth - 40, color);
}
void drawing_draw_selected_window_filled(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf, unsigned int color)
{
drawing_draw_window_selected(x, y, width, heigth, title_text, pgf);
vita2d_draw_rectangle(x + 10, y + 30, width - 20, heigth - 40, color);
}
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++)

View File

@@ -3,6 +3,7 @@
#include <vita2d.h>
#define MAIN_BORDER_COLOR (RGBA8(98, 124, 158, 255))
#define SELECTED_BORDER_COLOR (RGBA8(115, 115, 110,255))
#define SECONDARY_BORDER_COLOR (RGBA8(181, 181, 181,255))
#define COLOR_BLACK (RGBA8(0, 0, 0, 255))
#define COLOR_MAGENTA (RGBA8(251, 41, 255,255))
@@ -67,6 +68,18 @@ void drawing_draw_vline(float x0, float y0, float height, int thiccness, unsigne
*/
void drawing_draw_window_clear(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf);
/**
* @brief draws a selected window frame with the specified features
*
* @param x the top left x position of the frame
* @param y the top left y position of the frame
* @param width the width of the frame
* @param heigth the heigth of the frame
* @param title_text the title text to be displayed at the top of the frame
* @param pgf pointer to the pgf font to be used
*/
void drawing_draw_window_selected(float x, float y, float width, float heigth, const char *title_text, vita2d_pgf *pgf);
/**
* @brief draws a window frame with the specified features
*
@@ -80,6 +93,19 @@ 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 a selected window frame with the specified features
*
* @param x the top left x position of the frame
* @param y the top left y position of the frame
* @param width the width of the frame
* @param heigth the heigth of the frame
* @param title_text the title text to be displayed at the top of the frame
* @param pgf pointer to the pgf font to be used
* @param color the color of the background of the window
*/
void drawing_draw_selected_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
*