// Functions bool KeyDown (int key) { int buttons = ACS_GetPlayerInput(-1, INPUT_BUTTONS); if (buttons & key) return true; return false; }
// // DU_MenuRun // void DU_MenuRun(Menu *menu) { int msgid = BASE_MSGID; // Read buttons. int buttons = ACS_GetPlayerInput(-1, INPUT_BUTTONS); int buttonsOld = ACS_GetPlayerInput(-1, INPUT_OLDBUTTONS); int buttonsNew = buttons & ~buttonsOld; // Poll and cap cursor movement. accum inputX = ACS_GetPlayerInputFixed(-1, INPUT_YAW); accum inputY = ACS_GetPlayerInputFixed(-1, INPUT_PITCH); if(ACS_GetCVar(s"invertmouse")) inputY = -inputY; menu->x -= inputX * menu->w * 2; menu->y -= inputY * menu->h * 2; if(menu->x < 0) menu->x = 0; if(menu->x > menu->w) menu->x = menu->w; if(menu->y < 0) menu->y = 0; if(menu->y > menu->h) menu->y = menu->h; if(menu->run) menu->run(menu); // Draw cursor. DU_MenuHudImage(menu, msgid++, s"CURSOR", (int)menu->x+0.1k, (int)menu->y+0.1k); // Draw buttons. for(MenuButton *button = menu->buttons; button; button = button->next) { if(button->run) button->run(button); int x = button->x + button->w/2; int y = button->y + button->h/2; DU_MenuHudText(menu, msgid++, button->txt, button->color, x, y); if(button->img[0]) DU_MenuHudImage(menu, msgid++, button->img, x, y); else DU_MenuHudClear(menu, msgid++); } // Draw labels. for(MenuLabel *label = menu->labels; label; label = label->next) { if(label->run) label->run(label); int x = label->x + label->w/2; int y = label->y + label->h/2; DU_MenuHudText(menu, msgid++, label->txt, label->color, x, y); if(label->img[0]) DU_MenuHudImage(menu, msgid++, label->img, x, y); else DU_MenuHudClear(menu, msgid++); } // Draw texts. for(MenuText *text = menu->texts; text; text = text->next) { if(text->run) text->run(text); accum x = (int)text->x + 0.1; accum y = (int)text->y + 0.1; DU_MenuHudText(menu, msgid++, text->txt, text->color, x, y); } // Mouse-over events. for(MenuButton *button = menu->buttons; button; button = button->next) { if(button->hover && menu->x >= button->x && menu->x < button->x + button->w && menu->y >= button->y && menu->y < button->y + button->h) { button->hover(button); } } // Click events. if(buttonsNew & BT_ATTACK) { for(MenuButton *button = menu->buttons; button; button = button->next) { if(button->click && menu->x >= button->x && menu->x < button->x + button->w && menu->y >= button->y && menu->y < button->y + button->h) { button->click(button); } } } }