Skip to content

Commit

Permalink
Add some more polished menus
Browse files Browse the repository at this point in the history
  • Loading branch information
Nightkingale committed May 5, 2024
1 parent 2ffdec5 commit cc6f436
Show file tree
Hide file tree
Showing 2 changed files with 192 additions and 27 deletions.
207 changes: 180 additions & 27 deletions source/graphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

#include <fa-solid-900_ttf.h>
#include <ter-u32b_bdf.h>
#include "input.hpp"
#include "main.hpp"
#include "unlink.hpp"



Expand Down Expand Up @@ -49,6 +51,10 @@ void draw_text(SDL_Renderer* renderer, const char* text, int x, int y, int size,

SDL_Rect rect = {x, y, surface->w, surface->h};
SDL_RenderCopy(renderer, texture, NULL, &rect);

SDL_DestroyTexture(texture);
SDL_FreeSurface(surface);
TTF_CloseFont(font);
}

int get_text_width(const char* text, int size) {
Expand All @@ -69,27 +75,135 @@ int get_text_width(const char* text, int size) {
return width;
}

void draw_menu_screen(SDL_Renderer* renderer) {
void draw_menu_screen(SDL_Renderer* renderer, int selected_menu_item) {
draw_background(renderer, 16, 16, 16, 255);

// Top Bar
draw_rectangle(renderer, 0, 0, 1920, 90, 153, 0, 153, 255);
draw_text(renderer, "Wii U Account Swap", 64, 10, 50);
draw_text(renderer, APP_VERSION, 64 + get_text_width("Wii U Account Swap", 50) + 16, 10, 50, {176, 176, 176, 255});
draw_text(renderer, "Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 50), 10, 50);

// Bottom Bar
draw_rectangle(renderer, 0, 940, 1920, 140, 153, 0, 153, 255);
draw_text(renderer, "Current User: ", 64, 955, 40);
draw_text(renderer, MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 40), 955, 40, {176, 176, 176, 255});
draw_text(renderer, ACCOUNT_FILE.c_str(), 64, 1005, 40);

// Menu options
const char* menu_options[] = {
"Switch to Nintendo Network ID",
"Switch to Pretendo Network ID",
"Backup the Current User",
"Unlink the Network ID"
};
const int NUM_MENU_ITEMS = sizeof(menu_options) / sizeof(menu_options[0]);

for (int i = 0; i < NUM_MENU_ITEMS; i++) {
if (i == selected_menu_item) {
// Draw black rectangle with blue border behind selected option
draw_rectangle(renderer, 64, 135 + i * 120, 1797, 110, 100, 100, 255, 255); // blue border
draw_rectangle(renderer, 69, 140 + i * 120, 1787, 100, 0, 0, 0, 255); // black rectangle
}
draw_text(renderer, menu_options[i], 93, 160 + i * 120, 50);
}

SDL_RenderPresent(renderer);
}

// Draw warning screen for unlinking account
void draw_unlink_menu(SDL_Renderer* renderer) {
draw_background(renderer, 16, 16, 16, 255);

// Top Bar
draw_rectangle(renderer, 0, 0, 1920, 100, 153, 0, 153, 255);
draw_text(renderer, "Wii U Account Swap", 64, 10, 60);
draw_text(renderer, APP_VERSION, 64 + get_text_width("Wii U Account Swap", 60) + 16, 10, 60, {176, 176, 176, 255});
draw_text(renderer, "Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 60), 10, 60);
draw_rectangle(renderer, 0, 0, 1920, 90, 153, 0, 153, 255);
draw_text(renderer, "Wii U Account Swap", 64, 10, 50);
draw_text(renderer, APP_VERSION, 64 + get_text_width("Wii U Account Swap", 50) + 16, 10, 50, {176, 176, 176, 255});
draw_text(renderer, "Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 50), 10, 50);

// Bottom Bar
draw_rectangle(renderer, 0, 880, 1920, 200, 153, 0, 153, 255);
draw_text(renderer, "Current User: ", 64, 880 + 10, 60);
draw_text(renderer, MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 60), 880 + 10, 60, {176, 176, 176, 255});
draw_text(renderer, ACCOUNT_FILE.c_str(), 64, 980, 60);

// Main Menu
draw_text(renderer, "Press (A) to switch to Nintendo Network ID.", 64, 200, 30);
draw_text(renderer, "Press (B) to switch to Pretendo Network ID.", 64, 300, 30);
draw_text(renderer, "Press (+) to backup your current account.", 64, 400, 30);
draw_text(renderer, "Press (-) to unlink your account locally.", 64, 500, 30);
draw_text(renderer, "Press (HOME) to exit.", 64, 700, 30);
draw_rectangle(renderer, 0, 940, 1920, 140, 153, 0, 153, 255);
draw_text(renderer, "Current User: ", 64, 955, 40);
draw_text(renderer, MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 40), 955, 40, {176, 176, 176, 255});
draw_text(renderer, ACCOUNT_FILE.c_str(), 64, 1005, 40);

// Warning text
draw_text(renderer, "Unlinking: Please read the following and confirm!", 64, 160, 50);

draw_text(renderer, "This will unlink your Network ID from this user.", 64, 270, 50);
draw_text(renderer, "You can reattach this account to any user on this Wii U,", 64, 330, 50);
draw_text(renderer, "or attach a new account to this user.", 64, 390, 50);
draw_text(renderer, "However, this unlink will not take place on the server.", 64, 450, 50);
draw_text(renderer, "You won't be able to use this account on any other Wii U.", 64, 510, 50);

// Draw a confirm button with border
draw_rectangle(renderer, 64, 650, 896, 100, 100, 100, 255, 255); // blue border
draw_rectangle(renderer, 69, 655, 886, 90, 0, 0, 0, 255); // black rectangle
draw_text(renderer, "Confirm Unlink", 93, 670, 50);

SDL_RenderPresent(renderer);
}

// Draw backup overwrite warning screen
void draw_backup_menu(SDL_Renderer* renderer) {
draw_background(renderer, 16, 16, 16, 255);

// Top Bar
draw_rectangle(renderer, 0, 0, 1920, 90, 153, 0, 153, 255);
draw_text(renderer, "Wii U Account Swap", 64, 10, 50);
draw_text(renderer, APP_VERSION, 64 + get_text_width("Wii U Account Swap", 50) + 16, 10, 50, {176, 176, 176, 255});
draw_text(renderer, "Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 50), 10, 50);

// Bottom Bar
draw_rectangle(renderer, 0, 940, 1920, 140, 153, 0, 153, 255);
draw_text(renderer, "Current User: ", 64, 955, 40);
draw_text(renderer, MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 40), 955, 40, {176, 176, 176, 255});
draw_text(renderer, ACCOUNT_FILE.c_str(), 64, 1005, 40);

// Warning text
draw_text(renderer, "Backup: Please read the following and confirm!", 64, 160, 50);

draw_text(renderer, "This will backup your current account.dat file.", 64, 270, 50);
draw_text(renderer, "The account.dat may contain sensitive personal", 64, 330, 50);
draw_text(renderer, "information, such as your e-mail address and encrypted", 64, 390, 50);
draw_text(renderer, "cached password (if you have chosen to save it).", 64, 450, 50);
draw_text(renderer, "Please do not share these backups with anyone else!", 64, 510, 50);

// Draw a confirm button with border
draw_rectangle(renderer, 64, 650, 896, 100, 100, 100, 255, 255); // blue border
draw_rectangle(renderer, 69, 655, 886, 90, 0, 0, 0, 255); // black rectangle
draw_text(renderer, "Confirm Backup", 93, 670, 50);

SDL_RenderPresent(renderer);
}

// Draw overwrite menu
void draw_overwrite_menu(SDL_Renderer* renderer, const char* backup_path) {
draw_background(renderer, 16, 16, 16, 255);

// Top Bar
draw_rectangle(renderer, 0, 0, 1920, 90, 153, 0, 153, 255);
draw_text(renderer, "Wii U Account Swap", 64, 10, 50);
draw_text(renderer, APP_VERSION, 64 + get_text_width("Wii U Account Swap", 50) + 16, 10, 50, {176, 176, 176, 255});
draw_text(renderer, "Nightkingale", 1920 - 64 - get_text_width("Nightkingale", 50), 10, 50);

// Bottom Bar
draw_rectangle(renderer, 0, 940, 1920, 140, 153, 0, 153, 255);
draw_text(renderer, "Current User: ", 64, 955, 40);
draw_text(renderer, MII_NICKNAME.c_str(), 64 + get_text_width("Current User: ", 40), 955, 40, {176, 176, 176, 255});
draw_text(renderer, ACCOUNT_FILE.c_str(), 64, 1005, 40);

// Warning text
draw_text(renderer, "Backup: Please read the following and confirm!", 64, 160, 50);

draw_text(renderer, "This will overwrite the existing backup file:", 64, 270, 50);
draw_text(renderer, backup_path, 64, 330, 50);
draw_text(renderer, "Are you sure you want to overwrite this file?", 64, 390, 50);

// Draw a confirm button with border
draw_rectangle(renderer, 64, 650, 896, 100, 100, 100, 255, 255); // blue border
draw_rectangle(renderer, 69, 655, 886, 90, 0, 0, 0, 255); // black rectangle
draw_text(renderer, "Confirm Overwrite", 93, 670, 50);

SDL_RenderPresent(renderer);
}
Expand All @@ -112,24 +226,63 @@ bool new_graphics() {
return false;
}

draw_menu_screen(renderer);

SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);

bool is_running = true;
int selected_option = 0;
const int NUM_OPTIONS = 4;

while (is_running) {
VPADStatus input;
VPADReadError error;

VPADRead(VPAD_CHAN_0, &input, 1, &error);

if (input.trigger & VPAD_BUTTON_X) {
int button = read_input();

if (button == VPAD_BUTTON_UP) {
selected_option--;
if (selected_option < 0) {
selected_option = NUM_OPTIONS - 1;
}
} else if (button == VPAD_BUTTON_DOWN) {
selected_option++;
if (selected_option >= NUM_OPTIONS) {
selected_option = 0;
}
} else if (button == VPAD_BUTTON_A) {
switch (selected_option) {
case 0:
break;
case 1:
break;
case 2:
while (is_running) {
draw_backup_menu(renderer);
button = read_input();

if (button == VPAD_BUTTON_A) {
break;
} else if (button == VPAD_BUTTON_B) {
break;
}
}
case 3:
while (is_running) {
draw_unlink_menu(renderer);
button = read_input();

if (button == VPAD_BUTTON_A) {
break;
} else if (button == VPAD_BUTTON_B) {
break;
}
}
break;
}
} else if (button == VPAD_BUTTON_X) {
is_running = false;
}

draw_menu_screen(renderer, selected_option);
}

SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);

SDL_Quit();

return true;
Expand Down
12 changes: 12 additions & 0 deletions source/input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ int read_input() {
const int vpad_buttons[] = {
VPAD_BUTTON_A,
VPAD_BUTTON_B,
VPAD_BUTTON_X,
VPAD_BUTTON_UP,
VPAD_BUTTON_DOWN,
VPAD_BUTTON_PLUS,
VPAD_BUTTON_MINUS
};
Expand All @@ -31,6 +34,9 @@ int read_input() {
const int wpad_buttons[] = {
WPAD_BUTTON_A,
WPAD_BUTTON_B,
WPAD_BUTTON_1,
WPAD_BUTTON_UP,
WPAD_BUTTON_DOWN,
WPAD_BUTTON_PLUS,
WPAD_BUTTON_MINUS
};
Expand All @@ -39,6 +45,9 @@ int read_input() {
const int wpad_classic_buttons[] = {
WPAD_CLASSIC_BUTTON_A,
WPAD_CLASSIC_BUTTON_B,
WPAD_CLASSIC_BUTTON_X,
WPAD_CLASSIC_BUTTON_UP,
WPAD_CLASSIC_BUTTON_DOWN,
WPAD_CLASSIC_BUTTON_PLUS,
WPAD_CLASSIC_BUTTON_MINUS
};
Expand All @@ -47,6 +56,9 @@ int read_input() {
const int wpad_pro_buttons[] = {
WPAD_PRO_BUTTON_A,
WPAD_PRO_BUTTON_B,
WPAD_PRO_BUTTON_X,
WPAD_PRO_BUTTON_UP,
WPAD_PRO_BUTTON_DOWN,
WPAD_PRO_BUTTON_PLUS,
WPAD_PRO_BUTTON_MINUS
};
Expand Down

0 comments on commit cc6f436

Please sign in to comment.