void TASInputDlg::GetValues(u8* data, WiimoteEmu::ReportFeatures rptf, int ext, const wiimote_key key) { if (!IsShown() || !m_has_layout) return; GetKeyBoardInput(data, rptf, ext, key); u8* const coreData = rptf.core ? (data + rptf.core) : nullptr; u8* const accelData = rptf.accel ? (data + rptf.accel) : nullptr; u8* const irData = rptf.ir ? (data + rptf.ir) : nullptr; u8* const extData = rptf.ext ? (data + rptf.ext) : nullptr; if (ext != 2) { if (coreData) SetWiiButtons(&((wm_buttons*)coreData)->hex); if (accelData) { wm_accel& dt = *(wm_accel*)accelData; wm_buttons& but = *(wm_buttons*)coreData; dt.x = m_x_cont.value >> 2; dt.y = m_y_cont.value >> 2; dt.z = m_z_cont.value >> 2; but.acc_x_lsb = m_x_cont.value & 0x3; but.acc_y_lsb = m_y_cont.value >> 1 & 0x1; but.acc_z_lsb = m_z_cont.value >> 1 & 0x1; } if (irData) { u16 x[4]; u16 y; x[0] = m_main_stick.x_cont.value; y = m_main_stick.y_cont.value; x[1] = x[0] + 100; x[2] = x[0] - 10; x[3] = x[1] + 10; u8 mode; // Mode 5 not supported in core anyway. if (rptf.ext) mode = (rptf.ext - rptf.ir) == 10 ? 1 : 3; else mode = (rptf.size - rptf.ir) == 10 ? 1 : 3; if (mode == 1) { memset(irData, 0xFF, sizeof(wm_ir_basic) * 2); wm_ir_basic* ir_data = (wm_ir_basic*)irData; for (unsigned int i = 0; i < 2; ++i) { if (x[i * 2] < 1024 && y < 768) { ir_data[i].x1 = static_cast<u8>(x[i*2]); ir_data[i].x1hi = x[i*2] >> 8; ir_data[i].y1 = static_cast<u8>(y); ir_data[i].y1hi = y >> 8; } if (x[i*2 + 1] < 1024 && y < 768) { ir_data[i].x2 = static_cast<u8>(x[i*2 + 1]); ir_data[i].x2hi = x[i*2 + 1] >> 8; ir_data[i].y2 = static_cast<u8>(y); ir_data[i].y2hi = y >> 8; } } }
void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID) { if (!IsShown()) return; //TODO:: Make this instant not when polled. GetKeyBoardInput(PadStatus); SetLandRTriggers(); PadStatus->stickX = mainX; PadStatus->stickY = mainY; PadStatus->substickX = cX; PadStatus->substickY = cY; PadStatus->triggerLeft = lTrig; PadStatus->triggerRight = rTrig; if (wx_up_button->IsChecked()) PadStatus->button |= PAD_BUTTON_UP; else PadStatus->button &= ~PAD_BUTTON_UP; if (wx_down_button->IsChecked()) PadStatus->button |= PAD_BUTTON_DOWN; else PadStatus->button &= ~PAD_BUTTON_DOWN; if (wx_left_button->IsChecked()) PadStatus->button |= PAD_BUTTON_LEFT; else PadStatus->button &= ~PAD_BUTTON_LEFT; if (wx_right_button->IsChecked()) PadStatus->button |= PAD_BUTTON_RIGHT; else PadStatus->button &= ~PAD_BUTTON_RIGHT; if (wx_a_button->IsChecked()) { PadStatus->button |= PAD_BUTTON_A; PadStatus->analogA = 0xFF; } else { PadStatus->button &= ~PAD_BUTTON_A; PadStatus->analogA = 0x00; } if (wx_b_button->IsChecked()) { PadStatus->button |= PAD_BUTTON_B; PadStatus->analogB = 0xFF; } else { PadStatus->button &= ~PAD_BUTTON_B; PadStatus->analogB = 0x00; } if (wx_x_button->IsChecked()) PadStatus->button |= PAD_BUTTON_X; else PadStatus->button &= ~PAD_BUTTON_X; if (wx_y_button->IsChecked()) PadStatus->button |= PAD_BUTTON_Y; else PadStatus->button &= ~PAD_BUTTON_Y; if (wx_z_button->IsChecked()) PadStatus->button |= PAD_TRIGGER_Z; else PadStatus->button &= ~PAD_TRIGGER_Z; if (wx_start_button->IsChecked()) PadStatus->button |= PAD_BUTTON_START; else PadStatus->button &= ~PAD_BUTTON_START; if (wx_r_button->IsChecked() || rTrig >= 255) PadStatus->button |= PAD_TRIGGER_R; else PadStatus->button &= ~PAD_TRIGGER_R; if (wx_l_button->IsChecked() || lTrig >= 255) PadStatus->button |= PAD_TRIGGER_L; else PadStatus->button &= ~PAD_TRIGGER_L; ButtonTurbo(); }