#include "GUI_connect.h" #include "GUI_common.h" #include "CORE_general.h" #include "gfx/all_gfx.h" /* Possible actions */ #define BACK 0 #define MORE 1 #define PLAYER1 2 #define PLAYER2 3 /******** PRIVATE ********/ static void priv_load_sprites(u8 screen); static void priv_del_sprites(u8 screen); static u8 priv_touched(u8 icon); static u8 priv_selected(u8 icon); /*************************/ /* The connect menu process function */ void gui_connect(void){ static connect_state_t localstate = CONNECT_INIT; switch(localstate){ case CONNECT_INIT: PA_EasyBgLoad(DSCR, 3, BG_blank); priv_load_sprites(DSCR); localstate = CONNECT_FADEIN; break; case CONNECT_FADEIN: if(fadein(DSCR)) return; localstate = CONNECT_SELECT; commons_move_in(); break; case CONNECT_SELECT: if(priv_selected(PLAYER1)){ Env.next_state = APP_PLAY; Env_SetPad(1); if(network_connect(&(Env.network))) localstate = CONNECT_MOVEOUT; } else if(priv_selected(PLAYER2)){ Env.next_state = APP_PLAY; Env_SetPad(2); if(network_connect(&(Env.network))) localstate = CONNECT_MOVEOUT; } else if(priv_selected(BACK)){ Env.next_state = APP_MAIN; localstate = CONNECT_MOVEOUT; } else if(priv_selected(MORE)){ Env.next_state = APP_CONNECT_MORE; localstate = CONNECT_MOVEOUT; } break; case CONNECT_MOVEOUT: commons_move_out(); localstate = CONNECT_FADEOUT; case CONNECT_FADEOUT: if(fadeout(DSCR)) return; localstate = CONNECT_CLEAR; break; case CONNECT_CLEAR: priv_del_sprites(DSCR); PA_DeleteBg(DSCR, 3); // GFX_CONNECT_dscr localstate = CONNECT_INIT; Env.current_state = Env.next_state; break; } return; } /*------------------------------- Private -------------------------------*/ /* Private sprite loading */ static void priv_load_sprites(u8 screen){ #define BASE_X1 24 #define BASE_Y1 48 #define BASE_X2 136 #define BASE_Y2 48 buttons_init(BUTTON_BACK, BUTTON_MORE); title_init(TITLE_CONNECT); /* Number 1 */ PA_LoadSpritePal(screen, 4, (void*)spr_player1_Pal); PA_CreateSprite(screen, (10*PLAYER1)+1, (void*)SPR_player1_0_Sprite, OBJ_SIZE_64X64, 1, 4, BASE_X1, BASE_Y1); PA_CreateSprite(screen, (10*PLAYER1)+2, (void*)SPR_player1_1_Sprite, OBJ_SIZE_32X64, 1, 4, BASE_X1+64, BASE_Y1); PA_CreateSprite(screen, (10*PLAYER1)+3, (void*)SPR_player1_2_Sprite, OBJ_SIZE_64X32, 1, 4, BASE_X1, BASE_Y1+64); PA_CreateSprite(screen, (10*PLAYER1)+4, (void*)SPR_player1_3_Sprite, OBJ_SIZE_32X32, 1, 4, BASE_X1+64, BASE_Y1+64); /* Number 2 */ PA_LoadSpritePal(screen, 5, (void*)spr_player2_Pal); PA_CreateSprite(screen, (10*PLAYER2)+1, (void*)SPR_player2_0_Sprite, OBJ_SIZE_64X64, 1, 5, BASE_X2, BASE_Y2); PA_CreateSprite(screen, (10*PLAYER2)+2, (void*)SPR_player2_1_Sprite, OBJ_SIZE_32X64, 1, 5, BASE_X2+64, BASE_Y2); PA_CreateSprite(screen, (10*PLAYER2)+3, (void*)SPR_player2_2_Sprite, OBJ_SIZE_64X32, 1, 5, BASE_X2, BASE_Y2+64); PA_CreateSprite(screen, (10*PLAYER2)+4, (void*)SPR_player2_3_Sprite, OBJ_SIZE_32X32, 1, 5, BASE_X2+64, BASE_Y2+64); return; } /* Private sprite deletting */ static void priv_del_sprites(u8 screen){ u8 i = 0; /* P1 sprites */ for(i=(10*PLAYER1)+1; i<(10*PLAYER1)+5; i++){ PA_DeleteSprite(screen, i); } /* P2 sprites */ for(i=(10*PLAYER2)+1; i<(10*PLAYER2)+5; i++){ PA_DeleteSprite(screen, i); } commons_delete(); return; } /* Private sprite touch Return 1 touched 0 not touched */ static u8 priv_touched(u8 icon){ u8 i = 0; switch(icon){ case PLAYER1: for(i=(10*PLAYER1)+1; i<(10*PLAYER1)+5; i++){ if(PA_SpriteTouched(i) && Stylus.Newpress) return 1; } break; case PLAYER2: for(i=(10*PLAYER2)+1; i<(10*PLAYER2)+5; i++){ if(PA_SpriteTouched(i) && Stylus.Newpress) return 1; } break; case BACK: return button_touch_l(); break; case MORE: return button_touch_r(); break; } return 0; } /* Is the item selected? Return 1 selected 0 not selected */ static u8 priv_selected(u8 icon){ return priv_touched(icon); }