static void drawPluginProgress(const Common::String &filename) { ta_sync(); void *mark = ta_txmark(); const char *fn = filename.c_str(); Label lab1, lab2, lab3; char buf[32]; unsigned memleft = 0x8cf00000-((unsigned)sbrk(0)); float ffree = memleft*(1.0/(16<<20)); int fcol = (memleft < (1<<20)? 0xffff0000: (memleft < (4<<20)? 0xffffff00: 0xff00ff00)); snprintf(buf, sizeof(buf), "%dK free memory", memleft>>10); if (fn[0] == '/') fn++; lab1.create_texture("Loading plugins, please wait..."); lab2.create_texture(fn); lab3.create_texture(buf); ta_begin_frame(); draw_solid_quad(80.0, 270.0, 560.0, 300.0, 0xff808080, 0xff808080, 0xff808080, 0xff808080); draw_solid_quad(85.0, 275.0, 555.0, 295.0, 0xff202020, 0xff202020, 0xff202020, 0xff202020); draw_solid_quad(85.0, 275.0, 85.0+470.0*ffree, 295.0, fcol, fcol, fcol, fcol); ta_commit_end(); lab1.draw(100.0, 150.0, 0xffffffff); lab2.draw(100.0, 190.0, 0xffaaffaa); lab3.draw(100.0, 230.0, 0xffffffff); ta_commit_frame(); ta_sync(); ta_txrelease(mark); }
void dlgabout() { char work[32]; const char str_auth[] = "Yui/Punyu/Studio Milmake"; float x,y; tx_resetwork(); icon.create_texture(); milstr_ncpy(work, str_xmil, NELEMENTS(work)); milstr_ncat(work, str_space, NELEMENTS(work)); milstr_ncat(work, xmilversion, NELEMENTS(work)); float base_width = MAX_MENU_SIZE; float base_height = (ui_font_height() + 5) * 3 + (32 + 5) + 6; float offx = ui_offx() + (ui_width() - base_width) / 2; float offy = ui_offy() + (ui_height() - base_height) / 2; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); draw_transquad(offx, offy, offx + base_width, offy + base_height, UI_BS, UI_BS, UI_BS, UI_BS); x = offx + (base_width - strlen(mstr_about) * ui_font_width()) / 2; y = offy; ui_font_draw(x, y, 255, 255, 255, mstr_about); y += ui_font_height() + 5; draw_transquad(offx, y, offx + base_width, y + 1, MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255)); y += 6; x = offx + (base_width - strlen(work) * ui_font_width()) / 2; ui_font_draw(x, y, 255, 255, 255, work); y += ui_font_height() + 5; x = offx + (base_width - 32) / 2; icon.drawIcon(x, y); y += 32 + 5; x = offx + (base_width - strlen(str_auth) * ui_font_width()) / 2; ui_font_draw(x, y, 255, 255, 255, str_auth); x = ui_offx(); y = ui_height() - ui_font_height(); ui_font_draw(x, y, 255, 255, 255, "B:Back"); ta_commit_frame(); for (;;) { uisys_task(); if(ui_keypressed(JOY_B)) break; } }
void waitForDisk() { Label lab; int wasopen = 0; ta_sync(); void *mark = ta_txmark(); lab.create_texture("Please insert game CD."); //printf("waitForDisk, cdstate = %d\n", getCdState()); for (;;) { int s = getCdState(); if (s >= 6) wasopen = 1; if (s > 0 && s < 6 && wasopen) { cdfs_reinit(); chdir("/"); chdir("/"); ta_sync(); ta_txrelease(mark); return; } ta_begin_frame(); drawBackground(); ta_commit_end(); lab.draw(166.0, 200.0, 0xffff2020); ta_commit_frame(); int mousex = 0, mousey = 0; byte shiftFlags; int mask = getimask(); setimask(15); handleInput(locked_get_pads(), mousex, mousey, shiftFlags); setimask(mask); } }
int snd_menu(Sound *menu, int num_items) { float x,y; float base_width = MAX_MENU_SIZE; float base_height = ((menu[num_items-1].y + ui_font_height()) - menu[0].y); int menu_pos; char work[32]; int max_menu = 0; base_height += ui_font_height() * 2; for (int i = 0; i < num_items; ++i) { switch (menu[i].type) { case DLGTYPE_RADIO: case DLGTYPE_CHECK: case DLGTYPE_SLIDER: ++max_menu; break; } } int result = -1; int id = 0; int sel = 0; #if 0 int max_val = 0; int min_val = 0; int val_index = 0; #endif float offx = ui_offx() + (ui_width() - base_width) / 2; float offy = ui_offy() + (ui_height() - base_height) / 2; int fade = 128; for (;;) { uisys_task(); if (ui_keyrepeat(JOY_UP)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: break; default: if (--sel < 0) sel = max_menu - 1; } } else if (ui_keyrepeat(JOY_DOWN)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: break; default: if (++sel > (max_menu - 1)) sel = 0; } } #if 0 else if (ui_keyrepeat(JOY_RIGHT) || ui_keyrepeat(JOY_RTRIGGER)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: if (++val_index > max_val) val_index = max_val; break; default: if (++menu_index > 1) { menu_index = 1; } else { return 0; } } } else if (ui_keyrepeat(JOY_LEFT) || ui_keyrepeat(JOY_LTRIGGER)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: if (--val_index < min_val) val_index = min_val; break; default: if (--menu_index < 0) { menu_index = 0; } else { return 0; } } } #endif if (ui_keypressed(JOY_A)) { switch (id) { case DID_JOYPAD1: menudlg_setval(id, !menudlg_getval(id)); break; case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: dlg_btn(id); break; } } if (ui_keypressed(JOY_B)) { switch (result) { case DID_PAD1_1A: case DID_PAD1_1B: case DID_PAD1_1C: case DID_PAD1_1D: case DID_PAD1_2A: case DID_PAD1_2B: case DID_PAD1_2C: case DID_PAD1_2D: case DID_PAD1_RA: case DID_PAD1_RB: case DID_PAD1_RC: case DID_PAD1_RD: result = -1; break; default: if (result < 0) return -1; } } if ((fade += 255/60) > 255) fade = 128; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); draw_transquad(offx, offy, offx + base_width, offy + base_height, UI_BS, UI_BS, UI_BS, UI_BS); OEMSPRINTF(work, "%s ", mstr_snd); x = offx + (base_width - strlen(work) * ui_font_width()) / 2; y = offy; ui_font_draw(x, y, 255, 255, 255, work); y += ui_font_height(); x = offx; draw_transquad(offx, y, offx + base_width, y + 1, MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255), MAKECOL32(128, 128, 128, 255)); y += 6; menu_pos = 0; for (int i = 0; i < num_items; ++i) { int r = menu[i].r; int g = menu[i].g; int b = menu[i].b; switch (menu[i].type) { case DLGTYPE_RADIO: case DLGTYPE_CHECK: if (menu_pos == sel) { draw_transquad(offx, y + menu[i].y, offx + base_width, y + menu[i].y + ui_font_height() + 5, MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade), MAKECOL32(255, 0, 0, fade)); id = menu[i].id; } switch (menu[i].id) { default: if (menudlg_getval(menu[i].id)) draw_pointer(x + menu[i].x - ui_font_width(), y + menu[i].y, 1); } ui_font_draw(x + menu[i].x, y + menu[i].y, r, g, b, (const char *)menu[i].arg); ++menu_pos; break; } } for (int i = 0; i < num_items; ++i) { switch (menu[i].type) { case DLGTYPE_FRAME: case DLGTYPE_LTEXT: case DLGTYPE_RTEXT: ui_font_draw(x + menu[i].x, y + menu[i].y, menu[i].r, menu[i].g, menu[i].b, (const char *)menu[i].arg); break; } } x = ui_offx(); y = ui_height() - ui_font_height(); switch (result) { default: ui_font_draw(x, y, 255, 255, 255, "A:Select B:Back"); } ta_commit_frame(); } }
int gameMenu(Game *games, int num_games) { int top_game = 0, selector_pos = 0; int mousex = 0, mousey = 0; float y; if (!num_games) return -1; for (;;) { if (getCdState()>=6) return -1; ta_begin_frame(); drawBackground(); ta_commit_end(); y = 40.0; for (int i=top_game, cnt=0; cnt<10 && i<num_games; i++, cnt++) { int pal = 48+(i&15); if (cnt == selector_pos) draw_trans_quad(100.0, y, 590.0, y+32.0, 0x7000ff00, 0x7000ff00, 0x7000ff00, 0x7000ff00); games[i].icon.setPalette(pal); drawGameLabel(games[i], pal, 50.0, y, (cnt == selector_pos? 0xffff00 : 0xffffff)); y += 40.0; } ta_commit_frame(); byte shiftFlags; int event; int mask = getimask(); setimask(15); event = handleInput(locked_get_pads(), mousex, mousey, shiftFlags); setimask(mask); if (event==-Common::EVENT_LBUTTONDOWN || event==Common::KEYCODE_RETURN || event==Common::KEYCODE_F5) { int selected_game = top_game + selector_pos; for (int fade=0; fade<=256; fade+=4) { ta_begin_frame(); drawBackground(); ta_commit_end(); y = 40.0; if (fade < 256) for (int i=top_game, cnt=0; cnt<10 && i<num_games; i++, cnt++, y += 40.0) if (cnt != selector_pos) drawGameLabel(games[i], 48+(i&15), 50.0, y, 0xffffff, fade); y = (40.0/256.0 * (selector_pos + 1))*(256-fade) + 80.0/256.0*fade; float x = 50.0/256.0*(256-fade) + 160.0/256.0*fade; float scale = 1.0+9.0/256.0*fade; drawGameLabel(games[selected_game], 48+(selected_game&15), x, y, 0xffff00, 0, scale); ta_commit_frame(); } return selected_game; } if (mousey>=16) { if (selector_pos + top_game + 1 < num_games) if (++selector_pos >= 10) { --selector_pos; ++top_game; } mousey -= 16; } else if (mousey<=-16) { if (selector_pos + top_game > 0) if (--selector_pos < 0) { ++selector_pos; --top_game; } mousey += 16; } } }
bool dcsys_task() { enum { CMD_MENU = 1, }; int cmd = 0; Event ev; static unsigned int tick = 0; unsigned int tm = Timer() - tick; if (tm < USEC_TO_TIMER(1000000/60)) { return __dc_avail; } tick += tm; int x, y; int cJoy = 0; static int pJoy; static unsigned int repeatTime; if (__dc_avail) { dc_mouseaxis1 = 0; dc_mouseaxis2 = 0; while (PollEvent(ev)) { switch (ev.type) { case EVENT_KEYDOWN: switch (ev.key.keycode) { case KBD_S1: case KBD_S2: cmd = CMD_MENU; break; default: dckbd_keydown(ev.key.keycode); } break; case EVENT_KEYUP: dckbd_keyup(ev.key.keycode); break; case EVENT_MOUSEMOTION: dc_mouseaxis1 += ev.motion.x; dc_mouseaxis2 += ev.motion.y; break; case EVENT_MOUSEBUTTONDOWN: switch (ev.button.button) { case EVENT_BUTTON_LEFT: mousemng_buttonevent(MOUSEMNG_LEFTDOWN); break; case EVENT_BUTTON_RIGHT: mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); break; } break; case EVENT_MOUSEBUTTONUP: switch (ev.button.button) { case EVENT_BUTTON_LEFT: mousemng_buttonevent(MOUSEMNG_LEFTUP); break; case EVENT_BUTTON_RIGHT: mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; } break; case EVENT_JOYAXISMOTION: x = 0; y = 0; if (ev.jaxis.axis == 0) { x = ev.jaxis.value; } if (ev.jaxis.axis == 1) { y = ev.jaxis.value; } dc_mouseaxis1 += x; dc_mouseaxis2 += y; break; case EVENT_JOYBUTTONDOWN: if (ev.jbutton.button == JOY_START) cmd = CMD_MENU; if (ev.jbutton.button == JOY_RTRIGGER) __skbd_avail = !__skbd_avail; if (__skbd_avail && ev.jbutton.button == JOY_A) softkbddc_down(); if (__skbd_avail && ev.jbutton.button == JOY_B) __use_bg = !__use_bg; if (__skbd_avail) { cJoy = ev.jbutton.button & 0xffff; } else { switch (ev.jbutton.button) { case JOY_UP: dckbd_keydown(JOY1_UP); break; case JOY_DOWN: dckbd_keydown(JOY1_DOWN); break; case JOY_LEFT: dckbd_keydown(JOY1_LEFT); break; case JOY_RIGHT: dckbd_keydown(JOY1_RIGHT); break; case JOY_A: dckbd_keydown(JOY1_A); break; case JOY_B: dckbd_keydown(JOY1_B); break; case JOY_X: mousemng_buttonevent(MOUSEMNG_LEFTDOWN); break; case JOY_Y: mousemng_buttonevent(MOUSEMNG_RIGHTDOWN); break; } } break; case EVENT_JOYBUTTONUP: softkbddc_up(); if (__skbd_avail) { pJoy = 0; repeatTime = 0; } else { switch (ev.jbutton.button) { case JOY_UP: dckbd_keyup(JOY1_UP); break; case JOY_DOWN: dckbd_keyup(JOY1_DOWN); break; case JOY_LEFT: dckbd_keyup(JOY1_LEFT); break; case JOY_RIGHT: dckbd_keyup(JOY1_RIGHT); break; case JOY_A: dckbd_keyup(JOY1_A); break; case JOY_B: dckbd_keyup(JOY1_B); break; case JOY_X: mousemng_buttonevent(MOUSEMNG_LEFTUP); break; case JOY_Y: mousemng_buttonevent(MOUSEMNG_RIGHTUP); break; } } break; case EVENT_QUIT: __dc_avail = false; break; } } } if (__skbd_avail) { dc_joyinput = 0; int button = 0; if (cJoy) { repeatTime = Timer() + USEC_TO_TIMER(1000000/60*30); pJoy = cJoy; button = cJoy; } else if (repeatTime < Timer()) { button = pJoy; repeatTime = Timer() + USEC_TO_TIMER(1000000/60*10); } softkbddc_send(button); } else getJoyButton(JOYSTICKID1, &dc_joyinput); if (sys_updates & (SYS_UPDATECFG | SYS_UPDATEOSCFG)) { initsave(); sysmng_initialize(); } switch (cmd) { case CMD_MENU: sysmenu_menuopen(); break; } scrnmng_update(); softkbddc_draw(); ta_commit_frame(); return __dc_avail; }
void display_progress(double i, double size) { struct polygon_list mypoly; struct packed_colour_vertex_list myvertex; char str[16]; float sx, sy; const unsigned int bar_w = 320; const unsigned int bar_h = 8; float x, y; tx_resetfont(); scrnmng_update(); draw_transquad(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, UI_TR, UI_TR, UI_TR, UI_TR); x = ui_offx() + 2 * ui_font_width(); y = ui_offy() + (ui_height() - ui_font_height()+bar_h)/2; ui_font_draw(x, y - ui_font_height(), 255, 255, 255, "Loading, do not remove VMU!"); sx = ui_offx() + (ui_width()-bar_w)/2; sy = y; draw_transquad(sx, sy, sx + bar_w, sy + bar_h, MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128), MAKECOL32(64, 64, 64, 128)); mypoly.cmd = TA_CMD_POLYGON|TA_CMD_POLYGON_TYPE_TRANSPARENT|TA_CMD_POLYGON_SUBLIST| TA_CMD_POLYGON_STRIPLENGTH_2|TA_CMD_POLYGON_GOURAUD_SHADING; mypoly.mode1 = TA_POLYMODE1_Z_ALWAYS|TA_POLYMODE1_NO_Z_UPDATE; mypoly.mode2 = TA_POLYMODE2_BLEND_SRC_ALPHA|TA_POLYMODE2_BLEND_DST_INVALPHA| TA_POLYMODE2_ENABLE_ALPHA|TA_POLYMODE2_FOG_DISABLED|TA_POLYMODE2_TEXTURE_MODULATE_ALPHA; mypoly.texture = 0; mypoly.alpha = mypoly.red = mypoly.green = mypoly.blue = 0; ta_commit_list(&mypoly); myvertex.cmd = TA_CMD_VERTEX; myvertex.x = sx; myvertex.y = sy; myvertex.z = 0.5; myvertex.colour = 0xff00e0e0; myvertex.ocolour = 0; ta_commit_list(&myvertex); myvertex.x = sx + bar_w * (1.0/size) * i; ta_commit_list(&myvertex); myvertex.x = sx; myvertex.y = sy + bar_h; ta_commit_list(&myvertex); myvertex.cmd |= TA_CMD_VERTEX_EOS; myvertex.x = sx + bar_w * (1.0/size) * i; ta_commit_list(&myvertex); sprintf(str, "%3.0f", (i/size) * 100); x = sx + (bar_w - 3 * ui_font_width()) / 2; y = sy + bar_h + 2; ui_font_draw(x, y, 255, 255, 255, str); x += 3 * ui_font_width(); ui_font_draw(x, y, 255, 255, 255, "%"); ta_commit_frame(); }