59
src/main.c
59
src/main.c
@@ -61,7 +61,7 @@ timing_timer simple_enemy_spawn_timer = {0, 500, 0}; // timer to spawn a new s
|
|||||||
timing_timer complex_enemy_spawn_timer = {0, 2000, 0}; // timer to spawn a new complex 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
|
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
|
SceBool color_switch_value; // boolean to track if the title text should be colored or not
|
||||||
|
|
||||||
ENEMY_SPRITE enemies[ENEMY_MAX_AMOUNT];
|
ENEMY_SPRITE enemies[ENEMY_MAX_AMOUNT];
|
||||||
uint32_t enemy_count;
|
uint32_t enemy_count;
|
||||||
@@ -70,6 +70,10 @@ int score;
|
|||||||
|
|
||||||
float player_x, player_y, radius;
|
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.
|
* @brief should be called when an unhandlable exception or error occurs. Triggers coredump.
|
||||||
*
|
*
|
||||||
@@ -97,7 +101,13 @@ void init_variables()
|
|||||||
player_y = 500;
|
player_y = 500;
|
||||||
radius = 5.0;
|
radius = 5.0;
|
||||||
score = 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)
|
if (start_color_switch_timer.elapsed)
|
||||||
{
|
{
|
||||||
start_color_set = !start_color_set;
|
color_switch_value = !color_switch_value;
|
||||||
start_color_switch_timer.elapsed = 0;
|
start_color_switch_timer.elapsed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,6 +370,8 @@ void update_start()
|
|||||||
{
|
{
|
||||||
current_state = MENU;
|
current_state = MENU;
|
||||||
menu_switch_input_delay_timer.elapsed = 0;
|
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_update_timer(&menu_switch_input_delay_timer, deltaTime);
|
||||||
timing_check_timer_elapsed(&menu_switch_input_delay_timer);
|
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 (cross_pressed)
|
||||||
if (menu_switch_input_delay_timer.elapsed)
|
if (menu_switch_input_delay_timer.elapsed)
|
||||||
|
{
|
||||||
current_state = GAME;
|
current_state = GAME;
|
||||||
|
player_x = SCREEN_WIDTH / 2;
|
||||||
|
player_y = 500;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_game()
|
void update_game()
|
||||||
@@ -541,7 +570,7 @@ void draw_start()
|
|||||||
{
|
{
|
||||||
unsigned int text_color;
|
unsigned int text_color;
|
||||||
unsigned int background_color;
|
unsigned int background_color;
|
||||||
if (start_color_set == SCE_TRUE)
|
if (color_switch_value == SCE_TRUE)
|
||||||
{
|
{
|
||||||
text_color = COLOR_BLACK;
|
text_color = COLOR_BLACK;
|
||||||
background_color = COLOR_CYAN;
|
background_color = COLOR_CYAN;
|
||||||
@@ -551,22 +580,31 @@ void draw_start()
|
|||||||
background_color = COLOR_BLACK;
|
background_color = COLOR_BLACK;
|
||||||
text_color = COLOR_CYAN;
|
text_color = COLOR_CYAN;
|
||||||
}
|
}
|
||||||
drawing_draw_window_filled(SCREEN_WIDTH/2 - 300 / 2, 50, 300, 100, "Game Title", pgf, text_color);
|
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, background_color, 2.0, "Cybershot");
|
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");
|
vita2d_pgf_draw_text(pgf, 622, 457, COLOR_BLACK, 1.2f, "Press X to start");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void draw_menu()
|
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()
|
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++)
|
for (int i = 0; i < 255; i++)
|
||||||
{
|
{
|
||||||
@@ -585,7 +623,6 @@ void draw_game()
|
|||||||
sprintf(score_text, "%07d", score);
|
sprintf(score_text, "%07d", score);
|
||||||
vita2d_pgf_draw_text(pgf, 42, 97, COLOR_BLACK, 1.2f, score_text);
|
vita2d_pgf_draw_text(pgf, 42, 97, COLOR_BLACK, 1.2f, score_text);
|
||||||
|
|
||||||
|
|
||||||
char title_text[40];
|
char title_text[40];
|
||||||
sprintf(title_text, "CYBERSHOT_PSVITA - FPS: %d", timing_get_fps(deltaTime));
|
sprintf(title_text, "CYBERSHOT_PSVITA - FPS: %d", timing_get_fps(deltaTime));
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
// 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));
|
vita2d_draw_line(x, y + random_size, x + 1.0 * scale, y, RGBA8(255, 0, 0, 200));
|
||||||
|
|
||||||
//left side
|
//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 + 2.0 * scale, y, color);
|
||||||
vita2d_draw_line(x - 2.0 * scale, y, x - 1.0 * scale, y - 2.0 * scale, SHIP_PRIMARY_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, SHIP_PRIMARY_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, SHIP_PRIMARY_COLOR);
|
vita2d_draw_line(x - 1.0 * scale, y - 4.0 * scale, x, y - 5.0 * scale, color);
|
||||||
|
|
||||||
//right side
|
//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, 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, SHIP_PRIMARY_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, SHIP_PRIMARY_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)
|
void sprites_draw_enemy(ENEMY_SPRITE *enemy)
|
||||||
|
|||||||
@@ -98,8 +98,9 @@ void sprites_draw_bullet(BULLET *bullet);
|
|||||||
* @param x the x position of the player
|
* @param x the x position of the player
|
||||||
* @param y the y position of the player
|
* @param y the y position of the player
|
||||||
* @param scale the scale of the ship
|
* @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
|
* @brief draws a smoke particle
|
||||||
|
|||||||
@@ -62,3 +62,45 @@ 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);
|
drawing_draw_window_clear(x, y, width, heigth, title_text, pgf);
|
||||||
vita2d_draw_rectangle(x + 10, y + 30, width - 20, heigth - 40, color);
|
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++)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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);
|
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
|
#endif // !DRAWING_H
|
||||||
|
|||||||
Reference in New Issue
Block a user