#include "GUI_play.h" #include "CORE_general.h" #include "CORE_power.h" #include "gfx/all_gfx.h" /* Possible actions */ #define LIGHT 20 #define KEYS 21 #define BACK 22 /******** 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); static void priv_do_keys(u8 screen, u8 delete_spr); /*************************/ /* The connect menu process function */ void gui_play(void){ static play_state_t localstate = PLAY_INIT; switch(localstate){ case PLAY_INIT: PA_EasyBgLoad(DSCR, 3, BG_play); priv_load_sprites(DSCR); localstate = PLAY_FADEIN; if(Env.ds2key_compat){ ds2key_send_profile(&(Env.network), Env.pad_number-1); } break; case PLAY_FADEIN: if(fadein(DSCR)) return; localstate = PLAY_ACTION; break; case PLAY_ACTION: power_auto_light(&(Env.power)); if(Stylus.Newpress){ // no need to check while playing with "analog" if(priv_selected(BACK)){ Env.next_state = APP_CONNECT; localstate = PLAY_FADEOUT; network_disconnect(&(Env.network)); } else if(priv_selected(LIGHT)){ power_switch_light(&(Env.power)); } else if(priv_selected(KEYS)){ Env.turbo.enabled -= 1; // switch on/off turbo priv_do_keys(DSCR, 1); } } break; case PLAY_FADEOUT: if(fadeout(DSCR)) return; localstate = PLAY_CLEAR; break; case PLAY_CLEAR: priv_del_sprites(DSCR); PA_DeleteBg(DSCR, 3); // GFX_CONNECT_dscr localstate = PLAY_INIT; Env.current_state = Env.next_state; power_on_light(&(Env.power)); break; } return; } /*------------------------------- Private -------------------------------*/ /* Private sprite loading */ static void priv_load_sprites(u8 screen){ PA_LoadSpritePal(screen, 4, (void*)spr_play_light_Pal); PA_CreateSprite(screen, LIGHT, (void*)SPR_play_light_Sprite, OBJ_SIZE_32X32, 1, 4, 8, 8); PA_LoadSpritePal(screen, 5, (void*)spr_play_back_Pal); PA_CreateSprite(screen, BACK, (void*)SPR_play_back_Sprite, OBJ_SIZE_32X32, 1, 5, 8, 152); priv_do_keys(screen, 0); return; } static void priv_do_keys(u8 screen, u8 delete_spr){ if(delete_spr) PA_DeleteSprite(screen, KEYS); if(Env.turbo.enabled){ // turbo enabled! PA_LoadSpritePal(screen, 6, (void*)spr_play_keys_on_Pal); PA_CreateSprite(screen, KEYS, (void*)SPR_play_keys_on_Sprite, OBJ_SIZE_32X32, 1, 6, 216, 8); } else{ PA_LoadSpritePal(screen, 6, (void*)spr_play_keys_off_Pal); PA_CreateSprite(screen, KEYS, (void*)SPR_play_keys_off_Sprite, OBJ_SIZE_32X32, 1, 6, 216, 8); } } /* Private sprite deletting */ static void priv_del_sprites(u8 screen){ PA_DeleteSprite(screen, LIGHT); PA_DeleteSprite(screen, KEYS); PA_DeleteSprite(screen, BACK); return; } /* Private sprite touch Return 1 touched 0 not touched */ static u8 priv_touched(u8 icon){ return (PA_SpriteTouched(icon) && Stylus.Newpress); } /* Is the item selected? Return 1 selected 0 not selected */ static u8 priv_selected(u8 icon){ return priv_touched(icon); }