Add button controls and switch fully over to enums for handling account type (90% by Fangal-Airbag and zaksabeast)

This commit is contained in:
TraceEntertains 2023-07-24 22:25:49 -04:00
parent ed6d9c2df1
commit 872f20591a
10 changed files with 89 additions and 36 deletions

4
.gitignore vendored
View file

@ -6,6 +6,7 @@
*.lo
*.o
*.obj
*.lst
# Precompiled Headers
*.gch
@ -49,3 +50,6 @@ target
# VSCode
.vscode
# Publish
*.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -4,7 +4,11 @@ debug_header.png
go_back.png
header.png
nintendo_deselected.png
nintendo_btn_selected.png
nintendo_selected.png
nintendo_loaded_deselected.png
pretendo_deselected.png
pretendo_btn_selected.png
pretendo_selected.png
pretendo_loaded_deselected.png
top.png

View file

@ -4,6 +4,7 @@
extern "C" {
#endif
#include "./common.h"
#include <3ds/types.h>
#define ACT_CURRENT_ACCOUNT 0xfe

9
app/source/common.h Normal file
View file

@ -0,0 +1,9 @@
#pragma once
#include <stdint.h>
typedef enum
{
Nintendo = 1,
Pretendo = 2,
} Account;

View file

@ -4,6 +4,7 @@
extern "C" {
#endif
#include "./common.h"
#include <3ds/types.h>
typedef enum {

View file

@ -28,11 +28,11 @@
* This will also create the act account if it's missing, just to be safe.
* This will fail if the friend account hasn't been created yet.
*/
Result switchAccounts(u32 friend_account_id) {
Result switchAccounts(Account friend_account_id) {
Result rc = 0;
handleResult(FRDA_SetLocalAccountId(friend_account_id), "Switch account");
if(rc){
if (rc) {
return rc;
}
@ -50,15 +50,15 @@ Result switchAccounts(u32 friend_account_id) {
return rc;
}
Result createAccount() {
Result createAccount(Account friend_account_id) {
Result rc = 0;
// (Re)Create the friend account
handleResult(FRDA_CreateLocalAccount(2, NASC_ENV_Test, 0, 1), "Create account");
handleResult(FRDA_CreateLocalAccount(friend_account_id, (NascEnvironment)(friend_account_id - 1), 0, 1), "Create account");
// Switch to the friend/act accounts
handleResult(switchAccounts(2), "Switch account");
handleResult(switchAccounts(friend_account_id), "Switch account");
// Reset the act account
handleResult(ACTA_ResetAccount(2, true), "Reset account");
handleResult(ACTA_ResetAccount(friend_account_id, true), "Reset account");
return rc;
}
@ -68,9 +68,13 @@ C2D_Sprite debug_header;
C2D_Sprite go_back;
C2D_Sprite header;
C2D_Sprite nintendo_deselected;
C2D_Sprite nintendo_btn_selected;
C2D_Sprite nintendo_selected;
C2D_Sprite nintendo_loaded_deselected;
C2D_Sprite pretendo_deselected;
C2D_Sprite pretendo_btn_selected;
C2D_Sprite pretendo_selected;
C2D_Sprite pretendo_loaded_deselected;
C2D_Sprite top;
C2D_TextBuf g_staticBuf;
@ -91,19 +95,27 @@ static void sceneInit(void)
C2D_SpriteFromSheet(&go_back, spriteSheet, sheet_go_back_idx);
C2D_SpriteFromSheet(&header, spriteSheet, sheet_header_idx);
C2D_SpriteFromSheet(&nintendo_deselected, spriteSheet, sheet_nintendo_deselected_idx);
C2D_SpriteFromSheet(&nintendo_btn_selected, spriteSheet, sheet_nintendo_btn_selected_idx);
C2D_SpriteFromSheet(&nintendo_selected, spriteSheet, sheet_nintendo_selected_idx);
C2D_SpriteFromSheet(&nintendo_loaded_deselected, spriteSheet, sheet_nintendo_loaded_deselected_idx);
C2D_SpriteFromSheet(&pretendo_deselected, spriteSheet, sheet_pretendo_deselected_idx);
C2D_SpriteFromSheet(&pretendo_btn_selected, spriteSheet, sheet_pretendo_btn_selected_idx);
C2D_SpriteFromSheet(&pretendo_selected, spriteSheet, sheet_pretendo_selected_idx);
C2D_SpriteSetCenter(&top, 0.5f, 0.5f);
C2D_SpriteFromSheet(&pretendo_loaded_deselected, spriteSheet, sheet_pretendo_loaded_deselected_idx);
C2D_SpriteSetCenter(&top, 0.49f, 0.49f);
C2D_SpriteSetPos(&top, 400/2, 240/2);
C2D_SpriteSetPos(&debug_button, 107, 192);
C2D_SpriteSetPos(&debug_header, 27, 22);
C2D_SpriteSetPos(&go_back, 0, 214);
C2D_SpriteSetPos(&header, 95, 14);
C2D_SpriteSetPos(&pretendo_selected, 49, 59);
C2D_SpriteSetPos(&pretendo_btn_selected, 49, 59);
C2D_SpriteSetPos(&pretendo_deselected, 49, 59);
C2D_SpriteSetPos(&pretendo_loaded_deselected, 49, 59);
C2D_SpriteSetPos(&nintendo_selected, 165, 59);
C2D_SpriteSetPos(&nintendo_btn_selected, 165, 59);
C2D_SpriteSetPos(&nintendo_deselected, 165, 59);
C2D_SpriteSetPos(&nintendo_loaded_deselected, 165, 59);
}
static void sceneRenderTop()
@ -111,24 +123,6 @@ static void sceneRenderTop()
C2D_DrawSprite(&top);
}
static void sceneRenderBottom()
{
if(screen == 0){
if(current_account == 0 || act_account_count == 1){
C2D_DrawSprite(&nintendo_selected);
C2D_DrawSprite(&pretendo_deselected);
}else{
C2D_DrawSprite(&nintendo_deselected);
C2D_DrawSprite(&pretendo_selected);
}
C2D_DrawSprite(&header);
//C2D_DrawSprite(&debug_button);
}/*else{
C2D_DrawSprite(&debug_header);
C2D_DrawSprite(&go_back);
}*/
}
static void sceneExit(void)
{
}
@ -154,9 +148,10 @@ int main()
handleResult(ACTA_GetPersistentId(&current_persistent_id, ACT_CURRENT_ACCOUNT), "Current persistent id");
handleResult(ACTA_GetPersistentId(&pretendo_persistent_id, act_account_index), "Current persistent id");
if(current_persistent_id == pretendo_persistent_id){
if (current_persistent_id == pretendo_persistent_id) {
current_account = 1;
}else{
}
else {
current_account = 0;
}
@ -172,28 +167,33 @@ int main()
ACTA_GetAccountCount(&act_account_count);
Account buttonSelected = (Account)(current_account + 1);
// Main loop
while (aptMainLoop())
{
while (aptMainLoop()) {
hidScanInput();
touchPosition touch;
hidTouchRead(&touch);
u32 kDown = hidKeysDown();
if (kDown & KEY_START) break;
if(kDown & KEY_TOUCH){
if((touch.px >= 165 && touch.px <= 165 + 104) && (touch.py >= 59 && touch.py <= 59 + 113)){
switchAccounts(1);
if (kDown & KEY_TOUCH) {
if ((touch.px >= 165 && touch.px <= 165 + 104) && (touch.py >= 59 && touch.py <= 59 + 113)) {
switchAccounts(buttonSelected);
needsReboot = true;
break;
}else if((touch.px >= 49 && touch.px <= 49 + 104) && (touch.py >= 59 && touch.py <= 59 + 113)){
if(switchAccounts(2)){
createAccount(2);
}
else if ((touch.px >= 49 && touch.px <= 49 + 104) && (touch.py >= 59 && touch.py <= 59 + 113)) {
if (switchAccounts(buttonSelected)) {
createAccount(buttonSelected);
}
needsReboot = true;
break;
}
}
else if (kDown & KEY_LEFT || kDown & KEY_RIGHT) {
buttonSelected = buttonSelected == Pretendo ? Nintendo : Pretendo;
}
// Render the scene
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
@ -202,7 +202,41 @@ int main()
sceneRenderTop();
C2D_TargetClear(bottom_screen, C2D_Color32(21, 22, 28, 0xFF));
C2D_SceneBegin(bottom_screen);
sceneRenderBottom();
if (screen == 0) {
if (buttonSelected == Nintendo) {
if (current_account == NASC_ENV_Prod) {
C2D_DrawSprite(&nintendo_selected);
C2D_DrawSprite(&pretendo_deselected);
}
else {
C2D_DrawSprite(&nintendo_btn_selected);
C2D_DrawSprite(&pretendo_loaded_deselected);
}
}
else if (buttonSelected == Pretendo) {
if (current_account == NASC_ENV_Test) {
C2D_DrawSprite(&nintendo_deselected);
C2D_DrawSprite(&pretendo_selected);
}
else {
C2D_DrawSprite(&nintendo_loaded_deselected);
C2D_DrawSprite(&pretendo_btn_selected);
}
}
C2D_DrawSprite(&header);
//C2D_DrawSprite(&debug_button);
}
/*else {
C2D_DrawSprite(&debug_header);
C2D_DrawSprite(&go_back);
}*/
if (kDown & KEY_A) {
if (switchAccounts(buttonSelected) && buttonSelected == Pretendo) {
createAccount(buttonSelected);
}
needsReboot = true;
break;
}
C3D_FrameEnd(0);
}