void MenuLoop(MenuSystem *menu) { assert(menu->numExitTypes > 0); for (;; SDL_Delay(10)) { // Input InputPoll(menu->joysticks, menu->keyboard); // Update if (menu->current->type == MENU_TYPE_KEYS && menu->current->u.normal.changeKeyMenu != NULL) { MenuProcessChangeKey(menu->current); } else { int cmd = GetMenuCmd(); menu->current = MenuProcessCmd(menu->current, cmd); } if (MenuHasExitType(menu, menu->current->type)) { break; } // Draw if (menu->bkg != NULL) { memcpy( GetDstScreen(), menu->bkg, GraphicsGetMemSize(&gGraphicsDevice.cachedConfig)); } ShowControls(); MenuDisplay(menu); CopyToScreen(); } }
void MenuAddExitType(MenuSystem *menu, menu_type_e exitType) { if (MenuHasExitType(menu, exitType)) { return; } CArrayPushBack(&menu->exitTypes, &exitType); }
void MenuAddExitType(MenuSystem *menu, menu_type_e exitType) { if (MenuHasExitType(menu, exitType)) { return; } // Add the new exit type menu->numExitTypes++; CREALLOC(menu->exitTypes, menu->numExitTypes * sizeof *menu->exitTypes); menu->exitTypes[menu->numExitTypes - 1] = exitType; }
int MenuIsExit(MenuSystem *ms) { return MenuHasExitType(ms, ms->current->type); }