u32 ButtonsPressed(void) { int i; u32 buttons = 0; WUPC_UpdateButtonStats(); WPAD_ScanPads(); PAD_ScanPads(); for (i = 3; i >= 0; i--) { buttons |= WUPC_ButtonsDown(i); buttons |= PAD_ButtonsDown(i); buttons |= WPAD_ButtonsDown(i); } return buttons; }
void CMenu::ScanInput() { m_show_zone_main = false; m_show_zone_main2 = false; m_show_zone_main3 = false; m_show_zone_prev = false; m_show_zone_next = false; WUPC_UpdateButtonStats(); WPAD_ScanPads(); PAD_ScanPads(); DS3_ScanPads(); ButtonsPressed(); ButtonsHeld(); LeftStick(); for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) { wd[chan] = WPAD_Data(chan); left_stick_angle[chan] = 0; left_stick_mag[chan] = 0; right_stick_angle[chan] = 0; right_stick_mag[chan] = 0; switch(wd[chan]->exp.type) { case WPAD_EXP_NUNCHUK: right_stick_mag[chan] = wd[chan]->exp.nunchuk.js.mag; right_stick_angle[chan] = wd[chan]->exp.nunchuk.js.ang; break; case WPAD_EXP_GUITARHERO3: left_stick_mag[chan] = wd[chan]->exp.nunchuk.js.mag; left_stick_angle[chan] = wd[chan]->exp.nunchuk.js.ang; break; case WPAD_EXP_CLASSIC: left_stick_mag[chan] = wd[chan]->exp.classic.ljs.mag; left_stick_angle[chan] = wd[chan]->exp.classic.ljs.ang; right_stick_mag[chan] = wd[chan]->exp.classic.rjs.mag; right_stick_angle[chan] = wd[chan]->exp.classic.rjs.ang; break; default: break; } if(enable_wmote_roll) { wmote_roll[chan] = wd[chan]->orient.roll; // Use wd[chan]->ir.angle if you only want this to work when pointing at the screen wmote_roll_skip[chan] = CalculateRepeatSpeed(wmote_roll[chan] / 45.f, wmote_roll_skip[chan]); } right_stick_skip[chan] = CalculateRepeatSpeed(right_stick_mag[chan], right_stick_skip[chan]); } for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) { m_btnMgr.setRumble(chan, WPadIR_Valid(chan), PAD_StickX(chan) < -20 || PAD_StickX(chan) > 20 || PAD_StickY(chan) < -20 || PAD_StickY(chan) > 20, WUPC_lStickX(chan) < -160 || WUPC_lStickX(chan) > 160 || WUPC_lStickY(chan) < -160 || WUPC_lStickY(chan) > 160); m_btnMgr.setMouse(WPadIR_Valid(chan) || m_show_pointer[chan]); if(WPadIR_Valid(chan)) { m_cursor[chan].draw(wd[chan]->ir.x, wd[chan]->ir.y, wd[chan]->ir.angle); m_btnMgr.mouse(chan, wd[chan]->ir.x - m_cursor[chan].width() / 2, wd[chan]->ir.y - m_cursor[chan].height() / 2); } else if(m_show_pointer[chan]) { m_cursor[chan].draw(stickPointer_x[chan], stickPointer_y[chan], 0); m_btnMgr.mouse(chan, stickPointer_x[chan] - m_cursor[chan].width() / 2, stickPointer_y[chan] - m_cursor[chan].height() / 2); } } ShowMainZone(); ShowMainZone2(); ShowMainZone3(); ShowPrevZone(); ShowNextZone(); ShowGameZone(); }
/* Big thanks to JoostinOnline for the new controller code */ u32 DetectInput(u8 DownOrHeld) { u32 pressed = 0; u32 gcpressed = 0; VIDEO_WaitVSync(); // WiiMote, Classic Controller and Wii U Pro Controller take precedence over the GCN Controller to save time if (WUPC_UpdateButtonStats() > WPAD_ERR_NONE) { if (DownOrHeld == DI_BUTTONS_DOWN) { pressed = WUPC_ButtonsDown(0) | WUPC_ButtonsDown(1) | WUPC_ButtonsDown(2) | WUPC_ButtonsDown(3); // Store pressed buttons } else { pressed = WUPC_ButtonsHeld(0) | WUPC_ButtonsHeld(1) | WUPC_ButtonsHeld(2) | WUPC_ButtonsHeld(3); // Store held buttons } } else if (WPAD_ScanPads() > WPAD_ERR_NONE) { if (DownOrHeld == DI_BUTTONS_DOWN) { pressed = WPAD_ButtonsDown(0) | WPAD_ButtonsDown(1) | WPAD_ButtonsDown(2) | WPAD_ButtonsDown(3); // Store pressed buttons } else { pressed = WPAD_ButtonsHeld(0) | WPAD_ButtonsHeld(1) | WPAD_ButtonsHeld(2) | WPAD_ButtonsHeld(3); // Store held buttons } } // Convert to WiiMote values if (pressed & WPAD_CLASSIC_BUTTON_ZR) pressed |= WPAD_BUTTON_PLUS; if (pressed & WPAD_CLASSIC_BUTTON_ZL) pressed |= WPAD_BUTTON_MINUS; if (pressed & WPAD_CLASSIC_BUTTON_PLUS) pressed |= WPAD_BUTTON_PLUS; if (pressed & WPAD_CLASSIC_BUTTON_MINUS) pressed |= WPAD_BUTTON_MINUS; if (pressed & WPAD_CLASSIC_BUTTON_A) pressed |= WPAD_BUTTON_A; if (pressed & WPAD_CLASSIC_BUTTON_B) pressed |= WPAD_BUTTON_B; if (pressed & WPAD_CLASSIC_BUTTON_X) pressed |= WPAD_BUTTON_2; if (pressed & WPAD_CLASSIC_BUTTON_Y) pressed |= WPAD_BUTTON_1; if (pressed & WPAD_CLASSIC_BUTTON_HOME) pressed |= WPAD_BUTTON_HOME; if (pressed & WPAD_CLASSIC_BUTTON_UP) pressed |= WPAD_BUTTON_UP; if (pressed & WPAD_CLASSIC_BUTTON_DOWN) pressed |= WPAD_BUTTON_DOWN; if (pressed & WPAD_CLASSIC_BUTTON_LEFT) pressed |= WPAD_BUTTON_LEFT; if (pressed & WPAD_CLASSIC_BUTTON_RIGHT) pressed |= WPAD_BUTTON_RIGHT; // Return WiiMote / Classic Controller / Wii U Pro Controller values if (pressed) return pressed; // No buttons on the WiiMote or Classic Controller were pressed if (PAD_ScanPads() > PAD_ERR_NONE) { if (DownOrHeld == DI_BUTTONS_DOWN) { gcpressed = PAD_ButtonsDown(0) | PAD_ButtonsDown(1) | PAD_ButtonsDown(2) | PAD_ButtonsDown(3); // Store pressed buttons } else { gcpressed = PAD_ButtonsHeld(0) | PAD_ButtonsHeld(1) | PAD_ButtonsHeld(2) | PAD_ButtonsHeld(3); // Store held buttons } // Convert to WiiMote values if (gcpressed & PAD_TRIGGER_R) pressed |= WPAD_BUTTON_PLUS; if (gcpressed & PAD_TRIGGER_L) pressed |= WPAD_BUTTON_MINUS; if (gcpressed & PAD_BUTTON_A) pressed |= WPAD_BUTTON_A; if (gcpressed & PAD_BUTTON_B) pressed |= WPAD_BUTTON_B; if (gcpressed & PAD_BUTTON_X) pressed |= WPAD_BUTTON_2; if (gcpressed & PAD_BUTTON_Y) pressed |= WPAD_BUTTON_1; if (gcpressed & PAD_BUTTON_MENU) pressed |= WPAD_BUTTON_HOME; if (gcpressed & PAD_BUTTON_UP) pressed |= WPAD_BUTTON_UP; if (gcpressed & PAD_BUTTON_DOWN) pressed |= WPAD_BUTTON_DOWN; if (gcpressed & PAD_BUTTON_LEFT) pressed |= WPAD_BUTTON_LEFT; if (gcpressed & PAD_BUTTON_RIGHT) pressed |= WPAD_BUTTON_RIGHT; } return pressed; }